diff options
author | Daniel Jacobowitz <drow@false.org> | 2006-09-21 14:00:53 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2006-09-21 14:00:53 +0000 |
commit | a76d924dffcb040b44a2bb5be026f0c974590c30 (patch) | |
tree | a347bcb3680f48f5316b790bae5ff8a4105ccf96 /gdb/memattr.c | |
parent | fd79eceebf094938376c671ea3538a31d4f63eac (diff) | |
download | gdb-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.c | 15 |
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; } } |