From b0212309664363e832404fe80b959397314909c2 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Fri, 22 Mar 2019 21:52:42 -0700 Subject: 5016 --- subx/010---vm.cc | 9 ++++++++- subx/039debug.cc | 8 ++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/subx/010---vm.cc b/subx/010---vm.cc index 4c346a3d..3def0ff9 100644 --- a/subx/010---vm.cc +++ b/subx/010---vm.cc @@ -302,7 +302,7 @@ void run_one_instruction() { } uint32_t inst_start_address = EIP; op = next(); - trace(Callstack_depth, "run") << "0x" << HEXWORD << inst_start_address << " opcode: " << HEXBYTE << NUM(op) << (op == 0xe8 ? "/call" : "") << end(); + trace(Callstack_depth, "run") << "0x" << HEXWORD << inst_start_address << " opcode: " << HEXBYTE << NUM(op) << call_label(op) << end(); switch (op) { case 0xf4: // hlt EIP = End_of_program; @@ -375,6 +375,13 @@ void dump_registers() { trace(Callstack_depth+1, "run") << out.str() << end(); } +// debugging info from a later layer +string call_label(uint8_t op) { + if (op != 0xe8) return ""; + // End Trace Call Instruction + return "/call"; +} + //: start tracking supported opcodes :(before "End Globals") map Name; diff --git a/subx/039debug.cc b/subx/039debug.cc index 9078acf2..fc0b622b 100644 --- a/subx/039debug.cc +++ b/subx/039debug.cc @@ -24,6 +24,14 @@ void load_map(const string& map_filename) { if (contains_key(Symbol_name, EIP)) trace(Callstack_depth, "run") << "== label " << get(Symbol_name, EIP) << end(); +//: make calls in particular more salient +:(before "End Trace Call Instruction") +// at this point we've skipped past the e8 opcode, but not the offset operand +int32_t offset = read_mem_i32(EIP); +uint32_t next_eip = EIP+offset+4; +if (contains_key(Symbol_name, next_eip)) + return "/call "+get(Symbol_name, next_eip); + //: If a label starts with '$watch-', make a note of the effective address //: computed by the next instruction. Start dumping out its contents to the //: trace after every subsequent instruction. -- cgit 1.4.1-2-gfad0