Radek Barton <radek.bar...@microsoft.com> writes: > Hello. > > I forgot to add the target maintainers to the CC. My apologies for that. > > Furthermore, I am adding also relevant changes in > `libgcc/config/aarch64/lse.S` file to the patch. Originally we wanted to > submit those changes separately but after the feedback from Andrew Pinski, it > makes sense to add them here. I needed to rename `HIDDEN`, `TYPE`, and `SIZE` > macros to `HIDDEN_PO`, `TYPE_PO`, and `SIZE_PO` (pseudo-op) because there is > a collision with other macro named `SIZE` in the `lse.S` file.
How about avoiding the clash by using the names HIDDEN, SYMBOL_TYPE and SYMBOL_SIZE, with SYMBOL_TYPE taking the symbol type as argument? What's the practical effect of not marking the symbols as hidden on mingw32? Will they still be local to the DLL/EXE, since they haven't been explicitly exported? (Sorry for the probably dumb question.) SME support for mingw32 will be limited until __aarch64_have_sme.c is ported to Windows. Until then, __aarch64_have_sme will just reflect the --with-cpu/arch default. But that obviously doesn't need to be fixed at the same time, just saying for the record. Thanks, Richard > > Best regards, > > Radek > > From eb30feb218f122db8d8d8970e7e1d6d1514ab6c4 Mon Sep 17 00:00:00 2001 > In-Reply-To: > <pr3pr83mb0459cd0b388ec092d67dcf9e92...@pr3pr83mb0459.eurprd83.prod.outlook.com> > References: > <pr3pr83mb0459cd0b388ec092d67dcf9e92...@pr3pr83mb0459.eurprd83.prod.outlook.com> > From: Zac Walker <zacwal...@microsoft.com> > Date: Wed, 3 Jan 2024 20:21:04 +0100 > Subject: [PATCH v3] Ifdef `.hidden`, `.type`, and `.size` pseudo-ops for > `aarch64-w64-mingw32` target > Cc: Andrew Pinski <pins...@gmail.com>, > Richard Sandiford <richard.sandif...@arm.com>, > Jonathan Yong <10wa...@gmail.com> > > Recent change > (https://gcc.gnu.org/pipermail/gcc-cvs/2023-December/394915.html) added a > generic SME support using `.hidden`, `.type`, and ``.size` pseudo-ops in the > assembly sources, `aarch64-w64-mingw32` does not support the pseudo-ops > though. This patch wraps usage of those pseudo-ops using macros and ifdefs > them for `__ELF__` define. > --- > libgcc/config/aarch64/__arm_sme_state.S | 2 +- > libgcc/config/aarch64/__arm_tpidr2_save.S | 4 ++-- > libgcc/config/aarch64/__arm_za_disable.S | 6 +++--- > libgcc/config/aarch64/aarch64-asm.h | 14 ++++++++++++-- > libgcc/config/aarch64/crti.S | 12 ++++-------- > libgcc/config/aarch64/lse.S | 9 +++++---- > 6 files changed, 27 insertions(+), 20 deletions(-) > > diff --git a/libgcc/config/aarch64/__arm_sme_state.S > b/libgcc/config/aarch64/__arm_sme_state.S > index 0da9b585b6c..8658da5dfa7 100644 > --- a/libgcc/config/aarch64/__arm_sme_state.S > +++ b/libgcc/config/aarch64/__arm_sme_state.S > @@ -30,7 +30,7 @@ > - Takes no argument. > - Returns SME state in x0 and TPIDR2_EL0 in x1. */ > > -.hidden __aarch64_have_sme > +HIDDEN_PO (__aarch64_have_sme) > > variant_pcs (__arm_sme_state) > > diff --git a/libgcc/config/aarch64/__arm_tpidr2_save.S > b/libgcc/config/aarch64/__arm_tpidr2_save.S > index 9135cba1ddb..739694ed189 100644 > --- a/libgcc/config/aarch64/__arm_tpidr2_save.S > +++ b/libgcc/config/aarch64/__arm_tpidr2_save.S > @@ -31,7 +31,7 @@ > - Does not return a value. > - Can abort on failure (then registers are not preserved). */ > > -.hidden __aarch64_have_sme > +HIDDEN_PO (__aarch64_have_sme) > > variant_pcs (__arm_tpidr2_save) > > @@ -97,5 +97,5 @@ END (__arm_tpidr2_save) > > /* Hidden alias used by __arm_za_disable. */ > .global __libgcc_arm_tpidr2_save > -.hidden __libgcc_arm_tpidr2_save > +HIDDEN_PO (__libgcc_arm_tpidr2_save) > .set __libgcc_arm_tpidr2_save, __arm_tpidr2_save > diff --git a/libgcc/config/aarch64/__arm_za_disable.S > b/libgcc/config/aarch64/__arm_za_disable.S > index 5785a959e22..95eae3ea958 100644 > --- a/libgcc/config/aarch64/__arm_za_disable.S > +++ b/libgcc/config/aarch64/__arm_za_disable.S > @@ -31,9 +31,9 @@ > - Does not return a value. > - Can abort on failure (then registers are not preserved). */ > > -.hidden __aarch64_have_sme > +HIDDEN_PO (__aarch64_have_sme) > > -.hidden __libgcc_arm_tpidr2_save > +HIDDEN_PO (__libgcc_arm_tpidr2_save) > > variant_pcs (__arm_za_disable) > > @@ -66,5 +66,5 @@ END (__arm_za_disable) > > /* Hidden alias used by the unwinder. */ > .global __libgcc_arm_za_disable > -.hidden __libgcc_arm_za_disable > +HIDDEN_PO (__libgcc_arm_za_disable) > .set __libgcc_arm_za_disable, __arm_za_disable > diff --git a/libgcc/config/aarch64/aarch64-asm.h > b/libgcc/config/aarch64/aarch64-asm.h > index 24568429b5c..dbb81b4be6b 100644 > --- a/libgcc/config/aarch64/aarch64-asm.h > +++ b/libgcc/config/aarch64/aarch64-asm.h > @@ -58,6 +58,16 @@ > # define AUTIASP > #endif > > +#ifdef __ELF__ > +#define TYPE_PO(x) .type x,function > +#define HIDDEN_PO(x) .hidden x > +#define SIZE_PO(x) .size x, .-x > +#else > +#define TYPE_PO(x) > +#define HIDDEN_PO(x) > +#define SIZE_PO(x) > +#endif > + > /* Add a NT_GNU_PROPERTY_TYPE_0 note. */ > #define GNU_PROPERTY(type, value) \ > .section .note.gnu.property, "a"; \ > @@ -85,7 +95,7 @@ GNU_PROPERTY (FEATURE_1_AND, BTI_FLAG|PAC_FLAG) > > #define ENTRY_ALIGN(name, align) \ > .global name; \ > - .type name,%function; \ > + TYPE_PO(name); \ > .balign align; \ > name: \ > .cfi_startproc; \ > @@ -95,4 +105,4 @@ GNU_PROPERTY (FEATURE_1_AND, BTI_FLAG|PAC_FLAG) > > #define END(name) \ > .cfi_endproc; \ > - .size name, .-name > + SIZE_PO(name) > diff --git a/libgcc/config/aarch64/crti.S b/libgcc/config/aarch64/crti.S > index 1371967c196..ed87a2ad696 100644 > --- a/libgcc/config/aarch64/crti.S > +++ b/libgcc/config/aarch64/crti.S > @@ -21,6 +21,8 @@ > # see the files COPYING3 and COPYING.RUNTIME respectively. If not, see > # <http://www.gnu.org/licenses/>. > > +#include "aarch64-asm.h" > + > /* An executable stack is *not* required for these functions. */ > #if defined(__ELF__) && defined(__linux__) > .section .note.GNU-stack,"",%progbits > @@ -31,12 +33,6 @@ > # .init sections. Users may put any desired instructions in those > # sections. > > -#ifdef __ELF__ > -#define TYPE(x) .type x,function > -#else > -#define TYPE(x) > -#endif > - > # Note - this macro is complemented by the FUNC_END macro > # in crtn.S. If you change this macro you must also change > # that macro match. > @@ -53,7 +49,7 @@ > .section ".init" > .align 2 > .global _init > - TYPE(_init) > + TYPE_PO(_init) > _init: > FUNC_START > > @@ -61,7 +57,7 @@ _init: > .section ".fini" > .align 2 > .global _fini > - TYPE(_fini) > + TYPE_PO(_fini) > _fini: > FUNC_START > > diff --git a/libgcc/config/aarch64/lse.S b/libgcc/config/aarch64/lse.S > index 671a86cfb87..af55ef88098 100644 > --- a/libgcc/config/aarch64/lse.S > +++ b/libgcc/config/aarch64/lse.S > @@ -51,6 +51,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. > If not, see > * indirectly, they do not need to start with a BTI instruction. > */ > > +#include "aarch64-asm.h" > #include "auto-target.h" > > /* Tell the assembler to accept LSE instructions. */ > @@ -61,7 +62,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. > If not, see > #endif > > /* Declare the symbol gating the LSE implementations. */ > - .hidden __aarch64_have_lse_atomics > + HIDDEN_PO(__aarch64_have_lse_atomics) > > /* Turn size and memory model defines into mnemonic fragments. */ > #if SIZE == 1 > @@ -171,15 +172,15 @@ see the files COPYING3 and COPYING.RUNTIME > respectively. If not, see > .text > .balign 16 > .globl \name > - .hidden \name > - .type \name, %function > + HIDDEN_PO(\name) > + TYPE_PO(\name) > .cfi_startproc > \name: > .endm > > .macro ENDFN name > .cfi_endproc > - .size \name, . - \name > + SIZE_PO(\name) > .endm > > /* Branch to LABEL if LSE is disabled. */