diff options
author | Andrew Cagney <cagney@redhat.com> | 2003-10-17 20:17:51 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2003-10-17 20:17:51 +0000 |
commit | 8db32d44ca88f0560e8a81aec6889fd1f8c7d348 (patch) | |
tree | 498d3a81ceb157dd793db5e92f967df83f8cc8e4 /gdb/target.c | |
parent | 1e3ff5ad7f7cd527f735fe5f36e20ba378f87f96 (diff) | |
download | gdb-8db32d44ca88f0560e8a81aec6889fd1f8c7d348.zip gdb-8db32d44ca88f0560e8a81aec6889fd1f8c7d348.tar.gz gdb-8db32d44ca88f0560e8a81aec6889fd1f8c7d348.tar.bz2 |
2003-10-17 Andrew Cagney <cagney@redhat.com>
* target.c (target_section_by_addr): New function.
(do_xfer_memory): Use "target_section_by_addr".
* target.h (target_section_by_addr): Declare.
Diffstat (limited to 'gdb/target.c')
-rw-r--r-- | gdb/target.c | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/gdb/target.c b/gdb/target.c index 252cb14..c763af3 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -814,6 +814,21 @@ done: return nbytes_read; } +/* Find a section containing ADDR. */ +struct section_table * +target_section_by_addr (struct target_ops *target, CORE_ADDR addr) +{ + struct section_table *secp; + for (secp = target->to_sections; + secp < target->to_sections_end; + secp++) + { + if (addr >= secp->addr && addr < secp->endaddr) + return secp; + } + return NULL; +} + /* Read LEN bytes of target memory at address MEMADDR, placing the results in GDB's memory at MYADDR. Returns either 0 for success or an errno value if any error occurs. @@ -861,22 +876,15 @@ do_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write, if (!write && trust_readonly) { + struct section_table *secp; /* User-settable option, "trust-readonly-sections". If true, then memory from any SEC_READONLY bfd section may be read - directly from the bfd file. */ - - struct section_table *secp; - - for (secp = current_target.to_sections; - secp < current_target.to_sections_end; - secp++) - { - if (bfd_get_section_flags (secp->bfd, secp->the_bfd_section) - & SEC_READONLY) - if (memaddr >= secp->addr && memaddr < secp->endaddr) - return xfer_memory (memaddr, myaddr, len, 0, - attrib, ¤t_target); - } + directly from the bfd file. */ + secp = target_section_by_addr (¤t_target, memaddr); + if (secp != NULL + && (bfd_get_section_flags (secp->bfd, secp->the_bfd_section) + & SEC_READONLY)) + return xfer_memory (memaddr, myaddr, len, 0, attrib, ¤t_target); } /* The quick case is that the top target can handle the transfer. */ |