mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-18 05:12:33 +08:00
* 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.
This commit is contained in:
@ -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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user