Merge branch 'vendor/OPENRESOLV' with the following changes:
[dragonfly.git] / share / misc / gdbinit
1 #
2 # Command file for the GNU Debugger, for kernel debugging.
3 #
4 # This file can either be put in your home directory as ~/.gdbinit,
5 # or selected at run time as:
6 #
7 #       'gdb -k -q -x /usr/share/misc/gdbinit ...'
8 #
9 set print union
10 set history expansion on
11
12 define pcomm
13         printf "%10s\n",$arg0->td_comm
14 end
15
16 define lsvfs
17         set $vfc = (struct vfsconf *)vfsconf_list.stqh_first
18         printf "\nFilesystem      Refs    Flags\n"
19         while ($vfc != 0)
20                 printf "%-10s %6d       0x%08x\n", $vfc->vfc_name, \
21                         $vfc->vfc_refcount, $vfc->vfc_flags
22                 set $vfc = $vfc->vfc_next.stqe_next
23         end
24 end
25
26 define lsmount
27         set $mnt = (mountlist->tqh_first)
28         while ($mnt != 0)
29                 print *$mnt
30                 set $mnt = $mnt->mnt_list->tqe_next
31         end
32 end
33
34 define lsvfsops
35         set $vfc = (struct vfsconf *)vfsconf_list.stqh_first
36         while ($vfc != 0)
37                 printf "Filesystem: %s, Refs: %d, Flags: 0x%08x\n", \
38                         $vfc->vfc_name, $vfc->vfc_refcount, $vfc->vfc_flags
39                 printf "VFS ops: \n"
40                 set print pretty
41                 print *$vfc->vfc_vfsops
42                 set print pretty off
43                 set $vfc = $vfc->vfc_next.stqe_next
44         end
45 end
46
47
48 define kldstat
49         set $kld = linker_files.tqh_first
50         printf "\nId Refs Address    Size     Name\n"
51         while ($kld != 0)
52                 printf "%2d %4d 0x%08x %-8x %s\n", \
53                 $kld->id, $kld->refs, $kld->address, $kld->size, $kld->filename
54                 set $kld = $kld->link.tqe_next
55         end
56 end
57
58 define psx
59     set $cpu = 0
60     printf "\ncpu  pid    thread    flags comm               wchan    wmesg\n"
61     while ($cpu < ncpus)
62         set $gd = &((struct privatespace *)&CPU_prvspace)[$cpu].mdglobaldata
63         set $td = $gd->mi.gd_tdallq.tqh_first
64         while ( $td != 0 )
65             if ( $td->td_proc != 0 )
66                 set $pid = $td->td_proc->p_pid
67             else
68                 set $pid = -1
69             end
70             if ( $td->td_wmesg != 0 )
71                 printf "%3d %5d %08x %08x %-18s %08x %s\n",     \
72                     $cpu, $pid, $td, $td->td_flags, $td->td_comm, $td->td_wchan, \
73                     $td->td_wmesg
74             else
75                 printf "%3d %5d %08x %08x %-18s %08x\n",        \
76                     $cpu, $pid, $td, $td->td_flags, $td->td_comm, $td->td_wchan
77             end
78             set $td = $td->td_allq.tqe_next
79         end
80         set $cpu = $cpu + 1
81     end
82 end
83
84
85 define running_threads
86     set $icpu = 0
87         printf "\ncpu    curthread    wchan\n"
88         while ($icpu < ncpus)
89             set $ipvspace = (struct privatespace *)&CPU_prvspace
90                 set $gd = $ipvspace[$icpu].mdglobaldata.mi
91                 set $td = $gd.gd_curthread
92             printf "%d    %10s    %08x\n", \
93                         $gd.gd_cpuid, $td->td_comm, $td->td_wchan
94             set $icpu = $icpu + 1
95         end
96 end
97
98 define psax
99     set $pos = 0
100     while $pos < allproc_hsize
101         set $proc = allprocs[$pos++]->lh_first
102         while $proc != 0
103                 printf "%p%6d%10s\n",$proc,$proc->p_pid,$proc->p_comm
104                 set $proc = $proc->p_list.le_next
105         end
106     end
107 end
108
109 define _infotok
110         set $token = ($arg0)
111         set $tokref = $token->t_ref
112         if ($tokref != 0)
113                 printf "%-15s %10d 0x%08x\n", $token->t_desc, \
114                         $token->t_collisions, $tokref->tr_owner
115         else
116                 printf "%-15s %10d not held\n", $token->t_desc, \
117                         $token->t_collisions
118         end
119 end
120
121 define infotok
122         printf "\nToken           collisions owner\n"
123         _infotok ($arg0)
124 end
125
126 define lstok
127         set $tok = 0
128         set $obj = 0
129         printf "\nToken           collisions owner\n"
130         _infotok &pmap_token
131         _infotok &dev_token
132         _infotok &vm_token
133         _infotok &vmspace_token
134         _infotok &kvm_token
135         while $tok < allproc_hsize
136                 if (proc_tokens[$tok].t_collisions > 0)
137                         _infotok &proc_tokens[$tok]
138                 end
139                 set $tok = $tok + 1
140         end
141         _infotok &tty_token
142         _infotok &vnode_token
143         while $obj < 64
144                 if (vmobj_tokens[$obj].t_collisions > 0)
145                         _infotok &vmobj_tokens[$obj]
146                 end
147                 set $obj = $obj + 1
148         end
149 end
150
151 define lstdtok
152         set $mytd=($arg0)
153         printf "\nTokens for td  %p (%s)\n", $mytd, $mytd->td_comm
154         printf "\nToken           collisions owner\n"
155         set $pos = 0
156         while (td->td_toks_array[$pos]->tr_tok) != 0
157                 _infotok &td->td_toks_array[$pos++]->tr_tok
158         end
159 end
160
161 define dmesg
162         set $bufp = msgbufp->msg_ptr
163         set $size = msgbufp->msg_size
164         set $rseq = msgbufp->msg_bufr % $size
165         set $wseq = msgbufp->msg_bufx % $size
166         if ( $bufp != 0 && $size != 0 && $rseq != $wseq )
167                 while ( $rseq < $wseq )
168                         set $c = $bufp + $rseq
169                         printf "%c", *$c
170                         set $rseq = $rseq + 1
171                         if ( $rseq == msgbufp->msg_size )
172                                 set $rseq = 0
173                         end
174                 end
175                 if ( *$c == '\n' )
176                         printf "\n"
177                 end
178                 printf "\n"
179         end
180 end
181
182 # Documentation, usable within GDB using the 'help' command.
183 document lsvfs
184 Output list of loaded file systems, refcount, similar to the
185 lsvfs(1) utility.
186 end
187
188 document lsmount
189 Iterate the current list of mount structures loaded from the
190 memory core, there should be one per loaded VFS.
191 end
192
193 document lsvfsops
194 Display the VFS operations vector for each file system found in
195 the memory core, preceded by a summarised header.
196 end
197
198 document kldstat
199 Output list of loaded kernel modules in kldstat(1) style.
200 end
201
202 document pcomm
203 Print command name of the given thread pointer (first argument).
204 end
205
206 document psx
207 Output a list of processes with wait-channel (wchan) information.
208 end
209
210 document running_threads
211 List the threads which are currently running and their CPU number.
212 end
213
214 document psax
215 Output a list of processes.
216 end
217
218 document lstok
219 Display all known global tokens and some information about them.
220 end
221
222 document lstdtok
223 Display all tokens related to the specified thread.
224 end
225
226 document infotok
227 Takes one argument, a struct lwkt_token * (pointer) and prints some
228 information about that token.
229 end
230
231 document dmesg
232 Shows the unread portion of the kernel message buffer.
233 end