aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorSzabolcs Nagy <szabolcs.nagy@arm.com>2020-07-16 16:26:10 +0100
committerSzabolcs Nagy <szabolcs.nagy@arm.com>2020-07-24 11:44:43 +0100
commitedfb3a30a6cef8e8c25197a7534628961233d772 (patch)
tree8b43aa7560a31dfbcaf101fd7a5072b09151b1c5 /libgcc
parentb0e5ec934e7a7473275326e2aee58eaf252cdff1 (diff)
downloadgcc-edfb3a30a6cef8e8c25197a7534628961233d772.zip
gcc-edfb3a30a6cef8e8c25197a7534628961233d772.tar.gz
gcc-edfb3a30a6cef8e8c25197a7534628961233d772.tar.bz2
aarch64: add PAC GNU property note to libgcc lse.S
This note is not used anywhere currently but it is supposed to mark objects if the return address is protected with PAC on the stack. Since lse.S only has leaf functions the return address is never saved on the stack so we can add the note. The note is only added if pac-ret is enabled because it can cause problems with old linkers and we don't have checks for that. This can be changed later to be unconditional, for now it is consistent with how gcc generates the notes. libgcc/ChangeLog: * config/aarch64/lse.S: Add PAC property note.
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/config/aarch64/lse.S17
1 files changed, 15 insertions, 2 deletions
diff --git a/libgcc/config/aarch64/lse.S b/libgcc/config/aarch64/lse.S
index 64691c6..aa3e3dc 100644
--- a/libgcc/config/aarch64/lse.S
+++ b/libgcc/config/aarch64/lse.S
@@ -283,6 +283,19 @@ ENDFN NAME(LDNM)
#define FEATURE_1_BTI 1
#define FEATURE_1_PAC 2
+/* Supported features based on the code generation options. */
+#if defined(__ARM_FEATURE_BTI_DEFAULT)
+# define BTI_FLAG FEATURE_1_BTI
+#else
+# define BTI_FLAG 0
+#endif
+
+#if __ARM_FEATURE_PAC_DEFAULT & 3
+# define PAC_FLAG FEATURE_1_PAC
+#else
+# define PAC_FLAG 0
+#endif
+
/* Add a NT_GNU_PROPERTY_TYPE_0 note. */
#define GNU_PROPERTY(type, value) \
.section .note.gnu.property, "a"; \
@@ -300,7 +313,7 @@ ENDFN NAME(LDNM)
.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)
+# if (BTI_FLAG|PAC_FLAG) != 0
+GNU_PROPERTY (FEATURE_1_AND, BTI_FLAG|PAC_FLAG)
# endif
#endif