~ruther/guix-local

ea832b44b79fb06bac88679029773006fea15827 — Guillaume Le Vaillant 2 years ago 7f530f5
gnu: sbcl: Fix build on powerpc64.

* gnu/packages/patches/sbcl-fix-ppc64-build.patch: New file.
* gnu/local.mk: Register it.
* gnu/packages/lisp.scm (sbcl)[source]: Use it.

Change-Id: If81321bc7e4075ac7ec63f7b8d623011b4b975d5
3 files changed, 29 insertions(+), 0 deletions(-)

M gnu/local.mk
M gnu/packages/lisp.scm
A gnu/packages/patches/sbcl-fix-ppc64-build.patch
M gnu/local.mk => gnu/local.mk +1 -0
@@ 1988,6 1988,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/sbcl-burgled-batteries3-fix-signals.patch	\
  %D%/packages/patches/sbcl-clml-fix-types.patch		\
  %D%/packages/patches/sbcl-eazy-gnuplot-skip-path-check.patch	\
  %D%/packages/patches/sbcl-fix-ppc64-build.patch		\
  %D%/packages/patches/sbcl-png-fix-sbcl-compatibility.patch	\
  %D%/packages/patches/scalapack-gcc-10-compilation.patch	\
  %D%/packages/patches/scheme48-tests.patch			\

M gnu/packages/lisp.scm => gnu/packages/lisp.scm +1 -0
@@ 447,6 447,7 @@ an interpreter, a compiler, a debugger, and much more.")
                           version "-source.tar.bz2"))
       (sha256
        (base32 "0xhpdnsg8idzxkn20iw8gd2rk470d7vc22vrp5clq9fj117vgn43"))
       (patches (search-patches "sbcl-fix-ppc64-build.patch"))
       (modules '((guix build utils)))
       (snippet
        '(begin

A gnu/packages/patches/sbcl-fix-ppc64-build.patch => gnu/packages/patches/sbcl-fix-ppc64-build.patch +27 -0
@@ 0,0 1,27 @@
commit 255f3ead060129aa097b62f10d054cdc4997a431
Author: Douglas Katzman <dougk@google.com>
Date:   Mon Jan 1 23:59:50 2024 -0500

    Fix ppc64 failure-to-build (from a few weeks ago)
    
    Git rev 7354472bb5 caused NIL to get a bogus widetag.

diff --git a/make-target-2-load.lisp b/make-target-2-load.lisp
index 6571ec27d..daef942ea 100644
--- a/make-target-2-load.lisp
+++ b/make-target-2-load.lisp
@@ -339,7 +339,13 @@ Please check that all strings which were not recognizable to the compiler
 
 
   (do-all-symbols (symbol)
-    (sb-kernel:logior-header-bits symbol sb-vm::+symbol-initial-core+)
+    ;; Don't futz with the header of static symbols.
+    ;; Technically LOGIOR-HEADER-BITS can only be used on an OTHER-POINTER-LOWTAG
+    ;; objects, so modifying NIL should not ever work, but it's especially wrong
+    ;; on ppc64 where OTHER- and LIST- pointer lowtags are 10 bytes apart instead
+    ;; of 8, so this was making a random alteration to the header.
+    (unless (eq (heap-allocated-p symbol) :static)
+      (sb-kernel:logior-header-bits symbol sb-vm::+symbol-initial-core+))
 
     ;; A symbol whose INFO slot underwent any kind of manipulation
     ;; such that it now has neither properties nor globaldb info,