Browse Source

Add GDB utility functions to load/inspect binary dumps

Yuri D'Elia 2 years ago
parent
commit
500515eb0a
1 changed files with 82 additions and 0 deletions
  1. 82 0
      tools/utils.gdb

+ 82 - 0
tools/utils.gdb

@@ -0,0 +1,82 @@
+# -*- gdb-script -*-
+
+define load_dump
+  restore $arg0 binary 0x800000
+  set $pc = (((unsigned long)$arg1) - 2) << 1
+  set $sp = $arg2
+  where
+end
+
+document load_dump
+Load a crash dump, setup PC/SP and show the current backtrace
+Usage: load_dump <file> <pc-addr> <sp-addr>
+end
+
+
+define sp_skip
+  if $argc == 0
+    set $shift = 3
+  else
+    set $shift = $arg0
+  end
+  set $new_pc = ((((unsigned long)*(uint8_t*)($sp+$shift+1)) << 16) + \
+                 (((unsigned long)*(uint8_t*)($sp+$shift+2)) << 8) + \
+                 (((unsigned long)*(uint8_t*)($sp+$shift+3)) << 0)) << 1
+  set $new_sp = $sp+$shift+3
+  select-frame 0
+  set $saved_pc = $pc
+  set $saved_sp = $sp
+  set $pc = $new_pc
+  set $sp = $new_sp
+  where
+end
+
+document sp_skip
+TODO
+end
+
+
+define sp_restore
+  select-frame 0
+  set $pc = $saved_pc
+  set $sp = $saved_sp
+  where
+end
+
+document sp_restore
+TODO
+end
+
+
+define sp_test
+  sp_skip $arg0
+  set $pc = $saved_pc
+  set $sp = $saved_sp
+end
+
+document sp_test
+TODO
+end
+
+
+define sp_scan
+  dont-repeat
+
+  if $argc == 0
+    set $sp_end = 0x802200
+  else
+    set $sp_end = $arg0
+  end
+
+  set $sp_pos = $sp
+  while $sp_pos < ($sp_end-4)
+    set $sp_off = $sp_pos - $sp
+    printf "**** scanning %#x (+%u) ****\n", $sp_pos, $sp_off
+    sp_test $sp_off
+    set $sp_pos += 1
+  end
+end
+
+document sp_scan
+TODO
+end