William Brew wrote:
>
> 1.
>
> We have duplicated this problem outside the context of our application. We
> load up 40 to 50 Mbytes of dummy code and then do ext:save-lisp :purify nil.
> The resulting core gets a div by 0 when restarting. I have attached the test program
> and a transcript. (dummy-file-maker.lisp)
>
Thanks for the file. I can reproduce this, but I don't know what the
problem is. It seems it's doing a (mod hash (length table)) in
volatile-info-lookup in globdaldb.lisp. I don't know why table length is 0.
>
> 3.
> Related to the purify problem, I attempted to duplicate the purify problem
> outside the context of our application. I created a program that just consed
> up a bunch of arrays and then tried to do a purify. There is some fog here. In
> 2003_12, with a particular set of size parameters you get a segmentation violation.
> In 2004_04, this same test worked fine. If in 2004_04, you up the size parameters
> a bit, then you again get a segmentation violation. There is some indication that
> this may be due to a hard upper bound of 128Mbyte in the size of static space. I
> have
> attached the test programs and transcript. (purify-test.lisp)
I am almost 100% sure it's because the test example is running out of
static space.
[snip]
> otwb-dev bbrew 28> ls -l core
> -rw-rw-r-- 1 bbrew g940 91066200 Apr 20 09:10 core
> otwb-dev bbrew 29> gdb /org/develop/reasoning/lisp/cmucl/ss2004-04/bin/lisp core
> GNU gdb 5.0
I've always had problems with cmucl and all versions of gdb except 4.18....
> #0 ptrans_vector (thing=1128994231, bits=32, extra=0, boxed=4, constant=11)
> at ../../src/lisp/purify.c:645
> 645 ../../src/lisp/purify.c: No such file or directory.
> (gdb) bt
> #0 ptrans_vector (thing=1128994231, bits=32, extra=0, boxed=4, constant=11)
> at ../../src/lisp/purify.c:645
For me line 645 is the function entry.
Note that boxed is 4 and constant is 11. That would mean in the code:
if (boxed && !constant) {
new = static_free;
static_free += CEILING(nwords, 2);
}
else {
new = read_only_free;
read_only_free += CEILING(nwords, 2);
}
we would be taking the else branch, so we are trying to move something
to the read-only space. Could we be running out of space in read-only
space? There's only 128 MB of read-only space.
Can you print out the values of read_only_free and static_free?
I'm going to try to make a special build for you that has 256 MB of
read-only and 256 MB of static space. I'll let you know when it's done
and where you can find it.
If you think you need more, we'll have to play around a bit to move the
spaces around.
We ought to at least give better error messages before we die.
Ray