about summary refs log tree commit diff stats
path: root/subx/012elf.cc
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2019-02-23 13:35:19 -0800
committerKartik Agaram <vc@akkartik.com>2019-02-23 13:35:19 -0800
commite5998f74ac29bb4bf2aedfdd6fbea801ffdb08f6 (patch)
tree28b5476fa39c2791be3a89fce05f0847ed75c24d /subx/012elf.cc
parented4e645306a3679cebe1ef273f3a33221d713f23 (diff)
downloadmu-e5998f74ac29bb4bf2aedfdd6fbea801ffdb08f6.tar.gz
4986 - spending some time improving SubX traces
Now that our test runs are getting longer, debugging is again becoming a
bottleneck. Time to start using trace depths along with `mu browse-trace`
from the top-level.
Diffstat (limited to 'subx/012elf.cc')
-rw-r--r--subx/012elf.cc11
1 files changed, 7 insertions, 4 deletions
diff --git a/subx/012elf.cc b/subx/012elf.cc
index 47aba102..5220d18d 100644
--- a/subx/012elf.cc
+++ b/subx/012elf.cc
@@ -137,14 +137,17 @@ const int DATA_SEGMENT = 0x0a000000;  // keep sync'd with `Heap.limit` in alloca
 const int STACK_SEGMENT = 0x0b000000;
 const int AFTER_STACK = 0x0c000000;
 const int ARGV_DATA_SEGMENT = 0x0c000000;
+:(before "End Dump Info for Instruction")
+//? dump_stack();  // slow
 :(code)
 void dump_stack() {
-  cerr << "stack:\n";
+  ostringstream out;
+  trace(91, "run") << "stack:" << end();
   for (uint32_t a = AFTER_STACK-4;  a > Reg[ESP].u;  a -= 4)
-    cerr << "  0x" << HEXWORD << a << " => 0x" << HEXWORD << read_mem_u32(a) << '\n';
-  cerr << "  0x" << HEXWORD << Reg[ESP].u << " => 0x" << HEXWORD << read_mem_u32(Reg[ESP].u) << "  <=== ESP\n";
+    trace(91, "run") << "  0x" << HEXWORD << a << " => 0x" << HEXWORD << read_mem_u32(a) << end();
+  trace(91, "run") << "  0x" << HEXWORD << Reg[ESP].u << " => 0x" << HEXWORD << read_mem_u32(Reg[ESP].u) << "  <=== ESP" << end();
   for (uint32_t a = Reg[ESP].u-4;  a > Reg[ESP].u-40;  a -= 4)
-    cerr << "  0x" << HEXWORD << a << " => 0x" << HEXWORD << read_mem_u32(a) << '\n';
+    trace(91, "run") << "  0x" << HEXWORD << a << " => 0x" << HEXWORD << read_mem_u32(a) << end();
 }
 
 inline uint32_t u32_in(uint8_t* p) {