1 static char rcsid[] = "$Id: dmp.c,v 1.4 1996/06/04 09:01:02 paul Exp $";
2 /* This file contains some dumping routines for debugging. */
3
4 #include "kernel.h"
5 #include <minix/com.h>
6 #include "proc.h"
7
8 char *vargv;
9
10 FORWARD _PROTOTYPE(char *proc_name, (int proc_nr));
11
12 /*===========================================================================*
13 * p_dmp *
14 *===========================================================================*/
15 #if (CHIP == INTEL)
16 PUBLIC void p_dmp()
17 {
18 /* Proc table dump */
19
20 register struct proc *rp;
21 static struct proc *oldrp = BEG_PROC_ADDR;
22 int n = 0;
23 phys_clicks text, data, size;
24 int proc_nr;
25
26 printf("\n--pid --pc- ---sp- flag -user --sys-- -text- -data- -size- -recv- command\n");
27
28 for (rp = oldrp; rp < END_PROC_ADDR; rp++) {
29 proc_nr = proc_number(rp);
30 if (rp->p_flags & P_SLOT_FREE) continue;
31 if (++n > 20) break;
32 text = rp->p_map[T].mem_phys;
33 data = rp->p_map[D].mem_phys;
34 size = rp->p_map[T].mem_len
35 + ((rp->p_map[S].mem_phys + rp->p_map[S].mem_len) - data);
36 printf("%5d %5lx %6lx %2x %7U %7U %5uK %5uK %5uK ",
37 proc_nr < 0 ? proc_nr : rp->p_pid,
38 (unsigned long) rp->p_reg.pc,
39 (unsigned long) rp->p_reg.sp,
40 rp->p_flags,
41 rp->user_time, rp->sys_time,
42 click_to_round_k(text), click_to_round_k(data),
43 click_to_round_k(size));
44 if (rp->p_flags & RECEIVING) {
45 printf("%-7.7s", proc_name(rp->p_getfrom));
46 } else
47 if (rp->p_flags & SENDING) {
48 printf("S:%-5.5s", proc_name(rp->p_sendto));
49 } else
50 if (rp->p_flags == 0) {
51 printf(" ");
52 }
53 printf("%s\n", rp->p_name);
54 }
55 if (rp == END_PROC_ADDR) rp = BEG_PROC_ADDR; else printf("--more--\r");
56 oldrp = rp;
57 }
58 #endif /* (CHIP == INTEL) */
59
60 /*===========================================================================*
61 * p_dmp *
62 *===========================================================================*/
63 #if (MACHINE == SUN)
64 PUBLIC void p_dmp()
65 {
66 /* Proc table dump */
67
68 register struct proc *rp;
69 int index;
70
71 printf(
72 "\ncommand pid pc sp flag user sys recv send\n");
73
74 for (rp = BEG_PROC_ADDR; rp < END_PROC_ADDR; rp++) {
75 if (rp->p_flags & P_SLOT_FREE) continue;
76 printf("%-7.7s", rp->p_name);
77 printf("%4d %8X %8X %6X %4D %6D ",
78 rp->p_pid, (long)rp->p_reg.pc,
79 (long)rp->p_reg.sp,
80 rp->p_flags, rp->user_time, rp->sys_time);
81 printf("%-7.7s", rp->p_flags & RECEIVING ? proc_name(rp->p_getfrom) :
82 "");
83 if (rp->p_flags & SENDING) {
84 printf("S: ");
85 printf("%-7.7s", proc_name(rp->p_sendto));
86 }
87 printf("\n");
88 }
89 printf("\nproc callq sendlk mesbuf from to nready pend blkd held alarm\n");
90 for (rp = &proc[0]; rp < &proc[NR_PROCS+NR_TASKS]; rp++) {
91 if (rp->p_flags & P_SLOT_FREE) continue;
92 printf("%-7.7s", rp->p_name);
93 printf(" %8X %8X %8X %4d %4d %8X %4d %4d %4d %X\n",
94 rp->p_callerq,
95 rp->p_sendlink,
96 rp->p_messbuf,
97 rp->p_getfrom,
98 rp->p_sendto,
99 rp->p_nextready,
100 rp->p_pending,
101 rp->p_int_blocked,
102 rp->p_int_held,
103 rp->p_alarm
104 );
105 }
106 for (index = 0; index < NQ; index++) {
107 printf("q=%d: ", index);
108 for (rp = rdy_head[index]; rp != NIL_PROC; rp = rp->p_nextready)
109 printf(" %d", (int)(rp-proc));
110 printf("\n");
111 }
112 printf("held_head = 0x%X\n", held_head);
113 printf("\n");
114 }
115 #endif /* MACHINE == SUN */
116
117 /*===========================================================================*
118 * map_dmp *
119 *===========================================================================*/
120 #if (SHADOWING == 0)
121 PUBLIC void map_dmp()
122 {
123 register struct proc *rp;
124 static struct proc *oldrp = cproc_addr(HARDWARE);
125 int n = 0;
126 phys_clicks size;
127
128 printf("\nPROC NAME- -----TEXT----- -----DATA----- ----STACK----- -SIZE-\n");
129 for (rp = oldrp; rp < END_PROC_ADDR; rp++) {
130 if (rp->p_flags & P_SLOT_FREE) continue;
131 if (++n > 20) break;
132 size = rp->p_map[T].mem_len +
133 #if (MACHINE == SUN)
134 rp->p_map[D].mem_len + rp->p_map[S].mem_len;
135 #else
136 ((rp->p_map[S].mem_phys + rp->p_map[S].mem_len)
137 - rp->p_map[D].mem_phys);
138 #endif
139 printf("%3d %-6.6s %4x %4x %4x %4x %4x %4x %4x %4x %4x %5uK\n",
140 proc_number(rp),
141 rp->p_name,
142 rp->p_map[T].mem_vir, rp->p_map[T].mem_phys, rp->p_map[T].mem_len,
143 rp->p_map[D].mem_vir, rp->p_map[D].mem_phys, rp->p_map[D].mem_len,
144 rp->p_map[S].mem_vir, rp->p_map[S].mem_phys, rp->p_map[S].mem_len,
145 click_to_round_k(size));
146 }
147 if (rp == END_PROC_ADDR) rp = cproc_addr(HARDWARE); else printf("--more--\r");
148 oldrp = rp;
149 }
150
151 #else
152
153 PUBLIC void map_dmp()
154 {
155 register struct proc *rp;
156 static struct proc *oldrp = cproc_addr(HARDWARE);
157 int n = 0;
158 vir_clicks base, limit;
159
160 printf("\nPROC NAME- --TEXT--- --DATA--- --STACK-- SHADOW FLIP P BASE SIZE\n");
161 for (rp = oldrp; rp < END_PROC_ADDR; rp++) {
162 if (rp->p_flags & P_SLOT_FREE) continue;
163 if (++n > 20) break;
164 base = rp->p_map[T].mem_phys;
165 limit = rp->p_map[S].mem_phys + rp->p_map[S].mem_len;
166 printf("%3d %-6.6s %4x %4x %4x %4x %4x %4x %4x %4d %d %4uK\n",
167 proc_number(rp),
168 rp->p_name,
169 rp->p_map[T].mem_phys, rp->p_map[T].mem_len,
170 rp->p_map[D].mem_phys, rp->p_map[D].mem_len,
171 rp->p_map[S].mem_phys, rp->p_map[S].mem_len,
172 rp->p_shadow, rp->p_nflips, rp->p_physio,
173 click_to_round_k(base), click_to_round_k(limit));
174 }
175 if (rp == END_PROC_ADDR) rp = cproc_addr(HARDWARE); else printf("--more--\r");
176 oldrp = rp;
177 }
178
179 #endif
180
181 #if (CHIP == M68000)
182 FORWARD _PROTOTYPE(void mem_dmp, (char *adr, int len));
183
184 /*===========================================================================*
185 * p_dmp *
186 *===========================================================================*/
187 PUBLIC void p_dmp()
188 {
189 /* Proc table dump */
190
191 register struct proc *rp;
192 static struct proc *oldrp = BEG_PROC_ADDR;
193 int n = 0;
194 vir_clicks base, limit;
195
196 printf(
197 "\nproc pid pc sp splow flag user sys recv command\n");
198
199 for (rp = oldrp; rp < END_PROC_ADDR; rp++) {
200 if (rp->p_flags & P_SLOT_FREE) continue;
201 if (++n > 20) break;
202 base = rp->p_map[T].mem_phys;
203 limit = rp->p_map[S].mem_phys + rp->p_map[S].mem_len;
204 printf("%4u %4u %6lx %6lx %6lx %4x %5U %6U ",
205 proc_number(rp),
206 rp->p_pid,
207 (unsigned long) rp->p_reg.pc,
208 (unsigned long) rp->p_reg.sp,
209 (unsigned long) rp->p_splow,
210 rp->p_flags,
211 rp->user_time, rp->sys_time);
212 if (rp->p_flags & RECEIVING) {
213 printf("%-7.7s", proc_name(rp->p_getfrom));
214 } else
215 if (rp->p_flags & SENDING) {
216 printf("S:%-5.5s", proc_name(rp->p_sendto));
217 } else
218 if (rp->p_flags == 0) {
219 printf(" ");
220 }
221 printf("%s\n", rp->p_name);
222 }
223 if (rp == END_PROC_ADDR) rp = BEG_PROC_ADDR; else printf("--more--\r");
224 oldrp = rp;
225 }
226
227
228 /*===========================================================================*
229 * reg_dmp *
230 *===========================================================================*/
231 PUBLIC void reg_dmp(rp)
232 struct proc *rp;
233 {
234 register int i;
235 static char *regs[NR_REGS] = {
236 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
237 "a0", "a1", "a2", "a3", "a4", "a5", "a6"
238 };
239 reg_t *regptr = (reg_t *) & rp->p_reg;
240
241 printf("reg = %08lx, ", rp);
242 printf("ksp = %08lx\n", (long) &rp + sizeof(rp));
243 printf(" pc = %08lx, ", rp->p_reg.pc);
244 printf(" sr = %04x, ", rp->p_reg.psw);
245 printf("trp = %2x\n", rp->p_trap);
246 for (i = 0; i < NR_REGS; i++)
247 printf("%3s = %08lx%s",regs[i], *regptr++, (i&3) == 3 ? "\n" : ", ");
248 printf(" a7 = %08lx\n", rp->p_reg.sp);
249 #if (SHADOWING == 1)
250 mem_dmp((char *) (((long) rp->p_reg.pc & ~31L) - 96), 128);
251 mem_dmp((char *) (((long) rp->p_reg.sp & ~31L) - 32), 256);
252 #else
253 mem_dmp((char *) (((long) rp->p_reg.pc & ~31L) - 96 +
254 ((long)rp->p_map[T].mem_phys<<CLICK_SHIFT)), 128);
255 mem_dmp((char *) (((long) rp->p_reg.sp & ~31L) - 32 +
256 ((long)rp->p_map[S].mem_phys<<CLICK_SHIFT)), 256);
257 #endif
258 }
259
260
261 /*===========================================================================*
262 * mem_dmp *
263 *===========================================================================*/
264 PRIVATE void mem_dmp(adr, len)
265 char *adr;
266 int len;
267 {
268 register i;
269 register long *p;
270
271 for (i = 0, p = (long *) adr; i < len; i += 4) {
272 #if (CHIP == M68000)
273 if ((i & 31) == 0) printf("\n%lX:", p);
274 printf(" %8lX", *p++);
275 #else
276 if ((i & 31) == 0) printf("\n%X:", p);
277 printf(" %8X", *p++);
278 #endif /* (CHIP == M68000) */
279 }
280 printf("\n");
281 }
282
283 #endif /* (CHIP == M68000) */
284
285
286 /*===========================================================================*
287 * proc_name *
288 *===========================================================================*/
289 PRIVATE char *proc_name(proc_nr)
290 int proc_nr;
291 {
292 if (proc_nr == ANY) return "ANY";
293 return proc_addr(proc_nr)->p_name;
294 }
295
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.