OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib/] [libgloss/] [hp74x/] [debugger.s] - Blame information for rev 1773

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 39 lampret
/****************************************************************************
2
 
3
                THIS SOFTWARE IS NOT COPYRIGHTED
4
 
5
   HP offers the following for use in the public domain.  HP makes no
6
   warranty with regard to the software or it's performance and the
7
   user accepts the software "AS IS" with all faults.
8
 
9
   HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD
10
   TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES
11
   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
12
 
13
****************************************************************************/
14
        .space  $TEXT$
15
        .subspa $CODE$,access=0x2c
16
 
17
#if 1
18
#include        "diagnose.h"
19
#endif
20
 
21
i13BREAK        .equ    0xa5a                   ; im13 field for specified functions
22
i5REG           .equ    0x06                    ; Init registers
23
i5BP            .equ    0x09                    ; GDB breakpoin
24
i5PSW           .equ    0x0b                    ; Get PSW
25
i5INLINE        .equ    0x0e                    ; Get INLINE
26
R_gr0           .equ     0
27
R_gr1           .equ     4
28
R_gr2           .equ     8
29
R_gr3           .equ    12
30
R_gr4           .equ    16
31
R_gr5           .equ    20
32
R_gr6           .equ    24
33
R_gr7           .equ    28
34
R_gr8           .equ    32
35
R_gr9           .equ    36
36
R_gr10          .equ    40
37
R_gr11          .equ    44
38
R_gr12          .equ    48
39
R_gr13          .equ    52
40
R_gr14          .equ    56
41
R_gr15          .equ    60
42
R_gr16          .equ    64
43
R_gr17          .equ    68
44
R_gr18          .equ    72
45
R_gr19          .equ    76
46
R_gr20          .equ    80
47
R_gr21          .equ    84
48
R_gr22          .equ    88
49
R_gr23          .equ    92
50
R_gr24          .equ    96
51
R_gr25          .equ    100
52
R_gr26          .equ    104
53
R_gr27          .equ    108
54
R_gr28          .equ    112
55
R_gr29          .equ    116
56
R_gr30          .equ    120
57
R_gr31          .equ    124
58
 
59
R_sr0           .equ    128
60
R_sr1           .equ    132
61
R_sr2           .equ    136
62
R_sr3           .equ    140
63
R_sr4           .equ    144
64
R_sr5           .equ    148
65
R_sr6           .equ    152
66
R_sr7           .equ    156
67
 
68
R_cr0           .equ    160
69
R_cr1           .equ    164
70
R_cr2           .equ    168
71
R_cr3           .equ    172
72
R_cr4           .equ    176
73
R_cr5           .equ    180
74
R_cr6           .equ    184
75
R_cr7           .equ    188
76
R_cr8           .equ    192
77
R_cr9           .equ    196
78
R_cr10          .equ    200
79
R_cr11          .equ    204
80
R_cr12          .equ    208
81
R_cr13          .equ    212
82
R_cr14          .equ    216
83
R_cr15          .equ    220
84
R_cr16          .equ    224
85
R_cr17H         .equ    228
86
R_cr18H         .equ    232
87
R_cr19          .equ    236
88
R_cr20          .equ    240
89
R_cr21          .equ    244
90
R_cr22          .equ    248
91
R_cr23          .equ    252
92
R_cr24          .equ    256
93
R_cr25          .equ    260
94
R_cr26          .equ    264
95
R_cr27          .equ    268
96
R_cr28          .equ    272
97
R_cr29          .equ    276
98
R_cr30          .equ    280
99
R_cr31          .equ    284
100
 
101
R_cr17T         .equ    288
102
R_cr18T         .equ    292
103
 
104
R_cpu0          .equ    296
105
 
106
R_SIZE          .equ    300
107
 
108
min_stack       .equ     64
109
 
110
        .import handle_exception
111
        .import $global$, data
112
        .IMPORT putnum, code
