This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] memattr bounds


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



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]