0.8.21.6:
authorJuho Snellman <jsnell@iki.fi>
Tue, 29 Mar 2005 03:15:46 +0000 (03:15 +0000)
committerJuho Snellman <jsnell@iki.fi>
Tue, 29 Mar 2005 03:15:46 +0000 (03:15 +0000)
Fix some x86-64 issues:
        * DOUBLE-FLOAT-{HIGH,LOW}-BITS on doubles stored on the stack
          had a off-by-one error on x86-64. (Discovered using Paul Dietz'
          random type propagation tester).
        * Fix a thinko in the pointer detection code of MAKE-VALID-LISP-OBJ.
          This was causing creation of invalid lispobjs under some
          rare circumstances, followed by failing GC assertions. (Discovered
          using Paul Dietz' random type propagation tester).
        * The disassembly done by the compiler if *COMPILER-TRACE-OUTPUT*
          is set was erroring out on x86-64 RIP addressing. Add a
          workaround.
        * Add missing case to !DEFINE-BYTE-BASHERS for a bitsize of 64.

NEWS
src/code/bit-bash.lisp
src/code/debug-int.lisp
src/compiler/x86-64/float.lisp
src/compiler/x86-64/target-insts.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index e18ea00..427b4c0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -20,6 +20,9 @@ changes in sbcl-0.8.22 relative to sbcl-0.8.21:
     ** out-of-line type testers for character strings are available.
     ** EQUAL compiler transform understands specialness of objects
        of type BIT-VECTOR.
+    ** accessing double-floats stored on the stack now works on x86-64.
+    ** debugger internals could sometimes create invalid lispobjs, 
+       resulting in GC crashes.
 
 changes in sbcl-0.8.21 (0.9alpha.1?) relative to sbcl-0.8.20:
   * incompatible change: thread support for non-NPTL systems has
index c2fb216..9a6853d 100644 (file)
                            (4  0)
                            (8  0)
                            (16 0)
-                           (32 0))))
+                           (32 0)
+                          (64 0))))
          (offset `(integer 0 ,max-bytes))
          (max-word-offset (ceiling max-bytes bytes-per-word))
          (word-offset `(integer 0 ,max-word-offset))
index a961e70..f3062a0 100644 (file)
@@ -1999,7 +1999,7 @@ register."
        ;; unbound marker
        (= val sb!vm:unbound-marker-widetag)
        ;; pointer
-       (and (logand val 1)
+       (and (logbitp 0 val)
            ;; Check that the pointer is valid. XXX Could do a better
            ;; job. FIXME: e.g. by calling out to an is_valid_pointer
            ;; routine in the C runtime support code
index 6cce969..f6de9ba 100644 (file)
        (inst movsd temp float)
        (move hi-bits temp))
        (double-stack
-       (loadw hi-bits ebp-tn (- (tn-offset float))))
+       (loadw hi-bits ebp-tn (- (1+ (tn-offset float)))))
        (descriptor-reg
        (loadw hi-bits float double-float-value-slot
               other-pointer-lowtag)))
        (inst movsd temp float)
        (move lo-bits temp))
        (double-stack
-       (loadw lo-bits ebp-tn (- (tn-offset float))))
+       (loadw lo-bits ebp-tn (- (1+ (tn-offset float)))))
        (descriptor-reg
        (loadw lo-bits float double-float-value-slot
               other-pointer-lowtag)))
index 5411762..8f48d18 100644 (file)
            (rip-p
             (princ offset stream)
             (let ((addr (+ offset (sb!disassem:dstate-next-addr dstate))))
-              (or (nth-value 1
-                             (sb!disassem::note-code-constant-absolute
-                              addr dstate))
-                  (sb!disassem:maybe-note-assembler-routine addr
-                                                            nil
-                                                            dstate))))
+              (when (plusp addr)
+                (or (nth-value 1
+                               (sb!disassem::note-code-constant-absolute
+                                addr dstate))
+                    (sb!disassem:maybe-note-assembler-routine addr
+                                                              nil
+                                                              dstate)))))
            (firstp
             (progn
               (sb!disassem:princ16 offset stream)
index db33470..cc26343 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.8.21.5"
+"0.8.21.6"