* gnu/packages/patches/sbcl-riscv-Make-contribs-build-again.patch: New file. * gnu/local.mk(dist_patch_DATA): register it. * gnu/packages/lisp.scm (sbcl): [source]<patches>: Use it here.
		
			
				
	
	
		
			71 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 8704f528f227f587d0e06dfd2f807aeca7a69a71 Mon Sep 17 00:00:00 2001
 | 
						|
From: Charles Zhang <charleszhang99@yahoo.com>
 | 
						|
Date: Thu, 1 Jun 2023 16:39:26 +0200
 | 
						|
Subject: [PATCH] riscv: Make contribs build again.
 | 
						|
 | 
						|
The issue was that the LINKAGE_TEMP_REG being NL3 was a C argument
 | 
						|
register, so of course that caused clashing on C call-out, causing
 | 
						|
problems with run-program. Going back to NL7 didn't work either
 | 
						|
because it wasn't getting saved before entry into the trampoline. The
 | 
						|
code here used to have NL7 before the trampoline code was gutted and
 | 
						|
then restored, so I'm wondering how this ever worked before, because
 | 
						|
it definitely did. Pick LIP as the TEMP_REG now because not only does
 | 
						|
it get saved, it's also the least likely thing to get disturbed by
 | 
						|
clobbering.
 | 
						|
 | 
						|
Fixes #lp2002930.
 | 
						|
 | 
						|
Also remove assembly routine printing because it doesn't need to be
 | 
						|
part of the build script (unlike the other files in output/ which
 | 
						|
can't trivially be recovered from a built image), and because not all
 | 
						|
disassembler printers have been written on riscv yet.
 | 
						|
---
 | 
						|
 NEWS                     | 3 +++
 | 
						|
 make-target-2-load.lisp  | 4 ----
 | 
						|
 src/runtime/riscv-arch.c | 2 +-
 | 
						|
 3 files changed, 4 insertions(+), 5 deletions(-)
 | 
						|
 | 
						|
diff --git a/NEWS b/NEWS
 | 
						|
index 17537ff92..5c0f7777b 100644
 | 
						|
--- a/NEWS
 | 
						|
+++ b/NEWS
 | 
						|
@@ -1,5 +1,8 @@
 | 
						|
 ;;;; -*- coding: utf-8; fill-column: 78 -*-
 | 
						|
 
 | 
						|
+changes relative to sbcl-2.3.5:
 | 
						|
+  * bug fix: riscv can build contribs again.
 | 
						|
+
 | 
						|
 changes in sbcl-2.3.5 relative to sbcl-2.3.4:
 | 
						|
   * enhancement: Unicode support has been updated to support version 15.0.0 of
 | 
						|
     the Unicode standard, including addition of characters and their collation
 | 
						|
diff --git a/make-target-2-load.lisp b/make-target-2-load.lisp
 | 
						|
index 885ebda74..b9a1a1e36 100644
 | 
						|
--- a/make-target-2-load.lisp
 | 
						|
+++ b/make-target-2-load.lisp
 | 
						|
@@ -6,10 +6,6 @@
 | 
						|
 (defvar *compile-files-p* nil)
 | 
						|
 (load (merge-pathnames "src/cold/warm.lisp" *load-pathname*))
 | 
						|
 
 | 
						|
-(with-open-file (stream "output/asm-routines.txt" :direction :output
 | 
						|
-                        :if-does-not-exist :create :if-exists :supersede)
 | 
						|
-  (sb-c:dis sb-fasl:*assembler-routines* stream))
 | 
						|
-
 | 
						|
 ;; sb-xref-for-internals is actively harmful to tree-shaking.
 | 
						|
 ;; Remove some symbols to make the hide-packages test pass.
 | 
						|
 #+sb-xref-for-internals
 | 
						|
diff --git a/src/runtime/riscv-arch.c b/src/runtime/riscv-arch.c
 | 
						|
index 6c1994829..062623899 100644
 | 
						|
--- a/src/runtime/riscv-arch.c
 | 
						|
+++ b/src/runtime/riscv-arch.c
 | 
						|
@@ -159,7 +159,7 @@ arch_install_interrupt_handlers(void)
 | 
						|
  * Linkage entry size is 8 or 20, because we need 2 instructions for the 32-bit case and we need 3 instructions and an 8 byte address in the 64-bit case.
 | 
						|
  */
 | 
						|
 
 | 
						|
-#define LINKAGE_TEMP_REG reg_NL3
 | 
						|
+#define LINKAGE_TEMP_REG reg_LIP // Lisp needs to save before entry.
 | 
						|
 
 | 
						|
 void arch_write_linkage_table_entry(int index, void *target_addr, int datap)
 | 
						|
 {
 | 
						|
-- 
 | 
						|
2.40.1
 | 
						|
 |