Skip to content

Commit 3c8ab87

Browse files
committed
[hwasan] Add testcase for check-memaccess when using a fixed shadow
The test case is based on hwasan-check-memaccess.ll (albeit updated using update_llc_test_checks) with --hwasan-mapping-offset=... --hwasan-mapping-offset=... actually doesn't affect the LLVM IR at the moment; future work will introduce memaccess fixed shadow intrinsics. (#89319)
1 parent 39bfdb7 commit 3c8ab87

File tree

1 file changed

+165
-0
lines changed

1 file changed

+165
-0
lines changed
Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2+
; RUN: llc --hwasan-mapping-offset=4398046511104 < %s | FileCheck %s
3+
4+
target triple = "aarch64--linux-android"
5+
6+
define ptr @f1(ptr %x0, ptr %x1) {
7+
; CHECK-LABEL: f1:
8+
; CHECK: // %bb.0:
9+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
10+
; CHECK-NEXT: .cfi_def_cfa_offset 16
11+
; CHECK-NEXT: .cfi_offset w30, -16
12+
; CHECK-NEXT: mov x9, x0
13+
; CHECK-NEXT: mov x0, x1
14+
; CHECK-NEXT: bl __hwasan_check_x1_1
15+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
16+
; CHECK-NEXT: ret
17+
call void @llvm.hwasan.check.memaccess(ptr %x0, ptr %x1, i32 1)
18+
ret ptr %x1
19+
}
20+
21+
define ptr @f2(ptr %x0, ptr %x1) {
22+
; CHECK-LABEL: f2:
23+
; CHECK: // %bb.0:
24+
; CHECK-NEXT: stp x30, x20, [sp, #-16]! // 16-byte Folded Spill
25+
; CHECK-NEXT: .cfi_def_cfa_offset 16
26+
; CHECK-NEXT: .cfi_offset w20, -8
27+
; CHECK-NEXT: .cfi_offset w30, -16
28+
; CHECK-NEXT: mov x20, x1
29+
; CHECK-NEXT: bl __hwasan_check_x0_2_short_v2
30+
; CHECK-NEXT: ldp x30, x20, [sp], #16 // 16-byte Folded Reload
31+
; CHECK-NEXT: ret
32+
call void @llvm.hwasan.check.memaccess.shortgranules(ptr %x1, ptr %x0, i32 2)
33+
ret ptr %x0
34+
}
35+
36+
define void @f3(ptr %x0, ptr %x1) {
37+
; 0x3ff0000 (kernel, match-all = 0xff)
38+
; CHECK-LABEL: f3:
39+
; CHECK: // %bb.0:
40+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
41+
; CHECK-NEXT: .cfi_def_cfa_offset 16
42+
; CHECK-NEXT: .cfi_offset w30, -16
43+
; CHECK-NEXT: mov x9, x0
44+
; CHECK-NEXT: bl __hwasan_check_x1_67043328
45+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
46+
; CHECK-NEXT: ret
47+
call void @llvm.hwasan.check.memaccess(ptr %x0, ptr %x1, i32 67043328)
48+
ret void
49+
}
50+
51+
define void @f4(ptr %x0, ptr %x1) {
52+
; 0x1000010 (access-size-index = 0, is-write = 1, match-all = 0x0)
53+
; CHECK-LABEL: f4:
54+
; CHECK: // %bb.0:
55+
; CHECK-NEXT: stp x30, x20, [sp, #-16]! // 16-byte Folded Spill
56+
; CHECK-NEXT: .cfi_def_cfa_offset 16
57+
; CHECK-NEXT: .cfi_offset w20, -8
58+
; CHECK-NEXT: .cfi_offset w30, -16
59+
; CHECK-NEXT: mov x20, x0
60+
; CHECK-NEXT: bl __hwasan_check_x1_16777232_short_v2
61+
; CHECK-NEXT: ldp x30, x20, [sp], #16 // 16-byte Folded Reload
62+
; CHECK-NEXT: ret
63+
call void @llvm.hwasan.check.memaccess.shortgranules(ptr %x0, ptr %x1, i32 16777232)
64+
ret void
65+
}
66+
67+
declare void @llvm.hwasan.check.memaccess(ptr, ptr, i32)
68+
declare void @llvm.hwasan.check.memaccess.shortgranules(ptr, ptr, i32)
69+
70+
; CHECK: .section .text.hot,"axG",@progbits,__hwasan_check_x0_2_short_v2,comdat
71+
; CHECK-NEXT: .type __hwasan_check_x0_2_short_v2,@function
72+
; CHECK-NEXT: .weak __hwasan_check_x0_2_short_v2
73+
; CHECK-NEXT: .hidden __hwasan_check_x0_2_short_v2
74+
; CHECK-NEXT: __hwasan_check_x0_2_short_v2:
75+
; CHECK-NEXT: sbfx x16, x0, #4, #52
76+
; CHECK-NEXT: ldrb w16, [x20, x16]
77+
; CHECK-NEXT: cmp x16, x0, lsr #56
78+
; CHECK-NEXT: b.ne .Ltmp0
79+
; CHECK-NEXT: .Ltmp1:
80+
; CHECK-NEXT: ret
81+
; CHECK-NEXT: .Ltmp0:
82+
; CHECK-NEXT: cmp w16, #15
83+
; CHECK-NEXT: b.hi .Ltmp2
84+
; CHECK-NEXT: and x17, x0, #0xf
85+
; CHECK-NEXT: add x17, x17, #3
86+
; CHECK-NEXT: cmp w16, w17
87+
; CHECK-NEXT: b.ls .Ltmp2
88+
; CHECK-NEXT: orr x16, x0, #0xf
89+
; CHECK-NEXT: ldrb w16, [x16]
90+
; CHECK-NEXT: cmp x16, x0, lsr #56
91+
; CHECK-NEXT: b.eq .Ltmp1
92+
; CHECK-NEXT: .Ltmp2:
93+
; CHECK-NEXT: stp x0, x1, [sp, #-256]!
94+
; CHECK-NEXT: stp x29, x30, [sp, #232]
95+
; CHECK-NEXT: mov x1, #2
96+
; CHECK-NEXT: adrp x16, :got:__hwasan_tag_mismatch_v2
97+
; CHECK-NEXT: ldr x16, [x16, :got_lo12:__hwasan_tag_mismatch_v2]
98+
; CHECK-NEXT: br x16
99+
100+
101+
; CHECK: .section .text.hot,"axG",@progbits,__hwasan_check_x1_1,comdat
102+
; CHECK-NEXT: .type __hwasan_check_x1_1,@function
103+
; CHECK-NEXT: .weak __hwasan_check_x1_1
104+
; CHECK-NEXT: .hidden __hwasan_check_x1_1
105+
; CHECK-NEXT: __hwasan_check_x1_1:
106+
; CHECK-NEXT: sbfx x16, x1, #4, #52
107+
; CHECK-NEXT: ldrb w16, [x9, x16]
108+
; CHECK-NEXT: cmp x16, x1, lsr #56
109+
; CHECK-NEXT: b.ne .Ltmp3
110+
; CHECK-NEXT: .Ltmp4:
111+
; CHECK-NEXT: ret
112+
; CHECK-NEXT: .Ltmp3:
113+
; CHECK-NEXT: stp x0, x1, [sp, #-256]!
114+
; CHECK-NEXT: stp x29, x30, [sp, #232]
115+
; CHECK-NEXT: mov x0, x1
116+
; CHECK-NEXT: mov x1, #1
117+
; CHECK-NEXT: adrp x16, :got:__hwasan_tag_mismatch
118+
; CHECK-NEXT: ldr x16, [x16, :got_lo12:__hwasan_tag_mismatch]
119+
; CHECK-NEXT: br x16
120+
121+
; CHECK: __hwasan_check_x1_67043328:
122+
; CHECK-NEXT: sbfx x16, x1, #4, #52
123+
; CHECK-NEXT: ldrb w16, [x9, x16]
124+
; CHECK-NEXT: cmp x16, x1, lsr #56
125+
; CHECK-NEXT: b.ne .Ltmp5
126+
; CHECK-NEXT: .Ltmp6:
127+
; CHECK-NEXT: ret
128+
; CHECK-NEXT: .Ltmp5:
129+
; CHECK-NEXT: lsr x17, x1, #56
130+
; CHECK-NEXT: cmp x17, #255
131+
; CHECK-NEXT: b.eq .Ltmp6
132+
; CHECK-NEXT: stp x0, x1, [sp, #-256]!
133+
; CHECK-NEXT: stp x29, x30, [sp, #232]
134+
; CHECK-NEXT: mov x0, x1
135+
; CHECK-NEXT: mov x1, #0
136+
; CHECK-NEXT: b __hwasan_tag_mismatch
137+
138+
; CHECK: __hwasan_check_x1_16777232_short_v2:
139+
; CHECK-NEXT: sbfx x16, x1, #4, #52
140+
; CHECK-NEXT: ldrb w16, [x20, x16]
141+
; CHECK-NEXT: cmp x16, x1, lsr #56
142+
; CHECK-NEXT: b.ne .Ltmp7
143+
; CHECK-NEXT: .Ltmp8:
144+
; CHECK-NEXT: ret
145+
; CHECK-NEXT: .Ltmp7:
146+
; CHECK-NEXT: lsr x17, x1, #56
147+
; CHECK-NEXT: cmp x17, #0
148+
; CHECK-NEXT: b.eq .Ltmp8
149+
; CHECK-NEXT: cmp w16, #15
150+
; CHECK-NEXT: b.hi .Ltmp9
151+
; CHECK-NEXT: and x17, x1, #0xf
152+
; CHECK-NEXT: cmp w16, w17
153+
; CHECK-NEXT: b.ls .Ltmp9
154+
; CHECK-NEXT: orr x16, x1, #0xf
155+
; CHECK-NEXT: ldrb w16, [x16]
156+
; CHECK-NEXT: cmp x16, x1, lsr #56
157+
; CHECK-NEXT: b.eq .Ltmp8
158+
; CHECK-NEXT: .Ltmp9:
159+
; CHECK-NEXT: stp x0, x1, [sp, #-256]!
160+
; CHECK-NEXT: stp x29, x30, [sp, #232]
161+
; CHECK-NEXT: mov x0, x1
162+
; CHECK-NEXT: mov x1, #16
163+
; CHECK-NEXT: adrp x16, :got:__hwasan_tag_mismatch_v2
164+
; CHECK-NEXT: ldr x16, [x16, :got_lo12:__hwasan_tag_mismatch_v2]
165+
; CHECK-NEXT: br x16

0 commit comments

Comments
 (0)