[compiler-rt] r213782 - [UBSan] Introduce UBSAN_OPTIONS environment variable.
Alexey Samsonov
vonosmas at gmail.com
Wed Jul 23 11:32:55 PDT 2014
Author: samsonov
Date: Wed Jul 23 13:32:55 2014
New Revision: 213782
URL: http://llvm.org/viewvc/llvm-project?rev=213782&view=rev
Log:
[UBSan] Introduce UBSAN_OPTIONS environment variable.
If UBSan is run in a standalone mode (w/o any other sanitizer), it
still uses functions from sanitizer_common, some of which depend on
the value of runtime flags. Allow to override the default values of these
flags with UBSAN_OPTIONS variable. In particular, UBSAN_OPTIONS=symbolize=0
can be used to turn off online symbolization.
Modified:
compiler-rt/trunk/lib/ubsan/ubsan_diag.cc
compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/Function/function.cpp
Modified: compiler-rt/trunk/lib/ubsan/ubsan_diag.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_diag.cc?rev=213782&r1=213781&r2=213782&view=diff
==============================================================================
--- compiler-rt/trunk/lib/ubsan/ubsan_diag.cc (original)
+++ compiler-rt/trunk/lib/ubsan/ubsan_diag.cc Wed Jul 23 13:32:55 2014
@@ -22,7 +22,7 @@
using namespace __ubsan;
-static void InitializeSanitizerCommon() {
+static void InitializeSanitizerCommonAndFlags() {
static StaticSpinMutex init_mu;
SpinMutexLock l(&init_mu);
static bool initialized;
@@ -34,6 +34,8 @@ static void InitializeSanitizerCommon()
CommonFlags *cf = common_flags();
SetCommonFlagsDefaults(cf);
cf->print_summary = false;
+ // Common flags may only be modified via UBSAN_OPTIONS.
+ ParseCommonFlagsFromString(cf, GetEnv("UBSAN_OPTIONS"));
}
initialized = true;
}
@@ -60,7 +62,7 @@ Location __ubsan::getCallerLocation(uptr
Location __ubsan::getFunctionLocation(uptr Loc, const char **FName) {
if (!Loc)
return Location();
- InitializeSanitizerCommon();
+ InitializeSanitizerCommonAndFlags();
AddressInfo Info;
if (!Symbolizer::GetOrInit()->SymbolizePC(Loc, &Info, 1) ||
@@ -274,7 +276,7 @@ static void renderMemorySnippet(const De
}
Diag::~Diag() {
- InitializeSanitizerCommon();
+ InitializeSanitizerCommonAndFlags();
Decorator Decor;
SpinMutexLock l(&CommonSanitizerReportMutex);
Printf(Decor.Bold());
Modified: compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/Function/function.cpp
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/Function/function.cpp?rev=213782&r1=213781&r2=213782&view=diff
==============================================================================
--- compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/Function/function.cpp (original)
+++ compiler-rt/trunk/test/ubsan/TestCases/TypeCheck/Function/function.cpp Wed Jul 23 13:32:55 2014
@@ -1,5 +1,7 @@
// RUN: %clangxx -fsanitize=function %s -O3 -g -o %t
// RUN: %run %t 2>&1 | FileCheck %s
+// Verify that we can disable symbolization if needed:
+// RUN: UBSAN_OPTIONS=symbolize=0 ASAN_OPTIONS=symbolize=0 %run %t 2>&1 | FileCheck %s --check-prefix=NOSYM
#include <stdint.h>
@@ -9,7 +11,9 @@ void g(int x) {}
int main(void) {
// CHECK: runtime error: call to function f() through pointer to incorrect function type 'void (*)(int)'
- // CHECK-NEXT: function.cpp:6: note: f() defined here
+ // CHECK-NEXT: function.cpp:8: note: f() defined here
+ // NOSYM: runtime error: call to function (unknown) through pointer to incorrect function type 'void (*)(int)'
+ // NOSYM-NEXT: ({{.*}}+0x{{.*}}): note: (unknown) defined here
reinterpret_cast<void (*)(int)>(reinterpret_cast<uintptr_t>(f))(42);
// CHECK-NOT: runtime error: call to function g
More information about the llvm-commits
mailing list