forked from OSchip/llvm-project
[clang][ARM] emit PACBTI-M feature defines
emit __ARM_FEATURE_BTI_DEFAULT and __ARM_FEATURE_PAC_DEFAULT defines when those features have been enabled This patch is part of a series that adds support for the PACBTI-M extension of the Armv8.1-M architecture, as detailed here: https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/armv8-1-m-pointer-authentication-and-branch-target-identification-extension The PACBTI-M specification can be found in the Armv8-M Architecture Reference Manual: https://developer.arm.com/documentation/ddi0553/latest The following people contributed to this patch: - Victor Campos - Ties Stuij Reviewed By: ostannard Differential Revision: https://reviews.llvm.org/D112422
This commit is contained in:
parent
639b85ea0b
commit
ab2611d099
|
@ -896,6 +896,16 @@ void ARMTargetInfo::getTargetDefines(const LangOptions &Opts,
|
|||
Builder.defineMacro("__ARM_BF16_FORMAT_ALTERNATIVE", "1");
|
||||
}
|
||||
|
||||
if (Opts.BranchTargetEnforcement)
|
||||
Builder.defineMacro("__ARM_FEATURE_BTI_DEFAULT", "1");
|
||||
|
||||
if (Opts.hasSignReturnAddress()) {
|
||||
unsigned Value = Opts.isSignReturnAddressWithAKey() ? 1 : 2;
|
||||
if (Opts.isSignReturnAddressScopeAll())
|
||||
Value |= 1 << 2;
|
||||
Builder.defineMacro("__ARM_FEATURE_PAC_DEFAULT", Twine(Value));
|
||||
}
|
||||
|
||||
switch (ArchKind) {
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -877,6 +877,25 @@
|
|||
// RUN: %clang -target arm-none-none-eabi -march=armv7-m -mfpu=softvfp -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SOFTVFP %s
|
||||
// CHECK-SOFTVFP-NOT: #define __ARM_FP 0x
|
||||
|
||||
// Test Armv8.1-M PACBTI
|
||||
// RUN: %clang -target arm-arm-none-eabi -march=armv8.1-m.main -x c -E -dM %s -o - | FileCheck --check-prefixes=CHECK-NOBTI,CHECK-NOPAC %s
|
||||
// RUN: %clang -target arm-arm-none-eabi -march=armv8.1-m.main -mbranch-protection=bti -x c -E -dM %s -o - | FileCheck --check-prefixes=CHECK-BTI,CHECK-NOPAC %s
|
||||
// RUN: %clang -target arm-arm-none-eabi -march=armv8.1-m.main -mbranch-protection=pac-ret -x c -E -dM %s -o - | FileCheck --check-prefixes=CHECK-PAC,CHECK-NOBTI %s
|
||||
// RUN: %clang -target arm-arm-none-eabi -march=armv8.1-m.main -mbranch-protection=pac-ret+b-key -x c -E -dM %s -o - | FileCheck --check-prefixes=CHECK-PAC-BKEY,CHECK-NOBTI %s
|
||||
// RUN: %clang -target arm-arm-none-eabi -march=armv8.1-m.main -mbranch-protection=pac-ret+leaf -x c -E -dM %s -o - | FileCheck --check-prefixes=CHECK-PAC-LEAF,CHECK-NOBTI %s
|
||||
// RUN: %clang -target arm-arm-none-eabi -march=armv8.1-m.main -mbranch-protection=pac-ret+b-key+leaf -x c -E -dM %s -o - | FileCheck --check-prefixes=CHECK-PAC-BKEY-LEAF,CHECK-NOBTI %s
|
||||
// RUN: %clang -target arm-arm-none-eabi -march=armv8.1-m.main -mbranch-protection=bti+pac-ret -x c -E -dM %s -o - | FileCheck --check-prefixes=CHECK-PAC,CHECK-BTI %s
|
||||
// RUN: %clang -target arm-arm-none-eabi -march=armv8.1-m.main -mbranch-protection=bti+pac-ret+b-key -x c -E -dM %s -o - | FileCheck --check-prefixes=CHECK-PAC-BKEY,CHECK-BTI %s
|
||||
// RUN: %clang -target arm-arm-none-eabi -march=armv8.1-m.main -mbranch-protection=bti+pac-ret+leaf -x c -E -dM %s -o - | FileCheck --check-prefixes=CHECK-PAC-LEAF,CHECK-BTI %s
|
||||
// RUN: %clang -target arm-arm-none-eabi -march=armv8.1-m.main -mbranch-protection=bti+pac-ret+b-key+leaf -x c -E -dM %s -o - | FileCheck --check-prefixes=CHECK-PAC-BKEY-LEAF,CHECK-BTI %s
|
||||
// CHECK-NOBTI-NOT: #define __ARM_FEATURE_BTI_DEFAULT
|
||||
// CHECK-NOPAC-NOT: #define __ARM_FEATURE_PAC_DEFAULT
|
||||
// CHECK-BTI: #define __ARM_FEATURE_BTI_DEFAULT 1
|
||||
// CHECK-PAC: #define __ARM_FEATURE_PAC_DEFAULT 1
|
||||
// CHECK-PAC-BKEY: #define __ARM_FEATURE_PAC_DEFAULT 2
|
||||
// CHECK-PAC-LEAF: #define __ARM_FEATURE_PAC_DEFAULT 5
|
||||
// CHECK-PAC-BKEY-LEAF: #define __ARM_FEATURE_PAC_DEFAULT 6
|
||||
|
||||
// ================== Check BFloat16 Extensions.
|
||||
// RUN: %clang -target arm-arm-none-eabi -march=armv8.6-a+bf16 -x c -E -dM %s -o - 2>&1 | FileCheck -check-prefix=CHECK-BFLOAT %s
|
||||
// CHECK-BFLOAT: #define __ARM_BF16_FORMAT_ALTERNATIVE 1
|
||||
|
|
Loading…
Reference in New Issue