[LLVMdev] Building LLVM with asan

Keno Fischer kfischer at csail.mit.edu
Fri Nov 22 19:00:49 PST 2013


Alright, this somehow started to work after I blew away both the
bootstrapped and the instrumented version using the above removing the
above lines from tools/llvm-shlib/Makefile. Does anybody know why they are
there in the first place? Nothing seemed broken after removing them.


On Thu, Nov 21, 2013 at 12:26 PM, Keno Fischer <kfischer at csail.mit.edu>wrote:

> Actually it only link the shlib fine. Linking any executable against it
> fails:
>
> llvm[2]: Linking Release+Asserts executable llvm-lto (without symbols)
> /home/kfischer/julia/deps/llvm-svn/build_Release+Asserts/Release+Asserts/bin/clang++
> -fsanitize=address -O3 -Wl,-R -Wl,'$ORIGIN/../lib'
> -L/home/kfischer/julia/deps/llvm-svn/build_Release+Asserts+Sanitize/Release+Asserts/lib
> -L/home/kfischer/julia/deps/llvm-svn/build_Release+Asserts+Sanitize/Release+Asserts/lib
> -Wl,--version-script=/home/kfischer/julia/deps/llvm-svn/autoconf/ExportMap.map
> -fsanitize=address   -o
> /home/kfischer/julia/deps/llvm-svn/build_Release+Asserts+Sanitize/Release+Asserts/bin/llvm-lto
>  /home/kfischer/julia/deps/llvm-svn/build_Release+Asserts+Sanitize/tools/llvm-lto/Release+Asserts/llvm-lto.o
>  \
>  -lLLVM-3.5svn   -lz -ltinfo -lm
> /usr/bin/ld:
> /home/kfischer/julia/deps/llvm-svn/build_Release+Asserts+Sanitize/Release+Asserts/bin/llvm-lto:
> local symbol `__asan_report_store4' in
> /home/kfischer/julia/deps/llvm-svn/build_Release+Asserts/Release+Asserts/bin/../lib/clang/3.5/lib/linux/libclang_rt.asan-x86_64.a(asan_rtl.o)
> is referenced by DSO
> /usr/bin/ld: final link failed: Bad value
>
>
> On Thu, Nov 21, 2013 at 12:08 PM, Keno Fischer <kfischer at csail.mit.edu>wrote:
>
>> Indeed, removing that flag works fine, the only question is why this is
>> added in tools/llvm-shlib/Makefile in the first place then and what to do
>> about it:
>>
>> ifeq ($(HOST_OS), $(filter $(HOST_OS), Linux GNU GNU/kFreeBSD))
>>     # Don't allow unresolved symbols.
>>     LLVMLibsOptions += -Wl,--no-undefined
>> endif
>>
>>
>>
>> On Thu, Nov 21, 2013 at 11:53 AM, Alexander Potapenko <glider at google.com>wrote:
>>
>>> Yeah, it's not linking the runtime because you're building a shared
>>> library. This is totally ok. In this case there are undefined __asan_*
>>> symbols that are resolved when an instrumented binary loads your library.
>>> What's wrong here is that some flag passed to ld prevents it from
>>> creating undefined symbols (--no-undefined?). This flag must be removed
>>> when building with ASan.
>>> This isn't the case on OSX where the runtime is a dynamic library and
>>> can safely be linked to instrumented dynamic libraries.
>>> What I meant to say was that it worked for me on OS X on a slightly
>>> older version of LLVM. Anyway, here's the ld line:
>>>
>>>  "/usr/bin/ld" -export-dynamic -z relro --hash-style=gnu --build-id
>>> --eh-frame-hdr -m elf_x86_64 -shared -o
>>> /home/kfischer/julia/deps/llvm-svn/build_Release+Asserts+Sanitize/Release+Asserts/lib/
>>> libLLVM-3.5svn.so/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crti.o
>>> /usr/lib/gcc/x86_64-linux-gnu/4.8/crtbeginS.o
>>> -L/home/kfischer/julia/deps/llvm-svn/build_Release+Asserts+Sanitize/Release+Asserts/lib
>>> -L/home/kfischer/julia/deps/llvm-svn/build_Release+Asserts+Sanitize/Release+Asserts/lib
>>> -L/usr/lib/gcc/x86_64-linux-gnu/4.8
>>> -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu
>>> -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu
>>> -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../.. -L/lib -L/usr/lib -R
>>> "\$ORIGIN" --whole-archive -lLLVMAnalysis -lLLVMAsmParser -lLLVMAsmPrinter
>>> -lLLVMBitReader -lLLVMBitWriter -lLLVMCodeGen -lLLVMCore -lLLVMDebugInfo
>>> -lLLVMExecutionEngine -lLLVMInstCombine -lLLVMInstrumentation
>>> -lLLVMInterpreter -lLLVMipa -lLLVMipo -lLLVMIRReader -lLLVMLinker -lLLVMLTO
>>> -lLLVMMC -lLLVMMCDisassembler -lLLVMMCJIT -lLLVMMCParser -lLLVMObjCARCOpts
>>> -lLLVMObject -lLLVMOption -lLLVMRuntimeDyld -lLLVMScalarOpts
>>> -lLLVMSelectionDAG -lLLVMSupport -lLLVMTarget -lLLVMTransformUtils
>>> -lLLVMVectorize -lLLVMX86AsmParser -lLLVMX86AsmPrinter -lLLVMX86CodeGen
>>> -lLLVMX86Desc -lLLVMX86Disassembler -lLLVMX86Info -lLLVMX86Utils
>>> --no-whole-archive --soname libLLVM-3.5svn.so --no-undefined -lz
>>> -ltinfo -lm -lstdc++ -lm -lgcc_s -lc -lgcc_s
>>> /usr/lib/gcc/x86_64-linux-gnu/4.8/crtendS.o
>>> /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crtn.o
>>>
>>> It doesn't seem to be linking the asan runtime which seems weird since
>>> I'm passing -faddress=sanitize.
>>>
>>>
>>> On Thu, Nov 21, 2013 at 5:24 AM, Alexander Potapenko <glider at google.com>wrote:
>>>
>>>> On Thu, Nov 21, 2013 at 6:18 AM, Keno Fischer <kfischer at csail.mit.edu>
>>>> wrote:
>>>> > Hello everybody,
>>>> >
>>>> > after moving from OS X to Linux build llvm with asan enabled
>>>> Sorry, I failed to parse this. You're compiling Clang on Linux, and
>>>> OSX is unrelated, right?
>>>> > (I also updated
>>>> > to trunk, but not sure if that's related). However, it's totally
>>>> possible
>>>> > that I missed a step that I took back when I set this up for me, so I
>>>> might
>>>> > be doing something very stupid. Anyway, I'm configuring LLVM with
>>>> >
>>>> > ../configure --prefix=/home/kfischer/julia/usr
>>>> --build=x86_64-pc-linux-gnu
>>>> > FC=gfortran
>>>> >
>>>> CC="/home/kfischer/julia/deps/llvm-svn/build_Release+Asserts/Release+Asserts/bin/clang
>>>> > -fsanitize=address"
>>>> >
>>>> CXX="/home/kfischer/julia/deps/llvm-svn/build_Release+Asserts/Release+Asserts/bin/clang++"
>>>> > -fsanitize=address --disable-profiling --enable-shared --enable-static
>>>> > --enable-targets=host --disable-bindings --disable-docs
>>>> --enable-assertions
>>>> > --enable-optimized --disable-threads
>>>> So you're building Clang with -fsanitize=address. Note: you won't be
>>>> able to build libsanitizer this way.
>>>>
>>>> > in a different directory (build_Release+Asserts+Sanitize). As you can
>>>> see
>>>> > I'm bootstrapping this through a different copy of clang I just built.
>>>> > However, now I'm getting tons of
>>>> > undefined reference to `__asan_report_store8'
>>>> > even though the command the failing command being invoked is
>>>> >
>>>> >
>>>> /home/kfischer/julia/deps/llvm-svn/build_Release+Asserts/Release+Asserts/bin/clang++
>>>> > -fsanitize=address   -O3 -Wl,-R -Wl,'$ORIGIN' -rdynamic
>>>> >
>>>> -L/home/kfischer/julia/deps/llvm-svn/build_Release+Asserts+Sanitize/Release+Asserts/lib
>>>> >
>>>> -L/home/kfischer/julia/deps/llvm-svn/build_Release+Asserts+Sanitize/Release+Asserts/lib
>>>> > -shared -o
>>>> >
>>>> /home/kfischer/julia/deps/llvm-svn/build_Release+Asserts+Sanitize/Release+Asserts/lib/
>>>> libLLVM-3.5svn.so
>>>> > -Wl,--whole-archive -lLLVMAnalysis -lLLVMAsmParser -lLLVMAsmPrinter
>>>> > -lLLVMBitReader -lLLVMBitWriter -lLLVMCodeGen -lLLVMCore
>>>> -lLLVMDebugInfo
>>>> > -lLLVMExecutionEngine -lLLVMInstCombine -lLLVMInstrumentation
>>>> > -lLLVMInterpreter -lLLVMipa -lLLVMipo -lLLVMIRReader -lLLVMLinker
>>>> -lLLVMLTO
>>>> > -lLLVMMC -lLLVMMCDisassembler -lLLVMMCJIT -lLLVMMCParser
>>>> -lLLVMObjCARCOpts
>>>> > -lLLVMObject -lLLVMOption -lLLVMRuntimeDyld -lLLVMScalarOpts
>>>> > -lLLVMSelectionDAG -lLLVMSupport -lLLVMTarget -lLLVMTransformUtils
>>>> > -lLLVMVectorize -lLLVMX86AsmParser -lLLVMX86AsmPrinter
>>>> -lLLVMX86CodeGen
>>>> > -lLLVMX86Desc -lLLVMX86Disassembler -lLLVMX86Info -lLLVMX86Utils
>>>> > -Wl,--no-whole-archive -Wl,--soname,libLLVM-3.5svn.so-Wl,--no-undefined -lz
>>>> > -ltinfo -lm
>>>>
>>>> Can you please add -v to the command line to see the ld invocation line?
>>>> You'll need to locate the ASan runtime library and check whether it's
>>>> a 32-bit one and if __asan_report_store8 is present in its symbol
>>>> table.
>>>> > Am I doing something stupid?
>>>> > Thanks,
>>>> > Keno
>>>> >
>>>> >
>>>> > _______________________________________________
>>>> > LLVM Developers mailing list
>>>> > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>>> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>> >
>>>>
>>>>
>>>>
>>>> --
>>>> Alexander Potapenko
>>>> Software Engineer
>>>> Google Moscow
>>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131122/2cea74c6/attachment.html>


More information about the llvm-dev mailing list