From: Christophe Rhodes Date: Tue, 28 Feb 2006 14:22:54 +0000 (+0000) Subject: 0.9.10.8: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=1bd9aea53b7b0a523c98a223074219a8f495436e;p=sbcl.git 0.9.10.8: Maybe fix some gc problems on ppc/gencgc? ... there's a workaround for non-descriptors in descriptor registers which was previously !GENCGC but in fact should have been !CONSERVATIVE or possibly !PARTITIONED_REGISTERS. ... whitespace in target-char.lisp --- diff --git a/src/code/target-char.lisp b/src/code/target-char.lisp index 3b7eea7..680afcc 100644 --- a/src/code/target-char.lisp +++ b/src/code/target-char.lisp @@ -68,9 +68,9 @@ while code-point do (setf (gethash code-point names) char-name)) (let ((tree - #!+sb-unicode - (make-huffman-tree - (let (list) + #!+sb-unicode + (make-huffman-tree + (let (list) (maphash (lambda (code name) (declare (ignore code)) (push name list)) diff --git a/src/runtime/gc-common.c b/src/runtime/gc-common.c index 992e365..37555f9 100644 --- a/src/runtime/gc-common.c +++ b/src/runtime/gc-common.c @@ -156,25 +156,28 @@ scavenge(lispobj *start, long n_words) n_words_scavenged = 1; } } -#ifndef LISP_FEATURE_GENCGC - /* this workaround is probably not necessary for gencgc; at least, the - * behaviour it describes has never been reported */ - else if (n_words==1) { - /* there are some situations where an - other-immediate may end up in a descriptor - register. I'm not sure whether this is - supposed to happen, but if it does then we +#if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64) + /* This workaround is probably not needed for those ports + which don't have a partitioned register set (and therefore + scan the stack conservatively for roots). */ + else if (n_words == 1) { + /* there are some situations where an other-immediate may + end up in a descriptor register. I'm not sure whether + this is supposed to happen, but if it does then we don't want to (a) barf or (b) scavenge over the - data-block, because there isn't one. So, if - we're checking a single word and it's anything - other than a pointer, just hush it up */ - int type=widetag_of(object); - n_words_scavenged=1; - - if ((scavtab[type]==scav_lose) || - (((scavtab[type])(start,object))>1)) { - fprintf(stderr,"warning: attempted to scavenge non-descriptor value %x at %p. If you can\nreproduce this warning, send a bug report (see manual page for details)\n", - object,start); + data-block, because there isn't one. So, if we're + checking a single word and it's anything other than a + pointer, just hush it up */ + int widetag = widetag_of(object); + n_words_scavenged = 1; + + if ((scavtab[widetag] == scav_lose) || + (((sizetab[widetag])(object_ptr)) > 1)) { + fprintf(stderr,"warning: \ +attempted to scavenge non-descriptor value %x at %p.\n\n\ +If you can reproduce this warning, please send a bug report\n\ +(see manual page for details).\n", + object, object_ptr); } } #endif diff --git a/version.lisp-expr b/version.lisp-expr index b1e6d9c..87a3031 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.9.10.7" +"0.9.10.8"