diff --git a/vm/callstack.cpp b/vm/callstack.cpp index 7730ae554a..b2bed5c883 100644 --- a/vm/callstack.cpp +++ b/vm/callstack.cpp @@ -67,8 +67,7 @@ struct stack_frame_accumulator { /* Allocates memory (frames.add()) */ - void operator()(void* frame_top, cell frame_size, code_block* owner, - void* addr) { + void operator()(cell frame_top, cell size, code_block* owner, cell addr) { data_root executing_quot(owner->owner_quot(), parent); data_root executing(owner->owner, parent); data_root scan(owner->scan(parent, addr), parent); @@ -113,7 +112,7 @@ void factor_vm::primitive_innermost_stack_frame_executing() { void factor_vm::primitive_innermost_stack_frame_scan() { callstack* stack = untag_check(ctx->peek()); void* frame = stack->top(); - void* addr = *(void**)frame; + cell addr = *(cell*)frame; ctx->replace(code->code_block_for_address((cell)addr)->scan(this, addr)); } diff --git a/vm/callstack.hpp b/vm/callstack.hpp index 58a719dd5d..d7ae087542 100644 --- a/vm/callstack.hpp +++ b/vm/callstack.hpp @@ -16,14 +16,14 @@ inline void factor_vm::iterate_callstack_object(callstack* stack_, fixnum frame_offset = 0; while (frame_offset < frame_length) { - void* frame_top = stack->frame_top_at(frame_offset); - void* addr = *(void**)frame_top; + cell frame_top = (cell)stack->frame_top_at(frame_offset); + cell addr = *(cell*)frame_top; + cell fixed_addr = Fixup::translated_code_block_map + ? (cell)fixup.translate_code((code_block*)addr) + : addr; + code_block* owner = code->code_block_for_address(fixed_addr); - void* fixed_addr = Fixup::translated_code_block_map - ? (void*)fixup.translate_code((code_block*)addr) - : addr; - code_block* owner = code->code_block_for_address((cell)fixed_addr); - cell frame_size = owner->stack_frame_size_for_address((cell)fixed_addr); + cell frame_size = owner->stack_frame_size_for_address(fixed_addr); iterator(frame_top, frame_size, owner, fixed_addr); frame_offset += frame_size; @@ -46,23 +46,22 @@ inline void factor_vm::iterate_callstack(context* ctx, Iterator& iterator, cell frame_top = ctx->callstack_top; while (frame_top < ctx->callstack_bottom) { - void* addr = *(void**)frame_top; + cell addr = *(cell*)frame_top; FACTOR_ASSERT(addr != 0); - void* fixed_addr = Fixup::translated_code_block_map - ? (void*)fixup.translate_code((code_block*)addr) - : addr; + cell fixed_addr = Fixup::translated_code_block_map + ? (cell)fixup.translate_code((code_block*)addr) + : addr; - code_block* owner = code->code_block_for_address((cell)fixed_addr); + code_block* owner = code->code_block_for_address(fixed_addr); code_block* fixed_owner = Fixup::translated_code_block_map ? owner : fixup.translate_code(owner); - cell frame_size = - fixed_owner->stack_frame_size_for_address((cell)fixed_addr); + cell frame_size = fixed_owner->stack_frame_size_for_address(fixed_addr); - void* fixed_addr_for_iter = + cell fixed_addr_for_iter = Fixup::translated_code_block_map ? fixed_addr : addr; - iterator((void*)frame_top, frame_size, owner, fixed_addr_for_iter); + iterator(frame_top, frame_size, owner, fixed_addr_for_iter); frame_top += frame_size; } } diff --git a/vm/code_block_visitor.hpp b/vm/code_block_visitor.hpp index 92e989511e..6c06d74589 100644 --- a/vm/code_block_visitor.hpp +++ b/vm/code_block_visitor.hpp @@ -39,13 +39,12 @@ template struct call_frame_code_block_visitor { call_frame_code_block_visitor(factor_vm* parent, Fixup fixup) : parent(parent), fixup(fixup) {} - void operator()(void* frame_top, cell frame_size, code_block* owner, - void* addr) { + void operator()(cell frame_top, cell size, code_block* owner, cell addr) { code_block* compiled = Fixup::translated_code_block_map ? owner : fixup.fixup_code(owner); - void* fixed_addr = compiled->address_for_offset(owner->offset(addr)); + cell fixed_addr = compiled->address_for_offset(owner->offset((void*)addr)); - *(void**)frame_top = fixed_addr; + *(cell*)frame_top = fixed_addr; } }; diff --git a/vm/code_blocks.cpp b/vm/code_blocks.cpp index 5acec4b129..d89f457b5a 100644 --- a/vm/code_blocks.cpp +++ b/vm/code_blocks.cpp @@ -11,7 +11,7 @@ cell code_block::owner_quot() const { /* If the code block is an unoptimized quotation, we can calculate the scan offset. In all other cases -1 is returned. */ -cell code_block::scan(factor_vm* vm, void* addr) const { +cell code_block::scan(factor_vm* vm, cell addr) const { if (type() != code_block_unoptimized) { return tag_fixnum(-1); } @@ -22,7 +22,7 @@ cell code_block::scan(factor_vm* vm, void* addr) const { if (!obj.type_p(QUOTATION_TYPE)) return tag_fixnum(-1); - cell ofs = offset(addr); + cell ofs = offset((void*)addr); return tag_fixnum(vm->quot_code_offset_to_scan(obj.value(), ofs)); } diff --git a/vm/code_blocks.hpp b/vm/code_blocks.hpp index 6393c6f7e6..56fc09e2e7 100644 --- a/vm/code_blocks.hpp +++ b/vm/code_blocks.hpp @@ -94,11 +94,11 @@ struct code_block { cell offset(void* addr) const { return (char*)addr - (char*)entry_point(); } - void* address_for_offset(cell offset) const { - return (void*)((char*)entry_point() + offset); + cell address_for_offset(cell offset) const { + return (cell)((char*)entry_point() + offset); } - cell scan(factor_vm* vm, void* addr) const; + cell scan(factor_vm* vm, cell addr) const; cell owner_quot() const; }; diff --git a/vm/debug.cpp b/vm/debug.cpp index 821cc60dc9..218f21eba3 100644 --- a/vm/debug.cpp +++ b/vm/debug.cpp @@ -190,10 +190,9 @@ struct stack_frame_printer { factor_vm* parent; explicit stack_frame_printer(factor_vm* parent) : parent(parent) {} - void operator()(void* frame_top, cell frame_size, code_block* owner, - void* addr) { + void operator()(cell frame_top, cell size, code_block* owner, cell addr) { std::cout << std::endl; - std::cout << "frame: " << frame_top << " size " << frame_size << std::endl; + std::cout << "frame: " << (void*)frame_top << " size " << size << std::endl; std::cout << "executing: "; parent->print_obj(owner->owner); std::cout << std::endl; @@ -207,7 +206,7 @@ struct stack_frame_printer { std::cout << std::hex << (cell)owner->entry_point() << std::dec; std::cout << std::endl; std::cout << "return address: "; - std::cout << std::hex << (cell)addr << std::dec; + std::cout << std::hex << addr << std::dec; std::cout << std::endl; } }; diff --git a/vm/sampling_profiler.cpp b/vm/sampling_profiler.cpp index 5c527a8f99..2373af129a 100644 --- a/vm/sampling_profiler.cpp +++ b/vm/sampling_profiler.cpp @@ -47,8 +47,7 @@ struct record_callstack_sample_iterator { bool prolog_p) : sample_callstacks(sample_callstacks), skip_p(prolog_p) {} - void operator()(void* frame_top, cell frame_size, code_block* owner, - void* addr) { + void operator()(cell frame_top, cell size, code_block* owner, cell addr) { if (skip_p) skip_p = false; else diff --git a/vm/slot_visitor.hpp b/vm/slot_visitor.hpp index e19205e499..fddb5d0d53 100644 --- a/vm/slot_visitor.hpp +++ b/vm/slot_visitor.hpp @@ -294,9 +294,8 @@ template struct call_frame_slot_visitor { [entry_point] [size] */ - void operator()(void* frame_top, cell frame_size, code_block* owner, - void* addr) { - cell return_address = owner->offset(addr); + void operator()(cell frame_top, cell size, code_block* owner, cell addr) { + cell return_address = owner->offset((void*)addr); code_block* compiled = Fixup::translated_code_block_map ? owner