On Monday, December 15, 2003, at 12:58 pm, Leopold Toetsch wrote:
Arthur Bergman <[EMAIL PROTECTED]> wrote:
#0 0x081cef45 in Parrot_PMC_get_pointer (interp=0x82d7f78, pmc=0x83333a0)
That looks like the vtable could be corrupted. $ p *pmc $ p *pmc->vtable
So, after a couple of days struggling to find a lost off64_t I am able to try again, (plus side is, I now build a threaded perl to make it work (otherwise nasty IO problems hit me)).
So the result.
Most likely,
(gdb) p *pmc
$2 = {obj = {u = {b = {bufstart = 0x4212dfd8, buflen = 137797904}, ptrs = {_struct_val = 0x4212dfd8, _pmc_val = 0x836a110},
int_val = 1108533208, num_val = 4.2834352799906154e-269, string_val = 0x4212dfd8}, flags = 1886221358, pobj_version = 0}, vtable = 0x18,
pmc_ext = 0x10}
Of course followed by a
(gdb) p *pmc->vtable Cannot access memory at address 0x18
If it wasn't for pobj_version = 0 I would suggest it was all just random memory I was looking at.
Any suggestions?
Maybe the PMC got destroyed by a DOD run. You can check that by disabling DOD after Parrot_new(). (Parrot has a commandline option -G for this). Also the pmc's flags should reflect that.
I doubt this happens since I never give parrot a chance to do anything, there is no step that I call into parrot, just
PL_Parrot = Parrot_new(0); Parrot_init(PL_Parrot);
then a bit later
Parrot_Int type = Parrot_PMC_typenum(PL_Parrot, "Perl5LV"); Parrot_PMC_get_pointer(PL_Parrot, SvANY(sv));
Arthur