From: H.J. Lu Date: Fri, 8 Sep 2017 00:19:10 +0000 (-0700) Subject: x86; Don't add elf64-x86-64.lo nor elf64.lo together with elfxx-x86.lo X-Git-Tag: users/ARM/embedded-binutils-master-2017q4~1119 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7a382c1c50fca0d4bc4c2e618ff6ac222c4e2137;p=platform%2Fupstream%2Fbinutils.git 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. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index d89909b..c3144b3 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,19 @@ +2017-09-07 H.J. Lu + + * 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. + 2017-09-07 Palmer Dabbelt * (_bfd_riscv_relax_align): Call bfd_set_error and diff --git a/bfd/configure b/bfd/configure index f555c62..32ee062 100755 --- a/bfd/configure +++ b/bfd/configure @@ -14758,13 +14758,6 @@ rm -f conftest* ;; esac -# elfxx-x86.lo needs elf64-x86-64.lo and elf64.lo with 64-bit BFD. -case "${bfd_backends}-${wordsize}" in - *elfxx-x86.lo*-64*) - bfd_backends="${bfd_backends} elf64-x86-64.lo elf64.lo" - ;; -esac - tdefaults="" test -n "${defvec}" && tdefaults="${tdefaults} -DDEFAULT_VECTOR=${defvec}" test -n "${selvecs}" && tdefaults="${tdefaults} -DSELECT_VECS='${selvecs}'" diff --git a/bfd/configure.ac b/bfd/configure.ac index 1930a41..0e4c669 100644 --- a/bfd/configure.ac +++ b/bfd/configure.ac @@ -825,13 +825,6 @@ case ${host64}-${target64}-${want64} in ;; esac -# elfxx-x86.lo needs elf64-x86-64.lo and elf64.lo with 64-bit BFD. -case "${bfd_backends}-${wordsize}" in - *elfxx-x86.lo*-64*) - bfd_backends="${bfd_backends} elf64-x86-64.lo elf64.lo" - ;; -esac - tdefaults="" test -n "${defvec}" && tdefaults="${tdefaults} -DDEFAULT_VECTOR=${defvec}" test -n "${selvecs}" && tdefaults="${tdefaults} -DSELECT_VECS='${selvecs}'" diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index cee5182..a64a09d 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -4628,6 +4628,9 @@ elf_i386_link_setup_gnu_properties (struct bfd_link_info *info) break; } + plt_layout.r_info = elf32_r_info; + plt_layout.r_sym = elf32_r_sym; + return _bfd_x86_elf_link_setup_gnu_properties (info, &plt_layout); } diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index a2a4be8..10da820 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -5185,6 +5185,17 @@ elf_x86_64_link_setup_gnu_properties (struct bfd_link_info *info) plt_layout.normal_target = FALSE; } + if (ABI_64_P (info->output_bfd)) + { + plt_layout.r_info = elf64_r_info; + plt_layout.r_sym = elf64_r_sym; + } + else + { + plt_layout.r_info = elf32_r_info; + plt_layout.r_sym = elf32_r_sym; + } + return _bfd_x86_elf_link_setup_gnu_properties (info, &plt_layout); } 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) diff --git a/bfd/elfxx-x86.h b/bfd/elfxx-x86.h index 5d0a28a..6e77356 100644 --- a/bfd/elfxx-x86.h +++ b/bfd/elfxx-x86.h @@ -362,6 +362,9 @@ struct elf_x86_plt_layout_table /* TRUE if this is a VxWorks x86 target. */ bfd_boolean is_vxworks; + + bfd_vma (*r_info) (bfd_vma, bfd_vma); + bfd_vma (*r_sym) (bfd_vma); }; struct elf_x86_obj_tdata