summaryrefslogtreecommitdiff
path: root/src/SConscript
diff options
context:
space:
mode:
authorJoe Gross <joseph.gross@amd.com>2016-11-28 12:44:54 -0500
committerJoe Gross <joseph.gross@amd.com>2016-11-28 12:44:54 -0500
commit4b7bc5b1e1915915a746af16d36de1d006db8700 (patch)
tree6c2fd84c7ecc9172297e23ce7d5a7ba336ca1b11 /src/SConscript
parentfaaf2d396fb8c1e1b35efc6ef37f7632009fac1e (diff)
downloadgem5-4b7bc5b1e1915915a746af16d36de1d006db8700.tar.xz
scons: fix sanitizer flags with multiple sanitizers
There has been some problem when using address and undefined-behavior sanitizers at the same time. This patch will look for the special case where both are enabled at once and change the flags passed to the compiler to reflect this.
Diffstat (limited to 'src/SConscript')
-rwxr-xr-xsrc/SConscript30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/SConscript b/src/SConscript
index 02b3c28d4..115ce24eb 100755
--- a/src/SConscript
+++ b/src/SConscript
@@ -1085,19 +1085,26 @@ def makeEnv(env, label, objsfx, strip = False, **kwargs):
'-Wno-maybe-uninitialized',
'-Wno-type-limits'])
+
+ # The address sanitizer is available for gcc >= 4.8
+ if GetOption('with_asan'):
+ if GetOption('with_ubsan') and \
+ compareVersions(env['GCC_VERSION'], '4.9') >= 0:
+ new_env.Append(CCFLAGS=['-fsanitize=address,undefined',
+ '-fno-omit-frame-pointer'])
+ new_env.Append(LINKFLAGS='-fsanitize=address,undefined')
+ else:
+ new_env.Append(CCFLAGS=['-fsanitize=address',
+ '-fno-omit-frame-pointer'])
+ new_env.Append(LINKFLAGS='-fsanitize=address')
# Only gcc >= 4.9 supports UBSan, so check both the version
# and the command-line option before adding the compiler and
# linker flags.
- if GetOption('with_ubsan') and \
+ elif GetOption('with_ubsan') and \
compareVersions(env['GCC_VERSION'], '4.9') >= 0:
new_env.Append(CCFLAGS='-fsanitize=undefined')
new_env.Append(LINKFLAGS='-fsanitize=undefined')
- # The address sanitizer is available for gcc >= 4.8
- if GetOption('with_asan'):
- new_env.Append(CCFLAGS=['-fsanitize=address',
- '-fno-omit-frame-pointer'])
- new_env.Append(LINKFLAGS='-fsanitize=address')
if env['CLANG']:
swig_env.Append(CCFLAGS=['-Wno-sometimes-uninitialized',
@@ -1107,10 +1114,15 @@ def makeEnv(env, label, objsfx, strip = False, **kwargs):
# We require clang >= 3.1, so there is no need to check any
# versions here.
if GetOption('with_ubsan'):
- new_env.Append(CCFLAGS='-fsanitize=undefined')
- new_env.Append(LINKFLAGS='-fsanitize=undefined')
+ if GetOption('with_asan'):
+ new_env.Append(CCFLAGS=['-fsanitize=address,undefined',
+ '-fno-omit-frame-pointer'])
+ new_env.Append(LINKFLAGS='-fsanitize=address,undefined')
+ else:
+ new_env.Append(CCFLAGS='-fsanitize=undefined')
+ new_env.Append(LINKFLAGS='-fsanitize=undefined')
- if GetOption('with_asan'):
+ elif GetOption('with_asan'):
new_env.Append(CCFLAGS=['-fsanitize=address',
'-fno-omit-frame-pointer'])
new_env.Append(LINKFLAGS='-fsanitize=address')