Loading...
--- xnu/xnu-792.13.8/kgmacros
+++ /dev/null
@@ -1,2545 +0,0 @@
-#
-# Kernel gdb macros
-#
-# These gdb macros should be useful during kernel development in
-# determining what's going on in the kernel.
-#
-# All the convenience variables used by these macros begin with $kgm_
-
-set print asm-demangle on
-set cp-abi gnu-v2
-
-echo Loading Kernel GDB Macros package. Type "help kgm" for more info.\n
-
-define kgm
-printf ""
-echo These are the gdb macros for kernel debugging. Type "help kgm" for more info.\n
-end
-
-document kgm
-| These are the kernel gdb macros. These gdb macros are intended to be
-| used when debugging a remote kernel via the kdp protocol. Typically, you
-| would connect to your remote target like so:
-| (gdb) target remote-kdp
-| (gdb) attach <name-of-remote-host>
-|
-| The following macros are available in this package:
-| showversion Displays a string describing the remote kernel version
-|
-| showalltasks Display a summary listing of all tasks
-| showallthreads Display info about all threads in the system
-| showallstacks Display the stack for each thread in the system
-| showcurrentthreads Display info about the thread running on each cpu
-| showcurrentstacks Display the stack for the thread running on each cpu
-| showallvm Display a summary listing of all the vm maps
-| showallvme Display a summary listing of all the vm map entries
-| showallipc Display a summary listing of all the ipc spaces
-| showallrights Display a summary listing of all the ipc rights
-| showallkmods Display a summary listing of all the kernel modules
-|
-| showallclasses Display info about all OSObject subclasses in the system
-| showobject Show info about an OSObject - its vtable ptr and retain count, & more info for simple container classes.
-| showregistry Show info about all registry entries in the current plane
-| showregistryprops Show info about all registry entries in the current plane, and their properties
-| showregistryentry Show info about a registry entry; its properties and descendants in the current plane
-| setregistryplane Set the plane to be used for the iokit registry macros (pass zero for list)
-|
-| showtask Display info about the specified task
-| showtaskthreads Display info about the threads in the task
-| showtaskstacks Display the stack for each thread in the task
-| showtaskvm Display info about the specified task's vm_map
-| showtaskvme Display info about the task's vm_map entries
-| showtaskipc Display info about the specified task's ipc space
-| showtaskrights Display info about the task's ipc space entries
-|
-| showact Display info about a thread specified by activation
-| showactstack Display the stack for a thread specified by activation
-|
-| showmap Display info about the specified vm_map
-| showmapvme Display a summary list of the specified vm_map's entries
-|
-| showipc Display info about the specified ipc space
-| showrights Display a summary list of all the rights in an ipc space
-|
-| showpid Display info about the process identified by pid
-| showproc Display info about the process identified by proc struct
-|
-| showkmod Display info about a kernel module
-| showkmodaddr Given an address, display the kernel module and offset
-|
-| dumpcallqueue Dump out all the entries given a queue head
-|
-| showallmtx Display info about mutexes usage
-| showallrwlck Display info about reader/writer locks usage
-|
-| zprint Display info about the memory zones
-| showioalloc Display info about iokit allocations
-| paniclog Display the panic log info
-|
-| switchtoact Switch to different context specified by activation
-| switchtoctx Switch to different context
-| showuserstack Display numeric backtrace of the user stack for an
-| activation
-|
-| switchtouserthread Switch to the user context of the specified thread
-| resetstacks Return to the original kernel context
-|
-| resetctx Reset context
-| resume_on Resume when detaching from gdb
-| resume_off Don't resume when detaching from gdb
-|
-| sendcore Configure kernel to send a coredump to the specified IP
-| disablecore Configure the kernel to disable coredump transmission
-| switchtocorethread Corefile version of "switchtoact"
-| resetcorectx Corefile version of "resetctx"
-|
-| readphys Reads the specified untranslated address
-| readphys64 Reads the specified untranslated 64-bit address
-|
-| kdp-reboot Restart remote target
-|
-| Type "help <macro>" for more specific help on a particular macro.
-| Type "show user <macro>" to see what the macro is really doing.
-end
-
-# This macro should appear before any symbol references, to facilitate
-# a gdb "source" without a loaded symbol file.
-define showversion
- printf "%s\n", *(char **)0x501C
-end
-
-document showversion
-Syntax: showversion
-| Read the kernel version string from a fixed address in low
-| memory. Useful if you don't know which kernel is on the other end,
-| and need to find the appropriate symbols. Beware that if you've
-| loaded a symbol file, but aren't connected to a remote target,
-| the version string from the symbol file will be displayed instead.
-| This macro expects to be connected to the remote kernel to function
-| correctly.
-end
-
-set $kgm_dummy = &proc0
-set $kgm_dummy = &kmod
-set $kgm_mtype = ((struct mach_header)_mh_execute_header).cputype
-
-set $kgm_reg_depth = 0
-set $kgm_reg_plane = (void **) gIOServicePlane
-set $kgm_namekey = (OSSymbol *) 0
-set $kgm_childkey = (OSSymbol *) 0
-
-set $kgm_show_object_addrs = 0
-set $kgm_show_object_retain = 0
-set $kgm_show_props = 0
-
-define showkmodheader
- printf "kmod address size "
- printf "id refs version name\n"
-end
-
-define showkmodint
- set $kgm_kmodp = (struct kmod_info *)$arg0
- printf "0x%08x ", $arg0
- printf "0x%08x ", $kgm_kmodp->address
- printf "0x%08x ", $kgm_kmodp->size
- printf "%3d ", $kgm_kmodp->id
- printf "%5d ", $kgm_kmodp->reference_count
- printf "%10s ", &$kgm_kmodp->version
- printf "%s\n", &$kgm_kmodp->name
-end
-
-set $kgm_kmodmin = 0xffffffff
-set $kgm_fkmodmin = 0x00000000
-set $kgm_kmodmax = 0x00000000
-set $kgm_fkmodmax = 0xffffffff
-set $kgm_pkmod = 0
-set $kgm_pkmodst = 0
-set $kgm_pkmoden = 0
-define showkmodaddrint
- printf "0x%x" , $arg0
- if ((unsigned int)$arg0 >= (unsigned int)$kgm_pkmodst) && ((unsigned int)$arg0 <= (unsigned int)$kgm_pkmoden)
- set $kgm_off = ((unsigned int)$arg0 - (unsigned int)$kgm_pkmodst)
- printf " <%s + 0x%x>", $kgm_pkmod->name, $kgm_off
- else
- if ((unsigned int)$arg0 <= (unsigned int)$kgm_fkmodmax) && ((unsigned int)$arg0 >= (unsigned int)$kgm_fkmodmin)
- set $kgm_kmodp = (struct kmod_info *)kmod
- while $kgm_kmodp
- set $kgm_kmod = *$kgm_kmodp
- if $kgm_kmod.address && ($kgm_kmod.address < $kgm_kmodmin)
- set $kgm_kmodmin = $kgm_kmod.address
- end
- if ($kgm_kmod.address + $kgm_kmod.size) > $kgm_kmodmax
- set $kgm_kmodmax = $kgm_kmod.address + $kgm_kmod.size
- end
- set $kgm_off = ((unsigned int)$arg0 - (unsigned int)$kgm_kmod.address)
- if ($kgm_kmod.address <= $arg0) && ($kgm_off <= $kgm_kmod.size)
- printf " <%s + 0x%x>", $kgm_kmodp->name, $kgm_off
- set $kgm_pkmod = $kgm_kmodp
- set $kgm_pkmodst = $kgm_kmod.address
- set $kgm_pkmoden = $kgm_pkmodst + $kgm_kmod.size
- set $kgm_kmodp = 0
- else
- set $kgm_kmodp = $kgm_kmod.next
- end
- end
- if !$kgm_pkmod
- set $kgm_fkmodmin = $kgm_kmodmin
- set $kgm_fkmodmax = $kgm_kmodmax
- end
- end
- end
-end
-
-define showkmodaddr
- showkmodaddrint $arg0
- printf "\n"
-end
-
-document showkmodaddr
-| Given an address, print the offset and name for the kmod containing it
-| The following is the syntax:
-| (gdb) showkmodaddr <addr>
-end
-
-define showkmod
- showkmodheader
- showkmodint $arg0
-end
-document showkmod
-| Routine to print info about a kernel module
-| The following is the syntax:
-| (gdb) showkmod <kmod>
-end
-
-define showallkmods
- showkmodheader
- set $kgm_kmodp = (struct kmod_info *)kmod
- while $kgm_kmodp
- showkmodint $kgm_kmodp
- set $kgm_kmodp = $kgm_kmodp->next
- end
-end
-document showallkmods
-| Routine to print a summary listing of all the kernel modules
-| The following is the syntax:
-| (gdb) showallkmods
-end
-
-define showactheader
- printf " activation "
- printf "thread pri state wait_queue wait_event\n"
-end
-
-
-define showactint
- printf " 0x%08x ", $arg0
- set $kgm_thread = *(struct thread *)$arg0
- printf "0x%08x ", $arg0
- printf "%3d ", $kgm_thread.sched_pri
- set $kgm_state = $kgm_thread.state
- if $kgm_state & 0x80
- printf "I"
- end
- if $kgm_state & 0x40
- printf "P"
- end
- if $kgm_state & 0x20
- printf "A"
- end
- if $kgm_state & 0x10
- printf "H"
- end
- if $kgm_state & 0x08
- printf "U"
- end
- if $kgm_state & 0x04
- printf "R"
- end
- if $kgm_state & 0x02
- printf "S"
- end
- if $kgm_state & 0x01
- printf "W\t"
- printf "0x%08x ", $kgm_thread.wait_queue
- if (((unsigned)$kgm_thread.wait_event > (unsigned)sectPRELINKB) \
- && ($arg1 != 2))
- showkmodaddr $kgm_thread.wait_event
- else
- output /a (unsigned) $kgm_thread.wait_event
- end
- end
- if $arg1 != 0
- if ($kgm_thread.kernel_stack != 0)
- if ($kgm_thread.reserved_stack != 0)
- printf "\n\t\treserved_stack=0x%08x", $kgm_thread.reserved_stack
- end
- printf "\n\t\tkernel_stack=0x%08x", $kgm_thread.kernel_stack
- if ($kgm_mtype == 18)
- set $mysp = $kgm_thread.machine.pcb->save_r1
- else
- set $kgm_statep = (struct x86_kernel_state32 *) \
- ($kgm_thread->kernel_stack + 0x4000 \
- - sizeof(struct x86_kernel_state32))
- set $mysp = $kgm_statep->k_ebp
- end
- set $prevsp = $mysp - 16
- printf "\n\t\tstacktop=0x%08x", $mysp
- if ($kgm_mtype == 18)
- set $stkmask = 0xf
- else
- set $stkmask = 0x3
- end
- set $kgm_return = 0
- while ($mysp != 0) && (($mysp & $stkmask) == 0) \
- && ($mysp != $prevsp) \
- && ((((unsigned) $mysp ^ (unsigned) $prevsp) < 0x2000) \
- || (((unsigned)$mysp < ((unsigned) ($kgm_thread->kernel_stack+0x4000))) \
- && ((unsigned)$mysp > (unsigned) ($kgm_thread->kernel_stack))))
-
- if ((unsigned) $kgm_return > (unsigned) sectPRELINKB)
- showkmodaddr $kgm_return
- else
- if ((unsigned) $kgm_return > 0)
- output /a (unsigned) $kgm_return
- end
- end
- printf "\n\t\t0x%08x ", $mysp
- if ($kgm_mtype == 18)
- set $kgm_return = *($mysp + 8)
- else
- set $kgm_return = *($mysp + 4)
- end
- set $prevsp = $mysp
- set $mysp = * $mysp
- end
- if ((unsigned) $kgm_return > 0)
- output/a $kgm_return
- end
- set $kgm_return = 0
- printf "\n\t\tstackbottom=0x%08x", $prevsp
- else
- printf "\n\t\t\tcontinuation="
- output /a (unsigned) $kgm_thread.continuation
- end
- printf "\n"
- else
- printf "\n"
- end
-end
-
-define showact
- showactheader
- showactint $arg0 0
-end
-document showact
-| Routine to print out the state of a specific thread.
-| The following is the syntax:
-| (gdb) showact <activation>
-end
-
-
-define showactstack
- showactheader
- showactint $arg0 1
-end
-document showactstack
-| Routine to print out the stack of a specific thread.
-| The following is the syntax:
-| (gdb) showactstack <activation>
-end
-
-
-define showallthreads
- set $kgm_head_taskp = &default_pset.tasks
- set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
- while $kgm_taskp != $kgm_head_taskp
- showtaskheader
- showtaskint $kgm_taskp
- showactheader
- set $kgm_head_actp = &($kgm_taskp->threads)
- set $kgm_actp = (struct thread *)($kgm_taskp->threads.next)
- while $kgm_actp != $kgm_head_actp
- showactint $kgm_actp 0
- set $kgm_actp = (struct thread *)($kgm_actp->task_threads.next)
- end
- printf "\n"
- set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
- end
-end
-document showallthreads
-| Routine to print out info about all threads in the system.
-| The following is the syntax:
-| (gdb) showallthreads
-end
-
-define showcurrentthreads
-set $kgm_prp = processor_list
- while $kgm_prp != 0
- if ($kgm_prp)->active_thread != 0
- set $kgm_actp = ($kgm_prp)->active_thread
- showtaskheader
- showtaskint ($kgm_actp)->task
- showactheader
- showactint $kgm_actp 0
- printf "\n"
- end
- set $kgm_prp = ($kgm_prp)->processor_list
- end
-end
-document showcurrentthreads
-| Routine to print out info about the thread running on each cpu.
-| The following is the syntax:
-| (gdb) showcurrentthreads
-end
-
-set $decode_wait_events = 0
-define showallstacks
- set $kgm_head_taskp = &default_pset.tasks
- set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
- while $kgm_taskp != $kgm_head_taskp
- showtaskheader
- showtaskint $kgm_taskp
- set $kgm_head_actp = &($kgm_taskp->threads)
- set $kgm_actp = (struct thread *)($kgm_taskp->threads.next)
- while $kgm_actp != $kgm_head_actp
- showactheader
- if ($decode_wait_events > 0)
- showactint $kgm_actp 1
- else
- showactint $kgm_actp 2
- end
- set $kgm_actp = (struct thread *)($kgm_actp->task_threads.next)
- end
- printf "\n"
- set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
- end
-end
-
-document showallstacks
-| Routine to print out the stack for each thread in the system.
-| The following is the syntax:
-| (gdb) showallstacks
-| If the variable $decode_wait_events is non-zero, the routine attempts to
-| interpret thread wait_events as kernel module offsets, which can add to
-| processing time.
-end
-
-define showcurrentstacks
-set $kgm_prp = processor_list
- while $kgm_prp != 0
- if ($kgm_prp)->active_thread != 0
- set $kgm_actp = ($kgm_prp)->active_thread
- showtaskheader
- showtaskint ($kgm_actp)->task
- showactheader
- showactint $kgm_actp 1
- printf "\n"
- end
- set $kgm_prp = ($kgm_prp)->processor_list
- end
-end
-
-document showcurrentstacks
-| Routine to print out the thread running on each cpu (incl. its stack)
-| The following is the syntax:
-| (gdb) showcurrentstacks
-end
-
-define showwaiterheader
- printf "waiters activation "
- printf "thread pri state wait_queue wait_event\n"
-end
-
-define showwaitqwaiters
- set $kgm_w_waitqp = (struct wait_queue *)$arg0
- set $kgm_w_linksp = &($kgm_w_waitqp->wq_queue)
- set $kgm_w_wqe = (struct wait_queue_element *)$kgm_w_linksp->next
- set $kgm_w_found = 0
- while ( (queue_entry_t)$kgm_w_wqe != (queue_entry_t)$kgm_w_linksp)
- if ($kgm_w_wqe->wqe_type != &_wait_queue_link)
- if !$kgm_w_found
- set $kgm_w_found = 1
- showwaiterheader
- end
- set $kgm_w_shuttle = (struct thread *)$kgm_w_wqe
- showactint $kgm_w_shuttle 0
- end
- set $kgm_w_wqe = (struct wait_queue_element *)$kgm_w_wqe->wqe_links.next
- end
-end
-
-define showwaitqwaitercount
- set $kgm_wc_waitqp = (struct wait_queue *)$arg0
- set $kgm_wc_linksp = &($kgm_wc_waitqp->wq_queue)
- set $kgm_wc_wqe = (struct wait_queue_element *)$kgm_wc_linksp->next
- set $kgm_wc_count = 0
- while ( (queue_entry_t)$kgm_wc_wqe != (queue_entry_t)$kgm_wc_linksp)
- if ($kgm_wc_wqe->wqe_type != &_wait_queue_link)
- set $kgm_wc_count = $kgm_wc_count + 1
- end
- set $kgm_wc_wqe = (struct wait_queue_element *)$kgm_wc_wqe->wqe_links.next
- end
- printf "0x%08x ", $kgm_wc_count
-end
-
-define showwaitqmembercount
- set $kgm_mc_waitqsetp = (struct wait_queue_set *)$arg0
- set $kgm_mc_setlinksp = &($kgm_mc_waitqsetp->wqs_setlinks)
- set $kgm_mc_wql = (struct wait_queue_link *)$kgm_mc_setlinksp->next
- set $kgm_mc_count = 0
- while ( (queue_entry_t)$kgm_mc_wql != (queue_entry_t)$kgm_mc_setlinksp)
- set $kgm_mc_count = $kgm_mc_count + 1
- set $kgm_mc_wql = (struct wait_queue_link *)$kgm_mc_wql->wql_setlinks.next
- end
- printf "0x%08x ", $kgm_mc_count
-end
-
-
-define showwaitqmemberheader
- printf "set-members wait_queue interlock "
- printf "pol type member_cnt waiter_cnt\n"
-end
-
-define showwaitqmemberint
- set $kgm_m_waitqp = (struct wait_queue *)$arg0
- printf " 0x%08x ", $kgm_m_waitqp
- printf "0x%08x ", $kgm_m_waitqp->wq_interlock.lock_data
- if ($kgm_m_waitqp->wq_fifo)
- printf "Fifo "
- else
- printf "Prio "
- end
- if ($kgm_m_waitqp->wq_type == 0xf1d1)
- printf "Set "
- showwaitqmembercount $kgm_m_waitqp
- else
- printf "Que 0x00000000 "
- end
- showwaitqwaitercount $kgm_m_waitqp
- printf "\n"
-end
-
-
-define showwaitqmemberofheader
- printf "member-of wait_queue interlock "
- printf "pol type member_cnt waiter_cnt\n"
-end
-
-define showwaitqmemberof
- set $kgm_mo_waitqp = (struct wait_queue *)$arg0
- set $kgm_mo_linksp = &($kgm_mo_waitqp->wq_queue)
- set $kgm_mo_wqe = (struct wait_queue_element *)$kgm_mo_linksp->next
- set $kgm_mo_found = 0
- while ( (queue_entry_t)$kgm_mo_wqe != (queue_entry_t)$kgm_mo_linksp)
- if ($kgm_mo_wqe->wqe_type == &_wait_queue_link)
- if !$kgm_mo_found
- set $kgm_mo_found = 1
- showwaitqmemberofheader
- end
- set $kgm_mo_wqlp = (struct wait_queue_link *)$kgm_mo_wqe
- set $kgm_mo_wqsetp = (struct wait_queue *)($kgm_mo_wqlp->wql_setqueue)
- showwaitqmemberint $kgm_mo_wqsetp
- end
- set $kgm_mo_wqe = (struct wait_queue_element *)$kgm_mo_wqe->wqe_links.next
- end
-end
-
-define showwaitqmembers
- set $kgm_ms_waitqsetp = (struct wait_queue_set *)$arg0
- set $kgm_ms_setlinksp = &($kgm_ms_waitqsetp->wqs_setlinks)
- set $kgm_ms_wql = (struct wait_queue_link *)$kgm_ms_setlinksp->next
- set $kgm_ms_found = 0
- while ( (queue_entry_t)$kgm_ms_wql != (queue_entry_t)$kgm_ms_setlinksp)
- set $kgm_ms_waitqp = $kgm_ms_wql->wql_element.wqe_queue
- if !$kgm_ms_found
- showwaitqmemberheader
- set $kgm_ms_found = 1
- end
- showwaitqmemberint $kgm_ms_waitqp
- set $kgm_ms_wql = (struct wait_queue_link *)$kgm_ms_wql->wql_setlinks.next
- end
-end
-
-define showwaitqheader
- printf "wait_queue ref_count interlock "
- printf "pol type member_cnt waiter_cnt\n"
-end
-
-define showwaitqint
- set $kgm_waitqp = (struct wait_queue *)$arg0
- printf "0x%08x ", $kgm_waitqp
- if ($kgm_waitqp->wq_type == 0xf1d1)
- printf "0x%08x ", ((struct wait_queue_set *)$kgm_waitqp)->wqs_refcount
- else
- printf "0x00000000 "
- end
- printf "0x%08x ", $kgm_waitqp->wq_interlock.lock_data
- if ($kgm_waitqp->wq_fifo)
- printf "Fifo "
- else
- printf "Prio "
- end
- if ($kgm_waitqp->wq_type == 0xf1d1)
- printf "Set "
- showwaitqmembercount $kgm_waitqp
- else
- printf "Que 0x00000000 "
- end
- showwaitqwaitercount $kgm_waitqp
- printf "\n"
-end
-
-define showwaitq
- set $kgm_waitq1p = (wait_queue_t)$arg0
- showwaitqheader
- showwaitqint $kgm_waitq1p
- if ($kgm_waitq1p->wq_type == 0xf1d1)
- showwaitqmembers $kgm_waitq1p
- else
- showwaitqmemberof $kgm_waitq1p
- end
- showwaitqwaiters $kgm_waitq1p
-end
-
-define showmapheader
- printf "vm_map pmap vm_size "
- printf "#ents rpage hint first_free\n"
-end
-
-define showvmeheader
- printf " entry start "
- printf " prot #page object offset\n"
-end
-
-define showvmint
- set $kgm_mapp = (vm_map_t)$arg0
- set $kgm_map = *$kgm_mapp
- printf "0x%08x ", $arg0
- printf "0x%08x ", $kgm_map.pmap
- printf "0x%08x ", $kgm_map.size
- printf "%3d ", $kgm_map.hdr.nentries
- if $kgm_map.pmap
- printf "%5d ", $kgm_map.pmap->stats.resident_count
- else
- printf "<n/a> "
- end
- printf "0x%08x ", $kgm_map.hint
- printf "0x%08x\n", $kgm_map.first_free
- if $arg1 != 0
- showvmeheader
- set $kgm_head_vmep = &($kgm_mapp->hdr.links)
- set $kgm_vmep = $kgm_map.hdr.links.next
- while (($kgm_vmep != 0) && ($kgm_vmep != $kgm_head_vmep))
- set $kgm_vme = *$kgm_vmep
- printf " 0x%08x ", $kgm_vmep
- printf "0x%016llx ", $kgm_vme.links.start
- printf "%1x", $kgm_vme.protection
- printf "%1x", $kgm_vme.max_protection
- if $kgm_vme.inheritance == 0x0
- printf "S"
- end
- if $kgm_vme.inheritance == 0x1
- printf "C"
- end
- if $kgm_vme.inheritance == 0x2
- printf "-"
- end
- if $kgm_vme.inheritance == 0x3
- printf "D"
- end
- if $kgm_vme.is_sub_map
- printf "s "
- else
- if $kgm_vme.needs_copy
- printf "n "
- else
- printf " "
- end
- end
- printf "%5d ",($kgm_vme.links.end - $kgm_vme.links.start) >> 12
- printf "0x%08x ", $kgm_vme.object.vm_object
- printf "0x%016llx\n", $kgm_vme.offset
- set $kgm_vmep = $kgm_vme.links.next
- end
- end
- printf "\n"
-end
-
-
-define showmapvme
- showmapheader
- showvmint $arg0 1
-end
-document showmapvme
-| Routine to print out a summary listing of all the entries in a vm_map
-| The following is the syntax:
-| (gdb) showmapvme <vm_map>
-end
-
-
-define showmap
- showmapheader
- showvmint $arg0 0
-end
-document showmap
-| Routine to print out info about the specified vm_map
-| The following is the syntax:
-| (gdb) showmap <vm_map>
-end
-
-define showallvm
- set $kgm_head_taskp = &default_pset.tasks
- set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
- while $kgm_taskp != $kgm_head_taskp
- showtaskheader
- showmapheader
- showtaskint $kgm_taskp
- showvmint $kgm_taskp->map 0
- set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
- end
-end
-document showallvm
-| Routine to print a summary listing of all the vm maps
-| The following is the syntax:
-| (gdb) showallvm
-end
-
-
-define showallvme
- set $kgm_head_taskp = &default_pset.tasks
- set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
- while $kgm_taskp != $kgm_head_taskp
- showtaskheader
- showmapheader
- showtaskint $kgm_taskp
- showvmint $kgm_taskp->map 1
- set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
- end
-end
-document showallvme
-| Routine to print a summary listing of all the vm map entries
-| The following is the syntax:
-| (gdb) showallvme
-end
-
-
-define showipcheader
- printf "ipc_space is_table table_next "
- printf "flags tsize splaytree splaybase\n"
-end
-
-define showipceheader
- printf " name object "
- printf "rite urefs destname destination\n"
-end
-
-define showipceint
- set $kgm_ie = *(ipc_entry_t)$arg0
- printf " 0x%08x ", $arg1
- printf "0x%08x ", $kgm_ie.ie_object
- if $kgm_ie.ie_bits & 0x00100000
- printf "Dead "
- printf "%5d\n", $kgm_ie.ie_bits & 0xffff
- else
- if $kgm_ie.ie_bits & 0x00080000
- printf "SET "
- printf "%5d\n", $kgm_ie.ie_bits & 0xffff
- else
- if $kgm_ie.ie_bits & 0x00010000
- if $kgm_ie.ie_bits & 0x00020000
- printf " SR"
- else
- printf " S"
- end
- else
- if $kgm_ie.ie_bits & 0x00020000
- printf " R"
- end
- end
- if $kgm_ie.ie_bits & 0x00040000
- printf " O"
- end
- if $kgm_ie.index.request
- printf "n"
- else
- printf " "
- end
- if $kgm_ie.ie_bits & 0x00800000
- printf "c"
- else
- printf " "
- end
- printf "%5d ", $kgm_ie.ie_bits & 0xffff
- showportdest $kgm_ie.ie_object
- end
- end
-end
-
-define showipcint
- set $kgm_isp = (ipc_space_t)$arg0
- set $kgm_is = *$kgm_isp
- printf "0x%08x ", $arg0
- printf "0x%08x ", $kgm_is.is_table
- printf "0x%08x ", $kgm_is.is_table_next
- if $kgm_is.is_growing != 0
- printf "G"
- else
- printf " "
- end
- if $kgm_is.is_fast != 0
- printf "F"
- else
- printf " "
- end
- if $kgm_is.is_active != 0
- printf "A "
- else
- printf " "
- end
- printf "%5d ", $kgm_is.is_table_size
- printf "0x%08x ", $kgm_is.is_tree_total
- printf "0x%08x\n", &$kgm_isp->is_tree
- if $arg1 != 0
- showipceheader
- set $kgm_iindex = 0
- set $kgm_iep = $kgm_is.is_table
- set $kgm_destspacep = (ipc_space_t)0
- while ( $kgm_iindex < $kgm_is.is_table_size )
- set $kgm_ie = *$kgm_iep
- if $kgm_ie.ie_bits & 0x001f0000
- set $kgm_name = (($kgm_iindex << 8)|($kgm_ie.ie_bits >> 24))
- showipceint $kgm_iep $kgm_name
- end
- set $kgm_iindex = $kgm_iindex + 1
- set $kgm_iep = &($kgm_is.is_table[$kgm_iindex])
- end
- if $kgm_is.is_tree_total
- printf "Still need to write tree traversal\n"
- end
- end
- printf "\n"
-end
-
-
-define showipc
- set $kgm_isp = (ipc_space_t)$arg0
- showipcheader
- showipcint $kgm_isp 0
-end
-document showipc
-| Routine to print the status of the specified ipc space
-| The following is the syntax:
-| (gdb) showipc <ipc_space>
-end
-
-define showrights
- set $kgm_isp = (ipc_space_t)$arg0
- showipcheader
- showipcint $kgm_isp 1
-end
-document showrights
-| Routine to print a summary list of all the rights in a specified ipc space
-| The following is the syntax:
-| (gdb) showrights <ipc_space>
-end
-
-
-define showtaskipc
- set $kgm_taskp = (task_t)$arg0
- showtaskheader
- showipcheader
- showtaskint $kgm_taskp
- showipcint $kgm_taskp->itk_space 0
-end
-document showtaskipc
-| Routine to print info about the ipc space for a task
-| The following is the syntax:
-| (gdb) showtaskipc <task>
-end
-
-
-define showtaskrights
- set $kgm_taskp = (task_t)$arg0
- showtaskheader
- showipcheader
- showtaskint $kgm_taskp
- showipcint $kgm_taskp->itk_space 1
-end
-document showtaskrights
-| Routine to print info about the ipc rights for a task
-| The following is the syntax:
-| (gdb) showtaskrights <task>
-end
-
-define showallipc
- set $kgm_head_taskp = &default_pset.tasks
- set $kgm_cur_taskp = (struct task *)($kgm_head_taskp->next)
- while $kgm_cur_taskp != $kgm_head_taskp
- showtaskheader
- showipcheader
- showtaskint $kgm_cur_taskp
- showipcint $kgm_cur_taskp->itk_space 0
- set $kgm_cur_taskp = (struct task *)($kgm_cur_taskp->pset_tasks.next)
- end
-end
-document showallipc
-| Routine to print a summary listing of all the ipc spaces
-| The following is the syntax:
-| (gdb) showallipc
-end
-
-
-define showallrights
- set $kgm_head_taskp = &default_pset.tasks
- set $kgm_cur_taskp = (struct task *)($kgm_head_taskp->next)
- while $kgm_cur_taskp != $kgm_head_taskp
- showtaskheader
- showipcheader
- showtaskint $kgm_cur_taskp
- showipcint $kgm_cur_taskp->itk_space 1
- set $kgm_cur_taskp = (struct task *)($kgm_cur_taskp->pset_tasks.next)
- end
-end
-document showallrights
-| Routine to print a summary listing of all the ipc rights
-| The following is the syntax:
-| (gdb) showallrights
-end
-
-
-define showtaskvm
- set $kgm_taskp = (task_t)$arg0
- showtaskheader
- showmapheader
- showtaskint $kgm_taskp
- showvmint $kgm_taskp->map 0
-end
-document showtaskvm
-| Routine to print out info about a task's vm_map
-| The following is the syntax:
-| (gdb) showtaskvm <task>
-end
-
-define showtaskvme
- set $kgm_taskp = (task_t)$arg0
- showtaskheader
- showmapheader
- showtaskint $kgm_taskp
- showvmint $kgm_taskp->map 1
-end
-document showtaskvme
-| Routine to print out info about a task's vm_map_entries
-| The following is the syntax:
-| (gdb) showtaskvme <task>
-end
-
-
-define showtaskheader
- printf "task vm_map ipc_space #acts "
- showprocheader
-end
-
-
-define showtaskint
- set $kgm_task = *(struct task *)$arg0
- printf "0x%08x ", $arg0
- printf "0x%08x ", $kgm_task.map
- printf "0x%08x ", $kgm_task.itk_space
- printf "%3d ", $kgm_task.thread_count
- showprocint $kgm_task.bsd_info
-end
-
-define showtask
- showtaskheader
- showtaskint $arg0
-end
-document showtask
-| Routine to print out info about a task.
-| The following is the syntax:
-| (gdb) showtask <task>
-end
-
-
-define showtaskthreads
- showtaskheader
- set $kgm_taskp = (struct task *)$arg0
- showtaskint $kgm_taskp
- showactheader
- set $kgm_head_actp = &($kgm_taskp->threads)
- set $kgm_actp = (struct thread *)($kgm_taskp->threads.next)
- while $kgm_actp != $kgm_head_actp
- showactint $kgm_actp 0
- set $kgm_actp = (struct thread *)($kgm_actp->task_threads.next)
- end
-end
-document showtaskthreads
-| Routine to print info about the threads in a task.
-| The following is the syntax:
-| (gdb) showtaskthreads <task>
-end
-
-
-define showtaskstacks
- showtaskheader
- set $kgm_taskp = (struct task *)$arg0
- showtaskint $kgm_taskp
- set $kgm_head_actp = &($kgm_taskp->threads)
- set $kgm_actp = (struct thread *)($kgm_taskp->threads.next)
- while $kgm_actp != $kgm_head_actp
- showactheader
- showactint $kgm_actp 1
- set $kgm_actp = (struct thread *)($kgm_actp->task_threads.next)
- end
-end
-document showtaskstacks
-| Routine to print out the stack for each thread in a task.
-| The following is the syntax:
-| (gdb) showtaskstacks <task>
-end
-
-
-define showalltasks
- showtaskheader
- set $kgm_head_taskp = &default_pset.tasks
- set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
- while $kgm_taskp != $kgm_head_taskp
- showtaskint $kgm_taskp
- set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
- end
-end
-document showalltasks
-| Routine to print a summary listing of all the tasks
-| The following is the syntax:
-| (gdb) showalltasks
-end
-
-
-define showprocheader
- printf " pid proc command\n"
-end
-
-define showprocint
- set $kgm_procp = (struct proc *)$arg0
- if $kgm_procp != 0
- printf "%5d ", $kgm_procp->p_pid
- printf "0x%08x ", $kgm_procp
- printf "%s\n", $kgm_procp->p_comm
- else
- printf " *0* 0x00000000 --\n"
- end
-end
-
-define showpid
- showtaskheader
- set $kgm_head_taskp = &default_pset.tasks
- set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
- while $kgm_taskp != $kgm_head_taskp
- set $kgm_procp = (struct proc *)$kgm_taskp->bsd_info
- if (($kgm_procp != 0) && ($kgm_procp->p_pid == $arg0))
- showtaskint $kgm_taskp
- set $kgm_taskp = $kgm_head_taskp
- else
- set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
- end
- end
-end
-document showpid
-| Routine to print a single process by pid
-| The following is the syntax:
-| (gdb) showpid <pid>
-end
-
-define showproc
- showtaskheader
- set $kgm_procp = (struct proc *)$arg0
- showtaskint $kgm_procp->task $arg1 $arg2
-end
-
-
-define kdb
- set switch_debugger=1
- continue
-end
-document kdb
-| kdb - Switch to the inline kernel debugger
-|
-| usage: kdb
-|
-| The kdb macro allows you to invoke the inline kernel debugger.
-end
-
-define showpsetheader
- printf "portset waitqueue recvname "
- printf "flags refs recvname process\n"
-end
-
-define showportheader
- printf "port mqueue recvname "
- printf "flags refs recvname process\n"
-end
-
-define showportmemberheader
- printf "members port recvname "
- printf "flags refs mqueue msgcount\n"
-end
-
-define showkmsgheader
- printf "messages kmsg size "
- printf "disp msgid remote-port local-port\n"
-end
-
-define showkmsgint
- printf " 0x%08x ", $arg0
- set $kgm_kmsgh = ((ipc_kmsg_t)$arg0)->ikm_header
- printf "0x%08x ", $kgm_kmsgh.msgh_size
- if (($kgm_kmsgh.msgh_bits & 0xff) == 19)
- printf "rC"
- else
- printf "rM"
- end
- if (($kgm_kmsgh.msgh_bits & 0xff00) == (19 < 8))
- printf "lC"
- else
- printf "lM"
- end
- if ($kgm_kmsgh.msgh_bits & 0xf0000000)
- printf "c"
- else
- printf "s"
- end
- printf "%5d ", $kgm_kmsgh.msgh_id
- printf "0x%08x ", $kgm_kmsgh.msgh_remote_port
- printf "0x%08x\n", $kgm_kmsgh.msgh_local_port
-end
-
-
-
-define showkobject
- set $kgm_portp = (struct ipc_port *)$arg0
- printf "0x%08x kobject(", $kgm_portp->ip_kobject
- set $kgm_kotype = ($kgm_portp->ip_object.io_bits & 0x00000fff)
- if ($kgm_kotype == 1)
- printf "THREAD"
- end
- if ($kgm_kotype == 2)
- printf "TASK"
- end
- if ($kgm_kotype == 3)
- printf "HOST"
- end
- if ($kgm_kotype == 4)
- printf "HOST_PRIV"
- end
- if ($kgm_kotype == 5)
- printf "PROCESSOR"
- end
- if ($kgm_kotype == 6)
- printf "PSET"
- end
- if ($kgm_kotype == 7)
- printf "PSET_NAME"
- end
- if ($kgm_kotype == 8)
- printf "TIMER"
- end
- if ($kgm_kotype == 9)
- printf "PAGER_REQ"
- end
- if ($kgm_kotype == 10)
- printf "DEVICE"
- end
- if ($kgm_kotype == 11)
- printf "XMM_OBJECT"
- end
- if ($kgm_kotype == 12)
- printf "XMM_PAGER"
- end
- if ($kgm_kotype == 13)
- printf "XMM_KERNEL"
- end
- if ($kgm_kotype == 14)
- printf "XMM_REPLY"
- end
- if ($kgm_kotype == 15)
- printf "NOTDEF 15"
- end
- if ($kgm_kotype == 16)
- printf "NOTDEF 16"
- end
- if ($kgm_kotype == 17)
- printf "HOST_SEC"
- end
- if ($kgm_kotype == 18)
- printf "LEDGER"
- end
- if ($kgm_kotype == 19)
- printf "MASTER_DEV"
- end
- if ($kgm_kotype == 20)
- printf "ACTIVATION"
- end
- if ($kgm_kotype == 21)
- printf "SUBSYSTEM"
- end
- if ($kgm_kotype == 22)
- printf "IO_DONE_QUE"
- end
- if ($kgm_kotype == 23)
- printf "SEMAPHORE"
- end
- if ($kgm_kotype == 24)
- printf "LOCK_SET"
- end
- if ($kgm_kotype == 25)
- printf "CLOCK"
- end
- if ($kgm_kotype == 26)
- printf "CLOCK_CTRL"
- end
- if ($kgm_kotype == 27)
- printf "IOKIT_SPARE"
- end
- if ($kgm_kotype == 28)
- printf "NAMED_MEM"
- end
- if ($kgm_kotype == 29)
- printf "IOKIT_CON"
- end
- if ($kgm_kotype == 30)
- printf "IOKIT_OBJ"
- end
- if ($kgm_kotype == 31)
- printf "UPL"
- end
- printf ")\n"
-end
-
-define showportdestproc
- set $kgm_portp = (struct ipc_port *)$arg0
- set $kgm_spacep = $kgm_portp->data.receiver
-# check