On Monday 13 October 2008 16:15:54 chromatic wrote: > That's pretty clearly not a PMC. Can you use the breakpoint > technique to figure out 1) What creates this CPointer PMC and
In the following dump, the offending PMC ix 0x1731de8. The arena's base pointer varies every time, but I seem to be able to catch it with a pointer suffix check. Breakpoint 3, Parrot_CPointer_init (interp=0x1f99080, pmc=0x20f3de8) at ./src/pmc/cpointer.pmc:67 67 mem_allocate_typed(Parrot_CPointer_attributes); (gdb) bt #0 Parrot_CPointer_init (interp=0x1f99080, pmc=0x20f3de8) at ./src/pmc/cpointer.pmc:67 #1 0x00007fa669216be0 in pmc_new (interp=0x1f99080, base_type=52) at src/pmc.c:93 #2 0x00007fa6691dfe74 in Parrot_build_sig_object_from_varargs ( interp=0x1f99080, sig=0x7fa66944bb33 "PPP->P", args=0x7fff71a10230) at src/multidispatch.c:477 #3 0x00007fa6691e05c6 in Parrot_mmd_multi_dispatch_from_c_args ( interp=0x1f99080, name=0x7fa66944c310 "modulus", sig=0x7fa66944bb33 "PPP->P") at src/multidispatch.c:574 #4 0x00007fa6692c159f in Parrot_default_modulus (interp=0x1f99080, pmc=0x20f3f00, value=0x2072a08, dest=0x2071e70) at ./src/pmc/default.pmc:1673 #5 0x00007fa669172af8 in Parrot_mod_p_p_p (cur_opcode=0x20f36a0, interp=0x1f99080) at src/ops/math.ops:760 #6 0x00007fa669217c2f in runops_slow_core (interp=0x1f99080, pc=0x20f36a0) at src/runops_cores.c:222 #7 0x00007fa6691d7ed4 in runops_int (interp=0x1f99080, offset=0) at src/interpreter.c:937 #8 0x00007fa6691d88c3 in runops (interp=0x1f99080, offs=0) at src/inter_run.c:101 #9 0x00007fa6691d8b7a in runops_args (interp=0x1f99080, sub=0x20738b0, obj=0x2026020, meth_unused=0x0, sig=0x7fa669442cfb "vP", ap=0x7fff71a10500) at src/inter_run.c:236 #10 0x00007fa6691d8d6b in Parrot_runops_fromc_args (interp=0x1f99080, sub=0x20738b0, sig=0x7fa669442cfb "vP") at src/inter_run.c:300 #11 0x00007fa6691ba81e in Parrot_runcode (interp=0x1f99080, argc=1, argv=0x7fff71a107e0) at src/embed.c:951 #12 0x00007fa66941bf38 in imcc_run_pbc (interp=0x1f99080, obj_file=0, output_file=0x0, argc=1, argv=0x7fff71a107e0) at compilers/imcc/main.c:791 #13 0x00007fa66941c837 in imcc_run (interp=0x1f99080, sourcefile=0x7fff71a11165 "t/op/bitwise_27.pir", argc=1, argv=0x7fff71a107e0) at compilers/imcc/main.c:1079 #14 0x0000000000400c64 in main (argc=1, argv=0x7fff71a107e0) at src/main.c:61 (gdb) cont Continuing. Breakpoint 4, Parrot_CPointer_set_pointer (interp=0x1f99080, pmc=0x20f3de8, value=0x7fff71a10358) at ./src/pmc/cpointer.pmc:167 167 Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF); (gdb) bt #0 Parrot_CPointer_set_pointer (interp=0x1f99080, pmc=0x20f3de8, value=0x7fff71a10358) at ./src/pmc/cpointer.pmc:167 #1 0x00007fa6691e0189 in Parrot_build_sig_object_from_varargs ( interp=0x1f99080, sig=0x7fa66944bb33 "PPP->P", args=0x7fff71a10230) at src/multidispatch.c:497 #2 0x00007fa6691e05c6 in Parrot_mmd_multi_dispatch_from_c_args ( interp=0x1f99080, name=0x7fa66944c310 "modulus", sig=0x7fa66944bb33 "PPP->P") at src/multidispatch.c:574 #3 0x00007fa6692c159f in Parrot_default_modulus (interp=0x1f99080, pmc=0x20f3f00, value=0x2072a08, dest=0x2071e70) at ./src/pmc/default.pmc:1673 #4 0x00007fa669172af8 in Parrot_mod_p_p_p (cur_opcode=0x20f36a0, interp=0x1f99080) at src/ops/math.ops:760 #5 0x00007fa669217c2f in runops_slow_core (interp=0x1f99080, pc=0x20f36a0) at src/runops_cores.c:222 #6 0x00007fa6691d7ed4 in runops_int (interp=0x1f99080, offset=0) at src/interpreter.c:937 #7 0x00007fa6691d88c3 in runops (interp=0x1f99080, offs=0) at src/inter_run.c:101 #8 0x00007fa6691d8b7a in runops_args (interp=0x1f99080, sub=0x20738b0, obj=0x2026020, meth_unused=0x0, sig=0x7fa669442cfb "vP", ap=0x7fff71a10500) at src/inter_run.c:236 #9 0x00007fa6691d8d6b in Parrot_runops_fromc_args (interp=0x1f99080, sub=0x20738b0, sig=0x7fa669442cfb "vP") at src/inter_run.c:300 #10 0x00007fa6691ba81e in Parrot_runcode (interp=0x1f99080, argc=1, argv=0x7fff71a107e0) at src/embed.c:951 #11 0x00007fa66941bf38 in imcc_run_pbc (interp=0x1f99080, obj_file=0, output_file=0x0, argc=1, argv=0x7fff71a107e0) at compilers/imcc/main.c:791 #12 0x00007fa66941c837 in imcc_run (interp=0x1f99080, sourcefile=0x7fff71a11165 "t/op/bitwise_27.pir", argc=1, argv=0x7fff71a107e0) at compilers/imcc/main.c:1079 #13 0x0000000000400c64 in main (argc=1, argv=0x7fff71a107e0) at src/main.c:61 (gdb) print *pmc $3 = {cache = {_b = {_bufstart = 0x20f3db0, _buflen = 0}, _ptrs = { _struct_val = 0x20f3db0, _pmc_val = 0x0}, _i = {_int_val = 34553264, _int_val2 = 0}, _num_val = 1.7071580694083094e-316, _string_val = 0x20f3db0}, flags = 72353280, vtable = 0x1ffbf30, data = 0x2135c00, pmc_ext = 0x2125418, real_self = 0x20f3de8} (gdb) print *((Parrot_CPointer_attributes *) 0x2135c00) $4 = {pointer = 0x7fff71a10358, sig = 0x0} > 2) What's setting an invalid pointer-to-a-PMC here? I'm not sure anything is. It looks to me like the CPointer is still intact, and that the GC is interpreting it wrong: Program received signal SIGSEGV, Segmentation fault. 0x00007fa6691c7b4b in pobject_lives (interp=0x1f99080, obj=0x7fa6691461ab) at src/gc/dod.c:206 206 PObj_live_SET(obj); (gdb) up #1 0x00007fa6693835b9 in Parrot_CPointer_mark (interp=0x1f99080, pmc=0x20f3de8) at ./src/pmc/cpointer.pmc:97 97 pobject_lives(interp, (PObj *) *pmc_pointer); (gdb) print *pmc $5 = {cache = {_b = {_bufstart = 0x20f3db0, _buflen = 0}, _ptrs = { _struct_val = 0x20f3db0, _pmc_val = 0x0}, _i = {_int_val = 34553264, _int_val2 = 0}, _num_val = 1.7071580694083094e-316, _string_val = 0x20f3db0}, flags = 74712576, vtable = 0x1ffbf30, data = 0x2135c00, pmc_ext = 0x2125418, real_self = 0x20f3de8} (gdb) print *((Parrot_CPointer_attributes *) 0x2135c00) $6 = {pointer = 0x7fff71a10358, sig = 0x1fa13b8} -- Mark