void-packages/srcpkgs/ghc/patches/no-atomic-64-on-32bit.patch
q66 8a027b98f7 ghc: initial patches for ppc64 elfv2
but ghc seems otherwise kinda broken on big endian, so we will
need more fixes...
2021-01-09 19:26:24 +01:00

58 lines
1.9 KiB
Diff

From 5c5aa87d50dc4ea97e76e13f285a7b5dd71fcd88 Mon Sep 17 00:00:00 2001
From: Ilias Tsitsimpis <iliastsi@debian.org>
Date: Sun, 1 Mar 2020 16:25:13 +0200
Subject: [PATCH] Do not define hs_atomic{read,write}64() on non-64bit
Do not define hs_atomicread64() and hs_atomicwrite64() on machines where
WORD_SIZE_IN_BITS is less than 64, just like we do with the rest of the atomic
functions which work on 64-bit values.
Without this, compilation fails on MIPSel and PowerPC with the following error:
/usr/bin/ld: /<<PKGBUILDDIR>>/libraries/ghc-prim/dist-install/build/libHSghc-prim-0.5.3_p.a(atomic.p_o): in function `hs_atomicread64':
atomic.c:(.text.hs_atomicread64+0x8): undefined reference to `__sync_add_and_fetch_8'
/usr/bin/ld: /<<PKGBUILDDIR>>/libraries/ghc-prim/dist-install/build/libHSghc-prim-0.5.3_p.a(atomic.p_o): in function `hs_atomicwrite64':
atomic.c:(.text.hs_atomicwrite64+0x38): undefined reference to `__sync_bool_compare_and_swap_8'
Fixes #17886.
---
libraries/ghc-prim/cbits/atomic.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/libraries/ghc-prim/cbits/atomic.c b/libraries/ghc-prim/cbits/atomic.c
index ac2e608ec2..01037d70ee 100644
--- a/libraries/ghc-prim/cbits/atomic.c
+++ b/libraries/ghc-prim/cbits/atomic.c
@@ -361,6 +361,7 @@ hs_atomicread32(StgWord x)
#endif
}
+#if WORD_SIZE_IN_BITS == 64
extern StgWord64 hs_atomicread64(StgWord x);
StgWord64
hs_atomicread64(StgWord x)
@@ -371,6 +372,7 @@ hs_atomicread64(StgWord x)
return __sync_add_and_fetch((StgWord64 *) x, 0);
#endif
}
+#endif
// AtomicWriteByteArrayOp_Int
// Implies a full memory barrier (see compiler/prelude/primops.txt.pp)
@@ -409,6 +411,7 @@ hs_atomicwrite32(StgWord x, StgWord val)
#endif
}
+#if WORD_SIZE_IN_BITS == 64
extern void hs_atomicwrite64(StgWord x, StgWord64 val);
void
hs_atomicwrite64(StgWord x, StgWord64 val)
@@ -420,3 +423,5 @@ hs_atomicwrite64(StgWord x, StgWord64 val)
#endif
}
#endif
+
+#endif
--
GitLab