Re: [PATCH v2 1/2] arm64: Add macro version of the BTI instruction
From: Ard Biesheuvel <ardb@kernel.org>
Date: 2021-12-07 19:04:33
On Tue, 7 Dec 2021 at 19:02, Mark Brown [off-list ref] wrote:
quoted hunk ↗ jump to hunk
BTI is only available from v8.5 so we need to encode it using HINT in generic code and for older toolchains. Add an assembler macro written by Mark Rutland which lets us use the mnemonic and update the existing users. Suggested-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Mark Brown <broonie@kernel.org> --- arch/arm64/crypto/aes-modes.S | 10 +++++----- arch/arm64/include/asm/assembler.h | 18 ++++++++++++++++++ arch/arm64/include/asm/linkage.h | 7 +------ 3 files changed, 24 insertions(+), 11 deletions(-)diff --git a/arch/arm64/crypto/aes-modes.S b/arch/arm64/crypto/aes-modes.S index b495de22bb38..ff01f0167ba2 100644 --- a/arch/arm64/crypto/aes-modes.S +++ b/arch/arm64/crypto/aes-modes.S@@ -363,15 +363,15 @@ ST5( mov v4.16b, vctr.16b ) adr x16, 1f sub x16, x16, x12, lsl #3 br x16 - hint 34 // bti c + bti c mov v0.d[0], vctr.d[0] - hint 34 // bti c + bti c mov v1.d[0], vctr.d[0] - hint 34 // bti c + bti c mov v2.d[0], vctr.d[0] - hint 34 // bti c + bti c mov v3.d[0], vctr.d[0] -ST5( hint 34 ) +ST5( bti c ) ST5( mov v4.d[0], vctr.d[0] ) 1: b 2f .previousdiff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h index 136d13f3d6e9..87f296198366 100644 --- a/arch/arm64/include/asm/assembler.h +++ b/arch/arm64/include/asm/assembler.h@@ -790,6 +790,24 @@ alternative_endif .Lnoyield_\@: .endm +/* + * Branch Target Identifier (BTI) + */ + .macro bti, targets + .equ .L__bti_targets_c, 1 + .equ .L__bti_targets_j, 2 + .equ .L__bti_targets_jc,3
Can't we make these 34/36/38, respectively, and just do hint #.Lbti_targets_\targets here?
quoted hunk ↗ jump to hunk
+ .if .L__bti_targets_\targets == .L__bti_targets_c + hint #34 + .elseif .L__bti_targets_\targets == .L__bti_targets_j + hint #36 + .elseif .L__bti_targets_\targets == .L__bti_targets_jc + hint #38 + .else + .error "Unsupported BTI targets '\targets\()'" + .endif + .endm + /* * This macro emits a program property note section identifying * architecture features which require special handling, mainly fordiff --git a/arch/arm64/include/asm/linkage.h b/arch/arm64/include/asm/linkage.h index 9906541a6861..c5d0c11d7709 100644 --- a/arch/arm64/include/asm/linkage.h +++ b/arch/arm64/include/asm/linkage.h@@ -6,12 +6,7 @@ #if defined(CONFIG_ARM64_BTI_KERNEL) && defined(__aarch64__) -/* - * Since current versions of gas reject the BTI instruction unless we - * set the architecture version to v8.5 we use the hint instruction - * instead. - */ -#define BTI_C hint 34 ; +#define BTI_C bti c ; /* * When using in-kernel BTI we need to ensure that PCS-conformant assembly --2.30.2
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel