xref: /netbsd-src/external/gpl3/gdb/dist/sim/testsuite/bfin/dbg_jmp_src_kill.S (revision 4b169a6ba595ae283ca507b26b15fdff40495b1c)
1//Original:/proj/frio/dv/testcases/debug/dbg_jmp_src_kill/dbg_jmp_src_kill.dsp
2// Description: This test checks that the trace buffer keeps track of a JUMP
3// source instruction getting killed at each stage in the pipe.  The test
4// consists of 8 instances of an EXCPT instruction followed by 0 to 7 NOPs
5// and a JUMP, with the trace buffer enabled.
6# mach: bfin
7# sim: --environment operating
8
9#include "test.h"
10.include "testutils.inc"
11start
12
13/////////////////////////////////////////////////////////////////////////////
14///////////////////////// Include Files         /////////////////////////////
15/////////////////////////////////////////////////////////////////////////////
16
17include(std.inc)
18include(selfcheck.inc)
19include(symtable.inc)
20include(mmrs.inc)
21
22/////////////////////////////////////////////////////////////////////////////
23///////////////////////// Defines               /////////////////////////////
24/////////////////////////////////////////////////////////////////////////////
25
26#ifndef USER_CODE_SPACE
27#define USER_CODE_SPACE  CODE_ADDR_1  //
28#endif
29#ifndef STACKSIZE
30#define STACKSIZE        0x00000020
31#endif
32#ifndef ITABLE
33#define ITABLE           CODE_ADDR_2  //
34#endif
35
36/////////////////////////////////////////////////////////////////////////////
37///////////////////////// RESET ISR             /////////////////////////////
38/////////////////////////////////////////////////////////////////////////////
39
40 RST_ISR :
41
42    // Initialize Dregs
43INIT_R_REGS(0);
44
45    // Initialize Pregs
46INIT_P_REGS(0);
47
48    // Initialize ILBM Registers
49INIT_I_REGS(0);
50INIT_M_REGS(0);
51INIT_L_REGS(0);
52INIT_B_REGS(0);
53
54    // Initialize the Address of the Checkreg data segment
55    // **** THIS IS NEEDED WHENEVER CHECKREG IS USED ****
56CHECK_INIT_DEF(p5);  //CHECK_INIT(p5,   0x00BFFFFC);
57
58    // Setup User Stack
59LD32_LABEL(sp, USTACK);
60USP = SP;
61
62    // Setup Kernel Stack
63LD32_LABEL(sp, KSTACK);
64
65    // Setup Frame Pointer
66FP = SP;
67
68    // Setup Event Vector Table
69LD32(p0, EVT0);
70
71LD32_LABEL(r0, EMU_ISR);    // Emulation Handler (Int0)
72    [ P0 ++ ] = R0;
73LD32_LABEL(r0, RST_ISR);    // Reset Handler (Int1)
74    [ P0 ++ ] = R0;
75LD32_LABEL(r0, NMI_ISR);    // NMI Handler (Int2)
76    [ P0 ++ ] = R0;
77LD32_LABEL(r0, EXC_ISR);    // Exception Handler (Int3)
78    [ P0 ++ ] = R0;
79    [ P0 ++ ] = R0;                // IVT4 not used
80LD32_LABEL(r0, HWE_ISR);    // HW Error Handler (Int5)
81    [ P0 ++ ] = R0;
82LD32_LABEL(r0, TMR_ISR);    // Timer Handler (Int6)
83    [ P0 ++ ] = R0;
84LD32_LABEL(r0, IGV7_ISR);   // IVG7 Handler
85    [ P0 ++ ] = R0;
86LD32_LABEL(r0, IGV8_ISR);   // IVG8 Handler
87    [ P0 ++ ] = R0;
88LD32_LABEL(r0, IGV9_ISR);   // IVG9 Handler
89    [ P0 ++ ] = R0;
90LD32_LABEL(r0, IGV10_ISR);  // IVG10 Handler
91    [ P0 ++ ] = R0;
92LD32_LABEL(r0, IGV11_ISR);  // IVG11 Handler
93    [ P0 ++ ] = R0;
94LD32_LABEL(r0, IGV12_ISR);  // IVG12 Handler
95    [ P0 ++ ] = R0;
96LD32_LABEL(r0, IGV13_ISR);  // IVG13 Handler
97    [ P0 ++ ] = R0;
98LD32_LABEL(r0, IGV14_ISR);  // IVG14 Handler
99    [ P0 ++ ] = R0;
100LD32_LABEL(r0, IGV15_ISR);  // IVG15 Handler
101    [ P0 ++ ] = R0;
102
103    // Setup the EVT_OVERRIDE MMR
104    R0 = 0;
105LD32(p0, EVT_OVERRIDE);
106    [ P0 ] = R0;
107
108    // Setup Interrupt Mask
109    R0 = -1;
110LD32(p0, IMASK);
111    [ P0 ] = R0;
112
113    // Return to Supervisor Code
114RAISE 15;
115NOP;
116
117LD32_LABEL(r0, USER_CODE);
118RETI = R0;
119RTI;
120
121.dw 0xFFFF
122.dw 0xFFFF
123.dw 0xFFFF
124.dw 0xFFFF
125.dw 0xFFFF
126.dw 0xFFFF
127.dw 0xFFFF
128
129/////////////////////////////////////////////////////////////////////////////
130
131
132/////////////////////////////////////////////////////////////////////////////
133///////////////////////// EMU ISR               /////////////////////////////
134/////////////////////////////////////////////////////////////////////////////
135
136 EMU_ISR :
137
138RTE;
139
140.dw 0xFFFF
141.dw 0xFFFF
142.dw 0xFFFF
143.dw 0xFFFF
144.dw 0xFFFF
145.dw 0xFFFF
146.dw 0xFFFF
147
148/////////////////////////////////////////////////////////////////////////////
149///////////////////////// NMI ISR               /////////////////////////////
150/////////////////////////////////////////////////////////////////////////////
151
152 NMI_ISR :
153
154RTN;
155
156.dw 0xFFFF
157.dw 0xFFFF
158.dw 0xFFFF
159.dw 0xFFFF
160.dw 0xFFFF
161.dw 0xFFFF
162.dw 0xFFFF
163
164/////////////////////////////////////////////////////////////////////////////
165///////////////////////// EXC ISR               /////////////////////////////
166/////////////////////////////////////////////////////////////////////////////
167
168 EXC_ISR :
169
170    // Save all the registers used in the ISR
171    [ -- SP ] = R0;
172    [ -- SP ] = R1;
173    [ -- SP ] = P0;
174    [ -- SP ] = P1;
175    [ -- SP ] = LC0;
176    [ -- SP ] = LB0;
177    [ -- SP ] = LT0;
178    [ -- SP ] = ASTAT;
179
180    // Get EXCAUSE bits out of SEQSTAT
181    R0 = SEQSTAT;
182    R0 = R0 << 26;
183    R0 = R0 >> 26;
184
185    // Check for Trace Exception
186    // Load r1 with EXCAUSE for Trace Exception
187    R1 = 0x0011 (Z);
188    // Check for Trace Exception
189CC = R0 == R1;
190    // Branch to OUT if the EXCAUSE is not TRACE.
191IF !CC JUMP OUT;
192
193    // Read out the Trace Buffer.
194LD32(p0, TBUFSTAT);
195    // Read TBUFSTAT MMR
196    P1 = [ P0 ];
197
198    // if p1 is zero skip the loop.
199CC = P1 == 0;
200IF CC JUMP OUT;
201
202    // Read out the Entire Trace Buffer.
203LD32(p0, TBUF);
204LSETUP ( l0s , l0e ) LC0 = P1;
205l0s:R0 = [ P0 ];
206l0e:R0 = [ P0 ];
207
208OUT:
209    // Check for other exception, if any.
210
211    // Restore all saved registers.
212ASTAT = [ SP ++ ];
213LT0 = [ SP ++ ];
214LB0 = [ SP ++ ];
215LC0 = [ SP ++ ];
216    P1 = [ SP ++ ];
217    P0 = [ SP ++ ];
218    R1 = [ SP ++ ];
219    R0 = [ SP ++ ];
220
221    // Return
222RTX;
223
224.dw 0xFFFF
225.dw 0xFFFF
226.dw 0xFFFF
227.dw 0xFFFF
228.dw 0xFFFF
229.dw 0xFFFF
230.dw 0xFFFF
231
232/////////////////////////////////////////////////////////////////////////////
233///////////////////////// HWE ISR               /////////////////////////////
234/////////////////////////////////////////////////////////////////////////////
235
236 HWE_ISR :
237
238RTI;
239
240.dw 0xFFFF
241.dw 0xFFFF
242.dw 0xFFFF
243.dw 0xFFFF
244.dw 0xFFFF
245.dw 0xFFFF
246.dw 0xFFFF
247
248/////////////////////////////////////////////////////////////////////////////
249///////////////////////// TMR ISR               /////////////////////////////
250/////////////////////////////////////////////////////////////////////////////
251
252 TMR_ISR :
253
254RTI;
255
256.dw 0xFFFF
257.dw 0xFFFF
258.dw 0xFFFF
259.dw 0xFFFF
260.dw 0xFFFF
261.dw 0xFFFF
262.dw 0xFFFF
263
264/////////////////////////////////////////////////////////////////////////////
265///////////////////////// IGV7 ISR              /////////////////////////////
266/////////////////////////////////////////////////////////////////////////////
267
268 IGV7_ISR :
269
270RTI;
271
272.dw 0xFFFF
273.dw 0xFFFF
274.dw 0xFFFF
275.dw 0xFFFF
276.dw 0xFFFF
277.dw 0xFFFF
278.dw 0xFFFF
279
280/////////////////////////////////////////////////////////////////////////////
281///////////////////////// IGV8 ISR              /////////////////////////////
282/////////////////////////////////////////////////////////////////////////////
283
284 IGV8_ISR :
285
286RTI;
287
288.dw 0xFFFF
289.dw 0xFFFF
290.dw 0xFFFF
291.dw 0xFFFF
292.dw 0xFFFF
293.dw 0xFFFF
294.dw 0xFFFF
295
296/////////////////////////////////////////////////////////////////////////////
297///////////////////////// IGV9 ISR              /////////////////////////////
298/////////////////////////////////////////////////////////////////////////////
299
300 IGV9_ISR :
301
302RTI;
303
304.dw 0xFFFF
305.dw 0xFFFF
306.dw 0xFFFF
307.dw 0xFFFF
308.dw 0xFFFF
309.dw 0xFFFF
310.dw 0xFFFF
311
312/////////////////////////////////////////////////////////////////////////////
313///////////////////////// IGV10 ISR             /////////////////////////////
314/////////////////////////////////////////////////////////////////////////////
315
316 IGV10_ISR :
317
318RTI;
319
320.dw 0xFFFF
321.dw 0xFFFF
322.dw 0xFFFF
323.dw 0xFFFF
324.dw 0xFFFF
325.dw 0xFFFF
326.dw 0xFFFF
327
328/////////////////////////////////////////////////////////////////////////////
329///////////////////////// IGV11 ISR             /////////////////////////////
330/////////////////////////////////////////////////////////////////////////////
331
332 IGV11_ISR :
333
334RTI;
335
336.dw 0xFFFF
337.dw 0xFFFF
338.dw 0xFFFF
339.dw 0xFFFF
340.dw 0xFFFF
341.dw 0xFFFF
342.dw 0xFFFF
343
344/////////////////////////////////////////////////////////////////////////////
345///////////////////////// IGV12 ISR             /////////////////////////////
346/////////////////////////////////////////////////////////////////////////////
347
348 IGV12_ISR :
349
350RTI;
351
352.dw 0xFFFF
353.dw 0xFFFF
354.dw 0xFFFF
355.dw 0xFFFF
356.dw 0xFFFF
357.dw 0xFFFF
358.dw 0xFFFF
359
360/////////////////////////////////////////////////////////////////////////////
361///////////////////////// IGV13 ISR             /////////////////////////////
362/////////////////////////////////////////////////////////////////////////////
363
364 IGV13_ISR :
365
366RTI;
367
368.dw 0xFFFF
369.dw 0xFFFF
370.dw 0xFFFF
371.dw 0xFFFF
372.dw 0xFFFF
373.dw 0xFFFF
374.dw 0xFFFF
375
376/////////////////////////////////////////////////////////////////////////////
377///////////////////////// IGV14 ISR             /////////////////////////////
378/////////////////////////////////////////////////////////////////////////////
379
380 IGV14_ISR :
381
382RTI;
383
384.dw 0xFFFF
385.dw 0xFFFF
386.dw 0xFFFF
387.dw 0xFFFF
388.dw 0xFFFF
389.dw 0xFFFF
390.dw 0xFFFF
391
392/////////////////////////////////////////////////////////////////////////////
393///////////////////////// IGV15 ISR             /////////////////////////////
394/////////////////////////////////////////////////////////////////////////////
395
396 IGV15_ISR :
397
398WR_MMR(TBUFCTL, 0x7, p0, r0);       // Enable trace buffer & overflow
399
400CSYNC;      // Wait for MMR write to complete
401
402EXCPT 1;
403JUMP 4;     // Jump gets killed in WB stage
404NOP;
405NOP;
406
407EXCPT 2;
408NOP;
409JUMP 4;     // Jump gets killed in EX3 stage
410NOP;
411NOP;
412
413EXCPT 3;
414NOP;
415NOP;
416JUMP 4;     // Jump gets killed in EX2 stage
417NOP;
418NOP;
419
420EXCPT 4;
421NOP;
422NOP;
423NOP;
424JUMP 4;     // Jump gets killed in EX1 stage
425NOP;
426NOP;
427
428EXCPT 5;
429NOP;
430NOP;
431NOP;
432NOP;
433JUMP 4;     // Jump gets killed in AC stage
434NOP;
435NOP;
436
437EXCPT 6;
438NOP;
439NOP;
440NOP;
441NOP;
442NOP;
443JUMP 4;     // Jump gets killed in DEC stage
444NOP;
445NOP;
446
447EXCPT 7;
448NOP;
449NOP;
450NOP;
451NOP;
452NOP;
453NOP;
454JUMP 4;     // Jump gets killed in IF2 stage
455NOP;
456NOP;
457
458EXCPT 8;
459NOP;
460NOP;
461NOP;
462NOP;
463NOP;
464NOP;
465NOP;
466JUMP 4;     // Jump gets killed in IF1 stage
467NOP;
468NOP;
469
470    // Read out the Rest of the Trace Buffer.
471LD32(p0, TBUFSTAT);
472    // Read TBUFSTAT MMR
473    P1 = [ P0 ];
474
475    // if p1 is zero skip the loop.
476CC = P1 == 0;
477IF CC JUMP OUT1;
478
479    // Read out the Entire Trace Buffer.
480LD32(p0, TBUF);
481LSETUP ( l1s , l1e ) LC0 = P1;
482l1s:R0 = [ P0 ];
483l1e:R0 = [ P0 ];
484
485    // Don't RTI if you never wish to go to User Mode
486    // use END_TEST instead.
487
488OUT1:
489dbg_pass;
490
491//  rti;
492
493.dw 0xFFFF
494.dw 0xFFFF
495.dw 0xFFFF
496.dw 0xFFFF
497.dw 0xFFFF
498.dw 0xFFFF
499.dw 0xFFFF
500
501/////////////////////////////////////////////////////////////////////////////
502///////////////////////// USER CODE             /////////////////////////////
503/////////////////////////////////////////////////////////////////////////////
504
505
506 USER_CODE :
507
508    // YOUR USER CODE GOES HERE.
509
510dbg_pass;        // Call Endtest Macro
511
512/////////////////////////////////////////////////////////////////////////////
513///////////////////////// DATA MEMRORY          /////////////////////////////
514/////////////////////////////////////////////////////////////////////////////
515
516.section MEM_DATA_ADDR_1 //.data 0x00F00100,"aw"
517.dd 0x01010101;
518.dd 0x02020202;
519.dd 0x03030303;
520.dd 0x04040404;
521.dd 0x05050505;
522.dd 0x06060606;
523.dd 0x07070707;
524.dd 0x08080808;
525.dd 0x09090909;
526.dd 0x0a0a0a0a;
527.dd 0x0b0b0b0b;
528.dd 0x0c0c0c0c;
529.dd 0x0d0d0d0d;
530.dd 0x0e0e0e0e;
531.dd 0x0f0f0f0f;
532
533// Define Kernal Stack
534.section MEM_DATA_ADDR_2 //.data 0x00F00210,"aw"
535    .space (STACKSIZE);
536     KSTACK :
537
538    .space (STACKSIZE);
539     USTACK :
540
541/////////////////////////////////////////////////////////////////////////////
542///////////////////////// END OF TEST           /////////////////////////////
543/////////////////////////////////////////////////////////////////////////////
544