1cba58da4d78ced112824e3f785d6131106411df
[dragonfly.git] / sys / dev / raid / vinum / .gdbinit.kernel
1 # $DragonFly: src/sys/dev/raid/vinum/.gdbinit.kernel,v 1.8 2007/05/09 00:53:34 dillon Exp $
2 set remotebaud 38400
3 set remotetimeout 1
4 set complaints 1
5 set print pretty
6 define xi
7 x/10i $eip
8 end
9 define xs
10 x/12x $esp
11 end
12 define xb
13 x/12x $ebp
14 end
15 define z
16 ni
17 x/1i $eip
18 end
19 define zs
20 si
21 x/1i $eip
22 end
23 define xp
24 printf "      esp: " 
25 output/x $esp
26 echo  (
27 output (((int)$ebp)-(int)$esp)/4-4
28 printf " words on stack)\n      ebp: " 
29 output/x $ebp
30 printf "\n      eip: " 
31 x/1i $eip
32 printf "Saved ebp: " 
33 output/x *(int*)$ebp
34 printf " (maximum of "  
35 output ((*(int*)$ebp)-(int)$ebp)/4-4
36 printf " parameters possible)\nSaved eip: " 
37 x/1i *(int*)($ebp+4)
38 printf "\nParm 1 at " 
39 output/x (int) ($ebp+8)
40 printf ":    " 
41 output (char*) *(int*)($ebp+8)
42 printf "\nParm 2 at " 
43 output/x (int) ($ebp+12)
44 printf ":    " 
45 output (char*) *(int*)($ebp+12)
46 printf "\nParm 3 at " 
47 output/x (int) ($ebp+16)
48 printf ":    " 
49 output (char*) *(int*)($ebp+16)
50 printf "\nParm 4 at " 
51 output/x (int) ($ebp+20)
52 printf ":    " 
53 output (char*) *(int*)($ebp+20)
54 echo \n
55 end
56 document xp
57 Show the register contents and the first four parameter
58 words of the current frame.
59 end
60 define xxp
61 printf "      esp: " 
62 output/x $esp
63 printf "\n      ebp: " 
64 output/x $ebp
65 printf "\n      eip: " 
66 x/1i $eip
67 printf "Saved ebp: " 
68 output/x *(int*)$ebp
69 printf " (maximum of "  
70 output ((*(int*)$ebp)-(int)$ebp)/4-4
71 printf " parameters possible)\nSaved eip: " 
72 x/1i *(int*)($ebp+4)
73 printf "\nParm  1 at " 
74 output/x (int) ($ebp+8)
75 printf ":    " 
76 output (char*) *(int*)($ebp+8)
77 printf "\nParm  2 at " 
78 output/x (int) ($ebp+12)
79 printf ":    " 
80 output (char*) *(int*)($ebp+12)
81 printf "\nParm  3 at " 
82 output/x (int) ($ebp+16)
83 printf ":    " 
84 output (char*) *(int*)($ebp+16)
85 printf "\nParm  4 at " 
86 output/x (int) ($ebp+20)
87 printf ":    " 
88 output (char*) *(int*)($ebp+20)
89 printf "\nParm  5 at " 
90 output/x (int) ($ebp+24)
91 printf ":    " 
92 output (char*) *(int*)($ebp+24)
93 printf "\nParm  6 at " 
94 output/x (int) ($ebp+28)
95 printf ":    " 
96 output (char*) *(int*)($ebp+28)
97 printf "\nParm  7 at " 
98 output/x (int) ($ebp+32)
99 printf ":    " 
100 output (char*) *(int*)($ebp+32)
101 printf "\nParm  8 at " 
102 output/x (int) ($ebp+36)
103 printf ":    " 
104 output (char*) *(int*)($ebp+36)
105 printf "\nParm  9 at " 
106 output/x (int) ($ebp+40)
107 printf ":    " 
108 output (char*) *(int*)($ebp+40)
109 printf "\nParm 10 at " 
110 output/x (int) ($ebp+44)
111 printf ":    " 
112 output (char*) *(int*)($ebp+44)
113 echo \n
114 end
115 document xxp
116 Show the register contents and the first ten parameter
117 words of the current frame.
118 end
119 define xp0
120 x/12x *(int*)$esp
121 p *(int*)$esp
122 p (char*)*$esp
123 end
124 define xp1
125 x/12x *(int*)($ebp+4)
126 p *(int*)($ebp+4)
127 p (char**)($ebp+4)
128 end
129 define xp2
130 x/12x *(int*)($ebp+8)
131 p *(int*)($ebp+8)
132 p *(char**)($ebp+8)
133 end
134 define xp3
135 x/12x *(int*)($ebp+12)
136 p *(int*)($ebp+12)
137 p (char**)($ebp+12)
138 end
139 define xp4
140 x/12x *(int*)($ebp+16)
141 p *(int*)($ebp+16)
142 p (char**)($ebp+16)
143 end
144 document xp0
145 Show the first parameter of current stack frame in various formats
146 end
147 document xp1
148 Show the second parameter of current stack frame in various formats
149 end
150 document xp2
151 Show the third parameter of current stack frame in various formats
152 end
153 document xp3
154 Show the fourth parameter of current stack frame in various formats
155 end
156 document xp4
157 Show the fifth parameter of current stack frame in various formats
158 end
159 define f0
160 f 0
161 xp
162 end
163 define f1
164 f 1
165 xp
166 end
167 define f2
168 f 2
169 xp
170 end
171 define f3
172 f 3
173 xp
174 end
175 define f4
176 f 4
177 xp
178 end
179 define f5
180 f 5
181 xp
182 end
183 document f0
184 Select stack frame 0 and show assembler-level details
185 end
186 document f1
187 Select stack frame 1 and show assembler-level details
188 end
189 document f2
190 Select stack frame 2 and show assembler-level details
191 end
192 document f3
193 Select stack frame 3 and show assembler-level details
194 end
195 document f4
196 Select stack frame 4 and show assembler-level details
197 end
198 document f5
199 Select stack frame 5 and show assembler-level details
200 end
201 document z
202 Single step 1 instruction (over calls) and show next instruction.
203 end
204 document zs
205 Single step 1 instruction (through calls) and show next instruction.
206 end
207 document xi
208 List the next 10 instructions from the current IP value
209 end
210 document xs
211 Show the last 12 words on stack in hex
212 end
213 document xb
214 Show 12 words starting at current BP value in hex
215 end
216 define tr
217 target remote /dev/cuaa1
218 end
219 document tr
220 Attach to a remote kernel via /dev/cuaa0
221 end
222 set output-radix 16
223 define pname
224 p (char *)curproc->p_comm
225 end 
226 document pname
227 Print the command name of the current process
228 end
229 define bpp
230 set $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"
268 end
269 define bpl
270 set $bp = (struct buf *) $arg0
271 printf "b_proc: "
272 output $bp->b_proc
273 printf "\nb_flags:      "
274 output $bp->b_flags
275 printf "\nb_qindex:     "
276 output $bp->b_qindex
277 printf "\nb_usecount:   "
278 output $bp->b_usecount
279 printf "\nb_error:      "
280 output $bp->b_error
281 printf "\nb_bufsize:    "
282 output $bp->b_bufsize
283 printf "\nb_bcount:     "
284 output $bp->b_bcount
285 printf "\nb_resid:      "
286 output $bp->b_resid
287 printf "\nb_dev:        "
288 output $bp->b_dev
289 printf "\nb_data:       "
290 output $bp->b_data
291 printf "\nb_kvasize:    "
292 output $bp->b_kvasize
293 printf "\nb_loffset:     "
294 output $bp->b_bio_array[0].bio_offset
295 printf "\nb_doffset:      "
296 output $bp->b_bio_array[1].bio_offset
297 printf "\nb_iodone:     "
298 output $bp->b_bio->bio_done
299 printf "\nb_vp: "
300 output $bp->b_vp
301 printf "\nb_dirtyoff:   "
302 output $bp->b_dirtyoff
303 printf "\nb_dirtyend:   "
304 output $bp->b_dirtyend
305 printf "\nb_generation: "
306 output $bp->b_generation
307 printf "\nb_validoff:   "
308 output $bp->b_validoff
309 printf "\nb_validend:   "
310 output $bp->b_validend
311 printf "\nb_poffset:     "
312 output $bp->b_bio_array[2].bio_offset
313 printf "\nb_savekva:    "
314 output $bp->b_savekva
315 printf "\nb_driver1:    "
316 output $bp->b_driver1
317 printf "\nb_driver2:    "
318 output $bp->b_driver2
319 printf "\nb_spc:        "
320 output $bp->b_spc
321 printf "\nb_npages:     "
322 output $bp->b_npages
323 printf "\n"
324 end
325 define bp
326 bpp bp
327 end
328 define bpd
329     printf "Buffer data:\n%s", (char *) bp->b_data
330 end
331 document bpd
332 Show the contents (char*) of bp->data in the current frame.
333 end
334 document bp
335 Show information about the buffer header pointed to by the
336 variable bp in the current frame.
337 end
338 document bpp
339 Show summary information about the buffer header (struct bp) pointed
340 at by the parameter.
341 end
342 document bpl
343 Show detailled information about the buffer header (struct bp) pointed
344 at by the parameter.
345 end
346 document bpl
347 Show detailled information about the buffer header (struct bp) pointed
348 at by the local variable bp.
349 end
350 define bx
351 printf "\n b_vnbufs " 
352 output/x bp->b_vnbufs
353 printf "\n b_freelist " 
354 output/x bp->b_freelist
355 printf "\n b_act " 
356 output/x bp->b_act
357 printf "\n b_flags " 
358 output/x bp->b_flags
359 printf "\n b_qindex " 
360 output/x bp->b_qindex
361 printf "\n b_usecount " 
362 output/x bp->b_usecount
363 printf "\n b_error " 
364 output/x bp->b_error
365 printf "\n b_bufsize " 
366 output/x bp->b_bufsize
367 printf "\n b_bcount " 
368 output/x bp->b_bcount
369 printf "\n b_resid " 
370 output/x bp->b_resid
371 printf "\n b_dev " 
372 output/x bp->b_dev
373 printf "\n b_data " 
374 output/x bp->b_data
375 printf "\n b_kvasize " 
376 output/x bp->b_kvasize
377 printf "\n b_doffset " 
378 output/x bp->b_bio_array[1].bio_offset
379 printf "\n b_vp " 
380 output/x bp->b_vp
381 printf "\n b_dirtyoff " 
382 output/x bp->b_dirtyoff
383 printf "\n b_validoff " 
384 output/x bp->b_validoff
385 echo \n
386 end
387 define ddb
388 set boothowto=0x80000000
389 s
390 end
391 document ddb
392 Switch back to ddb.
393 end
394 define 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
424 end
425 document ps
426 "ps" -- when kernel debugging, type out a ps-like listing of active processes.
427 end
428 define 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
446 end
447 document pcb
448 Show some pcb contents of process whose pid is specified.
449 end
450 define btr
451 set $frame = $arg0
452 set $fno = 0
453 while (*(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
460 end
461 end
462 document btr
463 Show a backtrace from the ebp address specified.  This can be used to
464 get a backtrace from any stack resident in memory.
465 end
466 define 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
482 end
483 document btp
484 Show a backtrace for the process whose pid is specified as a parameter.
485 end
486 define 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
521 end
522 document btpa
523 Show backtraces for all processes in the system.
524 end
525 define 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
531 end
532 document btpp
533 Show a backtrace for the process previously selected with 'defproc'.
534 end
535 define 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
566 end
567 document defproc
568 Specify a process for btpp and fr commands.
569 end
570 define fr
571 set $fno = 0
572 set $searching = 1
573 if ($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
595 else
596   printf "process %d is not loaded in memory\n", $myvectorproc->p_pid
597 end
598 end
599 document fr
600 Show the frame of the stack of the process previously selected with 'defproc'.
601 end
602 set height 70
603 set width 120
604 define vdev
605 if (vp->v_type == VBLK)
606   p *vp->v_un.vu_cdev.vu_cdevinfo
607   printf "numoutput: %d\n", vp->v_numoutput
608 else
609   echo "Not a block device"
610 end
611 end
612 document vdev
613 Show some information of the vnode pointed to by the local variable vp.
614 end
615 define y
616 echo Check your .gdbinit, it contains a y command\n
617 end
618 define 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
630 end
631 document kldstat
632 Equivalent of the kldstat(9) command, without options.
633 end
634 define msgbuf
635 printf "%s", msgbufp->msg_ptr
636 end
637 document msgbuf
638 Print 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.
639 end