113
        .IMPORT led_putnum, code
114
        .IMPORT delay, code
115
 
116
        .export FICE
117
        .export DEBUG_GO
118
        .export DEBUG_SS
119
        .export STUB_RESTORE
120
 
121
        .export save_regs
122
        .export RegBlk
123
        .export Exception_index
124
 
125
;-------------------------------------------------------------------------------
126
        .EXPORT breakpoint,ENTRY,ARGW0=GR,RTNVAL=GR
127
breakpoint
128
        .PROC
129
        .CALLINFO CALLER,FRAME=128,SAVE_RP
130
        .ENTRY
131
 
132
        stw     %r2,-20(0,%r30)                 ; stash the return pointer
133
        ldo     128(%r30),%r30                  ; push up the stack pointer
134
 
135
;;; debug
136
        ldi     6, %r26
137
        bl,n    led_putnum,%r2
138
        nop
139
        ldil    L'900000,%r26
140
        ldo     R'900000(%r26),%r26
141
        bl,n    delay,%r2
142
        nop
143
;;;
144
        break   i5INLINE,i13BREAK
145
;;; more debug
146
        ldi     7, %r26
147
        bl,n    led_putnum,%r2
148
        nop
149
        ldil    L'900000,%r26
150
        ldo     R'900000(%r26),%r26
151
        bl,n    delay,%r2
152
        nop
153
;;;
154
 
155
FICE    fice    0(0,%r26)                       ; Flush the i cache entry
156
        sync
157
 
158
        ldw     -148(0,%r30),%r2                ; retrieve the return pointer
159
        ldo     -128(%r30),%r30                 ; reset the stack pointer
160
        bv,n    0(%r2)                          ; return to caller
161
        nop
162
 
163
        .EXIT
164
        .PROCEND
165
 
166
;-------------------------------------------------------------------------------
167
DEBUG_GO
168
        or,tr   %r0,%r0,%r10    ; if go, do not set R-bit to 1
169
 
170
DEBUG_SS
171
        ldi     1,%r10          ; else set R-bit to 1
172
 
173
DEBUG_EXEC
174
 
175
        bl      DGO_0,%r8                       ; r8 points to register block
176
        addil   L%RegBlk-DGO_0,%r8
177
DGO_0
178
        ldo     R%RegBlk-DGO_0(%r1),%r8
179
 
180
; load space registers
181
 
182
        ldw     R_sr0(%r8),%r1
183
        mtsp    %r1,%sr0
184
        ldw     R_sr1(%r8),%r1
185
        mtsp    %r1,%sr1
186
        ldw     R_sr2(%r8),%r1
187
        mtsp    %r1,%sr2
188
        ldw     R_sr3(%r8),%r1
189
        mtsp    %r1,%sr3
190
        ldw     R_sr4(%r8),%r1
191
        mtsp    %r1,%sr4
192
        ldw     R_sr5(%r8),%r1
193
        mtsp    %r1,%sr5
194
        ldw     R_sr6(%r8),%r1
195
        mtsp    %r1,%sr6
196
        ldw     R_sr7(%r8),%r1
197
        mtsp    %r1,%sr7
198
 
199
; clear Q-bit for rfi
200
 
201
        rsm     0x08,%r0
202
 
203
; load control registers
204
 
205
        ldw     R_cr0(%r8),%r1
206
        or,=    %r10,%r0,%r0            ; if single step
207
        copy    %r0,%r1                 ;   set %cr0 to 0
208
        mtctl   %r1,%cr0
209
        ldw     R_cr8(%r8),%r1
210
        mtctl   %r1,%cr8
211
        ldw     R_cr9(%r8),%r1
212
        mtctl   %r1,%cr9
213
        ldw     R_cr10(%r8),%r1
214
        mtctl   %r1,%cr10
215
        ldw     R_cr11(%r8),%r1
216
        mtctl   %r1,%cr11
217
        ldw     R_cr12(%r8),%r1
