aboutsummaryrefslogblamecommitdiff
path: root/tools/debugscripts/gdbinit.vinum
blob: 7ddfb5e989444435907e16f59fb44a6017877030 (plain) (tree)













































































































































































































































































































































                                                                                                                                                                                                                                                                               
# $FreeBSD$
# gdb macros for debugging Vinum.
# This file gets included from the .gdbinit files in 
# the kernel build directory and /var/crash.
# Normally you won't need to include it directly.
# see gdbinit(9) for further details.

# Show information about the request pointed to by the variable rq in the current frame.
define rq
rqq rq
end
document rq
Show information about the request pointed to by the variable rq in the current frame.
end

# Show information about the request (struct rq) pointed at by the parameter
define rqq
set $rq = (struct request *) $arg0
printf "Request: \n" 
output/x *$rq
printf "\n"
bpp $rq->bp
set $rqg = $rq->rqg
while ($rqg != 0)
  printf "\nRequest group at %x:\n", $rqg
  output/x *$rqg
  printf "\n"
  set $rqno = 0
  while ($rqno < $rqg->count)
    printf "rqg->rqe [%d]: ", $rqno
    rrqe &$rqg->rqe[$rqno]
    set $rqno = $rqno + 1
    end
  set $rqg = $rqg->next
  end
end
document rqq
Show information about the request (struct rq) pointed at by the parameter
end

# Show information about the request element pointed to by the variable rqe in the current frame.
define rqe
rrqe rqe
end
document rqe
Show information about the request element pointed to by the variable rqe in the current frame.
end

# Show information about the request element (struct rqe) pointed at by the parameter.
define rrqe
set $rqe = (struct rqelement *) $arg0
    printf "sdoffset 0x%x, useroffset 0x%x, dataoffset 0x%x, datalen 0x%x, groupoffset 0x%x, grouplen 0x%x, buflen 0x%x\n", \
      $rqe->sdoffset, \
      $rqe->useroffset, \
      $rqe->dataoffset, \
      $rqe->datalen, \
      $rqe->groupoffset, \
      $rqe->grouplen, \
      $rqe->buflen
    printf "  Flags 0x%x,  Subdisk %d  Drive %d\n", \
      $rqe->flags, \
      $rqe->sdno, \
      $rqe->driveno
    bpp &$rqe->b
end
document rrqe
Show information about the request element (struct rqe) pointed at by the parameter.
end

define rqq0
printf "rq->prq [0].rqe[0].sdno: " 
output/x rq->prq[0].rqe[0].sdno
printf "\nBuffer: device: " 
output/x rq->prq[0].rqe[0].b.b_dev
printf " data: " 
output/x rq->prq[0].rqe[0].b.b_data
printf " length: " 
output/x rq->prq[0].rqe[0].b.b_bcount
printf " drive offset: " 
output/x rq->prq[0].rqe[0].b.b_blkno
printf " subdisk offset: " 
output/x rq->prq[0].rqe[0].sdoffset
printf "\nFlags: " 
if (rq->prq[0].rqe[0].b.b_flags & 0x10)
printf "busy "
end
if (rq->prq[0].rqe[0].b.b_flags & 0x200)
printf "done "
end
if (rq->prq[0].rqe[0].b.b_flags & 0x800)
printf "error "
end
if (rq->prq[0].rqe[0].b.b_flags & 0x100000)
printf "read "
end
output/x rq->prq[0].rqe[0].b.b_flags
printf "\nrq->prq [0].rqe[1].sdno: " 
output/x rq->prq[0].rqe[1].sdno
printf "\nBuffer: device: " 
output/x rq->prq[0].rqe[1].b.b_dev
printf " data: " 
output/x rq->prq[0].rqe[1].b.b_data
printf " length: " 
output/x rq->prq[0].rqe[1].b.b_bcount
printf " drive offset: " 
output/x rq->prq[0].rqe[1].b.b_blkno
printf " subdisk offset: " 
output/x rq->prq[0].rqe[1].sdoffset
printf "\nFlags: " 
output/x rq->prq[0].rqe[1].b.b_flags
echo \n
end
define rqq1
printf "\nrq->prq [1].rqe[0].sdno: " 
output/x rq->prq[1].rqe[0].sdno
printf "\nBuffer: device: " 
output/x rq->prq[1].rqe[0].b.b_dev
printf " data: " 
output/x rq->prq[1].rqe[0].b.b_data
printf " length: " 
output/x rq->prq[1].rqe[0].b.b_bcount
printf " drive offset: " 
output/x rq->prq[1].rqe[0].b.b_blkno
printf " subdisk offset: " 
output/x rq->prq[1].rqe[0].sdoffset
printf "\nFlags: " 
output/x rq->prq[1].rqe[0].b.b_flags
printf "\nrq->prq [1].rqe[1].sdno: " 
output/x rq->prq[1].rqe[1].sdno
printf "\nBuffer: device: " 
output/x rq->prq[1].rqe[1].b.b_dev
printf " data: 0x%x  length 0x%x  drive offset 0x%x  sd offset 0x%x\n" rq->prq[1].rqe[1].b.b_data,
 rq->prq[1].rqe[1].b.b_bcount,
 rq->prq[1].rqe[1].b.b_blkno,
 rq->prq[1].rqe[1].sdoffset
printf "\nFlags: " 
output/x rq->prq[1].rqe[1].b.b_flags
echo \n
end
define xy
bpp
echo stripeoffset
p stripeoffset
echo stripebase
p stripebase
echo sdno
p sdno
echo sdoffset
p sdoffset
echo rqe->sectors
p rqe->sectors
echo rqe->sdoffset
p rqe->sdoffset
end
# kernel equivalent of 'info -V'
define rqi
   set $rqipe = rqip
   set $rqip = $rqipe + 1
   set $rqend  = rqinfo + 128
   if ($rqip == $rqend)
      set $rqip = rqinfo
   end
   set $done = 0
   while ($done == 0)
     if ($rqip->bp != 0)
        printf "%X:\t%d.%06d\tUBP: %x\t", $rqip, $rqip->timestamp.tv_sec, $rqip->timestamp.tv_usec, $rqip->bp
        p $rqip->type
	printf " user  "
        bpp $rqip->bp
        if ($rqip->type < loginfo_rqe)
	   printf " copied"
           bpp &$rqip->info
        else 
           rrqe &$rqip->info
        end
      end
      set $rqip = $rqip + 1
      if ($rqip == $rqipe)
         set $done = 1
      end
      if ($rqip == $rqend)
         set $rqip = rqinfo
      end
   end
