Annotation of XNU/osfmk/.gdbinit, revision 1.1

1.1     ! root        1: #
        !             2: # Kernel gdb macros
        !             3: #
        !             4: #  These gdb macros should be useful during kernel development in
        !             5: #  determining what's going on in the kernel.
        !             6: #
        !             7: #  All the convenience variables used by these macros begin with $kgm_
        !             8: 
        !             9: set $kgm_vers = 2
        !            10: 
        !            11: echo Loading Kernel GDB Macros package.  Type "help kgm" for more info.\n
        !            12: 
        !            13: define kgm
        !            14: printf "These are the kernel gdb macros version %d.  ", $kgm_vers
        !            15: echo  Type "help kgm" for more info.\n
        !            16: end
        !            17: 
        !            18: document kgm
        !            19: | These are the kernel gdb macros.  These gdb macros are intended to be
        !            20: | used when debugging a remote kernel via the kdp protocol.  Typically, you
        !            21: | would connect to your remote target like so:
        !            22: |     (gdb) target remote-kdp
        !            23: |     (gdb) attach <name-of-remote-host>
        !            24: |
        !            25: | The following macros are available in this package:
        !            26: |
        !            27: |     showalltasks   Display a summary listing of tasks
        !            28: |     showallacts    Display a summary listing of all activations
        !            29: |     showallstacks  Display the kernel stacks for all activations
        !            30: |     showallvm      Display a summary listing of all the vm maps
        !            31: |     showallvme     Display a summary listing of all the vm map entries
        !            32: |     showallipc     Display a summary listing of all the ipc spaces
        !            33: |     showallrights  Display a summary listing of all the ipc rights
        !            34: |
        !            35: |     showtask       Display status of the specified task
        !            36: |     showtaskacts   Display the status of all activations in the task
        !            37: |     showtaskstacks Display all kernel stacks for all activations in the task
        !            38: |     showtaskvm     Display status of the specified task's vm_map
        !            39: |     showtaskvme    Display a summary list of the task's vm_map entries
        !            40: |     showtaskipc    Display status of the specified task's ipc space
        !            41: |     showtaskrights Display a summary list of the task's ipc space entries
        !            42: |
        !            43: |     showact       Display status of the specified thread activation
        !            44: |     showactstack   Display the kernel stack for the specified activation
        !            45: |
        !            46: |     showmap       Display the status of the specified vm_map
        !            47: |     showmapvme     Display a summary list of the specified vm_map's entries
        !            48: |
        !            49: |     showipc        Display the status of the specified ipc space
        !            50: |     showrights     Display a summary list of all the rights in an ipc space
        !            51: |
        !            52: |     showpid        Display the status of the process identified by pid
        !            53: |     showproc       Display the status of the process identified by a proc pointer
        !            54: |
        !            55: | Type "help <macro>" for more specific help on a particular macro.
        !            56: | Type "show user <macro>" to see what the macro is really doing.
        !            57: end
        !            58: 
        !            59: 
        !            60: define showactheader
        !            61:     printf "            activation  "
        !            62:     printf "thread      pri  state  wait_queue  wait_event\n"
        !            63: end
        !            64: 
        !            65: 
        !            66: define showactint
        !            67:    printf "            0x%08x  ", $arg0
        !            68:    set $kgm_actp = *(Thread_Activation *)$arg0
        !            69:    if $kgm_actp.thread
        !            70:        set $kgm_thread = *$kgm_actp.thread
        !            71:        printf "0x%08x  ", $kgm_actp.thread
        !            72:        printf "%3d  ", $kgm_thread.sched_pri
        !            73:        set $kgm_state = $kgm_thread.state
        !            74:        if $kgm_state & 0x80
        !            75:            printf "I" 
        !            76:        end
        !            77:        if $kgm_state & 0x40
        !            78:            printf "P" 
        !            79:        end
        !            80:        if $kgm_state & 0x20
        !            81:            printf "A" 
        !            82:        end
        !            83:        if $kgm_state & 0x10
        !            84:            printf "H" 
        !            85:        end
        !            86:        if $kgm_state & 0x08
        !            87:            printf "U" 
        !            88:        end
        !            89:        if $kgm_state & 0x04
        !            90:            printf "R" 
        !            91:        end
        !            92:        if $kgm_state & 0x02
        !            93:            printf "S" 
        !            94:        end
        !            95:        if $kgm_state & 0x01
        !            96:            printf "W\t" 
        !            97:            printf "0x%08x  ", $kgm_thread.wait_queue
        !            98:            output /a $kgm_thread.wait_event
        !            99:        end
        !           100:        if $arg1 != 0
        !           101:            if ($kgm_thread.kernel_stack != 0)
        !           102:                set $mysp = $kgm_actp->mact.pcb.ss.r1
        !           103:                while ($mysp != 0) && (($mysp & 0xf) == 0)
        !           104:                                printf "\n\t\t\t"
        !           105:                                output /a * ($mysp + 8)
        !           106:                                set $mysp = * $mysp
        !           107:                end
        !           108:            else
        !           109:                printf "\n\t\t\tcontinuation="
        !           110:                output /a $kgm_thread.continuation
        !           111:            end
        !           112:            printf "\n"
        !           113:        else
        !           114:            printf "\n"
        !           115:        end
        !           116:     end
        !           117: end        
        !           118: 
        !           119: define showact
        !           120:     showactheader
        !           121:     showactint $arg0 0
        !           122: end
        !           123: document showact
        !           124: | Routine to print out the state of a specific thread activation.
        !           125: | The following is the syntax:
        !           126: |     (gdb) showact <activation> 
        !           127: end
        !           128: 
        !           129: 
        !           130: define showactstack
        !           131:     showactheader
        !           132:     showactint $arg0 1
        !           133: end
        !           134: document showactstack
        !           135: | Routine to print out the stack of a specific thread activation.
        !           136: | The following is the syntax:
        !           137: |     (gdb) showactstack <activation> 
        !           138: end
        !           139: 
        !           140: 
        !           141: define showallacts
        !           142:     set $kgm_head_taskp = &default_pset.tasks
        !           143:     set $kgm_taskp = (Task *)($kgm_head_taskp->next)
        !           144:     while $kgm_taskp != $kgm_head_taskp
        !           145:         showtaskheader
        !           146:        showtaskint $kgm_taskp
        !           147:        showactheader
        !           148:        set $kgm_head_actp = &($kgm_taskp->thr_acts)
        !           149:         set $kgm_actp = (Thread_Activation *)($kgm_taskp->thr_acts.next)
        !           150:        while $kgm_actp != $kgm_head_actp
        !           151:            showactint $kgm_actp 0
        !           152:            set $kgm_actp = (Thread_Activation *)($kgm_actp->thr_acts.next)
        !           153:         end
        !           154:        printf "\n"
        !           155:        set $kgm_taskp = (Task *)($kgm_taskp->pset_tasks.next)
        !           156:     end
        !           157: end
        !           158: document showallacts
        !           159: | Routine to print out a summary listing of all the thread activations.
        !           160: | The following is the syntax:
        !           161: |     (gdb) showallacts
        !           162: end
        !           163: 
        !           164: 
        !           165: define showallstacks
        !           166:     set $kgm_head_taskp = &default_pset.tasks
        !           167:     set $kgm_taskp = (Task *)($kgm_head_taskp->next)
        !           168:     while $kgm_taskp != $kgm_head_taskp
        !           169:         showtaskheader
        !           170:        showtaskint $kgm_taskp
        !           171:        set $kgm_head_actp = &($kgm_taskp->thr_acts)
        !           172:         set $kgm_actp = (Thread_Activation *)($kgm_taskp->thr_acts.next)
        !           173:        while $kgm_actp != $kgm_head_actp
        !           174:            showactheader
        !           175:            showactint $kgm_actp 1
        !           176:            set $kgm_actp = (Thread_Activation *)($kgm_actp->thr_acts.next)
        !           177:         end
        !           178:        printf "\n"
        !           179:        set $kgm_taskp = (Task *)($kgm_taskp->pset_tasks.next)
        !           180:     end
        !           181: end
        !           182: document showallstacks
        !           183: | Routine to print out a summary listing of all the thread kernel stacks.
        !           184: | The following is the syntax:
        !           185: |     (gdb) showallstacks
        !           186: end
        !           187: 
        !           188: 
        !           189: 
        !           190: 
        !           191: define showmapheader
        !           192:     printf "vm_map      pmap        vm_size    "
        !           193:     printf "#ents rpage  hint        first_free\n"
        !           194: end
        !           195: 
        !           196: define showvmeheader
        !           197:     printf "            entry       start       "
        !           198:     printf "prot #page  object      offset\n"
        !           199: end
        !           200: 
        !           201: define showvmint
        !           202:     set $kgm_mapp = (vm_map_t)$arg0
        !           203:     set $kgm_map = *$kgm_mapp
        !           204:     printf "0x%08x  ", $arg0
        !           205:     printf "0x%08x  ", $kgm_map.pmap
        !           206:     printf "0x%08x  ", $kgm_map.size
        !           207:     printf "%3d  ", $kgm_map.hdr.nentries
        !           208:     printf "%5d  ", $kgm_map.pmap->stats.resident_count
        !           209:     printf "0x%08x  ", $kgm_map.hint
        !           210:     printf "0x%08x\n", $kgm_map.first_free
        !           211:     if $arg1 != 0
        !           212:        showvmeheader   
        !           213:        set $kgm_head_vmep = &($kgm_mapp->hdr.links)
        !           214:        set $kgm_vmep = $kgm_map.hdr.links.next
        !           215:        while (($kgm_vmep != 0) && ($kgm_vmep != $kgm_head_vmep))
        !           216:            set $kgm_vme = *$kgm_vmep
        !           217:            printf "            0x%08x  ", $kgm_vmep
        !           218:            printf "0x%08x  ", $kgm_vme.links.start
        !           219:            printf "%1x", $kgm_vme.protection
        !           220:            printf "%1x", $kgm_vme.max_protection
        !           221:            if $kgm_vme.inheritance == 0x0
        !           222:                printf "S"
        !           223:            end
        !           224:            if $kgm_vme.inheritance == 0x1
        !           225:                printf "C"
        !           226:            end
        !           227:            if $kgm_vme.inheritance == 0x2
        !           228:                printf "-"
        !           229:            end
        !           230:            if $kgm_vme.inheritance == 0x3
        !           231:                printf "D"
        !           232:            end
        !           233:            if $kgm_vme.is_sub_map
        !           234:                printf "s "
        !           235:            else
        !           236:                if $kgm_vme.needs_copy
        !           237:                    printf "n "
        !           238:                else
        !           239:                    printf "  "
        !           240:                end
        !           241:            end
        !           242:            printf "%5d  ",($kgm_vme.links.end - $kgm_vme.links.start) >> 12
        !           243:            printf "0x%08x  ", $kgm_vme.object.vm_object
        !           244:            printf "0x%08x\n", $kgm_vme.offset
        !           245:            set $kgm_vmep = $kgm_vme.links.next
        !           246:         end
        !           247:     end
        !           248:     printf "\n"
        !           249: end
        !           250: 
        !           251: 
        !           252: define showmapvme
        !           253:        showmapheader
        !           254:        showvmint $arg0 1
        !           255: end
        !           256: document showmapvme
        !           257: | Routine to print out a summary listing of all the entries in a vm_map
        !           258: | The following is the syntax:
        !           259: |     (gdb) showmapvme <vm_map>
        !           260: end
        !           261: 
        !           262: 
        !           263: define showmap
        !           264:        showmapheader
        !           265:        showvmint $arg0 0
        !           266: end
        !           267: document showmap
        !           268: | Routine to print out a summary description of a vm_map
        !           269: | The following is the syntax:
        !           270: |     (gdb) showmap <vm_map>
        !           271: end
        !           272: 
        !           273: define showallvm
        !           274:     set $kgm_head_taskp = &default_pset.tasks
        !           275:     set $kgm_taskp = (Task *)($kgm_head_taskp->next)
        !           276:     while $kgm_taskp != $kgm_head_taskp
        !           277:         showtaskheader
        !           278:        showmapheader
        !           279:        showtaskint $kgm_taskp
        !           280:        showvmint $kgm_taskp->map 0
        !           281:        set $kgm_taskp = (Task *)($kgm_taskp->pset_tasks.next)
        !           282:     end
        !           283: end
        !           284: document showallvm
        !           285: | Routine to print a summary listing of all the vm maps
        !           286: | The following is the syntax:
        !           287: |     (gdb) showallvm
        !           288: end
        !           289: 
        !           290: 
        !           291: define showallvme
        !           292:     set $kgm_head_taskp = &default_pset.tasks
        !           293:     set $kgm_taskp = (Task *)($kgm_head_taskp->next)
        !           294:     while $kgm_taskp != $kgm_head_taskp
        !           295:         showtaskheader
        !           296:        showmapheader
        !           297:        showtaskint $kgm_taskp
        !           298:        showvmint $kgm_taskp->map 1
        !           299:        set $kgm_taskp = (Task *)($kgm_taskp->pset_tasks.next)
        !           300:     end
        !           301: end
        !           302: document showallvme
        !           303: | Routine to print a summary listing of all the vm map entries
        !           304: | The following is the syntax:
        !           305: |     (gdb) showallvme
        !           306: end
        !           307: 
        !           308: 
        !           309: define showipcheader
        !           310:     printf "ipc_space   is_table    table_next "
        !           311:     printf "flags tsize  splaytree   splaybase\n"
        !           312: end
        !           313: 
        !           314: define showipceheader
        !           315:     printf "            entry       name        "
        !           316:     printf "rite urefs  object      request\n"
        !           317: end
        !           318: 
        !           319: define showipceint
        !           320:     set $kgm_ie = *(ipc_entry_t)$arg0
        !           321:     printf "            0x%08x  ", $arg0
        !           322:     printf "0x%08x  ", $arg1
        !           323:     if $kgm_ie.ie_bits & 0x00010000
        !           324:        if $kgm_ie.ie_bits & 0x00020000
        !           325:            printf " SR"
        !           326:        else
        !           327:            printf "  S"
        !           328:        end
        !           329:     else
        !           330:        if $kgm_ie.ie_bits & 0x00020000
        !           331:            printf "  R"
        !           332:        end
        !           333:     end
        !           334:     if $kgm_ie.ie_bits & 0x00040000
        !           335:        printf "  O"
        !           336:     end
        !           337:     if $kgm_ie.ie_bits & 0x00080000
        !           338:        printf "SET"
        !           339:     end
        !           340:     if $kgm_ie.ie_bits & 0x00100000
        !           341:        printf "  D"
        !           342:     end
        !           343:     if $kgm_ie.ie_bits & 0x00800000
        !           344:        printf "c "
        !           345:     else
        !           346:        printf "  "
        !           347:     end
        !           348:     printf "%5d  ", $kgm_ie.ie_bits & 0xffff
        !           349:     printf "0x%08x  ", $kgm_ie.ie_object
        !           350:     printf "0x%08x\n", $kgm_ie.index.request
        !           351: end
        !           352: 
        !           353: define showipcint
        !           354:     set $kgm_isp = (ipc_space_t)$arg0
        !           355:     set $kgm_is = *$kgm_isp
        !           356:     printf "0x%08x  ", $arg0
        !           357:     printf "0x%08x  ", $kgm_is.is_table
        !           358:     printf "0x%08x  ", $kgm_is.is_table_next
        !           359:     if $kgm_is.is_growing != 0
        !           360:        printf "G"
        !           361:     else
        !           362:        printf " "
        !           363:     end
        !           364:     if $kgm_is.is_fast != 0
        !           365:        printf "F"
        !           366:     else
        !           367:        printf " "
        !           368:     end
        !           369:     if $kgm_is.is_active != 0
        !           370:        printf "A  "
        !           371:     else
        !           372:        printf "   "
        !           373:     end
        !           374:     printf "%5d  ", $kgm_is.is_table_size
        !           375:     printf "0x%08x  ", $kgm_is.is_tree_total
        !           376:     printf "0x%08x\n", &$kgm_isp->is_tree
        !           377:     if $arg1 != 0
        !           378:        showipceheader
        !           379:        set $kgm_iindex = 0
        !           380:        set $kgm_iep = $kgm_is.is_table
        !           381:         while ( $kgm_iindex < $kgm_is.is_table_size )
        !           382:            set $kgm_ie = *$kgm_iep
        !           383:            if $kgm_ie.ie_bits & 0x001f0000
        !           384:                set $kgm_name = (($kgm_iindex << 8)|($kgm_ie.ie_bits >> 24))
        !           385:                showipceint $kgm_iep $kgm_name
        !           386:            end
        !           387:            set $kgm_iindex = $kgm_iindex + 1
        !           388:            set $kgm_iep = &($kgm_is.is_table[$kgm_iindex])
        !           389:        end
        !           390:        if $kgm_is.is_tree_total
        !           391:            printf "Still need to write tree traversal\n"
        !           392:        end
        !           393:     end
        !           394:     printf "\n"
        !           395: end
        !           396: 
        !           397: 
        !           398: define showipc
        !           399:        set $kgm_isp = (ipc_space_t)$arg0
        !           400:         showipcheader
        !           401:        showipcint $kgm_isp 0
        !           402: end
        !           403: document showipc
        !           404: | Routine to print the status of the specified ipc space
        !           405: | The following is the syntax:
        !           406: |     (gdb) showipc <ipc_space>
        !           407: end
        !           408: 
        !           409: define showrights
        !           410:        set $kgm_isp = (ipc_space_t)$arg0
        !           411:         showipcheader
        !           412:        showipcint $kgm_isp 1
        !           413: end
        !           414: document showrights
        !           415: | Routine to print a summary list of all the rights in a specified ipc space
        !           416: | The following is the syntax:
        !           417: |     (gdb) showrights <ipc_space>
        !           418: end
        !           419: 
        !           420: 
        !           421: define showtaskipc
        !           422:        set $kgm_taskp = (task_t)$arg0
        !           423:        showtaskheader
        !           424:     showipcheader
        !           425:        showtaskint $kgm_taskp
        !           426:        showipcint $kgm_taskp->itk_space 0
        !           427: end
        !           428: document showtaskipc
        !           429: | Routine to print the status of the ipc space for a task
        !           430: | The following is the syntax:
        !           431: |     (gdb) showtaskipc <task>
        !           432: end
        !           433: 
        !           434: 
        !           435: define showtaskrights
        !           436:        set $kgm_taskp = (task_t)$arg0
        !           437:        showtaskheader
        !           438:         showipcheader
        !           439:        showtaskint $kgm_taskp
        !           440:        showipcint $kgm_taskp->itk_space 1
        !           441: end
        !           442: document showtaskrights
        !           443: | Routine to print a summary listing of all the ipc rights for a task
        !           444: | The following is the syntax:
        !           445: |     (gdb) showtaskrights <task>
        !           446: end
        !           447: 
        !           448: define showallipc
        !           449:     set $kgm_head_taskp = &default_pset.tasks
        !           450:     set $kgm_taskp = (Task *)($kgm_head_taskp->next)
        !           451:     while $kgm_taskp != $kgm_head_taskp
        !           452:         showtaskheader
        !           453:         showipcheader
        !           454:        showtaskint $kgm_taskp
        !           455:        showipcint $kgm_taskp->itk_space 0
        !           456:        set $kgm_taskp = (Task *)($kgm_taskp->pset_tasks.next)
        !           457:     end
        !           458: end
        !           459: document showallipc
        !           460: | Routine to print a summary listing of all the ipc spaces
        !           461: | The following is the syntax:
        !           462: |     (gdb) showallipc
        !           463: end
        !           464: 
        !           465: 
        !           466: define showallrights
        !           467:     set $kgm_head_taskp = &default_pset.tasks
        !           468:     set $kgm_taskp = (Task *)($kgm_head_taskp->next)
        !           469:     while $kgm_taskp != $kgm_head_taskp
        !           470:         showtaskheader
        !           471:         showipcheader
        !           472:        showtaskint $kgm_taskp
        !           473:        showipcint $kgm_taskp->itk_space 1
        !           474:        set $kgm_taskp = (Task *)($kgm_taskp->pset_tasks.next)
        !           475:     end
        !           476: end
        !           477: document showallrights
        !           478: | Routine to print a summary listing of all the ipc rights
        !           479: | The following is the syntax:
        !           480: |     (gdb) showallrights
        !           481: end
        !           482: 
        !           483: 
        !           484: define showtaskvm
        !           485:        set $kgm_taskp = (task_t)$arg0
        !           486:        showtaskheader
        !           487:        showmapheader
        !           488:        showtaskint $kgm_taskp
        !           489:        showvmint $kgm_taskp->map 0
        !           490: end
        !           491: document showtaskvm
        !           492: | Routine to print out a summary description of a task's vm_map
        !           493: | The following is the syntax:
        !           494: |     (gdb) showtaskvm <task>
        !           495: end
        !           496: 
        !           497: define showtaskvme
        !           498:        set $kgm_taskp = (task_t)$arg0
        !           499:        showtaskheader
        !           500:        showmapheader
        !           501:        showtaskint $kgm_taskp
        !           502:        showvmint $kgm_taskp->map 1
        !           503: end
        !           504: document showtaskvme
        !           505: | Routine to print out a summary listing of a task's vm_map_entries
        !           506: | The following is the syntax:
        !           507: |     (gdb) showtaskvme <task>
        !           508: end
        !           509: 
        !           510: 
        !           511: define showtaskheader
        !           512:     printf "task        vm_map      ipc_space  #acts  "
        !           513:     showprocheader
        !           514: end
        !           515: 
        !           516: 
        !           517: define showtaskint
        !           518:     set $kgm_task = *(Task *)$arg0
        !           519:     printf "0x%08x  ", $arg0
        !           520:     printf "0x%08x  ", $kgm_task.map
        !           521:     printf "0x%08x  ", $kgm_task.itk_space
        !           522:     printf "%3d  ", $kgm_task.thr_act_count
        !           523:     showprocint $kgm_task.bsd_info
        !           524: end
        !           525: 
        !           526: define showtask
        !           527:     showtaskheader
        !           528:     showtaskint $arg0
        !           529: end
        !           530: document showtask
        !           531: | Routine to print out info about a task.
        !           532: | The following is the syntax:
        !           533: |     (gdb) showtask <task>
        !           534: end
        !           535: 
        !           536: 
        !           537: define showtaskacts
        !           538:     showtaskheader
        !           539:     set $kgm_taskp = (Task *)$arg0
        !           540:     showtaskint $kgm_taskp
        !           541:     showactheader
        !           542:     set $kgm_head_actp = &($kgm_taskp->thr_acts)
        !           543:     set $kgm_actp = (Thread_Activation *)($kgm_taskp->thr_acts.next)
        !           544:     while $kgm_actp != $kgm_head_actp
        !           545:        showactint $kgm_actp 0
        !           546:        set $kgm_actp = (Thread_Activation *)($kgm_actp->thr_acts.next)
        !           547:     end
        !           548: end
        !           549: document showtaskacts
        !           550: | Routine to print a summary listing of the activations in a task
        !           551: | The following is the syntax:
        !           552: |     (gdb) showtaskacts <task>
        !           553: end
        !           554: 
        !           555: 
        !           556: define showtaskstacks
        !           557:     showtaskheader
        !           558:     set $kgm_taskp = (Task *)$arg0
        !           559:     showtaskint $kgm_taskp
        !           560:     set $kgm_head_actp = &($kgm_taskp->thr_acts)
        !           561:     set $kgm_actp = (Thread_Activation *)($kgm_taskp->thr_acts.next)
        !           562:     while $kgm_actp != $kgm_head_actp
        !           563:         showactheader
        !           564:        showactint $kgm_actp 1
        !           565:        set $kgm_actp = (Thread_Activation *)($kgm_actp->thr_acts.next)
        !           566:     end
        !           567: end
        !           568: document showtaskstacks
        !           569: | Routine to print a summary listing of the activations in a task and their stacks
        !           570: | The following is the syntax:
        !           571: |     (gdb) showtaskstacks <task>
        !           572: end
        !           573: 
        !           574: 
        !           575: define showalltasks
        !           576:     showtaskheader
        !           577:     set $kgm_head_taskp = &default_pset.tasks
        !           578:     set $kgm_taskp = (Task *)($kgm_head_taskp->next)
        !           579:     while $kgm_taskp != $kgm_head_taskp
        !           580:        showtaskint $kgm_taskp
        !           581:        set $kgm_taskp = (Task *)($kgm_taskp->pset_tasks.next)
        !           582:     end
        !           583: end
        !           584: document showalltasks
        !           585: | Routine to print a summary listing of all the tasks
        !           586: | The following is the syntax:
        !           587: |     (gdb) showalltasks
        !           588: end
        !           589: 
        !           590: 
        !           591: define showprocheader
        !           592:     printf " pid  proc        command\n"
        !           593: end
        !           594: 
        !           595: define showprocint
        !           596:     set $kgm_procp = (struct proc *)$arg0
        !           597:     if $kgm_procp != 0
        !           598:         printf "%5d  ", $kgm_procp->p_pid
        !           599:        printf "0x%08x  ", $kgm_procp
        !           600:        printf "%s\n", $kgm_procp->p_comm
        !           601:     else
        !           602:        printf "  *0*  0x00000000  --\n"
        !           603:     end
        !           604: end
        !           605: 
        !           606: define showpid
        !           607:     showtaskheader
        !           608:     set $kgm_head_taskp = &default_pset.tasks
        !           609:     set $kgm_taskp = (Task *)($kgm_head_taskp->next)
        !           610:     while $kgm_taskp != $kgm_head_taskp
        !           611:        set $kgm_procp = (struct proc *)$kgm_taskp->bsd_info
        !           612:        if (($kgm_procp != 0) && ($kgm_procp->p_pid == $arg0))
        !           613:            showtaskint $kgm_taskp
        !           614:            set $kgm_taskp = $kgm_head_taskp
        !           615:        else
        !           616:            set $kgm_taskp = (Task *)($kgm_taskp->pset_tasks.next)
        !           617:        end
        !           618:     end
        !           619: end
        !           620: document showpid
        !           621: | Routine to print a summary listing of all the tasks
        !           622: | The following is the syntax:
        !           623: |     (gdb) showalltasks
        !           624: end
        !           625: 
        !           626: define showproc
        !           627:     showtaskheader
        !           628:     set $kgm_procp = (struct proc *)$arg0
        !           629:     showtaskint $kgm_procp->task $arg1 $arg2
        !           630: end
        !           631: 
        !           632: 
        !           633: define kdb
        !           634:     set switch_debugger=1
        !           635:     continue
        !           636: end
        !           637: document kdb
        !           638: | kdb - Switch to the inline kernel debugger
        !           639: |
        !           640: | usage: kdb
        !           641: |
        !           642: | The kdb macro allows you to invoke the inline kernel debugger.
        !           643: end
        !           644: 
        !           645: define showpsetheader
        !           646:     printf "portset     waitqueue   recvname    "
        !           647:     printf "flags refs  recvspace   process\n"
        !           648: end
        !           649: 
        !           650: define showportheader
        !           651:     printf "port        mqueue      recvname    "
        !           652:     printf "flags refs  recvspace   process\n"
        !           653: end
        !           654: 
        !           655: define showportmemberheader
        !           656:     printf "            port        recvname    "
        !           657:     printf "flags refs  mqueue      msgcount\n"
        !           658: end
        !           659: 
        !           660: define showkmsgheader
        !           661:     printf "            kmsg        size        "
        !           662:     printf "disp msgid  remote-port local-port\n"
        !           663: end
        !           664: 
        !           665: define showkmsgint
        !           666:     printf "            0x%08x  ", $arg0
        !           667:     set $kgm_kmsgh = ((ipc_kmsg_t)$arg0)->ikm_header
        !           668:     printf "0x%08x  ", $kgm_kmsgh.msgh_size
        !           669:     if (($kgm_kmsgh.msgh_bits & 0xff) == 19)
        !           670:        printf "rC"
        !           671:     else
        !           672:        printf "rM"
        !           673:     end
        !           674:     if (($kgm_kmsgh.msgh_bits & 0xff00) == (19 < 8))
        !           675:        printf "lC"
        !           676:     else
        !           677:        printf "lM"
        !           678:     end
        !           679:     if ($kgm_kmsgh.msgh_bits & 0xf0000000)
        !           680:        printf "c"
        !           681:     else
        !           682:        printf "s"
        !           683:     end
        !           684:     printf "%5d  ", $kgm_kmsgh.msgh_msgid
        !           685:     printf "0x%08x  ", $kgm_kmsgh.msgh_remote_port
        !           686:     printf "0x%08x\n", $kgm_kmsgh.msgh_local_port
        !           687: end
        !           688: 
        !           689: define showprocforspace
        !           690:     set $kgm_spacep = (ipc_space_t)$arg0
        !           691:     set $kgm_found = 0
        !           692:     set $kgm_head_taskp = &default_pset.tasks
        !           693:     set $kgm_taskp = (Task *)($kgm_head_taskp->next)
        !           694:     while (!$kgm_found && ($kgm_taskp != $kgm_head_taskp))
        !           695:        if ($kgm_taskp->itk_space == $kgm_spacep)
        !           696:            set $kgm_found = 1
        !           697:            set $kgm_procp = (struct proc *)$kgm_taskp->bsd_info
        !           698:            if $kgm_procp != 0
        !           699:                printf "%s\n", $kgm_procp->p_comm
        !           700:            else
        !           701:                printf "task 0x%08x\n", $kgm_taskp
        !           702:            end
        !           703:        end
        !           704:        set $kgm_taskp = (Task *)($kgm_taskp->pset_tasks.next)
        !           705:     end
        !           706: end
        !           707: 
        !           708: define showportmember
        !           709:     printf "            0x%08x  ", $arg0
        !           710:     set $kgm_portp = (ipc_port_t)$arg0
        !           711:     printf "0x%08x  ", $kgm_portp->ip_object.io_receiver_name
        !           712:     if ($kgm_portp->ip_object.io_bits & 0x80000000)
        !           713:        printf "A"
        !           714:     else
        !           715:        printf " "
        !           716:     end
        !           717:     if ($kgm_portp->ip_object.io_bits & 0x7fff0000)
        !           718:        printf "Set "
        !           719:     else
        !           720:        printf "Port"
        !           721:     end
        !           722:     printf "%5d  ", $kgm_portp->ip_object.io_references
        !           723:     printf "0x%08x  ", &($kgm_portp->ip_messages)
        !           724:     printf "0x%08x\n", $kgm_portp->ip_messages.data.port.msgcount
        !           725: end
        !           726: 
        !           727: define showportint
        !           728:     printf "0x%08x  ", $arg0
        !           729:     set $kgm_portp = (ipc_port_t)$arg0
        !           730:     printf "0x%08x  ", &($kgm_portp->ip_messages)
        !           731:     printf "0x%08x  ", $kgm_portp->ip_object.io_receiver_name
        !           732:     if ($kgm_portp->ip_object.io_bits & 0x80000000)
        !           733:        printf "A"
        !           734:     else
        !           735:        printf "D"
        !           736:     end
        !           737:     if ($kgm_portp->ip_object.io_bits & 0x7fff0000)
        !           738:        printf "Set "
        !           739:     else
        !           740:        printf "Port"
        !           741:     end
        !           742:     printf "%5d  ", $kgm_portp->ip_object.io_references
        !           743:     printf "0x%08x  ", $kgm_portp->data.receiver
        !           744:     showprocforspace $kgm_portp->data.receiver
        !           745:     set $kgm_kmsgp = (ipc_kmsg_t)$kgm_portp->ip_messages.data.port.messages.ikmq_base
        !           746:     if $arg1 && $kgm_kmsgp
        !           747:        showkmsgheader
        !           748:        showkmsgint $kgm_kmsgp
        !           749:        set $kgm_kmsgheadp = $kgm_kmsgp
        !           750:        set $kgm_kmsgp = $kgm_kmsgp->ikm_next
        !           751:        while $kgm_kmsgp != $kgm_kmsgheadp
        !           752:            showkmsgint $kgm_kmsgp
        !           753:            set $kgm_kmsgp = $kgm_kmsgp->ikm_next
        !           754:         end
        !           755:     end
        !           756: end
        !           757: 
        !           758: define showpsetint
        !           759:     printf "0x%08x  ", $arg0
        !           760:     set $kgm_psetp = (ipc_pset_t)$arg0
        !           761:     printf "0x%08x  ", &($kgm_psetp->ips_messages)
        !           762:     printf "0x%08x  ", $kgm_psetp->ips_object.io_receiver_name
        !           763:     if ($kgm_psetp->ips_object.io_bits & 0x80000000)
        !           764:        printf "A"
        !           765:     else
        !           766:        printf "D"
        !           767:     end
        !           768:     if ($kgm_psetp->ips_object.io_bits & 0x7fff0000)
        !           769:        printf "Set "
        !           770:     else
        !           771:        printf "Port"
        !           772:     end
        !           773:     printf "%5d  ", $kgm_psetp->ips_object.io_references
        !           774:     set $kgm_sublinksp = &($kgm_psetp->ips_messages.data.set_queue.wqs_sublinks)
        !           775:     set $kgm_wql = (wait_queue_link_t)$kgm_sublinksp->next
        !           776:     set $kgm_found = 0
        !           777:     while ( (queue_entry_t)$kgm_wql != (queue_entry_t)$kgm_sublinksp)
        !           778:         set $kgm_portp = (ipc_port_t)((int)($kgm_wql->wql_element->wqe_queue) - ((int)$kgm_portoff))
        !           779:        if !$kgm_found  
        !           780:            printf "0x%08x  ", $kgm_portp->data.receiver
        !           781:            showprocforspace $kgm_portp->data.receiver
        !           782:            showportmemberheader
        !           783:            set $kgm_found = 1
        !           784:        end
        !           785:        showportmember $kgm_portp 0
        !           786:        set $kgm_wql = (wait_queue_link_t)$kgm_wql->wql_sublinks.next
        !           787:     end
        !           788:     if !$kgm_found   
        !           789:        printf "--n/e--     --n/e--\n"
        !           790:     end
        !           791: end
        !           792: 
        !           793: define showpset
        !           794:     showpsetheader
        !           795:     showpsetint $arg0 1
        !           796: end
        !           797: 
        !           798: define showport
        !           799:     showportheader
        !           800:     showportint $arg0 1
        !           801: end
        !           802: 
        !           803: define showmqueue
        !           804:     set $kgm_mqueue = *(ipc_mqueue_t)$arg0
        !           805:     set $kgm_psetoff = &(((ipc_pset_t)0)->ips_messages)
        !           806:     set $kgm_portoff = &(((ipc_port_t)0)->ip_messages)
        !           807:     if ($kgm_mqueue.data.set_queue.wqs_wait_queue.wq_issub)
        !           808:        set $kgm_pset = (((int)$arg0) - ((int)$kgm_psetoff))
        !           809:         showpsetheader
        !           810:        showpsetint $kgm_pset 1
        !           811:     else
        !           812:        showportheader
        !           813:        set $kgm_port = (((int)$arg0) - ((int)$kgm_portoff))
        !           814:        showportint $kgm_port 1
        !           815:     end
        !           816: end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.