* bfd-in.h (bfd_get_dynamic_symcount): Define.
* bfd.c (struct _bfd): Add dynsymcount. * bfd-in2.h: Regenerated. * elf.c (_bfd_elf_canonicalize_dynamic_symtab): Set abfd->dynsymcount. * elfcode.h (elf_slurp_reloc_table_from_section): Check for overflow.
This commit is contained in:
parent
ed6fb7bdf5
commit
1f70368c21
6 changed files with 32 additions and 2 deletions
|
@ -1,3 +1,13 @@
|
||||||
|
2002-09-17 Daniel Jacobowitz <drow@mvista.com>
|
||||||
|
|
||||||
|
* bfd-in.h (bfd_get_dynamic_symcount): Define.
|
||||||
|
* bfd.c (struct _bfd): Add dynsymcount.
|
||||||
|
* bfd-in2.h: Regenerated.
|
||||||
|
* elf.c (_bfd_elf_canonicalize_dynamic_symtab): Set
|
||||||
|
abfd->dynsymcount.
|
||||||
|
* elfcode.h (elf_slurp_reloc_table_from_section): Check
|
||||||
|
for overflow.
|
||||||
|
|
||||||
2002-09-17 Stan Cox <scox@redhat.com>
|
2002-09-17 Stan Cox <scox@redhat.com>
|
||||||
|
|
||||||
* elf64-mips.c (mips_elf64_be_swap_reloca_out): Handle type2 and type3.
|
* elf64-mips.c (mips_elf64_be_swap_reloca_out): Handle type2 and type3.
|
||||||
|
|
|
@ -529,6 +529,8 @@ extern void warn_deprecated
|
||||||
#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols)
|
#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols)
|
||||||
#define bfd_count_sections(abfd) ((abfd)->section_count)
|
#define bfd_count_sections(abfd) ((abfd)->section_count)
|
||||||
|
|
||||||
|
#define bfd_get_dynamic_symcount(abfd) ((abfd)->dynsymcount)
|
||||||
|
|
||||||
#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
|
#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
|
||||||
|
|
||||||
#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (boolean) (bool)), true)
|
#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (boolean) (bool)), true)
|
||||||
|
|
|
@ -535,6 +535,8 @@ extern void warn_deprecated
|
||||||
#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols)
|
#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols)
|
||||||
#define bfd_count_sections(abfd) ((abfd)->section_count)
|
#define bfd_count_sections(abfd) ((abfd)->section_count)
|
||||||
|
|
||||||
|
#define bfd_get_dynamic_symcount(abfd) ((abfd)->dynsymcount)
|
||||||
|
|
||||||
#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
|
#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
|
||||||
|
|
||||||
#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (boolean) (bool)), true)
|
#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = (boolean) (bool)), true)
|
||||||
|
@ -1629,7 +1631,6 @@ enum bfd_architecture
|
||||||
bfd_arch_v850, /* NEC V850 */
|
bfd_arch_v850, /* NEC V850 */
|
||||||
#define bfd_mach_v850 0
|
#define bfd_mach_v850 0
|
||||||
#define bfd_mach_v850e 'E'
|
#define bfd_mach_v850e 'E'
|
||||||
#define bfd_mach_v850ea 'A'
|
|
||||||
bfd_arch_arc, /* ARC Cores */
|
bfd_arch_arc, /* ARC Cores */
|
||||||
#define bfd_mach_arc_5 0
|
#define bfd_mach_arc_5 0
|
||||||
#define bfd_mach_arc_6 1
|
#define bfd_mach_arc_6 1
|
||||||
|
@ -3462,6 +3463,9 @@ struct _bfd
|
||||||
/* Symbol table for output BFD (with symcount entries). */
|
/* Symbol table for output BFD (with symcount entries). */
|
||||||
struct symbol_cache_entry **outsymbols;
|
struct symbol_cache_entry **outsymbols;
|
||||||
|
|
||||||
|
/* Used for slurped dynamic symbol tables. */
|
||||||
|
unsigned int dynsymcount;
|
||||||
|
|
||||||
/* Pointer to structure which contains architecture information. */
|
/* Pointer to structure which contains architecture information. */
|
||||||
const struct bfd_arch_info *arch_info;
|
const struct bfd_arch_info *arch_info;
|
||||||
|
|
||||||
|
|
|
@ -128,6 +128,9 @@ CODE_FRAGMENT
|
||||||
. {* Symbol table for output BFD (with symcount entries). *}
|
. {* Symbol table for output BFD (with symcount entries). *}
|
||||||
. struct symbol_cache_entry **outsymbols;
|
. struct symbol_cache_entry **outsymbols;
|
||||||
.
|
.
|
||||||
|
. {* Used for slurped dynamic symbol tables. *}
|
||||||
|
. unsigned int dynsymcount;
|
||||||
|
.
|
||||||
. {* Pointer to structure which contains architecture information. *}
|
. {* Pointer to structure which contains architecture information. *}
|
||||||
. const struct bfd_arch_info *arch_info;
|
. const struct bfd_arch_info *arch_info;
|
||||||
.
|
.
|
||||||
|
|
|
@ -5572,7 +5572,11 @@ _bfd_elf_canonicalize_dynamic_symtab (abfd, alocation)
|
||||||
asymbol **alocation;
|
asymbol **alocation;
|
||||||
{
|
{
|
||||||
struct elf_backend_data *bed = get_elf_backend_data (abfd);
|
struct elf_backend_data *bed = get_elf_backend_data (abfd);
|
||||||
return bed->s->slurp_symbol_table (abfd, alocation, true);
|
long symcount = bed->s->slurp_symbol_table (abfd, alocation, true);
|
||||||
|
|
||||||
|
if (symcount >= 0)
|
||||||
|
bfd_get_dynamic_symcount (abfd) = symcount;
|
||||||
|
return symcount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the size required for the dynamic reloc entries. Any
|
/* Return the size required for the dynamic reloc entries. Any
|
||||||
|
|
|
@ -1421,6 +1421,13 @@ elf_slurp_reloc_table_from_section (abfd, asect, rel_hdr, reloc_count,
|
||||||
|
|
||||||
if (ELF_R_SYM (rela.r_info) == 0)
|
if (ELF_R_SYM (rela.r_info) == 0)
|
||||||
relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
|
relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
|
||||||
|
else if (ELF_R_SYM (rela.r_info) > bfd_get_dynamic_symcount (abfd))
|
||||||
|
{
|
||||||
|
(*_bfd_error_handler)
|
||||||
|
(_("%s(%s): relocation %d has invalid symbol index %ld"),
|
||||||
|
abfd->filename, asect->name, i, ELF_R_SYM (rela.r_info));
|
||||||
|
relent->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
asymbol **ps, *s;
|
asymbol **ps, *s;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue