From ff1592a106f9a28dcbbd77939db0b2c1f9b27064 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Thu, 25 Sep 2008 12:07:52 +0200 Subject: [PATCH 1/1] add gdbinit for debugging the vm * gdbinit: Add my gdbinit. The most useful commands are gwrite and vmstack. --- gdbinit | 188 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 gdbinit 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 -- 2.20.1