
`disable_sanitizer_instrumetation` is attached to functions that shall not be instrumented e.g. ifunc resolver because those run before everything is initialised. Some sanitizer already handles this attribute, this patch adds it to DataFLow and Coverage too.
48 lines
1.3 KiB
LLVM
48 lines
1.3 KiB
LLVM
|
|
; This test checks that we are not instrumenting sanitizer code.
|
|
; RUN: opt < %s -passes='module(msan)' -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 with sanitize_memory is instrumented.
|
|
; Function Attrs: nounwind uwtable
|
|
define void @instr_sa(ptr %a) sanitize_memory {
|
|
entry:
|
|
%tmp1 = load i32, ptr %a, align 4
|
|
%tmp2 = add i32 %tmp1, 1
|
|
store i32 %tmp2, ptr %a, align 4
|
|
ret void
|
|
}
|
|
|
|
; CHECK-LABEL: @instr_sa
|
|
; CHECK: %0 = load i64, ptr @__msan_param_tls
|
|
|
|
|
|
; Function with disable_sanitizer_instrumentation is not instrumented.
|
|
; Function Attrs: nounwind uwtable
|
|
define void @noinstr_dsi(ptr %a) disable_sanitizer_instrumentation {
|
|
entry:
|
|
%tmp1 = load i32, ptr %a, align 4
|
|
%tmp2 = add i32 %tmp1, 1
|
|
store i32 %tmp2, ptr %a, align 4
|
|
ret void
|
|
}
|
|
|
|
; CHECK-LABEL: @noinstr_dsi
|
|
; CHECK-NOT: %0 = load i64, ptr @__msan_param_tls
|
|
|
|
|
|
; disable_sanitizer_instrumentation takes precedence over sanitize_memory.
|
|
; Function Attrs: nounwind uwtable
|
|
define void @noinstr_dsi_sa(ptr %a) disable_sanitizer_instrumentation sanitize_memory {
|
|
entry:
|
|
%tmp1 = load i32, ptr %a, align 4
|
|
%tmp2 = add i32 %tmp1, 1
|
|
store i32 %tmp2, ptr %a, align 4
|
|
ret void
|
|
}
|
|
|
|
; CHECK-LABEL: @noinstr_dsi_sa
|
|
; CHECK-NOT: %0 = load i64, ptr @__msan_param_tls
|