fix-hs_cmpxchg64
authorDebian Haskell Group <pkg-haskell-maintainers@lists.alioth.debian.org>
Wed, 10 Apr 2024 11:24:01 +0000 (14:24 +0300)
committerIlias Tsitsimpis <iliastsi@debian.org>
Wed, 10 Apr 2024 11:24:01 +0000 (14:24 +0300)
commit 9fa545722f9151781344446dd5501db38cb90dd1
Author: Cheng Shao <terrorjack@type.dance>
Date:   Mon Feb 27 19:11:27 2023 +0000

    ghc-prim: fix hs_cmpxchg64 function prototype

    hs_cmpxchg64 must return a StgWord64, otherwise incorrect runtime
    results of 64-bit MO_Cmpxchg will appear in 32-bit unregisterised
    builds, which go unnoticed at compile-time due to C implicit casting
    in .hc files.

Gbp-Pq: Name fix-hs_cmpxchg64

libraries/ghc-prim/cbits/atomic.c
rts/include/stg/Prim.h

index 2ac6d26e1fe7a3d500c56906077ab4cf388d4e98..c15c596ddd2f30acd244877acc4b9080bb6653eb 100644 (file)
@@ -308,8 +308,8 @@ hs_cmpxchg32(StgWord x, StgWord old, StgWord new)
   return __sync_val_compare_and_swap((volatile StgWord32 *) x, (StgWord32) old, (StgWord32) new);
 }
 
-extern StgWord hs_cmpxchg64(StgWord x, StgWord64 old, StgWord64 new);
-StgWord
+extern StgWord64 hs_cmpxchg64(StgWord x, StgWord64 old, StgWord64 new);
+StgWord64
 hs_cmpxchg64(StgWord x, StgWord64 old, StgWord64 new)
 {
   return __sync_val_compare_and_swap((volatile StgWord64 *) x, old, new);
index 9a04a4eabaf4efde05501e2f33358868f39706d7..9e5752584a21e57ca865218769a5429168a1dbed 100644 (file)
@@ -41,7 +41,7 @@ StgWord64 hs_atomic_xor64(StgWord x, StgWord64 val);
 StgWord hs_cmpxchg8(StgWord x, StgWord old, StgWord new_);
 StgWord hs_cmpxchg16(StgWord x, StgWord old, StgWord new_);
 StgWord hs_cmpxchg32(StgWord x, StgWord old, StgWord new_);
-StgWord hs_cmpxchg64(StgWord x, StgWord64 old, StgWord64 new_);
+StgWord64 hs_cmpxchg64(StgWord x, StgWord64 old, StgWord64 new_);
 StgWord hs_atomicread8(StgWord x);
 StgWord hs_atomicread16(StgWord x);
 StgWord hs_atomicread32(StgWord x);