218
        mtctl   %r1,%cr12
219
        ldw     R_cr13(%r8),%r1
220
        mtctl   %r1,%cr13
221
        ldw     R_cr14(%r8),%r1
222
        mtctl   %r1,%cr14
223
        ldw     R_cr15(%r8),%r1
224
        mtctl   %r1,%cr15
225
        ldw     R_cr16(%r8),%r1
226
        mtctl   %r1,%cr16
227
        ldw     R_cr17H(%r8),%r1        ; load iiasq.head
228
        mtctl   %r1,%cr17
229
        ldw     R_cr18H(%r8),%r1        ; load iiaoq.head
230
        mtctl   %r1,%cr18
231
        ldw     R_cr17T(%r8),%r1        ; load iiasq.tail
232
        mtctl   %r1,%cr17
233
        ldw     R_cr18T(%r8),%r1        ; load iiaoq.tail
234
        mtctl   %r1,%cr18
235
        ldw     R_cr19(%r8),%r1
236
        mtctl   %r1,%cr19
237
        ldw     R_cr20(%r8),%r1
238
        mtctl   %r1,%cr20
239
        ldw     R_cr21(%r8),%r1
240
        mtctl   %r1,%cr21
241
        ldw     R_cr22(%r8),%r1
242
        dep     %r10,27,1,%r1           ; set R-bit if applicable
243
        mtctl   %r1,%cr22
244
        ldw     R_cr23(%r8),%r1
245
        mtctl   %r1,%cr23
246
        ldw     R_cr24(%r8),%r1
247
        mtctl   %r1,%cr24
248
        ldw     R_cr25(%r8),%r1
249
        mtctl   %r1,%cr25
250
        ldw     R_cr26(%r8),%r1
251
        mtctl   %r1,%cr26
252
        ldw     R_cr27(%r8),%r1
253
        mtctl   %r1,%cr27
254
        ldw     R_cr28(%r8),%r1
255
        mtctl   %r1,%cr28
256
        ldw     R_cr29(%r8),%r1
257
        mtctl   %r1,%cr29
258
        ldw     R_cr30(%r8),%r1
259
        mtctl   %r1,%cr30
260
        ldw     R_cr31(%r8),%r1
261
        mtctl   %r1,%cr31
262
 
263
; load diagnose registers
264
 
265
        ldw     R_cpu0(%r8),%r1
266
        ldil    L%CPU0_MASK,%r2
267
        ldo     R%CPU0_MASK(%r2),%r2
268
        xor     %r1,%r2,%r1             ; xor the read/clear bits
269
        nop
270
        mtcpu   %r1,0
271
        mtcpu   %r1,0
272
 
273
; load general registers
274
 
275
        ldw     R_gr1(%r8),%r1
276
        ldw     R_gr2(%r8),%r2
277
        ldw     R_gr3(%r8),%r3
278
        ldw     R_gr4(%r8),%r4
279
        ldw     R_gr5(%r8),%r5
280
        ldw     R_gr6(%r8),%r6
281
        ldw     R_gr7(%r8),%r7
282
        ldw     R_gr9(%r8),%r9
283
        ldw     R_gr10(%r8),%r10
284
        ldw     R_gr11(%r8),%r11
285
        ldw     R_gr12(%r8),%r12
286
        ldw     R_gr13(%r8),%r13
287
        ldw     R_gr14(%r8),%r14
288
        ldw     R_gr15(%r8),%r15
289
        ldw     R_gr16(%r8),%r16
290
        ldw     R_gr17(%r8),%r17
291
        ldw     R_gr18(%r8),%r18
292
        ldw     R_gr19(%r8),%r19
293
        ldw     R_gr20(%r8),%r20
294
        ldw     R_gr21(%r8),%r21
295
        ldw     R_gr22(%r8),%r22
296
        ldw     R_gr23(%r8),%r23
297
        ldw     R_gr24(%r8),%r24
298
        ldw     R_gr25(%r8),%r25
299
        ldw     R_gr26(%r8),%r26
300
        ldw     R_gr27(%r8),%r27
301
        ldw     R_gr28(%r8),%r28
302
        ldw     R_gr29(%r8),%r29
303
        ldw     R_gr30(%r8),%r30
304
        ldw     R_gr31(%r8),%r31
305
        ldw     R_gr8(%r8),%r8
306
 
307
; execute user program
308
 
309
        nop
310
        rfi             ; switch to user code
311
        nop
312
 
313
;-------------------------------------------------------------------------------
314
 
315
STUB_RESTORE
316
        copy    %r1,%r9 ; save exception index
317
        bl      SR_00,%r8
318
        addil   L%Exception_index-SR_00,%r8
319
SR_00
320
        ldo     R%Exception_index-SR_00(%r1),%r8
321
        stw     %r9,(%r8)
322
 
323
        bl      save_regs,%r25
324
        nop
325
 
326
#ifdef  DEBUG_DEBUGGER1
327
        stwm    %r1,8(%sp)
328
        bl      putc,%rp
329
        ldi     CR,%arg0
330
        bl      putc,%rp
331
        ldi     LF,%arg0
332
        bl      printit,%mrp
333
        mfctl   %pcoq,%arg0
334
 
335
        mfctl   %pcoq,%r1
336
        mtctl   %r1,%pcoq
337
        mfctl   %pcoq,%arg0
338
        bl      printit,%mrp
339
        mtctl   %arg0,%pcoq
340
 
341
        bl      printit,%mrp
342
        ldw     -8(%sp),%arg0
343
 
344
        ldwm    -8(%sp),%r1
345
#endif
346
 
347
#ifdef  DEBUG_DEBUGGER2
348
        stwm    %r1,8(%sp)
349
        bl      putc,%rp
350
        ldi     LF,%arg0
351
        ldwm    -8(%sp),%r1
352
#endif
353
 
354
#ifdef  DEBUG_DEBUGGER3
355
        bl      printit,%mrp
356
        copy    iptr,%arg0
357
        bl      printit,%mrp
358
        copy    rstack,%arg0
359
        bl      printit,%mrp
360
        copy    gspace,%arg0
361
        bl      printit,%mrp
362
        copy    dstack,%arg0
363
        bl      printit,%mrp
364
        copy    nextptr,%arg0
365
        bl      printit,%mrp
366
        copy    %dp,%arg0
367
        bl      printit,%mrp
368
        copy    %sp,%arg0
369
        bl      printit,%mrp
370
        mfctl   %rctr,%arg0
371
        bl      printit,%mrp
372
        mfctl   %iva,%arg0
373
        bl      printit,%mrp
374
        mfctl   %eiem,%arg0
375
        bl      printit,%mrp
376
        mfctl   %ipsw,%arg0
377
        bl      printit,%mrp
378
        copy    %r0,%arg0
379
#endif
380
        bl      SR_1,%sp
381
        addil   L%Stub_stack-SR_1,%sp
382
SR_1
383
        ldo     R%Stub_stack-SR_1(%r1),%sp      ; set the stack pointer
384
 
385
        bl      SR_2,%arg0
386
        addil   L%RegBlk-SR_2,%arg0
387
SR_2
388
        ldo     R%RegBlk-SR_2(%r1),%arg0        ; set arg0 (save register area)
389
 
390
        bl      SR_3,%arg1
391
        addil   L%Exception_index-SR_3,%arg1    ; set arg1 address
392
SR_3
393
        ldo     R%Exception_index-SR_3(%r1),%arg1       ; set arg1 address
394
 
395
        addi    min_stack,%sp,%sp               ; allocate min stack frame
396
 
397
        bl      handle_exception,%r2
398
        ldw     0(%arg1),%arg1                  ; load arg1
399
        addi    -min_stack,%sp,%sp              ; de allocate min stack frame
