[PATCH 06/12] aarch64: fix RTLD_START for BTI
Adhemerval Zanella
adhemerval.zanella@linaro.org
Thu May 7 18:49:49 GMT 2020
On 30/04/2020 14:42, Szabolcs Nagy wrote:
> From 1e8662264c07e69d807761882e8d77f0916ae562 Mon Sep 17 00:00:00 2001
> From: Szabolcs Nagy <szabolcs.nagy@arm.com>
> Date: Tue, 31 Mar 2020 17:32:14 +0100
> Subject: [PATCH 06/12] aarch64: fix RTLD_START for BTI
>
> Tailcalls must use x16 or x17 for the indirect branch instruction
> to be compatible with code that uses BTI c at function entries.
> (Other forms of indirect branches can only land on BTI j.)
>
> Also added a BTI c at the ELF entry point of rtld, this is not
> strictly necessary since the kernel does not use indirect branch
> to get there, but it seems safest once building glibc itself with
> BTI is supported.
LGTM, thanks.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> ---
> sysdeps/aarch64/dl-machine.h | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h
> index db3335e5ad..70b9ed3925 100644
> --- a/sysdeps/aarch64/dl-machine.h
> +++ b/sysdeps/aarch64/dl-machine.h
> @@ -125,6 +125,8 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
> .globl _dl_start_user \n\
> .type _dl_start_user, %function \n\
> _start: \n\
> + // bti c \n\
> + hint 34 \n\
This is the BTI_C defined at sysdeps/aarch64/sysdep.h, why can't you use
it here?
> mov " PTR "0, " PTR_SP " \n\
> bl _dl_start \n\
> // returns user entry point in x0 \n\
> @@ -178,7 +180,8 @@ _dl_start_user: \n\
> adrp x0, _dl_fini \n\
> add " PTR "0, " PTR "0, #:lo12:_dl_fini \n\
> // jump to the user_s entry point \n\
> - br x21 \n\
> + mov x16, x21 \n\
> + br x16 \n\
> ");
>
> #define elf_machine_type_class(type) \
> --
> 2.17.1
More information about the Libc-alpha
mailing list