VM: reset the unused parts of the data and retain stack segments with a bit pattern (good for debugging)

db4
Björn Lindqvist 2015-03-05 13:13:28 +00:00 committed by John Benediktsson
parent acc1bd3221
commit fa0ff77c45
1 changed files with 15 additions and 2 deletions

View File

@ -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() {