[LLVMdev] lli: problem finding external symbol
Michael McCracken
michael.mccracken at gmail.com
Mon Apr 3 13:19:50 PDT 2006
No, it is definitely using llvm-g++ - the link command isn't different
between the instrumented version and the uninstrumented version, which
works. And stdc++ is listed as one of the dependent libraries in the
generated bytecode.
-mike
On 4/3/06, Chris Lattner <sabre at nondot.org> wrote:
> On Mon, 3 Apr 2006, Michael McCracken wrote:
> > the bytecode with lli - I get the following error:
> >
> > $ lli -load=/home/mmccrack/linux/lib/libTau.sh leo-inline-300-tau.bc
> > ERROR: Program used external function
> > '__llvm_cxxeh_allocate_exception' which could not be resolved!
>
> This is most likely because you are trying to link with llvmgcc, not with
> llvm-g++. Make sure that the problem is linked with llvm-g++ and this
> should be fixed.
>
> -Chris
>
> > lli((anonymous namespace)::PrintStackTrace()+0x18)[0x8629a74]
> > lli((anonymous namespace)::SignalHandler(int)+0xfe)[0x8629cfc]
> > /lib/tls/libc.so.6[0x4d9eb8]
> > /lib/tls/libc.so.6(abort+0x1d5)[0x4db4e5]
> > lli(llvm::JIT::getPointerToNamedFunction(std::basic_string<char,
> > std::char_traits<char>, std::allocator<char> >
> > const&)+0xc2)[0x8342394]
> > ...skip rest of bt...
> >
> > I found that symbol in the bytecode version of libstdc++, which the
> > disassembled llvm code does show as a dependent library:
> >
> > ; ModuleID = 'leo-inline-300-tau.bc'
> > target endian = little
> > target pointersize = 32
> > target triple = "i686-pc-linux-gnu"
> > deplibs = [ "stdc++", "c", "crtend" ]
> >
> > Furthermore, the path to that library is in my LLVM_LIB_SEARCH_PATHS
> > variable, even though the docs say that's not strictly necessary.
> >
> > An important point here is that I'm using a source-to-source
> > instrumentation toolkit (TAU) to insert instrumentation before I
> > compile with llvm-g++. When I don't use it, llvm-g++ compiles a
> > working bytecode file. However, the only thing I can see that's
> > different is that the code has added some references to an
> > instrumentation library, which I can load just fine, as above.
> >
> > Note: in more recent tests, it fails to find the symbol
> > _ZN9__gnu_cxx12__pool_allocILb1ELi0EE8allocateEj instead, so it's not
> > specific to the above symbol.
> >
> >
> > Thanks for any help you can give,
> > -mike
> >
> >
> >
> > Appendix: Here are sample compilation commands for building, first
> > just using LLVM and second using the source-to-source instrumentation
> > tool.
> >
> > /home/mmccrack/lens/cfrontend/x86/llvm-gcc/bin/llvm-g++ -g
> > -I/usr/X11R6/include -I. -I/home/mmccrack/include -Icore -Igeometry
> > -Iimage -Iimage/sky -Iimage/tm -Inet -Isampling -Ishaders
> > -Ithread -Itools -Iparse -Iparse -m32 -fpermissive -fno-rtti
> > -pthread -D_FILE_OFFSET_BITS=64 -D_REENTRANT -D_LARGEFILE_SOURCE
> > -D_GNU_SOURCE -O3 -march=pentium3 -U__USE_ASM__ -U__USE_SSE_
> > -U__USE_SSE2__ -MD -c -o .o/core/leoLight.o core/leoLight.cpp
> >
> > And now the monstrosity:
> >
> > /home/mmccrack/linux/bin/tau_compiler.sh
> > -optPdtDir="/home/mmccrack//linux"
> > -optPdtCOpts="-I/home/mmccrack/include -DPROFILING_ON
> > -DTAU_STDCXXLIB -DTAU_GNU -DTAU_DOT_H_LESS_HEADERS -fPIC
> > -DPTHREADS
> > -DTAU_LARGEFILE
> > -D_LARGEFILE64_SOURCE "
> > -optPdtCxxOpts="-I/home/mmccrack/include -DPROFILING_ON
> > -DTAU_STDCXXLIB -DTAU_GNU
> > -DTAU_DOT_H_LESS_HEADERS -fPIC -DPTHREADS
> > -DTAU_LARGEFILE -D_LARGEFILE64_SOURCE "
> > -optTauInstr="/home/mmccrack/linux/bin/tau_instrumentor" -optNoMpi
> > -optOpariDir="" -optOpariTool="" -optTauCC="gcc "
> > -optCompile="-I/home/mmccrack/include -DPROFILING_ON
> > -DTAU_STDCXXLIB -DTAU_GNU
> > -DTAU_DOT_H_LESS_HEADERS -fPIC -DPTHREADS
> > -DTAU_LARGEFILE -D_LARGEFILE64_SOURCE " -optLinking="
> > -L/home/mmccrack/linux/lib -ltau-pthread-pdt
> > -L/usr/lib/gcc-lib/i386-pc-linux/3.2.3/ -lstdc++ -lgcc_s
> > " -optKeepFiles -optTauSelectFile=tau_select_file
> > /home/mmccrack/lens/cfrontend/x86/llvm-gcc/bin/llvm-g++ -g
> > -I/home/mmccrack/include -DPROFILING_ON
> > -DTAU_STDCXXLIB -DTAU_GNU -DTAU_DOT_H_LESS_HEADERS -fPIC
> > -DPTHREADS -DTAU_LARGEFILE
> > -D_LARGEFILE64_SOURCE -I/usr/X11R6/include -I.
> > -I/home/mmccrack/include -Icore -Igeometry -Iimage -Iimage/sky
> > -Iimage/tm -Inet -Isampling -Ishaders -Ithread -Itools -Iparse
> > -Iparse -m32 -fpermissive -fno-rtti -pthread -D_FILE_OFFSET_BITS=64
> > -D_REENTRANT -D_LARGEFILE_SOURCE -D_GNU_SOURCE -O3 -march=pentium3
> > -L/home/mmccrack/linux/lib -ltau-pthread-pdt
> > -U__USE_ASM__ -U__USE_SSE_ -U__USE_SSE2__ -MD -c -o
> > .o/thread/threadbase.o thread/threadbase.cpp
> >
> > Note that many things are repeated in quotes, and TAU_STDCXXLIB just
> > tells its headers to use <vector> instead of <vector.h>...
> >
> > --
> > Michael McCracken
> > UCSD CSE PhD Candidate
> > research: http://www.cse.ucsd.edu/~mmccrack/
> > misc: http://michael-mccracken.net/wp/
> >
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> >
>
> -Chris
>
> --
> http://nondot.org/sabre/
> http://llvm.org/
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
--
Michael McCracken
UCSD CSE PhD Candidate
research: http://www.cse.ucsd.edu/~mmccrack/
misc: http://michael-mccracken.net/wp/
More information about the llvm-dev
mailing list