53 lines · c
1// RUN: %clang -target aarch64-none-elf -S -emit-llvm -o - -msign-return-address=none %s | FileCheck %s --check-prefix=CHECK --check-prefix=NONE2// RUN: %clang -target aarch64-none-elf -S -emit-llvm -o - -msign-return-address=all %s | FileCheck %s --check-prefix=CHECK --check-prefix=ALL3// RUN: %clang -target aarch64-none-elf -S -emit-llvm -o - -msign-return-address=non-leaf %s | FileCheck %s --check-prefix=CHECK --check-prefix=PART4 5// RUN: %clang -target aarch64-none-elf -S -emit-llvm -o - -mbranch-protection=none %s | FileCheck %s --check-prefix=CHECK --check-prefix=NONE6// RUN: %clang -target aarch64-none-elf -S -emit-llvm -o - -mbranch-protection=pac-ret+leaf %s | FileCheck %s --check-prefix=CHECK --check-prefix=ALL7// RUN: %clang -target aarch64-none-elf -S -emit-llvm -o - -mbranch-protection=pac-ret+b-key %s | FileCheck %s --check-prefix=CHECK --check-prefix=B-KEY8// RUN: %clang -target aarch64-none-elf -S -emit-llvm -o - -mbranch-protection=bti %s | FileCheck %s --check-prefix=CHECK --check-prefix=BTE9 10// REQUIRES: aarch64-registered-target11 12// Check there are no branch protection function attributes13 14// CHECK-LABEL: @foo() #[[#ATTR:]]15 16// NONE-NOT: attributes #[[#ATTR]] = { {{.*}} "sign-return-address"17// NONE-NOT: attributes #[[#ATTR]] = { {{.*}} "sign-return-address-key"18// NONE-NOT: attributes #[[#ATTR]] = { {{.*}} "branch-target-enforcement"19 20// ALL: attributes #[[#ATTR]] = { {{.*}} "sign-return-address"21// PART: attributes #[[#ATTR]] = { {{.*}} "sign-return-address-key"="a_key"22// B-KEY: attributes #[[#ATTR]] = { {{.*}} "sign-return-address-key"="b_key"23// BTE: attributes #[[#ATTR]] = { {{.*}} "branch-target-enforcement"24 25 26// Check module attributes27 28// NONE-NOT: !"branch-target-enforcement"29// ALL-NOT: !"branch-target-enforcement"30// PART-NOT: !"branch-target-enforcement"31// BTE: !{i32 8, !"branch-target-enforcement", i32 2}32// B-KEY-NOT: !"branch-target-enforcement"33 34// NONE-NOT: !"sign-return-address"35// ALL: !{i32 8, !"sign-return-address", i32 2}36// PART: !{i32 8, !"sign-return-address", i32 2}37// BTE-NOT: !"sign-return-address"38// B-KEY: !{i32 8, !"sign-return-address", i32 2}39 40// NONE-NOT: !"sign-return-address-all"41// ALL: !{i32 8, !"sign-return-address-all", i32 2}42// PART-NOT: !"sign-return-address-all"43// BTE-NOT: !"sign-return-address-all"44// B-KEY-NOT: !"sign-return-address-all"45 46// NONE-NOT: !"sign-return-address-with-bkey"47// ALL-NOT: !"sign-return-address-with-bkey"48// PART-NOT: !"sign-return-address-with-bkey"49// BTE-NOT: !"sign-return-address-with-bkey"50// B-KEY: !{i32 8, !"sign-return-address-with-bkey", i32 2}51 52void foo() {}53