VM: reset the unused parts of the data and retain stack segments with a bit pattern (good for debugging)
parent
acc1bd3221
commit
fa0ff77c45
|
@ -381,10 +381,23 @@ void slot_visitor<Fixup>::visit_context(context* ctx) {
|
||||||
stacks. */
|
stacks. */
|
||||||
visit_callstack(ctx);
|
visit_callstack(ctx);
|
||||||
|
|
||||||
visit_stack_elements(ctx->datastack_seg, (cell*)ctx->datastack);
|
cell* ds_ptr = (cell*)ctx->datastack;
|
||||||
visit_stack_elements(ctx->retainstack_seg, (cell*)ctx->retainstack);
|
cell* rs_ptr = (cell*)ctx->retainstack;
|
||||||
|
visit_stack_elements(ctx->datastack_seg, ds_ptr);
|
||||||
|
visit_stack_elements(ctx->retainstack_seg, rs_ptr);
|
||||||
visit_object_array(ctx->context_objects,
|
visit_object_array(ctx->context_objects,
|
||||||
ctx->context_objects + context_object_count);
|
ctx->context_objects + context_object_count);
|
||||||
|
|
||||||
|
/* Clear out the space not visited with a known pattern. That makes
|
||||||
|
it easier to see if uninitialized reads are made. */
|
||||||
|
#ifdef FACTOR_DEBUG
|
||||||
|
cell ds_clear_start = (cell)(ds_ptr + 1);
|
||||||
|
cell ds_clear_size = ctx->datastack_seg->end - ds_clear_start;
|
||||||
|
memset_cell((void*)ds_clear_start, 0xbaadbaad, ds_clear_size);
|
||||||
|
cell rs_clear_start = (cell)(rs_ptr + 1);
|
||||||
|
cell rs_clear_size = ctx->retainstack_seg->end - rs_clear_start;
|
||||||
|
memset_cell((void*)rs_clear_start, 0xdaabdaab, rs_clear_size);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Fixup> void slot_visitor<Fixup>::visit_contexts() {
|
template <typename Fixup> void slot_visitor<Fixup>::visit_contexts() {
|
||||||
|
|
Loading…
Reference in New Issue