diff options
Diffstat (limited to 'llvm/test')
5 files changed, 72 insertions, 52 deletions
diff --git a/llvm/test/CodeGen/AArch64/hwasan-check-memaccess.ll b/llvm/test/CodeGen/AArch64/hwasan-check-memaccess.ll index d853b148d57..48c5bf68efa 100644 --- a/llvm/test/CodeGen/AArch64/hwasan-check-memaccess.ll +++ b/llvm/test/CodeGen/AArch64/hwasan-check-memaccess.ll @@ -8,11 +8,11 @@ define i8* @f1(i8* %x0, i8* %x1) { ; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: .cfi_offset w30, -16 ; CHECK-NEXT: mov x9, x0 - ; CHECK-NEXT: bl __hwasan_check_x1_123 + ; CHECK-NEXT: bl __hwasan_check_x1_1 ; CHECK-NEXT: mov x0, x1 ; CHECK-NEXT: ldr x30, [sp], #16 ; CHECK-NEXT: ret - call void @llvm.hwasan.check.memaccess(i8* %x0, i8* %x1, i32 123) + call void @llvm.hwasan.check.memaccess(i8* %x0, i8* %x1, i32 1) ret i8* %x1 } @@ -22,20 +22,21 @@ define i8* @f2(i8* %x0, i8* %x1) { ; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: .cfi_offset w30, -16 ; CHECK-NEXT: mov x9, x1 - ; CHECK-NEXT: bl __hwasan_check_x0_456 + ; CHECK-NEXT: bl __hwasan_check_x0_2_short ; CHECK-NEXT: ldr x30, [sp], #16 ; CHECK-NEXT: ret - call void @llvm.hwasan.check.memaccess(i8* %x1, i8* %x0, i32 456) + call void @llvm.hwasan.check.memaccess.shortgranules(i8* %x1, i8* %x0, i32 2) ret i8* %x0 } declare void @llvm.hwasan.check.memaccess(i8*, i8*, i32) +declare void @llvm.hwasan.check.memaccess.shortgranules(i8*, i8*, i32) -; CHECK: .section .text.hot,"axG",@progbits,__hwasan_check_x0_456,comdat -; CHECK-NEXT: .type __hwasan_check_x0_456,@function -; CHECK-NEXT: .weak __hwasan_check_x0_456 -; CHECK-NEXT: .hidden __hwasan_check_x0_456 -; CHECK-NEXT: __hwasan_check_x0_456: +; CHECK: .section .text.hot,"axG",@progbits,__hwasan_check_x0_2_short,comdat +; CHECK-NEXT: .type __hwasan_check_x0_2_short,@function +; CHECK-NEXT: .weak __hwasan_check_x0_2_short +; CHECK-NEXT: .hidden __hwasan_check_x0_2_short +; CHECK-NEXT: __hwasan_check_x0_2_short: ; CHECK-NEXT: ubfx x16, x0, #4, #52 ; CHECK-NEXT: ldrb w16, [x9, x16] ; CHECK-NEXT: cmp x16, x0, lsr #56 @@ -46,7 +47,7 @@ declare void @llvm.hwasan.check.memaccess(i8*, i8*, i32) ; CHECK-NEXT: cmp w16, #15 ; CHECK-NEXT: b.hi .Ltmp2 ; CHECK-NEXT: and x17, x0, #0xf -; CHECK-NEXT: add x17, x17, #255 +; CHECK-NEXT: add x17, x17, #3 ; CHECK-NEXT: cmp w16, w17 ; CHECK-NEXT: b.ls .Ltmp2 ; CHECK-NEXT: orr x16, x0, #0xf @@ -56,17 +57,17 @@ declare void @llvm.hwasan.check.memaccess(i8*, i8*, i32) ; CHECK-NEXT: .Ltmp2: ; CHECK-NEXT: stp x0, x1, [sp, #-256]! ; CHECK-NEXT: stp x29, x30, [sp, #232] -; CHECK-NEXT: mov x1, #456 -; CHECK-NEXT: adrp x16, :got:__hwasan_tag_mismatch -; CHECK-NEXT: ldr x16, [x16, :got_lo12:__hwasan_tag_mismatch] +; CHECK-NEXT: mov x1, #2 +; CHECK-NEXT: adrp x16, :got:__hwasan_tag_mismatch_v2 +; CHECK-NEXT: ldr x16, [x16, :got_lo12:__hwasan_tag_mismatch_v2] ; CHECK-NEXT: br x16 -; CHECK: .section .text.hot,"axG",@progbits,__hwasan_check_x1_123,comdat -; CHECK-NEXT: .type __hwasan_check_x1_123,@function -; CHECK-NEXT: .weak __hwasan_check_x1_123 -; CHECK-NEXT: .hidden __hwasan_check_x1_123 -; CHECK-NEXT: __hwasan_check_x1_123: +; CHECK: .section .text.hot,"axG",@progbits,__hwasan_check_x1_1,comdat +; CHECK-NEXT: .type __hwasan_check_x1_1,@function +; CHECK-NEXT: .weak __hwasan_check_x1_1 +; CHECK-NEXT: .hidden __hwasan_check_x1_1 +; CHECK-NEXT: __hwasan_check_x1_1: ; CHECK-NEXT: ubfx x16, x1, #4, #52 ; CHECK-NEXT: ldrb w16, [x9, x16] ; CHECK-NEXT: cmp x16, x1, lsr #56 @@ -74,21 +75,10 @@ declare void @llvm.hwasan.check.memaccess(i8*, i8*, i32) ; CHECK-NEXT: .Ltmp4: ; CHECK-NEXT: ret ; CHECK-NEXT: .Ltmp3: -; CHECK-NEXT: cmp w16, #15 -; CHECK-NEXT: b.hi .Ltmp5 -; CHECK-NEXT: and x17, x1, #0xf -; CHECK-NEXT: add x17, x17, #2047 -; CHECK-NEXT: cmp w16, w17 -; CHECK-NEXT: b.ls .Ltmp5 -; CHECK-NEXT: orr x16, x1, #0xf -; CHECK-NEXT: ldrb w16, [x16] -; CHECK-NEXT: cmp x16, x1, lsr #56 -; CHECK-NEXT: b.eq .Ltmp4 -; CHECK-NEXT: .Ltmp5: ; CHECK-NEXT: stp x0, x1, [sp, #-256]! ; CHECK-NEXT: stp x29, x30, [sp, #232] ; CHECK-NEXT: mov x0, x1 -; CHECK-NEXT: mov x1, #123 +; CHECK-NEXT: mov x1, #1 ; CHECK-NEXT: adrp x16, :got:__hwasan_tag_mismatch ; CHECK-NEXT: ldr x16, [x16, :got_lo12:__hwasan_tag_mismatch] ; CHECK-NEXT: br x16 diff --git a/llvm/test/Instrumentation/HWAddressSanitizer/alloca-compat.ll b/llvm/test/Instrumentation/HWAddressSanitizer/alloca-compat.ll new file mode 100644 index 00000000000..d2acbf6bdf4 --- /dev/null +++ b/llvm/test/Instrumentation/HWAddressSanitizer/alloca-compat.ll @@ -0,0 +1,17 @@ +; Test that alloca instrumentation with old API levels does not use short granules. +; +; RUN: opt < %s -hwasan -S | FileCheck %s + +target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" +target triple = "aarch64--linux-android" + +declare void @use32(i32*) + +define void @test_alloca() sanitize_hwaddress { +; CHECK-LABEL: @test_alloca( +; CHECK: %[[X_TAG:[^ ]*]] = trunc i64 {{.*}} to i8 +; CHECK: call void @llvm.memset.p0i8.i64(i8* align 1 {{.*}}, i8 %[[X_TAG]], i64 1, i1 false) + %x = alloca i32, align 4 + call void @use32(i32* nonnull %x) + ret void +} diff --git a/llvm/test/Instrumentation/HWAddressSanitizer/alloca.ll b/llvm/test/Instrumentation/HWAddressSanitizer/alloca.ll index 3525f4ddb94..15a1c6828af 100644 --- a/llvm/test/Instrumentation/HWAddressSanitizer/alloca.ll +++ b/llvm/test/Instrumentation/HWAddressSanitizer/alloca.ll @@ -5,7 +5,7 @@ ; RUN: opt < %s -hwasan -hwasan-with-ifunc=1 -hwasan-uar-retag-to-zero=0 -S | FileCheck %s --check-prefixes=CHECK,DYNAMIC-SHADOW,UAR-TAGS target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" -target triple = "aarch64--linux-android" +target triple = "aarch64--linux-android10000" declare void @use32(i32*) diff --git a/llvm/test/Instrumentation/HWAddressSanitizer/basic-compat.ll b/llvm/test/Instrumentation/HWAddressSanitizer/basic-compat.ll new file mode 100644 index 00000000000..22626ed50c2 --- /dev/null +++ b/llvm/test/Instrumentation/HWAddressSanitizer/basic-compat.ll @@ -0,0 +1,13 @@ +; Test that the old outlined check is used with old API levels. + +; RUN: opt < %s -hwasan -S | FileCheck %s + +target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" +target triple = "aarch64--linux-android" + +define i8 @test_load8(i8* %a) sanitize_hwaddress { +; CHECK-LABEL: @test_load8( +; CHECK: call void @llvm.hwasan.check.memaccess(i8* {{.*}}, i8* {{.*}}, i32 0) + %b = load i8, i8* %a, align 4 + ret i8 %b +} diff --git a/llvm/test/Instrumentation/HWAddressSanitizer/basic.ll b/llvm/test/Instrumentation/HWAddressSanitizer/basic.ll index 79e414a5e4a..d5406117c87 100644 --- a/llvm/test/Instrumentation/HWAddressSanitizer/basic.ll +++ b/llvm/test/Instrumentation/HWAddressSanitizer/basic.ll @@ -14,7 +14,7 @@ ; CHECK: @llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 0, void ()* @hwasan.module_ctor, i8* bitcast (void ()* @hwasan.module_ctor to i8*) }] target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" -target triple = "aarch64--linux-android" +target triple = "aarch64--linux-android10000" define i8 @test_load8(i8* %a) sanitize_hwaddress { ; CHECK-LABEL: @test_load8( @@ -56,8 +56,8 @@ define i8 @test_load8(i8* %a) sanitize_hwaddress { ; RECOVER: [[CONT]]: -; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess(i8* %.hwasan.shadow, i8* %a, i32 0) -; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess(i8* null, i8* %a, i32 0) +; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* %.hwasan.shadow, i8* %a, i32 0) +; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* null, i8* %a, i32 0) ; CHECK: %[[G:[^ ]*]] = load i8, i8* %a, align 4 ; CHECK: ret i8 %[[G]] @@ -108,8 +108,8 @@ define i16 @test_load16(i16* %a) sanitize_hwaddress { ; RECOVER: [[CONT]]: ; ABORT: %[[A:[^ ]*]] = bitcast i16* %a to i8* -; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess(i8* %.hwasan.shadow, i8* %[[A]], i32 1) -; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess(i8* null, i8* %[[A]], i32 1) +; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* %.hwasan.shadow, i8* %[[A]], i32 1) +; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* null, i8* %[[A]], i32 1) ; CHECK: %[[G:[^ ]*]] = load i16, i16* %a, align 4 ; CHECK: ret i16 %[[G]] @@ -136,8 +136,8 @@ define i32 @test_load32(i32* %a) sanitize_hwaddress { ; RECOVER: br label ; ABORT: %[[A:[^ ]*]] = bitcast i32* %a to i8* -; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess(i8* %.hwasan.shadow, i8* %[[A]], i32 2) -; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess(i8* null, i8* %[[A]], i32 2) +; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* %.hwasan.shadow, i8* %[[A]], i32 2) +; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* null, i8* %[[A]], i32 2) ; CHECK: %[[G:[^ ]*]] = load i32, i32* %a, align 4 ; CHECK: ret i32 %[[G]] @@ -164,8 +164,8 @@ define i64 @test_load64(i64* %a) sanitize_hwaddress { ; RECOVER: br label ; ABORT: %[[A:[^ ]*]] = bitcast i64* %a to i8* -; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess(i8* %.hwasan.shadow, i8* %[[A]], i32 3) -; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess(i8* null, i8* %[[A]], i32 3) +; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* %.hwasan.shadow, i8* %[[A]], i32 3) +; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* null, i8* %[[A]], i32 3) ; CHECK: %[[G:[^ ]*]] = load i64, i64* %a, align 8 ; CHECK: ret i64 %[[G]] @@ -192,8 +192,8 @@ define i128 @test_load128(i128* %a) sanitize_hwaddress { ; RECOVER: br label ; ABORT: %[[A:[^ ]*]] = bitcast i128* %a to i8* -; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess(i8* %.hwasan.shadow, i8* %[[A]], i32 4) -; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess(i8* null, i8* %[[A]], i32 4) +; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* %.hwasan.shadow, i8* %[[A]], i32 4) +; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* null, i8* %[[A]], i32 4) ; CHECK: %[[G:[^ ]*]] = load i128, i128* %a, align 16 ; CHECK: ret i128 %[[G]] @@ -232,8 +232,8 @@ define void @test_store8(i8* %a, i8 %b) sanitize_hwaddress { ; RECOVER: call void asm sideeffect "brk #2352", "{x0}"(i64 %[[A]]) ; RECOVER: br label -; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess(i8* %.hwasan.shadow, i8* %a, i32 16) -; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess(i8* null, i8* %a, i32 16) +; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* %.hwasan.shadow, i8* %a, i32 16) +; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* null, i8* %a, i32 16) ; CHECK: store i8 %b, i8* %a, align 4 ; CHECK: ret void @@ -260,8 +260,8 @@ define void @test_store16(i16* %a, i16 %b) sanitize_hwaddress { ; RECOVER: br label ; ABORT: %[[A:[^ ]*]] = bitcast i16* %a to i8* -; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess(i8* %.hwasan.shadow, i8* %[[A]], i32 17) -; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess(i8* null, i8* %[[A]], i32 17) +; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* %.hwasan.shadow, i8* %[[A]], i32 17) +; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* null, i8* %[[A]], i32 17) ; CHECK: store i16 %b, i16* %a, align 4 ; CHECK: ret void @@ -288,8 +288,8 @@ define void @test_store32(i32* %a, i32 %b) sanitize_hwaddress { ; RECOVER: br label ; ABORT: %[[A:[^ ]*]] = bitcast i32* %a to i8* -; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess(i8* %.hwasan.shadow, i8* %[[A]], i32 18) -; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess(i8* null, i8* %[[A]], i32 18) +; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* %.hwasan.shadow, i8* %[[A]], i32 18) +; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* null, i8* %[[A]], i32 18) ; CHECK: store i32 %b, i32* %a, align 4 ; CHECK: ret void @@ -316,8 +316,8 @@ define void @test_store64(i64* %a, i64 %b) sanitize_hwaddress { ; RECOVER: br label ; ABORT: %[[A:[^ ]*]] = bitcast i64* %a to i8* -; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess(i8* %.hwasan.shadow, i8* %[[A]], i32 19) -; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess(i8* null, i8* %[[A]], i32 19) +; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* %.hwasan.shadow, i8* %[[A]], i32 19) +; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* null, i8* %[[A]], i32 19) ; CHECK: store i64 %b, i64* %a, align 8 ; CHECK: ret void @@ -344,8 +344,8 @@ define void @test_store128(i128* %a, i128 %b) sanitize_hwaddress { ; RECOVER: br label ; ABORT: %[[A:[^ ]*]] = bitcast i128* %a to i8* -; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess(i8* %.hwasan.shadow, i8* %[[A]], i32 20) -; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess(i8* null, i8* %[[A]], i32 20) +; ABORT-DYNAMIC-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* %.hwasan.shadow, i8* %[[A]], i32 20) +; ABORT-ZERO-BASED-SHADOW: call void @llvm.hwasan.check.memaccess.shortgranules(i8* null, i8* %[[A]], i32 20) ; CHECK: store i128 %b, i128* %a, align 16 ; CHECK: ret void |

