Skip to content

Commit

Permalink
[asan] Do not instrument accesses to profiling globals
Browse files Browse the repository at this point in the history
It's only useful to asan-itize profiling globals while debugging llvm's
profiling instrumentation passes. Enabling asan along with instrprof or
gcov instrumentation shouldn't incur extra overhead.

This patch is in the same spirit as r264805 and r273202, which disabled
tsan instrumentation of instrprof/gcov globals.

Differential Revision: http://reviews.llvm.org/D21541

llvm-svn: 273444
  • Loading branch information
vedantk committed Jun 22, 2016
1 parent 643dd83 commit f5ac6d4
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 5 deletions.
19 changes: 14 additions & 5 deletions llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -857,10 +857,19 @@ static GlobalVariable *createPrivateGlobalForSourceLoc(Module &M,
return GV;
}

static bool GlobalWasGeneratedByAsan(GlobalVariable *G) {
return G->getName().startswith(kAsanGenPrefix) ||
G->getName().startswith(kSanCovGenPrefix) ||
G->getName().startswith(kODRGenPrefix);
/// \brief Check if \p G has been created by a trusted compiler pass.
static bool GlobalWasGeneratedByCompiler(GlobalVariable *G) {
// Do not instrument asan globals.
if (G->getName().startswith(kAsanGenPrefix) ||
G->getName().startswith(kSanCovGenPrefix) ||
G->getName().startswith(kODRGenPrefix))
return true;

// Do not instrument gcov counter arrays.
if (G->getName() == "__llvm_gcov_ctr")
return true;

return false;
}

Value *AddressSanitizer::memToShadow(Value *Shadow, IRBuilder<> &IRB) {
Expand Down Expand Up @@ -1243,7 +1252,7 @@ bool AddressSanitizerModule::ShouldInstrumentGlobal(GlobalVariable *G) {
if (GlobalsMD.get(G).IsBlacklisted) return false;
if (!Ty->isSized()) return false;
if (!G->hasInitializer()) return false;
if (GlobalWasGeneratedByAsan(G)) return false; // Our own global.
if (GlobalWasGeneratedByCompiler(G)) return false; // Our own globals.
// Touch only those globals that will not be defined in other modules.
// Don't handle ODR linkage types and COMDATs since other modules may be built
// without ASan.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
; This test checks that we don't instrument globals created by profiling passes.
; RUN: opt < %s -asan -asan-module -S | FileCheck %s

@__profc_test = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__llvm_gcov_ctr = internal global [1 x i64] zeroinitializer

; CHECK-DAG: @asan.module_ctor
; CHECK-NOT: @__asan_gen{{.*}}__llvm_gcov_ctr
; CHECK-NOT: @__asan_gen{{.*}}__profc_test

0 comments on commit f5ac6d4

Please sign in to comment.