[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