bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug ld/26150] Assertion failure at ldlang.c:7269 when using inline asse


From: amodra at gmail dot com
Subject: [Bug ld/26150] Assertion failure at ldlang.c:7269 when using inline assembly, -flto and --no-whole-archive
Date: Tue, 23 Jun 2020 10:12:06 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=26150

--- Comment #10 from Alan Modra <amodra at gmail dot com> ---
This took a little time to recreate, mainly due to using $(wildcard ) in the
makefile.  That was a bad idea, because the order of files in the archive
matters for this testcase, and apparently my file order was different to yours.

Anyway, the trigger for the ld problem here is that you used plain "ar" to
create the archive rather than "gcc-ar" or "ar --plugin ...liblto_plugin.so". 
That leads to the archive map using the normal object file symbols rather than
the lto symbols, and there is a difference in the case of that quite nasty
archive0__object1.o generated from assembly.

$ aarch64-linux-nm archive0__object1.o
                 U archive0__object0
0000000000000000 T archive0__object1
$ aarch64-linux-gcc-nm archive0__object1.o
/usr/local/bin/../lib/gcc/aarch64-linux/11.0.0/../../../../aarch64-linux/bin/nm:
archive0__object1.o: no symbols
$ aarch64-linux-nm --plugin
/usr/local/libexec/gcc/aarch64-linux/11.0.0/liblto_plugin.so
archive0__object1.o
aarch64-linux-nm: archive0__object1.o: no symbols

So the lesson for users is to not write asm statements that define global
symbols, particularly if the C file might be compiled with -flto.

Catching this case in the linker is a pain.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]