[Vm-dev] process state of core dump

David Farber rdrvr.biz at gmail.com
Wed Apr 15 01:39:42 UTC 2009


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



More information about the Vm-dev mailing list