Blame


1 84114f06 2004-04-19 devnull /*
2 84114f06 2004-04-19 devnull *
3 84114f06 2004-04-19 devnull * debugger
4 84114f06 2004-04-19 devnull *
5 84114f06 2004-04-19 devnull */
6 84114f06 2004-04-19 devnull #include "defs.h"
7 84114f06 2004-04-19 devnull #include "fns.h"
8 a0f1e21f 2004-04-20 devnull
9 a0f1e21f 2004-04-20 devnull #define ptrace dbptrace
10 84114f06 2004-04-19 devnull
11 84114f06 2004-04-19 devnull extern int infile;
12 84114f06 2004-04-19 devnull extern int outfile;
13 84114f06 2004-04-19 devnull extern int maxpos;
14 84114f06 2004-04-19 devnull
15 84114f06 2004-04-19 devnull /* general printing routines ($) */
16 84114f06 2004-04-19 devnull
17 84114f06 2004-04-19 devnull char *Ipath = INCDIR;
18 84114f06 2004-04-19 devnull static int tracetype;
19 84114f06 2004-04-19 devnull static void printfp(Map*, int);
20 84114f06 2004-04-19 devnull
21 84114f06 2004-04-19 devnull /*
22 84114f06 2004-04-19 devnull * callback on stack trace
23 84114f06 2004-04-19 devnull */
24 84114f06 2004-04-19 devnull static int
25 443d6288 2012-02-19 rsc ptrace(Map *map, Regs *regs, u64int pc, u64int nextpc, Symbol *sym, int depth)
26 84114f06 2004-04-19 devnull {
27 84114f06 2004-04-19 devnull char buf[512];
28 84114f06 2004-04-19 devnull
29 84114f06 2004-04-19 devnull USED(map);
30 84114f06 2004-04-19 devnull if(sym){
31 84114f06 2004-04-19 devnull dprint("%s(", sym->name);
32 84114f06 2004-04-19 devnull printparams(sym, regs);
33 84114f06 2004-04-19 devnull dprint(") ");
34 84114f06 2004-04-19 devnull }else
35 84114f06 2004-04-19 devnull dprint("%#lux ", pc);
36 84114f06 2004-04-19 devnull printsource(pc);
37 84114f06 2004-04-19 devnull
38 84114f06 2004-04-19 devnull dprint(" called from ");
39 84114f06 2004-04-19 devnull symoff(buf, 512, nextpc, CTEXT);
40 84114f06 2004-04-19 devnull dprint("%s ", buf);
41 84114f06 2004-04-19 devnull /* printsource(nextpc); */
42 84114f06 2004-04-19 devnull dprint("\n");
43 84114f06 2004-04-19 devnull if(tracetype == 'C' && sym)
44 84114f06 2004-04-19 devnull printlocals(sym, regs);
45 84114f06 2004-04-19 devnull return depth<40;
46 84114f06 2004-04-19 devnull }
47 84114f06 2004-04-19 devnull
48 84114f06 2004-04-19 devnull static ulong *adrregvals;
49 84114f06 2004-04-19 devnull
50 84114f06 2004-04-19 devnull static int
51 443d6288 2012-02-19 rsc adrrw(Regs *regs, char *name, u64int *val, int isr)
52 84114f06 2004-04-19 devnull {
53 84114f06 2004-04-19 devnull int i;
54 84114f06 2004-04-19 devnull
55 84114f06 2004-04-19 devnull if((i = windindex(name)) == -1)
56 84114f06 2004-04-19 devnull return correg->rw(correg, name, val, isr);
57 84114f06 2004-04-19 devnull if(isr){
58 84114f06 2004-04-19 devnull *val = adrregvals[i];
59 84114f06 2004-04-19 devnull return 0;
60 84114f06 2004-04-19 devnull }
61 84114f06 2004-04-19 devnull werrstr("saved registers are immutable");
62 84114f06 2004-04-19 devnull return -1;
63 84114f06 2004-04-19 devnull }
64 84114f06 2004-04-19 devnull
65 84114f06 2004-04-19 devnull Regs*
66 84114f06 2004-04-19 devnull adrregs(void)
67 84114f06 2004-04-19 devnull {
68 84114f06 2004-04-19 devnull int i;
69 84114f06 2004-04-19 devnull static Regs r;
70 84114f06 2004-04-19 devnull static u32int x;
71 84114f06 2004-04-19 devnull
72 84114f06 2004-04-19 devnull if(adrregvals== nil){
73 84114f06 2004-04-19 devnull adrregvals = malloc(mach->nwindreg*sizeof(adrregvals[0]));
74 84114f06 2004-04-19 devnull if(adrregvals == nil)
75 84114f06 2004-04-19 devnull error("%r");
76 84114f06 2004-04-19 devnull }
77 84114f06 2004-04-19 devnull for(i=0; i<mach->nwindreg; i++){
78 84114f06 2004-04-19 devnull if(get4(cormap, adrval+4*i, &x) < 0)
79 84114f06 2004-04-19 devnull error("%r");
80 84114f06 2004-04-19 devnull adrregvals[i] = x;
81 84114f06 2004-04-19 devnull }
82 84114f06 2004-04-19 devnull r.rw = adrrw;
83 84114f06 2004-04-19 devnull return &r;
84 84114f06 2004-04-19 devnull }
85 84114f06 2004-04-19 devnull
86 84114f06 2004-04-19 devnull void
87 84114f06 2004-04-19 devnull printdollar(int modif)
88 84114f06 2004-04-19 devnull {
89 84114f06 2004-04-19 devnull int i;
90 84114f06 2004-04-19 devnull u32int u4;
91 84114f06 2004-04-19 devnull BKPT *bk;
92 84114f06 2004-04-19 devnull Symbol s;
93 84114f06 2004-04-19 devnull int stack;
94 84114f06 2004-04-19 devnull char *fname;
95 84114f06 2004-04-19 devnull char buf[512];
96 84114f06 2004-04-19 devnull Regs *r;
97 84114f06 2004-04-19 devnull
98 84114f06 2004-04-19 devnull if (cntflg==0)
99 84114f06 2004-04-19 devnull cntval = -1;
100 84114f06 2004-04-19 devnull switch (modif) {
101 84114f06 2004-04-19 devnull
102 84114f06 2004-04-19 devnull case '<':
103 84114f06 2004-04-19 devnull if (cntval == 0) {
104 84114f06 2004-04-19 devnull while (readchar() != EOR)
105 84114f06 2004-04-19 devnull ;
106 84114f06 2004-04-19 devnull reread();
107 84114f06 2004-04-19 devnull break;
108 84114f06 2004-04-19 devnull }
109 84114f06 2004-04-19 devnull if (rdc() == '<')
110 84114f06 2004-04-19 devnull stack = 1;
111 84114f06 2004-04-19 devnull else {
112 84114f06 2004-04-19 devnull stack = 0;
113 84114f06 2004-04-19 devnull reread();
114 84114f06 2004-04-19 devnull }
115 84114f06 2004-04-19 devnull fname = getfname();
116 84114f06 2004-04-19 devnull redirin(stack, fname);
117 84114f06 2004-04-19 devnull break;
118 84114f06 2004-04-19 devnull
119 84114f06 2004-04-19 devnull case '>':
120 84114f06 2004-04-19 devnull fname = getfname();
121 84114f06 2004-04-19 devnull redirout(fname);
122 84114f06 2004-04-19 devnull break;
123 84114f06 2004-04-19 devnull
124 84114f06 2004-04-19 devnull case 'a':
125 84114f06 2004-04-19 devnull attachprocess();
126 84114f06 2004-04-19 devnull break;
127 84114f06 2004-04-19 devnull
128 b030a6c3 2005-01-23 devnull /* maybe use this for lwpids?
129 b030a6c3 2005-01-23 devnull case 'A':
130 b030a6c3 2005-01-23 devnull attachpthread();
131 b030a6c3 2005-01-23 devnull break;
132 b030a6c3 2005-01-23 devnull */
133 84114f06 2004-04-19 devnull case 'k':
134 84114f06 2004-04-19 devnull kmsys();
135 84114f06 2004-04-19 devnull break;
136 84114f06 2004-04-19 devnull
137 84114f06 2004-04-19 devnull case 'q':
138 84114f06 2004-04-19 devnull case 'Q':
139 84114f06 2004-04-19 devnull done();
140 84114f06 2004-04-19 devnull
141 84114f06 2004-04-19 devnull case 'w':
142 84114f06 2004-04-19 devnull maxpos=(adrflg?adrval:MAXPOS);
143 84114f06 2004-04-19 devnull break;
144 84114f06 2004-04-19 devnull
145 84114f06 2004-04-19 devnull case 'S':
146 84114f06 2004-04-19 devnull printsym();
147 84114f06 2004-04-19 devnull break;
148 84114f06 2004-04-19 devnull
149 84114f06 2004-04-19 devnull case 's':
150 84114f06 2004-04-19 devnull maxoff=(adrflg?adrval:MAXOFF);
151 84114f06 2004-04-19 devnull break;
152 84114f06 2004-04-19 devnull
153 84114f06 2004-04-19 devnull case 'm':
154 84114f06 2004-04-19 devnull printmap("? map", symmap);
155 84114f06 2004-04-19 devnull printmap("/ map", cormap);
156 84114f06 2004-04-19 devnull break;
157 84114f06 2004-04-19 devnull
158 84114f06 2004-04-19 devnull case 0:
159 84114f06 2004-04-19 devnull case '?':
160 84114f06 2004-04-19 devnull if (pid)
161 84114f06 2004-04-19 devnull dprint("pid = %d\n",pid);
162 84114f06 2004-04-19 devnull else
163 84114f06 2004-04-19 devnull prints("no process\n");
164 84114f06 2004-04-19 devnull flushbuf();
165 84114f06 2004-04-19 devnull
166 84114f06 2004-04-19 devnull case 'r':
167 84114f06 2004-04-19 devnull case 'R':
168 84114f06 2004-04-19 devnull printregs(modif);
169 84114f06 2004-04-19 devnull return;
170 84114f06 2004-04-19 devnull
171 84114f06 2004-04-19 devnull case 'f':
172 84114f06 2004-04-19 devnull case 'F':
173 84114f06 2004-04-19 devnull printfp(cormap, modif);
174 84114f06 2004-04-19 devnull return;
175 84114f06 2004-04-19 devnull
176 84114f06 2004-04-19 devnull case 'c':
177 84114f06 2004-04-19 devnull case 'C':
178 84114f06 2004-04-19 devnull tracetype = modif;
179 84114f06 2004-04-19 devnull if (adrflg)
180 84114f06 2004-04-19 devnull r = adrregs();
181 84114f06 2004-04-19 devnull else
182 84114f06 2004-04-19 devnull r = correg;
183 84114f06 2004-04-19 devnull if(stacktrace(cormap, correg, ptrace) <= 0)
184 84114f06 2004-04-19 devnull error("no stack frame");
185 84114f06 2004-04-19 devnull break;
186 84114f06 2004-04-19 devnull
187 84114f06 2004-04-19 devnull /*print externals*/
188 84114f06 2004-04-19 devnull case 'e':
189 84114f06 2004-04-19 devnull for (i = 0; indexsym(i, &s)>=0; i++) {
190 84114f06 2004-04-19 devnull if (s.class==CDATA)
191 84114f06 2004-04-19 devnull if (s.loc.type==LADDR)
192 84114f06 2004-04-19 devnull if (get4(cormap, s.loc.addr, &u4) > 0)
193 84114f06 2004-04-19 devnull dprint("%s/%12t%#lux\n", s.name, (ulong)u4);
194 84114f06 2004-04-19 devnull }
195 84114f06 2004-04-19 devnull break;
196 84114f06 2004-04-19 devnull
197 84114f06 2004-04-19 devnull /*print breakpoints*/
198 84114f06 2004-04-19 devnull case 'b':
199 84114f06 2004-04-19 devnull case 'B':
200 84114f06 2004-04-19 devnull for (bk=bkpthead; bk; bk=bk->nxtbkpt)
201 84114f06 2004-04-19 devnull if (bk->flag) {
202 84114f06 2004-04-19 devnull symoff(buf, 512, (WORD)bk->loc, CTEXT);
203 84114f06 2004-04-19 devnull dprint(buf);
204 84114f06 2004-04-19 devnull if (bk->count != 1)
205 84114f06 2004-04-19 devnull dprint(",%d", bk->count);
206 84114f06 2004-04-19 devnull dprint(":%c %s", bk->flag == BKPTTMP ? 'B' : 'b', bk->comm);
207 84114f06 2004-04-19 devnull }
208 84114f06 2004-04-19 devnull break;
209 84114f06 2004-04-19 devnull
210 84114f06 2004-04-19 devnull case 'M':
211 84114f06 2004-04-19 devnull fname = getfname();
212 84114f06 2004-04-19 devnull if (machbyname(fname) == 0)
213 84114f06 2004-04-19 devnull dprint("unknown name\n");;
214 84114f06 2004-04-19 devnull break;
215 84114f06 2004-04-19 devnull default:
216 84114f06 2004-04-19 devnull error("bad `$' command");
217 84114f06 2004-04-19 devnull }
218 443d6288 2012-02-19 rsc USED(r);
219 84114f06 2004-04-19 devnull
220 84114f06 2004-04-19 devnull }
221 84114f06 2004-04-19 devnull
222 84114f06 2004-04-19 devnull char *
223 84114f06 2004-04-19 devnull getfname(void)
224 84114f06 2004-04-19 devnull {
225 84114f06 2004-04-19 devnull static char fname[ARB];
226 84114f06 2004-04-19 devnull char *p;
227 84114f06 2004-04-19 devnull
228 84114f06 2004-04-19 devnull if (rdc() == EOR) {
229 84114f06 2004-04-19 devnull reread();
230 84114f06 2004-04-19 devnull return (0);
231 84114f06 2004-04-19 devnull }
232 84114f06 2004-04-19 devnull p = fname;
233 84114f06 2004-04-19 devnull do {
234 84114f06 2004-04-19 devnull *p++ = lastc;
235 84114f06 2004-04-19 devnull if (p >= &fname[ARB-1])
236 84114f06 2004-04-19 devnull error("filename too long");
237 84114f06 2004-04-19 devnull } while (rdc() != EOR);
238 84114f06 2004-04-19 devnull *p = 0;
239 84114f06 2004-04-19 devnull reread();
240 84114f06 2004-04-19 devnull return (fname);
241 84114f06 2004-04-19 devnull }
242 84114f06 2004-04-19 devnull
243 84114f06 2004-04-19 devnull static void
244 84114f06 2004-04-19 devnull printfp(Map *map, int modif)
245 84114f06 2004-04-19 devnull {
246 84114f06 2004-04-19 devnull Regdesc *rp;
247 84114f06 2004-04-19 devnull int i;
248 84114f06 2004-04-19 devnull int ret;
249 84114f06 2004-04-19 devnull char buf[512];
250 84114f06 2004-04-19 devnull
251 84114f06 2004-04-19 devnull for (i = 0, rp = mach->reglist; rp->name; rp += ret) {
252 84114f06 2004-04-19 devnull ret = 1;
253 84114f06 2004-04-19 devnull if (!(rp->flags&RFLT))
254 84114f06 2004-04-19 devnull continue;
255 84114f06 2004-04-19 devnull ret = fpformat(map, rp, buf, sizeof(buf), modif);
256 84114f06 2004-04-19 devnull if (ret < 0) {
257 84114f06 2004-04-19 devnull werrstr("Register %s: %r", rp->name);
258 84114f06 2004-04-19 devnull error("%r");
259 84114f06 2004-04-19 devnull }
260 84114f06 2004-04-19 devnull /* double column print */
261 84114f06 2004-04-19 devnull if (i&0x01)
262 84114f06 2004-04-19 devnull dprint("%40t%-8s%-12s\n", rp->name, buf);
263 84114f06 2004-04-19 devnull else
264 84114f06 2004-04-19 devnull dprint("\t%-8s%-12s", rp->name, buf);
265 84114f06 2004-04-19 devnull i++;
266 84114f06 2004-04-19 devnull }
267 84114f06 2004-04-19 devnull }
268 84114f06 2004-04-19 devnull
269 84114f06 2004-04-19 devnull void
270 84114f06 2004-04-19 devnull redirin(int stack, char *file)
271 84114f06 2004-04-19 devnull {
272 84114f06 2004-04-19 devnull char pfile[ARB];
273 84114f06 2004-04-19 devnull
274 84114f06 2004-04-19 devnull if (file == 0) {
275 84114f06 2004-04-19 devnull iclose(-1, 0);
276 84114f06 2004-04-19 devnull return;
277 84114f06 2004-04-19 devnull }
278 84114f06 2004-04-19 devnull iclose(stack, 0);
279 84114f06 2004-04-19 devnull if ((infile = open(file, 0)) < 0) {
280 84114f06 2004-04-19 devnull strcpy(pfile, Ipath);
281 84114f06 2004-04-19 devnull strcat(pfile, "/");
282 84114f06 2004-04-19 devnull strcat(pfile, file);
283 84114f06 2004-04-19 devnull if ((infile = open(pfile, 0)) < 0) {
284 84114f06 2004-04-19 devnull infile = STDIN;
285 84114f06 2004-04-19 devnull error("cannot open");
286 84114f06 2004-04-19 devnull }
287 84114f06 2004-04-19 devnull }
288 84114f06 2004-04-19 devnull }
289 84114f06 2004-04-19 devnull
290 84114f06 2004-04-19 devnull void
291 84114f06 2004-04-19 devnull printmap(char *s, Map *map)
292 84114f06 2004-04-19 devnull {
293 84114f06 2004-04-19 devnull int i;
294 84114f06 2004-04-19 devnull
295 84114f06 2004-04-19 devnull if (!map)
296 84114f06 2004-04-19 devnull return;
297 84114f06 2004-04-19 devnull if (map == symmap)
298 84114f06 2004-04-19 devnull dprint("%s%12t`%s'\n", s, symfil==nil ? "-" : symfil);
299 84114f06 2004-04-19 devnull else if (map == cormap)
300 84114f06 2004-04-19 devnull dprint("%s%12t`%s'\n", s, corfil==nil ? "-" : corfil);
301 84114f06 2004-04-19 devnull else
302 84114f06 2004-04-19 devnull dprint("%s\n", s);
303 84114f06 2004-04-19 devnull for (i = 0; i < map->nseg; i++) {
304 84114f06 2004-04-19 devnull dprint("%s%8t%-16#lux %-16#lux %-16#lux %s\n", map->seg[i].name,
305 84114f06 2004-04-19 devnull map->seg[i].base, map->seg[i].base+map->seg[i].size, map->seg[i].offset,
306 84114f06 2004-04-19 devnull map->seg[i].file ? map->seg[i].file : "");
307 84114f06 2004-04-19 devnull }
308 84114f06 2004-04-19 devnull }
309 84114f06 2004-04-19 devnull
310 84114f06 2004-04-19 devnull /*
311 84114f06 2004-04-19 devnull * dump the raw symbol table
312 84114f06 2004-04-19 devnull */
313 84114f06 2004-04-19 devnull void
314 84114f06 2004-04-19 devnull printsym(void)
315 84114f06 2004-04-19 devnull {
316 84114f06 2004-04-19 devnull int i;
317 84114f06 2004-04-19 devnull Symbol *sp, s;
318 84114f06 2004-04-19 devnull
319 84114f06 2004-04-19 devnull for (i=0; indexsym(i, &s)>=0; i++){
320 84114f06 2004-04-19 devnull sp = &s;
321 84114f06 2004-04-19 devnull switch(sp->type) {
322 84114f06 2004-04-19 devnull case 't':
323 84114f06 2004-04-19 devnull case 'l':
324 84114f06 2004-04-19 devnull dprint("%8#lux t %s\n", sp->loc.addr, sp->name);
325 84114f06 2004-04-19 devnull break;
326 84114f06 2004-04-19 devnull case 'T':
327 84114f06 2004-04-19 devnull case 'L':
328 84114f06 2004-04-19 devnull dprint("%8#lux T %s\n", sp->loc.addr, sp->name);
329 84114f06 2004-04-19 devnull break;
330 84114f06 2004-04-19 devnull case 'D':
331 84114f06 2004-04-19 devnull case 'd':
332 84114f06 2004-04-19 devnull case 'B':
333 84114f06 2004-04-19 devnull case 'b':
334 84114f06 2004-04-19 devnull case 'a':
335 84114f06 2004-04-19 devnull case 'p':
336 84114f06 2004-04-19 devnull case 'm':
337 84114f06 2004-04-19 devnull dprint("%8#lux %c %s\n", sp->loc.addr, sp->type, sp->name);
338 84114f06 2004-04-19 devnull break;
339 84114f06 2004-04-19 devnull default:
340 84114f06 2004-04-19 devnull break;
341 84114f06 2004-04-19 devnull }
342 84114f06 2004-04-19 devnull }
343 84114f06 2004-04-19 devnull }
344 84114f06 2004-04-19 devnull
345 84114f06 2004-04-19 devnull #define STRINGSZ 128
346 84114f06 2004-04-19 devnull
347 84114f06 2004-04-19 devnull /*
348 84114f06 2004-04-19 devnull * print the value of dot as file:line
349 84114f06 2004-04-19 devnull */
350 84114f06 2004-04-19 devnull void
351 84114f06 2004-04-19 devnull printsource(long dot)
352 84114f06 2004-04-19 devnull {
353 84114f06 2004-04-19 devnull char str[STRINGSZ];
354 84114f06 2004-04-19 devnull
355 84114f06 2004-04-19 devnull if (fileline(dot, str, STRINGSZ) >= 0)
356 84114f06 2004-04-19 devnull dprint("%s", str);
357 84114f06 2004-04-19 devnull }
358 84114f06 2004-04-19 devnull
359 84114f06 2004-04-19 devnull void
360 84114f06 2004-04-19 devnull printpc(void)
361 84114f06 2004-04-19 devnull {
362 84114f06 2004-04-19 devnull char buf[512];
363 443d6288 2012-02-19 rsc u64int u;
364 84114f06 2004-04-19 devnull
365 84114f06 2004-04-19 devnull if(rget(correg, mach->pc, &u) < 0)
366 84114f06 2004-04-19 devnull error("%r");
367 84114f06 2004-04-19 devnull dot = u;
368 84114f06 2004-04-19 devnull if(dot){
369 84114f06 2004-04-19 devnull printsource((long)dot);
370 84114f06 2004-04-19 devnull printc(' ');
371 84114f06 2004-04-19 devnull symoff(buf, sizeof(buf), (long)dot, CTEXT);
372 84114f06 2004-04-19 devnull dprint("%s/", buf);
373 84114f06 2004-04-19 devnull if (mach->das(cormap, dot, 'i', buf, sizeof(buf)) < 0)
374 84114f06 2004-04-19 devnull error("%r");
375 84114f06 2004-04-19 devnull dprint("%16t%s\n", buf);
376 84114f06 2004-04-19 devnull }
377 84114f06 2004-04-19 devnull }
378 84114f06 2004-04-19 devnull
379 84114f06 2004-04-19 devnull void
380 84114f06 2004-04-19 devnull printlocals(Symbol *fn, Regs *regs)
381 84114f06 2004-04-19 devnull {
382 84114f06 2004-04-19 devnull int i;
383 84114f06 2004-04-19 devnull u32int v;
384 84114f06 2004-04-19 devnull Symbol s;
385 84114f06 2004-04-19 devnull
386 84114f06 2004-04-19 devnull for (i = 0; indexlsym(fn, i, &s)>=0; i++) {
387 84114f06 2004-04-19 devnull if (s.class != CAUTO)
388 84114f06 2004-04-19 devnull continue;
389 266f8e12 2005-01-07 devnull if(lget4(cormap, regs, s.loc, &v) >= 0)
390 84114f06 2004-04-19 devnull dprint("%8t%s.%s/%10t%#lux\n", fn->name, s.name, v);
391 84114f06 2004-04-19 devnull else
392 84114f06 2004-04-19 devnull dprint("%8t%s.%s/%10t?\n", fn->name, s.name);
393 84114f06 2004-04-19 devnull }
394 84114f06 2004-04-19 devnull }
395 84114f06 2004-04-19 devnull
396 84114f06 2004-04-19 devnull void
397 84114f06 2004-04-19 devnull printparams(Symbol *fn, Regs *regs)
398 84114f06 2004-04-19 devnull {
399 84114f06 2004-04-19 devnull int i;
400 84114f06 2004-04-19 devnull Symbol s;
401 84114f06 2004-04-19 devnull u32int v;
402 84114f06 2004-04-19 devnull int first = 0;
403 84114f06 2004-04-19 devnull
404 84114f06 2004-04-19 devnull for (i = 0; indexlsym(fn, i, &s)>=0; i++) {
405 84114f06 2004-04-19 devnull if (s.class != CPARAM)
406 84114f06 2004-04-19 devnull continue;
407 84114f06 2004-04-19 devnull if (first++)
408 84114f06 2004-04-19 devnull dprint(", ");
409 266f8e12 2005-01-07 devnull if(lget4(cormap, regs, s.loc, &v) >= 0)
410 84114f06 2004-04-19 devnull dprint("%s=%#lux", s.name, v);
411 84114f06 2004-04-19 devnull else
412 84114f06 2004-04-19 devnull dprint("%s=?", s.name);
413 84114f06 2004-04-19 devnull }
414 84114f06 2004-04-19 devnull }