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.
This commit is contained in:
parent
1e3ff5ad7f
commit
8db32d44ca
3 changed files with 31 additions and 14 deletions
|
@ -1,5 +1,9 @@
|
|||
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.
|
||||
|
||||
* target.h (struct target_ops): Add "to_read_partial" and
|
||||
"to_write_partial", delete "to_query".
|
||||
(target_read_partial, target_write_partial): Declare.
|
||||
|
|
34
gdb/target.c
34
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);
|
||||
}
|
||||
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. */
|
||||
|
|
|
@ -1147,6 +1147,11 @@ struct section_table
|
|||
bfd *bfd; /* BFD file pointer */
|
||||
};
|
||||
|
||||
/* Return the "section" containing the specified address. */
|
||||
struct section_table *target_section_by_addr (struct target_ops *target,
|
||||
CORE_ADDR addr);
|
||||
|
||||
|
||||
/* Builds a section table, given args BFD, SECTABLE_PTR, SECEND_PTR.
|
||||
Returns 0 if OK, 1 on error. */
|
||||
|
||||
|
|
Loading…
Reference in a new issue