brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · a6e1279 Raw
46 lines · plain
1; To test that safestack does not break the musttail call contract.2;3; RUN: opt < %s --safe-stack -S | FileCheck %s4; RUN: opt < %s -passes=safe-stack -S | FileCheck %s5 6target triple = "x86_64-unknown-linux-gnu"7 8declare i32 @foo(ptr %p)9declare void @alloca_test_use(ptr)10 11define i32 @call_foo(ptr %a) safestack {12; CHECK-LABEL: @call_foo(13; CHECK-NEXT:    [[UNSAFE_STACK_PTR:%.*]] = load ptr, ptr @__safestack_unsafe_stack_ptr, align 814; CHECK-NEXT:    [[UNSAFE_STACK_STATIC_TOP:%.*]] = getelementptr i8, ptr [[UNSAFE_STACK_PTR]], i32 -1615; CHECK-NEXT:    store ptr [[UNSAFE_STACK_STATIC_TOP]], ptr @__safestack_unsafe_stack_ptr, align 816; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[UNSAFE_STACK_PTR]], i32 -1017; CHECK-NEXT:    call void @alloca_test_use(ptr [[TMP1]])18; CHECK-NEXT:    store ptr [[UNSAFE_STACK_PTR]], ptr @__safestack_unsafe_stack_ptr, align 819; CHECK-NEXT:    [[R:%.*]] = musttail call i32 @foo(ptr [[A:%.*]])20; CHECK-NEXT:    ret i32 [[R]]21;22  %x = alloca [10 x i8], align 123  call void @alloca_test_use(ptr %x)24  %r = musttail call i32 @foo(ptr %a)25  ret i32 %r26}27 28define i32 @call_foo_cast(ptr %a) safestack {29; CHECK-LABEL: @call_foo_cast(30; CHECK-NEXT:    [[UNSAFE_STACK_PTR:%.*]] = load ptr, ptr @__safestack_unsafe_stack_ptr, align 831; CHECK-NEXT:    [[UNSAFE_STACK_STATIC_TOP:%.*]] = getelementptr i8, ptr [[UNSAFE_STACK_PTR]], i32 -1632; CHECK-NEXT:    store ptr [[UNSAFE_STACK_STATIC_TOP]], ptr @__safestack_unsafe_stack_ptr, align 833; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[UNSAFE_STACK_PTR]], i32 -1034; CHECK-NEXT:    call void @alloca_test_use(ptr [[TMP1]])35; CHECK-NEXT:    store ptr [[UNSAFE_STACK_PTR]], ptr @__safestack_unsafe_stack_ptr, align 836; CHECK-NEXT:    [[R:%.*]] = musttail call i32 @foo(ptr [[A:%.*]])37; CHECK-NEXT:    [[T:%.*]] = bitcast i32 [[R]] to i3238; CHECK-NEXT:    ret i32 [[T]]39;40  %x = alloca [10 x i8], align 141  call void @alloca_test_use(ptr %x)42  %r = musttail call i32 @foo(ptr %a)43  %t = bitcast i32 %r to i3244  ret i32 %t45}46