diff options
author | Stephen Hines <srhines@google.com> | 2014-05-29 02:49:00 -0700 |
---|---|---|
committer | Stephen Hines <srhines@google.com> | 2014-05-29 02:49:00 -0700 |
commit | dce4a407a24b04eebc6a376f8e62b41aaa7b071f (patch) | |
tree | dcebc53f2b182f145a2e659393bf9a0472cedf23 /test/Instrumentation/AddressSanitizer | |
parent | 220b921aed042f9e520c26cffd8282a94c66c3d5 (diff) | |
download | external_llvm-dce4a407a24b04eebc6a376f8e62b41aaa7b071f.zip external_llvm-dce4a407a24b04eebc6a376f8e62b41aaa7b071f.tar.gz external_llvm-dce4a407a24b04eebc6a376f8e62b41aaa7b071f.tar.bz2 |
Update LLVM for 3.5 rebase (r209712).
Change-Id: I149556c940fb7dc92d075273c87ff584f400941f
Diffstat (limited to 'test/Instrumentation/AddressSanitizer')
10 files changed, 237 insertions, 56 deletions
diff --git a/test/Instrumentation/AddressSanitizer/X86/asm_attr.ll b/test/Instrumentation/AddressSanitizer/X86/asm_attr.ll new file mode 100644 index 0000000..b83a7e9 --- /dev/null +++ b/test/Instrumentation/AddressSanitizer/X86/asm_attr.ll @@ -0,0 +1,20 @@ +; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 -mattr=+sse2 -asm-instrumentation=address -asan-instrument-assembly | FileCheck %s + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +; CHECK-LABEL: mov_no_attr +; CHECK-NOT: callq __sanitizer_sanitize_load8@PLT +; CHECK-NOT: callq __sanitizer_sanitize_store8@PLT +define void @mov_no_attr(i64* %dst, i64* %src) { + tail call void asm sideeffect "movq ($1), %rax \0A\09movq %rax, ($0) \0A\09", "r,r,~{memory},~{rax},~{dirflag},~{fpsr},~{flags}"(i64* %dst, i64* %src) + ret void +} + +; CHECK-LABEL: mov_sanitize +; CHECK: callq __sanitizer_sanitize_load8@PLT +; CHECK: callq __sanitizer_sanitize_store8@PLT +define void @mov_sanitize(i64* %dst, i64* %src) sanitize_address { + tail call void asm sideeffect "movq ($1), %rax \0A\09movq %rax, ($0) \0A\09", "r,r,~{memory},~{rax},~{dirflag},~{fpsr},~{flags}"(i64* %dst, i64* %src) + ret void +} diff --git a/test/Instrumentation/AddressSanitizer/X86/asm_mov.ll b/test/Instrumentation/AddressSanitizer/X86/asm_mov.ll index 7af8139..030af7e 100644 --- a/test/Instrumentation/AddressSanitizer/X86/asm_mov.ll +++ b/test/Instrumentation/AddressSanitizer/X86/asm_mov.ll @@ -1,22 +1,22 @@ -; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 -mattr=+sse2 -asan-instrument-inline-assembly | FileCheck %s +; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 -mattr=+sse2 -asm-instrumentation=address -asan-instrument-assembly | 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-S128" target triple = "x86_64-unknown-linux-gnu" ; CHECK-LABEL: mov1b -; CHECK: subq $128, %rsp +; CHECK: leaq -128(%rsp), %rsp ; CHECK-NEXT: pushq %rdi ; CHECK-NEXT: leaq {{.*}}, %rdi ; CHECK-NEXT: callq __sanitizer_sanitize_load1@PLT ; CHECK-NEXT: popq %rdi -; CHECK-NEXT: addq $128, %rsp +; CHECK-NEXT: leaq 128(%rsp), %rsp -; CHECK: subq $128, %rsp +; CHECK: leaq -128(%rsp), %rsp ; CHECK-NEXT: pushq %rdi ; CHECK-NEXT: leaq {{.*}}, %rdi ; CHECK-NEXT: callq __sanitizer_sanitize_store1@PLT ; CHECK-NEXT: popq %rdi -; CHECK-NEXT: addq $128, %rsp +; CHECK-NEXT: leaq 128(%rsp), %rsp ; CHECK: movb {{.*}}, {{.*}} define void @mov1b(i8* %dst, i8* %src) #0 { @@ -26,19 +26,19 @@ entry: } ; CHECK-LABEL: mov2b -; CHECK: subq $128, %rsp +; CHECK: leaq -128(%rsp), %rsp ; CHECK-NEXT: pushq %rdi ; CHECK-NEXT: leaq {{.*}}, %rdi ; CHECK-NEXT: callq __sanitizer_sanitize_load2@PLT ; CHECK-NEXT: popq %rdi -; CHECK-NEXT: addq $128, %rsp +; CHECK-NEXT: leaq 128(%rsp), %rsp -; CHECK: subq $128, %rsp +; CHECK: leaq -128(%rsp), %rsp ; CHECK-NEXT: pushq %rdi ; CHECK-NEXT: leaq {{.*}}, %rdi ; CHECK-NEXT: callq __sanitizer_sanitize_store2@PLT ; CHECK-NEXT: popq %rdi -; CHECK-NEXT: addq $128, %rsp +; CHECK-NEXT: leaq 128(%rsp), %rsp ; CHECK: movw {{.*}}, {{.*}} define void @mov2b(i16* %dst, i16* %src) #0 { @@ -48,19 +48,19 @@ entry: } ; CHECK-LABEL: mov4b -; CHECK: subq $128, %rsp +; CHECK: leaq -128(%rsp), %rsp ; CHECK-NEXT: pushq %rdi ; CHECK-NEXT: leaq {{.*}}, %rdi ; CHECK-NEXT: callq __sanitizer_sanitize_load4@PLT ; CHECK-NEXT: popq %rdi -; CHECK-NEXT: addq $128, %rsp +; CHECK-NEXT: leaq 128(%rsp), %rsp -; CHECK: subq $128, %rsp +; CHECK: leaq -128(%rsp), %rsp ; CHECK-NEXT: pushq %rdi ; CHECK-NEXT: leaq {{.*}}, %rdi ; CHECK-NEXT: callq __sanitizer_sanitize_store4@PLT ; CHECK-NEXT: popq %rdi -; CHECK-NEXT: addq $128, %rsp +; CHECK-NEXT: leaq 128(%rsp), %rsp ; CHECK: movl {{.*}}, {{.*}} define void @mov4b(i32* %dst, i32* %src) #0 { @@ -70,19 +70,19 @@ entry: } ; CHECK-LABEL: mov8b -; CHECK: subq $128, %rsp +; CHECK: leaq -128(%rsp), %rsp ; CHECK-NEXT: pushq %rdi ; CHECK-NEXT: leaq {{.*}}, %rdi ; CHECK-NEXT: callq __sanitizer_sanitize_load8@PLT ; CHECK-NEXT: popq %rdi -; CHECK-NEXT: addq $128, %rsp +; CHECK-NEXT: leaq 128(%rsp), %rsp -; CHECK: subq $128, %rsp +; CHECK: leaq -128(%rsp), %rsp ; CHECK-NEXT: pushq %rdi ; CHECK-NEXT: leaq {{.*}}, %rdi ; CHECK-NEXT: callq __sanitizer_sanitize_store8@PLT ; CHECK-NEXT: popq %rdi -; CHECK-NEXT: addq $128, %rsp +; CHECK-NEXT: leaq 128(%rsp), %rsp ; CHECK: movq {{.*}}, {{.*}} define void @mov8b(i64* %dst, i64* %src) #0 { @@ -92,19 +92,19 @@ entry: } ; CHECK-LABEL: mov16b -; CHECK: subq $128, %rsp +; CHECK: leaq -128(%rsp), %rsp ; CHECK-NEXT: pushq %rdi ; CHECK-NEXT: leaq {{.*}}, %rdi ; CHECK-NEXT: callq __sanitizer_sanitize_load16@PLT ; CHECK-NEXT: popq %rdi -; CHECK-NEXT: addq $128, %rsp +; CHECK-NEXT: leaq 128(%rsp), %rsp -; CHECK: subq $128, %rsp +; CHECK: leaq -128(%rsp), %rsp ; CHECK-NEXT: pushq %rdi ; CHECK-NEXT: leaq {{.*}}, %rdi ; CHECK-NEXT: callq __sanitizer_sanitize_store16@PLT ; CHECK-NEXT: popq %rdi -; CHECK-NEXT: addq $128, %rsp +; CHECK-NEXT: leaq 128(%rsp), %rsp ; CHECK: movaps {{.*}}, {{.*}} define void @mov16b(<2 x i64>* %dst, <2 x i64>* %src) #0 { @@ -113,7 +113,7 @@ entry: ret void } -attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-frame-pointer-elim-non-leaf"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #0 = { nounwind uwtable sanitize_address "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-frame-pointer-elim-non-leaf"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } attributes #1 = { nounwind } !0 = metadata !{i32 98, i32 122, i32 160} diff --git a/test/Instrumentation/AddressSanitizer/X86/asm_mov.s b/test/Instrumentation/AddressSanitizer/X86/asm_mov.s index 9001067..df217c0 100644 --- a/test/Instrumentation/AddressSanitizer/X86/asm_mov.s +++ b/test/Instrumentation/AddressSanitizer/X86/asm_mov.s @@ -1,4 +1,4 @@ -# RUN: llvm-mc %s -triple=x86_64-unknown-linux-gnu -mcpu=corei7 -mattr=+sse2 -asan-instrument-inline-assembly | FileCheck %s +# RUN: llvm-mc %s -triple=x86_64-unknown-linux-gnu -mcpu=corei7 -mattr=+sse2 -asm-instrumentation=address -asan-instrument-assembly | FileCheck %s .text .globl mov1b @@ -6,21 +6,21 @@ .type mov1b,@function # CHECK-LABEL: mov1b: # -# CHECK: subq $128, %rsp +# CHECK: leaq -128(%rsp), %rsp # CHECK-NEXT: pushq %rdi # CHECK-NEXT: leaq (%rsi), %rdi # CHECK-NEXT: callq __sanitizer_sanitize_load1@PLT # CHECK-NEXT: popq %rdi -# CHECK-NEXT: addq $128, %rsp +# CHECK-NEXT: leaq 128(%rsp), %rsp # # CHECK-NEXT: movb (%rsi), %al # -# CHECK-NEXT: subq $128, %rsp +# CHECK-NEXT: leaq -128(%rsp), %rsp # CHECK-NEXT: pushq %rdi # CHECK-NEXT: leaq (%rdi), %rdi # CHECK-NEXT: callq __sanitizer_sanitize_store1@PLT # CHECK-NEXT: popq %rdi -# CHECK-NEXT: addq $128, %rsp +# CHECK-NEXT: leaq 128(%rsp), %rsp # # CHECK-NEXT: movb %al, (%rdi) mov1b: # @mov1b @@ -41,21 +41,21 @@ mov1b: # @mov1b .type mov16b,@function # CHECK-LABEL: mov16b: # -# CHECK: subq $128, %rsp +# CHECK: leaq -128(%rsp), %rsp # CHECK-NEXT: pushq %rdi # CHECK-NEXT: leaq (%rsi), %rdi # CHECK-NEXT: callq __sanitizer_sanitize_load16@PLT # CHECK-NEXT: popq %rdi -# CHECK-NEXT: addq $128, %rsp +# CHECK-NEXT: leaq 128(%rsp), %rsp # # CHECK-NEXT: movaps (%rsi), %xmm0 # -# CHECK-NEXT: subq $128, %rsp +# CHECK-NEXT: leaq -128(%rsp), %rsp # CHECK-NEXT: pushq %rdi # CHECK-NEXT: leaq (%rdi), %rdi # CHECK-NEXT: callq __sanitizer_sanitize_store16@PLT # CHECK-NEXT: popq %rdi -# CHECK-NEXT: addq $128, %rsp +# CHECK-NEXT: leaq 128(%rsp), %rsp # # CHECK-NEXT: movaps %xmm0, (%rdi) mov16b: # @mov16b diff --git a/test/Instrumentation/AddressSanitizer/X86/asm_mov_no_instrumentation.s b/test/Instrumentation/AddressSanitizer/X86/asm_mov_no_instrumentation.s index a9ef4df..cc05527 100644 --- a/test/Instrumentation/AddressSanitizer/X86/asm_mov_no_instrumentation.s +++ b/test/Instrumentation/AddressSanitizer/X86/asm_mov_no_instrumentation.s @@ -20,25 +20,5 @@ mov1b: # @mov1b .size mov1b, .Ltmp0-mov1b .cfi_endproc - .globl mov16b - .align 16, 0x90 - .type mov16b,@function -# CHECK-LABEL: mov16b -# CHECK-NOT: callq __sanitizer_sanitize_load16@PLT -# CHECK-NOT: callq __sanitizer_sanitize_store16@PLT -mov16b: # @mov16b - .cfi_startproc -# BB#0: - #APP - movaps (%rsi), %xmm0 - movaps %xmm0, (%rdi) - - #NO_APP - retq -.Ltmp1: - .size mov16b, .Ltmp1-mov16b - .cfi_endproc - - .ident "clang version 3.5 " .section ".note.GNU-stack","",@progbits diff --git a/test/Instrumentation/AddressSanitizer/X86/asm_swap_intel.s b/test/Instrumentation/AddressSanitizer/X86/asm_swap_intel.s new file mode 100644 index 0000000..8a6a8d5 --- /dev/null +++ b/test/Instrumentation/AddressSanitizer/X86/asm_swap_intel.s @@ -0,0 +1,71 @@ +# RUN: llvm-mc %s -x86-asm-syntax=intel -triple=x86_64-unknown-linux-gnu -asm-instrumentation=address -asan-instrument-assembly | FileCheck %s + + .text + .globl swap + .align 16, 0x90 + .type swap,@function +# CHECK-LABEL: swap: +# +# CHECK: leaq -128(%rsp), %rsp +# CHECK-NEXT: pushq %rdi +# CHECK-NEXT: leaq (%rcx), %rdi +# CHECK-NEXT: callq __sanitizer_sanitize_load8@PLT +# CHECK-NEXT: popq %rdi +# CHECK-NEXT: leaq 128(%rsp), %rsp +# +# CHECK-NEXT: movq (%rcx), %rax +# +# CHECK-NEXT: leaq -128(%rsp), %rsp +# CHECK-NEXT: pushq %rdi +# CHECK-NEXT: leaq (%rdx), %rdi +# CHECK-NEXT: callq __sanitizer_sanitize_load8@PLT +# CHECK-NEXT: popq %rdi +# CHECK-NEXT: leaq 128(%rsp), %rsp +# +# CHECK-NEXT: movq (%rdx), %rbx +# +# CHECK: leaq -128(%rsp), %rsp +# CHECK-NEXT: pushq %rdi +# CHECK-NEXT: leaq (%rcx), %rdi +# CHECK-NEXT: callq __sanitizer_sanitize_store8@PLT +# CHECK-NEXT: popq %rdi +# CHECK-NEXT: leaq 128(%rsp), %rsp +# +# CHECK-NEXT: movq %rbx, (%rcx) +# +# CHECK-NEXT: leaq -128(%rsp), %rsp +# CHECK-NEXT: pushq %rdi +# CHECK-NEXT: leaq (%rdx), %rdi +# CHECK-NEXT: callq __sanitizer_sanitize_store8@PLT +# CHECK-NEXT: popq %rdi +# CHECK-NEXT: leaq 128(%rsp), %rsp +# +# CHECK-NEXT: movq %rax, (%rdx) +swap: # @swap + .cfi_startproc +# BB#0: + push rbx +.Ltmp0: + .cfi_def_cfa_offset 16 +.Ltmp1: + .cfi_offset rbx, -16 + mov rcx, rdi + mov rdx, rsi + #APP + + + mov rax, qword ptr [rcx] + mov rbx, qword ptr [rdx] + mov qword ptr [rcx], rbx + mov qword ptr [rdx], rax + + #NO_APP + pop rbx + ret +.Ltmp2: + .size swap, .Ltmp2-swap + .cfi_endproc + + + .ident "clang version 3.5.0 " + .section ".note.GNU-stack","",@progbits diff --git a/test/Instrumentation/AddressSanitizer/basic.ll b/test/Instrumentation/AddressSanitizer/basic.ll index 4863a3d..7d1aa0b 100644 --- a/test/Instrumentation/AddressSanitizer/basic.ll +++ b/test/Instrumentation/AddressSanitizer/basic.ll @@ -34,7 +34,7 @@ define i32 @test_load(i32* %a) sanitize_address { entry: - %tmp1 = load i32* %a + %tmp1 = load i32* %a, align 4 ret i32 %tmp1 } @@ -66,7 +66,7 @@ define void @test_store(i32* %a) sanitize_address { ; entry: - store i32 42, i32* %a + store i32 42, i32* %a, align 4 ret void } @@ -115,6 +115,18 @@ define void @i40test(i40* %a, i40* %b) nounwind uwtable sanitize_address { ; CHECK: __asan_report_store_n{{.*}}, i64 5) ; CHECK: ret void +define void @i64test_align1(i64* %b) nounwind uwtable sanitize_address { + entry: + store i64 0, i64* %b, align 1 + ret void +} + +; CHECK-LABEL: i64test_align1 +; CHECK: __asan_report_store_n{{.*}}, i64 8) +; CHECK: __asan_report_store_n{{.*}}, i64 8) +; CHECK: ret void + + define void @i80test(i80* %a, i80* %b) nounwind uwtable sanitize_address { entry: %t = load i80* %a @@ -139,4 +151,21 @@ entry: ; CHECK-NOT: __asan_report ; CHECK: ret i32 +declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind +declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) nounwind +declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) nounwind + +define void @memintr_test(i8* %a, i8* %b) nounwind uwtable sanitize_address { + entry: + tail call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 100, i32 1, i1 false) + tail call void @llvm.memmove.p0i8.p0i8.i64(i8* %a, i8* %b, i64 100, i32 1, i1 false) + tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %a, i8* %b, i64 100, i32 1, i1 false) + ret void +} + +; CHECK-LABEL: memintr_test +; CHECK: __asan_memset +; CHECK: __asan_memmove +; CHECK: __asan_memcpy +; CHECK: ret void diff --git a/test/Instrumentation/AddressSanitizer/coverage-dbg.ll b/test/Instrumentation/AddressSanitizer/coverage-dbg.ll new file mode 100644 index 0000000..77d7286 --- /dev/null +++ b/test/Instrumentation/AddressSanitizer/coverage-dbg.ll @@ -0,0 +1,33 @@ +; Test that coverage instrumentation does not lose debug location. + +; RUN: opt < %s -asan -asan-module -asan-coverage=1 -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 readnone uwtable +define void @_Z1fv() #0 { +entry: + ret void, !dbg !11 +} + +; CHECK: call void @__sanitizer_cov(), !dbg ! + +attributes #0 = { sanitize_address nounwind readnone uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!8, !9} +!llvm.ident = !{!10} + +!0 = metadata !{i32 786449, metadata !1, i32 4, metadata !"clang version 3.5.0 (208682)", i1 true, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !"", i32 1} ; [ DW_TAG_compile_unit ] [/tmp//tmp/1.cc] [DW_LANG_C_plus_plus] +!1 = metadata !{metadata !"/tmp/1.cc", metadata !"/tmp"} +!2 = metadata !{} +!3 = metadata !{metadata !4} +!4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"f", metadata !"f", metadata !"_Z1fv", i32 1, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 true, void ()* @_Z1fv, null, null, metadata !2, i32 1} ; [ DW_TAG_subprogram ] [line 1] [def] [f] +!5 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [/tmp//tmp/1.cc] +!6 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !7, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!7 = metadata !{null} +!8 = metadata !{i32 2, metadata !"Dwarf Version", i32 4} +!9 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} +!10 = metadata !{metadata !"clang version 3.5.0 (208682)"} +!11 = metadata !{i32 2, i32 0, metadata !4, null} diff --git a/test/Instrumentation/AddressSanitizer/coverage.ll b/test/Instrumentation/AddressSanitizer/coverage.ll index 0670132..5bc5103 100644 --- a/test/Instrumentation/AddressSanitizer/coverage.ll +++ b/test/Instrumentation/AddressSanitizer/coverage.ll @@ -1,5 +1,7 @@ ; RUN: opt < %s -asan -asan-module -asan-coverage=1 -S | FileCheck %s --check-prefix=CHECK1 ; RUN: opt < %s -asan -asan-module -asan-coverage=2 -S | FileCheck %s --check-prefix=CHECK2 +; RUN: opt < %s -asan -asan-module -asan-coverage=2 -asan-coverage-block-threshold=10 -S | FileCheck %s --check-prefix=CHECK2 +; RUN: opt < %s -asan -asan-module -asan-coverage=2 -asan-coverage-block-threshold=1 -S | FileCheck %s --check-prefix=CHECK1 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" define void @foo(i32* %a) sanitize_address { @@ -14,6 +16,7 @@ entry: if.end: ; preds = %entry, %if.then ret void } + ; CHECK1-LABEL: define void @foo ; CHECK1: %0 = load atomic i8* @__asan_gen_cov_foo monotonic, align 1 ; CHECK1: %1 = icmp eq i8 0, %0 @@ -22,9 +25,20 @@ entry: ; CHECK1-NOT: call void @__sanitizer_cov ; CHECK1: store atomic i8 1, i8* @__asan_gen_cov_foo monotonic, align 1 +; CHECK1-LABEL: define internal void @asan.module_ctor +; CHECK1-NOT: ret +; CHECK1: call void @__sanitizer_cov_module_init(i64 1) +; CHECK1: ret + + ; CHECK2-LABEL: define void @foo ; CHECK2: call void @__sanitizer_cov ; CHECK2: call void @__sanitizer_cov ; CHECK2: call void @__sanitizer_cov ; CHECK2-NOT: call void @__sanitizer_cov ; CHECK2: ret void + +; CHECK2-LABEL: define internal void @asan.module_ctor +; CHECK2-NOT: ret +; CHECK2: call void @__sanitizer_cov_module_init(i64 3) +; CHECK2: ret diff --git a/test/Instrumentation/AddressSanitizer/instrumentation-with-call-threshold.ll b/test/Instrumentation/AddressSanitizer/instrumentation-with-call-threshold.ll new file mode 100644 index 0000000..adb4341 --- /dev/null +++ b/test/Instrumentation/AddressSanitizer/instrumentation-with-call-threshold.ll @@ -0,0 +1,30 @@ +; Test asan internal compiler flags: +; -asan-instrumentation-with-call-threshold +; -asan-memory-access-callback-prefix + +; RUN: opt < %s -asan -asan-module -asan-instrumentation-with-call-threshold=1 -S | FileCheck %s --check-prefix=CHECK-CALL +; RUN: opt < %s -asan -asan-module -asan-instrumentation-with-call-threshold=0 -S | FileCheck %s --check-prefix=CHECK-CALL +; RUN: opt < %s -asan -asan-module -asan-instrumentation-with-call-threshold=0 -asan-memory-access-callback-prefix=__foo_ -S | FileCheck %s --check-prefix=CHECK-CUSTOM-PREFIX +; RUN: opt < %s -asan -asan-module -asan-instrumentation-with-call-threshold=5 -S | FileCheck %s --check-prefix=CHECK-INLINE +; RUN: opt < %s -asan -asan-module -S | FileCheck %s --check-prefix=CHECK-INLINE +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" + +define void @test_load(i32* %a, i64* %b, i512* %c, i80* %d) sanitize_address { +entry: +; CHECK-CALL: call void @__asan_load4 +; CHECK-CALL: call void @__asan_load8 +; CHECK-CALL: call void @__asan_loadN{{.*}}i64 64) +; CHECK-CALL: call void @__asan_loadN{{.*}}i64 10) +; CHECK-CUSTOM-PREFIX: call void @__foo_load4 +; CHECK-CUSTOM-PREFIX: call void @__foo_load8 +; CHECK-CUSTOM-PREFIX: call void @__foo_loadN +; CHECK-INLINE-NOT: call void @__asan_load + %tmp1 = load i32* %a, align 4 + %tmp2 = load i64* %b, align 8 + %tmp3 = load i512* %c, align 32 + %tmp4 = load i80* %d, align 8 + ret void +} + + diff --git a/test/Instrumentation/AddressSanitizer/test64.ll b/test/Instrumentation/AddressSanitizer/test64.ll index 4f3ed5b..fd93f45 100644 --- a/test/Instrumentation/AddressSanitizer/test64.ll +++ b/test/Instrumentation/AddressSanitizer/test64.ll @@ -6,7 +6,7 @@ entry: %tmp1 = load i32* %a, align 4 ret i32 %tmp1 } -; CHECK: @read_4_bytes +; CHECK-LABEL: @read_4_bytes ; CHECK-NOT: ret ; CHECK: lshr {{.*}} 3 ; Check for ASAN's Offset for 64-bit (7fff8000) @@ -19,8 +19,10 @@ entry: ret void } -; CHECK: @example_atomicrmw +; CHECK-LABEL: @example_atomicrmw ; CHECK: lshr {{.*}} 3 +; CHECK: __asan_report_store8 +; CHECK-NOT: __asan_report ; CHECK: atomicrmw ; CHECK: ret @@ -30,7 +32,9 @@ entry: ret void } -; CHECK: @example_cmpxchg +; CHECK-LABEL: @example_cmpxchg ; CHECK: lshr {{.*}} 3 +; CHECK: __asan_report_store8 +; CHECK-NOT: __asan_report ; CHECK: cmpxchg ; CHECK: ret |