VM: debug macros FACTOR_PRINT and FACTOR_PRINT_MARK to make better debug
printing messages than just using std::coutdb4
parent
a195e361df
commit
9bfc43144e
|
@ -68,6 +68,7 @@ ifdef CONFIG
|
||||||
|
|
||||||
MASTER_HEADERS = $(PLAF_MASTER_HEADERS) \
|
MASTER_HEADERS = $(PLAF_MASTER_HEADERS) \
|
||||||
vm/assert.hpp \
|
vm/assert.hpp \
|
||||||
|
vm/debug.hpp \
|
||||||
vm/layouts.hpp \
|
vm/layouts.hpp \
|
||||||
vm/platform.hpp \
|
vm/platform.hpp \
|
||||||
vm/primitives.hpp \
|
vm/primitives.hpp \
|
||||||
|
|
|
@ -48,7 +48,6 @@ struct context {
|
||||||
void reset_context_objects();
|
void reset_context_objects();
|
||||||
void reset();
|
void reset();
|
||||||
void fix_stacks();
|
void fix_stacks();
|
||||||
void scrub_stacks(gc_info* info, cell index);
|
|
||||||
|
|
||||||
cell peek() { return *(cell*)datastack; }
|
cell peek() { return *(cell*)datastack; }
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@ using namespace std;
|
||||||
|
|
||||||
namespace factor {
|
namespace factor {
|
||||||
|
|
||||||
|
bool factor_print_p = true;
|
||||||
|
|
||||||
ostream& operator<<(ostream& out, const string* str) {
|
ostream& operator<<(ostream& out, const string* str) {
|
||||||
for (cell i = 0; i < string_capacity(str); i++)
|
for (cell i = 0; i < string_capacity(str); i++)
|
||||||
out << (char)str->data()[i];
|
out << (char)str->data()[i];
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
namespace factor {
|
||||||
|
|
||||||
|
extern bool factor_print_p;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef FACTOR_DEBUG
|
||||||
|
|
||||||
|
#define FACTOR_PRINT(x) \
|
||||||
|
do { \
|
||||||
|
if (factor_print_p) { \
|
||||||
|
std::cerr \
|
||||||
|
<< std::setw(28) << std::left << __FILE__ \
|
||||||
|
<< " " << std::setw(4) << std::right << __LINE__ \
|
||||||
|
<< " " << std::setw(20) << std::left << __FUNCTION__ \
|
||||||
|
<< " " << x \
|
||||||
|
<< std::endl; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#define FACTOR_PRINT_MARK FACTOR_PRINT("")
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define FACTOR_PRINT(fmt, ...) ((void)0)
|
||||||
|
#define FACTOR_PRINT_MARK ((void)0)
|
||||||
|
#endif
|
|
@ -169,9 +169,10 @@ cell factor_vm::inline_cache_miss(cell return_address_) {
|
||||||
bool tail_call_site = tail_call_site_p(return_address.value);
|
bool tail_call_site = tail_call_site_p(return_address.value);
|
||||||
|
|
||||||
#ifdef PIC_DEBUG
|
#ifdef PIC_DEBUG
|
||||||
std::cout << "Inline cache miss at " << (tail_call_site ? "tail" : "non-tail")
|
FACTOR_PRINT("Inline cache miss at "
|
||||||
<< " call site 0x" << std::hex << return_address.value << std::dec
|
<< (tail_call_site ? "tail" : "non-tail")
|
||||||
<< std::endl;
|
<< " call site 0x" << std::hex << return_address.value
|
||||||
|
<< std::dec);
|
||||||
print_callstack();
|
print_callstack();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -210,9 +211,9 @@ cell factor_vm::inline_cache_miss(cell return_address_) {
|
||||||
set_call_target(return_address.value, xt);
|
set_call_target(return_address.value, xt);
|
||||||
|
|
||||||
#ifdef PIC_DEBUG
|
#ifdef PIC_DEBUG
|
||||||
std::cout << "Updated " << (tail_call_site ? "tail" : "non-tail")
|
FACTOR_PRINT("Updated " << (tail_call_site ? "tail" : "non-tail")
|
||||||
<< " call site 0x" << std::hex << return_address.value << std::dec
|
<< " call site 0x" << std::hex << return_address.value << std::dec
|
||||||
<< " with 0x" << std::hex << (cell)xt << std::dec << std::endl;
|
<< " with 0x" << std::hex << (cell)xt << std::dec);
|
||||||
print_callstack();
|
print_callstack();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,6 +87,7 @@ namespace factor { struct factor_vm; }
|
||||||
|
|
||||||
/* Factor headers */
|
/* Factor headers */
|
||||||
#include "assert.hpp"
|
#include "assert.hpp"
|
||||||
|
#include "debug.hpp"
|
||||||
#include "layouts.hpp"
|
#include "layouts.hpp"
|
||||||
#include "platform.hpp"
|
#include "platform.hpp"
|
||||||
#include "utilities.hpp"
|
#include "utilities.hpp"
|
||||||
|
|
|
@ -279,7 +279,7 @@ template <typename Fixup> struct call_frame_slot_visitor {
|
||||||
for (cell loc = 0; loc < count; loc++) {
|
for (cell loc = 0; loc < count; loc++) {
|
||||||
if (bitmap_p(bitmap, base + loc)) {
|
if (bitmap_p(bitmap, base + loc)) {
|
||||||
#ifdef DEBUG_GC_MAPS
|
#ifdef DEBUG_GC_MAPS
|
||||||
std::cout << "scrubbing stack location " << loc << std::endl;
|
FACTOR_PRINT("scrubbing stack location " << loc);
|
||||||
#endif
|
#endif
|
||||||
*((cell*)stack - loc) = 0;
|
*((cell*)stack - loc) = 0;
|
||||||
}
|
}
|
||||||
|
@ -310,8 +310,8 @@ template <typename Fixup> struct call_frame_slot_visitor {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef DEBUG_GC_MAPS
|
#ifdef DEBUG_GC_MAPS
|
||||||
std::cout << "call frame code block " << compiled << " with offset "
|
FACTOR_PRINT("call frame code block " << compiled << " with offset "
|
||||||
<< return_address << std::endl;
|
<< return_address);
|
||||||
#endif
|
#endif
|
||||||
cell* stack_pointer = (cell*)frame_top;
|
cell* stack_pointer = (cell*)frame_top;
|
||||||
uint8_t* bitmap = info->gc_info_bitmap();
|
uint8_t* bitmap = info->gc_info_bitmap();
|
||||||
|
@ -334,8 +334,8 @@ template <typename Fixup> struct call_frame_slot_visitor {
|
||||||
uint32_t base_pointer = info->lookup_base_pointer(callsite, spill_slot);
|
uint32_t base_pointer = info->lookup_base_pointer(callsite, spill_slot);
|
||||||
if (base_pointer != (uint32_t)-1) {
|
if (base_pointer != (uint32_t)-1) {
|
||||||
#ifdef DEBUG_GC_MAPS
|
#ifdef DEBUG_GC_MAPS
|
||||||
std::cout << "visiting derived root " << spill_slot
|
FACTOR_PRINT("visiting derived root " << spill_slot
|
||||||
<< " with base pointer " << base_pointer << std::endl;
|
<< " with base pointer " << base_pointer);
|
||||||
#endif
|
#endif
|
||||||
stack_pointer[spill_slot] -= stack_pointer[base_pointer];
|
stack_pointer[spill_slot] -= stack_pointer[base_pointer];
|
||||||
}
|
}
|
||||||
|
@ -347,7 +347,7 @@ template <typename Fixup> struct call_frame_slot_visitor {
|
||||||
for (cell spill_slot = 0; spill_slot < info->gc_root_count; spill_slot++) {
|
for (cell spill_slot = 0; spill_slot < info->gc_root_count; spill_slot++) {
|
||||||
if (bitmap_p(bitmap, callsite_gc_roots + spill_slot)) {
|
if (bitmap_p(bitmap, callsite_gc_roots + spill_slot)) {
|
||||||
#ifdef DEBUG_GC_MAPS
|
#ifdef DEBUG_GC_MAPS
|
||||||
std::cout << "visiting GC root " << spill_slot << std::endl;
|
FACTOR_PRINT("visiting GC root " << spill_slot);
|
||||||
#endif
|
#endif
|
||||||
visitor->visit_handle(stack_pointer + spill_slot);
|
visitor->visit_handle(stack_pointer + spill_slot);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue