Skip to content

Instantly share code, notes, and snippets.

@timo
Created May 15, 2016 21:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timo/9eae73b3f633066f3111b96caa5d4274 to your computer and use it in GitHub Desktop.
Save timo/9eae73b3f633066f3111b96caa5d4274 to your computer and use it in GitHub Desktop.
this broken MVMFrame is being collected while taking a heap profile snapshot. note that the flags are "MVM_CF_FRAME".
(gdb) bt full
#0 MVM_panic (exitCode=exitCode@entry=1,
messageFormat=messageFormat@entry=0x7ffff79b25a8 "NULL REPR in item added to GC worklist")
at src/core/exceptions.c:707
args = <error reading variable args (Attempt to dereference a generic pointer.)>
#1 0x00007ffff79332b2 in gc_mark (tc=0x6037c0, st=<optimized out>, data=0x7ffff4e18eb8, worklist=0x32304c0)
at src/6model/reprs/MVMCode.c:48
item_to_add = 0x7ffff4e18ec0
body = 0x7ffff4e18eb8
#2 0x00007ffff7913b0f in MVM_gc_mark_collectable (tc=tc@entry=0x6037c0, worklist=worklist@entry=0x32304c0,
new_addr=new_addr@entry=0x7ffff4e18ea0) at src/gc/collect.c:399
new_addr_obj = 0x7ffff4e18ea0
i = <optimized out>
#3 0x00007ffff7913df9 in process_worklist (tc=tc@entry=0x6037c0, worklist=worklist@entry=0x32304c0,
wtp=wtp@entry=0x7fffffffe170, gen=gen@entry=0 '\000') at src/gc/collect.c:313
item = 0x7ffff675bde0
item_gen2 = <optimized out>
to_gen2 = 0 '\000'
gen2 = 0x603d00
item_ptr = 0x1454a08
new_addr = 0x7ffff4e18ea0
gen2count = <optimized out>
#4 0x00007ffff791406c in MVM_gc_collect (tc=0x6037c0, what_to_do=<optimized out>, gen=gen@entry=0 '\000')
at src/gc/collect.c:86
fromspace = 0x7ffff6697010
tospace = <optimized out>
worklist = 0x32304c0
wtp = {num_target_threads = 0, target_work = 0x0}
#5 0x00007ffff790f22b in run_gc (tc=tc@entry=0x6037c0, what_to_do=what_to_do@entry=0 '\000')
at src/gc/orchestrate.c:304
other = <optimized out>
gen = 0 '\000'
i = <optimized out>
n = <optimized out>
#6 0x00007ffff790fa0d in MVM_gc_enter_from_allocator (tc=tc@entry=0x6037c0) at src/gc/orchestrate.c:438
last_starter = 0x622c10
num_threads = 0
#7 0x00007ffff790fb0b in MVM_gc_allocate_nursery (tc=0x6037c0, size=32) at src/gc/allocation.c:32
allocated = 0x0
#8 0x00007ffff790fb57 in MVM_gc_allocate (size=<optimized out>, tc=0x6037c0) at src/gc/allocation.h:13
No locals.
#9 MVM_gc_allocate_zeroed (tc=tc@entry=0x6037c0, size=<optimized out>) at src/gc/allocation.c:49
No locals.
#10 0x00007ffff790fdfb in MVM_gc_allocate_object (tc=0x6037c0, st=<optimized out>) at src/gc/allocation.c:86
obj = <optimized out>
#11 0x00007ffff78d4794 in MVM_args_slurpy_named (tc=tc@entry=0x6037c0, ctx=ctx@entry=0x7ffff7fd6088)
at src/core/args.c:638
type = <optimized out>
result = 0x0
box = 0x0
arg_info = {arg = {o = 0x6037c0, s = 0x6037c0, i8 = -64 '\300', u8 = 192 '\300', i16 = 14272, u16 = 14272,
i32 = 6305728, u32 = 6305728, i64 = 6305728, u64 = 6305728, n32 = 8.83620696e-39,
n64 = 3.1154435768192319e-317}, flags = 200 '\310', exists = 0 '\000'}
flag_pos = <optimized out>
arg_pos = <optimized out>
#12 0x00007ffff78db7cc in MVM_interp_run (tc=tc@entry=0x6037c0,
initial_invoke=initial_invoke@entry=0x7ffff798df04 <toplevel_initial_invoke>, invoke_data=<optimized out>)
at src/core/interp.c:1045
op = <optimized out>
LABELS = {0x7ffff78d6ed1 <MVM_interp_run+152>, 0x7ffff78d6ef8 <MVM_interp_run+191>,
0x7ffff78d6efa <MVM_interp_run+193>, 0x7ffff78d6efa <MVM_interp_run+193>,
0x7ffff78d6f0f <MVM_interp_run+214>, 0x7ffff78d6f52 <MVM_interp_run+281>,
---Type <return> to continue, or q <return> to quit---q
0x7ffff78d6f67 <MVM_interp_run+302>Quit
(gdb) frame 1
#1 0x00007ffff79332b2 in gc_mark (tc=0x6037c0, st=<optimized out>, data=0x7ffff4e18eb8, worklist=0x32304c0)
at src/6model/reprs/MVMCode.c:48
48 MVM_gc_worklist_add(tc, worklist, &body->outer);
(gdb) list
43 }
44
45 /* Adds held objects to the GC worklist. */
46 static void gc_mark(MVMThreadContext *tc, MVMSTable *st, void *data, MVMGCWorklist *worklist) {
47 MVMCodeBody *body = (MVMCodeBody *)data;
48 MVM_gc_worklist_add(tc, worklist, &body->outer);
49 MVM_gc_worklist_add(tc, worklist, &body->code_object);
50 MVM_gc_worklist_add(tc, worklist, &body->sf);
51 MVM_gc_worklist_add(tc, worklist, &body->name);
52 if (body->state_vars) {
(gdb) print body->outer
$1 = (MVMFrame *) 0x7ffff675bac8
(gdb) print body->outer[0]
$2 = {header = {sc_forward_u = {forwarder = 0x0, sc = {sc_idx = 0, idx = 0}, st = 0x0}, owner = 1, flags = 4,
size = 288}, tc = 0x0, env = 0xe3edf0, work = 0x717050, args = 0x7171d8, cur_args_callsite = 0x0,
outer = 0x7ffff669a260, caller = 0x7ffff675bbe8, static_info = 0x1345550, code_ref = 0x14407c0, params = {
callsite = 0x7ffff7ddaf20 <null_args_callsite>, arg_flags = 0x0, args = 0x760140, named_used = 0x0,
named_used_size = 0, arg_count = 0, num_pos = 0, flag_count = 0}, effective_bytecode = 0x7ffff53ecf90 "\237",
effective_handlers = 0x0, effective_spesh_slots = 0x0, spesh_log_slots = 0x0, spesh_cand = 0x0,
return_address = 0x7ffff53edc4e "\a", return_value = 0x0, return_type = MVM_RETURN_VOID, special_return = 0x0,
special_unwind = 0x0, special_return_data = 0x0, mark_special_return_data = 0x0, throw_address = 0x0,
continuation_tags = 0x0, context_object = 0x7ffff675c228, dynlex_cache_name = 0xe6c340,
dynlex_cache_reg = 0x698ca8, dynlex_cache_type = 8, allocd_work = 504, allocd_env = 440, keep_caller = 1 '\001',
in_continuation = 0 '\000', flags = 0 '\000', spesh_log_idx = 0 '\000', osr_counter = 0 '\000', sequence_nr = 4070,
jit_entry_label = 0x0}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment