On Friday 30 May 2008 13:57:45 Allison Randal wrote: > > That's directly from an isa opcode. Is $2 NULL or is $2->vtable NULL or > > is $2->vtable->isa_pmc NULL? > > Demacrofying, that's: > > (gdb) print (&(interp)->ctx)->bp_ps.regs_p[-1L-(2)] > $1 = (PMC *) 0xa52ab0 > > So $2 isn't null. and: > > (gdb) print (&(interp)->ctx)->bp_ps.regs_p[-1L-(2)]->vtable > $2 = (VTABLE *) 0x9a04b0 > > So $2->vtable isn't null. and: > > (gdb) print (&(interp)->ctx)->bp_ps.regs_p[-1L-(2)]->vtable->isa_pmc > $3 = (isa_pmc_method_t) 0x59 > > So, $2->vtable->isa_pmc isn't null.
No, but 0x59 isn't a valid function pointer. What's $2->vtable->base_type? You might need to set a breakpoint on the creation of that PMC (break at the "return pmc" line in new_pmc, where the type argument is the same as the value of $2->vtable->base_type), then set a watchpoint on that PMC's vtable->isa_pmc to see where it gets overwritten. -- c