Missing libclang_rt.san-x86_64.a file for LLVM-rt compiler

I just created LLVM / Clang compiler-rt and tried the -fsanitize . But strangely the link failed because it cannot find libclang_rt.san-x86_64.a .

 /usr/bin/ld: cannot find /home/hongxu/RESEARCH/llvm-git/obj/bin/../lib/clang/3.7.0/lib/linux/libclang_rt.san-x86_64.a: No such file or directory clang-3.7: error: linker command failed with exit code 1 (use -v to see invocation) 

When I went to the /home/hongxu/RESEARCH/llvm-git/obj/bin/../lib/clang/3.7.0/lib/linux/ directory, I found that there are other library files

 # AddressSanitizer libclang_rt.asan_cxx-x86_64.a libclang_rt.asan-preinit-x86_64.a libclang_rt.asan-x86_64.a # DataFlowSanitizer libclang_rt.dfsan-libc-x86_64.a libclang_rt.dfsan-x86_64.a # LeakSanitizer libclang_rt.lsan-x86_64.a # MemorySanitizer libclang_rt.msan-x86_64.a # ThreadSanitizer libclang_rt.tsan-x86_64.a # UndefinedBehaviorSanitizer libclang_rt.ubsan_cxx-x86_64.a libclang_rt.ubsan_standalone_cxx-x86_64.a libclang_rt.ubsan_standalone-x86_64.a libclang_rt.ubsan-x86_64.a 

And I can guess their functionality on behalf of the compiler-rt page.

But what is libclang_rt.san-x86_64.a ? And how can I get it?

+6
source share
3 answers

Thanks for the @jww answer; but my problem is different.

I have answers from the llvmdev mailing list (see stream ) and they said that:

libclang_rt.san is now gone. The fresh compiler-rt build does not contain this library, and the fresh Clang does not use it.

And I was not able to compile, since I did not synchronize other llvm projects before compiling (I just put the -t compiler in the llvm / projects directory and built build llvm from the root directory).

And the solution is simple:

An attempt to create from scratch (delete the assembly directory, synchronize all llvm subprojects with the same revision, build again).

+3
source

But strangely the link failed because it cannot find libclang_rt.san-x86_64.a.

Yes, make install does not install some of the things that are needed. In other cases, he installs them in non-standard places.

Other things that it does not install include asan_symbolize.py , which is used to indicate dumps with Address Sanitizer (ASan).


But what is libclang_rt.san-x86_64.a? And how can I get it?

Its one of the disinfection libraries. You probably have it, you just don't understand it, because it is in a non-standard place. For example, on my system (where I create LLVM / Clang myself):

 $ find /usr -name libclang_rt.san-x86_64.a 2>/dev/null /usr/local/lib/clang/3.5.0/lib/linux/libclang_rt.san-x86_64.a 

So you need to use either LD_LIBRARY_PATH (Linux) or DYLD_LIBRARY_PATH (OS X) to make sure that the compiler driver can find it. You should never manually add various sanitizer libraries - the compiler driver should always add them for you.

For completeness, Clang 3.4 installed sanitizers libraries in /usr/local/lib/clang/3.4/lib/linux/ on Linux; and Clang 3.3 installed them in /usr/local/lib/clang/3.3/lib/darwin/ on OS X.

In fact, you can change the search directories in the source code, and they will be automatically loaded by the compiler driver. I think I had to change the actual sources because I could not find the configure parameter to add places like /usr/local/lib/clang/<version>/lib/linux/ . Take a look at tools/clang/lib/Frontend/InitHeaderSearch.cpp and friends. What comes from paths like .../include/c++/4.2.1 .


By the way, here's how to use Address Sanitizer and asan_symbolize.py . First run 2to3 and asan_symbolize.py to fix what Python people have broken related to basic I / O:

 $ find Clang-3.5/ -name asan_symbolize.py Clang-3.5/llvm/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py 2to3 -w Clang-3.5/llvm/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py echo "" | Clang-3.5/llvm/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py # Fix errors 2to3 missed 

