Signed-off-by: Elie Tournier <elie.tournier@collabora.com> Signed-off-by: Dave Airlie <airlied@redhat.com>macos/master
parent
e59edfc2bb
commit
aeac8f4ae8
@ -0,0 +1,60 @@ |
||||
/* |
||||
* This document explain how to run analyse the virglrenderer |
||||
* code base using ASAN, the address sanitizer tools include |
||||
* in Clang and gcc. |
||||
*/ |
||||
|
||||
VIRGLRENDERER: |
||||
|
||||
Compiling virglrenderer with the following flags: |
||||
`-fsanitize=address` |
||||
or |
||||
`-fsanitize=memory` |
||||
Sadly, we can't use both of them in the same time. |
||||
|
||||
For example, |
||||
``` |
||||
export CFLAGS="-fsanitize=address -fno-omit-frame-pointer" |
||||
export CXXFLAGS="-fsanitize=address -fno-omit-frame-pointer" |
||||
mkdir build && cd build |
||||
../autogen.sh --prefix=/home/user/virglrenderer/install --enable-debug |
||||
make |
||||
``` |
||||
|
||||
The `-fsanitize=leak` flag don't have to be add for Linux as |
||||
it is set by default. This flag can be add to the toolchain of other platform. |
||||
|
||||
|
||||
MESA: |
||||
|
||||
Since mesa unloads the drivers before a program finished, but ASAN only |
||||
resolves stack traces at the end. It is almost impossible to get meaningful |
||||
backtraces and so check whether the culprit is mesa or virglrenderer. |
||||
Hence, it is useful to override *dlclose* by pre-loading a shared library |
||||
that implements a stub, e.g. like: |
||||
``` |
||||
int dlclose(void *handle) { |
||||
return 0; |
||||
} |
||||
``` |
||||
It seems that you need to pre-load ASAN before your dummie library. |
||||
`export LD_PRELOAD="/usr/lib64/gcc/x86_64-pc-linux-gnu/7.3.0/libasan.so $HOME/libfake-dlclose.so"` |
||||
|
||||
|
||||
VTEST: |
||||
|
||||
Then run virglrenderer with the following flag: |
||||
`ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer` |
||||
On platform other than Linux, `ASAN_OPTIONS=detect_leaks=1` |
||||
should be added. |
||||
|
||||
Start the vtest server with the command: |
||||
`ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer ./virgl_test_server` |
||||
|
||||
Then connect to the server |
||||
``` |
||||
export LIBGL_ALWAYS_SOFTWARE=true |
||||
export GALLIUM_DRIVER=virpipe |
||||
``` |
||||
|
||||
Run any payload. |
Loading…
Reference in new issue