aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf32-rx.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2015-09-23 17:23:58 +0100
committerNick Clifton <nickc@redhat.com>2015-09-23 17:23:58 +0100
commit6a40cf0c5c845683fdb82721813ebd5dd867cce5 (patch)
treeb13bf45e4cb2ce850c1252eb9201906074ebc210 /bfd/elf32-rx.c
parentbcd68f9e44a70c73bde08e612a28e413570dc039 (diff)
downloadbinutils-6a40cf0c5c845683fdb82721813ebd5dd867cce5.zip
binutils-6a40cf0c5c845683fdb82721813ebd5dd867cce5.tar.gz
binutils-6a40cf0c5c845683fdb82721813ebd5dd867cce5.tar.bz2
Add support for files that contain multiple symbol index tables. Fixes PR 15835
binutils PR binutils/15835 * readelf.c (struct elf_section_list): New structure. (symtab_shndx_hdr): Replace with symtab_shndx_list. (get_32bit_elf_symbols): Scan for a symbol index table matching the symbol table in use. (get_64bit_elf_symbols): Likewise. (process_section_headers): Handle multiple symbol index sections. bfd * elf-bfd.h (struct elf_section_list): New structure. (struct elf_obj_tdata): Replace symtab_shndx_hdr with symtab_shndx_list. Delete symtab_shndx_section. (elf_symtab_shndx): Replace macro with elf_symtab_shndx_list. * elf.c (bfd_elf_get_syms): If symtab index sections are present, scan them for the section that matches the provided symbol table. (bfd_section_from_shdr): Record all SHT_SYMTAB_SHNDX sections. (assign_section_numbers): Use the first symtab index table in the list. (_bfd_elf_compute_section_file_positions): Replace use of symtab_shndx_hdr with use of symtab_shndx_list. (find_section_in_list): New function. (assign_file_postions_except_relocs): Use new function. (_bfd_elf_copy_private_symbol_data): Likewise. (swap_out_syms): Handle multiple symbol table index sections. * elf32-m32c.c (m32c_elf_relax_section): Replace use of symtab_shndx_hdr with use of symtab_shndx_list. * elf32-rl78.c (rl78_elf_relax_section): Likewise. * elf32-rx.c (rx_relax_section): Likewise. * elf32-v850.c (v850_elf_relax_delete_bytes): Likewise. * elflink.c (bfd_elf_final_link): Likewise.
Diffstat (limited to 'bfd/elf32-rx.c')
-rw-r--r--bfd/elf32-rx.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/bfd/elf32-rx.c b/bfd/elf32-rx.c
index df765ae..c58c184 100644
--- a/bfd/elf32-rx.c
+++ b/bfd/elf32-rx.c
@@ -2009,8 +2009,11 @@ elf32_rx_relax_section (bfd * abfd,
|| (sec->flags & SEC_CODE) == 0)
return TRUE;
- symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
- shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
+ symtab_hdr = & elf_symtab_hdr (abfd);
+ if (elf_symtab_shndx_list (abfd))
+ shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
+ else
+ shndx_hdr = NULL;
sec_start = sec->output_section->vma + sec->output_offset;
@@ -2035,7 +2038,7 @@ elf32_rx_relax_section (bfd * abfd,
symtab_hdr->contents = (bfd_byte *) intsyms;
}
- if (shndx_hdr->sh_size != 0)
+ if (shndx_hdr && shndx_hdr->sh_size != 0)
{
bfd_size_type amt;