scons: Allow building with Address Sanitizer.
libasan is never linked to shared objects (which doesn't go well with -z,defs). It must either be linked to the main executable, or (more practically for OpenGL drivers) be pre-loaded via LD_PRELOAD. Otherwise works. I didn't find anything with llvmpipe. I suspect the fact that the JIT compiled code isn't instrumented means there are lots of errors it can't catch. But for non-JIT drivers, the Address/Leak Sanitizers seem like a faster alternative to Valgrind. Usage (Ubuntu 15.10): scons asan=1 libgl-xlib export LD_LIBRARY_PATH=$PWD/build/linux-x86_64-debug/gallium/targets/libgl-xlib LD_PRELOAD=libasan.so.2 any-opengl-application Acked-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
@@ -410,7 +410,7 @@ def generate(env):
|
||||
# Work around aliasing bugs - developers should comment this out
|
||||
ccflags += ['-fno-strict-aliasing']
|
||||
ccflags += ['-g']
|
||||
if env['build'] in ('checked', 'profile'):
|
||||
if env['build'] in ('checked', 'profile') or env['asan']:
|
||||
# See http://code.google.com/p/jrfonseca/wiki/Gprof2Dot#Which_options_should_I_pass_to_gcc_when_compiling_for_profiling?
|
||||
ccflags += [
|
||||
'-fno-omit-frame-pointer',
|
||||
@@ -540,6 +540,16 @@ def generate(env):
|
||||
# scan-build will produce more comprehensive output
|
||||
env.Append(CCFLAGS = ['--analyze'])
|
||||
|
||||
# https://github.com/google/sanitizers/wiki/AddressSanitizer
|
||||
if env['asan']:
|
||||
if gcc_compat:
|
||||
env.Append(CCFLAGS = [
|
||||
'-fsanitize=address',
|
||||
])
|
||||
env.Append(LINKFLAGS = [
|
||||
'-fsanitize=address',
|
||||
])
|
||||
|
||||
# Assembler options
|
||||
if gcc_compat:
|
||||
if env['machine'] == 'x86':
|
||||
|
Reference in New Issue
Block a user