This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [PATCH] memattr bounds
- From: Andrew Cagney <ac131313 at cygnus dot com>
- To: Don Howard <dhoward at redhat dot com>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Fri, 21 Jun 2002 17:20:51 -0400
- Subject: Re: [PATCH] memattr bounds
- References: <Pine.LNX.4.33.0206211201440.17436-100000@theotherone>
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