[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