Nicholas Clark <[email protected]> wrote .. > The first thing after compiling the setting on Rakudo is this: > > /home/nicholas/Sandpit/moar-g/bin/moar > --libpath=/home/nicholas/Sandpit/moar-g/languages/nqp/lib > perl6.moarvm --target=mbc --output=lib/Test.moarvm lib/Test.pm > > It can SEGV. The problem seems to be that it's writing an i64 (specifically > the value 1), to register 0, which is marked as holding an object. The GC > goes BOOM! if it ever runs: > > Starting program: /home/nicholas/Sandpit/moar-g/bin/moar > --libpath=/home/nicholas/Sandpit/moar-g/languages/nqp/lib > perl6.moarvm --target=mbc --output=lib/Test.moarvm lib/Test.pm > [Thread debugging using libthread_db enabled] > > Breakpoint 1, MVM_interp_run (tc=0x6023f0, > initial_invoke=0x7ffff7a2e4c8 <toplevel_initial_invoke>, > invoke_data=0x667cf0) at src/core/interp.c:3529 > 3529 GET_REG(cur_op, 0).i64 = ++tc->sc_wb_disable_depth; > (gdb) p *((MVMuint16 *)(cur_op + 0)) > $15 = 0 > (gdb) p reg_base[0].i64 > $16 = 6348560 > (gdb) p frame->static_info->body.local_types[0] > $17 = 8 > (gdb) s > 3530 cur_op += 2; > (gdb) p reg_base[0].i64 > $18 = 1 > (gdb) s > 3531 goto NEXT; > (gdb) > 74 MVMFrame *const frame = tc->cur_frame; > > > Line numbers might be out as I have some debugging code to make the runloop > abort immediately if any registers holding objects point to fromspace, and > SEGV immediately if any registers holding objects are bad pointers. > > And at line 74, register 0, marked as being of type object (8) is actually > holding the value 1, as set by this code: > > OP(scwbdisable): > GET_REG(cur_op, 0).i64 = ++tc->sc_wb_disable_depth; > cur_op += 2; > goto NEXT; > > > I don't know how to debug this further. >
Great find! Fixed in 80a60fc09. Thanks, Jonathan
