vm: walk code roots from sample callstacks
parent
1089816b21
commit
e3e2788414
|
@ -24,6 +24,9 @@ template<typename Fixup> struct code_block_visitor {
|
|||
void visit_embedded_code_pointers(code_block *compiled);
|
||||
void visit_context_code_blocks();
|
||||
void visit_uninitialized_code_blocks();
|
||||
void visit_sample_callstacks();
|
||||
|
||||
void visit_code_roots();
|
||||
};
|
||||
|
||||
template<typename Fixup>
|
||||
|
@ -133,4 +136,22 @@ void code_block_visitor<Fixup>::visit_uninitialized_code_blocks()
|
|||
parent->code->uninitialized_blocks = new_uninitialized_blocks;
|
||||
}
|
||||
|
||||
template<typename Fixup>
|
||||
void code_block_visitor<Fixup>::visit_sample_callstacks()
|
||||
{
|
||||
for (std::vector<code_block *>::const_iterator iter = parent->sample_callstacks.begin();
|
||||
iter != parent->sample_callstacks.end();
|
||||
++iter)
|
||||
{
|
||||
fixup.fixup_code(*iter);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename Fixup>
|
||||
void code_block_visitor<Fixup>::visit_code_roots()
|
||||
{
|
||||
visit_uninitialized_code_blocks();
|
||||
visit_sample_callstacks();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -209,7 +209,7 @@ void factor_vm::collect_compact_impl(bool trace_contexts_p)
|
|||
slot_visitor<compaction_fixup> data_forwarder(this,fixup);
|
||||
code_block_visitor<compaction_fixup> code_forwarder(this,fixup);
|
||||
|
||||
code_forwarder.visit_uninitialized_code_blocks();
|
||||
code_forwarder.visit_code_roots();
|
||||
|
||||
/* Object start offsets get recomputed by the object_compaction_updater */
|
||||
data->tenured->starts.clear_object_start_offsets();
|
||||
|
@ -308,7 +308,7 @@ void factor_vm::collect_compact_code_impl(bool trace_contexts_p)
|
|||
slot_visitor<code_compaction_fixup> data_forwarder(this,fixup);
|
||||
code_block_visitor<code_compaction_fixup> code_forwarder(this,fixup);
|
||||
|
||||
code_forwarder.visit_uninitialized_code_blocks();
|
||||
code_forwarder.visit_code_roots();
|
||||
|
||||
if(trace_contexts_p)
|
||||
code_forwarder.visit_context_code_blocks();
|
||||
|
|
|
@ -19,9 +19,9 @@ void full_collector::trace_context_code_blocks()
|
|||
code_visitor.visit_context_code_blocks();
|
||||
}
|
||||
|
||||
void full_collector::trace_uninitialized_code_blocks()
|
||||
void full_collector::trace_code_roots()
|
||||
{
|
||||
code_visitor.visit_uninitialized_code_blocks();
|
||||
code_visitor.visit_code_roots();
|
||||
}
|
||||
|
||||
void full_collector::trace_object_code_block(object *obj)
|
||||
|
@ -63,7 +63,7 @@ void factor_vm::collect_mark_impl(bool trace_contexts_p)
|
|||
{
|
||||
collector.trace_contexts();
|
||||
collector.trace_context_code_blocks();
|
||||
collector.trace_uninitialized_code_blocks();
|
||||
collector.trace_code_roots();
|
||||
}
|
||||
|
||||
while(!mark_stack.empty())
|
||||
|
|
|
@ -31,7 +31,7 @@ struct full_collector : collector<tenured_space,full_policy> {
|
|||
explicit full_collector(factor_vm *parent_);
|
||||
void trace_code_block(code_block *compiled);
|
||||
void trace_context_code_blocks();
|
||||
void trace_uninitialized_code_blocks();
|
||||
void trace_code_roots();
|
||||
void trace_object_code_block(object *obj);
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue