Ifdef .hidden
, .type
, and .size
pseudo-ops for aarch64-w64-mingw32
target
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/aarch64-asm.h (HIDDEN, SYMBOL_SIZE, SYMBOL_TYPE) (ENTRY_ALIGN, GNU_PROPERTY): New macros. * config/aarch64/__arm_sme_state.S: Use them. * config/aarch64/__arm_tpidr2_save.S: Likewise. * config/aarch64/__arm_za_disable.S: Likewise. * config/aarch64/crti.S: Likewise. * config/aarch64/lse.S: Likewise.
This commit is contained in:
parent
3936c8709c
commit
c608ada288
6 changed files with 27 additions and 20 deletions
|
@ -30,7 +30,7 @@
|
|||
- Takes no argument.
|
||||
- Returns SME state in x0 and TPIDR2_EL0 in x1. */
|
||||
|
||||
.hidden __aarch64_have_sme
|
||||
HIDDEN (__aarch64_have_sme)
|
||||
|
||||
variant_pcs (__arm_sme_state)
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
- Does not return a value.
|
||||
- Can abort on failure (then registers are not preserved). */
|
||||
|
||||
.hidden __aarch64_have_sme
|
||||
HIDDEN (__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 (__libgcc_arm_tpidr2_save)
|
||||
.set __libgcc_arm_tpidr2_save, __arm_tpidr2_save
|
||||
|
|
|
@ -31,9 +31,9 @@
|
|||
- Does not return a value.
|
||||
- Can abort on failure (then registers are not preserved). */
|
||||
|
||||
.hidden __aarch64_have_sme
|
||||
HIDDEN (__aarch64_have_sme)
|
||||
|
||||
.hidden __libgcc_arm_tpidr2_save
|
||||
HIDDEN (__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 (__libgcc_arm_za_disable)
|
||||
.set __libgcc_arm_za_disable, __arm_za_disable
|
||||
|
|
|
@ -58,6 +58,16 @@
|
|||
# define AUTIASP
|
||||
#endif
|
||||
|
||||
#ifdef __ELF__
|
||||
#define HIDDEN(name) .hidden name
|
||||
#define SYMBOL_SIZE(name) .size name, .-name
|
||||
#define SYMBOL_TYPE(name, _type) .type name, _type
|
||||
#else
|
||||
#define HIDDEN(name)
|
||||
#define SYMBOL_SIZE(name)
|
||||
#define SYMBOL_TYPE(name, _type)
|
||||
#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; \
|
||||
SYMBOL_TYPE(name, %function); \
|
||||
.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
|
||||
SYMBOL_SIZE(name)
|
||||
|
|
|
@ -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)
|
||||
SYMBOL_TYPE(_init, function)
|
||||
_init:
|
||||
FUNC_START
|
||||
|
||||
|
@ -61,7 +57,7 @@ _init:
|
|||
.section ".fini"
|
||||
.align 2
|
||||
.global _fini
|
||||
TYPE(_fini)
|
||||
SYMBOL_TYPE(_fini, function)
|
||||
_fini:
|
||||
FUNC_START
|
||||
|
||||
|
|
|
@ -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(__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(\name)
|
||||
SYMBOL_TYPE(\name, %function)
|
||||
.cfi_startproc
|
||||
\name:
|
||||
.endm
|
||||
|
||||
.macro ENDFN name
|
||||
.cfi_endproc
|
||||
.size \name, . - \name
|
||||
SYMBOL_SIZE(\name)
|
||||
.endm
|
||||
|
||||
/* Branch to LABEL if LSE is disabled. */
|
||||
|
|
Loading…
Add table
Reference in a new issue