[llvm-commits] [llvm] r144933 - in /llvm/trunk: lib/Transforms/Instrumentation/AddressSanitizer.cpp test/Instrumentation/AddressSanitizer/do-not-touch-odr-global.ll

Kostya Serebryany kcc at google.com
Thu Nov 17 15:15:00 PST 2011


Author: kcc
Date: Thu Nov 17 17:14:59 2011
New Revision: 144933

URL: http://llvm.org/viewvc/llvm-project?rev=144933&view=rev
Log:
fall back to explicit list of allowed linkages when instrumenting globals in asan; add a test check that asan does not touch linkonce_odr

Added:
    llvm/trunk/test/Instrumentation/AddressSanitizer/do-not-touch-odr-global.ll
Modified:
    llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp

Modified: llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp?rev=144933&r1=144932&r2=144933&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp (original)
+++ llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp Thu Nov 17 17:14:59 2011
@@ -448,8 +448,11 @@
 
     if (!Ty->isSized()) continue;
     if (!G->hasInitializer()) continue;
-    if (GlobalVariable::mayBeOverridden(G->getLinkage()) ||
-        G->getLinkage() == GlobalVariable::AppendingLinkage)
+    // Touch only those globals that will not be defined in other modules.
+    // Don't handle ODR type linkages since other modules may be built w/o asan.
+    if (G->getLinkage() != GlobalVariable::GlobalVariable::ExternalLinkage &&
+        G->getLinkage() != GlobalVariable::GlobalVariable::PrivateLinkage &&
+        G->getLinkage() != GlobalVariable::GlobalVariable::InternalLinkage)
       continue;
     // For now, just ignore this Alloca if the alignment is large.
     if (G->getAlignment() > RedzoneSize) continue;

Added: llvm/trunk/test/Instrumentation/AddressSanitizer/do-not-touch-odr-global.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/AddressSanitizer/do-not-touch-odr-global.ll?rev=144933&view=auto
==============================================================================
--- llvm/trunk/test/Instrumentation/AddressSanitizer/do-not-touch-odr-global.ll (added)
+++ llvm/trunk/test/Instrumentation/AddressSanitizer/do-not-touch-odr-global.ll Thu Nov 17 17:14:59 2011
@@ -0,0 +1,6 @@
+; RUN: opt < %s -asan -S | FileCheck %s
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
+target triple = "x86_64-unknown-linux-gnu"
+; no action should be taken for these globals
+ at v1 = linkonce_odr constant i8 1
+; CHECK-NOT: __asan_register_globals





More information about the llvm-commits mailing list