Deleted Added
full compact
uwx_trace.h (115013) uwx_trace.h (117392)
1/*
2 * Copyright (c) 2002,2003 Hewlett-Packard Company
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 * DEALINGS IN THE SOFTWARE.
21 */
22
23#define UWX_TRACE_SB 1 /* UWX_TRACE=b: scoreboard mgmt */
24#define UWX_TRACE_UINFO 2 /* UWX_TRACE=i: unwind info */
25#define UWX_TRACE_RSTATE 4 /* UWX_TRACE=r: reg state vector */
26#define UWX_TRACE_STEP 8 /* UWX_TRACE=s: step */
27#define UWX_TRACE_UTABLE 16 /* UWX_TRACE=t: unwind tbl search */
28#define UWX_TRACE_CONTEXT 32 /* UWX_TRACE=c: context */
29#define UWX_TRACE_COPYIN 64 /* UWX_TRACE=C: copyin callback */
30#define UWX_TRACE_LOOKUPIP 128 /* UWX_TRACE=L: lookupip callback */
31
1/*
2 * Copyright (c) 2002,2003 Hewlett-Packard Company
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 * DEALINGS IN THE SOFTWARE.
21 */
22
23#define UWX_TRACE_SB 1 /* UWX_TRACE=b: scoreboard mgmt */
24#define UWX_TRACE_UINFO 2 /* UWX_TRACE=i: unwind info */
25#define UWX_TRACE_RSTATE 4 /* UWX_TRACE=r: reg state vector */
26#define UWX_TRACE_STEP 8 /* UWX_TRACE=s: step */
27#define UWX_TRACE_UTABLE 16 /* UWX_TRACE=t: unwind tbl search */
28#define UWX_TRACE_CONTEXT 32 /* UWX_TRACE=c: context */
29#define UWX_TRACE_COPYIN 64 /* UWX_TRACE=C: copyin callback */
30#define UWX_TRACE_LOOKUPIP 128 /* UWX_TRACE=L: lookupip callback */
31
32#ifdef DISABLE_TRACE
32#ifndef UWX_TRACE_ENABLE
33
34#define TRACE_INIT
35#define TRACE_B_REUSE(id)
36#define TRACE_B_ALLOC(id)
37#define TRACE_B_POP(id)
38#define TRACE_B_LABEL(label)
39#define TRACE_B_LABEL_COPY(id)
40#define TRACE_B_LABEL_REVERSE(back, new)
41#define TRACE_B_COPY(label, id)
42#define TRACE_B_COPY_FREE(id)
43#define TRACE_B_COPY_FOUND(id)
44#define TRACE_B_COPY_COPY(id)
45#define TRACE_B_COPY_REVERSE(back, new)
46#define TRACE_B_FREE(id)
47#define TRACE_I_DECODE_RHDR_1(name, b0)
48#define TRACE_I_DECODE_RHDR_1L(name, b0, val)
49#define TRACE_I_DECODE_RHDR_2L(name, b0, b1, val)
50#define TRACE_I_DECODE_PROLOGUE_1(name, b0)
51#define TRACE_I_DECODE_PROLOGUE_1L(name, b0, val)
52#define TRACE_I_DECODE_PROLOGUE_1LL(name, b0, val1, val2)
53#define TRACE_I_DECODE_PROLOGUE_2(name, b0, b1)
54#define TRACE_I_DECODE_PROLOGUE_2L(name, b0, b1, parm1)
55#define TRACE_I_DECODE_PROLOGUE_3(name, b0, b1, b2)
56#define TRACE_I_DECODE_PROLOGUE_4(name, b0, b1, b2, b3)
57#define TRACE_I_DECODE_PROLOGUE_SPILL_BASE(spill_base)
58#define TRACE_I_DECODE_PROLOGUE_MASKS(gr_mem_mask, gr_gr_mask)
59#define TRACE_I_DECODE_PROLOGUE_NSPILL(ngr)
60#define TRACE_I_DECODE_BODY_1(name, b0)
61#define TRACE_I_DECODE_BODY_1L(name, b0, parm1)
62#define TRACE_I_DECODE_BODY_1LL(name, b0, parm1, parm2)
63#define TRACE_R_UIB(uentry, ulen)
64#define TRACE_R_DUMP_SB(scoreboard, rhdr, cur_slot, ip_slot)
65#define TRACE_S_STEP(rstate)
66#define TRACE_S_RESTORE_REG(regname, rstate, val)
67#define TRACE_S_RESTORE_GR(regid, rstate, val)
68#define TRACE_S_RESTORE_BR(regid, rstate, val)
69#define TRACE_S_RESTORE_FR(regid, rstate, val)
70#define TRACE_T_SEARCH32(ip)
71#define TRACE_T_BINSEARCH32(lb, ub, mid, code_start, code_end)
72#define TRACE_C_GET_REG(regid, bsp)
73#define TRACE_C_ROTATE_GR(regid, sor, rrb_gr, newregid)
74#define TRACE_SELF_COPYIN4(rem, len, wp)
75#define TRACE_SELF_COPYIN8(rem, len, dp)
76#define TRACE_SELF_LOOKUP(ip)
77#define TRACE_SELF_LOOKUP_DESC(text_base, unwind_base)
78
33
34#define TRACE_INIT
35#define TRACE_B_REUSE(id)
36#define TRACE_B_ALLOC(id)
37#define TRACE_B_POP(id)
38#define TRACE_B_LABEL(label)
39#define TRACE_B_LABEL_COPY(id)
40#define TRACE_B_LABEL_REVERSE(back, new)
41#define TRACE_B_COPY(label, id)
42#define TRACE_B_COPY_FREE(id)
43#define TRACE_B_COPY_FOUND(id)
44#define TRACE_B_COPY_COPY(id)
45#define TRACE_B_COPY_REVERSE(back, new)
46#define TRACE_B_FREE(id)
47#define TRACE_I_DECODE_RHDR_1(name, b0)
48#define TRACE_I_DECODE_RHDR_1L(name, b0, val)
49#define TRACE_I_DECODE_RHDR_2L(name, b0, b1, val)
50#define TRACE_I_DECODE_PROLOGUE_1(name, b0)
51#define TRACE_I_DECODE_PROLOGUE_1L(name, b0, val)
52#define TRACE_I_DECODE_PROLOGUE_1LL(name, b0, val1, val2)
53#define TRACE_I_DECODE_PROLOGUE_2(name, b0, b1)
54#define TRACE_I_DECODE_PROLOGUE_2L(name, b0, b1, parm1)
55#define TRACE_I_DECODE_PROLOGUE_3(name, b0, b1, b2)
56#define TRACE_I_DECODE_PROLOGUE_4(name, b0, b1, b2, b3)
57#define TRACE_I_DECODE_PROLOGUE_SPILL_BASE(spill_base)
58#define TRACE_I_DECODE_PROLOGUE_MASKS(gr_mem_mask, gr_gr_mask)
59#define TRACE_I_DECODE_PROLOGUE_NSPILL(ngr)
60#define TRACE_I_DECODE_BODY_1(name, b0)
61#define TRACE_I_DECODE_BODY_1L(name, b0, parm1)
62#define TRACE_I_DECODE_BODY_1LL(name, b0, parm1, parm2)
63#define TRACE_R_UIB(uentry, ulen)
64#define TRACE_R_DUMP_SB(scoreboard, rhdr, cur_slot, ip_slot)
65#define TRACE_S_STEP(rstate)
66#define TRACE_S_RESTORE_REG(regname, rstate, val)
67#define TRACE_S_RESTORE_GR(regid, rstate, val)
68#define TRACE_S_RESTORE_BR(regid, rstate, val)
69#define TRACE_S_RESTORE_FR(regid, rstate, val)
70#define TRACE_T_SEARCH32(ip)
71#define TRACE_T_BINSEARCH32(lb, ub, mid, code_start, code_end)
72#define TRACE_C_GET_REG(regid, bsp)
73#define TRACE_C_ROTATE_GR(regid, sor, rrb_gr, newregid)
74#define TRACE_SELF_COPYIN4(rem, len, wp)
75#define TRACE_SELF_COPYIN8(rem, len, dp)
76#define TRACE_SELF_LOOKUP(ip)
77#define TRACE_SELF_LOOKUP_DESC(text_base, unwind_base)
78
79#else /* not TRACE_DISABLED */
79#else /* !UWX_TRACE_ENABLE */
80
81extern void uwx_trace_init(struct uwx_env *env);
82
83extern void uwx_dump_rstate(int regid, uint64_t rstate);
84
85struct uwx_rhdr;
86
87extern void uwx_dump_scoreboard(
88 struct uwx_scoreboard *scoreboard,
89 int nsbreg,
90 struct uwx_rhdr *rhdr,
91 int cur_slot,
92 int ip_slot);
93
94#define TRACE_INIT uwx_trace_init(env);
95
96#define TRACE_B_REUSE(id) \
97 if (env->trace & UWX_TRACE_SB) \
98 printf("uwx_alloc_scoreboard: reuse id %d\n", (id));
99
100#define TRACE_B_ALLOC(id) \
101 if (env->trace & UWX_TRACE_SB) \
102 printf("uwx_alloc_scoreboard: alloc id %d\n", (id));
103
104#define TRACE_B_POP(id) \
105 if (env->trace & UWX_TRACE_SB) \
106 printf("uwx_pop_scoreboards: free id %d\n", (id));
107
108#define TRACE_B_LABEL(label) \
109 if (env->trace & UWX_TRACE_SB) \
110 printf("uwx_label_scoreboard: label %d\n", (label));
111
112#define TRACE_B_LABEL_COPY(id) \
113 if (env->trace & UWX_TRACE_SB) \
114 printf("uwx_label_scoreboard: copy id %d\n", (id));
115
116#define TRACE_B_LABEL_REVERSE(back, new) \
117 if (env->trace & UWX_TRACE_SB) \
118 printf("uwx_label_scoreboard: reverse link %d -> %d\n", \
119 (new)->id, ((back) == 0) ? -1 : (back)->id);
120
121#define TRACE_B_COPY(label, id) \
122 if (env->trace & UWX_TRACE_SB) \
123 printf("uwx_copy_scoreboard: label %d, cur sb id %d\n", (label), (id));
124
125#define TRACE_B_COPY_FREE(id) \
126 if (env->trace & UWX_TRACE_SB) \
127 printf("uwx_copy_scoreboard: free id %d\n", (id));
128
129#define TRACE_B_COPY_FOUND(id) \
130 if (env->trace & UWX_TRACE_SB) \
131 printf("uwx_copy_scoreboard: found id %d\n", (id));
132
133#define TRACE_B_COPY_COPY(id) \
134 if (env->trace & UWX_TRACE_SB) \
135 printf("uwx_copy_scoreboard: copy id %d\n", (id));
136
137#define TRACE_B_COPY_REVERSE(back, new) \
138 if (env->trace & UWX_TRACE_SB) \
139 printf("uwx_copy_scoreboard: reverse link %d -> %d\n", \
140 (new)->id, ((back) == 0) ? -1 : (back)->id);
141
142#define TRACE_B_FREE(id) \
143 if (env->trace & UWX_TRACE_SB) \
144 printf("uwx_free_scoreboards: free id %d\n", (id));
145
146#define TRACE_I_DECODE_RHDR_1(name, b0) \
147 if (env->trace & UWX_TRACE_UINFO) \
148 printf("uwx_decode_rhdr: %02x %s\n", \
149 (b0), (name));
150
151#define TRACE_I_DECODE_RHDR_1L(name, b0, val) \
152 if (env->trace & UWX_TRACE_UINFO) \
153 printf("uwx_decode_rhdr: %02x %08x %s\n", \
154 (b0), (int)(val), (name));
155
156#define TRACE_I_DECODE_RHDR_2L(name, b0, b1, val) \
157 if (env->trace & UWX_TRACE_UINFO) \
158 printf("uwx_decode_rhdr: %02x %02x %08x %s\n", \
159 (b0), (b1), (int)(val), (name));
160
161#define TRACE_I_DECODE_PROLOGUE_1(name, b0) \
162 if (env->trace & UWX_TRACE_UINFO) \
163 printf("uwx_decode_prologue: %02x %s\n", \
164 (b0), (name));
165
166#define TRACE_I_DECODE_PROLOGUE_1L(name, b0, val) \
167 if (env->trace & UWX_TRACE_UINFO) \
168 printf("uwx_decode_prologue: %02x %08x %s\n", \
169 (b0), (int)(val), (name));
170
171#define TRACE_I_DECODE_PROLOGUE_1LL(name, b0, val1, val2) \
172 if (env->trace & UWX_TRACE_UINFO) \
173 printf("uwx_decode_prologue: %02x %08x %08x %s\n", \
174 (b0), (int)(val1), (int)(val2), (name));
175
176#define TRACE_I_DECODE_PROLOGUE_2(name, b0, b1) \
177 if (env->trace & UWX_TRACE_UINFO) \
178 printf("uwx_decode_prologue: %02x %02x %s\n", \
179 (b0), (b1), (name));
180
181#define TRACE_I_DECODE_PROLOGUE_2L(name, b0, b1, val) \
182 if (env->trace & UWX_TRACE_UINFO) \
183 printf("uwx_decode_prologue: %02x %02x %08x %s\n", \
184 (b0), (b1), (int)(val), (name));
185
186#define TRACE_I_DECODE_PROLOGUE_3(name, b0, b1, b2) \
187 if (env->trace & UWX_TRACE_UINFO) \
188 printf("uwx_decode_prologue: %02x %02x %02x %s\n", \
189 (b0), (b1), (b2), (name));
190
191#define TRACE_I_DECODE_PROLOGUE_4(name, b0, b1, b2, b3) \
192 if (env->trace & UWX_TRACE_UINFO) \
193 printf("uwx_decode_prologue: %02x %02x %02x %02x %s\n", \
194 (b0), (b1), (b2), (b3), (name));
195
196#define TRACE_I_DECODE_PROLOGUE_SPILL_BASE(spill_base) \
197 if (env->trace & UWX_TRACE_UINFO) \
198 printf("uwx_decode_prologue: spill base = %08x\n", (int)(spill_base));
199
200#define TRACE_I_DECODE_PROLOGUE_MASKS(gr_mem_mask, gr_gr_mask) \
201 if (env->trace & UWX_TRACE_UINFO) \
202 printf("uwx_decode_prologue: gr_mem_mask = %02x; gr_gr_mask = %02x\n", \
203 (gr_mem_mask), (gr_gr_mask));
204
205#define TRACE_I_DECODE_PROLOGUE_NSPILL(ngr) \
206 if (env->trace & UWX_TRACE_UINFO) \
207 printf("uwx_decode_prologue: ngr = %d\n", (ngr));
208
209#define TRACE_I_DECODE_BODY_1(name, b0) \
210 if (env->trace & UWX_TRACE_UINFO) \
211 printf("uwx_decode_body: %02x %s\n", \
212 (b0), (name));
213
214#define TRACE_I_DECODE_BODY_1L(name, b0, val) \
215 if (env->trace & UWX_TRACE_UINFO) \
216 printf("uwx_decode_body: %02x %08x %s\n", \
217 (b0), (int)(val), (name));
218
219#define TRACE_I_DECODE_BODY_1LL(name, b0, val1, val2) \
220 if (env->trace & UWX_TRACE_UINFO) \
221 printf("uwx_decode_body: %02x %08x %08x %s\n", \
222 (b0), (int)(val1), (int)(val2), (name));
223
224#define TRACE_R_UIB(uentry, ulen) \
225 if (env->trace & UWX_TRACE_RSTATE) \
226 printf("Unwind info block (flags = %08x %08x, ulen = %d)\n", \
227 (unsigned int)((uentry)->unwind_flags >> 32), \
228 (unsigned int)(uentry)->unwind_flags, \
229 (ulen));
230
231#define TRACE_R_DUMP_SB(scoreboard, rhdr, cur_slot, ip_slot) \
232 if (env->trace & UWX_TRACE_RSTATE) \
233 uwx_dump_scoreboard(scoreboard, env->nsbreg, \
234 &(rhdr), cur_slot, ip_slot);
235
236#define TRACE_S_STEP(rstate) \
237 if (env->trace & UWX_TRACE_STEP) { \
238 printf("uwx_step:\n"); \
239 uwx_dump_rstate(SBREG_RP, (rstate)[SBREG_RP]); \
240 uwx_dump_rstate(SBREG_PSP, (rstate)[SBREG_PSP]); \
241 uwx_dump_rstate(SBREG_PFS, (rstate)[SBREG_PFS]); \
242 }
243
244#define TRACE_S_RESTORE_REG(regname, rstate, val) \
245 if (env->trace & UWX_TRACE_STEP) \
246 printf(" restore %-7s (rstate = %08x %08x) = %08x %08x\n", \
247 regname, \
248 (unsigned int) ((rstate) >> 32), \
249 (unsigned int) (rstate), \
250 (unsigned int) ((val) >> 32), \
251 (unsigned int) (val));
252
253#define TRACE_S_RESTORE_GR(regid, rstate, val) \
254 if (env->trace & UWX_TRACE_STEP) \
255 printf(" restore GR%d (rstate = %08x %08x) = %08x %08x\n", \
256 (regid) + 4, \
257 (unsigned int) ((rstate) >> 32), \
258 (unsigned int) (rstate), \
259 (unsigned int) ((val) >> 32), \
260 (unsigned int) (val));
261
262#define TRACE_S_RESTORE_BR(regid, rstate, val) \
263 if (env->trace & UWX_TRACE_STEP) \
264 printf(" restore BR%d (rstate = %08x %08x) = %08x %08x\n", \
265 (regid) + 1, \
266 (unsigned int) ((rstate) >> 32), \
267 (unsigned int) (rstate), \
268 (unsigned int) ((val) >> 32), \
269 (unsigned int) (val));
270
271#define TRACE_S_RESTORE_FR(regid, rstate, fval) \
272 if (env->trace & UWX_TRACE_STEP) \
273 printf(" restore FR%d (rstate = %08x %08x) = %08x %08x %08x %08x\n", \
274 (regid) + 1, \
275 (unsigned int) ((rstate) >> 32), \
276 (unsigned int) (rstate), \
277 (unsigned int) ((fval[0]) >> 32), \
278 (unsigned int) (fval[0]), \
279 (unsigned int) ((fval[1]) >> 32), \
280 (unsigned int) (fval[1]));
281
282#define TRACE_T_SEARCH32(ip) \
283 if (env->trace & UWX_TRACE_UTABLE) \
284 printf("uwx_search_utable32 (relative ip = %08x)\n", (ip));
285
286#define TRACE_T_BINSEARCH32(lb, ub, mid, code_start, code_end) \
287 if (env->trace & UWX_TRACE_UTABLE) \
288 printf(" lb/ub = %d/%d, mid = %d, start/end = %08x %08x\n", \
289 lb, ub, mid, code_start, code_end);
290
291#define TRACE_C_GET_REG(regid, bsp) \
292 if (env->trace & UWX_TRACE_CONTEXT) \
293 printf("uwx_get_reg (gr%d, bsp = %08x %08x)\n", \
294 (regid) - UWX_REG_GR(0), \
295 (unsigned int) ((bsp) >> 32), \
296 (unsigned int) (bsp));
297
298#define TRACE_C_ROTATE_GR(regid, sor, rrb_gr, newregid) \
299 if (env->trace & UWX_TRACE_CONTEXT) \
300 printf("uwx_get_reg (gr%d, sor = %d, rrb = %d) --> gr%d\n", \
301 (regid) + 32, \
302 (sor), \
303 (rrb_gr), \
304 (newregid) + 32);
305
306#define TRACE_SELF_COPYIN4(rem, len, wp) \
307 if (info->trace & UWX_TRACE_COPYIN) \
308 printf("copyin (rem = %08x %08x, len = %d, val = %08x)\n", \
309 (unsigned int) ((rem) >> 32), \
310 (unsigned int) (rem), \
311 (len), *(wp));
312
313#define TRACE_SELF_COPYIN8(rem, len, dp) \
314 if (info->trace & UWX_TRACE_COPYIN) \
315 printf("copyin (rem = %08x %08x, len = %d, val = %08x %08x)\n", \
316 (unsigned int) ((rem) >> 32), \
317 (unsigned int) (rem), \
318 (len), \
319 ((unsigned int *)(dp))[0], \
320 ((unsigned int *)(dp))[1]);
321
322#define TRACE_SELF_LOOKUP(ip) \
323 if (info->trace & UWX_TRACE_LOOKUPIP) \
324 printf("Lookup IP callback: ip = %08x %08x\n", \
325 (unsigned int) ((ip) >> 32), \
326 (unsigned int) (ip));
327
328#define TRACE_SELF_LOOKUP_DESC(text_base, unwind_base) \
329 if (info->trace & UWX_TRACE_LOOKUPIP) { \
330 printf(" text base: %08x %08x\n", \
331 (unsigned int) ((text_base) >> 32), \
332 (unsigned int) (text_base)); \
333 printf(" unwind base: %08x %08x\n", \
334 (unsigned int) ((uint64_t)(unwind_base) >> 32), \
335 (unsigned int) (unwind_base)); \
336 printf(" unwind flags: %08x %08x\n", \
337 (unsigned int) ((unwind_base)[0] >> 32), \
338 (unsigned int) (unwind_base)[0]); \
339 printf(" unwind start: %08x %08x\n", \
340 (unsigned int) (((text_base)+(unwind_base)[1]) >> 32), \
341 (unsigned int) ((text_base)+(unwind_base)[1])); \
342 printf(" unwind end: %08x %08x\n", \
343 (unsigned int) (((text_base)+(unwind_base)[2]) >> 32), \
344 (unsigned int) ((text_base)+(unwind_base)[2])); \
345 }
346
80
81extern void uwx_trace_init(struct uwx_env *env);
82
83extern void uwx_dump_rstate(int regid, uint64_t rstate);
84
85struct uwx_rhdr;
86
87extern void uwx_dump_scoreboard(
88 struct uwx_scoreboard *scoreboard,
89 int nsbreg,
90 struct uwx_rhdr *rhdr,
91 int cur_slot,
92 int ip_slot);
93
94#define TRACE_INIT uwx_trace_init(env);
95
96#define TRACE_B_REUSE(id) \
97 if (env->trace & UWX_TRACE_SB) \
98 printf("uwx_alloc_scoreboard: reuse id %d\n", (id));
99
100#define TRACE_B_ALLOC(id) \
101 if (env->trace & UWX_TRACE_SB) \
102 printf("uwx_alloc_scoreboard: alloc id %d\n", (id));
103
104#define TRACE_B_POP(id) \
105 if (env->trace & UWX_TRACE_SB) \
106 printf("uwx_pop_scoreboards: free id %d\n", (id));
107
108#define TRACE_B_LABEL(label) \
109 if (env->trace & UWX_TRACE_SB) \
110 printf("uwx_label_scoreboard: label %d\n", (label));
111
112#define TRACE_B_LABEL_COPY(id) \
113 if (env->trace & UWX_TRACE_SB) \
114 printf("uwx_label_scoreboard: copy id %d\n", (id));
115
116#define TRACE_B_LABEL_REVERSE(back, new) \
117 if (env->trace & UWX_TRACE_SB) \
118 printf("uwx_label_scoreboard: reverse link %d -> %d\n", \
119 (new)->id, ((back) == 0) ? -1 : (back)->id);
120
121#define TRACE_B_COPY(label, id) \
122 if (env->trace & UWX_TRACE_SB) \
123 printf("uwx_copy_scoreboard: label %d, cur sb id %d\n", (label), (id));
124
125#define TRACE_B_COPY_FREE(id) \
126 if (env->trace & UWX_TRACE_SB) \
127 printf("uwx_copy_scoreboard: free id %d\n", (id));
128
129#define TRACE_B_COPY_FOUND(id) \
130 if (env->trace & UWX_TRACE_SB) \
131 printf("uwx_copy_scoreboard: found id %d\n", (id));
132
133#define TRACE_B_COPY_COPY(id) \
134 if (env->trace & UWX_TRACE_SB) \
135 printf("uwx_copy_scoreboard: copy id %d\n", (id));
136
137#define TRACE_B_COPY_REVERSE(back, new) \
138 if (env->trace & UWX_TRACE_SB) \
139 printf("uwx_copy_scoreboard: reverse link %d -> %d\n", \
140 (new)->id, ((back) == 0) ? -1 : (back)->id);
141
142#define TRACE_B_FREE(id) \
143 if (env->trace & UWX_TRACE_SB) \
144 printf("uwx_free_scoreboards: free id %d\n", (id));
145
146#define TRACE_I_DECODE_RHDR_1(name, b0) \
147 if (env->trace & UWX_TRACE_UINFO) \
148 printf("uwx_decode_rhdr: %02x %s\n", \
149 (b0), (name));
150
151#define TRACE_I_DECODE_RHDR_1L(name, b0, val) \
152 if (env->trace & UWX_TRACE_UINFO) \
153 printf("uwx_decode_rhdr: %02x %08x %s\n", \
154 (b0), (int)(val), (name));
155
156#define TRACE_I_DECODE_RHDR_2L(name, b0, b1, val) \
157 if (env->trace & UWX_TRACE_UINFO) \
158 printf("uwx_decode_rhdr: %02x %02x %08x %s\n", \
159 (b0), (b1), (int)(val), (name));
160
161#define TRACE_I_DECODE_PROLOGUE_1(name, b0) \
162 if (env->trace & UWX_TRACE_UINFO) \
163 printf("uwx_decode_prologue: %02x %s\n", \
164 (b0), (name));
165
166#define TRACE_I_DECODE_PROLOGUE_1L(name, b0, val) \
167 if (env->trace & UWX_TRACE_UINFO) \
168 printf("uwx_decode_prologue: %02x %08x %s\n", \
169 (b0), (int)(val), (name));
170
171#define TRACE_I_DECODE_PROLOGUE_1LL(name, b0, val1, val2) \
172 if (env->trace & UWX_TRACE_UINFO) \
173 printf("uwx_decode_prologue: %02x %08x %08x %s\n", \
174 (b0), (int)(val1), (int)(val2), (name));
175
176#define TRACE_I_DECODE_PROLOGUE_2(name, b0, b1) \
177 if (env->trace & UWX_TRACE_UINFO) \
178 printf("uwx_decode_prologue: %02x %02x %s\n", \
179 (b0), (b1), (name));
180
181#define TRACE_I_DECODE_PROLOGUE_2L(name, b0, b1, val) \
182 if (env->trace & UWX_TRACE_UINFO) \
183 printf("uwx_decode_prologue: %02x %02x %08x %s\n", \
184 (b0), (b1), (int)(val), (name));
185
186#define TRACE_I_DECODE_PROLOGUE_3(name, b0, b1, b2) \
187 if (env->trace & UWX_TRACE_UINFO) \
188 printf("uwx_decode_prologue: %02x %02x %02x %s\n", \
189 (b0), (b1), (b2), (name));
190
191#define TRACE_I_DECODE_PROLOGUE_4(name, b0, b1, b2, b3) \
192 if (env->trace & UWX_TRACE_UINFO) \
193 printf("uwx_decode_prologue: %02x %02x %02x %02x %s\n", \
194 (b0), (b1), (b2), (b3), (name));
195
196#define TRACE_I_DECODE_PROLOGUE_SPILL_BASE(spill_base) \
197 if (env->trace & UWX_TRACE_UINFO) \
198 printf("uwx_decode_prologue: spill base = %08x\n", (int)(spill_base));
199
200#define TRACE_I_DECODE_PROLOGUE_MASKS(gr_mem_mask, gr_gr_mask) \
201 if (env->trace & UWX_TRACE_UINFO) \
202 printf("uwx_decode_prologue: gr_mem_mask = %02x; gr_gr_mask = %02x\n", \
203 (gr_mem_mask), (gr_gr_mask));
204
205#define TRACE_I_DECODE_PROLOGUE_NSPILL(ngr) \
206 if (env->trace & UWX_TRACE_UINFO) \
207 printf("uwx_decode_prologue: ngr = %d\n", (ngr));
208
209#define TRACE_I_DECODE_BODY_1(name, b0) \
210 if (env->trace & UWX_TRACE_UINFO) \
211 printf("uwx_decode_body: %02x %s\n", \
212 (b0), (name));
213
214#define TRACE_I_DECODE_BODY_1L(name, b0, val) \
215 if (env->trace & UWX_TRACE_UINFO) \
216 printf("uwx_decode_body: %02x %08x %s\n", \
217 (b0), (int)(val), (name));
218
219#define TRACE_I_DECODE_BODY_1LL(name, b0, val1, val2) \
220 if (env->trace & UWX_TRACE_UINFO) \
221 printf("uwx_decode_body: %02x %08x %08x %s\n", \
222 (b0), (int)(val1), (int)(val2), (name));
223
224#define TRACE_R_UIB(uentry, ulen) \
225 if (env->trace & UWX_TRACE_RSTATE) \
226 printf("Unwind info block (flags = %08x %08x, ulen = %d)\n", \
227 (unsigned int)((uentry)->unwind_flags >> 32), \
228 (unsigned int)(uentry)->unwind_flags, \
229 (ulen));
230
231#define TRACE_R_DUMP_SB(scoreboard, rhdr, cur_slot, ip_slot) \
232 if (env->trace & UWX_TRACE_RSTATE) \
233 uwx_dump_scoreboard(scoreboard, env->nsbreg, \
234 &(rhdr), cur_slot, ip_slot);
235
236#define TRACE_S_STEP(rstate) \
237 if (env->trace & UWX_TRACE_STEP) { \
238 printf("uwx_step:\n"); \
239 uwx_dump_rstate(SBREG_RP, (rstate)[SBREG_RP]); \
240 uwx_dump_rstate(SBREG_PSP, (rstate)[SBREG_PSP]); \
241 uwx_dump_rstate(SBREG_PFS, (rstate)[SBREG_PFS]); \
242 }
243
244#define TRACE_S_RESTORE_REG(regname, rstate, val) \
245 if (env->trace & UWX_TRACE_STEP) \
246 printf(" restore %-7s (rstate = %08x %08x) = %08x %08x\n", \
247 regname, \
248 (unsigned int) ((rstate) >> 32), \
249 (unsigned int) (rstate), \
250 (unsigned int) ((val) >> 32), \
251 (unsigned int) (val));
252
253#define TRACE_S_RESTORE_GR(regid, rstate, val) \
254 if (env->trace & UWX_TRACE_STEP) \
255 printf(" restore GR%d (rstate = %08x %08x) = %08x %08x\n", \
256 (regid) + 4, \
257 (unsigned int) ((rstate) >> 32), \
258 (unsigned int) (rstate), \
259 (unsigned int) ((val) >> 32), \
260 (unsigned int) (val));
261
262#define TRACE_S_RESTORE_BR(regid, rstate, val) \
263 if (env->trace & UWX_TRACE_STEP) \
264 printf(" restore BR%d (rstate = %08x %08x) = %08x %08x\n", \
265 (regid) + 1, \
266 (unsigned int) ((rstate) >> 32), \
267 (unsigned int) (rstate), \
268 (unsigned int) ((val) >> 32), \
269 (unsigned int) (val));
270
271#define TRACE_S_RESTORE_FR(regid, rstate, fval) \
272 if (env->trace & UWX_TRACE_STEP) \
273 printf(" restore FR%d (rstate = %08x %08x) = %08x %08x %08x %08x\n", \
274 (regid) + 1, \
275 (unsigned int) ((rstate) >> 32), \
276 (unsigned int) (rstate), \
277 (unsigned int) ((fval[0]) >> 32), \
278 (unsigned int) (fval[0]), \
279 (unsigned int) ((fval[1]) >> 32), \
280 (unsigned int) (fval[1]));
281
282#define TRACE_T_SEARCH32(ip) \
283 if (env->trace & UWX_TRACE_UTABLE) \
284 printf("uwx_search_utable32 (relative ip = %08x)\n", (ip));
285
286#define TRACE_T_BINSEARCH32(lb, ub, mid, code_start, code_end) \
287 if (env->trace & UWX_TRACE_UTABLE) \
288 printf(" lb/ub = %d/%d, mid = %d, start/end = %08x %08x\n", \
289 lb, ub, mid, code_start, code_end);
290
291#define TRACE_C_GET_REG(regid, bsp) \
292 if (env->trace & UWX_TRACE_CONTEXT) \
293 printf("uwx_get_reg (gr%d, bsp = %08x %08x)\n", \
294 (regid) - UWX_REG_GR(0), \
295 (unsigned int) ((bsp) >> 32), \
296 (unsigned int) (bsp));
297
298#define TRACE_C_ROTATE_GR(regid, sor, rrb_gr, newregid) \
299 if (env->trace & UWX_TRACE_CONTEXT) \
300 printf("uwx_get_reg (gr%d, sor = %d, rrb = %d) --> gr%d\n", \
301 (regid) + 32, \
302 (sor), \
303 (rrb_gr), \
304 (newregid) + 32);
305
306#define TRACE_SELF_COPYIN4(rem, len, wp) \
307 if (info->trace & UWX_TRACE_COPYIN) \
308 printf("copyin (rem = %08x %08x, len = %d, val = %08x)\n", \
309 (unsigned int) ((rem) >> 32), \
310 (unsigned int) (rem), \
311 (len), *(wp));
312
313#define TRACE_SELF_COPYIN8(rem, len, dp) \
314 if (info->trace & UWX_TRACE_COPYIN) \
315 printf("copyin (rem = %08x %08x, len = %d, val = %08x %08x)\n", \
316 (unsigned int) ((rem) >> 32), \
317 (unsigned int) (rem), \
318 (len), \
319 ((unsigned int *)(dp))[0], \
320 ((unsigned int *)(dp))[1]);
321
322#define TRACE_SELF_LOOKUP(ip) \
323 if (info->trace & UWX_TRACE_LOOKUPIP) \
324 printf("Lookup IP callback: ip = %08x %08x\n", \
325 (unsigned int) ((ip) >> 32), \
326 (unsigned int) (ip));
327
328#define TRACE_SELF_LOOKUP_DESC(text_base, unwind_base) \
329 if (info->trace & UWX_TRACE_LOOKUPIP) { \
330 printf(" text base: %08x %08x\n", \
331 (unsigned int) ((text_base) >> 32), \
332 (unsigned int) (text_base)); \
333 printf(" unwind base: %08x %08x\n", \
334 (unsigned int) ((uint64_t)(unwind_base) >> 32), \
335 (unsigned int) (unwind_base)); \
336 printf(" unwind flags: %08x %08x\n", \
337 (unsigned int) ((unwind_base)[0] >> 32), \
338 (unsigned int) (unwind_base)[0]); \
339 printf(" unwind start: %08x %08x\n", \
340 (unsigned int) (((text_base)+(unwind_base)[1]) >> 32), \
341 (unsigned int) ((text_base)+(unwind_base)[1])); \
342 printf(" unwind end: %08x %08x\n", \
343 (unsigned int) (((text_base)+(unwind_base)[2]) >> 32), \
344 (unsigned int) ((text_base)+(unwind_base)[2])); \
345 }
346
347#endif /* TRACE_DISABLED */
347#endif /* !UWX_TRACE_ENABLE */
348
348