diff options
author | Efraim Flashner <efraim@flashner.co.il> | 2023-06-07 09:55:35 +0300 |
---|---|---|
committer | Efraim Flashner <efraim@flashner.co.il> | 2023-06-07 09:55:35 +0300 |
commit | 2a6d2fc1d8e3434e283d6d2e559529b41a242fea (patch) | |
tree | 5583c506d482ddd08e281e3fb22341d360a1973a /gnu/packages/patches | |
parent | 4a5bbd293f57e1a6d52953745b1c8d35905fda50 (diff) |
gnu: sbcl: fix build on riscv64-linux.
* 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.
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r-- | gnu/packages/patches/sbcl-riscv-Make-contribs-build-again.patch | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/gnu/packages/patches/sbcl-riscv-Make-contribs-build-again.patch b/gnu/packages/patches/sbcl-riscv-Make-contribs-build-again.patch new file mode 100644 index 0000000000..85b96e1b20 --- /dev/null +++ b/gnu/packages/patches/sbcl-riscv-Make-contribs-build-again.patch @@ -0,0 +1,71 @@ +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 + |