[PATCH v2 1/2] arm64: Add macro version of the BTI instruction
Ard Biesheuvel
ardb at kernel.org
Tue Dec 7 11:02:16 PST 2021
On Tue, 7 Dec 2021 at 19:02, Mark Brown <broonie at kernel.org> wrote:
>
> 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 at arm.com>
> Signed-off-by: Mark Brown <broonie at 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
> .previous
> diff --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?
> + .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 for
> diff --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
>
More information about the linux-arm-kernel
mailing list