aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2003-05-21 00:56:00 +0000
committerRoland McGrath <roland@gnu.org>2003-05-21 00:56:00 +0000
commit3333a7c3394cdd592086c2358d52d3e4ae16b9f1 (patch)
treeaca66cd0abd3c3768719fab29c29889562179525 /bfd
parenteecca0f7233b40a86d291755e21c38883195a1d5 (diff)
downloadgdb-3333a7c3394cdd592086c2358d52d3e4ae16b9f1.zip
gdb-3333a7c3394cdd592086c2358d52d3e4ae16b9f1.tar.gz
gdb-3333a7c3394cdd592086c2358d52d3e4ae16b9f1.tar.bz2
2003-05-19 Roland McGrath <roland@redhat.com>
* elf.c (bfd_elf_bfd_from_remote_memory): New function. * bfd-in.h: Declare it. * elfcode.h (NAME(_bfd_elf,bfd_from_remote_memory)): New function. * elf-bfd.h (struct elf_backend_data): New function pointer member elf_backend_bfd_from_remote_memory. (_bfd_elf32_bfd_from_remote_memory, _bfd_elf64_bfd_from_remote_memory): Declare them. * elfxx-target.h (elf_backend_bfd_from_remote_memory): New macro. (elfNN_bed): Add that to the initializer. 2003-05-15 Roland McGrath <roland@redhat.com> * elf.c (elfcore_grok_note): Grok NT_AUXV note, make ".auxv" section.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/elf.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/bfd/elf.c b/bfd/elf.c
index fa4416d..5e72eb0 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -6884,6 +6884,20 @@ elfcore_grok_note (abfd, note)
#else
return TRUE;
#endif
+
+ case NT_AUXV:
+ {
+ asection *sect = bfd_make_section (abfd, ".auxv");
+
+ if (sect == NULL)
+ return FALSE;
+ sect->_raw_size = note->descsz;
+ sect->filepos = note->descpos;
+ sect->flags = SEC_HAS_CONTENTS;
+ sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
+
+ return TRUE;
+ }
}
}
@@ -7535,3 +7549,27 @@ _bfd_elf_section_offset (abfd, info, sec, offset)
return offset;
}
}
+
+/* Create a new BFD as if by bfd_openr. Rather than opening a file,
+ reconstruct an ELF file by reading the segments out of remote memory
+ based on the ELF file header at EHDR_VMA and the ELF program headers it
+ points to. If not null, *LOADBASEP is filled in with the difference
+ between the VMAs from which the segments were read, and the VMAs the
+ file headers (and hence BFD's idea of each section's VMA) put them at.
+
+ The function TARGET_READ_MEMORY is called to copy LEN bytes from the
+ remote memory at target address VMA into the local buffer at MYADDR; it
+ should return zero on success or an `errno' code on failure. TEMPL must
+ be a BFD for an ELF target with the word size and byte order found in
+ the remote memory. */
+
+bfd *
+bfd_elf_bfd_from_remote_memory (templ, ehdr_vma, loadbasep, target_read_memory)
+ bfd *templ;
+ bfd_vma ehdr_vma;
+ bfd_vma *loadbasep;
+ int (*target_read_memory) PARAMS ((bfd_vma vma, char *myaddr, int len));
+{
+ return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
+ (templ, ehdr_vma, loadbasep, target_read_memory);
+}