PR23653, ld SIGSEGVs when attempts to link sparc object with x86_64 library
authorAlan Modra <amodra@gmail.com>
Tue, 16 Oct 2018 22:47:30 +0000 (09:17 +1030)
committerAlan Modra <amodra@gmail.com>
Wed, 17 Oct 2018 04:06:18 +0000 (14:36 +1030)
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.

bfd/ChangeLog
bfd/elflink.c

index 9fcc6fc..0178d97 100644 (file)
@@ -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
index 78d8c54..c3876cb 100644 (file)
@@ -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))
              {