> -----Original Message-----
> From: Szabolcs Nagy <szabolcs.n...@arm.com>
> Sent: 08 July 2020 17:28
> To: gcc-patches@gcc.gnu.org
> Cc: Richard Earnshaw <richard.earns...@arm.com>; Kyrylo Tkachov
> <kyrylo.tkac...@arm.com>
> Subject: [PATCH 5/6] aarch64: Fix BTI support in libgcc
> 
> lse.S did not have the GNU property note markup and the BTI c
> instructions that are necessary when it is built with branch
> protection.
> 
> The notes are only added when libgcc is built with branch
> protection, because old linkers mishandle the note (merge
> them incorrectly or emit warnings), the BTI instructions
> are added unconditionally.
> 
> Note: BTI c is only necessary at function entry if the function
> may be called indirectly, currently lse functions are not called
> indirectly, but BTI is added for ABI reasons e.g. to allow
> linkers later to emit stub code with indirect jump.
> 

Ok.
Thanks,
Kyrill

> libgcc/ChangeLog:
> 
> 2020-07-08  Szabolcs Nagy  <szabolcs.n...@arm.com>
> 
>       * config/aarch64/lse.S: Add BTI marking and related definitions,
>       and add BTI c to function entries.
> ---
>  libgcc/config/aarch64/lse.S | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/libgcc/config/aarch64/lse.S b/libgcc/config/aarch64/lse.S
> index 9e2acae806b..64691c601c1 100644
> --- a/libgcc/config/aarch64/lse.S
> +++ b/libgcc/config/aarch64/lse.S
> @@ -136,6 +136,8 @@ see the files COPYING3 and COPYING.RUNTIME
> respectively.  If not, see
>  #define tmp1 17
>  #define tmp2 15
> 
> +#define BTI_C        hint    34
> +
>  /* Start and end a function.  */
>  .macro       STARTFN name
>       .text
> @@ -145,6 +147,7 @@ see the files COPYING3 and COPYING.RUNTIME
> respectively.  If not, see
>       .type   \name, %function
>       .cfi_startproc
>  \name:
> +     BTI_C
>  .endm
> 
>  .macro       ENDFN name
> @@ -275,6 +278,29 @@ STARTFN  NAME(LDNM)
>  ENDFN        NAME(LDNM)
>  #endif
> 
> +/* GNU_PROPERTY_AARCH64_* macros from elf.h for use in asm code.  */
> +#define FEATURE_1_AND 0xc0000000
> +#define FEATURE_1_BTI 1
> +#define FEATURE_1_PAC 2
> +
> +/* Add a NT_GNU_PROPERTY_TYPE_0 note.  */
> +#define GNU_PROPERTY(type, value)    \
> +  .section .note.gnu.property, "a";  \
> +  .p2align 3;                                \
> +  .word 4;                           \
> +  .word 16;                          \
> +  .word 5;                           \
> +  .asciz "GNU";                              \
> +  .word type;                                \
> +  .word 4;                           \
> +  .word value;                               \
> +  .word 0;
> +
>  #if defined(__linux__) || defined(__FreeBSD__)
>  .section .note.GNU-stack, "", %progbits
> +
> +/* Add GNU property note if built with branch protection.  */
> +# ifdef __ARM_FEATURE_BTI_DEFAULT
> +GNU_PROPERTY (FEATURE_1_AND, FEATURE_1_BTI)
> +# endif
>  #endif
> --
> 2.17.1

Reply via email to