aboutsummaryrefslogtreecommitdiff
path: root/gdb/memattr.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2006-09-21 14:00:53 +0000
committerDaniel Jacobowitz <drow@false.org>2006-09-21 14:00:53 +0000
commita76d924dffcb040b44a2bb5be026f0c974590c30 (patch)
treea347bcb3680f48f5316b790bae5ff8a4105ccf96 /gdb/memattr.c
parentfd79eceebf094938376c671ea3538a31d4f63eac (diff)
downloadgdb-a76d924dffcb040b44a2bb5be026f0c974590c30.zip
gdb-a76d924dffcb040b44a2bb5be026f0c974590c30.tar.gz
gdb-a76d924dffcb040b44a2bb5be026f0c974590c30.tar.bz2
* Makefile.in (SFILES): Add target-memory.c.
(COMMON_OBS): Add target-memory.o. * memattr.c (lookup_mem_region): Adjust handling for the top of memory. Improve comments. * remote.c (packet_check_result): New function, split out from packet_ok. Recognize "E." as an error prefix. (packet_ok): Use it. (remote_write_bytes_aux): New function, renamed from remote_write_bytes. Take packet header, packet format, and length flag as arguments. (remote_write_bytes): Rewrite to use remote_write_bytes_aux. (remote_send_printf, restore_remote_timeout) (remote_flash_timeout, remote_flash_erase, remote_flash_write) (remote_flash_done): New. (remote_xfer_partial): Handle flash writes. (init_remote_ops, init_remote_async_ops): Set to_flash_erase and to_flash_done. * symfile.c (struct load_section_data): Include a pointer to the cumulative stats and a request queue. Move most members to other types. (struct load_progress_data, struct load_progress_section_data): New types. (load_progress): Handle a NULL baton and zero bytes. Update for type changes. (load_section_callback): Create memory write requests instead of writing to memory. Don't print the progress message here. (clear_memory_write_data): New function. (generic_load): Use target_write_memory_blocks. * target-memory.c: New file. * target.c (update_current_target): Mention new uninherited methods. (memory_xfer_partial): Issue an error for flash writes. (target_flash_erase, target_flash_done): New functions. (target_write_with_progress): Call the progress callback at the start also. * target.h (enum target_object): Add TARGET_OBJECT_FLASH. (target_write_with_progress): Update comment. (struct target_ops): Add to_flash_erase and to_flash_done. (target_flash_erase, target_flash_done, struct memory_write_request) (memory_write_request_s, enum flash_preserve_mode) (target_write_memory_blocks): New, including a vector type for memory_write_request_s.
Diffstat (limited to 'gdb/memattr.c')
-rw-r--r--gdb/memattr.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/gdb/memattr.c b/gdb/memattr.c
index 70f625b..889d03a 100644
--- a/gdb/memattr.c
+++ b/gdb/memattr.c
@@ -209,10 +209,11 @@ lookup_mem_region (CORE_ADDR addr)
redefined to describe the minimal region containing ADDR. LO
and HI are used in the case where no memory region is defined
that contains ADDR. If a memory region is disabled, it is
- treated as if it does not exist. */
+ treated as if it does not exist. The initial values for LO
+ and HI represent the bottom and top of memory. */
- lo = (CORE_ADDR) 0;
- hi = (CORE_ADDR) ~ 0;
+ lo = 0;
+ hi = 0;
/* If we ever want to support a huge list of memory regions, this
check should be replaced with a binary search (probably using
@@ -224,10 +225,16 @@ lookup_mem_region (CORE_ADDR addr)
if (addr >= m->lo && (addr < m->hi || m->hi == 0))
return m;
+ /* This (correctly) won't match if m->hi == 0, representing
+ the top of the address space, because CORE_ADDR is unsigned;
+ no value of LO is less than zero. */
if (addr >= m->hi && lo < m->hi)
lo = m->hi;
- if (addr <= m->lo && hi > m->lo)
+ /* This will never set HI to zero; if we're here and ADDR
+ is at or below M, and the region starts at zero, then ADDR
+ would have been in the region. */
+ if (addr <= m->lo && (hi == 0 || hi > m->lo))
hi = m->lo;
}
}