Re: [PATCH] memattr bounds

Andrew Cagney
2002-06-21T21:20:57Z

> The following addresses edge conditions in the mem command by making a
> special case for upper bound == 0. When the upper bound is zero, it is
> assumed that the user wants an upper bound of max CORE_ADDR+1. Currently,
> it's not possible to define a memory region with zero as it's upper bound,
> so this should not conflict with any current usage.

Don't forget to follow up with something for the doco.

> The patch also corrects a bug that allowes the definition of overlapping
> memory regions, where the new region starts below an existing region and
> extends above it. (Or does someone think that is a feature?)

I would treat it as a bug.

Some of the simulators have a mechanism that is similar to memattr where
the address map is layered and each address range is assigned to a
layer. Within a layer things can't overlap but between layers they can
- this making the search well defined. Adding such a mechanism to
memattr would be a useful but perhaps best left to the reader :-)

> 2002-06-21 Don Howard <dhoward@redhat.com>
>
> * memattr.c (create_mem_region): Treat hi == 0 as a special case
> that means max CORE_ADDR+1.
> (lookup_mem_region): Ditto.
> (mem_info_command): Ditto.
>
>

Yes,

1.5 tweaks:

> - if ((lo >= n->lo && lo < n->hi) ||
> - (hi > n->lo && hi <= n->hi))
> + if ((lo >= n->lo && (lo < n->hi || n->hi == 0)) ||
> + (hi > n->lo && (hi <= n->hi || n->hi == 0)) ||
> + (lo <= n->lo && (hi >= n->hi || hi == 0)))

The ``||'' goes at the start of the line (the old code was also wrong :-)

> if (TARGET_ADDR_BIT <= 32)
> - tmp = local_hex_string_custom ((unsigned long) m->hi, "08l");
> + tmp = local_hex_string_custom ((unsigned long) (m->hi ? m->hi : ~0), "08l");
> else
> - tmp = local_hex_string_custom ((unsigned long) m->hi, "016l");
> + tmp = local_hex_string_custom ((unsigned long) (m->hi ? m->hi : ~0), "016l");
>

Consider lifting the ``(m->hi ? m->hi : ~0)'' out to before the if().

which ever, it can then go straight in.
Andrew