end
define rqinfo
   set $rqipe = rqip
   set $rqip = $rqipe + 1
   set $rqend  = rqinfo + 128
   if ($rqip == $rqend)
      set $rqip = rqinfo
   end
   set $done = 0
   printf "\nTime\t\t\t Event\t\t     Buf\tDev\t  Offset\tBytes\tSD\tSDoff\tDoffset\tGoffset\n\n"
   while ($done == 0)
     if ($rqip->bp != 0)
        printf "%d.%06d\t", $rqip->timestamp.tv_sec, $rqip->timestamp.tv_usec
	if ($rqip->type ==  loginfo_user_bp)
	  if ($rqip->info.b.b_flags & 0x00100000)
	    printf "1VS Read"
	  else
	    printf "1VS Write"
	  end
	printf "\t%p\t%d.%d\t0x%-9x\t%ld\n", $rqip->bp, $rqip->devmajor, $rqip->devminor & 0xff, $rqip->info.b.b_blkno, $rqip->info.b.b_bcount
	end
	
      if ($rqip->type == loginfo_user_bpl)
	  if ($rqip->info.b.b_flags & 0x00100000)
	    printf "2LR Read"
	  else
	    printf "2LR Write"
	  end
	printf "\t%p\t%d.%d\t0x%-9x\t%ld\n", $rqip->bp, $rqip->devmajor, $rqip->devminor & 0xff, $rqip->info.b.b_blkno, $rqip->info.b.b_bcount
	end
	 
      if ($rqip->type == loginfo_rqe)
	  if ($rqip->info.b.b_flags & 0x00100000)
	    printf "3RQ Read"
	  else
	    printf "3RQ Write"
	  end
	printf "\t%p\t%d.%d\t0x%-9x\t%ld\t%d\t%x\t%x\t%x\n", $rqip->bp, $rqip->devmajor, $rqip->devminor & 0xff, $rqip->info.rqe.b.b_blkno, $rqip->info.rqe.b.b_bcount, $rqip->info.rqe.sdno, $rqip->info.rqe.sdoffset, $rqip->info.rqe.dataoffset, $rqip->info.rqe.groupoffset
	end
	
      if ($rqip->type == loginfo_iodone)
	  if ($rqip->info.b.b_flags & 0x00100000)
	    printf "4DN Read"
	  else
	    printf "4DN Write"
	  end
	printf "\t%p\t%d.%d\t0x%-9x\t%ld\t%d\t%x\t%x\t%x\n", $rqip->bp, $rqip->devmajor, $rqip->devminor & 0xff, $rqip->info.rqe.b.b_blkno, $rqip->info.rqe.b.b_bcount, $rqip->info.rqe.sdno, $rqip->info.rqe.sdoffset, $rqip->info.rqe.dataoffset, $rqip->info.rqe.groupoffset
	end
	
      if ($rqip->type == loginfo_raid5_data)
	  if ($rqip->info.b.b_flags & 0x00100000)
	    printf "5RD Read"
	  else
	    printf "5RD Write"
	  end
	printf "\t%p\t%d.%d\t0x%-9x\t%ld\t%d\t%x\t%x\t%x\n", $rqip->bp, $rqip->devmajor, $rqip->devminor & 0xff, $rqip->info.rqe.b.b_blkno, $rqip->info.rqe.b.b_bcount, $rqip->info.rqe.sdno, $rqip->info.rqe.sdoffset, $rqip->info.rqe.dataoffset, $rqip->info.rqe.groupoffset
	end
	
      if ($rqip->type == loginfo_raid5_parity)
	  if ($rqip->info.b.b_flags & 0x00100000)
	    printf "6RP Read"
	  else
	    printf "6RP Write"
	  end
	printf "\t%p\t%d.%d\t0x%-9x\t%ld\t%d\t%x\t%x\t%x\n", $rqip->bp, $rqip->devmajor, $rqip->devminor & 0xff, $rqip->info.rqe.b.b_blkno, $rqip->info.rqe.b.b_bcount, $rqip->info.rqe.sdno, $rqip->info.rqe.sdoffset, $rqip->info.rqe.dataoffset, $rqip->info.rqe.groupoffset
	end

      if ($rqip->type == loginfo_sdio)
	  if ($rqip->info.b.b_flags & 0x00100000)
	    printf "7VS Read"
	  else
	    printf "7VS Write"
	  end
	printf "\t%p\t\t  0x%-9x\t%ld\t%d\n", $rqip->bp, $rqip->info.b.b_blkno, $rqip->info.b.b_bcount, $rqip->devminor & 0xff
	end

      if ($rqip->type == loginfo_sdiol)
	  if ($rqip->info.b.b_flags & 0x00100000)
	    printf "8LR Read"
	  else
	    printf "8LR Write"
	  end
	printf "\t%p\t%d.%d\t0x%-9x\t%ld\n", $rqip->bp, $rqip->devmajor, $rqip->devminor & 0xff, $rqip->info.b.b_blkno, $rqip->info.b.b_bcount
	end
	 
      if ($rqip->type == loginfo_lockwait)
	printf "Lockwait  %p\t%d\t  0x%x\n", $rqip->bp, $rqip->info.lockinfo.plexno, $rqip->info.lockinfo.stripe
	end

      if ($rqip->type == loginfo_lock)
	printf "Lock      \t%p\t%d\t  0x%x\n", $rqip->bp, $rqip->info.lockinfo.plexno, $rqip->info.lockinfo.stripe
	end

      if ($rqip->type == loginfo_unlock)
	printf "Unlock    \t%p\t%d\t  0x%x\n", $rqip->bp, $rqip->info.lockinfo.plexno, $rqip->info.lockinfo.stripe
	end

	if ($rqip->type == loginfo_sdiodone)
	  if ($rqip->info.b.b_flags & 0x00100000)
	    printf "9DN Read"
	  else
	    printf "9DN Write"
	  end
	printf "\t%p\t\t  0x%-9x\t%ld\t%d\n", $rqip->bp, $rqip->info.b.b_blkno, $rqip->info.b.b_bcount, $rqip->devminor
	end

	end
      set $rqip = $rqip + 1
      if ($rqip == $rqipe)
         set $done = 1
      end
      if ($rqip == $rqend)
         set $rqip = rqinfo
      end
   end
end 
document rqinfo
Show the Vinum request log buffer, like 'vinum info -V'
end
define meminfo
y
printf "Block\t\tTime\t\tSequence\t  size\t  address\t  line\t\tfile\n"
set $i = 0
while $i < malloccount
  printf "%6d\t%10d.%06d\t%6d\t\t%6d\t0x%08x\t%6d\t\t%s\n", $i, malloced [$i].time.tv_sec, malloced [$i].time.tv_usec, malloced [$i].seq, malloced[$i].size, malloced[$i].address, malloced[$i].line, &malloced[$i].file
  set $i = $i + 1
end
end
document meminfo
Equivalent of 'vinum info -v' command
end
define finfo
y
printf "Block\t\tTime\t\tSequence\t  size\t  address\t  line\t\tfile\n"
set $i = lastfree
set $j = 0
while $j < 64
  if $i == 64
    set $i = 0
  end
  if freeinfo[$i].line != 0
    printf "%6d\t%10d.%06d\t%6d\t\t%6d\t0x%08x\t%6d\t\t%s\n", $i, freeinfo [$i].time.tv_sec, freeinfo [$i].time.tv_usec, freeinfo [$i].seq, freeinfo[$i].size, freeinfo[$i].address, freeinfo[$i].line, &freeinfo[$i].file
  end
  set $i = $i + 1
  set $j = $j + 1
end
end
document finfo
Equivalent of 'vinum info -v' command
end