xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/safestack.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=i386-linux < %s -o - | FileCheck --check-prefix=LINUX-I386 %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=x86_64-linux < %s -o - | FileCheck --check-prefix=LINUX-X64 %s
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=i386-linux-android < %s -o - | FileCheck --check-prefix=ANDROID-I386 %s
4*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=x86_64-linux-android < %s -o - | FileCheck --check-prefix=ANDROID-X64 %s
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdefine void @_Z1fv() safestack {
7*9880d681SAndroid Build Coastguard Workerentry:
8*9880d681SAndroid Build Coastguard Worker  %x = alloca i32, align 4
9*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %x to i8*
10*9880d681SAndroid Build Coastguard Worker  call void @_Z7CapturePi(i32* nonnull %x)
11*9880d681SAndroid Build Coastguard Worker  ret void
12*9880d681SAndroid Build Coastguard Worker}
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerdeclare void @_Z7CapturePi(i32*)
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker; LINUX-X64: movq __safestack_unsafe_stack_ptr@GOTTPOFF(%rip), %[[A:.*]]
17*9880d681SAndroid Build Coastguard Worker; LINUX-X64: movq %fs:(%[[A]]), %[[B:.*]]
18*9880d681SAndroid Build Coastguard Worker; LINUX-X64: leaq -16(%[[B]]), %[[C:.*]]
19*9880d681SAndroid Build Coastguard Worker; LINUX-X64: movq %[[C]], %fs:(%[[A]])
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker; LINUX-I386: movl __safestack_unsafe_stack_ptr@INDNTPOFF, %[[A:.*]]
22*9880d681SAndroid Build Coastguard Worker; LINUX-I386: movl %gs:(%[[A]]), %[[B:.*]]
23*9880d681SAndroid Build Coastguard Worker; LINUX-I386: leal -16(%[[B]]), %[[C:.*]]
24*9880d681SAndroid Build Coastguard Worker; LINUX-I386: movl %[[C]], %gs:(%[[A]])
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Worker; ANDROID-I386: movl %gs:36, %[[A:.*]]
27*9880d681SAndroid Build Coastguard Worker; ANDROID-I386: leal -16(%[[A]]), %[[B:.*]]
28*9880d681SAndroid Build Coastguard Worker; ANDROID-I386: movl %[[B]], %gs:36
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker; ANDROID-X64: movq %fs:72, %[[A:.*]]
31*9880d681SAndroid Build Coastguard Worker; ANDROID-X64: leaq -16(%[[A]]), %[[B:.*]]
32*9880d681SAndroid Build Coastguard Worker; ANDROID-X64: movq %[[B]], %fs:72
33