mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-01 07:30:31 +00:00
[compiler-rt] Avoid instrumenting sanitizer functions
Summary: Function __asan_default_options is called by __asan_init before the shadow memory got initialized. Instrumenting that function may lead to flaky execution. As the __asan_default_options is provided by users, we cannot expect them to add the appropriate function atttributes to avoid instrumentation. Reviewers: kcc, rnk Subscribers: dberris, chrisha, llvm-commits Differential Revision: https://reviews.llvm.org/D24566 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281503 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c348bc4aeb
commit
24624732a0
@ -1882,17 +1882,21 @@ void AddressSanitizer::markEscapedLocalAllocas(Function &F) {
|
||||
bool AddressSanitizer::runOnFunction(Function &F) {
|
||||
if (&F == AsanCtorFunction) return false;
|
||||
if (F.getLinkage() == GlobalValue::AvailableExternallyLinkage) return false;
|
||||
DEBUG(dbgs() << "ASAN instrumenting:\n" << F << "\n");
|
||||
initializeCallbacks(*F.getParent());
|
||||
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
if (!ClDebugFunc.empty() && ClDebugFunc == F.getName()) return false;
|
||||
if (F.getName().find("__asan_") != std::string::npos) return false;
|
||||
|
||||
// If needed, insert __asan_init before checking for SanitizeAddress attr.
|
||||
// This function needs to be called even if the function body is not
|
||||
// instrumented.
|
||||
maybeInsertAsanInitAtFunctionEntry(F);
|
||||
|
||||
|
||||
// Leave if the function doesn't need instrumentation.
|
||||
if (!F.hasFnAttribute(Attribute::SanitizeAddress)) return false;
|
||||
|
||||
if (!ClDebugFunc.empty() && ClDebugFunc != F.getName()) return false;
|
||||
DEBUG(dbgs() << "ASAN instrumenting:\n" << F << "\n");
|
||||
|
||||
initializeCallbacks(*F.getParent());
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
|
||||
FunctionStateRAII CleanupObj(this);
|
||||
|
||||
|
@ -0,0 +1,24 @@
|
||||
; This test checks that we are not instrumenting sanitizer code.
|
||||
; RUN: opt < %s -asan -asan-module -S | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
; Function Attrs: nounwind uwtable
|
||||
define void @__asan_default_options(i32* %a) sanitize_address {
|
||||
entry:
|
||||
%tmp1 = load i32, i32* %a, align 4
|
||||
%tmp2 = add i32 %tmp1, 1
|
||||
store i32 %tmp2, i32* %a, align 4
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK-NOT: call void @__asan_report_load
|
||||
|
||||
; Function Attrs: nounwind uwtable
|
||||
define i32 @main() #0 {
|
||||
entry:
|
||||
ret i32 0
|
||||
}
|
||||
|
||||
; CHECK: declare void @__asan_init()
|
Loading…
Reference in New Issue
Block a user