Commit | Line | Data |
---|---|---|
f3c4f8ca C |
1 | set $maxargs = 0 |
2 | ||
3 | define xbt | |
4 | ||
5 | set $usrstack = (unsigned long *) &kstack | |
6 | set $ptmap = (unsigned long *) &PTmap | |
7 | ||
8 | set $p = (struct proc *) $arg0 | |
9 | set $paddr = $p->p_addr | |
10 | set $fix = (unsigned long *) $paddr - $usrstack | |
11 | ||
12 | set $xfp = (unsigned long *) $paddr->u_pcb.pcb_tss.tss_ebp | |
13 | set $xpc = (char *) &tsleep | |
14 | ||
15 | while ($xfp > $usrstack && $xfp < $ptmap) | |
16 | ||
17 | set $xfp += $fix | |
18 | ||
19 | printf "Function:\t" | |
20 | p/a $xpc | |
21 | ||
22 | set $i = 0 | |
23 | while ($i < $maxargs) | |
24 | set $arg = (unsigned long *) $xfp[$i + 2] | |
25 | if ($arg > $usrstack && $arg < $ptmap) | |
26 | set $arg += $fix | |
27 | end | |
28 | printf " arg %d:\t%#x\n", $i, (unsigned long) $arg | |
29 | set $i++ | |
30 | end | |
31 | ||
32 | set $xpc = $xfp[1] | |
33 | set $xfp = (unsigned long *) $xfp[0] | |
34 | ||
35 | end | |
36 | end | |
37 | ||
38 | define xps | |
39 | ||
40 | set $p = allproc | |
41 | ||
42 | printf " proc pid flag st wchan comm\n" | |
43 | while ($p) | |
44 | printf "%#10x %5d %8x %2x %#10x %s", $p, $p->p_pid, \ | |
45 | $p->p_flag, $p->p_stat, $p->p_wchan, \ | |
46 | (char *) $p->p_comm | |
47 | if ($p->p_wmesg) | |
48 | printf " (%s)", $p->p_wmesg | |
49 | end | |
50 | printf "\n" | |
51 | set $p = $p->p_nxt | |
52 | end | |
53 | end | |
54 | ||
55 | define pmappde | |
56 | ||
57 | set $m = (struct pmap *) $arg0 | |
58 | set $v = (vm_offset_t) $arg1 | |
59 | set $PDSHIFT = 22 | |
60 | ||
61 | p (&(($m)->pm_pdir[((vm_offset_t)($v) >> $PDSHIFT)&1023])) | |
62 | ||
63 | end | |
64 | ||
65 | define pmappte | |
66 | ||
67 | set $PTmap = (struct pte *) &PTmap | |
68 | set $v = (vm_offset_t) $arg0 | |
69 | set $PGSHIFT = 12 | |
70 | ||
71 | p &$PTmap[$v >> $PGSHIFT] | |
72 | ||
73 | end | |
74 | ||
75 | define mapentries | |
76 | ||
77 | set $map = (vm_map_t) $arg0 | |
78 | set $last = &$map->header | |
79 | set $cur = $map->header.prev | |
80 | ||
81 | printf " entry start end object offset\n" | |
82 | while ($cur != $last) | |
83 | printf "%#10x %#10x %#10x %#10x %#10x\n", $cur, $cur->start, \ | |
84 | $cur->end, $cur->object.vm_object, $cur->offset | |
85 | set $cur = $cur->prev | |
86 | end | |
87 | ||
88 | end | |
89 | ||
90 | define pagequeue | |
91 | ||
92 | set $pq = (queue_entry_t) $arg0 | |
93 | set $m = (vm_page_t) $pq->next | |
94 | ||
95 | printf " vm_page object offset phys flags\n" | |
96 | while ((queue_entry_t) $m != $pq) | |
97 | printf "%#10x %#10x %#10x %#10x ", $m, $m->object, \ | |
98 | $m->offset, $m->phys_addr | |
99 | printf "%c%c%c%c%c%c%c%c%c\n", \ | |
100 | ($m->active ? 'A' : ' '), \ | |
101 | ($m->busy ? 'B' : ' '), \ | |
102 | ($m->clean ? 'C' : ' '), \ | |
103 | ($m->fake ? 'F' : ' '), \ | |
104 | ($m->inactive ? 'I' : ' '), \ | |
105 | ($m->laundry ? 'L' : ' '), \ | |
106 | ($m->object->paging_in_progress > 0 ? 'O' : ' '), \ | |
107 | ($m->pagerowned ? 'P' : ' '), \ | |
108 | ($m->tabled ? 'T' : ' ') | |
109 | set $m = (vm_page_t) $m->pageq.next | |
110 | end | |
111 | ||
112 | end | |
113 | ||
114 | define objectqueue | |
115 | ||
116 | set $oq = (queue_entry_t) $arg0 | |
117 | set $o = (vm_object_t) $oq->next | |
118 | ||
119 | printf " object size pages refs pip\n" | |
120 | while ((queue_entry_t) $o != $oq) | |
121 | printf "%#10x %#10x %5d %5d %5d\n", $o, $o->size, \ | |
122 | $o->resident_page_count, $o->ref_count, \ | |
123 | $o->paging_in_progress | |
124 | set $o = (vm_object_t) $o->object_list.next | |
125 | end | |
126 | ||
127 | end | |
128 | ||
129 | define objectmemq | |
130 | ||
131 | set $o = (vm_object_t) $arg0 | |
132 | set $mq = (queue_entry_t) &$o->memq | |
133 | set $m = (vm_page_t) $mq->next | |
134 | ||
135 | printf " vm_page object offset phys flags\n" | |
136 | while ((queue_entry_t) $m != $mq) | |
137 | printf "%#10x %#10x %#10x %#10x ", $m, $m->object, \ | |
138 | $m->offset, $m->phys_addr | |
139 | printf "%c%c%c%c%c%c%c%c%c\n", \ | |
140 | ($m->active ? 'A' : ' '), \ | |
141 | ($m->busy ? 'B' : ' '), \ | |
142 | ($m->clean ? 'C' : ' '), \ | |
143 | ($m->fake ? 'F' : ' '), \ | |
144 | ($m->inactive ? 'I' : ' '), \ | |
145 | ($m->laundry ? 'L' : ' '), \ | |
146 | ($m->object->paging_in_progress > 0 ? 'O' : ' '), \ | |
147 | ($m->pagerowned ? 'P' : ' '), \ | |
148 | ($m->tabled ? 'T' : ' ') | |
149 | set $m = (vm_page_t) $m->listq.next | |
150 | end | |
151 | ||
152 | end | |
153 | ||
154 | define bucketpage | |
155 | ||
156 | set $p = (char *) ((u_long) $arg0 & ~0xfff) | |
157 | set $i = (int) $arg1 | |
158 | set $end = $p + 0x1000 | |
159 | ||
160 | while ($p < $end) | |
161 | printf "%#10x: %#10x\n", $p, *(u_long *)$p | |
162 | set $p += $i | |
163 | end | |
164 | ||
165 | end | |
166 | ||
167 | define vnodequeue | |
168 | ||
169 | set $mp = (struct mount *) $arg0 | |
170 | set $vp = $mp->mnt_mounth | |
171 | ||
172 | printf " vnode type flag id object\n" | |
173 | while ($vp) | |
174 | set $o = (vm_object_t) 0 | |
175 | set $pager = (vm_page_t) $vp->v_vmdata | |
176 | if ($pager) | |
177 | set $bucket = &vm_object_hashtable[(u_int) $pager % 157] | |
178 | set $entry = (vm_object_hash_entry_t) $bucket->next | |
179 | while ((queue_t) $entry != $bucket) | |
180 | if ($entry->object->pager == $pager) | |
181 | set $o = $entry->object | |
182 | exitloop | |
183 | end | |
184 | set $entry = (vm_object_hash_entry_t) $entry->hash_links.next | |
185 | end | |
186 | end | |
187 | printf "%#10x %4d %#6x %#10x %#10x\n", $vp, $vp->v_type, \ | |
188 | $vp->v_flag, $vp->v_id, $o | |
189 | set $vp = $vp->v_mountf | |
190 | end | |
191 | end | |
192 | ||
193 | define resourcemap | |
194 | ||
195 | set $map = (struct map *) $arg0 | |
196 | set $me = ((struct mapent *) $map) + 1 | |
197 | ||
198 | printf "%s:\n", $map->m_name | |
199 | printf " addr size\n" | |
200 | while ($me < $map->m_limit && $me->m_size != 0xffffffff) | |
201 | printf "%#10x %#10x\n", $me->m_addr, $me->m_size | |
202 | set $me++ | |
203 | end | |
204 | end |