forked from Imagelibrary/binutils-gdb
Share code on to_xfer_partial for tfile and ctf target
In the to_xfer_partial implementations of ctf and tfile, the code on reading from read-only sections is duplicated. This patch moves it to a separate function exec_read_partial_read_only. gdb: 2014-02-23 Yao Qi <yao@codesourcery.com> * ctf.c (ctf_xfer_partial): Move code to ... * exec.c (exec_read_partial_read_only): ... it. New function. * tracefile-tfile.c (tfile_xfer_partial): Likewise. * tracefile.c: Include "exec.h". * exec.h (exec_read_partial_read_only): Declare.
This commit is contained in:
47
gdb/exec.c
47
gdb/exec.c
@@ -530,6 +530,53 @@ remove_target_sections (void *owner)
|
||||
|
||||
|
||||
|
||||
enum target_xfer_status
|
||||
exec_read_partial_read_only (gdb_byte *readbuf, ULONGEST offset,
|
||||
ULONGEST len, ULONGEST *xfered_len)
|
||||
{
|
||||
/* It's unduly pedantic to refuse to look at the executable for
|
||||
read-only pieces; so do the equivalent of readonly regions aka
|
||||
QTro packet. */
|
||||
if (exec_bfd != NULL)
|
||||
{
|
||||
asection *s;
|
||||
bfd_size_type size;
|
||||
bfd_vma vma;
|
||||
|
||||
for (s = exec_bfd->sections; s; s = s->next)
|
||||
{
|
||||
if ((s->flags & SEC_LOAD) == 0
|
||||
|| (s->flags & SEC_READONLY) == 0)
|
||||
continue;
|
||||
|
||||
vma = s->vma;
|
||||
size = bfd_get_section_size (s);
|
||||
if (vma <= offset && offset < (vma + size))
|
||||
{
|
||||
ULONGEST amt;
|
||||
|
||||
amt = (vma + size) - offset;
|
||||
if (amt > len)
|
||||
amt = len;
|
||||
|
||||
amt = bfd_get_section_contents (exec_bfd, s,
|
||||
readbuf, offset - vma, amt);
|
||||
|
||||
if (amt == 0)
|
||||
return TARGET_XFER_EOF;
|
||||
else
|
||||
{
|
||||
*xfered_len = amt;
|
||||
return TARGET_XFER_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Indicate failure to find the requested memory block. */
|
||||
return TARGET_XFER_E_IO;
|
||||
}
|
||||
|
||||
VEC(mem_range_s) *
|
||||
section_table_available_memory (VEC(mem_range_s) *memory,
|
||||
CORE_ADDR memaddr, ULONGEST len,
|
||||
|
||||
Reference in New Issue
Block a user