diff options
author | Alexey Samsonov <samsonov@google.com> | 2013-02-19 13:14:48 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2013-02-19 13:14:48 +0000 |
commit | 0b07c63e0719ac6d172367ebac1aa8ed83263f6f (patch) | |
tree | 69bbd0e421a6407504c38b0ce05343e70e387305 | |
parent | 99b81b4bbe5a587f0384605f0371eac728c17485 (diff) | |
download | llvm-0b07c63e0719ac6d172367ebac1aa8ed83263f6f.zip llvm-0b07c63e0719ac6d172367ebac1aa8ed83263f6f.tar.gz llvm-0b07c63e0719ac6d172367ebac1aa8ed83263f6f.tar.bz2 |
[ASan] Allow ASan default runtime options be overriden at compile time by providing ASAN_DEFAULT_OPTIONS macro
llvm-svn: 175512
-rw-r--r-- | compiler-rt/lib/asan/asan_flags.h | 8 | ||||
-rw-r--r-- | compiler-rt/lib/asan/asan_rtl.cc | 14 |
2 files changed, 19 insertions, 3 deletions
diff --git a/compiler-rt/lib/asan/asan_flags.h b/compiler-rt/lib/asan/asan_flags.h index 6c4e362..47c14aa 100644 --- a/compiler-rt/lib/asan/asan_flags.h +++ b/compiler-rt/lib/asan/asan_flags.h @@ -17,11 +17,13 @@ #include "sanitizer_common/sanitizer_internal_defs.h" -// ASan flag values can be defined in three ways: +// ASan flag values can be defined in four ways: // 1) initialized with default values at startup. -// 2) overriden from string returned by user-specified function +// 2) overriden during compilation of ASan runtime by providing +// compile definition ASAN_DEFAULT_OPTIONS. +// 3) overriden from string returned by user-specified function // __asan_default_options(). -// 3) overriden from env variable ASAN_OPTIONS. +// 4) overriden from env variable ASAN_OPTIONS. namespace __asan { diff --git a/compiler-rt/lib/asan/asan_rtl.cc b/compiler-rt/lib/asan/asan_rtl.cc index 2f170fa..39b722a 100644 --- a/compiler-rt/lib/asan/asan_rtl.cc +++ b/compiler-rt/lib/asan/asan_rtl.cc @@ -76,6 +76,17 @@ static const char *MaybeCallAsanDefaultOptions() { return (&__asan_default_options) ? __asan_default_options() : ""; } +static const char *MaybeUseAsanDefaultOptionsCompileDefiniton() { +#ifdef ASAN_DEFAULT_OPTIONS +// Stringize the macro value. +# define ASAN_STRINGIZE(x) #x +# define ASAN_STRINGIZE_OPTIONS(options) ASAN_STRINGIZE(options) + return ASAN_STRINGIZE_OPTIONS(ASAN_DEFAULT_OPTIONS); +#else + return ""; +#endif +} + static void ParseFlagsFromString(Flags *f, const char *str) { ParseFlag(str, &f->quarantine_size, "quarantine_size"); ParseFlag(str, &f->symbolize, "symbolize"); @@ -156,6 +167,9 @@ void InitializeFlags(Flags *f, const char *env) { f->alloc_dealloc_mismatch = true; f->use_stack_depot = true; // Only affects allocator2. + // Override from compile definition. + ParseFlagsFromString(f, MaybeUseAsanDefaultOptionsCompileDefiniton()); + // Override from user-specified string. ParseFlagsFromString(f, MaybeCallAsanDefaultOptions()); if (flags()->verbosity) { |