1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40#include <asm/asmmacro.h>
41#include <asm/cache.h>
42#include <asm/errno.h>
43#include <asm/kregs.h>
44#include <asm/asm-offsets.h>
45#include <asm/pgtable.h>
46#include <asm/percpu.h>
47#include <asm/processor.h>
48#include <asm/thread_info.h>
49#include <asm/unistd.h>
50#include <asm/ftrace.h>
51
52#include "minstate.h"
53
54#ifdef __IA64_ASM_PARAVIRTUALIZED_NATIVE
55
56
57
58
59ENTRY(ia64_execve)
60
61
62
63 .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)
64 alloc loc1=ar.pfs,8,2,3,0
65 mov loc0=rp
66 .body
67 mov out0=in0
68 ;;
69 mov out1=in1
70 mov out2=in2
71 br.call.sptk.many rp=sys_execve
72.ret0:
73 cmp4.ge p6,p7=r8,r0
74 mov ar.pfs=loc1
75 sxt4 r8=r8
76 ;;
77 stf.spill [sp]=f0
78 mov rp=loc0
79(p6) mov ar.pfs=r0
80(p7) br.ret.sptk.many rp
81
82
83
84
85
86
87
88 mov ar.unat=0; mov ar.lc=0
89 mov r4=0; mov f2=f0; mov b1=r0
90 mov r5=0; mov f3=f0; mov b2=r0
91 mov r6=0; mov f4=f0; mov b3=r0
92 mov r7=0; mov f5=f0; mov b4=r0
93 ldf.fill f12=[sp]; mov f13=f0; mov b5=r0
94 ldf.fill f14=[sp]; ldf.fill f15=[sp]; mov f16=f0
95 ldf.fill f17=[sp]; ldf.fill f18=[sp]; mov f19=f0
96 ldf.fill f20=[sp]; ldf.fill f21=[sp]; mov f22=f0
97 ldf.fill f23=[sp]; ldf.fill f24=[sp]; mov f25=f0
98 ldf.fill f26=[sp]; ldf.fill f27=[sp]; mov f28=f0
99 ldf.fill f29=[sp]; ldf.fill f30=[sp]; mov f31=f0
100 br.ret.sptk.many rp
101END(ia64_execve)
102
103
104
105
106
107GLOBAL_ENTRY(sys_clone2)
108
109
110
111 .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)
112 alloc r16=ar.pfs,8,2,6,0
113 DO_SAVE_SWITCH_STACK
114 adds r2=PT(R16)+IA64_SWITCH_STACK_SIZE+16,sp
115 mov loc0=rp
116 mov loc1=r16
117 .body
118 mov out1=in1
119 mov out2=in2
120 tbit.nz p6,p0=in0,CLONE_SETTLS_BIT
121 mov out3=in3
122 ;;
123(p6) st8 [r2]=in5
124 mov out4=in4
125 mov out0=in0
126 br.call.sptk.many rp=do_fork
127.ret1: .restore sp
128 adds sp=IA64_SWITCH_STACK_SIZE,sp
129 mov ar.pfs=loc1
130 mov rp=loc0
131 br.ret.sptk.many rp
132END(sys_clone2)
133
134
135
136
137
138GLOBAL_ENTRY(sys_clone)
139
140
141
142 .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)
143 alloc r16=ar.pfs,8,2,6,0
144 DO_SAVE_SWITCH_STACK
145 adds r2=PT(R16)+IA64_SWITCH_STACK_SIZE+16,sp
146 mov loc0=rp
147 mov loc1=r16
148 .body
149 mov out1=in1
150 mov out2=16
151 tbit.nz p6,p0=in0,CLONE_SETTLS_BIT
152 mov out3=in2
153 ;;
154(p6) st8 [r2]=in4
155 mov out4=in3
156 mov out0=in0
157 br.call.sptk.many rp=do_fork
158.ret2: .restore sp
159 adds sp=IA64_SWITCH_STACK_SIZE,sp
160 mov ar.pfs=loc1
161 mov rp=loc0
162 br.ret.sptk.many rp
163END(sys_clone)
164#endif
165
166
167
168
169
170
171
172GLOBAL_ENTRY(__paravirt_switch_to)
173 .prologue
174 alloc r16=ar.pfs,1,0,0,0
175 DO_SAVE_SWITCH_STACK
176 .body
177
178 adds r22=IA64_TASK_THREAD_KSP_OFFSET,r13
179 movl r25=init_task
180 mov r27=IA64_KR(CURRENT_STACK)
181 adds r21=IA64_TASK_THREAD_KSP_OFFSET,in0
182 dep r20=0,in0,61,3
183 ;;
184 st8 [r22]=sp
185 shr.u r26=r20,IA64_GRANULE_SHIFT
186 cmp.eq p7,p6=r25,in0
187 ;;
188
189
190
191(p6) cmp.eq p7,p6=r26,r27
192(p6) br.cond.dpnt .map
193 ;;
194.done:
195 ld8 sp=[r21]
196 MOV_TO_KR(CURRENT, in0, r8, r9)
197 mov r8=r13
198 mov r13=in0
199 ;;
200 DO_LOAD_SWITCH_STACK
201
202#ifdef CONFIG_SMP
203 sync.i
204#endif
205 br.ret.sptk.many rp
206
207.map:
208 RSM_PSR_IC(r25)
209 movl r25=PAGE_KERNEL
210 ;;
211 srlz.d
212 or r23=r25,r20
213 mov r25=IA64_GRANULE_SHIFT<<2
214 ;;
215 MOV_TO_ITIR(p0, r25, r8)
216 MOV_TO_IFA(in0, r8)
217 ;;
218 mov r25=IA64_TR_CURRENT_STACK
219 MOV_TO_KR(CURRENT_STACK, r26, r8, r9)
220 ;;
221 itr.d dtr[r25]=r23
222 SSM_PSR_IC_AND_SRLZ_D(r8, r9)
223 br.cond.sptk .done
224END(__paravirt_switch_to)
225
226#ifdef __IA64_ASM_PARAVIRTUALIZED_NATIVE
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243GLOBAL_ENTRY(save_switch_stack)
244 .prologue
245 .altrp b7
246 flushrs
247 .save @priunat,r17
248 mov r17=ar.unat
249 .body
250#ifdef CONFIG_ITANIUM
251 adds r2=16+128,sp
252 adds r3=16+64,sp
253 adds r14=SW(R4)+16,sp
254 ;;
255 st8.spill [r14]=r4,16
256 lfetch.fault.excl.nt1 [r3],128
257 ;;
258 lfetch.fault.excl.nt1 [r2],128
259 lfetch.fault.excl.nt1 [r3],128
260 ;;
261 lfetch.fault.excl [r2]
262 lfetch.fault.excl [r3]
263 adds r15=SW(R5)+16,sp
264#else
265 add r2=16+3*128,sp
266 add r3=16,sp
267 add r14=SW(R4)+16,sp
268 ;;
269 st8.spill [r14]=r4,SW(R6)-SW(R4)
270 lfetch.fault.excl.nt1 [r3],128
271 ;;
272 lfetch.fault.excl.nt1 [r3],128
273 lfetch.fault.excl.nt1 [r2],128
274 ;;
275 lfetch.fault.excl.nt1 [r3]
276 lfetch.fault.excl.nt1 [r2]
277 adds r15=SW(R5)+16,sp
278#endif
279 ;;
280 st8.spill [r15]=r5,SW(R7)-SW(R5)
281 mov.m ar.rsc=0
282 add r2=SW(F2)+16,sp
283 ;;
284 st8.spill [r14]=r6,SW(B0)-SW(R6)
285 mov.m r18=ar.fpsr
286 add r3=SW(F3)+16,sp
287 ;;
288 stf.spill [r2]=f2,32
289 mov.m r19=ar.rnat
290 mov r21=b0
291
292 stf.spill [r3]=f3,32
293 st8.spill [r15]=r7,SW(B2)-SW(R7)
294 mov r22=b1
295 ;;
296
297 mov.m r29=ar.unat
298 mov.m r20=ar.bspstore
299 mov r23=b2
300 stf.spill [r2]=f4,32
301 stf.spill [r3]=f5,32
302 mov r24=b3
303 ;;
304 st8 [r14]=r21,SW(B1)-SW(B0)
305 st8 [r15]=r23,SW(B3)-SW(B2)
306 mov r25=b4
307 mov r26=b5
308 ;;
309 st8 [r14]=r22,SW(B4)-SW(B1)
310 st8 [r15]=r24,SW(AR_PFS)-SW(B3)
311 mov r21=ar.lc
312 stf.spill [r2]=f12,32
313 stf.spill [r3]=f13,32
314 ;;
315 st8 [r14]=r25,SW(B5)-SW(B4)
316 st8 [r15]=r16,SW(AR_LC)-SW(AR_PFS)
317 stf.spill [r2]=f14,32
318 stf.spill [r3]=f15,32
319 ;;
320 st8 [r14]=r26
321 st8 [r15]=r21
322 stf.spill [r2]=f16,32
323 stf.spill [r3]=f17,32
324 ;;
325 stf.spill [r2]=f18,32
326 stf.spill [r3]=f19,32
327 ;;
328 stf.spill [r2]=f20,32
329 stf.spill [r3]=f21,32
330 ;;
331 stf.spill [r2]=f22,32
332 stf.spill [r3]=f23,32
333 ;;
334 stf.spill [r2]=f24,32
335 stf.spill [r3]=f25,32
336 ;;
337 stf.spill [r2]=f26,32
338 stf.spill [r3]=f27,32
339 ;;
340 stf.spill [r2]=f28,32
341 stf.spill [r3]=f29,32
342 ;;
343 stf.spill [r2]=f30,SW(AR_UNAT)-SW(F30)
344 stf.spill [r3]=f31,SW(PR)-SW(F31)
345 add r14=SW(CALLER_UNAT)+16,sp
346 ;;
347 st8 [r2]=r29,SW(AR_RNAT)-SW(AR_UNAT)
348 st8 [r14]=r17,SW(AR_FPSR)-SW(CALLER_UNAT)
349 mov r21=pr
350 ;;
351 st8 [r2]=r19,SW(AR_BSPSTORE)-SW(AR_RNAT)
352 st8 [r3]=r21
353 ;;
354 st8 [r2]=r20
355 st8 [r14]=r18
356 mov ar.rsc=3
357 br.cond.sptk.many b7
358END(save_switch_stack)
359
360
361
362
363
364
365
366GLOBAL_ENTRY(load_switch_stack)
367 .prologue
368 .altrp b7
369
370 .body
371 lfetch.fault.nt1 [sp]
372 adds r2=SW(AR_BSPSTORE)+16,sp
373 adds r3=SW(AR_UNAT)+16,sp
374 mov ar.rsc=0
375 adds r14=SW(CALLER_UNAT)+16,sp
376 adds r15=SW(AR_FPSR)+16,sp
377 ;;
378 ld8 r27=[r2],(SW(B0)-SW(AR_BSPSTORE))
379 ld8 r29=[r3],(SW(B1)-SW(AR_UNAT))
380 ;;
381 ld8 r21=[r2],16
382 ld8 r22=[r3],16
383 ;;
384 ld8 r23=[r2],16
385 ld8 r24=[r3],16
386 ;;
387 ld8 r25=[r2],16
388 ld8 r26=[r3],16
389 ;;
390 ld8 r16=[r2],(SW(PR)-SW(AR_PFS))
391 ld8 r17=[r3],(SW(AR_RNAT)-SW(AR_LC))
392 ;;
393 ld8 r28=[r2]
394 ld8 r30=[r3]
395 ;;
396 ld8 r18=[r14],16
397 ld8 r19=[r15],24
398 ;;
399 ldf.fill f2=[r14],32
400 ldf.fill f3=[r15],32
401 ;;
402 ldf.fill f4=[r14],32
403 ldf.fill f5=[r15],32
404 ;;
405 ldf.fill f12=[r14],32
406 ldf.fill f13=[r15],32
407 ;;
408 ldf.fill f14=[r14],32
409 ldf.fill f15=[r15],32
410 ;;
411 ldf.fill f16=[r14],32
412 ldf.fill f17=[r15],32
413 ;;
414 ldf.fill f18=[r14],32
415 ldf.fill f19=[r15],32
416 mov b0=r21
417 ;;
418 ldf.fill f20=[r14],32
419 ldf.fill f21=[r15],32
420 mov b1=r22
421 ;;
422 ldf.fill f22=[r14],32
423 ldf.fill f23=[r15],32
424 mov b2=r23
425 ;;
426 mov ar.bspstore=r27
427 mov ar.unat=r29
428 mov b3=r24
429 ;;
430 ldf.fill f24=[r14],32
431 ldf.fill f25=[r15],32
432 mov b4=r25
433 ;;
434 ldf.fill f26=[r14],32
435 ldf.fill f27=[r15],32
436 mov b5=r26
437 ;;
438 ldf.fill f28=[r14],32
439 ldf.fill f29=[r15],32
440 mov ar.pfs=r16
441 ;;
442 ldf.fill f30=[r14],32
443 ldf.fill f31=[r15],24
444 mov ar.lc=r17
445 ;;
446 ld8.fill r4=[r14],16
447 ld8.fill r5=[r15],16
448 mov pr=r28,-1
449 ;;
450 ld8.fill r6=[r14],16
451 ld8.fill r7=[r15],16
452
453 mov ar.unat=r18
454 mov ar.rnat=r30
455 mov ar.fpsr=r19
456 mov ar.rsc=3
457 br.cond.sptk.many b7
458END(load_switch_stack)
459
460GLOBAL_ENTRY(prefetch_stack)
461 add r14 = -IA64_SWITCH_STACK_SIZE, sp
462 add r15 = IA64_TASK_THREAD_KSP_OFFSET, in0
463 ;;
464 ld8 r16 = [r15]
465 lfetch.fault.excl [r14], 128
466 ;;
467 lfetch.fault.excl [r14], 128
468 lfetch.fault [r16], 128
469 ;;
470 lfetch.fault.excl [r14], 128
471 lfetch.fault [r16], 128
472 ;;
473 lfetch.fault.excl [r14], 128
474 lfetch.fault [r16], 128
475 ;;
476 lfetch.fault.excl [r14], 128
477 lfetch.fault [r16], 128
478 ;;
479 lfetch.fault [r16], 128
480 br.ret.sptk.many rp
481END(prefetch_stack)
482
483
484
485
486
487
488
489GLOBAL_ENTRY(ia64_trace_syscall)
490 PT_REGS_UNWIND_INFO(0)
491
492
493
494
495 adds r16=PT(F6)+16,sp
496 adds r17=PT(F7)+16,sp
497 ;;
498 stf.spill [r16]=f6,32
499 stf.spill [r17]=f7,32
500 ;;
501 stf.spill [r16]=f8,32
502 stf.spill [r17]=f9,32
503 ;;
504 stf.spill [r16]=f10
505 stf.spill [r17]=f11
506 br.call.sptk.many rp=syscall_trace_enter
507 cmp.lt p6,p0=r8,r0
508 adds r2=PT(R8)+16,sp
509 adds r3=PT(R10)+16,sp
510 mov r10=0
511(p6) br.cond.sptk strace_error
512 adds r16=PT(F6)+16,sp
513 adds r17=PT(F7)+16,sp
514 ;;
515 ldf.fill f6=[r16],32
516 ldf.fill f7=[r17],32
517 ;;
518 ldf.fill f8=[r16],32
519 ldf.fill f9=[r17],32
520 ;;
521 ldf.fill f10=[r16]
522 ldf.fill f11=[r17]
523
524
525 adds r15=PT(R15)+16,sp
526 ;;
527 ld8 r15=[r15]
528 mov r3=NR_syscalls - 1
529 ;;
530 adds r15=-1024,r15
531 movl r16=sys_call_table
532 ;;
533 shladd r20=r15,3,r16
534 cmp.leu p6,p7=r15,r3
535 ;;
536(p6) ld8 r20=[r20]
537(p7) movl r20=sys_ni_syscall
538 ;;
539 mov b6=r20
540 br.call.sptk.many rp=b6
541.strace_check_retval:
542 cmp.lt p6,p0=r8,r0
543 adds r2=PT(R8)+16,sp
544 adds r3=PT(R10)+16,sp
545 mov r10=0
546(p6) br.cond.sptk strace_error
547 ;;
548.strace_save_retval:
549.mem.offset 0,0; st8.spill [r2]=r8
550.mem.offset 8,0; st8.spill [r3]=r10
551 br.call.sptk.many rp=syscall_trace_leave
552.ret3:
553(pUStk) cmp.eq.unc p6,p0=r0,r0
554(pUStk) rsm psr.i
555 br.cond.sptk ia64_work_pending_syscall_end
556
557strace_error:
558 ld8 r3=[r2]
559 sub r9=0,r8
560 ;;
561 cmp.ne p6,p0=r3,r0
562 adds r3=16,r2
563 ;;
564(p6) mov r10=-1
565(p6) mov r8=r9
566 br.cond.sptk .strace_save_retval
567END(ia64_trace_syscall)
568
569
570
571
572
573GLOBAL_ENTRY(ia64_strace_leave_kernel)
574 PT_REGS_UNWIND_INFO(0)
575{
576
577
578
579 nop.m 0
580 nop.i 0
581 br.call.sptk.many rp=syscall_trace_leave
582}
583.ret4: br.cond.sptk ia64_leave_kernel
584END(ia64_strace_leave_kernel)
585
586ENTRY(call_payload)
587 .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(0)
588
589 alloc loc1=ar.pfs,0,3,1,0
590 mov loc0=rp
591 mov loc2=gp
592 mov out0=r5
593 ld8 r14 = [r4], 8
594 ;;
595 mov b6 = r14
596 ld8 gp = [r4]
597 ;;
598 br.call.sptk.many rp=b6
599.ret12: mov gp=loc2
600 mov rp=loc0
601 mov ar.pfs=loc1
602
603 cmp.ne pKStk,pUStk=r0,r0
604 br.ret.sptk.many rp
605END(call_payload)
606
607GLOBAL_ENTRY(ia64_ret_from_clone)
608 PT_REGS_UNWIND_INFO(0)
609{
610
611
612
613 nop.m 0
614 nop.i 0
615
616
617
618
619
620 br.call.sptk.many rp=ia64_invoke_schedule_tail
621}
622.ret8:
623(pKStk) br.call.sptk.many rp=call_payload
624 adds r2=TI_FLAGS+IA64_TASK_SIZE,r13
625 ;;
626 ld4 r2=[r2]
627 ;;
628 mov r8=0
629 and r2=_TIF_SYSCALL_TRACEAUDIT,r2
630 ;;
631 cmp.ne p6,p0=r2,r0
632(p6) br.cond.spnt .strace_check_retval
633 ;;
634END(ia64_ret_from_clone)
635
636GLOBAL_ENTRY(ia64_ret_from_syscall)
637 PT_REGS_UNWIND_INFO(0)
638 cmp.ge p6,p7=r8,r0
639 adds r2=PT(R8)+16,sp
640 mov r10=r0
641(p7) br.cond.spnt handle_syscall_error
642#ifdef CONFIG_PARAVIRT
643 ;;
644 br.cond.sptk.few ia64_leave_syscall
645 ;;
646#endif
647END(ia64_ret_from_syscall)
648#ifndef CONFIG_PARAVIRT
649
650#endif
651#endif
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697GLOBAL_ENTRY(__paravirt_leave_syscall)
698 PT_REGS_UNWIND_INFO(0)
699
700
701
702
703
704
705
706
707
708
709
710#ifdef CONFIG_PREEMPT
711 RSM_PSR_I(p0, r2, r18)
712 cmp.eq pLvSys,p0=r0,r0
713(pKStk) adds r20=TI_PRE_COUNT+IA64_TASK_SIZE,r13
714 ;;
715 .pred.rel.mutex pUStk,pKStk
716(pKStk) ld4 r21=[r20]
717(pUStk) mov r21=0
718 ;;
719 cmp.eq p6,p0=r21,r0
720#else
721 RSM_PSR_I(pUStk, r2, r18)
722 cmp.eq pLvSys,p0=r0,r0
723(pUStk) cmp.eq.unc p6,p0=r0,r0
724#endif
725.global __paravirt_work_processed_syscall;
726__paravirt_work_processed_syscall:
727#ifdef CONFIG_VIRT_CPU_ACCOUNTING
728 adds r2=PT(LOADRS)+16,r12
729 MOV_FROM_ITC(pUStk, p9, r22, r19)
730 adds r18=TI_FLAGS+IA64_TASK_SIZE,r13
731 ;;
732(p6) ld4 r31=[r18]
733 ld8 r19=[r2],PT(B6)-PT(LOADRS)
734 adds r3=PT(AR_BSPSTORE)+16,r12
735 ;;
736#else
737 adds r2=PT(LOADRS)+16,r12
738 adds r3=PT(AR_BSPSTORE)+16,r12
739 adds r18=TI_FLAGS+IA64_TASK_SIZE,r13
740 ;;
741(p6) ld4 r31=[r18]
742 ld8 r19=[r2],PT(B6)-PT(LOADRS)
743 nop.i 0
744 ;;
745#endif
746 mov r16=ar.bsp
747 ld8 r18=[r2],PT(R9)-PT(B6)
748(p6) and r15=TIF_WORK_MASK,r31
749 ;;
750 ld8 r23=[r3],PT(R11)-PT(AR_BSPSTORE)
751(p6) cmp4.ne.unc p6,p0=r15, r0
752(p6) br.cond.spnt .work_pending_syscall
753 ;;
754
755 ld8 r9=[r2],PT(CR_IPSR)-PT(R9)
756 ld8 r11=[r3],PT(CR_IIP)-PT(R11)
757(pNonSys) break 0
758 ;;
759 invala
760 RSM_PSR_I_IC(r28, r29, r30)
761 cmp.eq p9,p0=r0,r0
762
763 ld8 r29=[r2],16
764 ld8 r28=[r3],16
765#ifdef CONFIG_VIRT_CPU_ACCOUNTING
766(pUStk) add r14=TI_AC_LEAVE+IA64_TASK_SIZE,r13
767 ;;
768 ld8 r30=[r2],16
769 ld8 r25=[r3],16
770(pUStk) add r15=IA64_TASK_THREAD_ON_USTACK_OFFSET,r13
771 ;;
772#else
773 mov r22=r0
774 ;;
775 ld8 r30=[r2],16
776 ld8 r25=[r3],16
777(pUStk) add r14=IA64_TASK_THREAD_ON_USTACK_OFFSET,r13
778 ;;
779#endif
780 ld8 r26=[r2],PT(B0)-PT(AR_PFS)
781 MOV_FROM_PSR(pKStk, r22, r21)
782 nop 0
783 ;;
784 ld8 r21=[r2],PT(AR_RNAT)-PT(B0)
785 ld8 r27=[r3],PT(PR)-PT(AR_RSC)
786 mov f6=f0
787 ;;
788 ld8 r24=[r2],PT(AR_FPSR)-PT(AR_RNAT)
789 ld8 r31=[r3],PT(R1)-PT(PR)
790 mov f7=f0
791 ;;
792 ld8 r20=[r2],PT(R12)-PT(AR_FPSR)
793 ld8.fill r1=[r3],16
794(pUStk) mov r17=1
795 ;;
796#ifdef CONFIG_VIRT_CPU_ACCOUNTING
797(pUStk) st1 [r15]=r17
798#else
799(pUStk) st1 [r14]=r17
800#endif
801 ld8.fill r13=[r3],16
802 mov f8=f0
803 ;;
804 ld8.fill r12=[r2]
805 ld8.fill r15=[r3]
806 mov b6=r18
807
808 LOAD_PHYS_STACK_REG_SIZE(r17)
809 mov f9=f0
810(pKStk) br.cond.dpnt.many skip_rbs_switch
811
812 srlz.d
813 shr.u r18=r19,16
814 COVER
815 ;;
816#ifdef CONFIG_VIRT_CPU_ACCOUNTING
817 mov r19=ar.bsp
818 st8 [r14]=r22
819 mov f10=f0
820
821 mov r22=r0
822 movl r14=__kernel_syscall_via_epc
823 ;;
824#else
825 mov r19=ar.bsp
826 mov f10=f0
827
828 nop.m 0
829 movl r14=__kernel_syscall_via_epc
830 ;;
831#endif
832 mov.m ar.csd=r0
833 mov.m ar.ccv=r0
834 mov b7=r14
835
836 mov.m ar.ssd=r0
837 mov f11=f0
838 br.cond.sptk.many rbs_switch
839END(__paravirt_leave_syscall)
840
841GLOBAL_ENTRY(__paravirt_leave_kernel)
842 PT_REGS_UNWIND_INFO(0)
843
844
845
846
847
848
849
850
851
852
853
854#ifdef CONFIG_PREEMPT
855 RSM_PSR_I(p0, r17, r31)
856 cmp.eq p0,pLvSys=r0,r0
857(pKStk) adds r20=TI_PRE_COUNT+IA64_TASK_SIZE,r13
858 ;;
859 .pred.rel.mutex pUStk,pKStk
860(pKStk) ld4 r21=[r20]
861(pUStk) mov r21=0
862 ;;
863 cmp.eq p6,p0=r21,r0
864#else
865 RSM_PSR_I(pUStk, r17, r31)
866 cmp.eq p0,pLvSys=r0,r0
867(pUStk) cmp.eq.unc p6,p0=r0,r0
868#endif
869.work_processed_kernel:
870 adds r17=TI_FLAGS+IA64_TASK_SIZE,r13
871 ;;
872(p6) ld4 r31=[r17]
873 adds r21=PT(PR)+16,r12
874 ;;
875
876 lfetch [r21],PT(CR_IPSR)-PT(PR)
877 adds r2=PT(B6)+16,r12
878 adds r3=PT(R16)+16,r12
879 ;;
880 lfetch [r21]
881 ld8 r28=[r2],8
882 adds r29=PT(R24)+16,r12
883
884 ld8.fill r16=[r3],PT(AR_CSD)-PT(R16)
885 adds r30=PT(AR_CCV)+16,r12
886(p6) and r19=TIF_WORK_MASK,r31
887 ;;
888 ld8.fill r24=[r29]
889 ld8 r15=[r30]
890(p6) cmp4.ne.unc p6,p0=r19, r0
891 ;;
892 ld8 r29=[r2],16
893 ld8 r30=[r3],16
894(p6) br.cond.spnt .work_pending
895 ;;
896 ld8 r31=[r2],16
897 ld8.fill r8=[r3],16
898 ;;
899 ld8.fill r9=[r2],16
900 ld8.fill r10=[r3],PT(R17)-PT(R10)
901 ;;
902 ld8.fill r11=[r2],PT(R18)-PT(R11)
903 ld8.fill r17=[r3],16
904 ;;
905 ld8.fill r18=[r2],16
906 ld8.fill r19=[r3],16
907 ;;
908 ld8.fill r20=[r2],16
909 ld8.fill r21=[r3],16
910 mov ar.csd=r30
911 mov ar.ssd=r31
912 ;;
913 RSM_PSR_I_IC(r23, r22, r25)
914 invala
915 ;;
916 ld8.fill r22=[r2],24
917 ld8.fill r23=[r3],24
918 mov b6=r28
919 ;;
920 ld8.fill r25=[r2],16
921 ld8.fill r26=[r3],16
922 mov b7=r29
923 ;;
924 ld8.fill r27=[r2],16
925 ld8.fill r28=[r3],16
926 ;;
927 ld8.fill r29=[r2],16
928 ld8.fill r30=[r3],24
929 ;;
930 ld8.fill r31=[r2],PT(F9)-PT(R31)
931 adds r3=PT(F10)-PT(F6),r3
932 ;;
933 ldf.fill f9=[r2],PT(F6)-PT(F9)
934 ldf.fill f10=[r3],PT(F8)-PT(F10)
935 ;;
936 ldf.fill f6=[r2],PT(F7)-PT(F6)
937 ;;
938 ldf.fill f7=[r2],PT(F11)-PT(F7)
939 ldf.fill f8=[r3],32
940 ;;
941 srlz.d
942 mov ar.ccv=r15
943 ;;
944 ldf.fill f11=[r2]
945 BSW_0(r2, r3, r15)
946 ;;
947(pUStk) mov r18=IA64_KR(CURRENT)
948 adds r16=PT(CR_IPSR)+16,r12
949 adds r17=PT(CR_IIP)+16,r12
950
951#ifdef CONFIG_VIRT_CPU_ACCOUNTING
952 .pred.rel.mutex pUStk,pKStk
953 MOV_FROM_PSR(pKStk, r22, r29)
954 MOV_FROM_ITC(pUStk, p9, r22, r29)
955 nop.i 0
956 ;;
957#else
958 MOV_FROM_PSR(pKStk, r22, r29)
959 nop.i 0
960 nop.i 0
961 ;;
962#endif
963 ld8 r29=[r16],16
964 ld8 r28=[r17],16
965 ;;
966 ld8 r30=[r16],16
967 ld8 r25=[r17],16
968 ;;
969 ld8 r26=[r16],16
970 ld8 r27=[r17],16
971 cmp.eq p9,p0=r0,r0
972 ;;
973 ld8 r24=[r16],16
974 ld8 r23=[r17],16
975 ;;
976 ld8 r31=[r16],16
977 ld8 r21=[r17],16
978 ;;
979 ld8 r19=[r16],16
980 ld8.fill r1=[r17],16
981 ;;
982 ld8.fill r12=[r16],16
983 ld8.fill r13=[r17],16
984#ifdef CONFIG_VIRT_CPU_ACCOUNTING
985(pUStk) adds r3=TI_AC_LEAVE+IA64_TASK_SIZE,r18
986#else
987(pUStk) adds r18=IA64_TASK_THREAD_ON_USTACK_OFFSET,r18
988#endif
989 ;;
990 ld8 r20=[r16],16
991 ld8.fill r15=[r17],16
992#ifdef CONFIG_VIRT_CPU_ACCOUNTING
993(pUStk) adds r18=IA64_TASK_THREAD_ON_USTACK_OFFSET,r18
994#endif
995 ;;
996 ld8.fill r14=[r16],16
997 ld8.fill r2=[r17]
998(pUStk) mov r17=1
999 ;;
1000#ifdef CONFIG_VIRT_CPU_ACCOUNTING
1001
1002
1003
1004
1005
1006(pUStk) st8 [r3]=r22
1007(pUStk) st1 [r18]=r17
1008 shr.u r18=r19,16
1009 ;;
1010 ld8.fill r3=[r16]
1011 LOAD_PHYS_STACK_REG_SIZE(r17)
1012(pKStk) br.cond.dpnt skip_rbs_switch
1013 mov r16=ar.bsp
1014#else
1015 ld8.fill r3=[r16]
1016(pUStk) st1 [r18]=r17
1017 shr.u r18=r19,16
1018 ;;
1019 mov r16=ar.bsp
1020 LOAD_PHYS_STACK_REG_SIZE(r17)
1021(pKStk) br.cond.dpnt skip_rbs_switch
1022#endif
1023
1024
1025
1026
1027
1028
1029(pNonSys) br.cond.dpnt dont_preserve_current_frame
1030 COVER
1031 ;;
1032 mov r19=ar.bsp
1033rbs_switch:
1034 sub r16=r16,r18
1035 cmp.ne p9,p0=r0,r0
1036 ;;
1037 sub r19=r19,r16
1038 add r18=64,r18
1039 ;;
1040 shl r19=r19,16
1041 ;;
1042dont_preserve_current_frame:
1043
1044
1045
1046
1047
1048
1049# define pRecurse p6
1050# define pReturn p7
1051#ifdef CONFIG_ITANIUM
1052# define Nregs 10
1053#else
1054# define Nregs 14
1055#endif
1056 alloc loc0=ar.pfs,2,Nregs-2,2,0
1057 shr.u loc1=r18,9
1058 sub r17=r17,r18
1059 ;;
1060 mov ar.rsc=r19
1061 shladd in0=loc1,3,r17
1062 mov in1=0
1063 ;;
1064 TEXT_ALIGN(32)
1065rse_clear_invalid:
1066#ifdef CONFIG_ITANIUM
1067
1068 { .mii
1069 alloc loc0=ar.pfs,2,Nregs-2,2,0
1070 cmp.lt pRecurse,p0=Nregs*8,in0
1071 add out0=-Nregs*8,in0
1072}{ .mfb
1073 add out1=1,in1
1074 nop.f 0
1075 nop.b 0
1076 ;;
1077}{ .mfi
1078 mov loc1=0
1079 nop.f 0
1080 mov loc2=0
1081}{ .mib
1082 mov loc3=0
1083 mov loc4=0
1084(pRecurse) br.call.sptk.many b0=rse_clear_invalid
1085
1086}{ .mfi
1087 mov loc5=0
1088 nop.f 0
1089 cmp.ne pReturn,p0=r0,in1
1090}{ .mib
1091 mov loc6=0
1092 mov loc7=0
1093(pReturn) br.ret.sptk.many b0
1094}
1095#else
1096 alloc loc0=ar.pfs,2,Nregs-2,2,0
1097 cmp.lt pRecurse,p0=Nregs*8,in0
1098 add out0=-Nregs*8,in0
1099 add out1=1,in1
1100 mov loc1=0
1101 mov loc2=0
1102 ;;
1103 mov loc3=0
1104 mov loc4=0
1105 mov loc5=0
1106 mov loc6=0
1107 mov loc7=0
1108(pRecurse) br.call.dptk.few b0=rse_clear_invalid
1109 ;;
1110 mov loc8=0
1111 mov loc9=0
1112 cmp.ne pReturn,p0=r0,in1
1113 mov loc10=0
1114 mov loc11=0
1115(pReturn) br.ret.dptk.many b0
1116#endif
1117# undef pRecurse
1118# undef pReturn
1119 ;;
1120 alloc r17=ar.pfs,0,0,0,0
1121 ;;
1122 loadrs
1123 ;;
1124skip_rbs_switch:
1125 mov ar.unat=r25
1126(pKStk) extr.u r22=r22,21,1
1127(pLvSys)mov r19=r0
1128 ;;
1129(pUStk) mov ar.bspstore=r23
1130(pKStk) dep r29=r22,r29,21,1
1131(pLvSys)mov r16=r0
1132 ;;
1133 MOV_TO_IPSR(p0, r29, r25)
1134 mov ar.pfs=r26
1135(pLvSys)mov r17=r0
1136
1137 MOV_TO_IFS(p9, r30, r25)
1138 mov b0=r21
1139(pLvSys)mov r18=r0
1140
1141 mov ar.fpsr=r20
1142 MOV_TO_IIP(r28, r25)
1143 nop 0
1144 ;;
1145(pUStk) mov ar.rnat=r24
1146 nop 0
1147(pLvSys)mov r2=r0
1148
1149 mov ar.rsc=r27
1150 mov pr=r31,-1
1151 RFI
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163.work_pending_syscall:
1164 add r2=-8,r2
1165 add r3=-8,r3
1166 ;;
1167 st8 [r2]=r8
1168 st8 [r3]=r10
1169.work_pending:
1170 tbit.z p6,p0=r31,TIF_NEED_RESCHED
1171(p6) br.cond.sptk.few .notify
1172#ifdef CONFIG_PREEMPT
1173(pKStk) dep r21=-1,r0,PREEMPT_ACTIVE_BIT,1
1174 ;;
1175(pKStk) st4 [r20]=r21
1176#endif
1177 SSM_PSR_I(p0, p6, r2)
1178 br.call.spnt.many rp=schedule
1179.ret9: cmp.eq p6,p0=r0,r0
1180 RSM_PSR_I(p0, r2, r20)
1181 ;;
1182#ifdef CONFIG_PREEMPT
1183(pKStk) adds r20=TI_PRE_COUNT+IA64_TASK_SIZE,r13
1184 ;;
1185(pKStk) st4 [r20]=r0
1186#endif
1187(pLvSys)br.cond.sptk.few __paravirt_pending_syscall_end
1188 br.cond.sptk.many .work_processed_kernel
1189
1190.notify:
1191(pUStk) br.call.spnt.many rp=notify_resume_user
1192.ret10: cmp.ne p6,p0=r0,r0
1193(pLvSys)br.cond.sptk.few __paravirt_pending_syscall_end
1194 br.cond.sptk.many .work_processed_kernel
1195
1196.global __paravirt_pending_syscall_end;
1197__paravirt_pending_syscall_end:
1198 adds r2=PT(R8)+16,r12
1199 adds r3=PT(R10)+16,r12
1200 ;;
1201 ld8 r8=[r2]
1202 ld8 r10=[r3]
1203 br.cond.sptk.many __paravirt_work_processed_syscall_target
1204END(__paravirt_leave_kernel)
1205
1206#ifdef __IA64_ASM_PARAVIRTUALIZED_NATIVE
1207ENTRY(handle_syscall_error)
1208
1209
1210
1211
1212
1213
1214 PT_REGS_UNWIND_INFO(0)
1215 ld8 r3=[r2]
1216 ;;
1217 cmp.eq p6,p7=r3,r0
1218 ;;
1219(p7) mov r10=-1
1220(p7) sub r8=0,r8
1221 br.cond.sptk ia64_leave_syscall
1222END(handle_syscall_error)
1223
1224
1225
1226
1227
1228GLOBAL_ENTRY(ia64_invoke_schedule_tail)
1229 .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)
1230 alloc loc1=ar.pfs,8,2,1,0
1231 mov loc0=rp
1232 mov out0=r8
1233 ;;
1234 br.call.sptk.many rp=schedule_tail
1235.ret11: mov ar.pfs=loc1
1236 mov rp=loc0
1237 br.ret.sptk.many rp
1238END(ia64_invoke_schedule_tail)
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248GLOBAL_ENTRY(notify_resume_user)
1249 .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)
1250 alloc loc1=ar.pfs,8,2,3,0
1251 mov r9=ar.unat
1252 mov loc0=rp
1253 mov out0=0
1254 adds out1=8,sp
1255(pSys) mov out2=1
1256 ;;
1257(pNonSys) mov out2=0
1258 .fframe 16
1259 .spillsp ar.unat, 16
1260 st8 [sp]=r9,-16
1261 st8 [out1]=loc1,-8
1262 .body
1263 br.call.sptk.many rp=do_notify_resume_user
1264.ret15: .restore sp
1265 adds sp=16,sp
1266 ;;
1267 ld8 r9=[sp]
1268 mov rp=loc0
1269 ;;
1270 mov ar.unat=r9
1271 mov ar.pfs=loc1
1272 br.ret.sptk.many rp
1273END(notify_resume_user)
1274
1275ENTRY(sys_rt_sigreturn)
1276 PT_REGS_UNWIND_INFO(0)
1277
1278
1279
1280 alloc r2=ar.pfs,8,0,1,0
1281 .prologue
1282 PT_REGS_SAVES(16)
1283 adds sp=-16,sp
1284 .body
1285 cmp.eq pNonSys,pSys=r0,r0
1286 ;;
1287
1288
1289
1290
1291
1292
1293 adds r16=PT(F6)+32,sp
1294 adds r17=PT(F7)+32,sp
1295 ;;
1296 stf.spill [r16]=f6,32
1297 stf.spill [r17]=f7,32
1298 ;;
1299 stf.spill [r16]=f8,32
1300 stf.spill [r17]=f9,32
1301 ;;
1302 stf.spill [r16]=f10
1303 stf.spill [r17]=f11
1304 adds out0=16,sp
1305 br.call.sptk.many rp=ia64_rt_sigreturn
1306.ret19: .restore sp,0
1307 adds sp=16,sp
1308 ;;
1309 ld8 r9=[sp]
1310 mov.sptk b7=r8,ia64_native_leave_kernel
1311 ;;
1312 mov ar.unat=r9
1313 br.many b7
1314END(sys_rt_sigreturn)
1315
1316GLOBAL_ENTRY(ia64_prepare_handle_unaligned)
1317 .prologue
1318
1319
1320
1321 mov r16=r0
1322 DO_SAVE_SWITCH_STACK
1323 br.call.sptk.many rp=ia64_handle_unaligned
1324.ret21: .body
1325 DO_LOAD_SWITCH_STACK
1326 br.cond.sptk.many rp
1327END(ia64_prepare_handle_unaligned)
1328
1329
1330
1331
1332# define EXTRA_FRAME_SIZE ((UNW_FRAME_INFO_SIZE+15)&~15)
1333
1334GLOBAL_ENTRY(unw_init_running)
1335 .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2)
1336 alloc loc1=ar.pfs,2,3,3,0
1337 ;;
1338 ld8 loc2=[in0],8
1339 mov loc0=rp
1340 mov r16=loc1
1341 DO_SAVE_SWITCH_STACK
1342 .body
1343
1344 .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2)
1345 .fframe IA64_SWITCH_STACK_SIZE+EXTRA_FRAME_SIZE
1346 SWITCH_STACK_SAVES(EXTRA_FRAME_SIZE)
1347 adds sp=-EXTRA_FRAME_SIZE,sp
1348 .body
1349 ;;
1350 adds out0=16,sp
1351 mov out1=r13
1352 adds out2=16+EXTRA_FRAME_SIZE,sp
1353 br.call.sptk.many rp=unw_init_frame_info
13541: adds out0=16,sp
1355 mov b6=loc2
1356 mov loc2=gp
1357 ;;
1358 ld8 gp=[in0]
1359 mov out1=in1
1360 br.call.sptk.many rp=b6
13611: mov gp=loc2
1362
1363
1364
1365
1366 .restore sp
1367 adds sp=IA64_SWITCH_STACK_SIZE+EXTRA_FRAME_SIZE,sp
1368
1369 mov ar.pfs=loc1
1370 mov rp=loc0
1371 br.ret.sptk.many rp
1372END(unw_init_running)
1373
1374#ifdef CONFIG_FUNCTION_TRACER
1375#ifdef CONFIG_DYNAMIC_FTRACE
1376GLOBAL_ENTRY(_mcount)
1377 br ftrace_stub
1378END(_mcount)
1379
1380.here:
1381 br.ret.sptk.many b0
1382
1383GLOBAL_ENTRY(ftrace_caller)
1384 alloc out0 = ar.pfs, 8, 0, 4, 0
1385 mov out3 = r0
1386 ;;
1387 mov out2 = b0
1388 add r3 = 0x20, r3
1389 mov out1 = r1;
1390 br.call.sptk.many b0 = ftrace_patch_gp
1391
1392ftrace_patch_gp:
1393 movl gp=__gp
1394 mov b0 = r3
1395 ;;
1396.global ftrace_call;
1397ftrace_call:
1398{
1399 .mlx
1400 nop.m 0x0
1401 movl r3 = .here;;
1402}
1403 alloc loc0 = ar.pfs, 4, 4, 2, 0
1404 ;;
1405 mov loc1 = b0
1406 mov out0 = b0
1407 mov loc2 = r8
1408 mov loc3 = r15
1409 ;;
1410 adds out0 = -MCOUNT_INSN_SIZE, out0
1411 mov out1 = in2
1412 mov b6 = r3
1413
1414 br.call.sptk.many b0 = b6
1415 ;;
1416 mov ar.pfs = loc0
1417 mov b0 = loc1
1418 mov r8 = loc2
1419 mov r15 = loc3
1420 br ftrace_stub
1421 ;;
1422END(ftrace_caller)
1423
1424#else
1425GLOBAL_ENTRY(_mcount)
1426 movl r2 = ftrace_stub
1427 movl r3 = ftrace_trace_function;;
1428 ld8 r3 = [r3];;
1429 ld8 r3 = [r3];;
1430 cmp.eq p7,p0 = r2, r3
1431(p7) br.sptk.many ftrace_stub
1432 ;;
1433
1434 alloc loc0 = ar.pfs, 4, 4, 2, 0
1435 ;;
1436 mov loc1 = b0
1437 mov out0 = b0
1438 mov loc2 = r8
1439 mov loc3 = r15
1440 ;;
1441 adds out0 = -MCOUNT_INSN_SIZE, out0
1442 mov out1 = in2
1443 mov b6 = r3
1444
1445 br.call.sptk.many b0 = b6
1446 ;;
1447 mov ar.pfs = loc0
1448 mov b0 = loc1
1449 mov r8 = loc2
1450 mov r15 = loc3
1451 br ftrace_stub
1452 ;;
1453END(_mcount)
1454#endif
1455
1456GLOBAL_ENTRY(ftrace_stub)
1457 mov r3 = b0
1458 movl r2 = _mcount_ret_helper
1459 ;;
1460 mov b6 = r2
1461 mov b7 = r3
1462 br.ret.sptk.many b6
1463
1464_mcount_ret_helper:
1465 mov b0 = r42
1466 mov r1 = r41
1467 mov ar.pfs = r40
1468 br b7
1469END(ftrace_stub)
1470
1471#endif
1472
1473 .rodata
1474 .align 8
1475 .globl sys_call_table
1476sys_call_table:
1477 data8 sys_ni_syscall
1478 data8 sys_exit
1479 data8 sys_read
1480 data8 sys_write
1481 data8 sys_open
1482 data8 sys_close
1483 data8 sys_creat
1484 data8 sys_link
1485 data8 sys_unlink
1486 data8 ia64_execve
1487 data8 sys_chdir
1488 data8 sys_fchdir
1489 data8 sys_utimes
1490 data8 sys_mknod
1491 data8 sys_chmod
1492 data8 sys_chown
1493 data8 sys_lseek
1494 data8 sys_getpid
1495 data8 sys_getppid
1496 data8 sys_mount
1497 data8 sys_umount
1498 data8 sys_setuid
1499 data8 sys_getuid
1500 data8 sys_geteuid
1501 data8 sys_ptrace
1502 data8 sys_access
1503 data8 sys_sync
1504 data8 sys_fsync
1505 data8 sys_fdatasync
1506 data8 sys_kill
1507 data8 sys_rename
1508 data8 sys_mkdir
1509 data8 sys_rmdir
1510 data8 sys_dup
1511 data8 sys_ia64_pipe
1512 data8 sys_times
1513 data8 ia64_brk
1514 data8 sys_setgid
1515 data8 sys_getgid
1516 data8 sys_getegid
1517 data8 sys_acct
1518 data8 sys_ioctl
1519 data8 sys_fcntl
1520 data8 sys_umask
1521 data8 sys_chroot
1522 data8 sys_ustat
1523 data8 sys_dup2
1524 data8 sys_setreuid
1525 data8 sys_setregid
1526 data8 sys_getresuid
1527 data8 sys_setresuid
1528 data8 sys_getresgid
1529 data8 sys_setresgid
1530 data8 sys_getgroups
1531 data8 sys_setgroups
1532 data8 sys_getpgid
1533 data8 sys_setpgid
1534 data8 sys_setsid
1535 data8 sys_getsid
1536 data8 sys_sethostname
1537 data8 sys_setrlimit
1538 data8 sys_getrlimit
1539 data8 sys_getrusage
1540 data8 sys_gettimeofday
1541 data8 sys_settimeofday
1542 data8 sys_select
1543 data8 sys_poll
1544 data8 sys_symlink
1545 data8 sys_readlink
1546 data8 sys_uselib
1547 data8 sys_swapon
1548 data8 sys_swapoff
1549 data8 sys_reboot
1550 data8 sys_truncate
1551 data8 sys_ftruncate
1552 data8 sys_fchmod
1553 data8 sys_fchown
1554 data8 ia64_getpriority
1555 data8 sys_setpriority
1556 data8 sys_statfs
1557 data8 sys_fstatfs
1558 data8 sys_gettid
1559 data8 sys_semget
1560 data8 sys_semop
1561 data8 sys_semctl
1562 data8 sys_msgget
1563 data8 sys_msgsnd
1564 data8 sys_msgrcv
1565 data8 sys_msgctl
1566 data8 sys_shmget
1567 data8 sys_shmat
1568 data8 sys_shmdt
1569 data8 sys_shmctl
1570 data8 sys_syslog
1571 data8 sys_setitimer
1572 data8 sys_getitimer
1573 data8 sys_ni_syscall
1574 data8 sys_ni_syscall
1575 data8 sys_ni_syscall
1576 data8 sys_vhangup
1577 data8 sys_lchown
1578 data8 sys_remap_file_pages
1579 data8 sys_wait4
1580 data8 sys_sysinfo
1581 data8 sys_clone
1582 data8 sys_setdomainname
1583 data8 sys_newuname
1584 data8 sys_adjtimex
1585 data8 sys_ni_syscall
1586 data8 sys_init_module
1587 data8 sys_delete_module
1588 data8 sys_ni_syscall
1589 data8 sys_ni_syscall
1590 data8 sys_quotactl
1591 data8 sys_bdflush
1592 data8 sys_sysfs
1593 data8 sys_personality
1594 data8 sys_ni_syscall
1595 data8 sys_setfsuid
1596 data8 sys_setfsgid
1597 data8 sys_getdents
1598 data8 sys_flock
1599 data8 sys_readv
1600 data8 sys_writev
1601 data8 sys_pread64
1602 data8 sys_pwrite64
1603 data8 sys_sysctl
1604 data8 sys_mmap
1605 data8 sys_munmap
1606 data8 sys_mlock
1607 data8 sys_mlockall
1608 data8 sys_mprotect
1609 data8 ia64_mremap
1610 data8 sys_msync
1611 data8 sys_munlock
1612 data8 sys_munlockall
1613 data8 sys_sched_getparam
1614 data8 sys_sched_setparam
1615 data8 sys_sched_getscheduler
1616 data8 sys_sched_setscheduler
1617 data8 sys_sched_yield
1618 data8 sys_sched_get_priority_max
1619 data8 sys_sched_get_priority_min
1620 data8 sys_sched_rr_get_interval
1621 data8 sys_nanosleep
1622 data8 sys_ni_syscall
1623 data8 sys_prctl
1624 data8 sys_getpagesize
1625 data8 sys_mmap2
1626 data8 sys_pciconfig_read
1627 data8 sys_pciconfig_write
1628 data8 sys_perfmonctl
1629 data8 sys_sigaltstack
1630 data8 sys_rt_sigaction
1631 data8 sys_rt_sigpending
1632 data8 sys_rt_sigprocmask
1633 data8 sys_rt_sigqueueinfo
1634 data8 sys_rt_sigreturn
1635 data8 sys_rt_sigsuspend
1636 data8 sys_rt_sigtimedwait
1637 data8 sys_getcwd
1638 data8 sys_capget
1639 data8 sys_capset
1640 data8 sys_sendfile64
1641 data8 sys_ni_syscall
1642 data8 sys_ni_syscall
1643 data8 sys_socket
1644 data8 sys_bind
1645 data8 sys_connect
1646 data8 sys_listen
1647 data8 sys_accept
1648 data8 sys_getsockname
1649 data8 sys_getpeername
1650 data8 sys_socketpair
1651 data8 sys_send
1652 data8 sys_sendto
1653 data8 sys_recv
1654 data8 sys_recvfrom
1655 data8 sys_shutdown
1656 data8 sys_setsockopt
1657 data8 sys_getsockopt
1658 data8 sys_sendmsg
1659 data8 sys_recvmsg
1660 data8 sys_pivot_root
1661 data8 sys_mincore
1662 data8 sys_madvise
1663 data8 sys_newstat
1664 data8 sys_newlstat
1665 data8 sys_newfstat
1666 data8 sys_clone2
1667 data8 sys_getdents64
1668 data8 sys_getunwind
1669 data8 sys_readahead
1670 data8 sys_setxattr
1671 data8 sys_lsetxattr
1672 data8 sys_fsetxattr
1673 data8 sys_getxattr
1674 data8 sys_lgetxattr
1675 data8 sys_fgetxattr
1676 data8 sys_listxattr
1677 data8 sys_llistxattr
1678 data8 sys_flistxattr
1679 data8 sys_removexattr
1680 data8 sys_lremovexattr
1681 data8 sys_fremovexattr
1682 data8 sys_tkill
1683 data8 sys_futex
1684 data8 sys_sched_setaffinity
1685 data8 sys_sched_getaffinity
1686 data8 sys_set_tid_address
1687 data8 sys_fadvise64_64
1688 data8 sys_tgkill
1689 data8 sys_exit_group
1690 data8 sys_lookup_dcookie
1691 data8 sys_io_setup
1692 data8 sys_io_destroy
1693 data8 sys_io_getevents
1694 data8 sys_io_submit
1695 data8 sys_io_cancel
1696 data8 sys_epoll_create
1697 data8 sys_epoll_ctl
1698 data8 sys_epoll_wait
1699 data8 sys_restart_syscall
1700 data8 sys_semtimedop
1701 data8 sys_timer_create
1702 data8 sys_timer_settime
1703 data8 sys_timer_gettime
1704 data8 sys_timer_getoverrun
1705 data8 sys_timer_delete
1706 data8 sys_clock_settime
1707 data8 sys_clock_gettime
1708 data8 sys_clock_getres
1709 data8 sys_clock_nanosleep
1710 data8 sys_fstatfs64
1711 data8 sys_statfs64
1712 data8 sys_mbind
1713 data8 sys_get_mempolicy
1714 data8 sys_set_mempolicy
1715 data8 sys_mq_open
1716 data8 sys_mq_unlink
1717 data8 sys_mq_timedsend
1718 data8 sys_mq_timedreceive
1719 data8 sys_mq_notify
1720 data8 sys_mq_getsetattr
1721 data8 sys_kexec_load
1722 data8 sys_ni_syscall
1723 data8 sys_waitid
1724 data8 sys_add_key
1725 data8 sys_request_key
1726 data8 sys_keyctl
1727 data8 sys_ioprio_set
1728 data8 sys_ioprio_get
1729 data8 sys_move_pages
1730 data8 sys_inotify_init
1731 data8 sys_inotify_add_watch
1732 data8 sys_inotify_rm_watch
1733 data8 sys_migrate_pages
1734 data8 sys_openat
1735 data8 sys_mkdirat
1736 data8 sys_mknodat
1737 data8 sys_fchownat
1738 data8 sys_futimesat
1739 data8 sys_newfstatat
1740 data8 sys_unlinkat
1741 data8 sys_renameat
1742 data8 sys_linkat
1743 data8 sys_symlinkat
1744 data8 sys_readlinkat
1745 data8 sys_fchmodat
1746 data8 sys_faccessat
1747 data8 sys_pselect6
1748 data8 sys_ppoll
1749 data8 sys_unshare
1750 data8 sys_splice
1751 data8 sys_set_robust_list
1752 data8 sys_get_robust_list
1753 data8 sys_sync_file_range
1754 data8 sys_tee
1755 data8 sys_vmsplice
1756 data8 sys_fallocate
1757 data8 sys_getcpu
1758 data8 sys_epoll_pwait
1759 data8 sys_utimensat
1760 data8 sys_signalfd
1761 data8 sys_ni_syscall
1762 data8 sys_eventfd
1763 data8 sys_timerfd_create
1764 data8 sys_timerfd_settime
1765 data8 sys_timerfd_gettime
1766 data8 sys_signalfd4
1767 data8 sys_eventfd2
1768 data8 sys_epoll_create1
1769 data8 sys_dup3
1770 data8 sys_pipe2
1771 data8 sys_inotify_init1
1772 data8 sys_preadv
1773 data8 sys_pwritev
1774 data8 sys_rt_tgsigqueueinfo
1775 data8 sys_recvmmsg
1776 data8 sys_fanotify_init
1777 data8 sys_fanotify_mark
1778 data8 sys_prlimit64
1779 data8 sys_name_to_handle_at
1780 data8 sys_open_by_handle_at
1781 data8 sys_clock_adjtime
1782 data8 sys_syncfs
1783 data8 sys_setns
1784 data8 sys_sendmmsg
1785 data8 sys_process_vm_readv
1786 data8 sys_process_vm_writev
1787 data8 sys_accept4
1788 data8 sys_finit_module
1789
1790 .org sys_call_table + 8*NR_syscalls
1791#endif
1792