8a027b98f7
but ghc seems otherwise kinda broken on big endian, so we will need more fixes...
58 lines
1.9 KiB
Diff
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
|
|
|