This is the mail archive of the mailing list for the binutils project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb/binutils-2_29-branch] PR22300, Abort in elf32_hppa_relocate_section building polyml;h=1dac3b4518f811cc124df2040db3c5a0e9049bb3

commit 1dac3b4518f811cc124df2040db3c5a0e9049bb3
Author: Alan Modra <>
Date:   Sat Oct 28 14:10:55 2017 +1030

    PR22300, Abort in elf32_hppa_relocate_section building polyml
    polyml produces object files with the wrong OS/ABI for hppa-linux.
    This, along with the fact that elf32-hppa.c is using the strictest
    backend relocs_compatible, results in wrong merging of ELF symbols.
    So, remove the relocs_compatible check in _bfd_elf_merge_symbol.
    _bfd_elf_merge_symbol is only called nowadays from within blocks
    protected by is_elf_hash_table, so "we are doing an ELF link" as the
    removed comment says, is true.
    Also relax relocs_compatible for hppa and powerpc.  relocs_compatible
    is used for more than just merging symbols, as the name suggests.
    This allows objects that are in fact reasonably compatible to be
    	PR 22300
    	* elflink.c (_bfd_elf_merge_symbol): Remove relocs_compatible check.
    	* elf32-hppa.c (elf_backend_relocs_compatible): Define.
    	* elf32-ppc.c (elf_backend_relocs_compatible): Define.
    	* elf64-ppc.c (elf_backend_relocs_compatible): Define.
    (cherry picked from commit c0e331c794d6bd75d9be9bea6145513074c33f39)

 bfd/ChangeLog    | 7 +++++++
 bfd/elf32-hppa.c | 1 +
 bfd/elf32-ppc.c  | 1 +
 bfd/elf64-ppc.c  | 1 +
 bfd/elflink.c    | 5 -----
 5 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 320e3f5..ea035e7 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,6 +1,13 @@
 2017-11-01  Alan Modra  <>
 	Apply from master
+	2017-10-28  Alan Modra  <>
+	PR 22300
+	* elflink.c (_bfd_elf_merge_symbol): Remove relocs_compatible check.
+	* elf32-hppa.c (elf_backend_relocs_compatible): Define.
+	* elf32-ppc.c (elf_backend_relocs_compatible): Define.
+	* elf64-ppc.c (elf_backend_relocs_compatible): Define.
 	2017-10-25  Alan Modra  <>
 	* archive.c (_bfd_compute_and_write_armap): Match "__gnu_lto_slim"
 	optionally prefixed with "_".
diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c
index 548d656..62a689a 100644
--- a/bfd/elf32-hppa.c
+++ b/bfd/elf32-hppa.c
@@ -4615,6 +4615,7 @@ elf32_hppa_elf_get_symbol_type (Elf_Internal_Sym *elf_sym, int type)
 #define elf_backend_adjust_dynamic_symbol    elf32_hppa_adjust_dynamic_symbol
 #define elf_backend_copy_indirect_symbol     elf32_hppa_copy_indirect_symbol
 #define elf_backend_check_relocs	     elf32_hppa_check_relocs
+#define elf_backend_relocs_compatible	     _bfd_elf_relocs_compatible
 #define elf_backend_create_dynamic_sections  elf32_hppa_create_dynamic_sections
 #define elf_backend_fake_sections	     elf_hppa_fake_sections
 #define elf_backend_relocate_section	     elf32_hppa_relocate_section
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index f9a32c2..3f42f2a 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -10931,6 +10931,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
 #define elf_backend_relocate_section		ppc_elf_relocate_section
 #define elf_backend_create_dynamic_sections	ppc_elf_create_dynamic_sections
 #define elf_backend_check_relocs		ppc_elf_check_relocs
+#define elf_backend_relocs_compatible		_bfd_elf_relocs_compatible
 #define elf_backend_copy_indirect_symbol	ppc_elf_copy_indirect_symbol
 #define elf_backend_adjust_dynamic_symbol	ppc_elf_adjust_dynamic_symbol
 #define elf_backend_add_symbol_hook		ppc_elf_add_symbol_hook
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index 277bb0e..3c8e286 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -101,6 +101,7 @@ static bfd_vma opd_entry_value
 #define elf_backend_notice_as_needed	      ppc64_elf_notice_as_needed
 #define elf_backend_archive_symbol_lookup     ppc64_elf_archive_symbol_lookup
 #define elf_backend_check_relocs	      ppc64_elf_check_relocs
+#define elf_backend_relocs_compatible	      _bfd_elf_relocs_compatible
 #define elf_backend_gc_keep		      ppc64_elf_gc_keep
 #define elf_backend_gc_mark_dynamic_ref       ppc64_elf_gc_mark_dynamic_ref
 #define elf_backend_gc_mark_hook	      ppc64_elf_gc_mark_hook
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 39d878c..245d89c 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -1161,11 +1161,6 @@ _bfd_elf_merge_symbol (bfd *abfd,
   if (pold_weak)
     *pold_weak = oldweak;
-  /* This code is for coping with dynamic objects, and is only useful
-     if we are doing an ELF link.  */
-  if (!(*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
-    return TRUE;
   /* We have to check it for every instance since the first few may be
      references and not all compilers emit symbol type for undefined
      symbols.  */

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]