summaryrefslogtreecommitdiff
path: root/enablesanitizers.sh
diff options
context:
space:
mode:
authorSteve Harter <sharter@microsoft.com>2015-11-05 18:41:48 -0600
committerSteve Harter <sharter@microsoft.com>2015-11-17 10:57:16 -0600
commit4e06e4271162ac65a57719398e3b5572de9f5185 (patch)
tree1ca0a0122505a5d1eeca015267cbaa3a29456378 /enablesanitizers.sh
parent48617ae01367b2aad76938d101199cf369bead64 (diff)
downloadcoreclr-4e06e4271162ac65a57719398e3b5572de9f5185.tar.gz
coreclr-4e06e4271162ac65a57719398e3b5572de9f5185.tar.bz2
coreclr-4e06e4271162ac65a57719398e3b5572de9f5185.zip
Enable CLANG sanitizers for native debug builds
Diffstat (limited to 'enablesanitizers.sh')
-rwxr-xr-xenablesanitizers.sh107
1 files changed, 107 insertions, 0 deletions
diff --git a/enablesanitizers.sh b/enablesanitizers.sh
new file mode 100755
index 0000000000..0afec5d1ee
--- /dev/null
+++ b/enablesanitizers.sh
@@ -0,0 +1,107 @@
+#!/usr/bin/env bash
+
+if [ $# -eq 0 ]; then
+ echo "Script for enabling CLang sanitizers for debug builds."
+ echo "*Only tested on Ubuntu x64."
+ echo "*This script must be 'sourced' (via dot+space) so that changes to environment variables are preserved. Run like this:"
+ if [ "$(dirname $0)" = "." ]; then
+ echo " . enablesanitizers.sh [options]"
+ else
+ echo " cd $(dirname $0);. enablesanitizers.sh [options]; cd -"
+ fi
+ echo "Usage: [asan] [ubsan] [lsan] [all] [off] [clangx.y]"
+ echo "asan: optional argument to enable Address Sanitizer."
+ echo "ubsan: optional argument to enable Undefined Behavior Sanitizer."
+ echo "lsan - optional argument to enable memory Leak Sanitizer."
+ echo "all - optional argument to enable asan, ubsan and lsan."
+ echo "off - optional argument to turn off all sanitizers."
+ echo "clangx.y - optional argument to specify clang version x.y. which is used to resolve stack traces."
+else
+ __ClangMajorVersion=3
+ __ClangMinorVersion=5
+ __EnableASan=0
+ __EnableUBSan=0
+ __EnableLSan=0
+ __TurnOff=0
+ __Options=
+
+ for i in "$@"
+ do
+ lowerI="$(echo $i | awk '{print tolower($0)}')"
+ case $lowerI in
+ asan)
+ __EnableASan=1
+ ;;
+ ubsan)
+ __EnableUBSan=1
+ ;;
+ lsan)
+ __EnableASan=1
+ __EnableLSan=1
+ ;;
+ all)
+ __EnableASan=1
+ __EnableUBSan=1
+ __EnableLSan=1
+ ;;
+ off)
+ __TurnOff=1
+ ;;
+ clang3.5)
+ __ClangMajorVersion=3
+ __ClangMinorVersion=5
+ ;;
+ clang3.6)
+ __ClangMajorVersion=3
+ __ClangMinorVersion=6
+ ;;
+ clang3.7)
+ __ClangMajorVersion=3
+ __ClangMinorVersion=7
+ ;;
+ *)
+ echo "Unknown arg: $i"
+ return 1
+ esac
+ done
+
+ if [ $__TurnOff == 1 ]; then
+ unset DEBUG_SANITIZERS
+ echo "Setting DEBUG_SANITIZERS="
+ else
+ ASAN_OPTIONS="symbolize=1"
+
+ if [ $__EnableASan == 1 ]; then
+ __Options="$__Options asan"
+ fi
+ if [ $__EnableUBSan == 1 ]; then
+ __Options="$__Options ubsan"
+ fi
+ if [ $__EnableLSan == 1 ]; then
+ ASAN_OPTIONS="$ASAN_OPTIONS detect_leaks"
+ fi
+
+ # passed to build.sh
+ DEBUG_SANITIZERS="$__Options"
+ export DEBUG_SANITIZERS
+ echo "Setting DEBUG_SANITIZERS=$DEBUG_SANITIZERS"
+
+ # used by ASan at run-time
+ ASAN_OPTIONS="\"$ASAN_OPTIONS\""
+ export ASAN_OPTIONS
+ echo "Setting ASAN_OPTIONS=$ASAN_OPTIONS"
+
+ # used by ASan at run-time
+ ASAN_SYMBOLIZER_PATH="/usr/bin/llvm-symbolizer-$__ClangMajorVersion.$__ClangMinorVersion"
+ export ASAN_SYMBOLIZER_PATH
+ echo "Setting ASAN_SYMBOLIZER_PATH=$ASAN_SYMBOLIZER_PATH"
+ fi
+
+ unset __ClangMajorVersion
+ unset __ClangMinorVersion
+ unset __EnableASan
+ unset __EnableUBSan
+ unset __EnableLSan
+ unset __TurnOff
+ unset __Options
+fi \ No newline at end of file