diff options
author | Maciej W. Rozycki <macro@imgtec.com> | 2017-01-18 18:18:21 +0000 |
---|---|---|
committer | Maciej W. Rozycki <macro@imgtec.com> | 2017-01-18 18:24:08 +0000 |
commit | 9e009953a54bfbf79d83f37797f846c923aeea43 (patch) | |
tree | 3832acbc43881dc71d29edff5e1c96249df13e70 /ld/testsuite | |
parent | c13a63b04677906020ee72a28d5869d979e36a6f (diff) | |
download | gdb-9e009953a54bfbf79d83f37797f846c923aeea43.zip gdb-9e009953a54bfbf79d83f37797f846c923aeea43.tar.gz gdb-9e009953a54bfbf79d83f37797f846c923aeea43.tar.bz2 |
PR gas/20649: MIPS: Fix GOT16/LO16 reloc pairing with comdat sections
Correct a regression from commit 8614eeee67f9 ("Traditional MIPS
patches"), <https://sourceware.org/ml/binutils/2000-07/msg00018.html>,
which caused symbols in linkonce or what is these days known as comdat
sections to be treated as external for the purpose of PIC relocation
generation even if their binding remains STB_LOCAL. This in turn
disabled GOT16/LO16 relocation pairing with references to such symbols,
as no complementing LO16 relocation is expected for external GOT16
references in the o32 ABI, which ultimately leads to link errors, e.g.:
ld: comdat-reloc.o: Can't find matching LO16 reloc against `foo' for R_MIPS_GOT16 at 0x24 in section `.text.bar[bar]'
as with the LD test case included with this change.
Revert the special case for symbols in comdat sections then, making code
actually match `adjust_reloc_syms' as indicated in its explanatory
comment, and adjust calling code accordingly. Also bring back the
corresponding description of what now is `s_is_linkonce', lost with
commit 5f0fe04bc550 ("Improved MIPS16/MIPS32 code intermixing for
gas."), <https://www.sourceware.org/ml/binutils/2006-07/msg00039.html>.
gas/
PR gas/20649
* config/tc-mips.c (pic_need_relax): Don't check for linkonce
symbols, remove the `segtype' parameter.
(mips_frob_file, md_estimate_size_before_relax): Adjust
accordingly.
(s_is_linkonce): Add an explanatory comment.
* testsuite/gas/mips/comdat-reloc.d: New test.
* testsuite/gas/mips/comdat-reloc.s: New test source.
* testsuite/gas/mips/mips.exp: Run the new test.
ld/
PR gas/20649
* testsuite/ld-mips-elf/mips-elf.exp: Add PIC comdat GOT16/LO16
relocation pairing link test.
Diffstat (limited to 'ld/testsuite')
-rw-r--r-- | ld/testsuite/ld-mips-elf/mips-elf.exp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp index 9946708..5639c84 100644 --- a/ld/testsuite/ld-mips-elf/mips-elf.exp +++ b/ld/testsuite/ld-mips-elf/mips-elf.exp @@ -573,6 +573,13 @@ if { $has_newabi } { } run_dump_test "reloc-local-overflow" [list [list ld $abi_ldflags(o32)]] +run_ld_link_tests [list \ + [list \ + "MIPS link ELF o32 PIC comdat GOT16/LO16 relocation pairing" \ + "$abi_ldflags(o32) -e bar" "" "$abi_asflags(o32) -mno-pdr" \ + "../../../gas/testsuite/gas/mips/comdat-reloc.s" \ + {} \ + "comdat-reloc"]] if {$has_newabi && $linux_gnu} { run_dump_test "eh-frame1-n32" |