4 echo "Script for enabling CLang sanitizers for debug builds."
5 echo "*Only tested on Ubuntu x64."
6 echo "*This script must be 'sourced' (via dot+space) so that changes to environment variables are preserved. Run like this:"
7 if [ "$(dirname $0)" = "." ]; then
8 echo " . enablesanitizers.sh [options]"
10 echo " cd $(dirname $0);. enablesanitizers.sh [options]; cd -"
12 echo "Usage: [asan] [ubsan] [lsan] [all] [off] [clangx.y]"
13 echo "asan: optional argument to enable Address Sanitizer."
14 echo "ubsan: optional argument to enable Undefined Behavior Sanitizer."
15 echo "lsan - optional argument to enable memory Leak Sanitizer."
16 echo "all - optional argument to enable asan, ubsan and lsan."
17 echo "off - optional argument to turn off all sanitizers."
18 echo "clangx.y - optional argument to specify clang version x.y. which is used to resolve stack traces."
30 lowerI="$(echo $i | awk '{print tolower($0)}')"
63 echo "Unknown arg: $i"
68 if [ $__TurnOff == 1 ]; then
69 unset DEBUG_SANITIZERS
70 echo "Setting DEBUG_SANITIZERS="
72 ASAN_OPTIONS="symbolize=1"
74 if [ $__EnableASan == 1 ]; then
75 __Options="$__Options asan"
77 if [ $__EnableUBSan == 1 ]; then
78 __Options="$__Options ubsan"
80 if [ $__EnableLSan == 1 ]; then
81 ASAN_OPTIONS="$ASAN_OPTIONS detect_leaks"
85 DEBUG_SANITIZERS="$__Options"
86 export DEBUG_SANITIZERS
87 echo "Setting DEBUG_SANITIZERS=$DEBUG_SANITIZERS"
89 # used by ASan at run-time
90 ASAN_OPTIONS="\"$ASAN_OPTIONS\""
92 echo "Setting ASAN_OPTIONS=$ASAN_OPTIONS"
94 # used by ASan at run-time
95 ASAN_SYMBOLIZER_PATH="/usr/bin/llvm-symbolizer-$__ClangMajorVersion.$__ClangMinorVersion"
96 export ASAN_SYMBOLIZER_PATH
97 echo "Setting ASAN_SYMBOLIZER_PATH=$ASAN_SYMBOLIZER_PATH"
100 unset __ClangMajorVersion
101 unset __ClangMinorVersion