public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/c++-coroutines] aarch64: Fix BTI support in libitm
@ 2020-07-09 19:59 Iain D Sandoe
  0 siblings, 0 replies; only message in thread
From: Iain D Sandoe @ 2020-07-09 19:59 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:319078dad62eba942d33c8975bdcbb09d1c68ba6

commit 319078dad62eba942d33c8975bdcbb09d1c68ba6
Author: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date:   Thu Jul 2 17:12:05 2020 +0100

    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.
    
    2020-07-09  Szabolcs Nagy  <szabolcs.nagy@arm.com>
    
    libitm/ChangeLog:
    
            * config/aarch64/sjlj.S: Add BTI marking and related definitions,
            and add BTI c to function entries.

Diff:
---
 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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-07-09 19:59 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-09 19:59 [gcc/devel/c++-coroutines] aarch64: Fix BTI support in libitm Iain D Sandoe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).