xref: /dragonfly/share/misc/gdbinit (revision 82730a9c)
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#
9set print union
10set history expansion on
11
12define pcomm
13	printf "%10s\n",$arg0->td_comm
14end
15
16define 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
24end
25
26define lsmount
27	set $mnt = (mountlist->tqh_first)
28	while ($mnt != 0)
29		print *$mnt
30		set $mnt = $mnt->mnt_list->tqe_next
31	end
32end
33
34define 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
45end
46
47
48define 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
56end
57
58define 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
82end
83
84
85define 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
96end
97
98define psax
99    set $proc = allproc->lh_first
100    while $proc != 0
101	printf "%p%6d%10s\n",$proc,$proc->p_pid,$proc->p_comm
102	set $proc = $proc->p_list.le_next
103    end
104end
105
106define _infotok
107	set $token = ($arg0)
108	set $tokref = $token->t_ref
109	if ($tokref != 0)
110		printf "%-15s %10d 0x%08x\n", $token->t_desc, \
111			$token->t_collisions, $tokref->tr_owner
112	else
113		printf "%-15s %10d not held\n", $token->t_desc, \
114			$token->t_collisions
115	end
116end
117
118define infotok
119	printf "\nToken           collisions owner\n"
120	_infotok ($arg0)
121end
122
123define lstok
124	printf "\nToken           collisions owner\n"
125	_infotok &pmap_token
126	_infotok &dev_token
127	_infotok &vm_token
128	_infotok &vmspace_token
129	_infotok &kvm_token
130	_infotok &proc_token
131	_infotok &tty_token
132	_infotok &vnode_token
133	_infotok &vmobj_token
134end
135
136define lstdtok
137	set $mytd=($arg0)
138	printf "\nTokens for td  %p (%s)\n", $mytd, $mytd->td_comm
139	printf "\nToken           collisions owner\n"
140	set $pos = 0
141	while (td->td_toks_array[$pos]->tr_tok) != 0
142		_infotok &td->td_toks_array[$pos++]->tr_tok
143	end
144end
145
146define dmesg
147	set $bufp = msgbufp->msg_ptr
148	set $size = msgbufp->msg_size
149	set $rseq = msgbufp->msg_bufr % $size
150	set $wseq = msgbufp->msg_bufx % $size
151	if ( $bufp != 0 && $size != 0 && $rseq != $wseq )
152		while ( $rseq < $wseq )
153			set $c = $bufp + $rseq
154			printf "%c", *$c
155			set $rseq = $rseq + 1
156			if ( $rseq == msgbufp->msg_size )
157				set $rseq = 0
158			end
159		end
160		if ( *$c == '\n' )
161			printf "\n"
162		end
163		printf "\n"
164	end
165end
166
167# Documentation, usable within GDB using the 'help' command.
168document lsvfs
169Output list of loaded file systems, refcount, similar to the
170lsvfs(1) utility.
171end
172
173document lsmount
174Iterate the current list of mount structures loaded from the
175memory core, there should be one per loaded VFS.
176end
177
178document lsvfsops
179Display the VFS operations vector for each file system found in
180the memory core, preceded by a summarised header.
181end
182
183document kldstat
184Output list of loaded kernel modules in kldstat(1) style.
185end
186
187document pcomm
188Print command name of the given thread pointer (first argument).
189end
190
191document psx
192Output a list of processes with wait-channel (wchan) information.
193end
194
195document running_threads
196List the threads which are currently running and their CPU number.
197end
198
199document psax
200Output a list of processes.
201end
202
203document lstok
204Display all known global tokens and some information about them.
205end
206
207document lstdtok
208Display all tokens related to the specified thread.
209end
210
211document infotok
212Takes one argument, a struct lwkt_token * (pointer) and prints some
213information about that token.
214end
215
216document dmesg
217Shows the unread portion of the kernel message buffer.
218end
219