59 lines
1.9 KiB
Diff
59 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
|
|
|