1
2
3
4
5
6
7
8
9
10
11
12#include <linux/linkage.h>
13#include <asm/setup.h>
14#include <asm/segment.h>
15#include <asm/ptrace.h>
16#include <asm/thread_info.h>
17#include <asm/spr-regs.h>
18
19#include <asm/errno.h>
20
21
22
23
24 .section .bss..stack
25 .globl __break_user_context
26 .balign THREAD_SIZE
27__break_stack:
28 .space THREAD_SIZE - FRV_FRAME0_SIZE
29__break_frame_0:
30 .space FRV_FRAME0_SIZE
31
32
33
34
35 .section .bss
36#ifdef CONFIG_MMU
37 .globl __break_tlb_miss_real_return_info
38__break_tlb_miss_real_return_info:
39 .balign 8
40 .space 2*4
41#endif
42
43__break_trace_through_exceptions:
44 .space 4
45
46#define CS2_ECS1 0xe1200000
47#define CS2_USERLED 0x4
48
49.macro LEDS val,reg
50
51
52
53
54
55
56
57
58
59.endm
60
61
62
63
64
65
66 .section .text..break
67 .balign 4
68 .globl __entry_break
69__entry_break:
70#ifdef CONFIG_MMU
71 movgs gr31,scr3
72#endif
73 LEDS 0x1001,gr31
74
75 sethi.p %hi(__break_frame_0),gr31
76 setlo %lo(__break_frame_0),gr31
77
78 stdi gr2,@(gr31,
79 movsg ccr,gr3
80 sti gr3,@(gr31,
81
82
83
84#ifdef CONFIG_MMU
85 movsg bpcsr,gr3
86 sethi.p %hi(__break_tlb_miss_return_breaks_here),gr2
87 setlo %lo(__break_tlb_miss_return_breaks_here),gr2
88 subcc gr2,gr3,gr0,icc0
89 beq icc0,
90#endif
91
92
93
94
95
96 movsg bpsr,gr3
97 andicc gr3,
98 bne icc0,
99
100 LEDS 0x1003,gr2
101
102 movsg brr,gr3
103 andicc gr3,
104 andicc.p gr3,
105 bne icc0,
106 beq icc1,
107
108 LEDS 0x1007,gr2
109
110
111 movsg bpcsr,gr3
112
113 sethi.p %hi(__entry_return_singlestep_breaks_here),gr2
114 setlo %lo(__entry_return_singlestep_breaks_here),gr2
115 subcc gr2,gr3,gr0,icc0
116 beq icc0,
117
118 bra __break_continue
119
120
121
122
123
124
125
126__break_return_singlestep:
127 LEDS 0x100f,gr2
128
129
130
131
132
133
134
135
136 movsg dcr,gr2
137 sethi.p %hi(DCR_SE),gr3
138 setlo %lo(DCR_SE),gr3
139 or gr2,gr3,gr2
140 movgs gr2,dcr
141
142 movsg psr,gr2
143 andi gr2,
144 slli gr2,
145 ori gr2,
146 movgs gr2,bpsr
147
148
149 movsg pcsr,gr2
150 movgs gr2,bpcsr
151
152 LEDS 0x101f,gr2
153
154 ldi @(gr31,
155 movgs gr3,ccr
156 lddi.p @(gr31,
157 xor gr31,gr31,gr31
158 movgs gr0,brr
159#ifdef CONFIG_MMU
160 movsg scr3,gr31
161#endif
162 rett
163
164
165
166
167
168
169#ifdef CONFIG_MMU
170__break_return_singlestep_tlbmiss:
171 LEDS 0x1100,gr2
172
173 sethi.p %hi(__break_tlb_miss_real_return_info),gr3
174 setlo %lo(__break_tlb_miss_real_return_info),gr3
175 lddi @(gr3,
176 movgs gr2,pcsr
177 movgs gr3,psr
178
179 bra __break_return_singlestep
180#endif
181
182
183
184
185
186
187
188
189
190
191
192__break_step:
193 LEDS 0x2003,gr2
194
195
196
197 movsg bpcsr,gr2
198 sethi.p %hi(__entry_kernel_external_interrupt),gr3
199 setlo %lo(__entry_kernel_external_interrupt),gr3
200 subcc.p gr2,gr3,gr0,icc0
201 sethi %hi(__entry_uspace_external_interrupt),gr3
202 setlo.p %lo(__entry_uspace_external_interrupt),gr3
203 beq icc0,
204 subcc.p gr2,gr3,gr0,icc0
205 sethi %hi(__entry_kernel_external_interrupt_virtually_disabled),gr3
206 setlo.p %lo(__entry_kernel_external_interrupt_virtually_disabled),gr3
207 beq icc0,
208 subcc.p gr2,gr3,gr0,icc0
209 sethi %hi(__entry_kernel_external_interrupt_virtual_reenable),gr3
210 setlo.p %lo(__entry_kernel_external_interrupt_virtual_reenable),gr3
211 beq icc0,
212 subcc gr2,gr3,gr0,icc0
213 beq icc0,
214
215 LEDS 0x2007,gr2
216
217
218 movsg bpcsr,gr2
219 setlos
220 and gr2,gr3,gr2
221 sethi.p %hi(__trap_tables),gr3
222 setlo %lo(__trap_tables),gr3
223 subcc gr2,gr3,gr0,icc0
224 bne icc0,
225
226 LEDS 0x200f,gr2
227
228
229 sethi.p %hi(__break_trace_through_exceptions),gr3
230 setlo %lo(__break_trace_through_exceptions),gr3
231 ld @(gr3,gr0),gr3
232 subcc gr3,gr0,gr0,icc0
233 bne icc0,
234
235 LEDS 0x201f,gr2
236
237
238
239
240 sethi.p %hi(__trap_tables),gr3
241 setlo %lo(__trap_tables),gr3
242 movsg bpcsr,gr2
243 sub gr2,gr3,gr2
244 srli.p gr2,
245
246 sethi %hi(__trap_fixup_tables),gr3
247 setlo.p %lo(__trap_fixup_tables),gr3
248 andi gr2,
249 ld @(gr2,gr3),gr2
250 jmpil @(gr2,
251
252
253 .globl __break_step_kernel_softprog_interrupt
254__break_step_kernel_softprog_interrupt:
255 sethi.p %hi(__entry_kernel_softprog_interrupt_reentry),gr3
256 setlo %lo(__entry_kernel_softprog_interrupt_reentry),gr3
257 bra __break_return_as_kernel_prologue
258
259
260 .globl __break_step_kernel_external_interrupt
261__break_step_kernel_external_interrupt:
262
263 beq icc2,
264
265 sethi.p %hi(__entry_kernel_external_interrupt_reentry),gr3
266 setlo %lo(__entry_kernel_external_interrupt_reentry),gr3
267
268__break_return_as_kernel_prologue:
269 LEDS 0x203f,gr2
270
271 movgs gr3,bpcsr
272
273
274#ifdef CONFIG_MMU
275 movsg ear0,gr2
276 movgs gr2,scr2
277#endif
278
279 or.p sp,gr0,gr2
280 subi sp,
281 sti.p gr2,@(sp,
282
283 setlos
284 sti gr2,@(sp,
285
286
287 movsg dcr,gr2
288 sethi.p %hi(~DCR_SE),gr3
289 setlo %lo(~DCR_SE),gr3
290 and gr2,gr3,gr2
291 movgs gr2,dcr
292
293 LEDS 0x207f,gr2
294
295 ldi @(gr31,
296 movgs gr3,ccr
297 lddi.p @(gr31,
298 xor gr31,gr31,gr31
299 movgs gr0,brr
300#ifdef CONFIG_MMU
301 movsg scr3,gr31
302#endif
303 rett
304
305
306
307__break_step_kernel_external_interrupt_virtually_disabled:
308 movsg psr,gr2
309 andi gr2,
310 ori gr2,
311 movgs gr2,psr
312
313 ldi @(gr31,
314 movgs gr3,ccr
315 subcc.p gr0,gr0,gr0,icc2
316
317
318 setlos BPSR_BET|BPSR_BS,gr3
319 movgs gr3,bpsr
320
321
322 movsg pcsr,gr2
323 movgs gr2,bpcsr
324
325 lddi.p @(gr31,
326
327 xor gr31,gr31,gr31
328 movgs gr0,brr
329#ifdef CONFIG_MMU
330 movsg scr3,gr31
331#endif
332 rett
333
334
335
336
337
338 .globl __break_step_kernel_external_interrupt_virtual_reenable
339__break_step_kernel_external_interrupt_virtual_reenable:
340 movsg psr,gr2
341 andi gr2,
342 movgs gr2,psr
343
344 ldi @(gr31,
345 movgs gr3,ccr
346 subicc gr0,
347
348
349 movsg ccr,gr3
350 sti gr3,@(gr31,
351
352
353 setlos BPSR_BET|BPSR_BS,gr3
354 movgs gr3,bpsr
355
356
357 movsg pcsr,gr2
358 movgs gr2,bpcsr
359
360
361 bra __break_continue
362
363
364 .globl __break_step_uspace_softprog_interrupt
365__break_step_uspace_softprog_interrupt:
366 sethi.p %hi(__entry_uspace_softprog_interrupt_reentry),gr3
367 setlo %lo(__entry_uspace_softprog_interrupt_reentry),gr3
368 bra __break_return_as_uspace_prologue
369
370
371 .globl __break_step_uspace_external_interrupt
372__break_step_uspace_external_interrupt:
373 sethi.p %hi(__entry_uspace_external_interrupt_reentry),gr3
374 setlo %lo(__entry_uspace_external_interrupt_reentry),gr3
375
376__break_return_as_uspace_prologue:
377 LEDS 0x20ff,gr2
378
379 movgs gr3,bpcsr
380
381
382 sethi.p %hi(__kernel_frame0_ptr),gr28
383 setlo %lo(__kernel_frame0_ptr),gr28
384 ldi.p @(gr28,
385
386 setlos
387 sti gr2,@(gr28,
388
389
390 movsg dcr,gr2
391 sethi.p %hi(~DCR_SE),gr3
392 setlo %lo(~DCR_SE),gr3
393 and gr2,gr3,gr2
394 movgs gr2,dcr
395
396 LEDS 0x20fe,gr2
397
398 ldi @(gr31,
399 movgs gr3,ccr
400 lddi.p @(gr31,
401 xor gr31,gr31,gr31
402 movgs gr0,brr
403#ifdef CONFIG_MMU
404 movsg scr3,gr31
405#endif
406 rett
407
408#ifdef CONFIG_MMU
409
410 .globl __break_user_insn_tlb_miss
411__break_user_insn_tlb_miss:
412
413 sethi.p %hi(__trap_user_insn_tlb_miss),gr2
414 setlo %lo(__trap_user_insn_tlb_miss),gr2
415 movgs gr2,bpcsr
416
417__break_tlb_miss_common:
418 LEDS 0x2101,gr2
419
420
421 movsg dcr,gr2
422 sethi.p %hi(~DCR_SE),gr3
423 setlo %lo(~DCR_SE),gr3
424 and gr2,gr3,gr2
425 movgs gr2,dcr
426
427
428
429 movsg pcsr,gr2
430 sethi.p %hi(__break_tlb_miss_real_return_info),gr3
431 setlo %lo(__break_tlb_miss_real_return_info),gr3
432 sti gr2,@(gr3,
433
434 sethi.p %hi(__break_tlb_miss_return_break),gr2
435 setlo %lo(__break_tlb_miss_return_break),gr2
436 movgs gr2,pcsr
437
438
439
440 movsg psr,gr2
441 sti.p gr2,@(gr3,
442 ori gr2,
443 movgs gr2,psr
444
445 LEDS 0x2102,gr2
446
447 ldi @(gr31,
448 movgs gr3,ccr
449 lddi @(gr31,
450 movsg scr3,gr31
451 movgs gr0,brr
452 rett
453
454
455 .globl __break_user_data_tlb_miss
456__break_user_data_tlb_miss:
457
458 sethi.p %hi(__trap_user_data_tlb_miss),gr2
459 setlo %lo(__trap_user_data_tlb_miss),gr2
460 movgs gr2,bpcsr
461 bra __break_tlb_miss_common
462
463
464 .globl __break_kernel_insn_tlb_miss
465__break_kernel_insn_tlb_miss:
466
467 sethi.p %hi(__trap_kernel_insn_tlb_miss),gr2
468 setlo %lo(__trap_kernel_insn_tlb_miss),gr2
469 movgs gr2,bpcsr
470 bra __break_tlb_miss_common
471
472
473 .globl __break_kernel_data_tlb_miss
474__break_kernel_data_tlb_miss:
475
476 sethi.p %hi(__trap_kernel_data_tlb_miss),gr2
477 setlo %lo(__trap_kernel_data_tlb_miss),gr2
478 movgs gr2,bpcsr
479 bra __break_tlb_miss_common
480#endif
481
482
483
484
485
486
487__break_maybe_userspace:
488 LEDS 0x3003,gr2
489
490 setlos
491 andcc gr3,gr2,gr0,icc0
492 bne icc0,
493
494 movsg brr,gr2
495 andicc gr2,
496 beq icc0,
497
498 LEDS 0x3007,gr2
499
500
501 sethi.p %hi(__kernel_frame0_ptr),gr28
502 setlo %lo(__kernel_frame0_ptr),gr28
503 ldi @(gr28,
504 andi gr28,
505
506
507 sti sp ,@(gr28,
508 ori gr28,0,sp
509 sti gr0 ,@(gr28,
510
511 stdi gr20,@(gr28,
512 stdi gr22,@(gr28,
513
514 movsg tbr,gr20
515 movsg bpcsr,gr21
516 movsg psr,gr22
517
518
519 or gr0,gr0,gr23
520
521 movsg dcr,gr2
522 sethi.p %hi(DCR_SE),gr3
523 setlo %lo(DCR_SE),gr3
524 andcc gr2,gr3,gr0,icc0
525 beq icc0,
526
527 not gr3,gr3
528 and gr2,gr3,gr2
529 movgs gr2,dcr
530 ori gr23,
531
532__break_no_user_sstep:
533 LEDS 0x300f,gr2
534
535 movsg brr,gr2
536 andi gr2,
537 slli gr2,
538 or gr23,gr2,gr23
539 sti.p gr23,@(gr28,
540
541
542 setlos
543 and.p gr20,gr2,gr20
544 setlos
545 or.p gr20,gr2,gr20
546
547
548
549 andi gr22,
550 movgs gr22,psr
551
552 setlos
553 movgs gr2,bpsr
554
555
556
557 sethi.p %hi(__entry_return_from_user_exception),gr23
558 setlo %lo(__entry_return_from_user_exception),gr23
559 sethi.p %hi(__entry_common),gr3
560 setlo %lo(__entry_common),gr3
561 movgs gr3,bpcsr
562
563 LEDS 0x301f,gr2
564
565 ldi @(gr31,
566 movgs gr3,ccr
567 lddi.p @(gr31,
568 xor gr31,gr31,gr31
569 movgs gr0,brr
570#ifdef CONFIG_MMU
571 movsg scr3,gr31
572#endif
573 rett
574
575
576
577
578
579
580__break_continue:
581 LEDS 0x4003,gr2
582
583
584 sti sp,@(gr31,
585
586 sethi.p %hi(__break_frame_0),sp
587 setlo %lo(__break_frame_0),sp
588
589
590 stdi gr4 ,@(gr31,
591 stdi gr6 ,@(gr31,
592 stdi gr8 ,@(gr31,
593 stdi gr10,@(gr31,
594 stdi gr12,@(gr31,
595 stdi gr14,@(gr31,
596 stdi gr16,@(gr31,
597 stdi gr18,@(gr31,
598 stdi gr20,@(gr31,
599 stdi gr22,@(gr31,
600 stdi gr24,@(gr31,
601 stdi gr26,@(gr31,
602 sti gr0 ,@(gr31,
603 sti gr29,@(gr31,
604 sti gr30,@(gr31,
605 sti gr8 ,@(gr31,
606
607#ifdef CONFIG_MMU
608 movsg scr3,gr19
609 sti gr19,@(gr31,
610#endif
611
612 movsg bpsr ,gr19
613 movsg tbr ,gr20
614 movsg bpcsr,gr21
615 movsg psr ,gr22
616 movsg isr ,gr23
617 movsg cccr ,gr25
618 movsg lr ,gr26
619 movsg lcr ,gr27
620
621 andi.p gr22,
622 andi gr19,
623 or.p gr4,gr5,gr5
624 srli gr19,
625 andi gr4,
626 or.p gr4,gr5,gr5
627
628 setlos
629 sti gr20,@(gr31,
630 sti gr21,@(gr31,
631 sti gr5 ,@(gr31,
632 sti gr23,@(gr31,
633 sti gr25,@(gr31,
634 stdi gr26,@(gr31,
635 sti gr6 ,@(gr31,
636
637
638 movsg iacc0h,gr4
639 movsg iacc0l,gr5
640 stdi gr4,@(gr31,
641
642 movsg gner0,gr4
643 movsg gner1,gr5
644 stdi gr4,@(gr31,
645
646
647 movsg brr,gr4
648 movgs gr0,brr
649 movsg nmar,gr5
650 movsg dcr,gr6
651
652 sethi.p %hi(__debug_status),gr7
653 setlo %lo(__debug_status),gr7
654
655 stdi gr4 ,@(gr7,
656 sti gr19,@(gr7,
657 sti.p gr6 ,@(gr7,
658
659
660 sethi %hi(DCR_EBE),gr5
661 setlo.p %lo(DCR_EBE),gr5
662 sethi %hi(__entry_breaktrap_table),gr4
663 setlo %lo(__entry_breaktrap_table),gr4
664 movgs gr5,dcr
665 movgs gr4,tbr
666
667
668 sethi.p %hi(__kernel_current_task),gr5
669 setlo %lo(__kernel_current_task),gr5
670 ld @(gr5,gr0),gr29
671 ldi.p @(gr29,
672
673 sethi %hi(_gp),gr16
674 setlo.p %lo(_gp),gr16
675
676
677 setlos
678 movgs gr5,isr
679
680
681 LEDS 0x4007,gr2
682
683 or.p gr0,gr0,fp
684 call debug_stub
685
686 LEDS 0x403f,gr2
687
688
689 lddi @(gr31,
690 movgs gr4,iacc0h
691 movgs gr5,iacc0l
692
693 lddi @(gr31,
694 movgs gr4,gner0
695 movgs gr5,gner1
696
697 lddi @(gr31,
698 lddi @(gr31,
699 lddi @(gr31,
700 ldi @(gr31,
701 ldi @(gr31,
702
703 sethi.p %hi(__debug_status),gr6
704 setlo %lo(__debug_status),gr6
705 ldi.p @(gr6,
706
707 andi gr22,
708 andi.p gr22,
709 slli gr19,
710 or gr5,gr19,gr19
711
712 movgs gr6 ,dcr
713 movgs gr19,bpsr
714 movgs gr20,tbr
715 movgs gr21,bpcsr
716 movgs gr23,isr
717 movgs gr24,ccr
718 movgs gr25,cccr
719 movgs gr26,lr
720 movgs gr27,lcr
721
722 LEDS 0x407f,gr2
723
724#ifdef CONFIG_MMU
725 ldi @(gr31,
726 movgs gr2,scr3
727#endif
728
729 ldi @(gr31,
730 ldi @(gr31,
731 lddi @(gr31,
732 lddi @(gr31,
733 lddi @(gr31,
734 lddi @(gr31,
735 lddi @(gr31,
736 lddi @(gr31,
737 lddi @(gr31,
738 lddi @(gr31,
739 lddi @(gr31,
740 lddi @(gr31,
741 lddi @(gr31,
742 lddi @(gr31,
743 lddi @(gr31,
744 ldi.p @(gr31,
745
746 xor gr31,gr31,gr31
747 movgs gr0,brr
748#ifdef CONFIG_MMU
749 movsg scr3,gr31
750#endif
751 rett
752
753
754
755
756
757
758
759#ifdef CONFIG_GDBSTUB
760
761 .globl gdbstub_console_write
762gdbstub_console_write:
763 break
764 bralr
765#endif
766
767
768
769 .globl __debug_bug_trap
770__debug_bug_trap:
771 break
772 bralr
773
774
775 .globl __break_hijack_kernel_event
776__break_hijack_kernel_event:
777 break
778 .globl __break_hijack_kernel_event_breaks_here
779__break_hijack_kernel_event_breaks_here:
780 nop
781
782#ifdef CONFIG_MMU
783
784 .globl __break_tlb_miss_return_break
785__break_tlb_miss_return_break:
786 break
787__break_tlb_miss_return_breaks_here:
788 nop
789#endif
790
791
792 nop
793