brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · 331e481 Raw
128 lines · plain
1;; Testcase to check that module with different sign return address can2;; be mixed.3;4; RUN: llvm-as %s -o %t1.bc5; RUN: llvm-as %p/Inputs/foo.ll -o %t2.bc6; RUN: llvm-as %p/Inputs/fiz.ll -o %t3.bc7; RUN: llvm-as %p/Inputs/bar.ll -o %t4.bc8; RUN: llvm-as %p/Inputs/old.ll -o %t5.bc9; RUN: llvm-lto -exported-symbol main \10; RUN:          -exported-symbol foo_on \11; RUN:          -exported-symbol foo_off \12; RUN:          -exported-symbol fiz_on \13; RUN:          -exported-symbol fiz_off \14; RUN:          -exported-symbol bar \15; RUN:          -exported-symbol baz \16; RUN:          -exported-symbol old_bti \17; RUN:          -exported-symbol old_pac \18; RUN:          -exported-symbol old_none \19; RUN:          -filetype=obj \20; RUN:          %t5.bc %t4.bc %t3.bc %t2.bc %t1.bc \21; RUN:           -o %t1.exe 2>&122; RUN: llvm-objdump -d %t1.exe | FileCheck --check-prefix=CHECK-DUMP %s23; RUN: llvm-readelf -n %t1.exe | FileCheck --allow-empty --check-prefix=CHECK-PROP %s24 25target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"26target triple = "aarch64-unknown-linux-gnu"27 28declare i32 @foo_on();29declare i32 @foo_off();30declare i32 @fiz_on();31declare i32 @fiz_off();32declare void @baz();33declare void @bar();34declare i32 @old_bti();35declare i32 @old_pac();36declare i32 @old_none();37 38define i32 @main() #0 {39entry:40  call i32 @foo_on()41  call i32 @foo_off()42  call i32 @fiz_on()43  call i32 @fiz_off()44  call void @bar()45  call void @baz()46  call i32 @old_bti()47  call i32 @old_pac()48  call i32 @old_none()49  ret i32 050}51 52attributes #0 = { noinline nounwind optnone }53 54!llvm.module.flags = !{!0, !1, !2, !3 }55!0 = !{i32 8, !"branch-target-enforcement", i32 0}56!1 = !{i32 8, !"sign-return-address", i32 0}57!2 = !{i32 8, !"sign-return-address-all", i32 0}58!3 = !{i32 8, !"sign-return-address-with-bkey", i32 0}59 60 61; CHECK-DUMP-LABEL: <old_bti>:62; CHECK-DUMP-NEXT:     bti c63; CHECK-DUMP-NEXT:     mov     w0, #0x264; CHECK-DUMP-NEXT:     ret65 66; CHECK-DUMP-LABEL: <old_pac>:67; CHECK-DUMP-NEXT:     paciasp68; CHECK-DUMP-NEXT:     mov     w0, #0x269; CHECK-DUMP-NEXT:     autiasp70; CHECK-DUMP-NEXT:     ret71 72; CHECK-DUMP-LABEL: <old_none>:73; CHECK-DUMP-NEXT:     mov     w0, #0x374; CHECK-DUMP-NEXT:     ret75 76; CHECK-DUMP-LABEL: <bar>:77; CHECK-DUMP-NEXT:     ret78 79; CHECK-DUMP-LABEL: <baz>:80; CHECK-DUMP-NEXT:     bti c81; CHECK-DUMP-NEXT:     ret82 83;; fiz.ll represents a module with the old style of the function attributes.84;; fiz_on shall have PAC with A-key as it requested at module level.85; CHECK-DUMP-LABEL: <fiz_on>:86; CHECK-DUMP-NEXT:     paciasp87; CHECK-DUMP-NEXT:     str     x30, [sp, #-0x10]!88; CHECK-DUMP-NEXT:     bl      0x38 <fiz_on+0x8>89; CHECK-DUMP-NEXT:     mov     w0, #0x2a90; CHECK-DUMP-NEXT:     ldr     x30, [sp], #0x1091; CHECK-DUMP-NEXT:     autiasp92; CHECK-DUMP-NEXT:     ret93 94;; fiz_off shall not have BTI or PAC instructions as they are disabled at function scope.95; CHECK-DUMP-LABEL:  <fiz_off>:96; CHECK-DUMP-NEXT:       mov     w0, #0x2b97; CHECK-DUMP-NEXT:       ret98 99;; foo.ll represents a module with the old style of the function attributes.100;; foo_on shall have PAC with B-key as it requested at module level.101; CHECK-DUMP-LABEL: <foo_on>:102; CHECK-DUMP-NEXT:     pacibsp103; CHECK-DUMP-NEXT:     mov     w0, #0x2a104; CHECK-DUMP-NEXT:     autibsp105; CHECK-DUMP-NEXT:     ret106 107;; foo_off shall not have BTI or PAC instructions as they are disabled at function scope.108; CHECK-DUMP-LABEL:  <foo_off>:109; CHECK-DUMP-NEXT:       mov     w0, #0x2b110; CHECK-DUMP-NEXT:       ret111 112; CHECK-DUMP-LABEL: <main>:113; CHECK-DUMP-NOT:       paciasp114; CHECK-DUMP-NEXT:      str     x30,115; CHECK-DUMP-NEXT:      bl116; CHECK-DUMP-NEXT:      bl117; CHECK-DUMP-NEXT:      bl118; CHECK-DUMP-NEXT:      bl119; CHECK-DUMP-NEXT:      bl120; CHECK-DUMP-NEXT:      bl121; CHECK-DUMP-NEXT:      bl122; CHECK-DUMP-NEXT:      bl123; CHECK-DUMP-NEXT:      bl124 125;; `main` doesn't support PAC sign-return-address while `foo` does, so in the binary126;; we should not see anything.127; CHECK-PROP-NOT:   Properties: aarch64 feature: PAC128