summaryrefslogtreecommitdiff
path: root/gdbinit
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2008-09-25 12:07:52 +0200
committerAndy Wingo <wingo@pobox.com>2008-09-25 12:07:52 +0200
commitff1592a106f9a28dcbbd77939db0b2c1f9b27064 (patch)
tree8ee43457c4a2d1a0d40dd3dc9e6af045dba8c3d2 /gdbinit
parent76282387eaaeccb2a3d307d9f4df9e423885aad2 (diff)
add gdbinit for debugging the vm
* gdbinit: Add my gdbinit. The most useful commands are gwrite and vmstack.
Diffstat (limited to 'gdbinit')
-rw-r--r--gdbinit188
1 files changed, 188 insertions, 0 deletions
diff --git a/gdbinit b/gdbinit
new file mode 100644
index 000000000..40c8f62bc
--- /dev/null
+++ b/gdbinit
@@ -0,0 +1,188 @@
+define newline
+ call (void)scm_newline (scm_current_error_port ())
+end
+
+define gdisplay
+ call (void)scm_display ($arg0, scm_current_error_port ())
+ newline
+end
+
+define gwrite
+ call (void)scm_write ($arg0, scm_current_error_port ())
+ newline
+end
+
+define sputs
+ call (void)scm_puts ($arg0, scm_current_error_port ())
+end
+
+define gslot
+ print ((SCM**)$arg0)[1][$arg1]
+end
+
+define pslot
+ gslot $arg0 $arg1
+ gwrite $
+end
+
+define lforeach
+ set $l=$arg0
+ while $l != 0x404
+ set $x=scm_car($l)
+ $arg1 $x
+ set $l = scm_cdr($l)
+ end
+end
+
+define modsum
+ modname $arg0
+ gslot $arg0 1
+ set $uses=$
+ output "uses:\n"
+ lforeach $uses modname
+end
+
+define moduses
+ pslot $arg0 1
+end
+
+define modname
+ pslot $arg0 5
+end
+
+define modkind
+ pslot $arg0 6
+end
+
+define car
+ call scm_car ($arg0)
+end
+
+define cdr
+ call scm_cdr ($arg0)
+end
+
+define smobwordtox
+ set $x=((SCM*)$arg0)[$arg1]
+end
+
+define smobdatatox
+ smobwordtox $arg0 1
+end
+
+define program
+ smobdatatox $arg0
+ p *(struct scm_program*)$x
+end
+
+define proglocals
+ set $i=bp->nlocs
+ while $i > 0
+ set $i=$i-1
+ gwrite fp[bp->nargs+$i]
+ end
+end
+
+define progstack
+ set $x=sp
+ while $x > stack_base
+ gwrite *$x
+ set $x=$x-1
+ end
+end
+
+define tc16
+ p ((scm_t_bits)$arg0) & 0xffff
+end
+
+define smobdescriptor
+ p scm_smobs[0xff & (((scm_t_bits)$arg0) >> 8)]
+end
+
+define vmstack
+ set $vmsp=sp
+ set $vmstack_base=stack_base
+ set $vmfp=fp
+ set $vmbp=bp
+ set $vmframe=0
+ while $vmsp > vp->stack_base
+ set $orig_vmsp=$vmsp
+ while $vmsp > $vmstack_base
+ output $orig_vmsp - $vmsp
+ sputs "\t"
+ output $vmsp
+ sputs "\t"
+ gwrite *$vmsp
+ set $vmsp=$vmsp-1
+ end
+ newline
+ sputs "Frame "
+ output $vmframe
+ newline
+ sputs "ra:\t"
+ output $vmsp
+ sputs "\t"
+ output (SCM*)*$vmsp
+ set $vmsp=$vmsp-1
+ newline
+ sputs "mvra:\t"
+ output $vmsp
+ sputs "\t"
+ output (SCM*)*$vmsp
+ set $vmsp=$vmsp-1
+ newline
+ sputs "dl:\t"
+ output $vmsp
+ sputs "\t"
+ set $vmdl=(SCM*)(*$vmsp)
+ output $vmdl
+ newline
+ set $vmsp=$vmsp-1
+ sputs "hl:\t"
+ output $vmsp
+ sputs "\t"
+ gwrite *$vmsp
+ set $vmsp=$vmsp-1
+ sputs "el:\t"
+ output $vmsp
+ sputs "\t"
+ gwrite *$vmsp
+ set $vmsp=$vmsp-1
+ set $vmnlocs=(int)$vmbp->nlocs
+ while $vmnlocs > 0
+ sputs "loc #"
+ output $vmnlocs
+ sputs ":\t"
+ output $vmsp
+ sputs "\t"
+ gwrite *$vmsp
+ set $vmsp=$vmsp-1
+ set $vmnlocs=$vmnlocs-1
+ end
+ set $vmnargs=(int)$vmbp->nargs
+ while $vmnargs > 0
+ sputs "arg #"
+ output $vmnargs
+ sputs ":\t"
+ output $vmsp
+ sputs "\t"
+ gwrite *$vmsp
+ set $vmsp=$vmsp-1
+ set $vmnargs=$vmnargs-1
+ end
+ sputs "prog:\t"
+ output $vmsp
+ sputs "\t"
+ gwrite *$vmsp
+ set $vmsp=$vmsp-1
+ newline
+ if !$vmdl
+ loop_break
+ end
+ set $vmfp=$vmdl
+ set $vmbp=(struct scm_program*)(((SCM*)($vmfp[-1]))[1])
+ set $vmstack_base=$vmfp+$vmbp->nargs+$vmbp->nlocs+4
+ set $vmframe=$vmframe+1
+ newline
+ end
+end