summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Nikoleris <nikos.nikoleris@arm.com>2019-12-20 12:41:40 +0000
committerNikos Nikoleris <nikos.nikoleris@arm.com>2020-01-07 09:42:01 +0000
commit8f5b7e78239dec9d907ee0fc3e5aae00afff7484 (patch)
treee1223aa1d929ff85c33793047fdb6a15723a6ede
parent2430be2edb0862a7598d0f8f3c8b4a5f77001df8 (diff)
downloadgem5-8f5b7e78239dec9d907ee0fc3e5aae00afff7484.tar.xz
scons: Cleanup code that enables asan and ubsan
Change-Id: Ie29efc99067dac051536bb099a89f29c940192ec Signed-off-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23883 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com>
-rwxr-xr-xSConstruct59
1 files changed, 20 insertions, 39 deletions
diff --git a/SConstruct b/SConstruct
index 5a90808b1..ec74d699d 100755
--- a/SConstruct
+++ b/SConstruct
@@ -435,12 +435,6 @@ if main['GCC']:
main.Append(PSHLINKFLAGS='-flinker-output=rel')
main.Append(PLINKFLAGS='-flinker-output=rel')
- # Make sure we warn if the user has requested to compile with the
- # Undefined Benahvior Sanitizer and this version of gcc does not
- # support it.
- if GetOption('with_ubsan') and compareVersions(gcc_version, '4.9') < 0:
- warning('UBSan is only supported using gcc 4.9 and later.')
-
disable_lto = GetOption('no_lto')
if not disable_lto and main.get('BROKEN_INCREMENTAL_LTO', False) and \
not GetOption('force_lto'):
@@ -466,25 +460,6 @@ if main['GCC']:
main.Append(TCMALLOC_CCFLAGS=['-fno-builtin-malloc', '-fno-builtin-calloc',
'-fno-builtin-realloc', '-fno-builtin-free'])
- # The address sanitizer is available for gcc >= 4.8
- if GetOption('with_asan'):
- if GetOption('with_ubsan') and \
- compareVersions(main['GCC_VERSION'], '4.9') >= 0:
- main.Append(CCFLAGS=['-fsanitize=address,undefined',
- '-fno-omit-frame-pointer'],
- LINKFLAGS='-fsanitize=address,undefined')
- else:
- main.Append(CCFLAGS=['-fsanitize=address',
- '-fno-omit-frame-pointer'],
- 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.
- elif GetOption('with_ubsan') and \
- compareVersions(main['GCC_VERSION'], '4.9') >= 0:
- main.Append(CCFLAGS='-fsanitize=undefined')
- main.Append(LINKFLAGS='-fsanitize=undefined')
-
elif main['CLANG']:
# Check for a supported version of clang, >= 3.1 is needed to
# support similar features as gcc 4.8. See
@@ -523,21 +498,27 @@ elif main['CLANG']:
if sys.platform.startswith('freebsd'):
main.Append(LIBS=['thr'])
- # We require clang >= 3.1, so there is no need to check any
- # versions here.
- if GetOption('with_ubsan'):
- if GetOption('with_asan'):
- main.Append(CCFLAGS=['-fsanitize=address,undefined',
- '-fno-omit-frame-pointer'],
- LINKFLAGS='-fsanitize=address,undefined')
- else:
- main.Append(CCFLAGS='-fsanitize=undefined',
- LINKFLAGS='-fsanitize=undefined')
-
- elif GetOption('with_asan'):
- main.Append(CCFLAGS=['-fsanitize=address',
+# Add sanitizers flags
+sanitizers=[]
+if GetOption('with_ubsan'):
+ # Only gcc >= 4.9 supports UBSan, so check both the version
+ # and the command-line option before adding the compiler and
+ # linker flags.
+ if not main['GCC'] or compareVersions(main['GCC_VERSION'], '4.9') >= 0:
+ sanitizers.append('undefined')
+if GetOption('with_asan'):
+ # Available for gcc >= 4.8 or llvm >= 3.1 both a requirement
+ # by the build system
+ sanitizers.append('address')
+if sanitizers:
+ sanitizers = ','.join(sanitizers)
+ if main['GCC'] or main['CLANG']:
+ main.Append(CCFLAGS=['-fsanitize=%s' % sanitizers,
'-fno-omit-frame-pointer'],
- LINKFLAGS='-fsanitize=address')
+ LINKFLAGS='-fsanitize=%s' % sanitizers)
+ else:
+ warning("Don't know how to enable %s sanitizer(s) for your "
+ "compiler." % sanitizers)
# Set up common yacc/bison flags (needed for Ruby)
main['YACCFLAGS'] = '-d'