400
 
401
        b       DEBUG_EXEC                      ;
402
        copy    %r28,%r10
403
;-------------------------------------------------------------------------------
404
 
405
save_regs       ; return address is in %r25
406
 
407
        bl      SR_0,%r1                        ; r1 points to Register block
408
        addil   L%RegBlk-SR_0,%r1
409
SR_0
410
        ldo     R%RegBlk-SR_0(%r1),%r1
411
 
412
; save general registers
413
 
414
        stw     %r0,R_gr0(%r1)
415
        ; don't store %r1 yet
416
        stw     %r2,R_gr2(%r1)
417
        stw     %r3,R_gr3(%r1)
418
        stw     %r4,R_gr4(%r1)
419
        stw     %r5,R_gr5(%r1)
420
        stw     %r6,R_gr6(%r1)
421
        stw     %r7,R_gr7(%r1)
422
        ; don't store %r8 yet
423
        ; don't store %r9 yet
424
        stw     %r10,R_gr10(%r1)
425
        stw     %r11,R_gr11(%r1)
426
        stw     %r12,R_gr12(%r1)
427
        stw     %r13,R_gr13(%r1)
428
        stw     %r14,R_gr14(%r1)
429
        stw     %r15,R_gr15(%r1)
430
        ; don't store %r16 yet
431
        ; don't store %r17 yet
432
        stw     %r18,R_gr18(%r1)
433
        stw     %r19,R_gr19(%r1)
434
        stw     %r20,R_gr20(%r1)
435
        stw     %r21,R_gr21(%r1)
436
        stw     %r22,R_gr22(%r1)
437
        stw     %r23,R_gr23(%r1)
438
        ; don't store %r24 yet
439
        ; don't store %r25 yet
440
        stw     %r26,R_gr26(%r1)
441
        stw     %r27,R_gr27(%r1)
442
        stw     %r28,R_gr28(%r1)
443
        stw     %r29,R_gr29(%r1)
444
        stw     %r30,R_gr30(%r1)
445
        stw     %r31,R_gr31(%r1)
446
 
447
; restore general registers from shadow registers and save them
448
 
449
        copy    %r1,%r10        ; hold Register block pointer
450
        copy    %r25,%rp        ; hold return pointer
451
        shdw_gr
452
        shdw_gr
453
        stw     %r1,R_gr1(%r10)
454
        stw     %r8,R_gr8(%r10)
455
        stw     %r9,R_gr9(%r10)
456
        stw     %r16,R_gr16(%r10)
457
        stw     %r17,R_gr17(%r10)
458
        stw     %r24,R_gr24(%r10)
459
        stw     %r25,R_gr25(%r10)
460
 
461
; save control registers
462
 
463
        mfctl   %cr0,%r1
464
        stw     %r1,R_cr0(%r10)
465
        stw     %r0,R_cr1(%r10)
466
        stw     %r0,R_cr2(%r10)
467
        stw     %r0,R_cr3(%r10)
468
        stw     %r0,R_cr4(%r10)
469
        stw     %r0,R_cr5(%r10)
470
        stw     %r0,R_cr6(%r10)
471
        stw     %r0,R_cr7(%r10)
472
        mfctl   %cr8,%r1
473
        stw     %r1,R_cr8(%r10)
474
        mfctl   %cr9,%r1
475
        stw     %r1,R_cr9(%r10)
476
        mfctl   %cr10,%r1
477
        stw     %r1,R_cr10(%r10)
478
        mfctl   %cr11,%r1
479
        stw     %r1,R_cr11(%r10)
480
        mfctl   %cr12,%r1
481
        stw     %r1,R_cr12(%r10)
482
        mfctl   %cr13,%r1
483
        stw     %r1,R_cr13(%r10)
484
        mfctl   %cr14,%r1
485
        stw     %r1,R_cr14(%r10)
486
        mfctl   %cr15,%r1
487
        stw     %r1,R_cr15(%r10)
