xref: /dflybsd-src/share/misc/gdbinit (revision 54c19387a4494cf6d71a2705d3b25e7d72bd2b74)
11f8a7fecSSascha Wildner#
21f8a7fecSSascha Wildner# Command file for the GNU Debugger, for kernel debugging.
31f8a7fecSSascha Wildner#
41f8a7fecSSascha Wildner# This file can either be put in your home directory as ~/.gdbinit,
51f8a7fecSSascha Wildner# or selected at run time as:
61f8a7fecSSascha Wildner#
71f8a7fecSSascha Wildner#   	'gdb -k -q -x /usr/share/misc/gdbinit ...'
81f8a7fecSSascha Wildner#
91f8a7fecSSascha Wildnerset print union
101f8a7fecSSascha Wildnerset history expansion on
111f8a7fecSSascha Wildner
121f8a7fecSSascha Wildnerdefine pcomm
131f8a7fecSSascha Wildner	printf "%10s\n",$arg0->td_comm
141f8a7fecSSascha Wildnerend
151f8a7fecSSascha Wildner
161f8a7fecSSascha Wildnerdefine lsvfs
171f8a7fecSSascha Wildner	set $vfc = (struct vfsconf *)vfsconf_list.stqh_first
181f8a7fecSSascha Wildner	printf "\nFilesystem      Refs    Flags\n"
191f8a7fecSSascha Wildner	while ($vfc != 0)
201f8a7fecSSascha Wildner		printf "%-10s %6d       0x%08x\n", $vfc->vfc_name, \
211f8a7fecSSascha Wildner			$vfc->vfc_refcount, $vfc->vfc_flags
221f8a7fecSSascha Wildner		set $vfc = $vfc->vfc_next.stqe_next
231f8a7fecSSascha Wildner	end
241f8a7fecSSascha Wildnerend
251f8a7fecSSascha Wildner
261f8a7fecSSascha Wildnerdefine lsmount
271f8a7fecSSascha Wildner	set $mnt = (mountlist->tqh_first)
281f8a7fecSSascha Wildner	while ($mnt != 0)
291f8a7fecSSascha Wildner		print *$mnt
301f8a7fecSSascha Wildner		set $mnt = $mnt->mnt_list->tqe_next
311f8a7fecSSascha Wildner	end
321f8a7fecSSascha Wildnerend
331f8a7fecSSascha Wildner
341f8a7fecSSascha Wildnerdefine lsvfsops
351f8a7fecSSascha Wildner	set $vfc = (struct vfsconf *)vfsconf_list.stqh_first
361f8a7fecSSascha Wildner	while ($vfc != 0)
371f8a7fecSSascha Wildner		printf "Filesystem: %s, Refs: %d, Flags: 0x%08x\n", \
381f8a7fecSSascha Wildner			$vfc->vfc_name, $vfc->vfc_refcount, $vfc->vfc_flags
391f8a7fecSSascha Wildner		printf "VFS ops: \n"
401f8a7fecSSascha Wildner		set print pretty
411f8a7fecSSascha Wildner		print *$vfc->vfc_vfsops
421f8a7fecSSascha Wildner		set print pretty off
431f8a7fecSSascha Wildner		set $vfc = $vfc->vfc_next.stqe_next
441f8a7fecSSascha Wildner	end
451f8a7fecSSascha Wildnerend
461f8a7fecSSascha Wildner
471f8a7fecSSascha Wildner
481f8a7fecSSascha Wildnerdefine kldstat
491f8a7fecSSascha Wildner	set $kld = linker_files.tqh_first
501f8a7fecSSascha Wildner	printf "\nId Refs Address    Size     Name\n"
511f8a7fecSSascha Wildner	while ($kld != 0)
521f8a7fecSSascha Wildner		printf "%2d %4d 0x%08x %-8x %s\n", \
531f8a7fecSSascha Wildner		$kld->id, $kld->refs, $kld->address, $kld->size, $kld->filename
541f8a7fecSSascha Wildner		set $kld = $kld->link.tqe_next
551f8a7fecSSascha Wildner	end
561f8a7fecSSascha Wildnerend
571f8a7fecSSascha Wildner
581f8a7fecSSascha Wildnerdefine psx
591f8a7fecSSascha Wildner    set $cpu = 0
601f8a7fecSSascha Wildner    printf "\ncpu  pid    thread    flags comm               wchan    wmesg\n"
611f8a7fecSSascha Wildner    while ($cpu < ncpus)
621f8a7fecSSascha Wildner	set $gd = &((struct privatespace *)&CPU_prvspace)[$cpu].mdglobaldata
631f8a7fecSSascha Wildner	set $td = $gd->mi.gd_tdallq.tqh_first
641f8a7fecSSascha Wildner	while ( $td != 0 )
651f8a7fecSSascha Wildner	    if ( $td->td_proc != 0 )
661f8a7fecSSascha Wildner		set $pid = $td->td_proc->p_pid
671f8a7fecSSascha Wildner	    else
681f8a7fecSSascha Wildner		set $pid = -1
691f8a7fecSSascha Wildner	    end
701f8a7fecSSascha Wildner	    if ( $td->td_wmesg != 0 )
711f8a7fecSSascha Wildner		printf "%3d %5d %08x %08x %-18s %08x %s\n",	\
721f8a7fecSSascha Wildner		    $cpu, $pid, $td, $td->td_flags, $td->td_comm, $td->td_wchan, \
731f8a7fecSSascha Wildner		    $td->td_wmesg
741f8a7fecSSascha Wildner	    else
751f8a7fecSSascha Wildner		printf "%3d %5d %08x %08x %-18s %08x\n",	\
761f8a7fecSSascha Wildner		    $cpu, $pid, $td, $td->td_flags, $td->td_comm, $td->td_wchan
771f8a7fecSSascha Wildner	    end
781f8a7fecSSascha Wildner	    set $td = $td->td_allq.tqe_next
791f8a7fecSSascha Wildner	end
801f8a7fecSSascha Wildner	set $cpu = $cpu + 1
811f8a7fecSSascha Wildner    end
821f8a7fecSSascha Wildnerend
831f8a7fecSSascha Wildner
841f8a7fecSSascha Wildner
851f8a7fecSSascha Wildnerdefine running_threads
861f8a7fecSSascha Wildner    set $icpu = 0
871f8a7fecSSascha Wildner	printf "\ncpu    curthread    wchan\n"
881f8a7fecSSascha Wildner	while ($icpu < ncpus)
891f8a7fecSSascha Wildner	    set $ipvspace = (struct privatespace *)&CPU_prvspace
901f8a7fecSSascha Wildner		set $gd = $ipvspace[$icpu].mdglobaldata.mi
911f8a7fecSSascha Wildner		set $td = $gd.gd_curthread
921f8a7fecSSascha Wildner	    printf "%d    %10s    %08x\n", \
931f8a7fecSSascha Wildner			$gd.gd_cpuid, $td->td_comm, $td->td_wchan
941f8a7fecSSascha Wildner	    set $icpu = $icpu + 1
951f8a7fecSSascha Wildner	end
961f8a7fecSSascha Wildnerend
971f8a7fecSSascha Wildner
981f8a7fecSSascha Wildnerdefine psax
998d70b4f1SAntonio Huete Jimenez    set $pos = 0
1008d70b4f1SAntonio Huete Jimenez    while $pos < allproc_hsize
1018d70b4f1SAntonio Huete Jimenez	set $proc = allprocs[$pos++]->lh_first
1021f8a7fecSSascha Wildner	while $proc != 0
1031f8a7fecSSascha Wildner		printf "%p%6d%10s\n",$proc,$proc->p_pid,$proc->p_comm
1041f8a7fecSSascha Wildner		set $proc = $proc->p_list.le_next
1051f8a7fecSSascha Wildner	end
1061f8a7fecSSascha Wildner    end
1078d70b4f1SAntonio Huete Jimenezend
1081f8a7fecSSascha Wildner
1091f8a7fecSSascha Wildnerdefine _infotok
1101f8a7fecSSascha Wildner	set $token = ($arg0)
1111f8a7fecSSascha Wildner	set $tokref = $token->t_ref
1121f8a7fecSSascha Wildner	if ($tokref != 0)
113925acd58SSascha Wildner		printf "%-15s %10d 0x%08x\n", $token->t_desc, \
114925acd58SSascha Wildner			$token->t_collisions, $tokref->tr_owner
1151f8a7fecSSascha Wildner	else
116925acd58SSascha Wildner		printf "%-15s %10d not held\n", $token->t_desc, \
117925acd58SSascha Wildner			$token->t_collisions
1181f8a7fecSSascha Wildner	end
1191f8a7fecSSascha Wildnerend
1201f8a7fecSSascha Wildner
1211f8a7fecSSascha Wildnerdefine infotok
122925acd58SSascha Wildner	printf "\nToken           collisions owner\n"
1231f8a7fecSSascha Wildner	_infotok ($arg0)
1241f8a7fecSSascha Wildnerend
1251f8a7fecSSascha Wildner
1261f8a7fecSSascha Wildnerdefine lstok
1278d70b4f1SAntonio Huete Jimenez	set $tok = 0
1288d70b4f1SAntonio Huete Jimenez	set $obj = 0
129925acd58SSascha Wildner	printf "\nToken           collisions owner\n"
1301f8a7fecSSascha Wildner	_infotok &pmap_token
1311f8a7fecSSascha Wildner	_infotok &dev_token
1321f8a7fecSSascha Wildner	_infotok &vm_token
1331f8a7fecSSascha Wildner	_infotok &vmspace_token
1341f8a7fecSSascha Wildner	_infotok &kvm_token
1358d70b4f1SAntonio Huete Jimenez	while $tok < allproc_hsize
136*54c19387SAntonio Huete Jimenez		if (proc_tokens[$tok].t_collisions > 0)
1378d70b4f1SAntonio Huete Jimenez			_infotok &proc_tokens[$tok]
1388d70b4f1SAntonio Huete Jimenez		end
139*54c19387SAntonio Huete Jimenez		set $tok = $tok + 1
1408d70b4f1SAntonio Huete Jimenez	end
1411f8a7fecSSascha Wildner	_infotok &tty_token
1421f8a7fecSSascha Wildner	_infotok &vnode_token
1438d70b4f1SAntonio Huete Jimenez	while $obj < 64
144*54c19387SAntonio Huete Jimenez		if (vmobj_tokens[$obj].t_collisions > 0)
1458d70b4f1SAntonio Huete Jimenez			_infotok &vmobj_tokens[$obj]
1468d70b4f1SAntonio Huete Jimenez		end
147*54c19387SAntonio Huete Jimenez		set $obj = $obj + 1
1488d70b4f1SAntonio Huete Jimenez	end
1491f8a7fecSSascha Wildnerend
1501f8a7fecSSascha Wildner
151b54e9cadSAntonio Huete Jimenezdefine lstdtok
152b54e9cadSAntonio Huete Jimenez	set $mytd=($arg0)
153b54e9cadSAntonio Huete Jimenez	printf "\nTokens for td  %p (%s)\n", $mytd, $mytd->td_comm
154b54e9cadSAntonio Huete Jimenez	printf "\nToken           collisions owner\n"
155b54e9cadSAntonio Huete Jimenez	set $pos = 0
156b54e9cadSAntonio Huete Jimenez	while (td->td_toks_array[$pos]->tr_tok) != 0
157b54e9cadSAntonio Huete Jimenez		_infotok &td->td_toks_array[$pos++]->tr_tok
158b54e9cadSAntonio Huete Jimenez	end
159b54e9cadSAntonio Huete Jimenezend
160b54e9cadSAntonio Huete Jimenez
161be64999cSSascha Wildnerdefine dmesg
162be64999cSSascha Wildner	set $bufp = msgbufp->msg_ptr
163be64999cSSascha Wildner	set $size = msgbufp->msg_size
16446613a84SSascha Wildner	set $rseq = msgbufp->msg_bufr % $size
16546613a84SSascha Wildner	set $wseq = msgbufp->msg_bufx % $size
166be64999cSSascha Wildner	if ( $bufp != 0 && $size != 0 && $rseq != $wseq )
167be64999cSSascha Wildner		while ( $rseq < $wseq )
168be64999cSSascha Wildner			set $c = $bufp + $rseq
169be64999cSSascha Wildner			printf "%c", *$c
170be64999cSSascha Wildner			set $rseq = $rseq + 1
171be64999cSSascha Wildner			if ( $rseq == msgbufp->msg_size )
172be64999cSSascha Wildner				set $rseq = 0
173be64999cSSascha Wildner			end
174be64999cSSascha Wildner		end
175be64999cSSascha Wildner		if ( *$c == '\n' )
176be64999cSSascha Wildner			printf "\n"
177be64999cSSascha Wildner		end
178be64999cSSascha Wildner		printf "\n"
179be64999cSSascha Wildner	end
180be64999cSSascha Wildnerend
181be64999cSSascha Wildner
1821f8a7fecSSascha Wildner# Documentation, usable within GDB using the 'help' command.
1831f8a7fecSSascha Wildnerdocument lsvfs
1841f8a7fecSSascha WildnerOutput list of loaded file systems, refcount, similar to the
1851f8a7fecSSascha Wildnerlsvfs(1) utility.
1861f8a7fecSSascha Wildnerend
1871f8a7fecSSascha Wildner
1881f8a7fecSSascha Wildnerdocument lsmount
1891f8a7fecSSascha WildnerIterate the current list of mount structures loaded from the
1901f8a7fecSSascha Wildnermemory core, there should be one per loaded VFS.
1911f8a7fecSSascha Wildnerend
1921f8a7fecSSascha Wildner
1931f8a7fecSSascha Wildnerdocument lsvfsops
1941f8a7fecSSascha WildnerDisplay the VFS operations vector for each file system found in
1951f8a7fecSSascha Wildnerthe memory core, preceded by a summarised header.
1961f8a7fecSSascha Wildnerend
1971f8a7fecSSascha Wildner
1981f8a7fecSSascha Wildnerdocument kldstat
1991f8a7fecSSascha WildnerOutput list of loaded kernel modules in kldstat(1) style.
2001f8a7fecSSascha Wildnerend
2011f8a7fecSSascha Wildner
2021f8a7fecSSascha Wildnerdocument pcomm
2031f8a7fecSSascha WildnerPrint command name of the given thread pointer (first argument).
2041f8a7fecSSascha Wildnerend
2051f8a7fecSSascha Wildner
2061f8a7fecSSascha Wildnerdocument psx
207bf703e55SSascha WildnerOutput a list of processes with wait-channel (wchan) information.
2081f8a7fecSSascha Wildnerend
2091f8a7fecSSascha Wildner
2101f8a7fecSSascha Wildnerdocument running_threads
2111f8a7fecSSascha WildnerList the threads which are currently running and their CPU number.
2121f8a7fecSSascha Wildnerend
2131f8a7fecSSascha Wildner
2141f8a7fecSSascha Wildnerdocument psax
2151f8a7fecSSascha WildnerOutput a list of processes.
2161f8a7fecSSascha Wildnerend
2171f8a7fecSSascha Wildner
2181f8a7fecSSascha Wildnerdocument lstok
2191f8a7fecSSascha WildnerDisplay all known global tokens and some information about them.
2201f8a7fecSSascha Wildnerend
2211f8a7fecSSascha Wildner
222b54e9cadSAntonio Huete Jimenezdocument lstdtok
223b54e9cadSAntonio Huete JimenezDisplay all tokens related to the specified thread.
224b54e9cadSAntonio Huete Jimenezend
225b54e9cadSAntonio Huete Jimenez
2261f8a7fecSSascha Wildnerdocument infotok
2271f8a7fecSSascha WildnerTakes one argument, a struct lwkt_token * (pointer) and prints some
2281f8a7fecSSascha Wildnerinformation about that token.
2291f8a7fecSSascha Wildnerend
230be64999cSSascha Wildner
231be64999cSSascha Wildnerdocument dmesg
232be64999cSSascha WildnerShows the unread portion of the kernel message buffer.
233be64999cSSascha Wildnerend
234