aboutsummaryrefslogtreecommitdiff
path: root/libphobos
diff options
context:
space:
mode:
authorIain Sandoe <iain@sandoe.co.uk>2023-07-02 11:14:08 +0100
committerIain Sandoe <iain@sandoe.co.uk>2023-07-02 15:20:04 +0100
commit6757bf86142a61c7b4ebabb713d17231e86e12f7 (patch)
treee78a8660e61d3c811f6fd8eac7727c7ad0f4fd6b /libphobos
parent2e06e39a12e5a79bdb72d3c146cc71292f875aed (diff)
downloadgcc-6757bf86142a61c7b4ebabb713d17231e86e12f7.zip
gcc-6757bf86142a61c7b4ebabb713d17231e86e12f7.tar.gz
gcc-6757bf86142a61c7b4ebabb713d17231e86e12f7.tar.bz2
libphobos: Handle Darwin Arm and AArch64 in fibre context asm.
This code currently fails to build because it contains ELF- specific directives. This patch excludes those directives when the platform is Darwin. We do not expect switching fibres between threads to be safe here either owing to the possible caching of TLS pointers. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> libphobos/ChangeLog: * libdruntime/config/aarch64/switchcontext.S: Exclude ELF- specific constructs for Darwin. * libdruntime/config/arm/switchcontext.S: Likewise. * libdruntime/core/thread/fiber.d: Disable switching fibres between threads.
Diffstat (limited to 'libphobos')
-rw-r--r--libphobos/libdruntime/config/aarch64/switchcontext.S9
-rw-r--r--libphobos/libdruntime/config/arm/switchcontext.S8
-rw-r--r--libphobos/libdruntime/core/thread/fiber.d1
3 files changed, 17 insertions, 1 deletions
diff --git a/libphobos/libdruntime/config/aarch64/switchcontext.S b/libphobos/libdruntime/config/aarch64/switchcontext.S
index 5cfa2f6..d3bd646 100644
--- a/libphobos/libdruntime/config/aarch64/switchcontext.S
+++ b/libphobos/libdruntime/config/aarch64/switchcontext.S
@@ -44,7 +44,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
*/
.text
.global CSYM(fiber_switchContext)
+#ifndef __APPLE__
.type CSYM(fiber_switchContext), %function
+#endif
.align 4
CSYM(fiber_switchContext):
.cfi_startproc
@@ -77,8 +79,9 @@ CSYM(fiber_switchContext):
ldp d15, d14, [sp], #20*8
ret
.cfi_endproc
+#ifndef __APPLE__
.size CSYM(fiber_switchContext),.-CSYM(fiber_switchContext)
-
+#endif
/**
* When generating any kind of backtrace (gdb, exception handling) for
* a function called in a Fiber, we need to tell the unwinder to stop
@@ -93,11 +96,15 @@ CSYM(fiber_switchContext):
.text
.global CSYM(fiber_trampoline)
.p2align 2
+#ifndef __APPLE__
.type CSYM(fiber_trampoline), %function
+#endif
CSYM(fiber_trampoline):
.cfi_startproc
.cfi_undefined x30
// fiber_entryPoint never returns
bl CSYM(fiber_entryPoint)
.cfi_endproc
+#ifndef __APPLE__
.size CSYM(fiber_trampoline),.-CSYM(fiber_trampoline)
+#endif
diff --git a/libphobos/libdruntime/config/arm/switchcontext.S b/libphobos/libdruntime/config/arm/switchcontext.S
index 3f9b35e..f1f2060 100644
--- a/libphobos/libdruntime/config/arm/switchcontext.S
+++ b/libphobos/libdruntime/config/arm/switchcontext.S
@@ -60,11 +60,15 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
*/
.text
+#ifndef __APPLE__
#if defined(__ARM_PCS_VFP) || (defined(__ARM_PCS) && !defined(__SOFTFP__))
.fpu vfp
#endif
.global CSYM(fiber_switchContext)
.type CSYM(fiber_switchContext), %function
+#else
+ .global CSYM(fiber_switchContext)
+#endif
.align 4
CSYM(fiber_switchContext):
.cfi_sections .debug_frame
@@ -111,8 +115,12 @@ CSYM(fiber_switchContext):
mov lr, #0
// return by writing lr into pc
mov pc, r1
+#ifndef __APPLE__
.fnend
.cfi_endproc
.size CSYM(fiber_switchContext),.-CSYM(fiber_switchContext)
+#else
+ .cfi_endproc
+#endif
#endif
diff --git a/libphobos/libdruntime/core/thread/fiber.d b/libphobos/libdruntime/core/thread/fiber.d
index 4590ff1..66fb9da 100644
--- a/libphobos/libdruntime/core/thread/fiber.d
+++ b/libphobos/libdruntime/core/thread/fiber.d
@@ -1785,6 +1785,7 @@ version (OSX)
{
version (X86) version = UnsafeFiberMigration;
version (X86_64) version = UnsafeFiberMigration;
+ version (AArch64) version = UnsafeFiberMigration;
}
version (UnsafeFiberMigration)