xref: /dragonfly/sys/dev/raid/vinum/.gdbinit.kernel (revision 9b5a9965)
1# $DragonFly: src/sys/dev/raid/vinum/.gdbinit.kernel,v 1.8 2007/05/09 00:53:34 dillon Exp $
2set remotebaud 38400
3set remotetimeout 1
4set complaints 1
5set print pretty
6define xi
7x/10i $eip
8end
9define xs
10x/12x $esp
11end
12define xb
13x/12x $ebp
14end
15define z
16ni
17x/1i $eip
18end
19define zs
20si
21x/1i $eip
22end
23define xp
24printf "      esp: "
25output/x $esp
26echo  (
27output (((int)$ebp)-(int)$esp)/4-4
28printf " words on stack)\n      ebp: "
29output/x $ebp
30printf "\n      eip: "
31x/1i $eip
32printf "Saved ebp: "
33output/x *(int*)$ebp
34printf " (maximum of "
35output ((*(int*)$ebp)-(int)$ebp)/4-4
36printf " parameters possible)\nSaved eip: "
37x/1i *(int*)($ebp+4)
38printf "\nParm 1 at "
39output/x (int) ($ebp+8)
40printf ":    "
41output (char*) *(int*)($ebp+8)
42printf "\nParm 2 at "
43output/x (int) ($ebp+12)
44printf ":    "
45output (char*) *(int*)($ebp+12)
46printf "\nParm 3 at "
47output/x (int) ($ebp+16)
48printf ":    "
49output (char*) *(int*)($ebp+16)
50printf "\nParm 4 at "
51output/x (int) ($ebp+20)
52printf ":    "
53output (char*) *(int*)($ebp+20)
54echo \n
55end
56document xp
57Show the register contents and the first four parameter
58words of the current frame.
59end
60define xxp
61printf "      esp: "
62output/x $esp
63printf "\n      ebp: "
64output/x $ebp
65printf "\n      eip: "
66x/1i $eip
67printf "Saved ebp: "
68output/x *(int*)$ebp
69printf " (maximum of "
70output ((*(int*)$ebp)-(int)$ebp)/4-4
71printf " parameters possible)\nSaved eip: "
72x/1i *(int*)($ebp+4)
73printf "\nParm  1 at "
74output/x (int) ($ebp+8)
75printf ":    "
76output (char*) *(int*)($ebp+8)
77printf "\nParm  2 at "
78output/x (int) ($ebp+12)
79printf ":    "
80output (char*) *(int*)($ebp+12)
81printf "\nParm  3 at "
82output/x (int) ($ebp+16)
83printf ":    "
84output (char*) *(int*)($ebp+16)
85printf "\nParm  4 at "
86output/x (int) ($ebp+20)
87printf ":    "
88output (char*) *(int*)($ebp+20)
89printf "\nParm  5 at "
90output/x (int) ($ebp+24)
91printf ":    "
92output (char*) *(int*)($ebp+24)
93printf "\nParm  6 at "
94output/x (int) ($ebp+28)
95printf ":    "
96output (char*) *(int*)($ebp+28)
97printf "\nParm  7 at "
98output/x (int) ($ebp+32)
99printf ":    "
100output (char*) *(int*)($ebp+32)
101printf "\nParm  8 at "
102output/x (int) ($ebp+36)
103printf ":    "
104output (char*) *(int*)($ebp+36)
105printf "\nParm  9 at "
106output/x (int) ($ebp+40)
107printf ":    "
108output (char*) *(int*)($ebp+40)
109printf "\nParm 10 at "
110output/x (int) ($ebp+44)
111printf ":    "
112output (char*) *(int*)($ebp+44)
113echo \n
114end
115document xxp
116Show the register contents and the first ten parameter
117words of the current frame.
118end
119define xp0
120x/12x *(int*)$esp
121p *(int*)$esp
122p (char*)*$esp
123end
124define xp1
125x/12x *(int*)($ebp+4)
126p *(int*)($ebp+4)
127p (char**)($ebp+4)
128end
129define xp2
130x/12x *(int*)($ebp+8)
131p *(int*)($ebp+8)
132p *(char**)($ebp+8)
133end
134define xp3
135x/12x *(int*)($ebp+12)
136p *(int*)($ebp+12)
137p (char**)($ebp+12)
138end
139define xp4
140x/12x *(int*)($ebp+16)
141p *(int*)($ebp+16)
142p (char**)($ebp+16)
143end
144document xp0
145Show the first parameter of current stack frame in various formats
146end
147document xp1
148Show the second parameter of current stack frame in various formats
149end
150document xp2
151Show the third parameter of current stack frame in various formats
152end
153document xp3
154Show the fourth parameter of current stack frame in various formats
155end
156document xp4
157Show the fifth parameter of current stack frame in various formats
158end
159define f0
160f 0
161xp
162end
163define f1
164f 1
165xp
166end
167define f2
168f 2
169xp
170end
171define f3
172f 3
173xp
174end
175define f4
176f 4
177xp
178end
179define f5
180f 5
181xp
182end
183document f0
184Select stack frame 0 and show assembler-level details
185end
186document f1
187Select stack frame 1 and show assembler-level details
188end
189document f2
190Select stack frame 2 and show assembler-level details
191end
192document f3
193Select stack frame 3 and show assembler-level details
194end
195document f4
196Select stack frame 4 and show assembler-level details
197end
198document f5
199Select stack frame 5 and show assembler-level details
200end
201document z
202Single step 1 instruction (over calls) and show next instruction.
203end
204document zs
205Single step 1 instruction (through calls) and show next instruction.
206end
207document xi
208List the next 10 instructions from the current IP value
209end
210document xs
211Show the last 12 words on stack in hex
212end
213document xb
214Show 12 words starting at current BP value in hex
215end
216define tr
217target remote /dev/cuaa1
218end
219document tr
220Attach to a remote kernel via /dev/cuaa0
221end
222set output-radix 16
223define pname
224p (char *)curproc->p_comm
225end
226document pname
227Print the command name of the current process
228end
229define bpp
230set $bp = (struct buf *) $arg0
231    if $bp->b_dev
232      printf "  Buffer at 0x%x: dev 0x%x:0x%x  data 0x%x  bcount 0x%x  doffset 0x%llx resid 0x%x\n", \
233        $bp, \
234        $bp->b_dev->si_umajor, \
235        $bp->b_dev->si_uminor, \
236        $bp->b_data, \
237        $bp->b_bcount, \
238        $bp->b_bio_array[1].bio_offset, \
239        $bp->b_resid
240    else
241      printf "  Buffer at 0x%x: dev (none) data 0x%x  bcount 0x%x  doffset 0x%llx resid 0x%x\n", \
242        $bp, \
243        $bp->b_data, \
244        $bp->b_bcount, \
245        $bp->b_bio_array[1].bio_offset, \
246        $bp->b_resid
247    end
248    printf "   flags 0x%x: ", $bp->b_flags
249      if $bp->b_flags & 0x10
250        printf "busy "
251      end
252      if $bp->b_flags & 0x40
253        printf "call "
254      end
255      if $bp->b_flags & 0x200
256        printf "done "
257      end
258      if $bp->b_flags & 0x800
259        printf "error "
260      end
261      if $bp->b_flags & 0x40000
262        printf "phys "
263      end
264      if $bp->b_flags & 0x100000
265        printf "read "
266      end
267    printf "\n"
268end
269define bpl
270set $bp = (struct buf *) $arg0
271printf "b_proc: "
272output $bp->b_proc
273printf "\nb_flags:      "
274output $bp->b_flags
275printf "\nb_qindex:     "
276output $bp->b_qindex
277printf "\nb_usecount:   "
278output $bp->b_usecount
279printf "\nb_error:      "
280output $bp->b_error
281printf "\nb_bufsize:    "
282output $bp->b_bufsize
283printf "\nb_bcount:     "
284output $bp->b_bcount
285printf "\nb_resid:      "
286output $bp->b_resid
287printf "\nb_dev:        "
288output $bp->b_dev
289printf "\nb_data:       "
290output $bp->b_data
291printf "\nb_kvasize:    "
292output $bp->b_kvasize
293printf "\nb_loffset:     "
294output $bp->b_bio_array[0].bio_offset
295printf "\nb_doffset:      "
296output $bp->b_bio_array[1].bio_offset
297printf "\nb_iodone:     "
298output $bp->b_bio->bio_done
299printf "\nb_vp: "
300output $bp->b_vp
301printf "\nb_dirtyoff:   "
302output $bp->b_dirtyoff
303printf "\nb_dirtyend:   "
304output $bp->b_dirtyend
305printf "\nb_generation: "
306output $bp->b_generation
307printf "\nb_validoff:   "
308output $bp->b_validoff
309printf "\nb_validend:   "
310output $bp->b_validend
311printf "\nb_poffset:     "
312output $bp->b_bio_array[2].bio_offset
313printf "\nb_savekva:    "
314output $bp->b_savekva
315printf "\nb_driver1:    "
316output $bp->b_driver1
317printf "\nb_driver2:    "
318output $bp->b_driver2
319printf "\nb_spc:        "
320output $bp->b_spc
321printf "\nb_npages:     "
322output $bp->b_npages
323printf "\n"
324end
325define bp
326bpp bp
327end
328define bpd
329    printf "Buffer data:\n%s", (char *) bp->b_data
330end
331document bpd
332Show the contents (char*) of bp->data in the current frame.
333end
334document bp
335Show information about the buffer header pointed to by the
336variable bp in the current frame.
337end
338document bpp
339Show summary information about the buffer header (struct bp) pointed
340at by the parameter.
341end
342document bpl
343Show detailled information about the buffer header (struct bp) pointed
344at by the parameter.
345end
346document bpl
347Show detailled information about the buffer header (struct bp) pointed
348at by the local variable bp.
349end
350define bx
351printf "\n b_vnbufs "
352output/x bp->b_vnbufs
353printf "\n b_freelist "
354output/x bp->b_freelist
355printf "\n b_act "
356output/x bp->b_act
357printf "\n b_flags "
358output/x bp->b_flags
359printf "\n b_qindex "
360output/x bp->b_qindex
361printf "\n b_usecount "
362output/x bp->b_usecount
363printf "\n b_error "
364output/x bp->b_error
365printf "\n b_bufsize "
366output/x bp->b_bufsize
367printf "\n b_bcount "
368output/x bp->b_bcount
369printf "\n b_resid "
370output/x bp->b_resid
371printf "\n b_dev "
372output/x bp->b_dev
373printf "\n b_data "
374output/x bp->b_data
375printf "\n b_kvasize "
376output/x bp->b_kvasize
377printf "\n b_doffset "
378output/x bp->b_bio_array[1].bio_offset
379printf "\n b_vp "
380output/x bp->b_vp
381printf "\n b_dirtyoff "
382output/x bp->b_dirtyoff
383printf "\n b_validoff "
384output/x bp->b_validoff
385echo \n
386end
387define ddb
388set boothowto=0x80000000
389s
390end
391document ddb
392Switch back to ddb.
393end
394define ps
395    set $nproc = nprocs
396    set $aproc = allproc.lh_first
397    set $proc = allproc.lh_first
398    printf "  pid    proc    uid  ppid  pgrp   flag stat comm         wchan\n"
399    while (--$nproc >= 0)
400        set $pptr = $proc.p_pptr
401        if ($pptr == 0)
402           set $pptr = $proc
403        end
404        if ($proc.p_stat)
405            printf "%5d %08x %4d %5d %5d  %06x  %d  %-10s   ", \
406                   $proc.p_pid, $aproc, \
407                   $proc.p_cred->p_ruid, $pptr->p_pid, \
408                   $proc.p_pgrp->pg_id, $proc.p_flag, $proc.p_stat, \
409                   &$proc.p_comm[0]
410            if ($proc.p_wchan)
411                if ($proc.p_wmesg)
412                    printf "%s ", $proc.p_wmesg
413                end
414                printf "%x", $proc.p_wchan
415            end
416            printf "\n"
417        end
418        set $aproc = $proc.p_list.le_next
419        if ($aproc == 0 && $nproc > 0)
420            set $aproc = zombproc
421        end
422        set $proc = $aproc
423    end
424end
425document ps
426"ps" -- when kernel debugging, type out a ps-like listing of active processes.
427end
428define pcb
429    set $nproc = nprocs
430    set $aproc = allproc.lh_first
431    set $proc = allproc.lh_first
432    while (--$nproc >= 0)
433        set $pptr = $proc.p_pptr
434        if ($proc->p_pid == $arg0)
435	   set $pcba = $pptr->p_addr->u_pcb
436	   printf "ip: %08x sp: %08x bp: %08x bx: %08x\n", $pcba->pcb_eip, $pcba->pcb_esp, $pcba->pcb_ebp, $pcba->pcb_ebx
437	   x/1i $pcba->pcb_eip
438	   set $nproc = 0
439        end
440        set $aproc = $proc.p_list.le_next
441        if ($aproc == 0 && $nproc > 0)
442            set $aproc = zombproc
443        end
444        set $proc = $aproc
445    end
446end
447document pcb
448Show some pcb contents of process whose pid is specified.
449end
450define btr
451set $frame = $arg0
452set $fno = 0
453while (*(int *) $frame > 0xc0000000)
454  set $myebp = *(int *) $frame
455  set $myeip = *(int *) ($frame + 4)
456  printf " frame %d at %p: ebp %8x, eip ", $fno, $frame, $myebp
457  x/1i $myeip
458  set $frame = $myebp
459  set $fno = $fno + 1
460end
461end
462document btr
463Show a backtrace from the ebp address specified.  This can be used to
464get a backtrace from any stack resident in memory.
465end
466define btp
467    set $nproc = nprocs
468    set $aproc = allproc.lh_first
469    set $proc = allproc.lh_first
470    while (--$nproc >= 0)
471        if ($proc->p_pid == $arg0)
472	   btr $proc->p_addr->u_pcb->pcb_ebp
473	   set $nproc = 0
474	else
475           set $aproc = $proc.p_list.le_next
476           if ($aproc == 0 && $nproc > 0)
477              set $aproc = zombproc
478           end
479           set $proc = $aproc
480        end
481   end
482end
483document btp
484Show a backtrace for the process whose pid is specified as a parameter.
485end
486define btpa
487    set $nproc = nprocs
488    set $aproc = allproc.lh_first
489    set $proc = allproc.lh_first
490    printf "  pid    proc    uid  ppid  pgrp   flag stat comm         wchan\n"
491    while (--$nproc >= 0)
492        set $pptr = $proc.p_pptr
493        if ($pptr == 0)
494           set $pptr = $proc
495        end
496        if ($proc.p_stat)
497            printf "%5d %08x %4d %5d %5d  %06x %d  %-10s   ", \
498                   $proc.p_pid, $aproc, \
499                   $proc.p_cred->p_ruid, $pptr->p_pid, \
500                   $proc.p_pgrp->pg_id, $proc.p_flag, $proc.p_stat, \
501                   &$proc.p_comm[0]
502            if ($proc.p_wchan)
503                if ($proc.p_wmesg)
504                    printf "%s ", $proc.p_wmesg
505                end
506                printf "%x", $proc.p_wchan
507            end
508            printf "\n"
509	   if ($proc->p_flag & 4)
510	      btr $proc->p_addr->u_pcb->pcb_ebp
511	   else
512              echo (not loaded)\n
513	   end
514        end
515        set $aproc = $proc.p_list.le_next
516        if ($aproc == 0 && $nproc > 0)
517            set $aproc = zombproc
518        end
519        set $proc = $aproc
520    end
521end
522document btpa
523Show backtraces for all processes in the system.
524end
525define btpp
526  if ($myvectorproc->p_flag & 4)
527    btr $myvectorproc->p_addr->u_pcb->pcb_ebp
528  else
529    echo (not loaded)\n
530  end
531end
532document btpp
533Show a backtrace for the process previously selected with 'defproc'.
534end
535define defproc
536    set $nproc = nprocs
537    set $aproc = allproc.lh_first
538    set $proc = allproc.lh_first
539    while (--$nproc >= 0)
540        if ($proc->p_pid == $arg0)
541	   set $pptr = $proc.p_pptr
542           if ($pptr == 0)
543              set $pptr = $proc
544           end
545	   set $myvectorproc = $proc
546           if ($proc.p_stat)
547               printf "%5d %08x %4d %5d %5d  %06x %d  %-10s   ", \
548                      $proc.p_pid, $aproc, \
549                      $proc.p_cred->p_ruid, $pptr->p_pid, \
550                     $proc.p_pgrp->pg_id, $proc.p_flag, $proc.p_stat, \
551                     &$proc.p_comm[0]
552               if ($proc.p_wchan)
553                   if ($proc.p_wmesg)
554                       printf "%s ", $proc.p_wmesg
555                  end
556                  printf "%x", $proc.p_wchan
557               end
558               printf "\n"
559	      end
560	   btpp
561	   set $nproc = 0
562	else
563           set $proc = $proc.p_list.le_next
564        end
565   end
566end
567document defproc
568Specify a process for btpp and fr commands.
569end
570define fr
571set $fno = 0
572set $searching = 1
573if ($myvectorproc->p_flag & 4)
574  set $frame = $myvectorproc->p_addr->u_pcb->pcb_ebp
575  while (($searching == 1) && (*(int *) $frame > 0xc0000000))
576    set $myebp = *(int *) $frame
577    set $myeip = *(int *) ($frame + 4)
578    if ($fno == $arg0)
579      printf " frame %d at %p: ebp %8x, eip ", $fno, $frame, $myebp
580      x/1i $myeip
581      printf "Called from %8x, stack frame at %8x\n", *(int *) ($myebp+4), *(int *) $myebp
582      printf "last 20 local variables:\n"
583      x/20x ($myebp-80)
584      printf "call parameters:\n"
585      x/8x ($myebp+8)
586      set $searching = 0
587    else
588      set $frame = $myebp
589      set $fno = $fno + 1
590    end
591  end
592  if ($searching == 1)
593    echo frame not found\n
594  end
595else
596  printf "process %d is not loaded in memory\n", $myvectorproc->p_pid
597end
598end
599document fr
600Show the frame of the stack of the process previously selected with 'defproc'.
601end
602set height 70
603set width 120
604define vdev
605if (vp->v_type == VBLK)
606  p *vp->v_un.vu_cdev.vu_cdevinfo
607  printf "numoutput: %d\n", vp->v_numoutput
608else
609  echo "Not a block device"
610end
611end
612document vdev
613Show some information of the vnode pointed to by the local variable vp.
614end
615define y
616echo Check your .gdbinit, it contains a y command\n
617end
618define kldstat
619   set $file = files.tqh_first
620   printf "Id Refs Address    Size     Name\n"
621   while ($file != 0)
622     printf "%2d %4d 0x%8x %8x %s\n",   \
623	$file->id, 			\
624	$file->refs,			\
625	$file->address,			\
626	$file->size,			\
627	$file->filename
628     set $file = $file->link.tqe_next
629   end
630end
631document kldstat
632Equivalent of the kldstat(9) command, without options.
633end
634define msgbuf
635printf "%s", msgbufp->msg_ptr
636end
637document msgbuf
638Print the system message buffer (dmesg).  This can take a long time due to the time it takes to transmit the data across a serial line.
639end
640