Rename struct specinfo into struct cdev. Add a new typedef 'cdev_t' for cdev
[dragonfly.git] / sys / dev / raid / vinum / .gdbinit.kernel
1 # $DragonFly: src/sys/dev/raid/vinum/.gdbinit.kernel,v 1.6 2006/09/09 19:07:27 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  data 0x%x  bcount 0x%x  doffset 0x%llx resid 0x%x\n", \
233         $bp, \
234         $bp->b_dev->si_udev, \
235         $bp->b_data, \
236         $bp->b_bcount, \
237         $bp->b_bio_array[1].bio_offset, \
238         $bp->b_resid
239     else
240       printf "  Buffer at 0x%x: dev (none) data 0x%x  bcount 0x%x  doffset 0x%llx resid 0x%x\n", \
241         $bp, \
242         $bp->b_data, \
243         $bp->b_bcount, \
244         $bp->b_bio_array[1].bio_offset, \
245         $bp->b_resid
246     end
247     printf "   flags 0x%x: ", $bp->b_flags
248       if $bp->b_flags & 0x10
249         printf "busy "
250       end
251       if $bp->b_flags & 0x40
252         printf "call "
253       end
254       if $bp->b_flags & 0x200
255         printf "done "
256       end
257       if $bp->b_flags & 0x800
258         printf "error "
259       end
260       if $bp->b_flags & 0x40000
261         printf "phys "
262       end
263       if $bp->b_flags & 0x100000
264         printf "read "
265       end
266     printf "\n"
267 end
268 define bpl
269 set $bp = (struct buf *) $arg0
270 printf "b_proc: "
271 output $bp->b_proc
272 printf "\nb_flags:      "
273 output $bp->b_flags
274 printf "\nb_qindex:     "
275 output $bp->b_qindex
276 printf "\nb_usecount:   "
277 output $bp->b_usecount
278 printf "\nb_error:      "
279 output $bp->b_error
280 printf "\nb_bufsize:    "
281 output $bp->b_bufsize
282 printf "\nb_bcount:     "
283 output $bp->b_bcount
284 printf "\nb_resid:      "
285 output $bp->b_resid
286 printf "\nb_dev:        "
287 output $bp->b_dev
288 printf "\nb_data:       "
289 output $bp->b_data
290 printf "\nb_kvasize:    "
291 output $bp->b_kvasize
292 printf "\nb_loffset:     "
293 output $bp->b_bio_array[0].bio_offset
294 printf "\nb_doffset:      "
295 output $bp->b_bio_array[1].bio_offset
296 printf "\nb_iodone:     "
297 output $bp->b_bio->bio_done
298 printf "\nb_vp: "
299 output $bp->b_vp
300 printf "\nb_dirtyoff:   "
301 output $bp->b_dirtyoff
302 printf "\nb_dirtyend:   "
303 output $bp->b_dirtyend
304 printf "\nb_generation: "
305 output $bp->b_generation
306 printf "\nb_validoff:   "
307 output $bp->b_validoff
308 printf "\nb_validend:   "
309 output $bp->b_validend
310 printf "\nb_poffset:     "
311 output $bp->b_bio_array[2].bio_offset
312 printf "\nb_savekva:    "
313 output $bp->b_savekva
314 printf "\nb_driver1:    "
315 output $bp->b_driver1
316 printf "\nb_driver2:    "
317 output $bp->b_driver2
318 printf "\nb_spc:        "
319 output $bp->b_spc
320 printf "\nb_npages:     "
321 output $bp->b_npages
322 printf "\n"
323 end
324 define bp
325 bpp bp
326 end
327 define bpd
328     printf "Buffer data:\n%s", (char *) bp->b_data
329 end
330 document bpd
331 Show the contents (char*) of bp->data in the current frame.
332 end
333 document bp
334 Show information about the buffer header pointed to by the
335 variable bp in the current frame.
336 end
337 document bpp
338 Show summary information about the buffer header (struct bp) pointed
339 at by the parameter.
340 end
341 document bpl
342 Show detailled information about the buffer header (struct bp) pointed
343 at by the parameter.
344 end
345 document bpl
346 Show detailled information about the buffer header (struct bp) pointed
347 at by the local variable bp.
348 end
349 define bx
350 printf "\n b_vnbufs " 
351 output/x bp->b_vnbufs
352 printf "\n b_freelist " 
353 output/x bp->b_freelist
354 printf "\n b_act " 
355 output/x bp->b_act
356 printf "\n b_flags " 
357 output/x bp->b_flags
358 printf "\n b_qindex " 
359 output/x bp->b_qindex
360 printf "\n b_usecount " 
361 output/x bp->b_usecount
362 printf "\n b_error " 
363 output/x bp->b_error
364 printf "\n b_bufsize " 
365 output/x bp->b_bufsize
366 printf "\n b_bcount " 
367 output/x bp->b_bcount
368 printf "\n b_resid " 
369 output/x bp->b_resid
370 printf "\n b_dev " 
371 output/x bp->b_dev
372 printf "\n b_data " 
373 output/x bp->b_data
374 printf "\n b_kvasize " 
375 output/x bp->b_kvasize
376 printf "\n b_doffset " 
377 output/x bp->b_bio_array[1].bio_offset
378 printf "\n b_vp " 
379 output/x bp->b_vp
380 printf "\n b_dirtyoff " 
381 output/x bp->b_dirtyoff
382 printf "\n b_validoff " 
383 output/x bp->b_validoff
384 echo \n
385 end
386 define ddb
387 set boothowto=0x80000000
388 s
389 end
390 document ddb
391 Switch back to ddb.
392 end
393 define ps
394     set $nproc = nprocs
395     set $aproc = allproc.lh_first
396     set $proc = allproc.lh_first
397     printf "  pid    proc    addr   uid  ppid  pgrp   flag stat comm         wchan\n"
398     while (--$nproc >= 0)
399         set $pptr = $proc.p_pptr
400         if ($pptr == 0)
401            set $pptr = $proc
402         end
403         if ($proc.p_stat)
404             printf "%5d %08x %08x %4d %5d %5d  %06x  %d  %-10s   ", \
405                    $proc.p_pid, $aproc, \
406                    $proc.p_addr, $proc.p_cred->p_ruid, $pptr->p_pid, \
407                    $proc.p_pgrp->pg_id, $proc.p_flag, $proc.p_stat, \
408                    &$proc.p_comm[0]
409             if ($proc.p_wchan)
410                 if ($proc.p_wmesg)
411                     printf "%s ", $proc.p_wmesg
412                 end
413                 printf "%x", $proc.p_wchan
414             end
415             printf "\n"
416         end
417         set $aproc = $proc.p_list.le_next
418         if ($aproc == 0 && $nproc > 0)
419             set $aproc = zombproc
420         end
421         set $proc = $aproc
422     end
423 end
424 document ps
425 "ps" -- when kernel debugging, type out a ps-like listing of active processes.
426 end
427 define pcb
428     set $nproc = nprocs
429     set $aproc = allproc.lh_first
430     set $proc = allproc.lh_first
431     while (--$nproc >= 0)
432         set $pptr = $proc.p_pptr
433         if ($proc->p_pid == $arg0)
434            set $pcba = $pptr->p_addr->u_pcb
435            printf "ip: %08x sp: %08x bp: %08x bx: %08x\n", $pcba->pcb_eip, $pcba->pcb_esp, $pcba->pcb_ebp, $pcba->pcb_ebx
436            x/1i $pcba->pcb_eip
437            set $nproc = 0
438         end
439         set $aproc = $proc.p_list.le_next
440         if ($aproc == 0 && $nproc > 0)
441             set $aproc = zombproc
442         end
443         set $proc = $aproc
444     end
445 end
446 document pcb
447 Show some pcb contents of process whose pid is specified.
448 end
449 define btr
450 set $frame = $arg0
451 set $fno = 0
452 while (*(int *) $frame > 0xc0000000)
453   set $myebp = *(int *) $frame
454   set $myeip = *(int *) ($frame + 4)
455   printf " frame %d at %p: ebp %8x, eip ", $fno, $frame, $myebp
456   x/1i $myeip
457   set $frame = $myebp
458   set $fno = $fno + 1
459 end
460 end
461 document btr
462 Show a backtrace from the ebp address specified.  This can be used to
463 get a backtrace from any stack resident in memory.
464 end
465 define btp
466     set $nproc = nprocs
467     set $aproc = allproc.lh_first
468     set $proc = allproc.lh_first
469     while (--$nproc >= 0)
470         if ($proc->p_pid == $arg0)
471            btr $proc->p_addr->u_pcb->pcb_ebp
472            set $nproc = 0
473         else
474            set $aproc = $proc.p_list.le_next
475            if ($aproc == 0 && $nproc > 0)
476               set $aproc = zombproc
477            end
478            set $proc = $aproc
479         end
480    end
481 end
482 document btp
483 Show a backtrace for the process whose pid is specified as a parameter.
484 end
485 define btpa
486     set $nproc = nprocs
487     set $aproc = allproc.lh_first
488     set $proc = allproc.lh_first
489     printf "  pid    proc    addr   uid  ppid  pgrp   flag stat comm         wchan\n"
490     while (--$nproc >= 0)
491         set $pptr = $proc.p_pptr
492         if ($pptr == 0)
493            set $pptr = $proc
494         end
495         if ($proc.p_stat)
496             printf "%5d %08x %08x %4d %5d %5d  %06x %d  %-10s   ", \
497                    $proc.p_pid, $aproc, \
498                    $proc.p_addr, $proc.p_cred->p_ruid, $pptr->p_pid, \
499                    $proc.p_pgrp->pg_id, $proc.p_flag, $proc.p_stat, \
500                    &$proc.p_comm[0]
501             if ($proc.p_wchan)
502                 if ($proc.p_wmesg)
503                     printf "%s ", $proc.p_wmesg
504                 end
505                 printf "%x", $proc.p_wchan
506             end
507             printf "\n"
508            if ($proc->p_flag & 4)
509               btr $proc->p_addr->u_pcb->pcb_ebp
510            else
511               echo (not loaded)\n
512            end
513         end
514         set $aproc = $proc.p_list.le_next
515         if ($aproc == 0 && $nproc > 0)
516             set $aproc = zombproc
517         end
518         set $proc = $aproc
519     end
520 end
521 document btpa
522 Show backtraces for all processes in the system.
523 end
524 define btpp
525   if ($myvectorproc->p_flag & 4)
526     btr $myvectorproc->p_addr->u_pcb->pcb_ebp
527   else
528     echo (not loaded)\n
529   end
530 end
531 document btpp
532 Show a backtrace for the process previously selected with 'defproc'.
533 end
534 define defproc
535     set $nproc = nprocs
536     set $aproc = allproc.lh_first
537     set $proc = allproc.lh_first
538     while (--$nproc >= 0)
539         if ($proc->p_pid == $arg0)
540            set $pptr = $proc.p_pptr
541            if ($pptr == 0)
542               set $pptr = $proc
543            end
544            set $myvectorproc = $proc
545            if ($proc.p_stat)
546                printf "%5d %08x %08x %4d %5d %5d  %06x %d  %-10s   ", \
547                       $proc.p_pid, $aproc, \
548                       $proc.p_addr, $proc.p_cred->p_ruid, $pptr->p_pid, \
549                      $proc.p_pgrp->pg_id, $proc.p_flag, $proc.p_stat, \
550                      &$proc.p_comm[0]
551                if ($proc.p_wchan)
552                    if ($proc.p_wmesg)
553                        printf "%s ", $proc.p_wmesg
554                   end
555                   printf "%x", $proc.p_wchan
556                end
557                printf "\n"
558               end
559            btpp
560            set $nproc = 0
561         else
562            set $proc = $proc.p_list.le_next
563         end
564    end
565 end
566 document defproc
567 Specify a process for btpp and fr commands.
568 end
569 define fr
570 set $fno = 0
571 set $searching = 1
572 if ($myvectorproc->p_flag & 4)
573   set $frame = $myvectorproc->p_addr->u_pcb->pcb_ebp
574   while (($searching == 1) && (*(int *) $frame > 0xc0000000))
575     set $myebp = *(int *) $frame
576     set $myeip = *(int *) ($frame + 4)
577     if ($fno == $arg0)
578       printf " frame %d at %p: ebp %8x, eip ", $fno, $frame, $myebp
579       x/1i $myeip
580       printf "Called from %8x, stack frame at %8x\n", *(int *) ($myebp+4), *(int *) $myebp
581       printf "last 20 local variables:\n"
582       x/20x ($myebp-80)
583       printf "call parameters:\n"
584       x/8x ($myebp+8)
585       set $searching = 0
586     else
587       set $frame = $myebp
588       set $fno = $fno + 1
589     end
590   end
591   if ($searching == 1)
592     echo frame not found\n
593   end
594 else
595   printf "process %d is not loaded in memory\n", $myvectorproc->p_pid
596 end
597 end
598 document fr
599 Show the frame of the stack of the process previously selected with 'defproc'.
600 end
601 set height 70
602 set width 120
603 define vdev
604 if (vp->v_type == VBLK)
605   p *vp->v_un.vu_cdev.vu_cdevinfo
606   printf "numoutput: %d\n", vp->v_numoutput
607 else
608   echo "Not a block device"
609 end
610 end
611 document vdev
612 Show some information of the vnode pointed to by the local variable vp.
613 end
614 define y
615 echo Check your .gdbinit, it contains a y command\n
616 end
617 define kldstat
618    set $file = files.tqh_first
619    printf "Id Refs Address    Size     Name\n"
620    while ($file != 0)
621      printf "%2d %4d 0x%8x %8x %s\n",   \
622         $file->id,                      \
623         $file->refs,                    \
624         $file->address,                 \
625         $file->size,                    \
626         $file->filename
627      set $file = $file->link.tqe_next
628    end
629 end
630 document kldstat
631 Equivalent of the kldstat(9) command, without options.
632 end
633 define msgbuf
634 printf "%s", msgbufp->msg_ptr
635 end
636 document msgbuf
637 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.
638 end