aboutsummaryrefslogtreecommitdiff
path: root/bfd/elfxx-x86.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-09-07 17:19:10 -0700
committerH.J. Lu <hjl.tools@gmail.com>2017-09-07 17:21:07 -0700
commit7a382c1c50fca0d4bc4c2e618ff6ac222c4e2137 (patch)
tree5fd76f03573b7ebbc4b986585323b5e7dbf419e3 /bfd/elfxx-x86.c
parentbd757a5bf293aaed6c6aa79776bbef13ca2da92b (diff)
downloadgdb-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.c17
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)