From: Juho Snellman Date: Tue, 29 Mar 2005 03:15:46 +0000 (+0000) Subject: 0.8.21.6: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=5bad55941fafc315116f6fcf2c8c2cce8af7ed9a;p=sbcl.git 0.8.21.6: 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. --- diff --git a/NEWS b/NEWS index e18ea00..427b4c0 100644 --- 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 diff --git a/src/code/bit-bash.lisp b/src/code/bit-bash.lisp index c2fb216..9a6853d 100644 --- a/src/code/bit-bash.lisp +++ b/src/code/bit-bash.lisp @@ -144,7 +144,8 @@ (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)) diff --git a/src/code/debug-int.lisp b/src/code/debug-int.lisp index a961e70..f3062a0 100644 --- a/src/code/debug-int.lisp +++ b/src/code/debug-int.lisp @@ -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 diff --git a/src/compiler/x86-64/float.lisp b/src/compiler/x86-64/float.lisp index 6cce969..f6de9ba 100644 --- a/src/compiler/x86-64/float.lisp +++ b/src/compiler/x86-64/float.lisp @@ -828,7 +828,7 @@ (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))) @@ -850,7 +850,7 @@ (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))) diff --git a/src/compiler/x86-64/target-insts.lisp b/src/compiler/x86-64/target-insts.lisp index 5411762..8f48d18 100644 --- a/src/compiler/x86-64/target-insts.lisp +++ b/src/compiler/x86-64/target-insts.lisp @@ -61,12 +61,13 @@ (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) diff --git a/version.lisp-expr b/version.lisp-expr index db33470..cc26343 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -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"