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.  */

Reply via email to