diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-09-07 17:19:10 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-09-07 17:21:07 -0700 |
commit | 7a382c1c50fca0d4bc4c2e618ff6ac222c4e2137 (patch) | |
tree | 5fd76f03573b7ebbc4b986585323b5e7dbf419e3 /bfd/elfxx-x86.c | |
parent | bd757a5bf293aaed6c6aa79776bbef13ca2da92b (diff) | |
download | gdb-7a382c1c50fca0d4bc4c2e618ff6ac222c4e2137.zip gdb-7a382c1c50fca0d4bc4c2e618ff6ac222c4e2137.tar.gz gdb-7a382c1c50fca0d4bc4c2e618ff6ac222c4e2137.tar.bz2 |
x86; Don't add elf64-x86-64.lo nor elf64.lo together with elfxx-x86.lo
Don't set r_info and r_sym fields in _bfd_x86_elf_link_hash_table_create.
Instead, set them in _bfd_x86_elf_link_setup_gnu_properties. We can
avoid adding elf64-x86-64.lo and elf64.lo together with elfxx-x86.lo to
bfd_backends.
* configure.ac (bfd_backends): Don't add elf64-x86-64.lo nor
elf64.lo together with elfxx-x86.lo for 64-bit BFD.
* configure: Regenerated.
* elf32-i386.c (elf_i386_link_setup_gnu_properties): Set r_info
and r_sym fields of plt_layout.
* elf64-x86-64.c (elf_x86_64_link_setup_gnu_properties):
Likewise.
* elfxx-x86.c (elf_x86_64_is_reloc_section): Remove BFD64 check.
(_bfd_x86_elf_link_hash_table_create): Likewise. Don't set
r_info nor r_sym fields.
(_bfd_x86_elf_link_setup_gnu_properties): Set r_info and r_sym
fields of htab.
* elfxx-x86.h (elf_x86_plt_layout_table): Add r_info and r_sym.
Diffstat (limited to 'bfd/elfxx-x86.c')
-rw-r--r-- | bfd/elfxx-x86.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c index 4f6b09e..bbb0578 100644 --- a/bfd/elfxx-x86.c +++ b/bfd/elfxx-x86.c @@ -731,13 +731,11 @@ elf_i386_is_reloc_section (const char *secname) return CONST_STRNEQ (secname, ".rel"); } -#ifdef BFD64 static bfd_boolean elf_x86_64_is_reloc_section (const char *secname) { return CONST_STRNEQ (secname, ".rela"); } -#endif /* Create an x86 ELF linker hash table. */ @@ -762,8 +760,6 @@ _bfd_x86_elf_link_hash_table_create (bfd *abfd) return NULL; } -#ifdef BFD64 - /* NB: If BFD64 isn't defined, only i386 will be supported. */ if (bed->target_id == X86_64_ELF_DATA) { ret->is_reloc_section = elf_x86_64_is_reloc_section; @@ -775,18 +771,13 @@ _bfd_x86_elf_link_hash_table_create (bfd *abfd) } if (ABI_64_P (abfd)) { - ret->r_info = elf64_r_info; - ret->r_sym = elf64_r_sym; ret->sizeof_reloc = sizeof (Elf64_External_Rela); ret->pointer_r_type = R_X86_64_64; ret->dynamic_interpreter = ELF64_DYNAMIC_INTERPRETER; ret->dynamic_interpreter_size = sizeof ELF64_DYNAMIC_INTERPRETER; } else -#endif { - ret->r_info = elf32_r_info; - ret->r_sym = elf32_r_sym; if (bed->target_id == X86_64_ELF_DATA) { ret->sizeof_reloc = sizeof (Elf32_External_Rela); @@ -2188,9 +2179,6 @@ error_alignment: pbfd = _bfd_elf_link_setup_gnu_properties (info); - if (bfd_link_relocatable (info)) - return pbfd; - bed = get_elf_backend_data (info->output_bfd); htab = elf_x86_hash_table (info, bed->target_id); @@ -2198,6 +2186,11 @@ error_alignment: return pbfd; htab->is_vxworks = plt_layout->is_vxworks; + htab->r_info = plt_layout->r_info; + htab->r_sym = plt_layout->r_sym; + + if (bfd_link_relocatable (info)) + return pbfd; use_ibt_plt = info->ibtplt || info->ibt; if (!use_ibt_plt && pbfd != NULL) |