scons: Enable building with the gcc/clang Address Sanitizer
Allow the user to easily build gem5 with the Address Sanitizer, part of both gcc and clang these days.
This commit is contained in:
parent
0d50979888
commit
a34ff350da
2 changed files with 15 additions and 2 deletions
|
@ -194,6 +194,8 @@ AddLocalOption('--without-tcmalloc', dest='without_tcmalloc',
|
||||||
help='Disable linking against tcmalloc')
|
help='Disable linking against tcmalloc')
|
||||||
AddLocalOption('--with-ubsan', dest='with_ubsan', action='store_true',
|
AddLocalOption('--with-ubsan', dest='with_ubsan', action='store_true',
|
||||||
help='Build with Undefined Behavior Sanitizer if available')
|
help='Build with Undefined Behavior Sanitizer if available')
|
||||||
|
AddLocalOption('--with-asan', dest='with_asan', action='store_true',
|
||||||
|
help='Build with Address Sanitizer if available')
|
||||||
|
|
||||||
termcap = get_termcap(GetOption('use_colors'))
|
termcap = get_termcap(GetOption('use_colors'))
|
||||||
|
|
||||||
|
@ -209,6 +211,7 @@ use_vars = set([ 'AS', 'AR', 'CC', 'CXX', 'HOME', 'LD_LIBRARY_PATH',
|
||||||
'PYTHONPATH', 'RANLIB', 'SWIG', 'TERM' ])
|
'PYTHONPATH', 'RANLIB', 'SWIG', 'TERM' ])
|
||||||
|
|
||||||
use_prefixes = [
|
use_prefixes = [
|
||||||
|
"ASAN_", # address sanitizer symbolizer path and settings
|
||||||
"CCACHE_", # ccache (caching compiler wrapper) configuration
|
"CCACHE_", # ccache (caching compiler wrapper) configuration
|
||||||
"CCC_", # clang static analyzer configuration
|
"CCC_", # clang static analyzer configuration
|
||||||
"DISTCC_", # distcc (distributed compiler wrapper) configuration
|
"DISTCC_", # distcc (distributed compiler wrapper) configuration
|
||||||
|
|
|
@ -1083,17 +1083,27 @@ def makeEnv(env, label, objsfx, strip = False, **kwargs):
|
||||||
new_env.Append(CCFLAGS='-fsanitize=undefined')
|
new_env.Append(CCFLAGS='-fsanitize=undefined')
|
||||||
new_env.Append(LINKFLAGS='-fsanitize=undefined')
|
new_env.Append(LINKFLAGS='-fsanitize=undefined')
|
||||||
|
|
||||||
|
# The address sanitizer is available for gcc >= 4.8
|
||||||
|
if GetOption('with_asan') and \
|
||||||
|
compareVersions(env['GCC_VERSION'], '4.8') >= 0:
|
||||||
|
new_env.Append(CCFLAGS='-fsanitize=address')
|
||||||
|
new_env.Append(LINKFLAGS='-fsanitize=address')
|
||||||
|
|
||||||
if env['CLANG']:
|
if env['CLANG']:
|
||||||
swig_env.Append(CCFLAGS=['-Wno-sometimes-uninitialized',
|
swig_env.Append(CCFLAGS=['-Wno-sometimes-uninitialized',
|
||||||
'-Wno-deprecated-register',
|
'-Wno-deprecated-register',
|
||||||
'-Wno-tautological-compare'])
|
'-Wno-tautological-compare'])
|
||||||
|
|
||||||
# All supported clang versions have support for UBSan, so if
|
# We require clang >= 3.1, so there is no need to check any
|
||||||
# asked to use it, append the compiler and linker flags.
|
# versions here.
|
||||||
if GetOption('with_ubsan'):
|
if GetOption('with_ubsan'):
|
||||||
new_env.Append(CCFLAGS='-fsanitize=undefined')
|
new_env.Append(CCFLAGS='-fsanitize=undefined')
|
||||||
new_env.Append(LINKFLAGS='-fsanitize=undefined')
|
new_env.Append(LINKFLAGS='-fsanitize=undefined')
|
||||||
|
|
||||||
|
if GetOption('with_asan'):
|
||||||
|
new_env.Append(CCFLAGS='-fsanitize=address')
|
||||||
|
new_env.Append(LINKFLAGS='-fsanitize=address')
|
||||||
|
|
||||||
werror_env = new_env.Clone()
|
werror_env = new_env.Clone()
|
||||||
# Treat warnings as errors but white list some warnings that we
|
# Treat warnings as errors but white list some warnings that we
|
||||||
# want to allow (e.g., deprecation warnings).
|
# want to allow (e.g., deprecation warnings).
|
||||||
|
|
Loading…
Reference in a new issue