Showing the changes to src/exec/debugger.cpp (1 of 4 files). Show all
Unified · Split
| @@ -19,7 +19,7 @@ using namespace disvm::runtime; · 18 unmodified lines | ||
| 19 | 19 | |
| 20 | 20 | namespace |
| 21 | 21 | { |
| 22 | − std::string to_string_stack(vm_registers_t &r) | |
| 22 | + std::string stack_to_string(const vm_registers_t &r) | |
| 23 | 23 | { |
| 24 | 24 | auto msg = std::stringstream{}; |
| 25 | 25 | walk_stack(r, [&msg](const pointer_t, const vm_pc_t pc, const vm_module_ref_t &module_ref) |
| @@ -35,6 +35,20 @@ namespace · 9 unmodified lines | ||
| 35 | 35 | return msg.str(); |
| 36 | 36 | } |
| 37 | 37 | |
| 38 | + std::string registers_to_string(const vm_registers_t &r) | |
| 39 | + { | |
| 40 | + auto register_string = std::stringstream{}; | |
| 41 | + | |
| 42 | + register_string | |
| 43 | + << "Registers:\n" | |
| 44 | + << " Thread ID: " << r.thread.get_thread_id() << "\n" | |
| 45 | + << " Module: " << r.module_ref->module->module_name->str() << "\n" | |
| 46 | + << "Program counter: " << r.pc << "\n" | |
| 47 | + << " Opcode: " << r.module_ref->code_section[r.pc].op << "\n"; | |
| 48 | + | |
| 49 | + return register_string.str(); | |
| 50 | + } | |
| 51 | + | |
| 38 | 52 | std::ostream& operator<<(std::ostream &ss, const vm_string_t *s) |
| 39 | 53 | { |
| 40 | 54 | ss << "string\n" |
| @@ -76,81 +90,6 @@ namespace · 35 unmodified lines | ||
| 76 | 90 | return ss; |
| 77 | 91 | } |
| 78 | 92 | |
| 79 | − std::ostream& operator<<(std::ostream &ss, const inst_data_generic_t &m) | |
| 80 | − { | |
| 81 | − switch (m.mode) | |
| 82 | − { | |
| 83 | − case address_mode_t::offset_indirect_mp: | |
| 84 | − ss << m.register1 << "(mp)"; | |
| 85 | − break; | |
| 86 | − case address_mode_t::offset_indirect_fp: | |
| 87 | − ss << m.register1 << "(fp)"; | |
| 88 | − break; | |
| 89 | − case address_mode_t::immediate: | |
| 90 | − ss << "$" << m.register1; | |
| 91 | − break; | |
| 92 | − case address_mode_t::none: | |
| 93 | − ss << "_"; | |
| 94 | − break; | |
| 95 | − case address_mode_t::offset_double_indirect_mp: | |
| 96 | − ss << m.register2 << "(" << m.register1 << "(mp))"; | |
| 97 | − break; | |
| 98 | − case address_mode_t::offset_double_indirect_fp: | |
| 99 | − ss << m.register2 << "(" << m.register1 << "(fp))"; | |
| 100 | − break; | |
| 101 | − | |
| 102 | − case address_mode_t::reserved_1: | |
| 103 | − case address_mode_t::reserved_2: | |
| 104 | − default: | |
| 105 | − ss << "??"; | |
| 106 | − } | |
| 107 | − | |
| 108 | − return ss; | |
| 109 | − } | |
| 110 | − | |
| 111 | − std::ostream& operator<<(std::ostream &ss, const middle_data_t &m) | |
| 112 | − { | |
| 113 | − switch (m.mode) | |
| 114 | − { | |
| 115 | − case address_mode_middle_t::none: | |
| 116 | − ss << "_"; | |
| 117 | − break; | |
| 118 | − case address_mode_middle_t::small_immediate: | |
| 119 | − ss << "$" << m.register1; | |
| 120 | − break; | |
| 121 | − case address_mode_middle_t::small_offset_indirect_fp: | |
| 122 | − ss << m.register1 << "(fp)"; | |
| 123 | − break; | |
| 124 | − case address_mode_middle_t::small_offset_indirect_mp: | |
| 125 | − ss << m.register1 << "(mp)"; | |
| 126 | − break; | |
| 127 | − default: | |
| 128 | − ss << "??"; | |
| 129 | − } | |
| 130 | − | |
| 131 | − return ss; | |
| 132 | − } | |
| 133 | − | |
| 134 | − std::ostream& operator<<(std::ostream &ss, const vm_exec_op_t &m) | |
| 135 | − { | |
| 136 | − const auto print_d = m.destination.mode != address_mode_t::none; | |
| 137 | − const auto print_m = print_d || m.middle.mode != address_mode_middle_t::none; | |
| 138 | − const auto print_s = print_m || m.source.mode != address_mode_t::none; | |
| 139 | − | |
| 140 | − ss << assembly::opcode_to_token(m.opcode); | |
| 141 | − | |
| 142 | − if (print_s) | |
| 143 | − ss << " " << m.source; | |
| 144 | − | |
| 145 | − if (print_m) | |
| 146 | − ss << " " << m.middle; | |
| 147 | − | |
| 148 | − if (print_d) | |
| 149 | − ss << " " << m.destination; | |
| 150 | − | |
| 151 | − return ss; | |
| 152 | − } | |
| 153 | − | |
| 154 | 93 | std::string to_string_frame_pointers(vm_registers_t &r) |
| 155 | 94 | { |
| 156 | 95 | auto frame = r.stack.peek_frame(); |
| @@ -178,20 +117,6 @@ namespace · 21 unmodified lines | ||
| 178 | 117 | return frame_string.str(); |
| 179 | 118 | } |
| 180 | 119 | |
| 181 | − std::string to_string_registers(const vm_registers_t &r) | |
| 182 | − { | |
| 183 | − auto register_string = std::stringstream{}; | |
| 184 | − | |
| 185 | − register_string | |
| 186 | − << "Registers:\n" | |
| 187 | − << " Thread ID: " << r.thread.get_thread_id() << "\n" | |
| 188 | − << " Module: " << r.module_ref->module->module_name->str() << "\n" | |
| 189 | − << "Program counter: " << r.pc << "\n" | |
| 190 | − << " Opcode: " << r.module_ref->code_section[r.pc].op << "\n"; | |
| 191 | − | |
| 192 | − return register_string.str(); | |
| 193 | − } | |
| 194 | − | |
| 195 | 120 | namespace console_modifiers |
| 196 | 121 | { |
| 197 | 122 | #define CSI "\33[" |
| @@ -276,22 +201,13 @@ R"(Help: · 78 unmodified lines | ||
| 276 | 201 | auto c = std::toupper(cmd[0], loc); |
| 277 | 202 | if (c == 'R') |
| 278 | 203 | { |
| 279 | − auto r_str = to_string_registers(r); | |
| 280 | − debug_print_info(r_str); | |
| 204 | + auto str = registers_to_string(r); | |
| 205 | + debug_print_info(str); | |
| 281 | 206 | } |
| 282 | 207 | else if (c == 'W') |
| 283 | 208 | { |
| 284 | − auto msg = std::stringstream{}; | |
| 285 | − walk_stack(r, [&msg](const pointer_t, const vm_pc_t pc, const vm_module_ref_t &module_ref) { | |
| 286 | − auto module_name = "<No Name>"; | |
| 287 | − if (module_ref.module->module_name != nullptr) | |
| 288 | − module_name = module_ref.module->module_name->str(); | |
| 289 | − | |
| 290 | − msg << "\t" << module_name << "@" << pc << "\n"; | |
| 291 | − return true; | |
| 292 | − }); | |
| 293 | − | |
| 294 | − debug_print_info(msg.str()); | |
| 209 | + auto str = stack_to_string(r); | |
| 210 | + debug_print_info(str); | |
| 295 | 211 | } |
| 296 | 212 | else if (c == 'C') |
| 297 | 213 | { |