xref: /aosp_15_r20/external/virglrenderer/docs/ASAN-notes.txt (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
1*bbecb9d1SAndroid Build Coastguard Worker/*
2*bbecb9d1SAndroid Build Coastguard Worker * This document explain how to run analyse the virglrenderer
3*bbecb9d1SAndroid Build Coastguard Worker * code base using ASAN, the address sanitizer tools include
4*bbecb9d1SAndroid Build Coastguard Worker * in Clang and gcc.
5*bbecb9d1SAndroid Build Coastguard Worker */
6*bbecb9d1SAndroid Build Coastguard Worker
7*bbecb9d1SAndroid Build Coastguard WorkerVIRGLRENDERER:
8*bbecb9d1SAndroid Build Coastguard Worker
9*bbecb9d1SAndroid Build Coastguard WorkerCompiling virglrenderer with the following flags:
10*bbecb9d1SAndroid Build Coastguard Worker`-fsanitize=address`
11*bbecb9d1SAndroid Build Coastguard Workeror
12*bbecb9d1SAndroid Build Coastguard Worker`-fsanitize=memory`
13*bbecb9d1SAndroid Build Coastguard WorkerSadly, we can't use both of them in the same time.
14*bbecb9d1SAndroid Build Coastguard Worker
15*bbecb9d1SAndroid Build Coastguard WorkerFor example,
16*bbecb9d1SAndroid Build Coastguard Worker```
17*bbecb9d1SAndroid Build Coastguard Workerexport CFLAGS="-fsanitize=address -fno-omit-frame-pointer"
18*bbecb9d1SAndroid Build Coastguard Workerexport CXXFLAGS="-fsanitize=address -fno-omit-frame-pointer"
19*bbecb9d1SAndroid Build Coastguard Workermkdir build && cd build
20*bbecb9d1SAndroid Build Coastguard Worker../autogen.sh --prefix=/home/user/virglrenderer/install --enable-debug
21*bbecb9d1SAndroid Build Coastguard Workermake
22*bbecb9d1SAndroid Build Coastguard Worker```
23*bbecb9d1SAndroid Build Coastguard Worker
24*bbecb9d1SAndroid Build Coastguard WorkerThe `-fsanitize=leak` flag don't have to be add for Linux as
25*bbecb9d1SAndroid Build Coastguard Workerit is set by default. This flag can be add to the toolchain of other platform.
26*bbecb9d1SAndroid Build Coastguard Worker
27*bbecb9d1SAndroid Build Coastguard Worker
28*bbecb9d1SAndroid Build Coastguard WorkerMESA:
29*bbecb9d1SAndroid Build Coastguard Worker
30*bbecb9d1SAndroid Build Coastguard WorkerSince mesa unloads the drivers before a program finished, but ASAN only
31*bbecb9d1SAndroid Build Coastguard Workerresolves stack traces at the end. It is almost impossible to get meaningful
32*bbecb9d1SAndroid Build Coastguard Workerbacktraces and so check whether the culprit is mesa or virglrenderer.
33*bbecb9d1SAndroid Build Coastguard WorkerHence, it is useful to override *dlclose* by pre-loading a shared library
34*bbecb9d1SAndroid Build Coastguard Workerthat implements a stub, e.g. like:
35*bbecb9d1SAndroid Build Coastguard Worker```
36*bbecb9d1SAndroid Build Coastguard Workerint dlclose(void *handle) {
37*bbecb9d1SAndroid Build Coastguard Worker        return 0;
38*bbecb9d1SAndroid Build Coastguard Worker}
39*bbecb9d1SAndroid Build Coastguard Worker```
40*bbecb9d1SAndroid Build Coastguard WorkerIt seems that you need to pre-load ASAN before your dummie library.
41*bbecb9d1SAndroid Build Coastguard Worker`export LD_PRELOAD="/usr/lib64/gcc/x86_64-pc-linux-gnu/7.3.0/libasan.so $HOME/libfake-dlclose.so"`
42*bbecb9d1SAndroid Build Coastguard Worker
43*bbecb9d1SAndroid Build Coastguard Worker
44*bbecb9d1SAndroid Build Coastguard WorkerVTEST:
45*bbecb9d1SAndroid Build Coastguard Worker
46*bbecb9d1SAndroid Build Coastguard WorkerThen run virglrenderer with the following flag:
47*bbecb9d1SAndroid Build Coastguard Worker`ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer`
48*bbecb9d1SAndroid Build Coastguard WorkerOn platform other than Linux, `ASAN_OPTIONS=detect_leaks=1`
49*bbecb9d1SAndroid Build Coastguard Workershould be added.
50*bbecb9d1SAndroid Build Coastguard Worker
51*bbecb9d1SAndroid Build Coastguard WorkerStart the vtest server with the command:
52*bbecb9d1SAndroid Build Coastguard Worker`ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer ./virgl_test_server`
53*bbecb9d1SAndroid Build Coastguard Worker
54*bbecb9d1SAndroid Build Coastguard WorkerThen connect to the server
55*bbecb9d1SAndroid Build Coastguard Worker```
56*bbecb9d1SAndroid Build Coastguard Workerexport LIBGL_ALWAYS_SOFTWARE=true
57*bbecb9d1SAndroid Build Coastguard Workerexport GALLIUM_DRIVER=virpipe
58*bbecb9d1SAndroid Build Coastguard Worker```
59*bbecb9d1SAndroid Build Coastguard Worker
60*bbecb9d1SAndroid Build Coastguard WorkerRun any payload.
61