]> git.saurik.com Git - apple/xnu.git/blame - kgmacros
xnu-517.9.5.tar.gz
[apple/xnu.git] / kgmacros
CommitLineData
1c79356b
A
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
9bccf70c
A
9set $kgm_dummy = &proc0
10set $kgm_dummy = &kmod
11
1c79356b
A
12echo Loading Kernel GDB Macros package. Type "help kgm" for more info.\n
13
14define kgm
55e303ae
A
15printf ""
16echo These are the gdb macros for kernel debugging. Type "help kgm" for more info.\n
1c79356b
A
17end
18
19document kgm
20| These are the kernel gdb macros. These gdb macros are intended to be
21| used when debugging a remote kernel via the kdp protocol. Typically, you
22| would connect to your remote target like so:
23| (gdb) target remote-kdp
24| (gdb) attach <name-of-remote-host>
25|
26| The following macros are available in this package:
27|
55e303ae
A
28| showalltasks Display a summary listing of all tasks
29| showallthreads Display info about all threads in the system
30| showallstacks Display the stack for each thread in the system
31| showcurrentthreads Display info about the thread running on each cpu
32| showcurrentstacks Display the stack for the thread running on each cpu
1c79356b
A
33| showallvm Display a summary listing of all the vm maps
34| showallvme Display a summary listing of all the vm map entries
35| showallipc Display a summary listing of all the ipc spaces
36| showallrights Display a summary listing of all the ipc rights
37| showallkmods Display a summary listing of all the kernel modules
38|
55e303ae
A
39| showtask Display info about the specified task
40| showtaskthreads Display info about the threads in the task
41| showtaskstacks Display the stack for each thread in the task
42| showtaskvm Display info about the specified task's vm_map
43| showtaskvme Display info about the task's vm_map entries
44| showtaskipc Display info about the specified task's ipc space
45| showtaskrights Display info about the task's ipc space entries
1c79356b 46|
55e303ae
A
47| showact Display info about a thread specified by activation
48| showactstack Display the stack for a thread specified by activation
1c79356b 49|
55e303ae 50| showmap Display info about the specified vm_map
1c79356b
A
51| showmapvme Display a summary list of the specified vm_map's entries
52|
55e303ae 53| showipc Display info about the specified ipc space
1c79356b
A
54| showrights Display a summary list of all the rights in an ipc space
55|
55e303ae
A
56| showpid Display info about the process identified by pid
57| showproc Display info about the process identified by proc struct
1c79356b 58|
55e303ae 59| showkmod Display info about a kernel module
1c79356b
A
60| showkmodaddr Given an address, display the kernel module and offset
61|
55e303ae
A
62| dumpcallqueue Dump out all the entries given a queue head
63|
64| zprint Display info about the memory zones
65| paniclog Display the panic log info
9bccf70c 66|
55e303ae
A
67| switchtoact Switch to different context specified by activation
68| switchtoctx Switch to different context
9bccf70c 69| resetctx Reset context
55e303ae
A
70| resume_on Resume when detaching from gdb
71| resume_off Don't resume when detaching from gdb
1c79356b
A
72|
73| Type "help <macro>" for more specific help on a particular macro.
74| Type "show user <macro>" to see what the macro is really doing.
75end
76
77
78define showkmodheader
79 printf "kmod address size "
80 printf "id refs version name\n"
81end
82
83define showkmodint
84 set $kgm_kmodp = (struct kmod_info *)$arg0
85 printf "0x%08x ", $arg0
86 printf "0x%08x ", $kgm_kmodp->address
87 printf "0x%08x ", $kgm_kmodp->size
88 printf "%3d ", $kgm_kmodp->id
89 printf "%5d ", $kgm_kmodp->reference_count
90 printf "%10s ", &$kgm_kmodp->version
91 printf "%s\n", &$kgm_kmodp->name
92end
93
94set $kgm_kmodmin = 0xffffffff
95set $kgm_fkmodmin = 0x00000000
96set $kgm_kmodmax = 0x00000000
97set $kgm_fkmodmax = 0xffffffff
98set $kgm_pkmod = 0
99set $kgm_pkmodst = 0
100set $kgm_pkmoden = 0
101define showkmodaddr
102 printf "0x%x" , $arg0
103 if ((unsigned int)$arg0 >= (unsigned int)$kgm_pkmodst) && ((unsigned int)$arg0 <= (unsigned int)$kgm_pkmoden)
104 set $kgm_off = ((unsigned int)$arg0 - (unsigned int)$kgm_pkmodst)
105 printf " <%s + 0x%x>", $kgm_pkmod->name, $kgm_off
106 else
107 if ((unsigned int)$arg0 <= (unsigned int)$kgm_fkmodmax) && ((unsigned int)$arg0 >= (unsigned int)$kgm_fkmodmin)
108 set $kgm_kmodp = (struct kmod_info *)kmod
109 while $kgm_kmodp
110 set $kgm_kmod = *$kgm_kmodp
111 if $kgm_kmod.address && ($kgm_kmod.address < $kgm_kmodmin)
112 set $kgm_kmodmin = $kgm_kmod.address
113 end
114 if ($kgm_kmod.address + $kgm_kmod.size) > $kgm_kmodmax
115 set $kgm_kmodmax = $kgm_kmod.address
116 end
117 set $kgm_off = ((unsigned int)$arg0 - (unsigned int)$kgm_kmod.address)
118 if ($kgm_kmod.address <= $arg0) && ($kgm_off <= $kgm_kmod.size)
119 printf " <%s + 0x%x>", $kgm_kmodp->name, $kgm_off
120 set $kgm_pkmod = $kgm_kmodp
121 set $kgm_pkmodst = $kgm_kmod.address
122 set $kgm_pkmoden = $kgm_pkmodst + $kgm_kmod.size
123 set $kgm_kmodp = 0
124 else
125 set $kgm_kmodp = $kgm_kmod.next
126 end
127 end
128 if !$kgm_pkmod
129 set $kgm_fkmodmin = $kgm_kmodmin
130 set $kgm_fkmodmax = $kgm_kmodmax
131 end
132 end
133 end
134end
135document showkmodaddr
136| Given an address, print the offset and name for the kmod containing it
137| The following is the syntax:
138| (gdb) showkmodaddr <addr>
139end
140
141define showkmod
142 showkmodheader
143 showkmodint $arg0
144end
145document showkmod
146| Routine to print info about a kernel module
147| The following is the syntax:
148| (gdb) showkmod <kmod>
149end
150
151define showallkmods
152 showkmodheader
153 set $kgm_kmodp = (struct kmod_info *)kmod
154 while $kgm_kmodp
155 showkmodint $kgm_kmodp
156 set $kgm_kmodp = $kgm_kmodp->next
157 end
158end
159document showallkmods
160| Routine to print a summary listing of all the kernel modules
161| The following is the syntax:
162| (gdb) showallkmods
163end
164
165define showactheader
166 printf " activation "
167 printf "thread pri state wait_queue wait_event\n"
168end
169
170
171define showactint
172 printf " 0x%08x ", $arg0
55e303ae 173 set $kgm_actp = *(struct thread *)$arg0
1c79356b
A
174 if $kgm_actp.thread
175 set $kgm_thread = *$kgm_actp.thread
176 printf "0x%08x ", $kgm_actp.thread
177 printf "%3d ", $kgm_thread.sched_pri
178 set $kgm_state = $kgm_thread.state
179 if $kgm_state & 0x80
180 printf "I"
181 end
182 if $kgm_state & 0x40
183 printf "P"
184 end
185 if $kgm_state & 0x20
186 printf "A"
187 end
188 if $kgm_state & 0x10
189 printf "H"
190 end
191 if $kgm_state & 0x08
192 printf "U"
193 end
194 if $kgm_state & 0x04
195 printf "R"
196 end
197 if $kgm_state & 0x02
198 printf "S"
199 end
200 if $kgm_state & 0x01
201 printf "W\t"
202 printf "0x%08x ", $kgm_thread.wait_queue
203 output /a $kgm_thread.wait_event
204 end
205 if $arg1 != 0
206 if ($kgm_thread.kernel_stack != 0)
55e303ae
A
207 if ($kgm_thread.reserved_stack != 0)
208 printf "\n\t\treserved_stack=0x%08x", $kgm_thread.reserved_stack
1c79356b
A
209 end
210 printf "\n\t\tkernel_stack=0x%08x", $kgm_thread.kernel_stack
55e303ae
A
211 if (machine_slot[0].cpu_type == 18)
212 set $mysp = $kgm_actp->mact.pcb->save_r1
213 else
214 set $kgm_statep = (struct i386_kernel_state *)($kgm_thread->kernel_stack + 0x4000 - sizeof(stru\
215ct i386_kernel_state))
216 set $mysp = $kgm_statep->k_ebp
217 end
1c79356b
A
218 set $prevsp = 0
219 printf "\n\t\tstacktop=0x%08x", $mysp
220 while ($mysp != 0) && (($mysp & 0xf) == 0) && ($mysp < 0xb0000000) && ($mysp > $prevsp)
221 printf "\n\t\t0x%08x ", $mysp
55e303ae
A
222 if (machine_slot[0].cpu_type == 18)
223 set $kgm_return = *($mysp + 8)
224 else
225 set $kgm_return = *($mysp + 4)
226 end
227 if ($kgm_return > sectPRELINKB)
1c79356b
A
228 showkmodaddr $kgm_return
229 else
55e303ae 230 if (machine_slot[0].cpu_type == 18)
1c79356b 231 output /a * ($mysp + 8)
55e303ae
A
232 else
233 output /a * ($mysp + 4)
234 end
1c79356b
A
235 end
236 set $prevsp = $mysp
237 set $mysp = * $mysp
238 end
239 printf "\n\t\tstackbottom=0x%08x", $prevsp
240 else
241 printf "\n\t\t\tcontinuation="
242 output /a $kgm_thread.continuation
243 end
244 printf "\n"
245 else
246 printf "\n"
247 end
248 end
249end
250
251define showact
252 showactheader
253 showactint $arg0 0
254end
255document showact
55e303ae 256| Routine to print out the state of a specific thread.
1c79356b
A
257| The following is the syntax:
258| (gdb) showact <activation>
259end
260
261
262define showactstack
263 showactheader
264 showactint $arg0 1
265end
266document showactstack
55e303ae 267| Routine to print out the stack of a specific thread.
1c79356b
A
268| The following is the syntax:
269| (gdb) showactstack <activation>
270end
271
272
55e303ae 273define showallthreads
1c79356b 274 set $kgm_head_taskp = &default_pset.tasks
9bccf70c 275 set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
1c79356b
A
276 while $kgm_taskp != $kgm_head_taskp
277 showtaskheader
278 showtaskint $kgm_taskp
279 showactheader
55e303ae
A
280 set $kgm_head_actp = &($kgm_taskp->threads)
281 set $kgm_actp = (struct thread *)($kgm_taskp->threads.next)
1c79356b
A
282 while $kgm_actp != $kgm_head_actp
283 showactint $kgm_actp 0
55e303ae 284 set $kgm_actp = (struct thread *)($kgm_actp->task_threads.next)
1c79356b
A
285 end
286 printf "\n"
9bccf70c 287 set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
1c79356b
A
288 end
289end
55e303ae
A
290document showallthreads
291| Routine to print out info about all threads in the system.
292| The following is the syntax:
293| (gdb) showallthreads
294end
295
296define showcurrentthreads
297set $kgm_ncpus = machine_info.max_cpus
298set $kgm_i = 0
299 while $kgm_i < $kgm_ncpus
300 set $kgm_prp = processor_ptr[$kgm_i]
301 if ($kgm_prp != 0) && (($kgm_prp)->active_thread != 0)
302 set $kgm_actp = (($kgm_prp)->active_thread)->top_act
303 showtaskheader
304 showtaskint ($kgm_actp)->task
305 showactheader
306 showactint $kgm_actp 0
307 printf "\n"
308 end
309 set $kgm_i = $kgm_i + 1
310 end
311end
312document showcurrentthreads
313| Routine to print out info about the thread running on each cpu.
1c79356b 314| The following is the syntax:
55e303ae 315| (gdb) showcurrentthreads
1c79356b
A
316end
317
1c79356b
A
318define showallstacks
319 set $kgm_head_taskp = &default_pset.tasks
9bccf70c 320 set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
1c79356b
A
321 while $kgm_taskp != $kgm_head_taskp
322 showtaskheader
323 showtaskint $kgm_taskp
55e303ae
A
324 set $kgm_head_actp = &($kgm_taskp->threads)
325 set $kgm_actp = (struct thread *)($kgm_taskp->threads.next)
1c79356b
A
326 while $kgm_actp != $kgm_head_actp
327 showactheader
328 showactint $kgm_actp 1
55e303ae 329 set $kgm_actp = (struct thread *)($kgm_actp->task_threads.next)
1c79356b
A
330 end
331 printf "\n"
9bccf70c 332 set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
1c79356b
A
333 end
334end
335document showallstacks
55e303ae 336| Routine to print out the stack for each thread in the system.
1c79356b
A
337| The following is the syntax:
338| (gdb) showallstacks
339end
340
55e303ae
A
341define showcurrentstacks
342set $kgm_ncpus = machine_info.max_cpus
343set $kgm_i = 0
344 while $kgm_i < $kgm_ncpus
345 set $kgm_prp = processor_ptr[$kgm_i]
346 if ($kgm_prp != 0) && (($kgm_prp)->active_thread != 0)
347 set $kgm_actp = (($kgm_prp)->active_thread)->top_act
348 showtaskheader
349 showtaskint ($kgm_actp)->task
350 showactheader
351 showactint $kgm_actp 1
352 printf "\n"
353 end
354 set $kgm_i = $kgm_i + 1
355 end
356end
357document showcurrentstacks
358| Routine to print out the thread running on each cpu (incl. its stack)
359| The following is the syntax:
360| (gdb) showcurrentstacks
361end
362
9bccf70c
A
363define showwaiterheader
364 printf "waiters activation "
365 printf "thread pri state wait_queue wait_event\n"
366end
367
368define showwaitqwaiters
369 set $kgm_w_waitqp = (struct wait_queue *)$arg0
370 set $kgm_w_linksp = &($kgm_w_waitqp->wq_queue)
371 set $kgm_w_wqe = (struct wait_queue_element *)$kgm_w_linksp->next
372 set $kgm_w_found = 0
373 while ( (queue_entry_t)$kgm_w_wqe != (queue_entry_t)$kgm_w_linksp)
374 if ($kgm_w_wqe->wqe_type != &_wait_queue_link)
375 if !$kgm_w_found
376 set $kgm_w_found = 1
377 showwaiterheader
378 end
55e303ae 379 set $kgm_w_shuttle = (struct thread *)$kgm_w_wqe
9bccf70c
A
380 showactint $kgm_w_shuttle->top_act 0
381 end
382 set $kgm_w_wqe = (struct wait_queue_element *)$kgm_w_wqe->wqe_links.next
383 end
384end
385
386define showwaitqwaitercount
387 set $kgm_wc_waitqp = (struct wait_queue *)$arg0
388 set $kgm_wc_linksp = &($kgm_wc_waitqp->wq_queue)
389 set $kgm_wc_wqe = (struct wait_queue_element *)$kgm_wc_linksp->next
390 set $kgm_wc_count = 0
391 while ( (queue_entry_t)$kgm_wc_wqe != (queue_entry_t)$kgm_wc_linksp)
392 if ($kgm_wc_wqe->wqe_type != &_wait_queue_link)
393 set $kgm_wc_count = $kgm_wc_count + 1
394 end
395 set $kgm_wc_wqe = (struct wait_queue_element *)$kgm_wc_wqe->wqe_links.next
396 end
397 printf "0x%08x ", $kgm_wc_count
398end
399
1c79356b 400define showwaitqmembercount
9bccf70c
A
401 set $kgm_mc_waitqsetp = (struct wait_queue_set *)$arg0
402 set $kgm_mc_setlinksp = &($kgm_mc_waitqsetp->wqs_setlinks)
403 set $kgm_mc_wql = (struct wait_queue_link *)$kgm_mc_setlinksp->next
404 set $kgm_mc_count = 0
405 while ( (queue_entry_t)$kgm_mc_wql != (queue_entry_t)$kgm_mc_setlinksp)
406 set $kgm_mc_count = $kgm_mc_count + 1
407 set $kgm_mc_wql = (struct wait_queue_link *)$kgm_mc_wql->wql_setlinks.next
1c79356b 408 end
9bccf70c 409 printf "0x%08x ", $kgm_mc_count
1c79356b
A
410end
411
412
9bccf70c
A
413define showwaitqmemberheader
414 printf "set-members wait_queue interlock "
415 printf "pol type member_cnt waiter_cnt\n"
416end
417
1c79356b 418define showwaitqmemberint
9bccf70c
A
419 set $kgm_m_waitqp = (struct wait_queue *)$arg0
420 printf " 0x%08x ", $kgm_m_waitqp
421 printf "0x%08x ", $kgm_m_waitqp->wq_interlock.lock_data
422 if ($kgm_m_waitqp->wq_fifo)
423 printf "Fifo "
1c79356b 424 else
9bccf70c 425 printf "Prio "
1c79356b 426 end
9bccf70c
A
427 if ($kgm_m_waitqp->wq_type == 0xf1d1)
428 printf "Set "
429 showwaitqmembercount $kgm_m_waitqp
1c79356b 430 else
9bccf70c 431 printf "Que 0x00000000 "
1c79356b 432 end
9bccf70c 433 showwaitqwaitercount $kgm_m_waitqp
1c79356b
A
434 printf "\n"
435end
436
437
9bccf70c
A
438define showwaitqmemberofheader
439 printf "member-of wait_queue interlock "
440 printf "pol type member_cnt waiter_cnt\n"
441end
442
443define showwaitqmemberof
444 set $kgm_mo_waitqp = (struct wait_queue *)$arg0
445 set $kgm_mo_linksp = &($kgm_mo_waitqp->wq_queue)
446 set $kgm_mo_wqe = (struct wait_queue_element *)$kgm_mo_linksp->next
447 set $kgm_mo_found = 0
448 while ( (queue_entry_t)$kgm_mo_wqe != (queue_entry_t)$kgm_mo_linksp)
449 if ($kgm_mo_wqe->wqe_type == &_wait_queue_link)
450 if !$kgm_mo_found
451 set $kgm_mo_found = 1
452 showwaitqmemberofheader
453 end
454 set $kgm_mo_wqlp = (struct wait_queue_link *)$kgm_mo_wqe
455 set $kgm_mo_wqsetp = (struct wait_queue *)($kgm_mo_wqlp->wql_setqueue)
456 showwaitqmemberint $kgm_mo_wqsetp
457 end
458 set $kgm_mo_wqe = (struct wait_queue_element *)$kgm_mo_wqe->wqe_links.next
459 end
460end
461
1c79356b 462define showwaitqmembers
9bccf70c
A
463 set $kgm_ms_waitqsetp = (struct wait_queue_set *)$arg0
464 set $kgm_ms_setlinksp = &($kgm_ms_waitqsetp->wqs_setlinks)
465 set $kgm_ms_wql = (struct wait_queue_link *)$kgm_ms_setlinksp->next
466 set $kgm_ms_found = 0
467 while ( (queue_entry_t)$kgm_ms_wql != (queue_entry_t)$kgm_ms_setlinksp)
468 set $kgm_ms_waitqp = $kgm_ms_wql->wql_element.wqe_queue
469 if !$kgm_ms_found
1c79356b 470 showwaitqmemberheader
9bccf70c 471 set $kgm_ms_found = 1
1c79356b 472 end
9bccf70c
A
473 showwaitqmemberint $kgm_ms_waitqp
474 set $kgm_ms_wql = (struct wait_queue_link *)$kgm_ms_wql->wql_setlinks.next
1c79356b
A
475 end
476end
477
9bccf70c
A
478define showwaitqheader
479 printf "wait_queue ref_count interlock "
480 printf "pol type member_cnt waiter_cnt\n"
481end
482
483define showwaitqint
484 set $kgm_waitqp = (struct wait_queue *)$arg0
485 printf "0x%08x ", $kgm_waitqp
486 if ($kgm_waitqp->wq_type == 0xf1d1)
487 printf "0x%08x ", ((struct wait_queue_set *)$kgm_waitqp)->wqs_refcount
488 else
489 printf "0x00000000 "
490 end
491 printf "0x%08x ", $kgm_waitqp->wq_interlock.lock_data
492 if ($kgm_waitqp->wq_fifo)
493 printf "Fifo "
494 else
495 printf "Prio "
496 end
497 if ($kgm_waitqp->wq_type == 0xf1d1)
498 printf "Set "
499 showwaitqmembercount $kgm_waitqp
500 else
501 printf "Que 0x00000000 "
502 end
503 showwaitqwaitercount $kgm_waitqp
504 printf "\n"
505end
506
1c79356b 507define showwaitq
9bccf70c 508 set $kgm_waitq1p = (wait_queue_t)$arg0
1c79356b 509 showwaitqheader
9bccf70c
A
510 showwaitqint $kgm_waitq1p
511 if ($kgm_waitq1p->wq_type == 0xf1d1)
512 showwaitqmembers $kgm_waitq1p
513 else
514 showwaitqmemberof $kgm_waitq1p
1c79356b 515 end
9bccf70c 516 showwaitqwaiters $kgm_waitq1p
1c79356b
A
517end
518
519define showmapheader
520 printf "vm_map pmap vm_size "
521 printf "#ents rpage hint first_free\n"
522end
523
524define showvmeheader
525 printf " entry start "
526 printf "prot #page object offset\n"
527end
528
529define showvmint
530 set $kgm_mapp = (vm_map_t)$arg0
531 set $kgm_map = *$kgm_mapp
532 printf "0x%08x ", $arg0
533 printf "0x%08x ", $kgm_map.pmap
534 printf "0x%08x ", $kgm_map.size
535 printf "%3d ", $kgm_map.hdr.nentries
536 printf "%5d ", $kgm_map.pmap->stats.resident_count
537 printf "0x%08x ", $kgm_map.hint
538 printf "0x%08x\n", $kgm_map.first_free
539 if $arg1 != 0
540 showvmeheader
541 set $kgm_head_vmep = &($kgm_mapp->hdr.links)
542 set $kgm_vmep = $kgm_map.hdr.links.next
543 while (($kgm_vmep != 0) && ($kgm_vmep != $kgm_head_vmep))
544 set $kgm_vme = *$kgm_vmep
545 printf " 0x%08x ", $kgm_vmep
546 printf "0x%08x ", $kgm_vme.links.start
547 printf "%1x", $kgm_vme.protection
548 printf "%1x", $kgm_vme.max_protection
549 if $kgm_vme.inheritance == 0x0
550 printf "S"
551 end
552 if $kgm_vme.inheritance == 0x1
553 printf "C"
554 end
555 if $kgm_vme.inheritance == 0x2
556 printf "-"
557 end
558 if $kgm_vme.inheritance == 0x3
559 printf "D"
560 end
561 if $kgm_vme.is_sub_map
562 printf "s "
563 else
564 if $kgm_vme.needs_copy
565 printf "n "
566 else
567 printf " "
568 end
569 end
570 printf "%5d ",($kgm_vme.links.end - $kgm_vme.links.start) >> 12
571 printf "0x%08x ", $kgm_vme.object.vm_object
572 printf "0x%08x\n", $kgm_vme.offset
573 set $kgm_vmep = $kgm_vme.links.next
574 end
575 end
576 printf "\n"
577end
578
579
580define showmapvme
581 showmapheader
582 showvmint $arg0 1
583end
584document showmapvme
585| Routine to print out a summary listing of all the entries in a vm_map
586| The following is the syntax:
587| (gdb) showmapvme <vm_map>
588end
589
590
591define showmap
592 showmapheader
593 showvmint $arg0 0
594end
595document showmap
55e303ae 596| Routine to print out info about the specified vm_map
1c79356b
A
597| The following is the syntax:
598| (gdb) showmap <vm_map>
599end
600
601define showallvm
602 set $kgm_head_taskp = &default_pset.tasks
9bccf70c 603 set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
1c79356b
A
604 while $kgm_taskp != $kgm_head_taskp
605 showtaskheader
606 showmapheader
607 showtaskint $kgm_taskp
608 showvmint $kgm_taskp->map 0
9bccf70c 609 set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
1c79356b
A
610 end
611end
612document showallvm
613| Routine to print a summary listing of all the vm maps
614| The following is the syntax:
615| (gdb) showallvm
616end
617
618
619define showallvme
620 set $kgm_head_taskp = &default_pset.tasks
9bccf70c 621 set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
1c79356b
A
622 while $kgm_taskp != $kgm_head_taskp
623 showtaskheader
624 showmapheader
625 showtaskint $kgm_taskp
626 showvmint $kgm_taskp->map 1
9bccf70c 627 set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
1c79356b
A
628 end
629end
630document showallvme
631| Routine to print a summary listing of all the vm map entries
632| The following is the syntax:
633| (gdb) showallvme
634end
635
636
637define showipcheader
638 printf "ipc_space is_table table_next "
639 printf "flags tsize splaytree splaybase\n"
640end
641
642define showipceheader
643 printf " name object "
644 printf "rite urefs destname destination\n"
645end
646
647define showipceint
648 set $kgm_ie = *(ipc_entry_t)$arg0
649 printf " 0x%08x ", $arg1
650 printf "0x%08x ", $kgm_ie.ie_object
651 if $kgm_ie.ie_bits & 0x00100000
652 printf "Dead "
653 printf "%5d\n", $kgm_ie.ie_bits & 0xffff
654 else
655 if $kgm_ie.ie_bits & 0x00080000
656 printf "SET "
657 printf "%5d\n", $kgm_ie.ie_bits & 0xffff
658 else
659 if $kgm_ie.ie_bits & 0x00010000
660 if $kgm_ie.ie_bits & 0x00020000
661 printf " SR"
662 else
663 printf " S"
664 end
665 else
666 if $kgm_ie.ie_bits & 0x00020000
667 printf " R"
668 end
669 end
670 if $kgm_ie.ie_bits & 0x00040000
671 printf " O"
672 end
673 if $kgm_ie.index.request
674 printf "n"
675 else
676 printf " "
677 end
678 if $kgm_ie.ie_bits & 0x00800000
679 printf "c"
680 else
681 printf " "
682 end
683 printf "%5d ", $kgm_ie.ie_bits & 0xffff
684 showportdest $kgm_ie.ie_object
685 end
686 end
687end
688
689define showipcint
690 set $kgm_isp = (ipc_space_t)$arg0
691 set $kgm_is = *$kgm_isp
692 printf "0x%08x ", $arg0
693 printf "0x%08x ", $kgm_is.is_table
694 printf "0x%08x ", $kgm_is.is_table_next
695 if $kgm_is.is_growing != 0
696 printf "G"
697 else
698 printf " "
699 end
700 if $kgm_is.is_fast != 0
701 printf "F"
702 else
703 printf " "
704 end
705 if $kgm_is.is_active != 0
706 printf "A "
707 else
708 printf " "
709 end
710 printf "%5d ", $kgm_is.is_table_size
711 printf "0x%08x ", $kgm_is.is_tree_total
712 printf "0x%08x\n", &$kgm_isp->is_tree
713 if $arg1 != 0
714 showipceheader
715 set $kgm_iindex = 0
716 set $kgm_iep = $kgm_is.is_table
717 set $kgm_destspacep = (ipc_space_t)0
718 while ( $kgm_iindex < $kgm_is.is_table_size )
719 set $kgm_ie = *$kgm_iep
720 if $kgm_ie.ie_bits & 0x001f0000
721 set $kgm_name = (($kgm_iindex << 8)|($kgm_ie.ie_bits >> 24))
722 showipceint $kgm_iep $kgm_name
723 end
724 set $kgm_iindex = $kgm_iindex + 1
725 set $kgm_iep = &($kgm_is.is_table[$kgm_iindex])
726 end
727 if $kgm_is.is_tree_total
728 printf "Still need to write tree traversal\n"
729 end
730 end
731 printf "\n"
732end
733
734
735define showipc
736 set $kgm_isp = (ipc_space_t)$arg0
737 showipcheader
738 showipcint $kgm_isp 0
739end
740document showipc
741| Routine to print the status of the specified ipc space
742| The following is the syntax:
743| (gdb) showipc <ipc_space>
744end
745
746define showrights
747 set $kgm_isp = (ipc_space_t)$arg0
748 showipcheader
749 showipcint $kgm_isp 1
750end
751document showrights
752| Routine to print a summary list of all the rights in a specified ipc space
753| The following is the syntax:
754| (gdb) showrights <ipc_space>
755end
756
757
758define showtaskipc
759 set $kgm_taskp = (task_t)$arg0
760 showtaskheader
761 showipcheader
762 showtaskint $kgm_taskp
763 showipcint $kgm_taskp->itk_space 0
764end
765document showtaskipc
55e303ae 766| Routine to print info about the ipc space for a task
1c79356b
A
767| The following is the syntax:
768| (gdb) showtaskipc <task>
769end
770
771
772define showtaskrights
773 set $kgm_taskp = (task_t)$arg0
774 showtaskheader
775 showipcheader
776 showtaskint $kgm_taskp
777 showipcint $kgm_taskp->itk_space 1
778end
779document showtaskrights
55e303ae 780| Routine to print info about the ipc rights for a task
1c79356b
A
781| The following is the syntax:
782| (gdb) showtaskrights <task>
783end
784
785define showallipc
786 set $kgm_head_taskp = &default_pset.tasks
9bccf70c 787 set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
1c79356b
A
788 while $kgm_taskp != $kgm_head_taskp
789 showtaskheader
790 showipcheader
791 showtaskint $kgm_taskp
792 showipcint $kgm_taskp->itk_space 0
9bccf70c 793 set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
1c79356b
A
794 end
795end
796document showallipc
797| Routine to print a summary listing of all the ipc spaces
798| The following is the syntax:
799| (gdb) showallipc
800end
801
802
803define showallrights
804 set $kgm_head_taskp = &default_pset.tasks
9bccf70c 805 set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
1c79356b
A
806 while $kgm_taskp != $kgm_head_taskp
807 showtaskheader
808 showipcheader
809 showtaskint $kgm_taskp
810 showipcint $kgm_taskp->itk_space 1
9bccf70c 811 set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
1c79356b
A
812 end
813end
814document showallrights
815| Routine to print a summary listing of all the ipc rights
816| The following is the syntax:
817| (gdb) showallrights
818end
819
820
821define showtaskvm
822 set $kgm_taskp = (task_t)$arg0
823 showtaskheader
824 showmapheader
825 showtaskint $kgm_taskp
826 showvmint $kgm_taskp->map 0
827end
828document showtaskvm
55e303ae 829| Routine to print out info about a task's vm_map
1c79356b
A
830| The following is the syntax:
831| (gdb) showtaskvm <task>
832end
833
834define showtaskvme
835 set $kgm_taskp = (task_t)$arg0
836 showtaskheader
837 showmapheader
838 showtaskint $kgm_taskp
839 showvmint $kgm_taskp->map 1
840end
841document showtaskvme
55e303ae 842| Routine to print out info about a task's vm_map_entries
1c79356b
A
843| The following is the syntax:
844| (gdb) showtaskvme <task>
845end
846
847
848define showtaskheader
849 printf "task vm_map ipc_space #acts "
850 showprocheader
851end
852
853
854define showtaskint
9bccf70c 855 set $kgm_task = *(struct task *)$arg0
1c79356b
A
856 printf "0x%08x ", $arg0
857 printf "0x%08x ", $kgm_task.map
858 printf "0x%08x ", $kgm_task.itk_space
55e303ae 859 printf "%3d ", $kgm_task.thread_count
1c79356b
A
860 showprocint $kgm_task.bsd_info
861end
862
863define showtask
864 showtaskheader
865 showtaskint $arg0
866end
867document showtask
868| Routine to print out info about a task.
869| The following is the syntax:
870| (gdb) showtask <task>
871end
872
873
55e303ae 874define showtaskthreads
1c79356b 875 showtaskheader
9bccf70c 876 set $kgm_taskp = (struct task *)$arg0
1c79356b
A
877 showtaskint $kgm_taskp
878 showactheader
55e303ae
A
879 set $kgm_head_actp = &($kgm_taskp->threads)
880 set $kgm_actp = (struct thread *)($kgm_taskp->threads.next)
1c79356b
A
881 while $kgm_actp != $kgm_head_actp
882 showactint $kgm_actp 0
55e303ae 883 set $kgm_actp = (struct thread *)($kgm_actp->task_threads.next)
1c79356b
A
884 end
885end
55e303ae
A
886document showtaskthreads
887| Routine to print info about the threads in a task.
1c79356b 888| The following is the syntax:
55e303ae 889| (gdb) showtaskthreads <task>
1c79356b
A
890end
891
892
893define showtaskstacks
894 showtaskheader
9bccf70c 895 set $kgm_taskp = (struct task *)$arg0
1c79356b 896 showtaskint $kgm_taskp
55e303ae
A
897 set $kgm_head_actp = &($kgm_taskp->threads)
898 set $kgm_actp = (struct thread *)($kgm_taskp->threads.next)
1c79356b
A
899 while $kgm_actp != $kgm_head_actp
900 showactheader
901 showactint $kgm_actp 1
55e303ae 902 set $kgm_actp = (struct thread *)($kgm_actp->task_threads.next)
1c79356b
A
903 end
904end
905document showtaskstacks
55e303ae 906| Routine to print out the stack for each thread in a task.
1c79356b
A
907| The following is the syntax:
908| (gdb) showtaskstacks <task>
909end
910
911
912define showalltasks
913 showtaskheader
914 set $kgm_head_taskp = &default_pset.tasks
9bccf70c 915 set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
1c79356b
A
916 while $kgm_taskp != $kgm_head_taskp
917 showtaskint $kgm_taskp
9bccf70c 918 set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
1c79356b
A
919 end
920end
921document showalltasks
922| Routine to print a summary listing of all the tasks
923| The following is the syntax:
924| (gdb) showalltasks
925end
926
927
928define showprocheader
929 printf " pid proc command\n"
930end
931
932define showprocint
933 set $kgm_procp = (struct proc *)$arg0
934 if $kgm_procp != 0
935 printf "%5d ", $kgm_procp->p_pid
936 printf "0x%08x ", $kgm_procp
937 printf "%s\n", $kgm_procp->p_comm
938 else
939 printf " *0* 0x00000000 --\n"
940 end
941end
942
943define showpid
944 showtaskheader
945 set $kgm_head_taskp = &default_pset.tasks
9bccf70c 946 set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
1c79356b
A
947 while $kgm_taskp != $kgm_head_taskp
948 set $kgm_procp = (struct proc *)$kgm_taskp->bsd_info
949 if (($kgm_procp != 0) && ($kgm_procp->p_pid == $arg0))
950 showtaskint $kgm_taskp
951 set $kgm_taskp = $kgm_head_taskp
952 else
9bccf70c 953 set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
1c79356b
A
954 end
955 end
956end
957document showpid
958| Routine to print a single process by pid
959| The following is the syntax:
960| (gdb) showpid <pid>
961end
962
963define showproc
964 showtaskheader
965 set $kgm_procp = (struct proc *)$arg0
966 showtaskint $kgm_procp->task $arg1 $arg2
967end
968
969
970define kdb
971 set switch_debugger=1
972 continue
973end
974document kdb
975| kdb - Switch to the inline kernel debugger
976|
977| usage: kdb
978|
979| The kdb macro allows you to invoke the inline kernel debugger.
980end
981
982define showpsetheader
983 printf "portset waitqueue recvname "
984 printf "flags refs recvname process\n"
985end
986
987define showportheader
988 printf "port mqueue recvname "
989 printf "flags refs recvname process\n"
990end
991
992define showportmemberheader
9bccf70c 993 printf "members port recvname "
1c79356b
A
994 printf "flags refs mqueue msgcount\n"
995end
996
997define showkmsgheader
9bccf70c 998 printf "messages kmsg size "
1c79356b
A
999 printf "disp msgid remote-port local-port\n"
1000end
1001
1002define showkmsgint
1003 printf " 0x%08x ", $arg0
1004 set $kgm_kmsgh = ((ipc_kmsg_t)$arg0)->ikm_header
1005 printf "0x%08x ", $kgm_kmsgh.msgh_size
1006 if (($kgm_kmsgh.msgh_bits & 0xff) == 19)
1007 printf "rC"
1008 else
1009 printf "rM"
1010 end
1011 if (($kgm_kmsgh.msgh_bits & 0xff00) == (19 < 8))
1012 printf "lC"
1013 else
1014 printf "lM"
1015 end
1016 if ($kgm_kmsgh.msgh_bits & 0xf0000000)
1017 printf "c"
1018 else
1019 printf "s"
1020 end
9bccf70c 1021 printf "%5d ", $kgm_kmsgh.msgh_id
1c79356b
A
1022 printf "0x%08x ", $kgm_kmsgh.msgh_remote_port
1023 printf "0x%08x\n", $kgm_kmsgh.msgh_local_port
1024end
1025
1026
1027
1028define showkobject
9bccf70c 1029 set $kgm_portp = (struct ipc_port *)$arg0
1c79356b
A
1030 printf "0x%08x kobject(", $kgm_portp->ip_kobject
1031 set $kgm_kotype = ($kgm_portp->ip_object.io_bits & 0x00000fff)
1032 if ($kgm_kotype == 1)
1033 printf "THREAD"
1034 end
1035 if ($kgm_kotype == 2)
1036 printf "TASK"
1037 end
1038 if ($kgm_kotype == 3)
1039 printf "HOST"
1040 end
1041 if ($kgm_kotype == 4)
1042 printf "HOST_PRIV"
1043 end
1044 if ($kgm_kotype == 5)
1045 printf "PROCESSOR"
1046 end
1047 if ($kgm_kotype == 6)
1048 printf "PSET"
1049 end
1050 if ($kgm_kotype == 7)
1051 printf "PSET_NAME"
1052 end
1053 if ($kgm_kotype == 8)
1054 printf "TIMER"
1055 end
1056 if ($kgm_kotype == 9)
1057 printf "PAGER_REQ"
1058 end
1059 if ($kgm_kotype == 10)
1060 printf "DEVICE"
1061 end
1062 if ($kgm_kotype == 11)
1063 printf "XMM_OBJECT"
1064 end
1065 if ($kgm_kotype == 12)
1066 printf "XMM_PAGER"
1067 end
1068 if ($kgm_kotype == 13)
1069 printf "XMM_KERNEL"
1070 end
1071 if ($kgm_kotype == 14)
1072 printf "XMM_REPLY"
1073 end
1074 if ($kgm_kotype == 15)
1075 printf "NOTDEF 15"
1076 end
1077 if ($kgm_kotype == 16)
1078 printf "NOTDEF 16"
1079 end
1080 if ($kgm_kotype == 17)
1081 printf "HOST_SEC"
1082 end
1083 if ($kgm_kotype == 18)
1084 printf "LEDGER"
1085 end
1086 if ($kgm_kotype == 19)
1087 printf "MASTER_DEV"
1088 end
1089 if ($kgm_kotype == 20)
1090 printf "ACTIVATION"
1091 end
1092 if ($kgm_kotype == 21)
1093 printf "SUBSYSTEM"
1094 end
1095 if ($kgm_kotype == 22)
1096 printf "IO_DONE_QUE"
1097 end
1098 if ($kgm_kotype == 23)
1099 printf "SEMAPHORE"
1100 end
1101 if ($kgm_kotype == 24)
1102 printf "LOCK_SET"
1103 end
1104 if ($kgm_kotype == 25)
1105 printf "CLOCK"
1106 end
1107 if ($kgm_kotype == 26)
1108 printf "CLOCK_CTRL"
1109 end
1110 if ($kgm_kotype == 27)
1111 printf "IOKIT_SPARE"
1112 end
1113 if ($kgm_kotype == 28)
1114 printf "NAMED_MEM"
1115 end
1116 if ($kgm_kotype == 29)
1117 printf "IOKIT_CON"
1118 end
1119 if ($kgm_kotype == 30)
1120 printf "IOKIT_OBJ"
1121 end
1122 if ($kgm_kotype == 31)
1123 printf "UPL"
1124 end
1125 printf ")\n"
1126end
1127
1128define showportdestproc
9bccf70c 1129 set $kgm_portp = (struct ipc_port *)$arg0
1c79356b
A
1130 set $kgm_spacep = $kgm_portp->data.receiver
1131# check against the previous cached value - this is slow
1132 if ($kgm_spacep != $kgm_destspacep)
1133 set $kgm_destprocp = (struct proc *)0
1134 set $kgm_head_taskp = &default_pset.tasks
9bccf70c 1135 set $kgm_taskp = (struct task *)($kgm_head_taskp->next)
1c79356b
A
1136 while (($kgm_destprocp == 0) && ($kgm_taskp != $kgm_head_taskp))
1137 set $kgm_destspacep = $kgm_taskp->itk_space
1138 if ($kgm_destspacep == $kgm_spacep)
1139 set $kgm_destprocp = (struct proc *)$kgm_taskp->bsd_info
1140 else
9bccf70c 1141 set $kgm_taskp = (struct task *)($kgm_taskp->pset_tasks.next)
1c79356b
A
1142 end
1143 end
1144 end
1145 if $kgm_destprocp != 0
1146 printf "%s(%d)\n", $kgm_destprocp->p_comm, $kgm_destprocp->p_pid
1147 else
1148 printf "task 0x%08x\n", $kgm_taskp
1149 end
1150end
1151
1152define showportdest
9bccf70c 1153 set $kgm_portp = (struct ipc_port *)$arg0
1c79356b
A
1154 set $kgm_spacep = $kgm_portp->data.receiver
1155 if ($kgm_spacep == ipc_space_kernel)
1156 showkobject $kgm_portp
1157 else
1158 if ($kgm_portp->ip_object.io_bits & 0x80000000)
1159 printf "0x%08x ", $kgm_portp->ip_object.io_receiver_name
1160 showportdestproc $kgm_portp
1161 else
1162 printf "0x%08x inactive-port\n", $kgm_portp
1163 end
1164 end
1165end
1166
1167define showportmember
1168 printf " 0x%08x ", $arg0
9bccf70c 1169 set $kgm_portp = (struct ipc_port *)$arg0
1c79356b
A
1170 printf "0x%08x ", $kgm_portp->ip_object.io_receiver_name
1171 if ($kgm_portp->ip_object.io_bits & 0x80000000)
1172 printf "A"
1173 else
1174 printf " "
1175 end
1176 if ($kgm_portp->ip_object.io_bits & 0x7fff0000)
1177 printf "Set "
1178 else
1179 printf "Port"
1180 end
1181 printf "%5d ", $kgm_portp->ip_object.io_references
1182 printf "0x%08x ", &($kgm_portp->ip_messages)
1183 printf "0x%08x\n", $kgm_portp->ip_messages.data.port.msgcount
1184end
1185
1186define showportint
1187 printf "0x%08x ", $arg0
9bccf70c 1188 set $kgm_portp = (struct ipc_port *)$arg0
1c79356b
A
1189 printf "0x%08x ", &($kgm_portp->ip_messages)
1190 printf "0x%08x ", $kgm_portp->ip_object.io_receiver_name
1191 if ($kgm_portp->ip_object.io_bits & 0x80000000)
1192 printf "A"
1193 else
1194 printf "D"
1195 end
1196 printf "Port"
1197 printf "%5d ", $kgm_portp->ip_object.io_references
9bccf70c 1198 set $kgm_destspacep = (struct ipc_space *)0
1c79356b
A
1199 showportdest $kgm_portp
1200 set $kgm_kmsgp = (ipc_kmsg_t)$kgm_portp->ip_messages.data.port.messages.ikmq_base
1201 if $arg1 && $kgm_kmsgp
1202 showkmsgheader
1203 showkmsgint $kgm_kmsgp
1204 set $kgm_kmsgheadp = $kgm_kmsgp
1205 set $kgm_kmsgp = $kgm_kmsgp->ikm_next
1206 while $kgm_kmsgp != $kgm_kmsgheadp
1207 showkmsgint $kgm_kmsgp
1208 set $kgm_kmsgp = $kgm_kmsgp->ikm_next
1209 end
1210 end
1211end
1212
1213define showpsetint
1214 printf "0x%08x ", $arg0
9bccf70c 1215 set $kgm_psetp = (struct ipc_pset *)$arg0
1c79356b
A
1216 printf "0x%08x ", &($kgm_psetp->ips_messages)
1217 printf "0x%08x ", $kgm_psetp->ips_object.io_receiver_name
1218 if ($kgm_psetp->ips_object.io_bits & 0x80000000)
1219 printf "A"
1220 else
1221 printf "D"
1222 end
1223 printf "Set "
1224 printf "%5d ", $kgm_psetp->ips_object.io_references
9bccf70c
A
1225 printf "0x%08x ", $kgm_psetp->ips_object.io_receiver_name
1226 set $kgm_setlinksp = &($kgm_psetp->ips_messages.data.set_queue.wqs_setlinks)
1227 set $kgm_wql = (struct wait_queue_link *)$kgm_setlinksp->next
1c79356b 1228 set $kgm_found = 0
9bccf70c
A
1229 while ( (queue_entry_t)$kgm_wql != (queue_entry_t)$kgm_setlinksp)
1230 set $kgm_portp = (struct ipc_port *)((int)($kgm_wql->wql_element->wqe_queue) - ((int)$kgm_portoff))
1c79356b 1231 if !$kgm_found
9bccf70c
A
1232 set $kgm_destspacep = (struct ipc_space *)0
1233 showportdestproc $kgm_portp
1c79356b
A
1234 showportmemberheader
1235 set $kgm_found = 1
1236 end
1237 showportmember $kgm_portp 0
9bccf70c 1238 set $kgm_wql = (struct wait_queue_link *)$kgm_wql->wql_setlinks.next
1c79356b 1239 end
9bccf70c
A
1240 if !$kgm_found
1241 printf "--n/e--\n"
1c79356b
A
1242 end
1243end
1244
1245define showpset
1246 showpsetheader
1247 showpsetint $arg0 1
1248end
1249
1250define showport
1251 showportheader
1252 showportint $arg0 1
1253end
1254
1255define showipcobject
1256 set $kgm_object = (ipc_object_t)$arg0
1257 if ($kgm_objectp->io_bits & 0x7fff0000)
1258 showpset $kgm_objectp
1259 else
1260 showport $kgm_objectp
1261 end
1262end
1263
1264define showmqueue
9bccf70c
A
1265 set $kgm_mqueue = *(struct ipc_mqueue *)$arg0
1266 set $kgm_psetoff = &(((struct ipc_pset *)0)->ips_messages)
1267 set $kgm_portoff = &(((struct ipc_port *)0)->ip_messages)
1268 if ($kgm_mqueue.data.set_queue.wqs_wait_queue.wq_type == 0xf1d1)
1c79356b
A
1269 set $kgm_pset = (((int)$arg0) - ((int)$kgm_psetoff))
1270 showpsetheader
1271 showpsetint $kgm_pset 1
9bccf70c
A
1272 end
1273 if ($kgm_mqueue.data.set_queue.wqs_wait_queue.wq_type == 0xf1d0)
1c79356b
A
1274 showportheader
1275 set $kgm_port = (((int)$arg0) - ((int)$kgm_portoff))
1276 showportint $kgm_port 1
1277 end
1278end
1279
1280define zprint_one
1281set $kgm_zone = (struct zone *)$arg0
1282
1283printf "0x%08x ", $kgm_zone
1284printf "%8d ",$kgm_zone->count
1285printf "%8x ",$kgm_zone->cur_size
1286printf "%8x ",$kgm_zone->max_size
1287printf "%6d ",$kgm_zone->elem_size
1288printf "%8x ",$kgm_zone->alloc_size
1289printf "%s ",$kgm_zone->zone_name
1290
1291if ($kgm_zone->exhaustible)
1292 printf "H"
1293end
1294if ($kgm_zone->collectable)
1295 printf "C"
1296end
1297if ($kgm_zone->expandable)
1298 printf "X"
1299end
1300printf "\n"
1301end
1302
1303
1304define zprint
1305printf "ZONE COUNT TOT_SZ MAX_SZ ELT_SZ ALLOC_SZ NAME\n"
1306set $kgm_zone_ptr = (struct zone *)first_zone
1307while ($kgm_zone_ptr != 0)
1308 zprint_one $kgm_zone_ptr
1309 set $kgm_zone_ptr = $kgm_zone_ptr->next_zone
1310end
1311printf "\n"
1312end
1313document zprint
1314| Routine to print a summary listing of all the kernel zones
1315| The following is the syntax:
1316| (gdb) zprint
1317end
1318
9bccf70c
A
1319set $kdp_act_counter = 0
1320
1321define switchtoact
1322 if (machine_slot[0].cpu_type == 18)
1323 if ($kdp_act_counter == 0)
1324 set $kdpstate = (struct savearea *) kdp.saved_state
1325 end
1326 set $kdp_act_counter = $kdp_act_counter + 1
55e303ae 1327 set $newact = (struct thread *) $arg0
9bccf70c
A
1328 if (($newact.thread)->kernel_stack == 0)
1329 echo This activation does not have a stack.\n
1330 echo continuation:
1331 output/a $newact.thread.continuation
1332 echo \n
1333 end
1334 set (struct savearea *) kdp.saved_state=$newact->mact->pcb
1335 flush
1336 set $pc=$newact->mact->pcb.save_srr0
1337 update
1338 else
1339 echo switchtoact not implemented for this architecture.\n
1340 end
1341end
1342
1343document switchtoact
1344Syntax: switchtoact <address of activation>
1345| This command allows gdb to examine the execution context and call
1346| stack for the specified activation. For example, to view the backtrace
1347| for an activation issue "switchtoact <address>", followed by "bt".
1348| Before resuming execution, issue a "resetctx" command, to
1349| return to the original execution context.
1350end
1351
1352define switchtoctx
1353 if (machine_slot[0].cpu_type == 18)
1354 if ($kdp_act_counter == 0)
1355 set $kdpstate = (struct savearea *) kdp.saved_state
1356 end
1357 set $kdp_act_counter = $kdp_act_counter + 1
1358 set (struct savearea *) kdp.saved_state=(struct savearea *) $arg0
1359 flush
1360 set $pc=((struct savearea *) $arg0)->save_srr0
1361 update
1362 else
1363 echo switchtoctx not implemented for this architecture.\n
1364 end
1365end
1366
1367document switchtoctx
1368Syntax: switchtoctx <address of pcb>
1369| This command allows gdb to examine an execution context and dump the
1370| backtrace for this execution context.
1371| Before resuming execution, issue a "resetctx" command, to
1372| return to the original execution context.
1373end
1374
1375define resetctx
1376 if (machine_slot[0].cpu_type == 18)
1377 set (struct savearea *)kdp.saved_state=$kdpstate
1378 flush
1379 set $pc=((struct savearea *) kdp.saved_state)->save_srr0
1380 update
1381 set $kdp_act_counter = 0
1382 else
1383 echo resetctx not implemented for this architecture.\n
1384 end
1385end
1386
1387document resetctx
1388| Syntax: resetctx
1389| Returns to the original execution context. This command should be
1390| issued if you wish to resume execution after using the "switchtoact"
1391| or "switchtoctx" commands.
1392end
1393
55e303ae
A
1394define resume_on
1395 set noresume_on_disconnect = 0
1396end
1397
1398document resume_on
1399| Syntax: resume_on
1400| The target system will resume when detaching or exiting from gdb.
1401| This is the default behavior.
1402end
1403
1404define resume_off
1405 set noresume_on_disconnect = 1
1406end
1407
1408document resume_off
1409| Syntax: resume_off
1410| The target system won't resume after detaching from gdb and
1411| can be attached with a new gdb session
1412end
1413
9bccf70c
A
1414define paniclog
1415 set $kgm_panic_bufptr = debug_buf
55e303ae
A
1416 set $kgm_panic_bufptr_max = debug_buf_ptr
1417 while $kgm_panic_bufptr < $kgm_panic_bufptr_max
9bccf70c
A
1418 if *(char *)$kgm_panic_bufptr == 10
1419 printf "\n"
1420 else
1421 printf "%c", *$kgm_panic_bufptr
1422 end
1423 set $kgm_panic_bufptr= (char *)$kgm_panic_bufptr + 1
1424 end
1425end
1426
1427document paniclog
1428| Syntax: paniclog
1429| Display the panic log information
1430|
1431end
55e303ae
A
1432
1433define dumpcallqueue
1434 set $kgm_callhead = (queue_t)&$arg0
1435 set $kgm_call = (struct call_entry *)$kgm_callhead.next
1436 set $kgm_i = 0
1437 while $kgm_call != $kgm_callhead
1438 printf "0x%08x ", $kgm_call
1439 printf "0x%08x 0x%08x ", $kgm_call->param0, $kgm_call->param1
1440 output $kgm_call->state
1441 printf "\t"
1442 output $kgm_call->deadline
1443 printf "\t"
1444 output $kgm_call->func
1445 printf "\n"
1446 set $kgm_i = $kgm_i + 1
1447 set $kgm_call = (struct call_entry *)$kgm_call->q_link.next
1448 end
1449 printf "%d entries\n", $kgm_i
1450end
1451
1452document dumpcallqueue
1453| Syntax: dumpcallqueue <queue head>
1454| Displays the contents of the specified call_entry queue.
1455end
1456
1457define showtaskacts
1458showtaskthreads $arg0
1459end
1460document showtaskacts
1461| See help showtaskthreads.
1462end
1463
1464define showallacts
1465showallthreads
1466end
1467document showallacts
1468| See help showallthreads.
1469end