1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#include <linux/init.h>
16#include <linux/linkage.h>
17#include <linux/unistd.h>
18#include <asm/blackfin.h>
19#include <asm/errno.h>
20#include <asm/fixed_code.h>
21#include <asm/thread_info.h>
22#include <asm/asm-offsets.h>
23#include <asm/trace.h>
24#include <asm/traps.h>
25
26#include <asm/context.S>
27
28
29#ifdef CONFIG_EXCPT_IRQ_SYSC_L1
30.section .l1.text
31#else
32.text
33#endif
34
35
36
37
38
39
40#define _ex_dviol _ex_workaround_261
41#define _ex_dmiss _ex_workaround_261
42#define _ex_dmult _ex_workaround_261
43
44ENTRY(_ex_workaround_261)
45
46
47
48
49
50 P4 = R7;
51
52 GET_PDA(p5, r7);
53 r7 = [p5 + PDA_LFRETX];
54 r6 = retx;
55 [p5 + PDA_LFRETX] = r6;
56 cc = r6 == r7;
57 if !cc jump _bfin_return_from_exception;
58
59 R7 = P4;
60 R6 = VEC_CPLB_M;
61 cc = R6 == R7;
62 if cc jump _ex_dcplb_miss (BP);
63#ifdef CONFIG_MPU
64 R6 = VEC_CPLB_VL;
65 cc = R6 == R7;
66 if cc jump _ex_dcplb_viol (BP);
67#endif
68
69
70
71 jump _ex_trap_c;
72ENDPROC(_ex_workaround_261)
73
74#else
75#ifdef CONFIG_MPU
76#define _ex_dviol _ex_dcplb_viol
77#else
78#define _ex_dviol _ex_trap_c
79#endif
80#define _ex_dmiss _ex_dcplb_miss
81#define _ex_dmult _ex_trap_c
82#endif
83
84
85ENTRY(_ex_dcplb_viol)
86ENTRY(_ex_dcplb_miss)
87ENTRY(_ex_icplb_miss)
88 (R7:6,P5:4) = [sp++];
89
90 SAVE_CONTEXT_CPLB
91
92
93
94 R0 = SEQSTAT;
95 R1 = SP;
96
97 DEBUG_HWTRACE_SAVE(p5, r7)
98
99 sp += -12;
100 call _cplb_hdr;
101 sp += 12;
102 CC = R0 == 0;
103 IF !CC JUMP _handle_bad_cplb;
104
105#ifdef CONFIG_DEBUG_DOUBLEFAULT
106
107 r7 = SEQSTAT;
108 r6.l = lo(SEQSTAT_EXCAUSE);
109 r6.h = hi(SEQSTAT_EXCAUSE);
110 r7 = r7 & r6;
111 r6 = 0x25;
112 CC = R7 == R6;
113 if CC JUMP _double_fault;
114#endif
115
116 DEBUG_HWTRACE_RESTORE(p5, r7)
117 RESTORE_CONTEXT_CPLB
118 ASTAT = [SP++];
119 SP = EX_SCRATCH_REG;
120 rtx;
121ENDPROC(_ex_icplb_miss)
122
123ENTRY(_ex_syscall)
124 raise 15;
125 jump.s _bfin_return_from_exception;
126ENDPROC(_ex_syscall)
127
128ENTRY(_ex_single_step)
129
130
131 r7 = retx;
132 r6 = reti;
133 cc = r7 == r6;
134 if cc jump _bfin_return_from_exception;
135
136#ifdef CONFIG_KGDB
137
138 p5.l = lo(IPEND);
139 p5.h = hi(IPEND);
140 r6 = [p5];
141 cc = bittst(r6, 4);
142 if cc jump _bfin_return_from_exception;
143 cc = bittst(r6, 5);
144 if cc jump _bfin_return_from_exception;
145
146
147
148 r6 >>= 6;
149 r7 = 10;
150.Lfind_priority_start:
151 cc = bittst(r6, 0);
152 if cc jump .Lfind_priority_done;
153 r6 >>= 1;
154 r7 += -1;
155 cc = r7 == 0;
156 if cc jump .Lfind_priority_done;
157 jump.s .Lfind_priority_start;
158.Lfind_priority_done:
159 p4.l = _kgdb_single_step;
160 p4.h = _kgdb_single_step;
161 r6 = [p4];
162 cc = r6 == 0;
163 if cc jump .Ldo_single_step;
164 r6 += -1;
165 cc = r6 < r7;
166 if cc jump 1f;
167.Ldo_single_step:
168#else
169
170 p5.l = lo(IPEND);
171 p5.h = hi(IPEND);
172 r6 = [p5];
173 r7 = 0xffe0 (z);
174 r7 = r7 & r6;
175 cc = r7 == 0;
176 if !cc jump 1f;
177#endif
178#ifdef CONFIG_EXACT_HWERR
179
180
181
182
183
184 p5.l = lo(ILAT);
185 p5.h = hi(ILAT);
186 r7 = [p5];
187 cc = bittst(r7, EVT_IVHW_P);
188 if cc jump 1f;
189#endif
190
191
192 r7 = syscfg;
193 bitclr (r7, SYSCFG_SSSTEP_P);
194 syscfg = R7;
195 jump _ex_trap_c;
196
1971:
198
199
200
201
202
203
204
205
206 p5.l = lo(EVT0);
207 p5.h = hi(EVT0);
208 p5 += -4;
2092:
210 r7 = rot r7 by -1;
211 p5 += 4;
212 if !cc jump 2b;
213
214
215
216
217
218
219 r7 = [p5];
220 r7 += 2;
221 r6 = RETX;
222 cc = R7 == R6;
223 if !cc jump _bfin_return_from_exception;
224
225 r7 = syscfg;
226 bitclr (r7, SYSCFG_SSSTEP_P);
227 syscfg = R7;
228
229
230ENDPROC(_ex_single_step)
231
232ENTRY(_bfin_return_from_exception)
233
234 R7=LC0;
235 LC0=R7;
236 R7=LC1;
237 LC1=R7;
238#endif
239
240#ifdef CONFIG_DEBUG_DOUBLEFAULT
241
242
243
244 r7 = SEQSTAT;
245 r6.l = lo(SEQSTAT_EXCAUSE);
246 r6.h = hi(SEQSTAT_EXCAUSE);
247 r7 = r7 & r6;
248 r6 = VEC_UNCOV;
249 CC = R7 == R6;
250 if CC JUMP _double_fault;
251#endif
252
253 (R7:6,P5:4) = [sp++];
254 ASTAT = [sp++];
255 sp = EX_SCRATCH_REG;
256 rtx;
257ENDPROC(_bfin_return_from_exception)
258
259ENTRY(_handle_bad_cplb)
260 DEBUG_HWTRACE_RESTORE(p5, r7)
261
262
263
264
265
266
267
268 RESTORE_CONTEXT_CPLB
269
270 [--sp] = (R7:6,P5:4);
271
272ENTRY(_ex_replaceable)
273 nop;
274
275ENTRY(_ex_trap_c)
276
277
278
279
280 GET_PDA(p5, r6);
281
282
283 p4.l = lo(IPEND);
284 p4.h = hi(IPEND);
285 r7 = [p4];
286 CC = BITTST (r7, 5);
287 if CC jump _double_fault;
288 [p5 + PDA_EXIPEND] = r7;
289
290
291
292
293
294 r7.h = _exception_to_level5;
295 r7.l = _exception_to_level5;
296 p4.l = lo(EVT5);
297 p4.h = hi(EVT5);
298 [p4] = r7;
299 csync;
300
301
302
303
304
305
306
307
308 p4.l = lo(DCPLB_FAULT_ADDR);
309 p4.h = hi(DCPLB_FAULT_ADDR);
310 r7 = [p4];
311 [p5 + PDA_DCPLB] = r7;
312
313 p4.l = lo(ICPLB_FAULT_ADDR);
314 p4.h = hi(ICPLB_FAULT_ADDR);
315 r6 = [p4];
316 [p5 + PDA_ICPLB] = r6;
317
318 r6 = retx;
319 [p5 + PDA_RETX] = r6;
320
321 r6 = SEQSTAT;
322 [p5 + PDA_SEQSTAT] = r6;
323
324
325 r6 = SYSCFG;
326 [p5 + PDA_SYSCFG] = r6;
327
328 BITCLR(r6, SYSCFG_SSSTEP_P);
329 SYSCFG = r6;
330
331
332 cli r6;
333 [p5 + PDA_EXIMASK] = r6;
334
335 p4.l = lo(SAFE_USER_INSTRUCTION);
336 p4.h = hi(SAFE_USER_INSTRUCTION);
337 retx = p4;
338
339
340
341
342 r6 = 0x3f;
343 sti r6;
344
345
346
347
348
349
350
351 [--sp] = reti;
352 sp += 4;
353
354 raise 5;
355 jump.s _bfin_return_from_exception;
356ENDPROC(_ex_trap_c)
357
358
359
360
361
362ENTRY(_double_fault)
363
364
365
366
367 P4.L = LO(IMEM_CONTROL);
368 P4.H = HI(IMEM_CONTROL);
369
370 R5 = [P4];
371 BITCLR(R5,ENICPLB_P);
372 CSYNC;
373 [P4] = R5;
374 SSYNC;
375
376 P4.L = LO(DMEM_CONTROL);
377 P4.H = HI(DMEM_CONTROL);
378 R5 = [P4];
379 BITCLR(R5,ENDCPLB_P);
380 CSYNC;
381 [P4] = R5;
382 SSYNC;
383
384
385 (R7:6,P5:4) = [sp++];
386 ASTAT = [sp++];
387 SP = EX_SCRATCH_REG;
388
389
390
391
392 SAVE_ALL_SYS
393
394
395
396 r6 = retx;
397 [sp + PT_PC] = r6;
398
399 r0 = sp;
400 SP += -12;
401 pseudo_long_call _double_fault_c, p5;
402 SP += 12;
403.L_double_fault_panic:
404 JUMP .L_double_fault_panic
405
406ENDPROC(_double_fault)
407
408ENTRY(_exception_to_level5)
409 SAVE_ALL_SYS
410
411 GET_PDA(p5, r7);
412 r6 = [p5 + PDA_RETX];
413 [sp + PT_PC] = r6;
414
415 r6 = [p5 + PDA_SYSCFG];
416 [sp + PT_SYSCFG] = r6;
417
418 r6 = [p5 + PDA_SEQSTAT];
419 [sp + PT_SEQSTAT] = r6;
420
421
422 r7.h = _evt_ivhw;
423 r7.l = _evt_ivhw;
424 p4.l = lo(EVT5);
425 p4.h = hi(EVT5);
426 [p4] = r7;
427 csync;
428
429#ifdef CONFIG_DEBUG_DOUBLEFAULT
430
431
432
433
434 [--sp] = reti;
435 sp += 4;
436#endif
437
438 r7 = [p5 + PDA_EXIPEND]
439 [sp + PT_IPEND] = r7;
440
441 r0 = sp;
442 SP += -12;
443 pseudo_long_call _trap_c, p4;
444 SP += 12;
445
446
447
448
449 CC = BITTST(r7, EVT_IRPTEN_P)
450 if !CC jump 1f;
451
452
453
454 sp += -4;
455 reti = [sp++];
4561:
457
458 r6 = [p5 + PDA_EXIMASK];
459 sti r6;
460
461 call _ret_from_exception;
462 RESTORE_ALL_SYS
463 rti;
464ENDPROC(_exception_to_level5)
465
466ENTRY(_trap)
467
468
469
470
471 EX_SCRATCH_REG = sp;
472 GET_PDA_SAFE(sp);
473 sp = [sp + PDA_EXSTACK];
474
475 [--sp] = ASTAT;
476 [--sp] = (R7:6,P5:4);
477
478 ANOMALY_283_315_WORKAROUND(p5, r7)
479
480#ifdef CONFIG_EXACT_HWERR
481
482
483
484
485
486
487 ssync;
488#endif
489
490#ifdef CONFIG_DEBUG_DOUBLEFAULT
491
492
493
494
495
496
497
498 GET_PDA(p5, r7);
499 p4.l = lo(DCPLB_FAULT_ADDR);
500 p4.h = hi(DCPLB_FAULT_ADDR);
501 r7 = [p4];
502 [p5 + PDA_DF_DCPLB] = r7;
503
504 p4.l = lo(ICPLB_FAULT_ADDR);
505 p4.h = hi(ICPLB_FAULT_ADDR);
506 r7 = [p4];
507 [p5 + PDA_DF_ICPLB] = r7;
508
509 r7 = retx;
510 [p5 + PDA_DF_RETX] = r7;
511
512 r7 = SEQSTAT;
513 [p5 + PDA_DF_SEQSTAT] = r7;
514#else
515 r7 = SEQSTAT;
516#endif
517 r6.l = lo(SEQSTAT_EXCAUSE);
518 r6.h = hi(SEQSTAT_EXCAUSE);
519 r7 = r7 & r6;
520 p5.h = _ex_table;
521 p5.l = _ex_table;
522 p4 = r7;
523 p5 = p5 + (p4 << 2);
524 p4 = [p5];
525 jump (p4);
526
527.Lbadsys:
528 r7 = -ENOSYS;
529 [sp + PT_R0] = r7;
530 jump .Lsyscall_really_exit;
531ENDPROC(_trap)
532
533ENTRY(_kernel_execve)
534 link SIZEOF_PTREGS;
535 p0 = sp;
536 r3 = SIZEOF_PTREGS / 4;
537 r4 = 0(x);
538.Lclear_regs:
539 [p0++] = r4;
540 r3 += -1;
541 cc = r3 == 0;
542 if !cc jump .Lclear_regs (bp);
543
544 p0 = sp;
545 sp += -16;
546 [sp + 12] = p0;
547 pseudo_long_call _do_execve, p5;
548 SP += 16;
549 cc = r0 == 0;
550 if ! cc jump .Lexecve_failed;
551
552
553
554 r1 = sp;
555 r0 = (-KERNEL_STACK_SIZE) (x);
556 r1 = r1 & r0;
557 p2 = r1;
558 p3 = [p2];
559 r0 = KERNEL_STACK_SIZE - 4 (z);
560 p1 = r0;
561 p1 = p1 + p2;
562
563 p0 = fp;
564 r4 = [p0--];
565 r3 = SIZEOF_PTREGS / 4;
566.Lcopy_regs:
567 r4 = [p0--];
568 [p1--] = r4;
569 r3 += -1;
570 cc = r3 == 0;
571 if ! cc jump .Lcopy_regs (bp);
572
573 r0 = (KERNEL_STACK_SIZE - SIZEOF_PTREGS) (z);
574 p1 = r0;
575 p1 = p1 + p2;
576 sp = p1;
577 r0 = syscfg;
578 [SP + PT_SYSCFG] = r0;
579 [p3 + (TASK_THREAD + THREAD_KSP)] = sp;
580
581 RESTORE_CONTEXT;
582 rti;
583.Lexecve_failed:
584 unlink;
585 rts;
586ENDPROC(_kernel_execve)
587
588ENTRY(_system_call)
589
590 p2.l = lo(IPEND);
591 p2.h = hi(IPEND);
592 csync;
593 r0 = [p2];
594 [sp + PT_IPEND] = r0;
595
596
597 r0 = rets;
598 [sp + PT_RESERVED] = r0;
599
600 r7 = sp;
601 r6.l = lo(ALIGN_PAGE_MASK);
602 r6.h = hi(ALIGN_PAGE_MASK);
603 r7 = r7 & r6;
604 p2 = r7;
605 p2 = [p2];
606
607 [p2+(TASK_THREAD+THREAD_KSP)] = sp;
608#ifdef CONFIG_IPIPE
609 r0 = sp;
610 SP += -12;
611 pseudo_long_call ___ipipe_syscall_root, p0;
612 SP += 12;
613 cc = r0 == 1;
614 if cc jump .Lsyscall_really_exit;
615 cc = r0 == -1;
616 if cc jump .Lresume_userspace;
617 r3 = [sp + PT_R3];
618 r4 = [sp + PT_R4];
619 p0 = [sp + PT_ORIG_P0];
620#endif
621
622
623 r7 = sp;
624 r6.l = lo(ALIGN_PAGE_MASK);
625 r6.h = hi(ALIGN_PAGE_MASK);
626 r7 = r7 & r6;
627 p2 = r7;
628 r7 = [p2+TI_FLAGS];
629 CC = BITTST(r7,TIF_SYSCALL_TRACE);
630 if CC JUMP _sys_trace;
631 CC = BITTST(r7,TIF_SINGLESTEP);
632 if CC JUMP _sys_trace;
633
634
635 p4 = __NR_syscall;
636
637 cc = p4 <= p0;
638 if cc jump .Lbadsys;
639
640
641
642 p4 = p0;
643 p5.l = _sys_call_table;
644 p5.h = _sys_call_table;
645 p5 = p5 + (p4 << 2);
646 r0 = [sp + PT_R0];
647 r1 = [sp + PT_R1];
648 r2 = [sp + PT_R2];
649 p5 = [p5];
650
651 [--sp] = r5;
652 [--sp] = r4;
653 [--sp] = r3;
654 SP += -12;
655 call (p5);
656 SP += 24;
657 [sp + PT_R0] = r0;
658
659.Lresume_userspace:
660 r7 = sp;
661 r4.l = lo(ALIGN_PAGE_MASK);
662 r4.h = hi(ALIGN_PAGE_MASK);
663 r7 = r7 & r4;
664 p5 = r7;
665.Lresume_userspace_1:
666
667 [--sp] = reti;
668 reti = [sp++];
669
670 r7 = [p5 + TI_FLAGS];
671 r4.l = lo(_TIF_WORK_MASK);
672 r4.h = hi(_TIF_WORK_MASK);
673 r7 = r7 & r4;
674
675.Lsyscall_resched:
676#ifdef CONFIG_IPIPE
677 cc = BITTST(r7, TIF_IRQ_SYNC);
678 if !cc jump .Lsyscall_no_irqsync;
679
680
681
682
683
684
685 [--sp] = reti;
686 SP += 4;
687 SP += -12;
688 pseudo_long_call ___ipipe_sync_root, p4;
689 SP += 12;
690 jump .Lresume_userspace_1;
691.Lsyscall_no_irqsync:
692#endif
693 cc = BITTST(r7, TIF_NEED_RESCHED);
694 if !cc jump .Lsyscall_sigpending;
695
696
697 [--sp] = reti;
698 sp += 4;
699
700 SP += -12;
701 pseudo_long_call _schedule, p4;
702 SP += 12;
703
704 jump .Lresume_userspace_1;
705
706.Lsyscall_sigpending:
707 cc = BITTST(r7, TIF_SIGPENDING);
708 if cc jump .Lsyscall_do_signals;
709 cc = BITTST(r7, TIF_NOTIFY_RESUME);
710 if !cc jump .Lsyscall_really_exit;
711.Lsyscall_do_signals:
712
713 [--sp] = reti;
714 sp += 4;
715
716 r0 = sp;
717 SP += -12;
718 pseudo_long_call _do_notify_resume, p5;
719 SP += 12;
720
721.Lsyscall_really_exit:
722 r5 = [sp + PT_RESERVED];
723 rets = r5;
724 rts;
725ENDPROC(_system_call)
726
727
728
729
730_sys_trace:
731 r0 = sp;
732 pseudo_long_call _syscall_trace_enter, p5;
733
734
735 p4 = [SP + PT_P0];
736 p3 = __NR_syscall;
737 cc = p3 <= p4;
738 r0 = -ENOSYS;
739 if cc jump .Lsys_trace_badsys;
740
741
742 p5.l = _sys_call_table;
743 p5.h = _sys_call_table;
744 p5 = p5 + (p4 << 2);
745 r0 = [sp + PT_R0];
746 r1 = [sp + PT_R1];
747 r2 = [sp + PT_R2];
748 r3 = [sp + PT_R3];
749 r4 = [sp + PT_R4];
750 r5 = [sp + PT_R5];
751 p5 = [p5];
752
753 [--sp] = r5;
754 [--sp] = r4;
755 [--sp] = r3;
756 SP += -12;
757 call (p5);
758 SP += 24;
759.Lsys_trace_badsys:
760 [sp + PT_R0] = r0;
761
762 r0 = sp;
763 pseudo_long_call _syscall_trace_leave, p5;
764 jump .Lresume_userspace;
765ENDPROC(_sys_trace)
766
767ENTRY(_resume)
768
769
770
771
772 p0 = r0;
773 p1 = r1;
774 [--sp] = rets;
775 [--sp] = fp;
776 [--sp] = (r7:4, p5:3);
777
778
779 p2 = usp;
780 [p0+(TASK_THREAD+THREAD_USP)] = p2;
781
782
783 [p0+(TASK_THREAD+THREAD_KSP)] = sp;
784
785
786 r1.l = _new_old_task;
787 r1.h = _new_old_task;
788 [p0+(TASK_THREAD+THREAD_PC)] = r1;
789
790
791 sp = [p1+(TASK_THREAD+THREAD_KSP)];
792
793
794 p0 = [p1+(TASK_THREAD+THREAD_USP)];
795 usp = p0;
796
797
798 p0 = [p1+(TASK_THREAD+THREAD_PC)];
799 jump (p0);
800
801
802
803
804
805_new_old_task:
806 (r7:4, p5:3) = [sp++];
807 fp = [sp++];
808 rets = [sp++];
809
810
811
812
813
814 rts;
815ENDPROC(_resume)
816
817ENTRY(_ret_from_exception)
818#ifdef CONFIG_IPIPE
819 p2.l = _ipipe_percpu_domain;
820 p2.h = _ipipe_percpu_domain;
821 r0.l = _ipipe_root;
822 r0.h = _ipipe_root;
823 r2 = [p2];
824 cc = r0 == r2;
825 if !cc jump 4f;
826#endif
827 p2.l = lo(IPEND);
828 p2.h = hi(IPEND);
829
830 csync;
831 r0 = [p2];
832 [sp + PT_IPEND] = r0;
833
8341:
835 r2 = LO(~0x37) (Z);
836 r0 = r2 & r0;
837 cc = r0 == 0;
838 if !cc jump 4f;
839
840
841
842
843
844
845
846
847 p2.l = lo(ILAT);
848 p2.h = hi(ILAT);
849 r0 = [p2];
850 r1 = (EVT_IVG14 | EVT_IVG15) (z);
851 r0 = r0 & r1;
852 cc = r0 == 0;
853 if !cc jump 5f;
854
855
856 r7 = sp;
857 r4.l = lo(ALIGN_PAGE_MASK);
858 r4.h = hi(ALIGN_PAGE_MASK);
859 r7 = r7 & r4;
860 p5 = r7;
861 r7 = [p5 + TI_FLAGS];
862 r4.l = lo(_TIF_WORK_MASK);
863 r4.h = hi(_TIF_WORK_MASK);
864 r7 = r7 & r4;
865 cc = r7 == 0;
866 if cc jump 4f;
867
868 p0.l = lo(EVT15);
869 p0.h = hi(EVT15);
870 p1.l = _schedule_and_signal;
871 p1.h = _schedule_and_signal;
872 [p0] = p1;
873 csync;
874 raise 15;
8754:
876 r0 = syscfg;
877 bitclr(r0, SYSCFG_SSSTEP_P);
878 syscfg = r0;
8795:
880 rts;
881ENDPROC(_ret_from_exception)
882
883
884
885ENTRY(_up_to_irq14)
886
887 r0.l = lo(SAFE_USER_INSTRUCTION);
888 r0.h = hi(SAFE_USER_INSTRUCTION);
889 reti = r0;
890#endif
891
892#ifdef CONFIG_DEBUG_HWERR
893
894 r0 = (EVT_IVG14 | EVT_IVHW | EVT_IRPTEN | EVT_EVX | EVT_NMI | EVT_RST | EVT_EMU);
895#else
896
897 r0 = (EVT_IVG14 | EVT_IRPTEN | EVT_EVX | EVT_NMI | EVT_RST | EVT_EMU);
898#endif
899 sti r0;
900
901 p0.l = lo(EVT14);
902 p0.h = hi(EVT14);
903 p1.l = _evt_up_evt14;
904 p1.h = _evt_up_evt14;
905 [p0] = p1;
906 csync;
907
908 raise 14;
9091:
910 jump 1b;
911ENDPROC(_up_to_irq14)
912
913ENTRY(_evt_up_evt14)
914#ifdef CONFIG_DEBUG_HWERR
915 r0 = (EVT_IVHW | EVT_IRPTEN | EVT_EVX | EVT_NMI | EVT_RST | EVT_EMU);
916 sti r0;
917#else
918 cli r0;
919#endif
920#ifdef CONFIG_TRACE_IRQFLAGS
921 [--sp] = rets;
922 sp += -12;
923 call _trace_hardirqs_off;
924 sp += 12;
925 rets = [sp++];
926#endif
927 [--sp] = RETI;
928 SP += 4;
929
930
931 p0.l = lo(EVT14);
932 p0.h = hi(EVT14);
933 p1.l = _evt_evt14;
934 p1.h = _evt_evt14;
935 [p0] = p1;
936 csync;
937
938 rts;
939ENDPROC(_evt_up_evt14)
940
941#endif
942
943#ifdef CONFIG_IPIPE
944
945_resume_kernel_from_int:
946 r1 = LO(~0x8000) (Z);
947 r1 = r0 & r1;
948 r0 = 1;
949 r0 = r1 - r0;
950 r2 = r1 & r0;
951 cc = r2 == 0;
952
953 if !cc jump .Lnosync;
954 r0.l = ___ipipe_sync_root;
955 r0.h = ___ipipe_sync_root;
956 [--sp] = reti;
957 [--sp] = rets;
958 [--sp] = ( r7:4, p5:3 );
959 SP += -12;
960 call ___ipipe_call_irqtail
961 SP += 12;
962 ( r7:4, p5:3 ) = [sp++];
963 rets = [sp++];
964 reti = [sp++];
965.Lnosync:
966 rts
967
968
969_resume_kernel_from_int:
970
971 r7 = sp;
972 r4.l = lo(ALIGN_PAGE_MASK);
973 r4.h = hi(ALIGN_PAGE_MASK);
974 r7 = r7 & r4;
975 p5 = r7;
976 r7 = [p5 + TI_PREEMPT];
977 cc = r7 == 0x0;
978 if !cc jump .Lreturn_to_kernel;
979.Lneed_schedule:
980 r7 = [p5 + TI_FLAGS];
981 r4.l = lo(_TIF_WORK_MASK);
982 r4.h = hi(_TIF_WORK_MASK);
983 r7 = r7 & r4;
984 cc = BITTST(r7, TIF_NEED_RESCHED);
985 if !cc jump .Lreturn_to_kernel;
986
987
988
989
990 r6 = reti;
991 r5.l = .Lkernel_schedule;
992 r5.h = .Lkernel_schedule;
993 reti = r5;
994 rti;
995.Lkernel_schedule:
996 [--sp] = rets;
997 sp += -12;
998 pseudo_long_call _preempt_schedule_irq, p4;
999 sp += 12;
1000 rets = [sp++];
1001
1002 [--sp] = rets;
1003 sp += -12;
1004
1005 pseudo_long_call _up_to_irq14, p4;
1006 sp += 12;
1007 rets = [sp++];
1008
1009 reti = r6;
1010
1011 jump .Lneed_schedule;
1012#else
1013
1014#define _resume_kernel_from_int .Lreturn_to_kernel
1015#endif
1016
1017ENTRY(_return_from_int)
1018
1019 csync;
1020 p2.l = lo(ILAT);
1021 p2.h = hi(ILAT);
1022 r0 = [p2];
1023 cc = bittst (r0, EVT_IVG15_P);
1024 if cc jump .Lreturn_to_kernel;
1025
1026
1027 p2.l = lo(IPEND);
1028 p2.h = hi(IPEND);
1029 r0 = [p2];
1030 r1 = 0x17(Z);
1031 r2 = ~r1;
1032 r2.h = 0;
1033 r0 = r2 & r0;
1034 r1 = 1;
1035 r1 = r0 - r1;
1036 r2 = r0 & r1;
1037 cc = r2 == 0;
1038 if !cc jump _resume_kernel_from_int;
1039
1040
1041 p0.l = lo(EVT15);
1042 p0.h = hi(EVT15);
1043 p1.l = _schedule_and_signal_from_int;
1044 p1.h = _schedule_and_signal_from_int;
1045 [p0] = p1;
1046 csync;
1047
1048 r0.l = lo(SAFE_USER_INSTRUCTION);
1049 r0.h = hi(SAFE_USER_INSTRUCTION);
1050 reti = r0;
1051#endif
1052 r0 = 0x801f (z);
1053 STI r0;
1054 raise 15;
1055 rti;
1056.Lreturn_to_kernel:
1057 rts;
1058ENDPROC(_return_from_int)
1059
1060ENTRY(_lower_to_irq14)
1061
1062 r0.l = lo(SAFE_USER_INSTRUCTION);
1063 r0.h = hi(SAFE_USER_INSTRUCTION);
1064 reti = r0;
1065#endif
1066
1067#ifdef CONFIG_DEBUG_HWERR
1068
1069 r0 = (EVT_IVG14 | EVT_IVHW | EVT_IRPTEN | EVT_EVX | EVT_NMI | EVT_RST | EVT_EMU);
1070#else
1071
1072 r0 = (EVT_IVG14 | EVT_IRPTEN | EVT_EVX | EVT_NMI | EVT_RST | EVT_EMU);
1073#endif
1074 sti r0;
1075 raise 14;
1076 rti;
1077ENDPROC(_lower_to_irq14)
1078
1079ENTRY(_evt_evt14)
1080#ifdef CONFIG_DEBUG_HWERR
1081 r0 = (EVT_IVHW | EVT_IRPTEN | EVT_EVX | EVT_NMI | EVT_RST | EVT_EMU);
1082 sti r0;
1083#else
1084 cli r0;
1085#endif
1086#ifdef CONFIG_TRACE_IRQFLAGS
1087 [--sp] = rets;
1088 sp += -12;
1089 call _trace_hardirqs_off;
1090 sp += 12;
1091 rets = [sp++];
1092#endif
1093 [--sp] = RETI;
1094 SP += 4;
1095 rts;
1096ENDPROC(_evt_evt14)
1097
1098ENTRY(_schedule_and_signal_from_int)
1099
1100
1101
1102 p0.l = lo(EVT15);
1103 p0.h = hi(EVT15);
1104 p1.l = _evt_system_call;
1105 p1.h = _evt_system_call;
1106 [p0] = p1;
1107 csync;
1108
1109
1110 r0 = -1 (x);
1111 [sp + PT_ORIG_P0] = r0;
1112
1113 p1 = rets;
1114 [sp + PT_RESERVED] = p1;
1115
1116#ifdef CONFIG_TRACE_IRQFLAGS
1117
1118
1119 cli r0;
1120 sp += -12;
1121 call _trace_hardirqs_on;
1122 sp += 12;
1123#endif
1124#ifdef CONFIG_SMP
1125 GET_PDA(p0, r0);
1126 r0 = [p0 + PDA_IRQFLAGS];
1127#else
1128 p0.l = _bfin_irq_flags;
1129 p0.h = _bfin_irq_flags;
1130 r0 = [p0];
1131#endif
1132 sti r0;
1133
1134
1135 r1.l = lo(FIXED_CODE_END);
1136 r1.h = hi(FIXED_CODE_END);
1137 r2 = [sp + PT_PC];
1138 cc = r1 <= r2;
1139 if cc jump .Lresume_userspace (bp);
1140
1141 r0 = sp;
1142 sp += -12;
1143
1144 pseudo_long_call _finish_atomic_sections, p5;
1145 sp += 12;
1146 jump.s .Lresume_userspace;
1147ENDPROC(_schedule_and_signal_from_int)
1148
1149ENTRY(_schedule_and_signal)
1150 SAVE_CONTEXT_SYSCALL
1151
1152
1153
1154 p0.l = lo(EVT15);
1155 p0.h = hi(EVT15);
1156 p1.l = _evt_system_call;
1157 p1.h = _evt_system_call;
1158 [p0] = p1;
1159 csync;
1160 p0.l = 1f;
1161 p0.h = 1f;
1162 [sp + PT_RESERVED] = P0;
1163 call .Lresume_userspace;
11641:
1165 RESTORE_CONTEXT
1166 rti;
1167ENDPROC(_schedule_and_signal)
1168
1169
1170
1171
1172
1173#ifdef CONFIG_DEBUG_BFIN_HWTRACE_EXPAND
1174ENTRY(_ex_trace_buff_full)
1175 [--sp] = P3;
1176 [--sp] = P2;
1177 [--sp] = LC0;
1178 [--sp] = LT0;
1179 [--sp] = LB0;
1180 P5.L = _trace_buff_offset;
1181 P5.H = _trace_buff_offset;
1182 P3 = [P5];
1183 P5.L = lo(TBUFSTAT);
1184 P5.H = hi(TBUFSTAT);
1185 R7 = [P5];
1186 R7 <<= 1;
1187 LC0 = R7;
1188 R7 <<= 2;
1189
1190 P5.L = lo(TBUF);
1191 P5.H = hi(TBUF);
1192 R6 = ((1 << CONFIG_DEBUG_BFIN_HWTRACE_EXPAND_LEN)*1024) - 1;
1193
1194 P2 = R7;
1195 P3 = P3 + P2;
1196 R7 = P3;
1197 R7 = R7 & R6;
1198 P3 = R7;
1199 P2.L = _trace_buff_offset;
1200 P2.H = _trace_buff_offset;
1201 [P2] = P3;
1202
1203 P2.L = _software_trace_buff;
1204 P2.H = _software_trace_buff;
1205
1206 LSETUP (.Lstart, .Lend) LC0;
1207.Lstart:
1208 R7 = [P5];
1209 P4 = P3 + P2;
1210 [P4] = R7;
1211 P3 += -4;
1212 R7 = P3;
1213 R7 = R7 & R6;
1214.Lend:
1215 P3 = R7;
1216
1217 LB0 = [sp++];
1218 LT0 = [sp++];
1219 LC0 = [sp++];
1220 P2 = [sp++];
1221 P3 = [sp++];
1222 jump _bfin_return_from_exception;
1223ENDPROC(_ex_trace_buff_full)
1224
1225
1226.data
1227#else
1228.section .l1.data.B
1229#endif
1230ENTRY(_trace_buff_offset)
1231 .long 0;
1232ALIGN
1233ENTRY(_software_trace_buff)
1234 .rept ((1 << CONFIG_DEBUG_BFIN_HWTRACE_EXPAND_LEN)*256);
1235 .long 0
1236 .endr
1237#endif
1238
1239#ifdef CONFIG_EARLY_PRINTK
1240__INIT
1241ENTRY(_early_trap)
1242 SAVE_ALL_SYS
1243 trace_buffer_stop(p0,r0);
1244
1245 ANOMALY_283_315_WORKAROUND(p4, r5)
1246
1247
1248
1249 P4.L = LO(IMEM_CONTROL);
1250 P4.H = HI(IMEM_CONTROL);
1251
1252 R5 = [P4];
1253 BITCLR(R5,ENICPLB_P);
1254 CSYNC;
1255 [P4] = R5;
1256 SSYNC;
1257
1258 P4.L = LO(DMEM_CONTROL);
1259 P4.H = HI(DMEM_CONTROL);
1260 R5 = [P4];
1261 BITCLR(R5,ENDCPLB_P);
1262 CSYNC;
1263 [P4] = R5;
1264 SSYNC;
1265
1266 r0 = sp;
1267 r1 = RETX;
1268
1269 SP += -12;
1270 call _early_trap_c;
1271 SP += 12;
1272ENDPROC(_early_trap)
1273__FINIT
1274#endif
1275
1276
1277
1278
1279
1280
1281#ifdef CONFIG_SYSCALL_TAB_L1
1282.section .l1.data
1283#else
1284.data
1285#endif
1286
1287ENTRY(_ex_table)
1288
1289
1290
1291
1292 .long _ex_syscall
1293 .long _ex_trap_c
1294#ifdef CONFIG_KGDB
1295 .long _ex_trap_c
1296
1297#else
1298 .long _ex_replaceable
1299#endif
1300 .long _ex_trap_c
1301 .long _ex_trap_c
1302 .long _ex_replaceable
1303 .long _ex_replaceable
1304 .long _ex_replaceable
1305 .long _ex_replaceable
1306 .long _ex_replaceable
1307 .long _ex_replaceable
1308 .long _ex_replaceable
1309 .long _ex_replaceable
1310 .long _ex_replaceable
1311 .long _ex_replaceable
1312 .long _ex_replaceable
1313 .long _ex_single_step
1314#ifdef CONFIG_DEBUG_BFIN_HWTRACE_EXPAND
1315 .long _ex_trace_buff_full
1316#else
1317 .long _ex_trap_c
1318#endif
1319 .long _ex_trap_c
1320 .long _ex_trap_c
1321 .long _ex_trap_c
1322 .long _ex_trap_c
1323 .long _ex_trap_c
1324 .long _ex_trap_c
1325 .long _ex_trap_c
1326 .long _ex_trap_c
1327 .long _ex_trap_c
1328 .long _ex_trap_c
1329 .long _ex_trap_c
1330 .long _ex_trap_c
1331 .long _ex_trap_c
1332 .long _ex_trap_c
1333 .long _ex_trap_c
1334 .long _ex_trap_c
1335 .long _ex_trap_c
1336 .long _ex_dviol
1337 .long _ex_trap_c
1338 .long _ex_trap_c
1339 .long _ex_dmiss
1340 .long _ex_dmult
1341 .long _ex_trap_c
1342 .long _ex_trap_c
1343 .long _ex_trap_c
1344 .long _ex_trap_c
1345 .long _ex_icplb_miss
1346 .long _ex_trap_c
1347 .long _ex_trap_c
1348 .long _ex_trap_c
1349 .long _ex_trap_c
1350 .long _ex_trap_c
1351 .long _ex_trap_c
1352 .long _ex_trap_c
1353 .long _ex_trap_c
1354 .long _ex_trap_c
1355 .long _ex_trap_c
1356 .long _ex_trap_c
1357 .long _ex_trap_c
1358 .long _ex_trap_c
1359 .long _ex_trap_c
1360 .long _ex_trap_c
1361 .long _ex_trap_c
1362 .long _ex_trap_c
1363 .long _ex_trap_c
1364 .long _ex_trap_c
1365 .long _ex_trap_c
1366END(_ex_table)
1367
1368ENTRY(_sys_call_table)
1369 .long _sys_restart_syscall
1370 .long _sys_exit
1371 .long _sys_ni_syscall
1372 .long _sys_read
1373 .long _sys_write
1374 .long _sys_open
1375 .long _sys_close
1376 .long _sys_ni_syscall
1377 .long _sys_creat
1378 .long _sys_link
1379 .long _sys_unlink
1380 .long _sys_execve
1381 .long _sys_chdir
1382 .long _sys_time
1383 .long _sys_mknod
1384 .long _sys_chmod
1385 .long _sys_chown
1386 .long _sys_ni_syscall
1387 .long _sys_ni_syscall
1388 .long _sys_lseek
1389 .long _sys_getpid
1390 .long _sys_mount
1391 .long _sys_ni_syscall
1392 .long _sys_setuid
1393 .long _sys_getuid
1394 .long _sys_stime
1395 .long _sys_ptrace
1396 .long _sys_alarm
1397 .long _sys_ni_syscall
1398 .long _sys_pause
1399 .long _sys_ni_syscall
1400 .long _sys_ni_syscall
1401 .long _sys_ni_syscall
1402 .long _sys_access
1403 .long _sys_nice
1404 .long _sys_ni_syscall
1405 .long _sys_sync
1406 .long _sys_kill
1407 .long _sys_rename
1408 .long _sys_mkdir
1409 .long _sys_rmdir
1410 .long _sys_dup
1411 .long _sys_pipe
1412 .long _sys_times
1413 .long _sys_ni_syscall
1414 .long _sys_brk
1415 .long _sys_setgid
1416 .long _sys_getgid
1417 .long _sys_ni_syscall
1418 .long _sys_geteuid
1419 .long _sys_getegid
1420 .long _sys_acct
1421 .long _sys_umount
1422 .long _sys_ni_syscall
1423 .long _sys_ioctl
1424 .long _sys_fcntl
1425 .long _sys_ni_syscall
1426 .long _sys_setpgid
1427 .long _sys_ni_syscall
1428 .long _sys_ni_syscall
1429 .long _sys_umask
1430 .long _sys_chroot
1431 .long _sys_ustat
1432 .long _sys_dup2
1433 .long _sys_getppid
1434 .long _sys_getpgrp
1435 .long _sys_setsid
1436 .long _sys_ni_syscall
1437 .long _sys_sgetmask
1438 .long _sys_ssetmask
1439 .long _sys_setreuid
1440 .long _sys_setregid
1441 .long _sys_ni_syscall
1442 .long _sys_ni_syscall
1443 .long _sys_sethostname
1444 .long _sys_setrlimit
1445 .long _sys_ni_syscall
1446 .long _sys_getrusage
1447 .long _sys_gettimeofday
1448 .long _sys_settimeofday
1449 .long _sys_getgroups
1450 .long _sys_setgroups
1451 .long _sys_ni_syscall
1452 .long _sys_symlink
1453 .long _sys_ni_syscall
1454 .long _sys_readlink
1455 .long _sys_uselib
1456 .long _sys_ni_syscall
1457 .long _sys_reboot
1458 .long _sys_ni_syscall
1459 .long _sys_ni_syscall
1460 .long _sys_munmap
1461 .long _sys_truncate
1462 .long _sys_ftruncate
1463 .long _sys_fchmod
1464 .long _sys_fchown
1465 .long _sys_getpriority
1466 .long _sys_setpriority
1467 .long _sys_ni_syscall
1468 .long _sys_statfs
1469 .long _sys_fstatfs
1470 .long _sys_ni_syscall
1471 .long _sys_ni_syscall
1472 .long _sys_syslog
1473 .long _sys_setitimer
1474 .long _sys_getitimer
1475 .long _sys_newstat
1476 .long _sys_newlstat
1477 .long _sys_newfstat
1478 .long _sys_ni_syscall
1479 .long _sys_ni_syscall
1480 .long _sys_vhangup
1481 .long _sys_ni_syscall
1482 .long _sys_ni_syscall
1483 .long _sys_wait4
1484 .long _sys_ni_syscall
1485 .long _sys_sysinfo
1486 .long _sys_ni_syscall
1487 .long _sys_fsync
1488 .long _sys_ni_syscall
1489 .long _sys_clone
1490 .long _sys_setdomainname
1491 .long _sys_newuname
1492 .long _sys_ni_syscall
1493 .long _sys_adjtimex
1494 .long _sys_mprotect
1495 .long _sys_ni_syscall
1496 .long _sys_ni_syscall
1497 .long _sys_init_module
1498 .long _sys_delete_module
1499 .long _sys_ni_syscall
1500 .long _sys_quotactl
1501 .long _sys_getpgid
1502 .long _sys_fchdir
1503 .long _sys_bdflush
1504 .long _sys_ni_syscall
1505 .long _sys_personality
1506 .long _sys_ni_syscall
1507 .long _sys_setfsuid
1508 .long _sys_setfsgid
1509 .long _sys_llseek
1510 .long _sys_getdents
1511 .long _sys_ni_syscall
1512 .long _sys_flock
1513 .long _sys_msync
1514 .long _sys_readv
1515 .long _sys_writev
1516 .long _sys_getsid
1517 .long _sys_fdatasync
1518 .long _sys_sysctl
1519 .long _sys_mlock
1520 .long _sys_munlock
1521 .long _sys_mlockall
1522 .long _sys_munlockall
1523 .long _sys_sched_setparam
1524 .long _sys_sched_getparam
1525 .long _sys_sched_setscheduler
1526 .long _sys_sched_getscheduler
1527 .long _sys_sched_yield
1528 .long _sys_sched_get_priority_max
1529 .long _sys_sched_get_priority_min
1530 .long _sys_sched_rr_get_interval
1531 .long _sys_nanosleep
1532 .long _sys_mremap
1533 .long _sys_setresuid
1534 .long _sys_getresuid
1535 .long _sys_ni_syscall
1536 .long _sys_ni_syscall
1537 .long _sys_ni_syscall
1538 .long _sys_ni_syscall
1539 .long _sys_setresgid
1540 .long _sys_getresgid
1541 .long _sys_prctl
1542 .long _sys_rt_sigreturn
1543 .long _sys_rt_sigaction
1544 .long _sys_rt_sigprocmask
1545 .long _sys_rt_sigpending
1546 .long _sys_rt_sigtimedwait
1547 .long _sys_rt_sigqueueinfo
1548 .long _sys_rt_sigsuspend
1549 .long _sys_pread64
1550 .long _sys_pwrite64
1551 .long _sys_lchown
1552 .long _sys_getcwd
1553 .long _sys_capget
1554 .long _sys_capset
1555 .long _sys_sigaltstack
1556 .long _sys_sendfile
1557 .long _sys_ni_syscall
1558 .long _sys_ni_syscall
1559 .long _sys_vfork
1560 .long _sys_getrlimit
1561 .long _sys_mmap_pgoff
1562 .long _sys_truncate64
1563 .long _sys_ftruncate64
1564 .long _sys_stat64
1565 .long _sys_lstat64
1566 .long _sys_fstat64
1567 .long _sys_chown
1568 .long _sys_getuid
1569 .long _sys_getgid
1570 .long _sys_geteuid
1571 .long _sys_getegid
1572 .long _sys_setreuid
1573 .long _sys_setregid
1574 .long _sys_getgroups
1575 .long _sys_setgroups
1576 .long _sys_fchown
1577 .long _sys_setresuid
1578 .long _sys_getresuid
1579 .long _sys_setresgid
1580 .long _sys_getresgid
1581 .long _sys_lchown
1582 .long _sys_setuid
1583 .long _sys_setgid
1584 .long _sys_setfsuid
1585 .long _sys_setfsgid
1586 .long _sys_pivot_root
1587 .long _sys_mincore
1588 .long _sys_madvise
1589 .long _sys_getdents64
1590 .long _sys_fcntl64
1591 .long _sys_ni_syscall
1592 .long _sys_ni_syscall
1593 .long _sys_gettid
1594 .long _sys_readahead
1595 .long _sys_setxattr
1596 .long _sys_lsetxattr
1597 .long _sys_fsetxattr
1598 .long _sys_getxattr
1599 .long _sys_lgetxattr
1600 .long _sys_fgetxattr
1601 .long _sys_listxattr
1602 .long _sys_llistxattr
1603 .long _sys_flistxattr
1604 .long _sys_removexattr
1605 .long _sys_lremovexattr
1606 .long _sys_fremovexattr
1607 .long _sys_tkill
1608 .long _sys_sendfile64
1609 .long _sys_futex
1610 .long _sys_sched_setaffinity
1611 .long _sys_sched_getaffinity
1612 .long _sys_ni_syscall
1613 .long _sys_ni_syscall
1614 .long _sys_io_setup
1615 .long _sys_io_destroy
1616 .long _sys_io_getevents
1617 .long _sys_io_submit
1618 .long _sys_io_cancel
1619 .long _sys_ni_syscall
1620 .long _sys_ni_syscall
1621 .long _sys_exit_group
1622 .long _sys_lookup_dcookie
1623 .long _sys_bfin_spinlock
1624 .long _sys_epoll_create
1625 .long _sys_epoll_ctl
1626 .long _sys_epoll_wait
1627 .long _sys_ni_syscall
1628 .long _sys_set_tid_address
1629 .long _sys_timer_create
1630 .long _sys_timer_settime
1631 .long _sys_timer_gettime
1632 .long _sys_timer_getoverrun
1633 .long _sys_timer_delete
1634 .long _sys_clock_settime
1635 .long _sys_clock_gettime
1636 .long _sys_clock_getres
1637 .long _sys_clock_nanosleep
1638 .long _sys_statfs64
1639 .long _sys_fstatfs64
1640 .long _sys_tgkill
1641 .long _sys_utimes
1642 .long _sys_fadvise64_64
1643 .long _sys_ni_syscall
1644 .long _sys_mbind
1645 .long _sys_ni_syscall
1646 .long _sys_ni_syscall
1647 .long _sys_mq_open
1648 .long _sys_mq_unlink
1649 .long _sys_mq_timedsend
1650 .long _sys_mq_timedreceive
1651 .long _sys_mq_notify
1652 .long _sys_mq_getsetattr
1653 .long _sys_ni_syscall
1654 .long _sys_waitid
1655 .long _sys_add_key
1656 .long _sys_request_key
1657 .long _sys_keyctl
1658 .long _sys_ioprio_set
1659 .long _sys_ioprio_get
1660 .long _sys_inotify_init
1661 .long _sys_inotify_add_watch
1662 .long _sys_inotify_rm_watch
1663 .long _sys_ni_syscall
1664 .long _sys_openat
1665 .long _sys_mkdirat
1666 .long _sys_mknodat
1667 .long _sys_fchownat
1668 .long _sys_futimesat
1669 .long _sys_fstatat64
1670 .long _sys_unlinkat
1671 .long _sys_renameat
1672 .long _sys_linkat
1673 .long _sys_symlinkat
1674 .long _sys_readlinkat
1675 .long _sys_fchmodat
1676 .long _sys_faccessat
1677 .long _sys_pselect6
1678 .long _sys_ppoll
1679 .long _sys_unshare
1680 .long _sys_sram_alloc
1681 .long _sys_sram_free
1682 .long _sys_dma_memcpy
1683 .long _sys_accept
1684 .long _sys_bind
1685 .long _sys_connect
1686 .long _sys_getpeername
1687 .long _sys_getsockname
1688 .long _sys_getsockopt
1689 .long _sys_listen
1690 .long _sys_recv
1691 .long _sys_recvfrom
1692 .long _sys_recvmsg
1693 .long _sys_send
1694 .long _sys_sendmsg
1695 .long _sys_sendto
1696 .long _sys_setsockopt
1697 .long _sys_shutdown
1698 .long _sys_socket
1699 .long _sys_socketpair
1700 .long _sys_semctl
1701 .long _sys_semget
1702 .long _sys_semop
1703 .long _sys_msgctl
1704 .long _sys_msgget
1705 .long _sys_msgrcv
1706 .long _sys_msgsnd
1707 .long _sys_shmat
1708 .long _sys_shmctl
1709 .long _sys_shmdt
1710 .long _sys_shmget
1711 .long _sys_splice
1712 .long _sys_sync_file_range
1713 .long _sys_tee
1714 .long _sys_vmsplice
1715 .long _sys_epoll_pwait
1716 .long _sys_utimensat
1717 .long _sys_signalfd
1718 .long _sys_timerfd_create
1719 .long _sys_eventfd
1720 .long _sys_pread64
1721 .long _sys_pwrite64
1722 .long _sys_fadvise64
1723 .long _sys_set_robust_list
1724 .long _sys_get_robust_list
1725 .long _sys_fallocate
1726 .long _sys_semtimedop
1727 .long _sys_timerfd_settime
1728 .long _sys_timerfd_gettime
1729 .long _sys_signalfd4
1730 .long _sys_eventfd2
1731 .long _sys_epoll_create1
1732 .long _sys_dup3
1733 .long _sys_pipe2
1734 .long _sys_inotify_init1
1735 .long _sys_preadv
1736 .long _sys_pwritev
1737 .long _sys_rt_tgsigqueueinfo
1738 .long _sys_perf_event_open
1739 .long _sys_recvmmsg
1740 .long _sys_fanotify_init
1741 .long _sys_fanotify_mark
1742 .long _sys_prlimit64
1743 .long _sys_cacheflush
1744 .long _sys_name_to_handle_at
1745 .long _sys_open_by_handle_at
1746 .long _sys_clock_adjtime
1747 .long _sys_syncfs
1748 .long _sys_setns
1749 .long _sys_sendmmsg
1750 .long _sys_process_vm_readv
1751 .long _sys_process_vm_writev
1752
1753 .rept NR_syscalls-(.-_sys_call_table)/4
1754 .long _sys_ni_syscall
1755 .endr
1756END(_sys_call_table)
1757