aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2018-10-17 09:17:30 +1030
committerAlan Modra <amodra@gmail.com>2018-10-17 14:36:18 +1030
commit4de5434b694fc260d02610e8e7fec21b2923600a (patch)
treed29cc20953677fc78185deda6aafab76f42ac6a8 /bfd
parentc69f6b80965608480be970c3c42f9da1b08a3ef0 (diff)
downloadbinutils-4de5434b694fc260d02610e8e7fec21b2923600a.zip
binutils-4de5434b694fc260d02610e8e7fec21b2923600a.tar.gz
binutils-4de5434b694fc260d02610e8e7fec21b2923600a.tar.bz2
PR23653, ld SIGSEGVs when attempts to link sparc object with x86_64 library
This patch improves dynobj selection. This allows the testcase in the PR to proceed further before segfaulting due to other bugs in the sparc backend. ../ld/ld-new --eh-frame-hdr -m elf_x86_64 -shared -o bug.so.5 bug.o ./libc.so.6 ./crtendS.o ../ld/ld-new: sparc architecture of input file `bug.o' is incompatible with i386:x86-64 output ../ld/ld-new: bug.o: in function `a': bug.c:(.text+0x4): undefined reference to `_GLOBAL_OFFSET_TABLE_' ../ld/ld-new: bug.c:(.text+0x8): undefined reference to `_GLOBAL_OFFSET_TABLE_' Segmentation fault PR 23653 * elflink.c (_bfd_elf_link_create_dynstrtab): Match elf_object_id too when choosing dynobj.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elflink.c1
2 files changed, 7 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 9fcc6fc..0178d97 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2018-10-17 Alan Modra <amodra@gmail.com>
+
+ PR 23653
+ * elflink.c (_bfd_elf_link_create_dynstrtab): Match elf_object_id
+ too when choosing dynobj.
+
2018-10-16 Alan Modra <amodra@gmail.com>
* peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Simplify
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 78d8c54..c3876cb 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -223,6 +223,7 @@ _bfd_elf_link_create_dynstrtab (bfd *abfd, struct bfd_link_info *info)
if ((ibfd->flags
& (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0
&& bfd_get_flavour (ibfd) == bfd_target_elf_flavour
+ && elf_object_id (ibfd) == elf_hash_table_id (hash_table)
&& !((s = ibfd->sections) != NULL
&& s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS))
{