This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug lto/48056] New: lto throws out needed symbols when linking QtScript
- From: "bero at arklinux dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 10 Mar 2011 10:19:24 +0000
- Subject: [Bug lto/48056] New: lto throws out needed symbols when linking QtScript
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48056
Summary: lto throws out needed symbols when linking QtScript
Product: gcc
Version: 4.6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: lto
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: bero@arklinux.org
Trying to build Qt with -flto (after working around bug 48042) results in
$ g++ [...] -flto=8 [...] -shared -Wl,-Bsymbolic-functions
-Wl,-soname,libQtScript.so.4 -o libQtScript.so.4.7.2 obj/release/pcre_compile.o
[...] obj/release/JITStubs.o [...]
/tmp/ccKsaUWN.ltrans0.ltrans.o: In function `ctiVMThrowTrampoline':
ccKsaUWN.ltrans0.o:(.text+0x4c): undefined reference to `cti_vm_throw'
cti_vm_throw is defined in JITStubs.cpp and exists in obj/release/JITStubs.o
(as passed to the compiler).
$ nm obj/release/JITStubs.o |grep cti_vm_throw
0000000000006ad0 T cti_vm_throw
$ objdump -s obj/release/JITStubs.o
[...]
Contents of section .gnu.lto_cti_vm_throw.1ff1d9c6:
0000 789c9d57 7b705457 19ffbe73 f7ee23bb x..W{pTW...s..#.
[...]
This is probably caused by the fact that ctiVMThrowTrampoline (the user of
cti_vm_throw) uses cti_vm_throw through an asm statement:
#define HIDE_SYMBOL(name) ".hidden " #name
#define SYMBOL_STRING(name) #name
#define SYMBOL_STRING_RELOCATION(name) #name "@plt"
asm volatile (
".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
HIDE_SYMBOL(ctiVMThrowTrampoline) "\n"
SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
"movq %rsp, %rdi" "\n"
"call " SYMBOL_STRING_RELOCATION(cti_vm_throw) "\n"
"addq $0x48, %rsp" "\n"
"popq %rbx" "\n"
"popq %r15" "\n"
"popq %r14" "\n"
"popq %r13" "\n"
"popq %r12" "\n"
"popq %rbp" "\n"
"ret" "\n"
);