No atomics on arm32; this will just yield stubs.
authorMoritz Angermann <moritz.angermann@gmail.com>
Wed, 22 May 2019 03:19:41 +0000 (11:19 +0800)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Tue, 2 Jul 2019 20:18:05 +0000 (16:18 -0400)
As such the internal linker will fail for them.  The alternative
would be to implement them as stubs in the linker and have them
barf when called.

> Not all operations are supported by all target processors. If a
  particular operation cannot be implemented on the target processor,
  a warning is generated and a call an external function is
  generated. The external function carries the same name as the
  built-in version, with an additional suffix ā€˜_nā€™ where n is the size
  of the data type.

(https://gcc.gnu.org/onlinedocs/gcc/_005f_005fsync-Builtins.html)

libraries/ghc-prim/cbits/atomic.c

index a7d7544..ac2e608 100644 (file)
@@ -1,3 +1,4 @@
+#if !defined(arm_HOST_ARCH)
 #include "Rts.h"
 
 // Fallbacks for atomic primops on byte arrays. The builtins used
@@ -418,3 +419,4 @@ hs_atomicwrite64(StgWord x, StgWord64 val)
   while (!__sync_bool_compare_and_swap((StgWord64 *) x, *(StgWord64 *) x, (StgWord64) val));
 #endif
 }
+#endif