aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2020-07-30 03:41:30 -0700
committerH.J. Lu <hjl.tools@gmail.com>2020-07-30 03:41:44 -0700
commitf1dfbfdbc6c07a8ee4ea185a2f15615600857531 (patch)
treebf9191cd8e6d39ac0a0aaf6d2ff945660feec1d0 /bfd
parent6cc64caabac2f835149d0931d5ab689ccca1ca08 (diff)
downloadgdb-f1dfbfdbc6c07a8ee4ea185a2f15615600857531.zip
gdb-f1dfbfdbc6c07a8ee4ea185a2f15615600857531.tar.gz
gdb-f1dfbfdbc6c07a8ee4ea185a2f15615600857531.tar.bz2
elf: Add sym_cache to elf_link_hash_table
Since many ELF backends have sym_cache to their link hash tables, add sym_cache to elf_link_hash_table. Also use sdynbss and srelbss in elf_link_hash_table. * elf-bfd.h (sym_cache): Moved before elf_link_hash_table. (elf_link_hash_table): Add sym_cache. * elf32-arm.c (elf32_arm_link_hash_table): Remove sym_cache. (elf32_arm_check_relocs): Updated. (elf32_arm_size_dynamic_sections): Likewise. * elf32-bfin.c (bfin_link_hash_table): Removed. (bfin_link_hash_newfunc): Updated. (bfin_hash_table): Removed. * elf32-csky.c (csky_elf_link_hash_table): Remove sym_cache. (csky_elf_check_relocs): Updated. * elf32-hppa.c (elf32_hppa_link_hash_table): Remove sym_cache. (elf32_hppa_check_relocs): Updated. * elf32-i386.c (elf_i386_tls_transition): Updated. (elf_i386_convert_load_reloc): Likewise. (elf_i386_check_relocs): Likewise. * elf32-m32r.c (elf_m32r_link_hash_table): Removed. (m32r_elf_hash_table): Updated. (m32r_elf_link_hash_table_create): Likewise. (m32r_elf_create_dynamic_sections): Likewise. (m32r_elf_adjust_dynamic_symbol): Likewise. (allocate_dynrelocs): Likewise. (m32r_elf_size_dynamic_sections): Likewise. (m32r_elf_relocate_section): Likewise. (m32r_elf_finish_dynamic_symbol): Likewise. (m32r_elf_check_relocs): Likewise. * elf32-m68hc1x.h (m68hc11_elf_link_hash_table): Remove sym_cache. * elf32-m68k.c (elf_m68k_link_hash_table): Likewise. (elf_m68k_check_relocs): Updated. * elf32-metag.c (elf_metag_link_hash_table): Remove sym_cache. (elf_metag_check_relocs): Updated. * elf32-microblaze.c (elf32_mb_link_hash_table): Remove sym_sec. (microblaze_elf_check_relocs): Updated. * elf32-nds32.c (nds32_elf_link_hash_table_create): Likewise. (nds32_elf_create_dynamic_sections): Likewise. (nds32_elf_adjust_dynamic_symbol): Likewise. (nds32_elf_check_relocs): Likewise. * elf32-nds32.h (elf_nds32_link_hash_table): Remove sdynbss, srelbss and aym_cache. * elf32-nios2.c (elf32_nios2_link_hash_table): Remove sym_cache. (nios2_elf32_check_relocs): Updated. * elf32-or1k.c (elf_or1k_link_hash_table): Remove sym_sec. (or1k_elf_check_relocs): Updated. * elf32-ppc.c (ppc_elf_check_relocs): Remove sym_cache. (ppc_elf_check_relocs): Updated. * elf32-s390.c (elf_s390_link_hash_table): Remove sym_cache. (elf_s390_check_relocs): Updated. (elf_s390_finish_dynamic_sections): Likewise. * elf32-sh.c (elf_sh_link_hash_table): Remove sdynbss, srelbss and aym_cache. (sh_elf_create_dynamic_sections): Updated. (sh_elf_adjust_dynamic_symbol): Likewise. (sh_elf_size_dynamic_sections): Likewise. (sh_elf_check_relocs): Likewise. * elf32-tic6x.c (elf32_tic6x_link_hash_table): Remove sym_cache. (elf32_tic6x_check_relocs): Updated. * elf32-tilepro.c (tilepro_elf_link_hash_table): Removed. (tilepro_elf_hash_table): Updated. (tilepro_elf_link_hash_table_create): Likewise. (tilepro_elf_check_relocs): Likewise. (tilepro_elf_adjust_dynamic_symbol): Likewise. (allocate_dynrelocs): Likewise. (tilepro_elf_size_dynamic_sections): Likewise. (tilepro_elf_relocate_section): Likewise. (tilepro_elf_finish_dynamic_symbol): Likewise. (tilepro_finish_dyn): Likewise. (tilepro_elf_finish_dynamic_sections): Likewise. * elf64-ppc.c (ppc_link_hash_table): Remove sym_cache. (ppc64_elf_before_check_relocs): Updated. (ppc64_elf_check_relocs): Likewise. * elf64-s390.c (elf_s390_link_hash_table): Remove sym_cache. (elf_s390_check_relocs): Updated. (elf_s390_relocate_section): Likewise. (elf_s390_finish_dynamic_sections): Likewise. * elf64-x86-64.c (elf_x86_64_tls_transition): Likewise. (elf_x86_64_check_relocs): Likewise. * elfnn-aarch64.c (elf_aarch64_link_hash_table): Remove sym_cache. (elfNN_aarch64_check_relocs): Updated. * elfnn-riscv.c (riscv_elf_link_hash_table): Remove sym_cache. (riscv_elf_check_relocs): Updated. * elfxx-mips.c (mips_elf_link_hash_table): Remove sym_cache. (mips_elf_resolve_got_page_ref): Updated. * elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Likewise. * elfxx-sparc.h (_bfd_sparc_elf_link_hash_table): Remove sym_cache. * elfxx-tilegx.c (tilegx_elf_link_hash_table): Likewise. (tilegx_elf_check_relocs): Updated. * elfxx-x86.h (elf_x86_link_hash_table): Remove sym_cache.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog92
-rw-r--r--bfd/elf-bfd.h23
-rw-r--r--bfd/elf32-arm.c8
-rw-r--r--bfd/elf32-bfin.c25
-rw-r--r--bfd/elf32-csky.c7
-rw-r--r--bfd/elf32-hppa.c7
-rw-r--r--bfd/elf32-i386.c8
-rw-r--r--bfd/elf32-m32r.c128
-rw-r--r--bfd/elf32-m68hc1x.h3
-rw-r--r--bfd/elf32-m68k.c5
-rw-r--r--bfd/elf32-metag.c5
-rw-r--r--bfd/elf32-microblaze.c5
-rw-r--r--bfd/elf32-nds32.c13
-rw-r--r--bfd/elf32-nds32.h7
-rw-r--r--bfd/elf32-nios2.c5
-rw-r--r--bfd/elf32-or1k.c5
-rw-r--r--bfd/elf32-ppc.c9
-rw-r--r--bfd/elf32-s390.c9
-rw-r--r--bfd/elf32-sh.c17
-rw-r--r--bfd/elf32-tic6x.c5
-rw-r--r--bfd/elf32-tilepro.c218
-rw-r--r--bfd/elf64-ppc.c12
-rw-r--r--bfd/elf64-s390.c11
-rw-r--r--bfd/elf64-x86-64.c8
-rw-r--r--bfd/elfnn-aarch64.c7
-rw-r--r--bfd/elfnn-riscv.c5
-rw-r--r--bfd/elfxx-mips.c5
-rw-r--r--bfd/elfxx-sparc.c3
-rw-r--r--bfd/elfxx-sparc.h3
-rw-r--r--bfd/elfxx-tilegx.c5
-rw-r--r--bfd/elfxx-x86.h3
31 files changed, 326 insertions, 340 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 1ac0bab..e9d135e 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,95 @@
+2020-07-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf-bfd.h (sym_cache): Moved before elf_link_hash_table.
+ (elf_link_hash_table): Add sym_cache.
+ * elf32-arm.c (elf32_arm_link_hash_table): Remove sym_cache.
+ (elf32_arm_check_relocs): Updated.
+ (elf32_arm_size_dynamic_sections): Likewise.
+ * elf32-bfin.c (bfin_link_hash_table): Removed.
+ (bfin_link_hash_newfunc): Updated.
+ (bfin_hash_table): Removed.
+ * elf32-csky.c (csky_elf_link_hash_table): Remove sym_cache.
+ (csky_elf_check_relocs): Updated.
+ * elf32-hppa.c (elf32_hppa_link_hash_table): Remove sym_cache.
+ (elf32_hppa_check_relocs): Updated.
+ * elf32-i386.c (elf_i386_tls_transition): Updated.
+ (elf_i386_convert_load_reloc): Likewise.
+ (elf_i386_check_relocs): Likewise.
+ * elf32-m32r.c (elf_m32r_link_hash_table): Removed.
+ (m32r_elf_hash_table): Updated.
+ (m32r_elf_link_hash_table_create): Likewise.
+ (m32r_elf_create_dynamic_sections): Likewise.
+ (m32r_elf_adjust_dynamic_symbol): Likewise.
+ (allocate_dynrelocs): Likewise.
+ (m32r_elf_size_dynamic_sections): Likewise.
+ (m32r_elf_relocate_section): Likewise.
+ (m32r_elf_finish_dynamic_symbol): Likewise.
+ (m32r_elf_check_relocs): Likewise.
+ * elf32-m68hc1x.h (m68hc11_elf_link_hash_table): Remove
+ sym_cache.
+ * elf32-m68k.c (elf_m68k_link_hash_table): Likewise.
+ (elf_m68k_check_relocs): Updated.
+ * elf32-metag.c (elf_metag_link_hash_table): Remove sym_cache.
+ (elf_metag_check_relocs): Updated.
+ * elf32-microblaze.c (elf32_mb_link_hash_table): Remove sym_sec.
+ (microblaze_elf_check_relocs): Updated.
+ * elf32-nds32.c (nds32_elf_link_hash_table_create): Likewise.
+ (nds32_elf_create_dynamic_sections): Likewise.
+ (nds32_elf_adjust_dynamic_symbol): Likewise.
+ (nds32_elf_check_relocs): Likewise.
+ * elf32-nds32.h (elf_nds32_link_hash_table): Remove sdynbss,
+ srelbss and aym_cache.
+ * elf32-nios2.c (elf32_nios2_link_hash_table): Remove sym_cache.
+ (nios2_elf32_check_relocs): Updated.
+ * elf32-or1k.c (elf_or1k_link_hash_table): Remove sym_sec.
+ (or1k_elf_check_relocs): Updated.
+ * elf32-ppc.c (ppc_elf_check_relocs): Remove sym_cache.
+ (ppc_elf_check_relocs): Updated.
+ * elf32-s390.c (elf_s390_link_hash_table): Remove sym_cache.
+ (elf_s390_check_relocs): Updated.
+ (elf_s390_finish_dynamic_sections): Likewise.
+ * elf32-sh.c (elf_sh_link_hash_table): Remove sdynbss, srelbss
+ and aym_cache.
+ (sh_elf_create_dynamic_sections): Updated.
+ (sh_elf_adjust_dynamic_symbol): Likewise.
+ (sh_elf_size_dynamic_sections): Likewise.
+ (sh_elf_check_relocs): Likewise.
+ * elf32-tic6x.c (elf32_tic6x_link_hash_table): Remove sym_cache.
+ (elf32_tic6x_check_relocs): Updated.
+ * elf32-tilepro.c (tilepro_elf_link_hash_table): Removed.
+ (tilepro_elf_hash_table): Updated.
+ (tilepro_elf_link_hash_table_create): Likewise.
+ (tilepro_elf_check_relocs): Likewise.
+ (tilepro_elf_adjust_dynamic_symbol): Likewise.
+ (allocate_dynrelocs): Likewise.
+ (tilepro_elf_size_dynamic_sections): Likewise.
+ (tilepro_elf_relocate_section): Likewise.
+ (tilepro_elf_finish_dynamic_symbol): Likewise.
+ (tilepro_finish_dyn): Likewise.
+ (tilepro_elf_finish_dynamic_sections): Likewise.
+ * elf64-ppc.c (ppc_link_hash_table): Remove sym_cache.
+ (ppc64_elf_before_check_relocs): Updated.
+ (ppc64_elf_check_relocs): Likewise.
+ * elf64-s390.c (elf_s390_link_hash_table): Remove sym_cache.
+ (elf_s390_check_relocs): Updated.
+ (elf_s390_relocate_section): Likewise.
+ (elf_s390_finish_dynamic_sections): Likewise.
+ * elf64-x86-64.c (elf_x86_64_tls_transition): Likewise.
+ (elf_x86_64_check_relocs): Likewise.
+ * elfnn-aarch64.c (elf_aarch64_link_hash_table): Remove
+ sym_cache.
+ (elfNN_aarch64_check_relocs): Updated.
+ * elfnn-riscv.c (riscv_elf_link_hash_table): Remove sym_cache.
+ (riscv_elf_check_relocs): Updated.
+ * elfxx-mips.c (mips_elf_link_hash_table): Remove sym_cache.
+ (mips_elf_resolve_got_page_ref): Updated.
+ * elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Likewise.
+ * elfxx-sparc.h (_bfd_sparc_elf_link_hash_table): Remove
+ sym_cache.
+ * elfxx-tilegx.c (tilegx_elf_link_hash_table): Likewise.
+ (tilegx_elf_check_relocs): Updated.
+ * elfxx-x86.h (elf_x86_link_hash_table): Remove sym_cache.
+
2020-07-29 Maciej W. Rozycki <macro@linux-mips.org>
* elflink.c (bfd_elf_final_link): Give local symbols a name if
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index fbfe65a..cd352d2 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -549,6 +549,16 @@ enum elf_target_os
is_nacl /* Native Client. */
};
+/* Used by bfd_sym_from_r_symndx to cache a small number of local
+ symbols. */
+#define LOCAL_SYM_CACHE_SIZE 32
+struct sym_cache
+{
+ bfd *abfd;
+ unsigned long indx[LOCAL_SYM_CACHE_SIZE];
+ Elf_Internal_Sym sym[LOCAL_SYM_CACHE_SIZE];
+};
+
/* ELF linker hash table. */
struct elf_link_hash_table
@@ -676,6 +686,9 @@ struct elf_link_hash_table
/* A linked list of dynamic BFD's loaded in the link. */
struct elf_link_loaded_list *dyn_loaded;
+ /* Small local sym cache. */
+ struct sym_cache sym_cache;
+
/* Short-cuts to get to dynamic linker sections. */
asection *sgot;
asection *sgotplt;
@@ -717,16 +730,6 @@ struct elf_link_hash_table
/* Returns TRUE if the hash table is a struct elf_link_hash_table. */
#define is_elf_hash_table(htab) \
(((struct bfd_link_hash_table *) (htab))->type == bfd_link_elf_hash_table)
-
-/* Used by bfd_sym_from_r_symndx to cache a small number of local
- symbols. */
-#define LOCAL_SYM_CACHE_SIZE 32
-struct sym_cache
-{
- bfd *abfd;
- unsigned long indx[LOCAL_SYM_CACHE_SIZE];
- Elf_Internal_Sym sym[LOCAL_SYM_CACHE_SIZE];
-};
/* Constant information held for an ELF backend. */
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 508f423..283a614 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -3390,9 +3390,6 @@ struct elf32_arm_link_hash_table
bfd_vma offset;
} tls_ldm_got;
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-
/* For convenience in allocate_dynrelocs. */
bfd * obfd;
@@ -15316,7 +15313,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (r_symndx < symtab_hdr->sh_info)
{
/* A local symbol. */
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
@@ -16871,7 +16868,8 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
s->size += 4;
}
- isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, symndx);
+ isym = bfd_sym_from_r_symndx (&htab->root.sym_cache, ibfd,
+ symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elf32-bfin.c b/bfd/elf32-bfin.c
index eed437f..f6ecc38 100644
--- a/bfd/elf32-bfin.c
+++ b/bfd/elf32-bfin.c
@@ -4791,16 +4791,6 @@ struct bfin_link_hash_entry
struct bfin_pcrel_relocs_copied *pcrel_relocs_copied;
};
-/* bfin ELF linker hash table. */
-
-struct bfin_link_hash_table
-{
- struct elf_link_hash_table root;
-
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-};
-
#define bfin_hash_entry(ent) ((struct bfin_link_hash_entry *) (ent))
static struct bfd_hash_entry *
@@ -4829,15 +4819,14 @@ bfin_link_hash_newfunc (struct bfd_hash_entry *entry,
static struct bfd_link_hash_table *
bfin_link_hash_table_create (bfd * abfd)
{
- struct bfin_link_hash_table *ret;
- size_t amt = sizeof (struct bfin_link_hash_table);
+ struct elf_link_hash_table *ret;
+ size_t amt = sizeof (struct elf_link_hash_table);
ret = bfd_zmalloc (amt);
if (ret == NULL)
return NULL;
- if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
- bfin_link_hash_newfunc,
+ if (!_bfd_elf_link_hash_table_init (ret, abfd, bfin_link_hash_newfunc,
sizeof (struct elf_link_hash_entry),
BFIN_ELF_DATA))
{
@@ -4845,9 +4834,7 @@ bfin_link_hash_table_create (bfd * abfd)
return NULL;
}
- ret->sym_cache.abfd = NULL;
-
- return &ret->root.root;
+ return &ret->root;
}
/* The size in bytes of an entry in the procedure linkage table. */
@@ -5418,10 +5405,6 @@ struct bfd_elf_special_section const elf32_bfin_special_sections[] =
#define bfd_elf32_bfd_is_local_label_name \
bfin_is_local_label_name
-#define bfin_hash_table(p) \
- ((struct bfin_link_hash_table *) (p)->hash)
-
-
#define elf_backend_create_dynamic_sections \
_bfd_elf_create_dynamic_sections
diff --git a/bfd/elf32-csky.c b/bfd/elf32-csky.c
index 669284b..2998aad 100644
--- a/bfd/elf32-csky.c
+++ b/bfd/elf32-csky.c
@@ -1208,9 +1208,6 @@ struct csky_elf_link_hash_table
{
struct elf_link_hash_table elf;
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-
/* Data for R_CKCORE_TLS_LDM32 relocations. */
union
{
@@ -2477,7 +2474,7 @@ csky_elf_check_relocs (bfd * abfd,
if (r_symndx < symtab_hdr->sh_info)
{
/* A local symbol. */
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
@@ -2584,7 +2581,7 @@ csky_elf_check_relocs (bfd * abfd,
asection *s;
Elf_Internal_Sym *loc_isym;
- loc_isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ loc_isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (loc_isym == NULL)
return FALSE;
diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c
index 36582d0..56284ea 100644
--- a/bfd/elf32-hppa.c
+++ b/bfd/elf32-hppa.c
@@ -286,9 +286,6 @@ struct elf32_hppa_link_hash_table
/* Set if we need a .plt stub to support lazy dynamic linking. */
unsigned int need_plt_stub:1;
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-
/* Data for LDM relocations. */
union
{
@@ -1465,7 +1462,7 @@ elf32_hppa_check_relocs (bfd *abfd,
void *vpp;
Elf_Internal_Sym *isym;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->etab.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
@@ -4038,7 +4035,7 @@ elf32_hppa_relocate_section (bfd *output_bfd,
else
{
Elf_Internal_Sym *isym
- = bfd_sym_from_r_symndx (&htab->sym_cache,
+ = bfd_sym_from_r_symndx (&htab->etab.sym_cache,
input_bfd, r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 9cd2fc5..7ae881b 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -1158,7 +1158,7 @@ elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd,
{
Elf_Internal_Sym *isym;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL);
}
@@ -1251,7 +1251,7 @@ elf_i386_convert_load_reloc (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
else
{
local_ref = TRUE;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd,
r_symndx);
abs_symbol = isym->st_shndx == SHN_ABS;
}
@@ -1529,7 +1529,7 @@ elf_i386_check_relocs (bfd *abfd,
if (r_symndx < symtab_hdr->sh_info)
{
/* A local symbol. */
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
goto error_return;
@@ -1859,7 +1859,7 @@ elf_i386_check_relocs (bfd *abfd,
void **vpp;
asection *s;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
goto error_return;
diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c
index dfdf8f3..2eae00b 100644
--- a/bfd/elf32-m32r.c
+++ b/bfd/elf32-m32r.c
@@ -1498,20 +1498,6 @@ struct elf_m32r_pcrel_relocs_copied
bfd_size_type count;
};
-/* m32r ELF linker hash table. */
-
-struct elf_m32r_link_hash_table
-{
- struct elf_link_hash_table root;
-
- /* Short-cuts to get to dynamic linker sections. */
- asection *sdynbss;
- asection *srelbss;
-
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-};
-
/* Traverse an m32r ELF linker hash table. */
#define m32r_elf_link_hash_traverse(table, func, info) \
@@ -1524,21 +1510,21 @@ struct elf_m32r_link_hash_table
#define m32r_elf_hash_table(p) \
(elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
- == M32R_ELF_DATA ? ((struct elf_m32r_link_hash_table *) ((p)->hash)) : NULL)
+ == M32R_ELF_DATA ? ((struct elf_link_hash_table *) ((p)->hash)) : NULL)
/* Create an m32r ELF linker hash table. */
static struct bfd_link_hash_table *
m32r_elf_link_hash_table_create (bfd *abfd)
{
- struct elf_m32r_link_hash_table *ret;
- size_t amt = sizeof (struct elf_m32r_link_hash_table);
+ struct elf_link_hash_table *ret;
+ size_t amt = sizeof (struct elf_link_hash_table);
ret = bfd_zmalloc (amt);
if (ret == NULL)
return NULL;
- if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
+ if (!_bfd_elf_link_hash_table_init (ret, abfd,
_bfd_elf_link_hash_newfunc,
sizeof (struct elf_link_hash_entry),
M32R_ELF_DATA))
@@ -1547,7 +1533,7 @@ m32r_elf_link_hash_table_create (bfd *abfd)
return NULL;
}
- return &ret->root.root;
+ return &ret->root;
}
/* Create dynamic sections when linking against a dynamic object. */
@@ -1555,7 +1541,7 @@ m32r_elf_link_hash_table_create (bfd *abfd)
static bfd_boolean
m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
{
- struct elf_m32r_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
flagword flags, pltflags;
asection *s;
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
@@ -1578,7 +1564,7 @@ m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
pltflags |= SEC_READONLY;
s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
- htab->root.splt = s;
+ htab->splt = s;
if (s == NULL
|| !bfd_set_section_alignment (s, bed->plt_alignment))
return FALSE;
@@ -1598,7 +1584,7 @@ m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
h = (struct elf_link_hash_entry *) bh;
h->def_regular = 1;
h->type = STT_OBJECT;
- htab->root.hplt = h;
+ htab->hplt = h;
if (bfd_link_pic (info)
&& ! bfd_elf_link_record_dynamic_symbol (info, h))
@@ -1609,12 +1595,12 @@ m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
bed->default_use_rela_p
? ".rela.plt" : ".rel.plt",
flags | SEC_READONLY);
- htab->root.srelplt = s;
+ htab->srelplt = s;
if (s == NULL
|| !bfd_set_section_alignment (s, ptralign))
return FALSE;
- if (htab->root.sgot == NULL
+ if (htab->sgot == NULL
&& !_bfd_elf_create_got_section (abfd, info))
return FALSE;
@@ -1669,7 +1655,7 @@ static bfd_boolean
m32r_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
struct elf_link_hash_entry *h)
{
- struct elf_m32r_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
bfd *dynobj;
asection *s;
@@ -1796,7 +1782,7 @@ static bfd_boolean
allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
{
struct bfd_link_info *info;
- struct elf_m32r_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
struct elf_dyn_relocs *p;
if (h->root.type == bfd_link_hash_indirect)
@@ -1807,7 +1793,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
if (htab == NULL)
return FALSE;
- if (htab->root.dynamic_sections_created
+ if (htab->dynamic_sections_created
&& h->plt.refcount > 0)
{
/* Make sure this symbol is output as a dynamic symbol.
@@ -1821,7 +1807,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
{
- asection *s = htab->root.splt;
+ asection *s = htab->splt;
/* If this is the first .plt entry, make room for the special
first entry. */
@@ -1847,10 +1833,10 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
/* We also need to make an entry in the .got.plt section, which
will be placed in the .got section by the linker script. */
- htab->root.sgotplt->size += 4;
+ htab->sgotplt->size += 4;
/* We also need to make an entry in the .rel.plt section. */
- htab->root.srelplt->size += sizeof (Elf32_External_Rela);
+ htab->srelplt->size += sizeof (Elf32_External_Rela);
}
else
{
@@ -1878,13 +1864,13 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
return FALSE;
}
- s = htab->root.sgot;
+ s = htab->sgot;
h->got.offset = s->size;
s->size += 4;
- dyn = htab->root.dynamic_sections_created;
+ dyn = htab->dynamic_sections_created;
if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h))
- htab->root.srelgot->size += sizeof (Elf32_External_Rela);
+ htab->srelgot->size += sizeof (Elf32_External_Rela);
}
else
h->got.offset = (bfd_vma) -1;
@@ -1944,7 +1930,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
if (!h->non_got_ref
&& ((h->def_dynamic
&& !h->def_regular)
- || (htab->root.dynamic_sections_created
+ || (htab->dynamic_sections_created
&& (h->root.type == bfd_link_hash_undefweak
|| h->root.type == bfd_link_hash_undefined))))
{
@@ -1984,7 +1970,7 @@ static bfd_boolean
m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
struct bfd_link_info *info)
{
- struct elf_m32r_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
bfd *dynobj;
asection *s;
bfd_boolean relocs;
@@ -1998,10 +1984,10 @@ m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
if (htab == NULL)
return FALSE;
- dynobj = htab->root.dynobj;
+ dynobj = htab->dynobj;
BFD_ASSERT (dynobj != NULL);
- if (htab->root.dynamic_sections_created)
+ if (htab->dynamic_sections_created)
{
/* Set the contents of the .interp section to the interpreter. */
if (bfd_link_executable (info) && !info->nointerp)
@@ -2060,8 +2046,8 @@ m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
locsymcount = symtab_hdr->sh_info;
end_local_got = local_got + locsymcount;
- s = htab->root.sgot;
- srel = htab->root.srelgot;
+ s = htab->sgot;
+ srel = htab->srelgot;
for (; local_got < end_local_got; ++local_got)
{
if (*local_got > 0)
@@ -2078,7 +2064,7 @@ m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
/* Allocate global sym .plt and .got entries, and space for global
sym dynamic relocs. */
- elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
+ elf_link_hash_traverse (htab, allocate_dynrelocs, info);
/* We now have determined the sizes of the various dynamic sections.
Allocate memory for them. */
@@ -2088,9 +2074,9 @@ m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
if ((s->flags & SEC_LINKER_CREATED) == 0)
continue;
- if (s == htab->root.splt
- || s == htab->root.sgot
- || s == htab->root.sgotplt
+ if (s == htab->splt
+ || s == htab->sgot
+ || s == htab->sgotplt
|| s == htab->sdynbss)
{
/* Strip this section if we don't need it; see the
@@ -2098,7 +2084,7 @@ m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
}
else if (CONST_STRNEQ (bfd_section_name (s), ".rela"))
{
- if (s->size != 0 && s != htab->root.srelplt)
+ if (s->size != 0 && s != htab->srelplt)
relocs = TRUE;
/* We use the reloc_count field as a counter if we need
@@ -2188,7 +2174,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
Elf_Internal_Rela *rel, *relend;
/* Assume success. */
bfd_boolean ret = TRUE;
- struct elf_m32r_link_hash_table *htab = m32r_elf_hash_table (info);
+ struct elf_link_hash_table *htab = m32r_elf_hash_table (info);
bfd_vma *local_got_offsets;
asection *sgot, *splt, *sreloc;
bfd_vma high_address = bfd_get_section_limit (input_bfd, input_section);
@@ -2198,8 +2184,8 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
local_got_offsets = elf_local_got_offsets (input_bfd);
- sgot = htab->root.sgot;
- splt = htab->root.splt;
+ sgot = htab->sgot;
+ splt = htab->splt;
sreloc = NULL;
rel = relocs;
@@ -2295,7 +2281,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
bfd_boolean dyn;
sec = h->root.u.def.section;
- dyn = htab->root.dynamic_sections_created;
+ dyn = htab->dynamic_sections_created;
sec = h->root.u.def.section;
if (r_type == R_M32R_GOTPC24
|| (r_type == R_M32R_GOTPC_HI_ULO
@@ -2516,7 +2502,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
off = h->got.offset;
BFD_ASSERT (off != (bfd_vma) -1);
- dyn = htab->root.dynamic_sections_created;
+ dyn = htab->dynamic_sections_created;
if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
bfd_link_pic (info),
h)
@@ -2576,7 +2562,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
/* We need to generate a R_M32R_RELATIVE reloc
for the dynamic linker. */
- srelgot = htab->root.srelgot;
+ srelgot = htab->srelgot;
BFD_ASSERT (srelgot != NULL);
outrel.r_offset = (sgot->output_section->vma
@@ -2892,7 +2878,7 @@ m32r_elf_finish_dynamic_symbol (bfd *output_bfd,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
- struct elf_m32r_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
bfd_byte *loc;
#ifdef DEBUG_PIC
@@ -2918,9 +2904,9 @@ m32r_elf_finish_dynamic_symbol (bfd *output_bfd,
BFD_ASSERT (h->dynindx != -1);
- splt = htab->root.splt;
- sgot = htab->root.sgotplt;
- srela = htab->root.srelplt;
+ splt = htab->splt;
+ sgot = htab->sgotplt;
+ srela = htab->srelplt;
BFD_ASSERT (splt != NULL && sgot != NULL && srela != NULL);
/* Get the index in the procedure linkage table which
@@ -3014,8 +3000,8 @@ m32r_elf_finish_dynamic_symbol (bfd *output_bfd,
/* This symbol has an entry in the global offset table. Set it
up. */
- sgot = htab->root.sgot;
- srela = htab->root.srelgot;
+ sgot = htab->sgot;
+ srela = htab->srelgot;
BFD_ASSERT (sgot != NULL && srela != NULL);
rela.r_offset = (sgot->output_section->vma
@@ -3063,7 +3049,7 @@ m32r_elf_finish_dynamic_symbol (bfd *output_bfd,
&& (h->root.type == bfd_link_hash_defined
|| h->root.type == bfd_link_hash_defweak));
- s = bfd_get_linker_section (htab->root.dynobj, ".rela.bss");
+ s = bfd_get_linker_section (htab->dynobj, ".rela.bss");
BFD_ASSERT (s != NULL);
rela.r_offset = (h->root.u.def.value
@@ -3078,7 +3064,7 @@ m32r_elf_finish_dynamic_symbol (bfd *output_bfd,
}
/* Mark some specially defined symbols as absolute. */
- if (h == htab->root.hdynamic || h == htab->root.hgot)
+ if (h == htab->hdynamic || h == htab->hgot)
sym->st_shndx = SHN_ABS;
return TRUE;
@@ -3091,7 +3077,7 @@ static bfd_boolean
m32r_elf_finish_dynamic_sections (bfd *output_bfd,
struct bfd_link_info *info)
{
- struct elf_m32r_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
bfd *dynobj;
asection *sdyn;
asection *sgot;
@@ -3104,12 +3090,12 @@ m32r_elf_finish_dynamic_sections (bfd *output_bfd,
if (htab == NULL)
return FALSE;
- dynobj = htab->root.dynobj;
+ dynobj = htab->dynobj;
- sgot = htab->root.sgotplt;
+ sgot = htab->sgotplt;
sdyn = bfd_get_linker_section (dynobj, ".dynamic");
- if (htab->root.dynamic_sections_created)
+ if (htab->dynamic_sections_created)
{
asection *splt;
Elf32_External_Dyn *dyncon, *dynconend;
@@ -3132,17 +3118,17 @@ m32r_elf_finish_dynamic_sections (bfd *output_bfd,
break;
case DT_PLTGOT:
- s = htab->root.sgotplt;
+ s = htab->sgotplt;
goto get_vma;
case DT_JMPREL:
- s = htab->root.srelplt;
+ s = htab->srelplt;
get_vma:
dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
break;
case DT_PLTRELSZ:
- s = htab->root.srelplt;
+ s = htab->srelplt;
dyn.d_un.d_val = s->size;
bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
break;
@@ -3150,7 +3136,7 @@ m32r_elf_finish_dynamic_sections (bfd *output_bfd,
}
/* Fill in the first entry in the procedure linkage table. */
- splt = htab->root.splt;
+ splt = htab->splt;
if (splt && splt->size > 0)
{
if (bfd_link_pic (info))
@@ -3369,7 +3355,7 @@ m32r_elf_check_relocs (bfd *abfd,
struct elf_link_hash_entry **sym_hashes;
const Elf_Internal_Rela *rel;
const Elf_Internal_Rela *rel_end;
- struct elf_m32r_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
bfd *dynobj;
asection *sreloc;
@@ -3384,7 +3370,7 @@ m32r_elf_check_relocs (bfd *abfd,
if (htab == NULL)
return FALSE;
- dynobj = htab->root.dynobj;
+ dynobj = htab->dynobj;
rel_end = relocs + sec->reloc_count;
for (rel = relocs; rel < rel_end; rel++)
@@ -3406,7 +3392,7 @@ m32r_elf_check_relocs (bfd *abfd,
}
/* Some relocs require a global offset table. */
- if (htab->root.sgot == NULL)
+ if (htab->sgot == NULL)
{
switch (r_type)
{
@@ -3423,7 +3409,7 @@ m32r_elf_check_relocs (bfd *abfd,
case R_M32R_GOTPC_LO:
case R_M32R_GOT24:
if (dynobj == NULL)
- htab->root.dynobj = dynobj = abfd;
+ htab->dynobj = dynobj = abfd;
if (!_bfd_elf_create_got_section (dynobj, info))
return FALSE;
break;
@@ -3540,7 +3526,7 @@ m32r_elf_check_relocs (bfd *abfd,
struct elf_dyn_relocs **head;
if (dynobj == NULL)
- htab->root.dynobj = dynobj = abfd;
+ htab->dynobj = dynobj = abfd;
/* When creating a shared object, we must copy these
relocs into the output file. We create a reloc
diff --git a/bfd/elf32-m68hc1x.h b/bfd/elf32-m68hc1x.h
index ff0c42e..720c270 100644
--- a/bfd/elf32-m68hc1x.h
+++ b/bfd/elf32-m68hc1x.h
@@ -120,9 +120,6 @@ struct m68hc11_elf_link_hash_table
int top_index;
asection **input_list;
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-
bfd_boolean (* size_one_stub) (struct bfd_hash_entry*, void*);
bfd_boolean (* build_one_stub) (struct bfd_hash_entry*, void*);
};
diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c
index 7ccdaab..120816f 100644
--- a/bfd/elf32-m68k.c
+++ b/bfd/elf32-m68k.c
@@ -889,9 +889,6 @@ struct elf_m68k_link_hash_table
{
struct elf_link_hash_table root;
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-
/* The PLT format used by this link, or NULL if the format has not
yet been chosen. */
const struct elf_m68k_plt_info *plt_info;
@@ -2836,7 +2833,7 @@ elf_m68k_check_relocs (bfd *abfd,
void *vpp;
Elf_Internal_Sym *isym;
- isym = bfd_sym_from_r_symndx (&elf_m68k_hash_table (info)->sym_cache,
+ isym = bfd_sym_from_r_symndx (&elf_m68k_hash_table (info)->root.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elf32-metag.c b/bfd/elf32-metag.c
index fc5f3a9..f1122fd 100644
--- a/bfd/elf32-metag.c
+++ b/bfd/elf32-metag.c
@@ -823,9 +823,6 @@ struct elf_metag_link_hash_table
asection **input_list;
Elf_Internal_Sym **all_local_syms;
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-
/* Data for LDM relocations. */
union
{
@@ -2098,7 +2095,7 @@ elf_metag_check_relocs (bfd *abfd,
if (r_symndx < symtab_hdr->sh_info)
{
/* A local symbol. */
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->etab.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c
index 693fc71..09a1e56 100644
--- a/bfd/elf32-microblaze.c
+++ b/bfd/elf32-microblaze.c
@@ -744,9 +744,6 @@ struct elf32_mb_link_hash_table
{
struct elf_link_hash_table elf;
- /* Small local sym to section mapping cache. */
- struct sym_cache sym_sec;
-
/* TLS Local Dynamic GOT Entry */
union {
bfd_signed_vma refcount;
@@ -2523,7 +2520,7 @@ microblaze_elf_check_relocs (bfd * abfd,
Elf_Internal_Sym *isym;
void *vpp;
- isym = bfd_sym_from_r_symndx (&htab->sym_sec,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elf32-nds32.c b/bfd/elf32-nds32.c
index 186ab36..1f9f9ba 100644
--- a/bfd/elf32-nds32.c
+++ b/bfd/elf32-nds32.c
@@ -3696,8 +3696,6 @@ nds32_elf_link_hash_table_create (bfd *abfd)
return NULL;
}
- ret->sdynbss = NULL;
- ret->srelbss = NULL;
ret->sym_ld_script = NULL;
return &ret->root.root;
@@ -3833,7 +3831,7 @@ nds32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
initialize them at run time. The linker script puts the .dynbss
section into the .bss section of the final image. */
s = bfd_make_section (abfd, ".dynbss");
- htab->sdynbss = s;
+ htab->root.sdynbss = s;
if (s == NULL
|| !bfd_set_section_flags (s, SEC_ALLOC | SEC_LINKER_CREATED))
return FALSE;
@@ -3852,7 +3850,7 @@ nds32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
{
s = bfd_make_section (abfd, (bed->default_use_rela_p
? ".rela.bss" : ".rel.bss"));
- htab->srelbss = s;
+ htab->root.srelbss = s;
if (s == NULL
|| !bfd_set_section_flags (s, flags | SEC_READONLY)
|| !bfd_set_section_alignment (s, ptralign))
@@ -3988,7 +3986,7 @@ nds32_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
same memory location for the variable. */
htab = nds32_elf_hash_table (info);
- s = htab->sdynbss;
+ s = htab->root.sdynbss;
BFD_ASSERT (s != NULL);
/* We must generate a R_NDS32_COPY reloc to tell the dynamic linker
@@ -3999,7 +3997,7 @@ nds32_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
{
asection *srel;
- srel = htab->srelbss;
+ srel = htab->root.srelbss;
BFD_ASSERT (srel != NULL);
srel->size += sizeof (Elf32_External_Rela);
h->needs_copy = 1;
@@ -7277,7 +7275,8 @@ nds32_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
void *vpp;
Elf_Internal_Sym *isym;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx);
+ isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
+ abfd, r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elf32-nds32.h b/bfd/elf32-nds32.h
index b33ca99..83547b2 100644
--- a/bfd/elf32-nds32.h
+++ b/bfd/elf32-nds32.h
@@ -122,13 +122,6 @@ struct elf_nds32_link_hash_table
{
struct elf_link_hash_table root;
- /* Short-cuts to get to dynamic linker sections. */
- asection *sdynbss;
- asection *srelbss;
-
- /* Small local sym to section mapping cache. */
- struct sym_cache sym_cache;
-
/* Target dependent options. */
int relax_fp_as_gp; /* --mrelax-omit-fp. */
int eliminate_gc_relocs; /* --meliminate-gc-relocs. */
diff --git a/bfd/elf32-nios2.c b/bfd/elf32-nios2.c
index 01c2fe5..84e5228 100644
--- a/bfd/elf32-nios2.c
+++ b/bfd/elf32-nios2.c
@@ -1808,9 +1808,6 @@ struct elf32_nios2_link_hash_table
bfd_vma offset;
} tls_ldm_got;
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-
bfd_vma res_n_size;
};
@@ -4902,7 +4899,7 @@ nios2_elf32_check_relocs (bfd *abfd, struct bfd_link_info *info,
void *vpp;
Elf_Internal_Sym *isym;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c
index 7c02d00..ef78187 100644
--- a/bfd/elf32-or1k.c
+++ b/bfd/elf32-or1k.c
@@ -916,9 +916,6 @@ struct elf_or1k_link_hash_table
{
struct elf_link_hash_table root;
- /* Small local sym to section mapping cache. */
- struct sym_cache sym_sec;
-
bfd_boolean saw_plta;
};
@@ -2151,7 +2148,7 @@ or1k_elf_check_relocs (bfd *abfd,
Elf_Internal_Sym *isym;
void *vpp;
- isym = bfd_sym_from_r_symndx (&htab->sym_sec,
+ isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index 5155dc9..93b50bc 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -2212,9 +2212,6 @@ struct ppc_elf_link_hash_table
int plt_slot_size;
/* The size of the first PLT entry. */
int plt_initial_entry_size;
-
- /* Small local sym cache. */
- struct sym_cache sym_cache;
};
/* Rename some of the generic section flags to better document how they
@@ -2952,7 +2949,7 @@ ppc_elf_check_relocs (bfd *abfd,
ifunc = NULL;
if (h == NULL && htab->elf.target_os != is_vxworks)
{
- Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
@@ -3335,7 +3332,7 @@ ppc_elf_check_relocs (bfd *abfd,
asection *s;
Elf_Internal_Sym *isym;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
@@ -3495,7 +3492,7 @@ ppc_elf_check_relocs (bfd *abfd,
void *vpp;
Elf_Internal_Sym *isym;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c
index ceb9787..530a10d 100644
--- a/bfd/elf32-s390.c
+++ b/bfd/elf32-s390.c
@@ -746,9 +746,6 @@ struct elf_s390_link_hash_table
bfd_signed_vma refcount;
bfd_vma offset;
} tls_ldm_got;
-
- /* Small local sym cache. */
- struct sym_cache sym_cache;
};
/* Get the s390 ELF linker hash table from a link_info structure. */
@@ -930,7 +927,7 @@ elf_s390_check_relocs (bfd *abfd,
if (r_symndx < symtab_hdr->sh_info)
{
/* A local symbol. */
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
@@ -1281,7 +1278,7 @@ elf_s390_check_relocs (bfd *abfd,
asection *s;
void *vpp;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
@@ -3722,7 +3719,7 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd,
if (local_plt[i].plt.offset != (bfd_vma) -1)
{
asection *sec = local_plt[i].sec;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, i);
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, ibfd, i);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c
index 8c74ef7..481bed4 100644
--- a/bfd/elf32-sh.c
+++ b/bfd/elf32-sh.c
@@ -2160,8 +2160,6 @@ struct elf_sh_link_hash_table
struct elf_link_hash_table root;
/* Short-cuts to get to dynamic linker sections. */
- asection *sdynbss;
- asection *srelbss;
asection *sfuncdesc;
asection *srelfuncdesc;
asection *srofixup;
@@ -2169,9 +2167,6 @@ struct elf_sh_link_hash_table
/* The (unloaded but important) VxWorks .rela.plt.unloaded section. */
asection *srelplt2;
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-
/* A counter or offset to track a TLS got entry. */
union
{
@@ -2439,7 +2434,7 @@ sh_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
section into the .bss section of the final image. */
s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
SEC_ALLOC | SEC_LINKER_CREATED);
- htab->sdynbss = s;
+ htab->root.sdynbss = s;
if (s == NULL)
return FALSE;
@@ -2460,7 +2455,7 @@ sh_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
(bed->default_use_rela_p
? ".rela.bss" : ".rel.bss"),
flags | SEC_READONLY);
- htab->srelbss = s;
+ htab->root.srelbss = s;
if (s == NULL
|| !bfd_set_section_alignment (s, ptralign))
return FALSE;
@@ -2580,7 +2575,7 @@ sh_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
both the dynamic object and the regular object will refer to the
same memory location for the variable. */
- s = htab->sdynbss;
+ s = htab->root.sdynbss;
BFD_ASSERT (s != NULL);
/* We must generate a R_SH_COPY reloc to tell the dynamic linker to
@@ -2591,7 +2586,7 @@ sh_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
{
asection *srel;
- srel = htab->srelbss;
+ srel = htab->root.srelbss;
BFD_ASSERT (srel != NULL);
srel->size += sizeof (Elf32_External_Rela);
h->needs_copy = 1;
@@ -3151,7 +3146,7 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|| s == htab->root.sgotplt
|| s == htab->sfuncdesc
|| s == htab->srofixup
- || s == htab->sdynbss)
+ || s == htab->root.sdynbss)
{
/* Strip this section if we don't need it; see the
comment below. */
@@ -5679,7 +5674,7 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
void *vpp;
Elf_Internal_Sym *isym;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c
index d5fe06e..9984c05 100644
--- a/bfd/elf32-tic6x.c
+++ b/bfd/elf32-tic6x.c
@@ -46,9 +46,6 @@ struct elf32_tic6x_link_hash_table
/* C6X specific command line arguments. */
struct elf32_tic6x_params params;
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-
/* The output BFD, for convenience. */
bfd *obfd;
@@ -2729,7 +2726,7 @@ elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (r_symndx < symtab_hdr->sh_info)
{
/* A local symbol. */
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elf32-tilepro.c b/bfd/elf32-tilepro.c
index 5b3e80a..e062dc0 100644
--- a/bfd/elf32-tilepro.c
+++ b/bfd/elf32-tilepro.c
@@ -727,19 +727,11 @@ tilepro_elf_mkobject (bfd *abfd)
#include "elf/common.h"
#include "elf/internal.h"
-struct tilepro_elf_link_hash_table
-{
- struct elf_link_hash_table elf;
-
- /* Small local sym to section mapping cache. */
- struct sym_cache sym_cache;
-};
-
/* Get the Tilepro ELF linker hash table from a link_info structure. */
#define tilepro_elf_hash_table(p) \
(elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
== TILEPRO_ELF_DATA \
- ? ((struct tilepro_elf_link_hash_table *) ((p)->hash)) : NULL)
+ ? ((struct elf_link_hash_table *) ((p)->hash)) : NULL)
static reloc_howto_type *
tilepro_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
@@ -1184,14 +1176,14 @@ link_hash_newfunc (struct bfd_hash_entry *entry,
static struct bfd_link_hash_table *
tilepro_elf_link_hash_table_create (bfd *abfd)
{
- struct tilepro_elf_link_hash_table *ret;
- size_t amt = sizeof (struct tilepro_elf_link_hash_table);
+ struct elf_link_hash_table *ret;
+ size_t amt = sizeof (struct elf_link_hash_table);
- ret = (struct tilepro_elf_link_hash_table *) bfd_zmalloc (amt);
+ ret = (struct elf_link_hash_table *) bfd_zmalloc (amt);
if (ret == NULL)
return NULL;
- if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, link_hash_newfunc,
+ if (!_bfd_elf_link_hash_table_init (ret, abfd, link_hash_newfunc,
sizeof (struct tilepro_elf_link_hash_entry),
TILEPRO_ELF_DATA))
{
@@ -1199,7 +1191,7 @@ tilepro_elf_link_hash_table_create (bfd *abfd)
return NULL;
}
- return &ret->elf.root;
+ return &ret->root;
}
/* Create the .got section. */
@@ -1402,7 +1394,7 @@ static bfd_boolean
tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
asection *sec, const Elf_Internal_Rela *relocs)
{
- struct tilepro_elf_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
Elf_Internal_Shdr *symtab_hdr;
struct elf_link_hash_entry **sym_hashes;
const Elf_Internal_Rela *rel;
@@ -1423,8 +1415,8 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
BFD_ASSERT (is_tilepro_elf (abfd) || num_relocs == 0);
- if (htab->elf.dynobj == NULL)
- htab->elf.dynobj = abfd;
+ if (htab->dynobj == NULL)
+ htab->dynobj = abfd;
rel_end = relocs + num_relocs;
for (rel = relocs; rel < rel_end; rel++)
@@ -1569,9 +1561,9 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
}
}
- if (htab->elf.sgot == NULL)
+ if (htab->sgot == NULL)
{
- if (!tilepro_elf_create_got_section (htab->elf.dynobj, info))
+ if (!tilepro_elf_create_got_section (htab->dynobj, info))
return FALSE;
}
break;
@@ -1716,7 +1708,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (sreloc == NULL)
{
sreloc = _bfd_elf_make_dynamic_reloc_section
- (sec, htab->elf.dynobj, 2, abfd, /*rela?*/ TRUE);
+ (sec, htab->dynobj, 2, abfd, /*rela?*/ TRUE);
if (sreloc == NULL)
return FALSE;
@@ -1754,7 +1746,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
{
size_t amt = sizeof *p;
p = ((struct elf_dyn_relocs *)
- bfd_alloc (htab->elf.dynobj, amt));
+ bfd_alloc (htab->dynobj, amt));
if (p == NULL)
return FALSE;
p->next = *head;
@@ -1850,14 +1842,14 @@ static bfd_boolean
tilepro_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
struct elf_link_hash_entry *h)
{
- struct tilepro_elf_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
asection *s, *srel;
htab = tilepro_elf_hash_table (info);
BFD_ASSERT (htab != NULL);
/* Make sure we know what is going on here. */
- BFD_ASSERT (htab->elf.dynobj != NULL
+ BFD_ASSERT (htab->dynobj != NULL
&& (h->needs_plt
|| h->is_weakalias
|| (h->def_dynamic
@@ -1947,13 +1939,13 @@ tilepro_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
.rel.bss section we are going to use. */
if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
{
- s = htab->elf.sdynrelro;
- srel = htab->elf.sreldynrelro;
+ s = htab->sdynrelro;
+ srel = htab->sreldynrelro;
}
else
{
- s = htab->elf.sdynbss;
- srel = htab->elf.srelbss;
+ s = htab->sdynbss;
+ srel = htab->srelbss;
}
if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
{
@@ -1971,7 +1963,7 @@ static bfd_boolean
allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
{
struct bfd_link_info *info;
- struct tilepro_elf_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
struct elf_dyn_relocs *p;
if (h->root.type == bfd_link_hash_indirect)
@@ -1981,7 +1973,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
htab = tilepro_elf_hash_table (info);
BFD_ASSERT (htab != NULL);
- if (htab->elf.dynamic_sections_created
+ if (htab->dynamic_sections_created
&& h->plt.refcount > 0)
{
/* Make sure this symbol is output as a dynamic symbol.
@@ -1995,7 +1987,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
{
- asection *s = htab->elf.splt;
+ asection *s = htab->splt;
/* Allocate room for the header. */
if (s->size == 0)
@@ -2021,10 +2013,10 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
s->size += PLT_ENTRY_SIZE;
/* We also need to make an entry in the .got.plt section. */
- htab->elf.sgotplt->size += GOT_ENTRY_SIZE;
+ htab->sgotplt->size += GOT_ENTRY_SIZE;
/* We also need to make an entry in the .rela.plt section. */
- htab->elf.srelplt->size += TILEPRO_ELF_RELA_BYTES;
+ htab->srelplt->size += TILEPRO_ELF_RELA_BYTES;
}
else
{
@@ -2060,22 +2052,22 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
return FALSE;
}
- s = htab->elf.sgot;
+ s = htab->sgot;
h->got.offset = s->size;
s->size += TILEPRO_BYTES_PER_WORD;
/* R_TILEPRO_IMM16_Xn_TLS_GD entries need 2 consecutive GOT slots. */
if (tls_type == GOT_TLS_GD)
s->size += TILEPRO_BYTES_PER_WORD;
- dyn = htab->elf.dynamic_sections_created;
+ dyn = htab->dynamic_sections_created;
/* R_TILEPRO_IMM16_Xn_TLS_IE_xxx needs one dynamic relocation,
R_TILEPRO_IMM16_Xn_TLS_GD_xxx needs two if local symbol and two if
global. */
if (tls_type == GOT_TLS_GD || tls_type == GOT_TLS_IE)
- htab->elf.srelgot->size += 2 * TILEPRO_ELF_RELA_BYTES;
+ htab->srelgot->size += 2 * TILEPRO_ELF_RELA_BYTES;
else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
bfd_link_pic (info),
h))
- htab->elf.srelgot->size += TILEPRO_ELF_RELA_BYTES;
+ htab->srelgot->size += TILEPRO_ELF_RELA_BYTES;
}
else
h->got.offset = (bfd_vma) -1;
@@ -2134,7 +2126,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
if (!h->non_got_ref
&& ((h->def_dynamic
&& !h->def_regular)
- || (htab->elf.dynamic_sections_created
+ || (htab->dynamic_sections_created
&& (h->root.type == bfd_link_hash_undefweak
|| h->root.type == bfd_link_hash_undefined))))
{
@@ -2195,14 +2187,14 @@ tilepro_elf_size_dynamic_sections (bfd *output_bfd,
{
(void)output_bfd;
- struct tilepro_elf_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
bfd *dynobj;
asection *s;
bfd *ibfd;
htab = tilepro_elf_hash_table (info);
BFD_ASSERT (htab != NULL);
- dynobj = htab->elf.dynobj;
+ dynobj = htab->dynobj;
BFD_ASSERT (dynobj != NULL);
if (elf_hash_table (info)->dynamic_sections_created)
@@ -2268,8 +2260,8 @@ tilepro_elf_size_dynamic_sections (bfd *output_bfd,
locsymcount = symtab_hdr->sh_info;
end_local_got = local_got + locsymcount;
local_tls_type = _bfd_tilepro_elf_local_got_tls_type (ibfd);
- s = htab->elf.sgot;
- srel = htab->elf.srelgot;
+ s = htab->sgot;
+ srel = htab->srelgot;
for (; local_got < end_local_got; ++local_got, ++local_tls_type)
{
if (*local_got > 0)
@@ -2290,19 +2282,19 @@ tilepro_elf_size_dynamic_sections (bfd *output_bfd,
/* Allocate global sym .plt and .got entries, and space for global
sym dynamic relocs. */
- elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
+ elf_link_hash_traverse (htab, allocate_dynrelocs, info);
if (elf_hash_table (info)->dynamic_sections_created)
{
/* If the .got section is more than 0x8000 bytes, we add
0x8000 to the value of _GLOBAL_OFFSET_TABLE_, so that 16
bit relocations have a greater chance of working. */
- if (htab->elf.sgot->size >= 0x8000
+ if (htab->sgot->size >= 0x8000
&& elf_hash_table (info)->hgot->root.u.def.value == 0)
elf_hash_table (info)->hgot->root.u.def.value = 0x8000;
}
- if (htab->elf.sgotplt)
+ if (htab->sgotplt)
{
struct elf_link_hash_entry *got;
got = elf_link_hash_lookup (elf_hash_table (info),
@@ -2313,14 +2305,14 @@ tilepro_elf_size_dynamic_sections (bfd *output_bfd,
entries and there is no refeence to _GLOBAL_OFFSET_TABLE_. */
if ((got == NULL
|| !got->ref_regular_nonweak)
- && (htab->elf.sgotplt->size
+ && (htab->sgotplt->size
== GOTPLT_HEADER_SIZE)
- && (htab->elf.splt == NULL
- || htab->elf.splt->size == 0)
- && (htab->elf.sgot == NULL
- || (htab->elf.sgot->size
+ && (htab->splt == NULL
+ || htab->splt->size == 0)
+ && (htab->sgot == NULL
+ || (htab->sgot->size
== get_elf_backend_data (output_bfd)->got_header_size)))
- htab->elf.sgotplt->size = 0;
+ htab->sgotplt->size = 0;
}
/* The check_relocs and adjust_dynamic_symbol entry points have
@@ -2331,11 +2323,11 @@ tilepro_elf_size_dynamic_sections (bfd *output_bfd,
if ((s->flags & SEC_LINKER_CREATED) == 0)
continue;
- if (s == htab->elf.splt
- || s == htab->elf.sgot
- || s == htab->elf.sgotplt
- || s == htab->elf.sdynbss
- || s == htab->elf.sdynrelro)
+ if (s == htab->splt
+ || s == htab->sgot
+ || s == htab->sgotplt
+ || s == htab->sdynbss
+ || s == htab->sdynrelro)
{
/* Strip this section if we don't need it; see the
comment below. */
@@ -2527,7 +2519,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
Elf_Internal_Sym *local_syms,
asection **local_sections)
{
- struct tilepro_elf_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
Elf_Internal_Shdr *symtab_hdr;
struct elf_link_hash_entry **sym_hashes;
bfd_vma *local_got_offsets;
@@ -2758,7 +2750,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
case R_TILEPRO_IMM16_X1_GOT_HA:
/* Relocation is to the entry for this symbol in the global
offset table. */
- if (htab->elf.sgot == NULL)
+ if (htab->sgot == NULL)
abort ();
if (h != NULL)
@@ -2792,7 +2784,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
else
{
bfd_put_32 (output_bfd, relocation,
- htab->elf.sgot->contents + off);
+ htab->sgot->contents + off);
h->got.offset |= 1;
}
}
@@ -2820,11 +2812,11 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
/* We need to generate a R_TILEPRO_RELATIVE reloc
for the dynamic linker. */
- s = htab->elf.srelgot;
+ s = htab->srelgot;
BFD_ASSERT (s != NULL);
- outrel.r_offset = (htab->elf.sgot->output_section->vma
- + htab->elf.sgot->output_offset
+ outrel.r_offset = (htab->sgot->output_section->vma
+ + htab->sgot->output_offset
+ off);
outrel.r_info = ELF32_R_INFO (0, R_TILEPRO_RELATIVE);
outrel.r_addend = relocation;
@@ -2833,7 +2825,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
}
bfd_put_32 (output_bfd, relocation,
- htab->elf.sgot->contents + off);
+ htab->sgot->contents + off);
local_got_offsets[r_symndx] |= 1;
}
}
@@ -2845,7 +2837,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
procedure linkage table. */
BFD_ASSERT (h != NULL);
- if (h->plt.offset == (bfd_vma) -1 || htab->elf.splt == NULL)
+ if (h->plt.offset == (bfd_vma) -1 || htab->splt == NULL)
{
/* We didn't make a PLT entry for this symbol. This
happens when statically linking PIC code, or when
@@ -2853,8 +2845,8 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
break;
}
- relocation = (htab->elf.splt->output_section->vma
- + htab->elf.splt->output_offset
+ relocation = (htab->splt->output_section->vma
+ + htab->splt->output_offset
+ h->plt.offset);
unresolved_reloc = FALSE;
break;
@@ -2993,7 +2985,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
outrel.r_addend = relocation + rel->r_addend;
if (is_plt)
- sec = htab->elf.splt;
+ sec = htab->splt;
if (bfd_is_abs_section (sec))
indx = 0;
@@ -3016,7 +3008,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
if (indx == 0)
{
- osec = htab->elf.text_index_section;
+ osec = htab->text_index_section;
indx = elf_section_data (osec)->dynindx;
}
@@ -3142,7 +3134,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
local_got_offsets[r_symndx] |= 1;
}
- if (htab->elf.sgot == NULL)
+ if (htab->sgot == NULL)
abort ();
if ((off & 1) != 0)
@@ -3153,13 +3145,13 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
int indx = 0;
bfd_boolean need_relocs = FALSE;
- if (htab->elf.srelgot == NULL)
+ if (htab->srelgot == NULL)
abort ();
if (h != NULL)
{
bfd_boolean dyn;
- dyn = htab->elf.dynamic_sections_created;
+ dyn = htab->dynamic_sections_created;
if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
bfd_link_pic (info),
@@ -3190,18 +3182,18 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
case R_TILEPRO_IMM16_X0_TLS_IE_HA:
case R_TILEPRO_IMM16_X1_TLS_IE_HA:
if (need_relocs) {
- bfd_put_32 (output_bfd, 0, htab->elf.sgot->contents + off);
- outrel.r_offset = (htab->elf.sgot->output_section->vma
- + htab->elf.sgot->output_offset + off);
+ bfd_put_32 (output_bfd, 0, htab->sgot->contents + off);
+ outrel.r_offset = (htab->sgot->output_section->vma
+ + htab->sgot->output_offset + off);
outrel.r_addend = 0;
if (indx == 0)
outrel.r_addend = relocation - dtpoff_base (info);
outrel.r_info = ELF32_R_INFO (indx, R_TILEPRO_TLS_TPOFF32);
- tilepro_elf_append_rela_32 (output_bfd, htab->elf.srelgot,
+ tilepro_elf_append_rela_32 (output_bfd, htab->srelgot,
&outrel);
} else {
bfd_put_32 (output_bfd, tpoff (info, relocation),
- htab->elf.sgot->contents + off);
+ htab->sgot->contents + off);
}
break;
@@ -3214,31 +3206,31 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
case R_TILEPRO_IMM16_X0_TLS_GD_HA:
case R_TILEPRO_IMM16_X1_TLS_GD_HA:
if (need_relocs) {
- outrel.r_offset = (htab->elf.sgot->output_section->vma
- + htab->elf.sgot->output_offset + off);
+ outrel.r_offset = (htab->sgot->output_section->vma
+ + htab->sgot->output_offset + off);
outrel.r_addend = 0;
outrel.r_info = ELF32_R_INFO (indx, R_TILEPRO_TLS_DTPMOD32);
- bfd_put_32 (output_bfd, 0, htab->elf.sgot->contents + off);
- tilepro_elf_append_rela_32 (output_bfd, htab->elf.srelgot,
+ bfd_put_32 (output_bfd, 0, htab->sgot->contents + off);
+ tilepro_elf_append_rela_32 (output_bfd, htab->srelgot,
&outrel);
if (indx == 0)
{
BFD_ASSERT (! unresolved_reloc);
bfd_put_32 (output_bfd,
relocation - dtpoff_base (info),
- (htab->elf.sgot->contents + off +
+ (htab->sgot->contents + off +
TILEPRO_BYTES_PER_WORD));
}
else
{
bfd_put_32 (output_bfd, 0,
- (htab->elf.sgot->contents + off +
+ (htab->sgot->contents + off +
TILEPRO_BYTES_PER_WORD));
outrel.r_info = ELF32_R_INFO (indx,
R_TILEPRO_TLS_DTPOFF32);
outrel.r_offset += TILEPRO_BYTES_PER_WORD;
tilepro_elf_append_rela_32 (output_bfd,
- htab->elf.srelgot, &outrel);
+ htab->srelgot, &outrel);
}
}
@@ -3249,9 +3241,9 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
symbol binding locally. Mark it as belonging
to module 1, the executable. */
bfd_put_32 (output_bfd, 1,
- htab->elf.sgot->contents + off );
+ htab->sgot->contents + off );
bfd_put_32 (output_bfd, relocation - dtpoff_base (info),
- htab->elf.sgot->contents + off +
+ htab->sgot->contents + off +
TILEPRO_BYTES_PER_WORD);
}
break;
@@ -3411,7 +3403,7 @@ tilepro_elf_finish_dynamic_symbol (bfd *output_bfd,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
- struct tilepro_elf_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
htab = tilepro_elf_hash_table (info);
BFD_ASSERT (htab != NULL);
@@ -3431,9 +3423,9 @@ tilepro_elf_finish_dynamic_symbol (bfd *output_bfd,
BFD_ASSERT (h->dynindx != -1);
- splt = htab->elf.splt;
- srela = htab->elf.srelplt;
- sgotplt = htab->elf.sgotplt;
+ splt = htab->splt;
+ srela = htab->srelplt;
+ sgotplt = htab->sgotplt;
if (splt == NULL || srela == NULL)
abort ();
@@ -3481,8 +3473,8 @@ tilepro_elf_finish_dynamic_symbol (bfd *output_bfd,
/* This symbol has an entry in the GOT. Set it up. */
- sgot = htab->elf.sgot;
- srela = htab->elf.srelgot;
+ sgot = htab->sgot;
+ srela = htab->srelgot;
BFD_ASSERT (sgot != NULL && srela != NULL);
rela.r_offset = (sgot->output_section->vma
@@ -3528,16 +3520,16 @@ tilepro_elf_finish_dynamic_symbol (bfd *output_bfd,
+ h->root.u.def.section->output_offset);
rela.r_info = ELF32_R_INFO (h->dynindx, R_TILEPRO_COPY);
rela.r_addend = 0;
- if (h->root.u.def.section == htab->elf.sdynrelro)
- s = htab->elf.sreldynrelro;
+ if (h->root.u.def.section == htab->sdynrelro)
+ s = htab->sreldynrelro;
else
- s = htab->elf.srelbss;
+ s = htab->srelbss;
tilepro_elf_append_rela_32 (output_bfd, s, &rela);
}
/* Mark some specially defined symbols as absolute. */
- if (h == htab->elf.hdynamic
- || (h == htab->elf.hgot || h == htab->elf.hplt))
+ if (h == htab->hdynamic
+ || (h == htab->hgot || h == htab->hplt))
sym->st_shndx = SHN_ABS;
return TRUE;
@@ -3551,7 +3543,7 @@ tilepro_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
asection *splt ATTRIBUTE_UNUSED)
{
Elf32_External_Dyn *dyncon, *dynconend;
- struct tilepro_elf_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
htab = tilepro_elf_hash_table (info);
BFD_ASSERT (htab != NULL);
@@ -3567,15 +3559,15 @@ tilepro_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
switch (dyn.d_tag)
{
case DT_PLTGOT:
- s = htab->elf.sgotplt;
+ s = htab->sgotplt;
dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
break;
case DT_JMPREL:
- s = htab->elf.srelplt;
+ s = htab->srelplt;
dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
break;
case DT_PLTRELSZ:
- s = htab->elf.srelplt;
+ s = htab->srelplt;
dyn.d_un.d_val = s->size;
break;
default:
@@ -3593,11 +3585,11 @@ tilepro_elf_finish_dynamic_sections (bfd *output_bfd,
{
bfd *dynobj;
asection *sdyn;
- struct tilepro_elf_link_hash_table *htab;
+ struct elf_link_hash_table *htab;
htab = tilepro_elf_hash_table (info);
BFD_ASSERT (htab != NULL);
- dynobj = htab->elf.dynobj;
+ dynobj = htab->dynobj;
sdyn = bfd_get_linker_section (dynobj, ".dynamic");
@@ -3606,7 +3598,7 @@ tilepro_elf_finish_dynamic_sections (bfd *output_bfd,
asection *splt;
bfd_boolean ret;
- splt = htab->elf.splt;
+ splt = htab->splt;
BFD_ASSERT (splt != NULL && sdyn != NULL);
ret = tilepro_finish_dyn (output_bfd, info, dynobj, sdyn, splt);
@@ -3627,42 +3619,42 @@ tilepro_elf_finish_dynamic_sections (bfd *output_bfd,
= PLT_ENTRY_SIZE;
}
- if (htab->elf.sgotplt)
+ if (htab->sgotplt)
{
- if (bfd_is_abs_section (htab->elf.sgotplt->output_section))
+ if (bfd_is_abs_section (htab->sgotplt->output_section))
{
_bfd_error_handler
- (_("discarded output section: `%pA'"), htab->elf.sgotplt);
+ (_("discarded output section: `%pA'"), htab->sgotplt);
return FALSE;
}
- if (htab->elf.sgotplt->size > 0)
+ if (htab->sgotplt->size > 0)
{
/* Write the first two entries in .got.plt, needed for the dynamic
linker. */
bfd_put_32 (output_bfd, (bfd_vma) -1,
- htab->elf.sgotplt->contents);
+ htab->sgotplt->contents);
bfd_put_32 (output_bfd, (bfd_vma) 0,
- htab->elf.sgotplt->contents + GOT_ENTRY_SIZE);
+ htab->sgotplt->contents + GOT_ENTRY_SIZE);
}
- elf_section_data (htab->elf.sgotplt->output_section)->this_hdr.sh_entsize
+ elf_section_data (htab->sgotplt->output_section)->this_hdr.sh_entsize
= GOT_ENTRY_SIZE;
}
- if (htab->elf.sgot)
+ if (htab->sgot)
{
- if (htab->elf.sgot->size > 0)
+ if (htab->sgot->size > 0)
{
/* Set the first entry in the global offset table to the address of
the dynamic section. */
bfd_vma val = (sdyn ?
sdyn->output_section->vma + sdyn->output_offset :
0);
- bfd_put_32 (output_bfd, val, htab->elf.sgot->contents);
+ bfd_put_32 (output_bfd, val, htab->sgot->contents);
}
- elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize
+ elf_section_data (htab->sgot->output_section)->this_hdr.sh_entsize
= GOT_ENTRY_SIZE;
}
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index 8d622fb..4a75c25 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -3250,9 +3250,6 @@ struct ppc_link_hash_table
/* Incremented every time we size stubs. */
unsigned int stub_iteration;
-
- /* Small local sym cache. */
- struct sym_cache sym_cache;
};
/* Rename some of the generic section flags to better document how they
@@ -4383,7 +4380,8 @@ ppc64_elf_before_check_relocs (bfd *ibfd, struct bfd_link_info *info)
Elf_Internal_Sym *isym;
asection *s;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, r_symndx);
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, ibfd,
+ r_symndx);
if (isym == NULL)
{
if (elf_section_data (opd)->relocs != relocs)
@@ -4684,7 +4682,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
}
else
{
- Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
@@ -4955,7 +4953,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
{
Elf_Internal_Sym *isym;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
@@ -5231,7 +5229,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
void *vpp;
Elf_Internal_Sym *isym;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c
index da72c78..c8c691e 100644
--- a/bfd/elf64-s390.c
+++ b/bfd/elf64-s390.c
@@ -663,9 +663,6 @@ struct elf_s390_link_hash_table
bfd_vma offset;
} tls_ldm_got;
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-
/* Options passed from the linker. */
struct s390_elf_params *params;
};
@@ -852,7 +849,7 @@ elf_s390_check_relocs (bfd *abfd,
if (r_symndx < symtab_hdr->sh_info)
{
/* A local symbol. */
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
@@ -1216,7 +1213,7 @@ elf_s390_check_relocs (bfd *abfd,
asection *s;
void *vpp;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
@@ -2258,7 +2255,7 @@ elf_s390_relocate_section (bfd *output_bfd,
& 0xff00f000) == 0xe300c000
&& bfd_get_8 (input_bfd,
contents + rel->r_offset + 3) == 0x04))
- && (isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ && (isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
input_bfd, r_symndx))
&& isym->st_shndx != SHN_ABS
&& h != htab->elf.hdynamic
@@ -3572,7 +3569,7 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd,
if (local_plt[i].plt.offset != (bfd_vma) -1)
{
asection *sec = local_plt[i].sec;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, i);
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, ibfd, i);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 311fb28..f97a6a0 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -1371,7 +1371,7 @@ elf_x86_64_tls_transition (struct bfd_link_info *info, bfd *abfd,
{
Elf_Internal_Sym *isym;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL);
}
@@ -1559,7 +1559,7 @@ elf_x86_64_convert_load_reloc (bfd *abfd,
if (h == NULL)
{
Elf_Internal_Sym *isym
- = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx);
+ = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx);
/* Skip relocation against undefined symbols. */
if (isym->st_shndx == SHN_UNDEF)
@@ -1907,7 +1907,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (r_symndx < symtab_hdr->sh_info)
{
/* A local symbol. */
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
goto error_return;
@@ -2308,7 +2308,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info,
asection *s;
void **vpp;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
goto error_return;
diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
index 8f1e5e1..2c88f28 100644
--- a/bfd/elfnn-aarch64.c
+++ b/bfd/elfnn-aarch64.c
@@ -2643,9 +2643,6 @@ struct elf_aarch64_link_hash_table
/* The bytes of the subsequent PLT entry. */
const bfd_byte *plt_entry;
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-
/* For convenience in allocate_dynrelocs. */
bfd *obfd;
@@ -7610,7 +7607,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (r_symndx < symtab_hdr->sh_info)
{
/* A local symbol. */
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
@@ -7837,7 +7834,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info,
asection *s;
void **vpp;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c
index a5fa415..fb78c24 100644
--- a/bfd/elfnn-riscv.c
+++ b/bfd/elfnn-riscv.c
@@ -113,9 +113,6 @@ struct riscv_elf_link_hash_table
/* Short-cuts to get to dynamic linker sections. */
asection *sdyntdata;
- /* Small local sym to section mapping cache. */
- struct sym_cache sym_cache;
-
/* The max alignment of output sections. */
bfd_vma max_alignment;
};
@@ -681,7 +678,7 @@ riscv_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
void *vpp;
Elf_Internal_Sym *isym;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index 7bf4257..7cfce13 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -527,9 +527,6 @@ struct mips_elf_link_hash_table
returns null. */
asection *(*add_stub_section) (const char *, asection *, asection *);
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-
/* Is the PLT header compressed? */
unsigned int plt_header_is_comp : 1;
};
@@ -4401,7 +4398,7 @@ mips_elf_resolve_got_page_ref (void **refp, void *data)
Elf_Internal_Sym *isym;
/* Read in the symbol. */
- isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
+ isym = bfd_sym_from_r_symndx (&htab->root.sym_cache, ref->u.abfd,
ref->symndx);
if (isym == NULL)
{
diff --git a/bfd/elfxx-sparc.c b/bfd/elfxx-sparc.c
index bd046ac..273789e 100644
--- a/bfd/elfxx-sparc.c
+++ b/bfd/elfxx-sparc.c
@@ -1391,7 +1391,8 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (r_symndx < symtab_hdr->sh_info)
{
/* A local symbol. */
- isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx);
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd,
+ r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elfxx-sparc.h b/bfd/elfxx-sparc.h
index 4082245..f09b073 100644
--- a/bfd/elfxx-sparc.h
+++ b/bfd/elfxx-sparc.h
@@ -55,9 +55,6 @@ struct _bfd_sparc_elf_link_hash_table
bfd_vma offset;
} tls_ldm_got;
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-
/* Used by local STT_GNU_IFUNC symbols. */
htab_t loc_hash_table;
void *loc_hash_memory;
diff --git a/bfd/elfxx-tilegx.c b/bfd/elfxx-tilegx.c
index c0494a4..2631a0d 100644
--- a/bfd/elfxx-tilegx.c
+++ b/bfd/elfxx-tilegx.c
@@ -835,9 +835,6 @@ struct tilegx_elf_link_hash_table
/* Whether LE transition has been disabled for some of the
sections. */
bfd_boolean disable_le_transition;
-
- /* Small local sym to section mapping cache. */
- struct sym_cache sym_cache;
};
@@ -1979,7 +1976,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
void *vpp;
Elf_Internal_Sym *isym;
- isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
abfd, r_symndx);
if (isym == NULL)
return FALSE;
diff --git a/bfd/elfxx-x86.h b/bfd/elfxx-x86.h
index 7541554..75e0ae3 100644
--- a/bfd/elfxx-x86.h
+++ b/bfd/elfxx-x86.h
@@ -468,9 +468,6 @@ struct elf_x86_link_hash_table
/* The amount of space used by the jump slots in the GOT. */
bfd_vma sgotplt_jump_table_size;
- /* Small local sym cache. */
- struct sym_cache sym_cache;
-
/* _TLS_MODULE_BASE_ symbol. */
struct bfd_link_hash_entry *tls_module_base;