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