* elfcode.h (elf_swap_symbol_in): Return bfd_boolean. Don't abort
on error. * elf-bfd.h (elf_size_info <swap_symbol_in>): Adjust decl. (bfd_elf32_swap_symbol_in, bfd_elf64_swap_symbol_in): Likewise. * elf.c (bfd_elf_get_elf_syms): Test return of swap_symbol_in, and report error. * elf32-arm.c (elf32_arm_swap_symbol_in): Return bfd_boolean.
This commit is contained in:
parent
885afe7b6f
commit
8384fb8f0c
5 changed files with 29 additions and 8 deletions
|
@ -1,3 +1,13 @@
|
|||
2006-09-22 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* elfcode.h (elf_swap_symbol_in): Return bfd_boolean. Don't abort
|
||||
on error.
|
||||
* elf-bfd.h (elf_size_info <swap_symbol_in>): Adjust decl.
|
||||
(bfd_elf32_swap_symbol_in, bfd_elf64_swap_symbol_in): Likewise.
|
||||
* elf.c (bfd_elf_get_elf_syms): Test return of swap_symbol_in,
|
||||
and report error.
|
||||
* elf32-arm.c (elf32_arm_swap_symbol_in): Return bfd_boolean.
|
||||
|
||||
2006-09-20 Martin Schwidefsky <schwidefsky@de.ibm.com>
|
||||
|
||||
* elf32-s390.c (elf_s390_relocate_section): Remove check for code
|
||||
|
|
|
@ -468,7 +468,7 @@ struct elf_size_info {
|
|||
(*write_shdrs_and_ehdr) (bfd *);
|
||||
void (*write_relocs)
|
||||
(bfd *, asection *, void *);
|
||||
void (*swap_symbol_in)
|
||||
bfd_boolean (*swap_symbol_in)
|
||||
(bfd *, const void *, const void *, Elf_Internal_Sym *);
|
||||
void (*swap_symbol_out)
|
||||
(bfd *, const Elf_Internal_Sym *, void *, void *);
|
||||
|
@ -1744,7 +1744,7 @@ extern int bfd_elf32_core_file_failing_signal
|
|||
extern bfd_boolean bfd_elf32_core_file_matches_executable_p
|
||||
(bfd *, bfd *);
|
||||
|
||||
extern void bfd_elf32_swap_symbol_in
|
||||
extern bfd_boolean bfd_elf32_swap_symbol_in
|
||||
(bfd *, const void *, const void *, Elf_Internal_Sym *);
|
||||
extern void bfd_elf32_swap_symbol_out
|
||||
(bfd *, const Elf_Internal_Sym *, void *, void *);
|
||||
|
@ -1786,7 +1786,7 @@ extern int bfd_elf64_core_file_failing_signal
|
|||
extern bfd_boolean bfd_elf64_core_file_matches_executable_p
|
||||
(bfd *, bfd *);
|
||||
|
||||
extern void bfd_elf64_swap_symbol_in
|
||||
extern bfd_boolean bfd_elf64_swap_symbol_in
|
||||
(bfd *, const void *, const void *, Elf_Internal_Sym *);
|
||||
extern void bfd_elf64_swap_symbol_out
|
||||
(bfd *, const Elf_Internal_Sym *, void *, void *);
|
||||
|
|
10
bfd/elf.c
10
bfd/elf.c
|
@ -400,7 +400,15 @@ bfd_elf_get_elf_syms (bfd *ibfd,
|
|||
for (esym = extsym_buf, isym = intsym_buf, shndx = extshndx_buf;
|
||||
isym < isymend;
|
||||
esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL)
|
||||
(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym);
|
||||
if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym))
|
||||
{
|
||||
symoffset += (esym - (bfd_byte *) extsym_buf) / extsym_size;
|
||||
(*_bfd_error_handler) (_("%B symbol number %lu references "
|
||||
"nonexistent SHT_SYMTAB_SHNDX section"),
|
||||
ibfd, (unsigned long) symoffset);
|
||||
intsym_buf = NULL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
out:
|
||||
if (alloc_ext != NULL)
|
||||
|
|
|
@ -9338,13 +9338,14 @@ elf32_arm_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
|
|||
|
||||
/* Mangle thumb function symbols as we read them in. */
|
||||
|
||||
static void
|
||||
static bfd_boolean
|
||||
elf32_arm_swap_symbol_in (bfd * abfd,
|
||||
const void *psrc,
|
||||
const void *pshn,
|
||||
Elf_Internal_Sym *dst)
|
||||
{
|
||||
bfd_elf32_swap_symbol_in (abfd, psrc, pshn, dst);
|
||||
if (!bfd_elf32_swap_symbol_in (abfd, psrc, pshn, dst))
|
||||
return FALSE;
|
||||
|
||||
/* New EABI objects mark thumb function symbols by setting the low bit of
|
||||
the address. Turn these into STT_ARM_TFUNC. */
|
||||
|
@ -9354,6 +9355,7 @@ elf32_arm_swap_symbol_in (bfd * abfd,
|
|||
dst->st_info = ELF_ST_INFO (ELF_ST_BIND (dst->st_info), STT_ARM_TFUNC);
|
||||
dst->st_value &= ~(bfd_vma) 1;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -166,7 +166,7 @@ static void elf_debug_file (Elf_Internal_Ehdr *);
|
|||
/* Translate an ELF symbol in external format into an ELF symbol in internal
|
||||
format. */
|
||||
|
||||
void
|
||||
bfd_boolean
|
||||
elf_swap_symbol_in (bfd *abfd,
|
||||
const void *psrc,
|
||||
const void *pshn,
|
||||
|
@ -188,9 +188,10 @@ elf_swap_symbol_in (bfd *abfd,
|
|||
if (dst->st_shndx == SHN_XINDEX)
|
||||
{
|
||||
if (shndx == NULL)
|
||||
abort ();
|
||||
return FALSE;
|
||||
dst->st_shndx = H_GET_32 (abfd, shndx->est_shndx);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Translate an ELF symbol in internal format into an ELF symbol in external
|
||||
|
|
Loading…
Reference in a new issue