488
        mfctl   %cr16,%r1
489
        stw     %r1,R_cr16(%r10)
490
        mfctl   %cr17,%r1
491
        stw     %r1,R_cr17H(%r10)
492
        mtctl   %r1,%cr17
493
        mfctl   %cr17,%r1
494
        stw     %r1,R_cr17T(%r10)
495
        mtctl   %r1,%cr17
496
        mfctl   %cr18,%r1
497
        stw     %r1,R_cr18H(%r10)
498
        mtctl   %r1,%cr18
499
        mfctl   %cr18,%r1
500
        stw     %r1,R_cr18T(%r10)
501
        mtctl   %r1,%cr18
502
        mfctl   %cr19,%r1
503
        stw     %r1,R_cr19(%r10)
504
        mfctl   %cr20,%r1
505
        stw     %r1,R_cr20(%r10)
506
        mfctl   %cr21,%r1
507
        stw     %r1,R_cr21(%r10)
508
        mfctl   %cr22,%r1
509
        stw     %r1,R_cr22(%r10)
510
        mfctl   %cr23,%r1
511
        stw     %r1,R_cr23(%r10)
512
        mfctl   %cr24,%r1
513
        stw     %r1,R_cr24(%r10)
514
        mfctl   %cr25,%r1
515
        stw     %r1,R_cr25(%r10)
516
        mfctl   %cr26,%r1
517
        stw     %r1,R_cr26(%r10)
518
        mfctl   %cr27,%r1
519
        stw     %r1,R_cr27(%r10)
520
        mfctl   %cr28,%r1
521
        stw     %r1,R_cr28(%r10)
522
        mfctl   %cr29,%r1
523
        stw     %r1,R_cr29(%r10)
524
        mfctl   %cr30,%r1
525
        stw     %r1,R_cr30(%r10)
526
        mfctl   %cr31,%r1
527
        stw     %r1,R_cr31(%r10)
528
 
529
; save diagnose registers
530
 
531
        mfcpu_c 0,%r1
532
        mfcpu_c 0,%r1
533
        stw     %r1,R_cpu0(%r10)
534
 
535
; save space registers
536
 
537
        mfsp    %sr0,%r1
538
        stw     %r1,R_sr0(%r10)
539
        mfsp    %sr1,%r1
540
        stw     %r1,R_sr1(%r10)
541
        mfsp    %sr2,%r1
542
        stw     %r1,R_sr2(%r10)
543
        mfsp    %sr3,%r1
544
        stw     %r1,R_sr3(%r10)
545
        mfsp    %sr4,%r1
546
        stw     %r1,R_sr4(%r10)
547
        mfsp    %sr5,%r1
548
        stw     %r1,R_sr5(%r10)
549
        mfsp    %sr6,%r1
550
        stw     %r1,R_sr6(%r10)
551
        mfsp    %sr7,%r1
552
        bv      (%rp)
553
        stw     %r1,R_sr7(%r10)
554
 
555
#ifdef  DEBUG_DEBUGGER
556
;-------------------------------------------------------------------------------
557
printit
558
        mtctl   %rp,%tr0
559
        mtctl   %r1,%tr1
560
        bl      putnum,%rp
561
        copy    %rp,%arg0
562
 
563
        mtctl   %mrp,%tr2
564
        bl      putc,%rp
565
        ldi     CR,%arg0
566
        bl      putc,%rp
567
        ldi     LF,%arg0
568
        mfctl   %tr2,%mrp
569
        mfctl   %tr1,%r1
570
        bv      (%mrp)
571
        mfctl   %tr0,%rp
572
#endif
573
        .space  $PRIVATE$
574
        .subspa $DATA$,align=4,access=0x1f
575
 
576
Exception_index
577
        .word   0
578
 
579
RegBlk
580
        .block  R_SIZE          ; register block
581
 
582
Stub_stack
583
        .block  1024
584
 
585
        .end

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.