diff options
author | Jim Blandy <jimb@codesourcery.com> | 1999-11-29 20:33:38 +0000 |
---|---|---|
committer | Jim Blandy <jimb@codesourcery.com> | 1999-11-29 20:33:38 +0000 |
commit | 98d8431c7d2f12be9f39abae99af3f8e8efc524d (patch) | |
tree | d5a36252de8615ab8e8e953db2cd6d45d16d9ea2 /bfd/elf.c | |
parent | a64bcdd8d378b892077d2a9ba108f310fa2b9e5b (diff) | |
download | binutils-98d8431c7d2f12be9f39abae99af3f8e8efc524d.zip binutils-98d8431c7d2f12be9f39abae99af3f8e8efc524d.tar.gz binutils-98d8431c7d2f12be9f39abae99af3f8e8efc524d.tar.bz2 |
* elf.c (bfd_get_elf_phdrs, bfd_get_elf_phdr_upper_bound): New
functions.
* bfd-in2.h (bfd_get_elf_phdrs, bfd_get_elf_phdr_upper_bound): New
declarations.
Diffstat (limited to 'bfd/elf.c')
-rw-r--r-- | bfd/elf.c | 48 |
1 files changed, 48 insertions, 0 deletions
@@ -5359,3 +5359,51 @@ _bfd_elfcore_section_from_phdr (abfd, phdr, sec_num) return true; } + + +/* Providing external access to the ELF program header table. */ + +/* Return an upper bound on the number of bytes required to store a + copy of ABFD's program header table entries. Return -1 if an error + occurs; bfd_get_error will return an appropriate code. */ +long +bfd_get_elf_phdr_upper_bound (abfd) + bfd *abfd; +{ + if (abfd->xvec->flavour != bfd_target_elf_flavour) + { + bfd_set_error (bfd_error_wrong_format); + return -1; + } + + return (elf_elfheader (abfd)->e_phnum + * sizeof (Elf_Internal_Phdr)); +} + + +/* Copy ABFD's program header table entries to *PHDRS. The entries + will be stored as an array of Elf_Internal_Phdr structures, as + defined in include/elf/internal.h. To find out how large the + buffer needs to be, call bfd_get_elf_phdr_upper_bound. + + Return the number of program header table entries read, or -1 if an + error occurs; bfd_get_error will return an appropriate code. */ +int +bfd_get_elf_phdrs (abfd, phdrs) + bfd *abfd; + void *phdrs; +{ + int num_phdrs; + + if (abfd->xvec->flavour != bfd_target_elf_flavour) + { + bfd_set_error (bfd_error_wrong_format); + return -1; + } + + num_phdrs = elf_elfheader (abfd)->e_phnum; + memcpy (phdrs, elf_tdata (abfd)->phdr, + num_phdrs * sizeof (Elf_Internal_Phdr)); + + return num_phdrs; +} |