> -----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 6/6] aarch64: Fix BTI support in libitm
> 
> sjlj.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 libitm is built with branch
> protection, because old linkers mishandle the note (merge
> them incorrectly or emit warnings), the BTI instructions
> are added unconditionally.
> 
> libitm/ChangeLog:
> 
> 2020-07-08  Szabolcs Nagy  <szabolcs.n...@arm.com>
> 
>       * config/aarch64/sjlj.S: Add BTI marking and related definitions,
>       and add BTI c to function entries.
> 
> ---
> Note: there is some redundancy: the libgcc fixup patch needed
> the same macro definitions, but i did not find a convenient
> place from where both libgcc and libitm can include them. Since
> this is a common problem i expect a change in the assembler
> that will be able to add the note without doing this manually,
> until then i think we can live with the code duplication.

Ok.
Thanks,
Kyrill

> ---
>  libitm/config/aarch64/sjlj.S | 27 +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
> 
> diff --git a/libitm/config/aarch64/sjlj.S b/libitm/config/aarch64/sjlj.S
> index 5b97b973e27..e2093ca1a97 100644
> --- a/libitm/config/aarch64/sjlj.S
> +++ b/libitm/config/aarch64/sjlj.S
> @@ -24,6 +24,8 @@
> 
>  #include "asmcfi.h"
> 
> +#define BTI_C        hint    34
> +
>       .text
>       .align  2
>       .global _ITM_beginTransaction
> @@ -31,6 +33,7 @@
> 
>  _ITM_beginTransaction:
>       cfi_startproc
> +     BTI_C
>       mov     x1, sp
>       stp     x29, x30, [sp, -11*16]!
>       cfi_adjust_cfa_offset(11*16)
> @@ -70,6 +73,7 @@ GTM_longjmp:
>       /* The first parameter becomes the return value (x0).
>          The third parameter is ignored for now.  */
>       cfi_startproc
> +     BTI_C
>       ldp     x19, x20, [x1, 1*16]
>       ldp     x21, x22, [x1, 2*16]
>       ldp     x23, x24, [x1, 3*16]
> @@ -87,6 +91,29 @@ GTM_longjmp:
>       cfi_endproc
>       .size   GTM_longjmp, . - GTM_longjmp
> 
> +/* 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