On Tue, Jan 29, 2002 at 01:15:27PM -0600, William Harold Newman wrote:
> On Tue, Jan 29, 2002 at 06:18:42AM +0000, Daniel Barlow wrote:
> > 5) It still needs porting forwards to 0.7.x. I've had a look at the
> > diffs from 0.6.13 to 0.7 for Alpha, and the necessary changes seem
> > semi-mechanical - I don't envisage any nasty surprises here.
> I don't anticipate any nasty surprises either. The main nasty
> surprises I had were stumbling across compiler limitations and bugs,
> not strange consequences of renamings. So unless you happen to trip
> over a new compiler bug in 0.7.*, you should be OK.
Hmm. Either I've done something stupidly wrong, or something has
changed in a nasty way.
I've started the SPARC forward port to 0.7.x; cvs import, M-% is my
friend, and so on. And it does make-host-1, make-target-1 and
make-host-2 successfully (cross-compiling from x86 cmucl).
However, it now blows up in cold-init in a way that I haven't seen
before. I'm posting this here in the vague hope that either this
failure mode is terribly familiar from 0.pre7.flakyn.y, or else that
it's immediately obvious what's going on; otherwise, it's back to
wrestling with a broken gdb... :(
csr21@...$ src/runtime/sbcl --core output/cold-sbcl.core
/done with *INFO-TYPES* initialization
/entering ERROR, argument list=..
The error it's trying to print is "Argument X is not a REAL: NIL"
ldb> backtrace # apologies for the wrapping
<Frame 0x50000180 [interrupted], CODE: 0x300E79B7, top level local
call SB!IMPL::INFINITE-ERROR-PROTECTOR, <no LRA>, PC: 0x10c>
<Frame 0x50000140, CODE: 0x300F8D5F, top level local call ERROR, LRA:
0x300f9037, PC: 0x278>
<Frame 0x50000100, CODE: 0x302F888F, top level local call
SB!KERNEL:TWO-ARG-<, LRA: 0x302f915f, PC: 0x878>
<Frame 0x500000c0, CODE: 0x3066FBCF, top level local call
SB!C::SET-INFO-VALUE, LRA: 0x30670747, PC: 0xad0>
<Frame 0x50000080, CODE: 0x306730BF, top level local call (SETF
SB!INT:INFO), LRA: 0x306733e7, PC: 0x2f0>
So we wander off to look at set-info-value, and the only
likely-looking candidate for something being converted to two-arg-< is
(let ((count (incf (volatile-info-env-count env))))
(when (>= count (volatile-info-env-threshold env))
And I can't really see how that generates a NIL.
Any ideas? Just in case I've screwed up in incorporating the
symbol-plist fix from Dan, here's NIL:
ldb> dump 0x28000004 7
0x28000004: 0x00000096 0x0000 0x0096 0x00 0x00 0x00 0x96
0x28000008: 0x2800000b 0x2800 0x000b 0x28 0x00 0x00 0x0b (
0x2800000C: 0x2800000b 0x2800 0x000b 0x28 0x00 0x00 0x0b (
0x28000010: 0x2800000b 0x2800 0x000b 0x28 0x00 0x00 0x0b (
0x28000014: 0x30000007 0x3000 0x0007 0x30 0x00 0x00 0x07 0
0x28000018: 0x318c29f1 0x318c 0x29f1 0x31 0x8c 0x29 0xf1 1 )
0x2800001C: 0x00000000 0x0000 0x0000 0x00 0x00 0x00 0x00
Jesus College, Cambridge, CB5 8BL +44 1223 510 299
http://www-jcsu.jesus.cam.ac.uk/~csr21/ (defun pling-dollar
(str schar arg) (first (last +))) (make-dispatch-macro-character #\! t)
(set-dispatch-macro-character #\! #\$ #'pling-dollar)