On 7/20/2010 1:25 AM, Eli Friedman wrote:> On Mon, Jul 19, 2010 at 11:06 PM, Guoliang Jin<jingl1345 at gmail.com> wrote: >> Hi, >> >> I would like to get the whole program bitcode with debug information in it. >> >> I tried to use CFLAGS = "-O4 -g", but it ends with the following error: >> collect2: ld terminated with signal 6 [Aborted] >> Unknown constant! >> UNREACHABLE executed at >> /local.toadette/aliang/fixing/llvm-2.7/llvm-2.7/lib/Bitcode/Writer/BitcodeWriter.cpp:895! >> >> What is the right way to get a whole program bitcode with debug >> information using gold plugin? > That looks like a bug; can you attach a testcase?I suppose you also have the gold plugin with the also-emit-llvm support. It is in the mainline llvm, and I ported it back to 2.7. The same error happened for both of them: the modified 2.7, and a mainline I checked out three weeks ago. This problem is reproducible while compiling flex-2.5.35.tar.gz and many others (mysql and cherokee). I set the following: export PATH="$LLVMPREFIX/bin:$LLVMGCCPREFIX/bin:$PATH" export CC="llvm-gcc -use-gold-plugin -Wl,-plugin-opt=also-emit-llvm" export CXX="llvm-g++ -use-gold-plugin -Wl,-plugin-opt=also-emit-llvm" export RANLIB=/bin/true export CFLAGS="-O4 -g" then configure, make, and then hit the error. The error only happens if the CFLAGS has -g in it. Thanks, Guoliang
> export PATH="$LLVMPREFIX/bin:$LLVMGCCPREFIX/bin:$PATH" > export CC="llvm-gcc -use-gold-plugin -Wl,-plugin-opt=also-emit-llvm" > export CXX="llvm-g++ -use-gold-plugin -Wl,-plugin-opt=also-emit-llvm" > export RANLIB=/bin/true > export CFLAGS="-O4 -g" > > then configure, make, and then hit the error. > > The error only happens if the CFLAGS has -g in it.Can you reduce the testcase a bit? It would be a lot easier to reproduce with the ld invocation and the .o files given to it.> Thanks, > GuoliangCheers, -- Rafael Ávila de Espíndola
On Tue, Jul 20, 2010 at 6:49 AM, Rafael Espindola <espindola at google.com> wrote:>> export PATH="$LLVMPREFIX/bin:$LLVMGCCPREFIX/bin:$PATH" >> export CC="llvm-gcc -use-gold-plugin -Wl,-plugin-opt=also-emit-llvm" >> export CXX="llvm-g++ -use-gold-plugin -Wl,-plugin-opt=also-emit-llvm" >> export RANLIB=/bin/true >> export CFLAGS="-O4 -g" >> >> then configure, make, and then hit the error. >> >> The error only happens if the CFLAGS has -g in it. > > Can you reduce the testcase a bit? It would be a lot easier to > reproduce with the ld invocation and the .o files given to it.This (Unknown constant! in bitcode writer when -g is used) is a known bug in CloneModule, because it is not cloning MDNodes appropriately. So bug point is likely to run into this while reducing test case. I do not know whether gold is cloning module at -O4 or not. - Devang
On Tue, Jul 20, 2010 at 8:49 AM, Rafael Espindola <espindola at google.com>wrote:> > export PATH="$LLVMPREFIX/bin:$LLVMGCCPREFIX/bin:$PATH" > > export CC="llvm-gcc -use-gold-plugin -Wl,-plugin-opt=also-emit-llvm" > > export CXX="llvm-g++ -use-gold-plugin -Wl,-plugin-opt=also-emit-llvm" > > export RANLIB=/bin/true > > export CFLAGS="-O4 -g" > > > > then configure, make, and then hit the error. > > > > The error only happens if the CFLAGS has -g in it. > > Can you reduce the testcase a bit? It would be a lot easier to > reproduce with the ld invocation and the .o files given to it. > > All the .o files are in the tarball. You can download it here (too large tosend through the list): http://pages.cs.wisc.edu/~aliang/goldAndDebugTest.tar.gz The command is: llvm-gcc -use-gold-plugin -Wl,-plugin-opt=also-emit- llvm -g -O4 -o flex ccl.o dfa.o ecs.o scanflags.o gen.o main.o misc.o nfa.o parse.o scan.o skel.o sym.o tblcmp.o yylex.o options.o scanopt.o buf.o tables.o tables_shared.o filter.o regex.o -lm Then I got: $ llvm-gcc -use-gold-plugin -Wl,-plugin-opt=also-emit-llvm -g -O4 -o flex ccl.o dfa.o ecs.o scanflags.o gen.o main.o misc.o nfa.o parse.o scan.o skel.o sym.o tblcmp.o yylex.o options.o scanopt.o buf.o tables.o tables_shared.o filter.o regex.o -lm collect2: ld terminated with signal 6 [Aborted] /local.toadette/aliang/packages/llvm-2.7/llvm-gcc/lib/gcc/i686-pc-linux-gnu/4.2.1/../../../../i686-pc-linux-gnu/bin/ld: error: buf.o:1:1: invalid character Unknown constant! UNREACHABLE executed at /local.toadette/aliang/fixing/llvm-2.7/llvm-2.7/lib/Bitcode/Writer/BitcodeWriter.cpp:895! I do not know how to get the ld invocation you need. If this command is not what you need, please tell me how to get the ld invocation. Thanks, Guoliang -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100720/7ae4949b/attachment.html>
> I do not know how to get the ld invocation you need. If this command is not > what you need, please tell me how to get the ld invocation.Add -Wl,-debug to the llvm-gcc call. That should print the ld command line in the end.> Thanks, > Guoliang >Thanks, -- Rafael Ávila de Espíndola