aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2019-10-07 13:37:23 +1030
committerAlan Modra <amodra@gmail.com>2019-10-07 13:37:23 +1030
commit847d518374be1c73b812e312a26341115d3f6f5a (patch)
tree27fe3429795ec071efde47db3ab4adf691bf1a7b /ld
parentPowerPC TLS tests (diff)
downloadbinutils-gdb-847d518374be1c73b812e312a26341115d3f6f5a.tar.gz
binutils-gdb-847d518374be1c73b812e312a26341115d3f6f5a.tar.bz2
binutils-gdb-847d518374be1c73b812e312a26341115d3f6f5a.zip
Bogus "final link failed" messages
This patch is a result of noticing messages like the following: tmpdir/tls32.o: in function `_start': (.text+0x1c): unresolvable R_PPC_REL24 relocation against symbol `__tls_get_addr_opt' ./ld-new: final link failed: symbol needs debug section which does not exist The "needs debug section" comes from attempting to use debug info to find source line information to print the first error message. That error isn't of interest to the user, and any previous bfd_error value which might be of interest is overwritten. So save and restore bfd_error around the fancy error reporting code. That still doesn't leave us with a clean bfd_error. Now we get ./ld-new: final link failed: nonrepresentable section on output An unresolvable relocation surely doesn't mean there is some bfd section that ld doesn't know how to output! Digging into that showed a _bfd_elf_section_from_bfd_section failure attempting to find an elf section correcsponding to ".interp". So don't go looking for elf sections on linker created bfd sections. And then fix the linker testsuite which expected the bogus message.. bfd/ * elflink.c (elf_fixup_link_order): Don't attempt to find an elf_section for linker created bfd sections. ld/ * ldmisc.c (vfinfo): Save and restore bfd_error around bfd function calls that might set it. * testsuite/ld-elf/indirect.exp: Don't expect "nonrepresentable section" message.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog7
-rw-r--r--ld/ldmisc.c2
-rw-r--r--ld/testsuite/ld-elf/indirect.exp3
3 files changed, 10 insertions, 2 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index a3fd84f1bd1..ddec8c79ce3 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,5 +1,12 @@
2019-10-07 Alan Modra <amodra@gmail.com>
+ * ldmisc.c (vfinfo): Save and restore bfd_error around bfd
+ function calls that might set it.
+ * testsuite/ld-elf/indirect.exp: Don't expect "nonrepresentable
+ section" message.
+
+2019-10-07 Alan Modra <amodra@gmail.com>
+
* testsuite/ld-powerpc/tlsexe.r: Adjust for added TLSMARK symbol.
* testsuite/ld-powerpc/tlsexe32.r: Likewise.
* testsuite/ld-powerpc/tlsso.r: Likewise.
diff --git a/ld/ldmisc.c b/ld/ldmisc.c
index 848e227b052..2e53d645985 100644
--- a/ld/ldmisc.c
+++ b/ld/ldmisc.c
@@ -322,6 +322,7 @@ vfinfo (FILE *fp, const char *fmt, va_list ap, bfd_boolean is_warning)
unsigned int linenumber;
bfd_boolean discard_last;
bfd_boolean done;
+ bfd_error_type last_bfd_error = bfd_get_error ();
abfd = args[arg_no].reladdr.abfd;
section = args[arg_no].reladdr.sec;
@@ -406,6 +407,7 @@ vfinfo (FILE *fp, const char *fmt, va_list ap, bfd_boolean is_warning)
}
if (!done)
lfinfo (fp, "(%pA+0x%v)", section, offset);
+ bfd_set_error (last_bfd_error);
if (discard_last)
{
diff --git a/ld/testsuite/ld-elf/indirect.exp b/ld/testsuite/ld-elf/indirect.exp
index 1acb556dba0..6f1fed34e7f 100644
--- a/ld/testsuite/ld-elf/indirect.exp
+++ b/ld/testsuite/ld-elf/indirect.exp
@@ -123,11 +123,10 @@ set testname "Indirect symbol 1b"
set cmd "$ld -e start -o tmpdir/indirect1 tmpdir/indirect1a.o tmpdir/libindirect1c.so tmpdir/indirect1b.o"
check_link_message "$cmd" [list $string1 $string] "$testname"
-set string ": final link failed: nonrepresentable section on output"
set string2 ": no symbol version section for versioned symbol \`foo@FOO\'"
set testname "Indirect symbol 2"
set cmd "$ld -shared -o tmpdir/indirect2.so tmpdir/indirect2.o"
-check_link_message "$cmd" [list $string2 $string] "$testname"
+check_link_message "$cmd" [list $string2] "$testname"
global NOPIE_CFLAGS NOPIE_LDFLAGS