This is an automated email from the git hooks/post-receive script.
guix_mirror_bot pushed a commit to branch master
in repository guix.
The following commit(s) were added to refs/heads/master by this push:
new e96f14cb92 gnu: guile-3.0.11: Fix riscv64 jit.
e96f14cb92 is described below
commit e96f14cb92be8c729a4bdaeea233d1b25a40e76e
Author: Zheng Junjie <[email protected]>
AuthorDate: Thu Jul 9 10:04:27 2026 +0800
gnu: guile-3.0.11: Fix riscv64 jit.
* gnu/packages/patches/guile-3.0.11-fix-riscv64-jit.patch: New patch.
* gnu/local.mk (dist_patch_DATA): Register it.
* gnu/packages/guile.scm (guile-3.0.11)[source]: Use it.
Change-Id: I61b55c9758a0890b327cd9b849e454c8bf5301bd
---
gnu/local.mk | 1 +
gnu/packages/guile.scm | 3 +-
.../patches/guile-3.0.11-fix-riscv64-jit.patch | 93 ++++++++++++++++++++++
3 files changed, 96 insertions(+), 1 deletion(-)
diff --git a/gnu/local.mk b/gnu/local.mk
index ce3dd4e511..fe9364f3bd 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1557,6 +1557,7 @@ dist_patch_DATA =
\
%D%/packages/patches/guile-2.2-default-utf8.patch \
%D%/packages/patches/guile-relocatable.patch \
%D%/packages/patches/guile-3.0.11-cross-compilation.patch \
+ %D%/packages/patches/guile-3.0.11-fix-riscv64-jit.patch \
%D%/packages/patches/guile-3.0-relocatable.patch \
%D%/packages/patches/guile-linux-syscalls.patch \
%D%/packages/patches/guile-3.0-linux-syscalls.patch \
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index ca7bfc1673..9f80793220 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -488,7 +488,8 @@ without requiring the source code to be rewritten.")
(uri (string-append "mirror://gnu/guile/guile-" version ".tar.xz"))
(sha256
(base32 "0q4laxcraxh3r9s62p6nw3g3n6xlqxy16r5kdylpyyk56v97k341"))
- (patches (search-patches "guile-3.0.11-cross-compilation.patch"))
+ (patches (search-patches "guile-3.0.11-cross-compilation.patch"
+ "guile-3.0.11-fix-riscv64-jit.patch"))
;; Replace the snippet because the oom-test still fails on some 32-bit
;; architectures.
(snippet '(for-each delete-file
diff --git a/gnu/packages/patches/guile-3.0.11-fix-riscv64-jit.patch
b/gnu/packages/patches/guile-3.0.11-fix-riscv64-jit.patch
new file mode 100644
index 0000000000..5ca7ff241c
--- /dev/null
+++ b/gnu/packages/patches/guile-3.0.11-fix-riscv64-jit.patch
@@ -0,0 +1,93 @@
+git format-patch
6c2cd1832534f9701cfe7ad08749d87cb3734d25..79f40b1062520e019f0121b67e3dda2fe5311c63
--stdout --src-prefix=a/libguile/lightening/
--dst-prefix=b/libguile/lightening/
+
+From 27270d0136fdf0d39e1d765d9d168a2c9768b234 Mon Sep 17 00:00:00 2001
+From: Ekaitz Zarraga <[email protected]>
+Date: Wed, 25 Mar 2026 14:34:50 +0100
+Subject: [PATCH 1/2] riscv: Fix word sizes in load and store atomic.
+
+* lightening/riscv-cpu.c (ldr_atomic, str_atomic): Add ifdef for 64
+bits.
+(str_i): Rename duplicated prototype to `str_l`.
+---
+ lightening/riscv-cpu.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/libguile/lightening/lightening/riscv-cpu.c
b/libguile/lightening/lightening/riscv-cpu.c
+index 101f7395b..a11429438 100644
+--- a/libguile/lightening/lightening/riscv-cpu.c
++++ b/libguile/lightening/lightening/riscv-cpu.c
+@@ -528,7 +528,7 @@ static void str_uc(jit_state_t *_jit, int32_t r0, int32_t
r1);
+ static void str_s(jit_state_t *_jit, int32_t r0, int32_t r1);
+ static void str_i(jit_state_t *_jit, int32_t r0, int32_t r1);
+ #if __WORDSIZE == 64
+-static void str_i(jit_state_t *_jit, int32_t r0, int32_t r1);
++static void str_l(jit_state_t *_jit, int32_t r0, int32_t r1);
+ #endif
+
+ static void sti_c(jit_state_t *_jit, jit_word_t i0, int32_t r0);
+@@ -2352,7 +2352,11 @@ static void
+ ldr_atomic(jit_state_t *_jit, int32_t dst, int32_t loc)
+ {
+ em_wp(_jit, _FENCE(0xFF));
++#if __WORDSIZE == 64
++ ldr_l(_jit, dst, loc);
++#elif __WORDSIZE == 32
+ ldr_i(_jit, dst, loc);
++#endif
+ em_wp(_jit, _FENCE(0xFF));
+ }
+
+@@ -2360,7 +2364,11 @@ static void
+ str_atomic(jit_state_t *_jit, int32_t loc, int32_t val)
+ {
+ em_wp(_jit, _FENCE(0xFF));
++#if __WORDSIZE == 64
++ str_l(_jit, loc, val);
++#elif __WORDSIZE == 32
+ str_i(_jit, loc, val);
++#endif
+ em_wp(_jit, _FENCE(0xFF));
+ }
+
+--
+2.54.0
+
+
+From 79f40b1062520e019f0121b67e3dda2fe5311c63 Mon Sep 17 00:00:00 2001
+From: Ekaitz Zarraga <[email protected]>
+Date: Wed, 25 Mar 2026 14:37:56 +0100
+Subject: [PATCH 2/2] riscv: Fix cas_atomic.
+
+* lightening/riscv-cpu.c (cas_atomic): Add fence. Fix argument order in
+store conditional.
+---
+ lightening/riscv-cpu.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/libguile/lightening/lightening/riscv-cpu.c
b/libguile/lightening/lightening/riscv-cpu.c
+index a11429438..4df0304cf 100644
+--- a/libguile/lightening/lightening/riscv-cpu.c
++++ b/libguile/lightening/lightening/riscv-cpu.c
+@@ -2391,6 +2391,7 @@ cas_atomic(jit_state_t *_jit, int32_t dst, int32_t loc,
int32_t expected,
+
+ void *retry = jit_address(_jit);
+
++ em_wp(_jit, _FENCE(0xFF));
+ #if __WORDSIZE == 64
+ em_wp(_jit, _LR_D(t0, loc, 0,0));
+ #elif __WORDSIZE == 32
+@@ -2400,9 +2401,9 @@ cas_atomic(jit_state_t *_jit, int32_t dst, int32_t loc,
int32_t expected,
+ jit_reloc_t fail = bner(_jit, t0, expected);
+
+ #if __WORDSIZE == 64
+- em_wp(_jit, _SC_D(t1, desired, loc, 0,0));
++ em_wp(_jit, _SC_D(t1, loc, desired, 0,0));
+ #elif __WORDSIZE == 32
+- em_wp(_jit, _SC_W(t1, desired, loc, 0,0));
++ em_wp(_jit, _SC_W(t1, loc, desired, 0,0));
+ #endif
+
+ jit_patch_there(_jit, bner(_jit, t1, jit_gpr_regno(_ZERO)), retry);
+--
+2.54.0
+