|
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
|