From 23ec1e32b1ab714649a7c25e49b5d721fe3bd3db Mon Sep 17 00:00:00 2001 From: "Maciej W. Rozycki" Date: Mon, 24 Apr 2017 20:15:31 +0100 Subject: PR ld/21334: Always call `_bfd_elf_link_renumber_dynsyms' if required Complement commit e17b0c351f0b ("MIPS/BFD: Respect the ELF gABI dynamic symbol table sort requirement") and correct an inconsistency in dynamic symbol accounting data causing an assertion failure in the MIPS backend: ld: BFD (GNU Binutils) 2.28.51.20170330 assertion fail ../../binutils-gdb/bfd/elfxx-mips.c:3860 in the course of making a GOT entry in a static binary to satisfy a GOT relocation present in input, due to the local dynamic symbol count not having been established. To do so let backends request `_bfd_elf_link_renumber_dynsyms' to be always called, rather than where a dynamic binary is linked only, and then make this request in the MIPS backend. bfd/ PR ld/21334 * elf-bfd.h (elf_backend_data): Add `always_renumber_dynsyms' member. * elfxx-target.h [!elf_backend_always_renumber_dynsyms] (elf_backend_always_renumber_dynsyms): Define. (elfNN_bed): Initialize `always_renumber_dynsyms' member. * elfxx-mips.h (elf_backend_always_renumber_dynsyms): Define. * elflink.c (bfd_elf_size_dynamic_sections): Also call `_bfd_elf_link_renumber_dynsyms' if the backend has requested it. (bfd_elf_size_dynsym_hash_dynstr): Likewise. ld/ PR ld/21334 * testsuite/ld-mips-elf/pr21334.dd: New test. * testsuite/ld-mips-elf/pr21334.gd: New test. * testsuite/ld-mips-elf/pr21334.ld: New test linker script. * testsuite/ld-mips-elf/pr21334.s: New test source. * testsuite/ld-mips-elf/mips-elf.exp: Run the new tests. --- ld/testsuite/ld-mips-elf/mips-elf.exp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'ld/testsuite/ld-mips-elf/mips-elf.exp') diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp index 3ef9963..f824e7c 100644 --- a/ld/testsuite/ld-mips-elf/mips-elf.exp +++ b/ld/testsuite/ld-mips-elf/mips-elf.exp @@ -1129,3 +1129,13 @@ if { $linux_gnu } { "export-$class-ref"]] } } + +# PR ld/21334 GOT relocation in static binary test. +run_ld_link_tests [list \ + [list \ + "PR ld/21233 MIPS GOT16 relocation in static binary" \ + "$abi_ldflags(o32) -e foo -T pr21334.ld" "" "$abi_asflags(o32)" \ + {pr21334.s} \ + {{objdump {-d --prefix-addresses} pr21334.dd} \ + {readelf -A pr21334.gd}} \ + "pr21334"]] -- cgit v1.1