diff --git a/dotfiles/gdbinit b/dotfiles/gdbinit new file mode 100644 index 00000000..1cef8ee1 --- /dev/null +++ b/dotfiles/gdbinit @@ -0,0 +1,169 @@ +# Change $r13 to whatever BaseReg is mapped to +define pregs +print *(StgRegTable *)$r13 +end + +define ptso +print *((StgRegTable*)$r13)->rCurrentTSO +end + +define pR1 +print (((StgRegTable)MainRegTable).rR1) +end +define pR2 +print (((StgRegTable)MainRegTable).rR2) +end +define pR3 +print (((StgRegTable)MainRegTable).rR3) +end +define pR4 +print (((StgRegTable)MainRegTable).rR4) +end +define pR5 +print (((StgRegTable)MainRegTable).rR5) +end +define pR6 +print (((StgRegTable)MainRegTable).rR6) +end +define pR7 +print (((StgRegTable)MainRegTable).rR7) +end +define pR8 +print (((StgRegTable)MainRegTable).rR8) +end +define pFlt1 +print (StgFloat) (((StgRegTable)MainRegTable).rFlt1) +end +define pDbl1 +print (StgDouble) (((StgRegTable)MainRegTable).rDbl1) +end + +define pSp +print (((StgRegTable)MainRegTable).rSp) +end +define pSu +print (((StgRegTable)MainRegTable).rSu) +end +define pSpLim +print (((StgRegTable)MainRegTable).rSpLim) +end + +define pHp +print (((StgRegTable)MainRegTable).rHp) +end +define pHpLim +print (((StgRegTable)MainRegTable).rHpLim) +end + +# Change $rbp to whatever Sp is mapped to +define pstk +pmem $ebp 16 +end + +define pstk_gc +pmem MainTSO->sp 16 +end + +define pmem +set $i = $arg1 +set $mem = ((unsigned long)$arg0) & (sizeof(void*)==8 ? ~7 : ~3) +while $i > 0 +set $i = $i - 1 +x/1a (((long *)$mem) +$i) +end +end + +define p4 +pmem $arg0 4 +end + +define p8 +pmem $arg0 8 +end + +define p16 +pmem $arg0 16 +end + +define pmem_forwards +set $mem = $arg0 & (sizeof(void*)==8 ? ~7 : ~3) +set $i = 0 +while $i < $arg1 +x/1a (((int *)$mem) + $i) +set $i = $i + 1 +end +end + +define pheap +pmem $edi-16 16 +end + +define dpc +display /i $pc +end + +define pinfo +p *((StgInfoTable *)$arg0-1) +end + +define pcinfo +p *((StgConInfoTable *)$arg0-1) +end + +define prinfo +p *((StgRetInfoTable *)$arg0-1) +end + +define pfinfo +p *((StgFunInfoTable *)$arg0-1) +end + +define pbd +p sizeof(void *)==8 ? (* ((bdescr *)((($arg0 & 0xfffffffffff00000) | (($arg0 & 0xff000) >> 6)) & 0xffffffffffffffc0))) : * ((bdescr *)((($arg0 & 0xfff00000) | (($arg0 & 0xff000) >> 7)) & 0xffffffe0)) +end + +define pgen +p generations[((bdescr *)((($arg0 & 0xfff00000) | (($arg0 & 0xff000) >> 7)) & 0xffffffe0))->gen_no] +p * ((bdescr *)((($arg0 & 0xfff00000) | (($arg0 & 0xff000) >> 7)) & 0xffffffe0))->step +end + +define getmark +set $bd = (bdescr *)((($arg0 & 0xfff00000) | (($arg0 & 0xff000) >> 7)) & 0xffffffe0) +set $offset = (StgPtr)$arg0 - $bd->start +set $bitmap_word = $bd->u.bitmap + ($offset / 32) +set $mask = 1 << ($offset & 31) +p (*$bitmap_word & $mask) != 0 +end + +define getmark64 +set $bd = (bdescr *)((($arg0 & 0xfffffffffff00000) | (($arg0 & 0xff000) >> 6)) & 0xffffffffffffffc0) +set $offset = (StgPtr)$arg0 - $bd->start +set $bitmap_word = $bd->u.bitmap + ($offset / 64) +set $mask = 1 << ($offset & 63) +p (*$bitmap_word & $mask) != 0 +end + +# ignore SIGPIPEs +handle SIGPIPE nostop noprint ignore + +define debug1 +p RtsFlags.DebugFlags.interpreter=1 +p RtsFlags.DebugFlags.apply=1 +p RtsFlags.DebugFlags.sanity=1 +end + +define debug2 +p RtsFlags.DebugFlags.interpreter=1 +p RtsFlags.DebugFlags.sanity=1 +end + +define sanity +p RtsFlags.DebugFlags.sanity=1 +end + +define srch +print findPtr($1,0) +end +define chain +print findPtr($1,1) +end