0.9.9.32:
authorChristophe Rhodes <csr21@cam.ac.uk>
Fri, 17 Feb 2006 17:15:34 +0000 (17:15 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Fri, 17 Feb 2006 17:15:34 +0000 (17:15 +0000)
Fix hideously embarrassing ppc assembly bug in reg_LRA
computation.
... no longer go wrong if bit 15 of lra is set.

(The symptoms from this have been reported many, many times:
segmentation faults in the first triggered GC.  Kevin Rosenberg
reported it first from my trawl on sbcl-devel, but I think it's
been known for longer than that.  Previously it had been
dismissed as gcc miscompilation problems, because the problem
disappeared when using a different version of gcc, for any
individual developer: in retrospect, the fact that it was our
bug after all is pretty obvious from the fact that we were never
able to characterize particular versions of gcc which were bad.)

NEWS
src/runtime/ppc-assem.S
version.lisp-expr

diff --git a/NEWS b/NEWS
index 3b59dcb..0e50cc0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -24,6 +24,12 @@ changes in sbcl-0.9.10 relative to sbcl-0.9.9:
   * fixed bug: metacircle resolution in cases where methods have slots
     added before the slots from STANDARD-METHOD.  (reported by Jean
     Bresson)
+  * fixed bug: the Power PC assembly code for calling into lisp
+    sometimes computed its return address wrongly (depending on the
+    15th bit of the address, fixed at link time).  This used to
+    manifest itself in a segmentation violation while building PCL.
+    (reported by Kevin Rosenberg, Eric Marsden, Lars Brinkhoff and
+    many others over the years)
 
 changes in sbcl-0.9.9 relative to sbcl-0.9.8:
   * new platform: experimental support for the Windows operating
index 28fe473..b4c79af 100644 (file)
@@ -339,7 +339,7 @@ x:
        addi reg_LRA,reg_LRA,lo16(lra)
 #else
        lis reg_LRA,lra@h
-       addi reg_LRA,reg_LRA,lra@l
+       ori reg_LRA,reg_LRA,lra@l
 #endif
        addi reg_LRA,reg_LRA,OTHER_POINTER_LOWTAG
 
index d8c689e..29d8be7 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.9.9.31"
+"0.9.9.32"