Then copy it to a known place (or put it on the path):

 sudo cp Clang-3.5/llvm/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py /usr/local/bin 

Then for your project:

 export CPPFLAGS="-fsanitze=undefined -fsanitize=address" export CFLAGS="-fsanitze=undefined -fsanitize=address" export CXXFLAGS="-fsanitze=undefined -fsanitize=address -fno-sanitize=vptr" export CC=/usr/local/bin/clang export CXX=/usr/local/bin/clang++ export LD_LIBRARY_PATH=/usr/local/lib/clang/3.5.0/lib/linux ./configure make make check 2>&1 | asan_symbolize.py 

CPPFLAGS is actually very important for the Autotools project. Otherwise, you get a scary C compiler that cannot create an executable error.

If you have an ASan error, you will see similar ones:

 make test 2>&1 | asan_symbolize.py ... /usr/local/bin/clang -fsanitize=address -Xlinker -export-dynamic -o python Modules/python.o libpython3.3m.a -ldl -lutil /usr/local/ssl/lib/libssl.a /usr/local/ssl/lib/libcrypto.a -lm ./python -E -S -m sysconfig --generate-posix-vars ================================================================= ==24064==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x619000004020 at pc 0x4ed4b2 bp 0x7fff80fff010 sp 0x7fff80fff008 READ of size 4 at 0x619000004020 thread T0 #0 0x4ed4b1 in PyObject_Free Python-3.3.5/./Objects/obmalloc.c:987 #1 0x7a2141 in code_dealloc Python-3.3.5/./Objects/codeobject.c:359 #2 0x620c00 in PyImport_ImportFrozenModuleObject Python-3.3.5/./Python/import.c:1098 #3 0x620d5c in PyImport_ImportFrozenModule Python-3.3.5/./Python/import.c:1114 #4 0x63fd07 in import_init Python-3.3.5/./Python/pythonrun.c:206 #5 0x63f636 in _Py_InitializeEx_Private Python-3.3.5/./Python/pythonrun.c:369 #6 0x681d77 in Py_Main Python-3.3.5/./Modules/main.c:648 #7 0x4e6894 in main Python-3.3.5/././Modules/python.c:62 #8 0x2abf9a525eac in __libc_start_main /home/aurel32/eglibc/eglibc-2.13/csu/libc-start.c:244 #9 0x4e664c in _start (Python-3.3.5/./python+0x4e664c) AddressSanitizer can not describe address in more detail (wild memory access suspected). SUMMARY: AddressSanitizer: heap-buffer-overflow Python-3.3.5/./Objects/obmalloc.c:987 PyObject_Free Shadow bytes around the buggy address: 0x0c327fff87b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c327fff87c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c327fff87d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c327fff87e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c327fff87f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa =>0x0c327fff8800: fa fa fa fa[fa]fa fa fa fa fa fa fa fa fa fa fa 0x0c327fff8810: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c327fff8820: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c327fff8830: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c327fff8840: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c327fff8850: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa Shadow byte legend (one shadow byte represents 8 application bytes): Addressable: 00 Partially addressable: 01 02 03 04 05 06 07 Heap left redzone: fa Heap right redzone: fb Freed heap region: fd Stack left redzone: f1 Stack mid redzone: f2 Stack right redzone: f3 Stack partial redzone: f4 Stack after return: f5 Stack use after scope: f8 Global redzone: f9 Global init order: f6 Poisoned by user: f7 ASan internal: fe ==24064==ABORTING make: *** [pybuilddir.txt] Error 1 

There is a more complete record of the LLVM / Clang build process and the use of santizers in Python Dynamic Analysis with Clang . I wrote this a while ago, so the version and recipe are out of date. But the concepts are the same.

+3
source

The library is still used with clang 3.7 (when sanitizers are enabled), but if compiled using autotools, it will be absent. I found this thread looking for a simple solution, but it doesn't seem to exist, except that you build everything with cmake.

Also see LLVM Issue 22757 - libclang_rt.asan is missing from debang debang packages ,

Another option I'm using is using clang 3.6.

+3
source

Source: https://habr.com/ru/post/984559/


All Articles