Message ID | 20200723162337.10248-1-szabolcs.nagy@arm.com |
---|---|
State | New |
Headers | show |
Series | [1/2] aarch64: add PAC GNU property note to libgcc lse.S | expand |
Hi Szabolcs, > -----Original Message----- > From: Szabolcs Nagy <Szabolcs.Nagy@arm.com> > Sent: 23 July 2020 17:24 > To: gcc-patches@gcc.gnu.org > Cc: Kyrylo Tkachov <Kyrylo.Tkachov@arm.com> > Subject: [PATCH 1/2] 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. > Ok. Thanks, Kyrill > libgcc/ChangeLog: > > * config/aarch64/lse.S: Add PAC property note. > --- > libgcc/config/aarch64/lse.S | 17 +++++++++++++++-- > 1 file changed, 15 insertions(+), 2 deletions(-) > > diff --git a/libgcc/config/aarch64/lse.S b/libgcc/config/aarch64/lse.S > index 64691c601c1..aa3e3dc4f2d 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 > -- > 2.17.1
diff --git a/libgcc/config/aarch64/lse.S b/libgcc/config/aarch64/lse.S index 64691c601c1..aa3e3dc4f2d 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