I'm still on my quixotic quest to recover a working image from a core dump. Currently, the interpreter is crashing on my image because there is no suspended context.
(from gnu-interp.c initializeInterpreter()) /* begin loadInitialContext */ printf("Begin loadInitialContext.\n"); sched = longAt(((longAt((foo->specialObjectsOop + BaseHeaderSize) + (SchedulerAssociation << ShiftForWord))) + BaseHeaderSize) + (ValueIndex << ShiftForWord)); printf("sched: %.8X.\n", sched); proc = longAt((sched + BaseHeaderSize) + (ActiveProcessIndex << ShiftForWord)); printf("proc: %.8X.\n", proc); foo->activeContext = longAt((proc + BaseHeaderSize) + (SuspendedContextIndex << ShiftForWord)); printf("activeContext: %.8X.\n", foo->activeContext); printf("About to beRootIfOld.\n"); if ((((usqInt) foo->activeContext)) < (((usqInt) foo-
youngStart))) {
beRootIfOld(foo->activeContext); }
As output, I get:
memStart: 77DA6000. Reading image. Initializing interpreter. Begin loadInitialContext. sched: 77DA7658. proc: 7A1CEDA4. activeContext: 00000000. About to beRootIfOld.
Segmentation fault
If I am reading this data correctly, it is saying there is no suspended context. Which would make sense (to me) since this core dump was taken at some random point in the interpreter's machinations.
So, what are my options? (Do I have any?) Can I fake or force a suspended context? Am I reading the data wrong?
Thanks, David ---- David Farber Red River Software
vm-dev@lists.squeakfoundation.org