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

Reply via email to