* 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.
This commit is contained in:
parent
a64bcdd8d3
commit
98d8431c7d
@ -1,3 +1,10 @@
|
||||
1999-11-29 Jim Blandy <jimb@cygnus.com>
|
||||
|
||||
* 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.
|
||||
|
||||
1999-11-27 Michael Meissner <meissner@cygnus.com>
|
||||
|
||||
* reloc.c (BFD_RELOC_ALPHA_USER_LITERAL): New relocation for
|
||||
|
@ -3091,6 +3091,22 @@ bfd_set_format PARAMS ((bfd *abfd, bfd_format format));
|
||||
CONST char *
|
||||
bfd_format_string PARAMS ((bfd_format format));
|
||||
|
||||
|
||||
/* 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. */
|
||||
extern long bfd_get_elf_phdr_upper_bound PARAMS ((bfd *abfd));
|
||||
|
||||
/* 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. */
|
||||
extern int bfd_get_elf_phdrs PARAMS ((bfd *abfd, void *phdrs));
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
48
bfd/elf.c
48
bfd/elf.c
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user