summaryrefslogtreecommitdiff
path: root/.gdbinit.tmpl
diff options
context:
space:
mode:
qemu-gdb target and script
Diffstat (limited to '.gdbinit.tmpl')
-rw-r--r--.gdbinit.tmpl28
1 files changed, 28 insertions, 0 deletions
diff --git a/.gdbinit.tmpl b/.gdbinit.tmpl
new file mode 100644
index 0000000..4c4e734
--- /dev/null
+++ b/.gdbinit.tmpl
@@ -0,0 +1,28 @@
+set $lastcs = -1
+
+# This fails on Darwin because the default gdb has no ELF support
+# echo + symbol-file obj/kern/kernel\n
+# symbol-file obj/kern/kernel
+
+define hook-stop
+ # There doesn't seem to be a good way to detect if we're in 16- or
+ # 32-bit mode, but in 32-bit mode we always run with CS == 8 in the
+ # kernel and CS == 35 in user space
+ if $cs == 8 || $cs == 35
+ if $lastcs != 8 && $lastcs != 35
+ set architecture i386
+ end
+ x/i $pc
+ else
+ if $lastcs == -1 || $lastcs == 8 || $lastcs == 35
+ set architecture i8086
+ end
+ # Translate the segment:offset into a physical address
+ printf "[%4x:%4x] ", $cs, $eip
+ x/i $cs*16+$eip
+ end
+ set $lastcs = $cs
+end
+
+echo + target remote localhost:1234\n
+target remote localhost:1234