Loading...
kgmacros xnu-792.13.8 /dev/null
--- 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