Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/cris/arch-v32/kernel/entry.S
15125 views
1
/*
2
* Copyright (C) 2000-2003 Axis Communications AB
3
*
4
* Authors: Bjorn Wesen ([email protected])
5
* Tobias Anderberg ([email protected]), CRISv32 port.
6
*
7
* Code for the system-call and fault low-level handling routines.
8
*
9
* NOTE: This code handles signal-recognition, which happens every time
10
* after a timer-interrupt and after each system call.
11
*
12
* Stack layout in 'ret_from_system_call':
13
* ptrace needs to have all regs on the stack.
14
* if the order here is changed, it needs to be
15
* updated in fork.c:copy_process, signal.c:do_signal,
16
* ptrace.c and ptrace.h
17
*
18
*/
19
20
#include <linux/linkage.h>
21
#include <linux/sys.h>
22
#include <asm/unistd.h>
23
#include <asm/errno.h>
24
#include <asm/thread_info.h>
25
#include <asm/asm-offsets.h>
26
27
#include <hwregs/asm/reg_map_asm.h>
28
#include <hwregs/asm/intr_vect_defs_asm.h>
29
30
;; Exported functions.
31
.globl system_call
32
.globl ret_from_intr
33
.globl ret_from_fork
34
.globl resume
35
.globl multiple_interrupt
36
.globl nmi_interrupt
37
.globl spurious_interrupt
38
.globl do_sigtrap
39
.globl gdb_handle_exception
40
.globl sys_call_table
41
42
; Check if preemptive kernel scheduling should be done.
43
#ifdef CONFIG_PREEMPT
44
_resume_kernel:
45
di
46
; Load current task struct.
47
movs.w -8192, $r0 ; THREAD_SIZE = 8192
48
and.d $sp, $r0
49
50
addoq +TI_preempt_count, $r0, $acr
51
move.d [$acr], $r10 ; Preemption disabled?
52
bne _Rexit
53
nop
54
55
_need_resched:
56
addoq +TI_flags, $r0, $acr
57
move.d [$acr], $r10
58
btstq TIF_NEED_RESCHED, $r10 ; Check if need_resched is set.
59
bpl _Rexit
60
nop
61
62
; Do preemptive kernel scheduling.
63
jsr preempt_schedule_irq
64
nop
65
66
; Load new task struct.
67
movs.w -8192, $r0 ; THREAD_SIZE = 8192.
68
and.d $sp, $r0
69
70
; One more time with new task.
71
ba _need_resched
72
nop
73
#else
74
#define _resume_kernel _Rexit
75
#endif
76
77
; Called at exit from fork. schedule_tail must be called to drop
78
; spinlock if CONFIG_PREEMPT.
79
.type ret_from_fork,@function
80
ret_from_fork:
81
jsr schedule_tail
82
nop
83
ba ret_from_sys_call
84
nop
85
.size ret_from_fork, . - ret_from_fork
86
87
.type ret_from_intr,@function
88
ret_from_intr:
89
;; Check for resched if preemptive kernel, or if we're going back to
90
;; user-mode. This test matches the user_regs(regs) macro. Don't simply
91
;; test CCS since that doesn't necessarily reflect what mode we'll
92
;; return into.
93
addoq +PT_ccs, $sp, $acr
94
move.d [$acr], $r0
95
btstq 16, $r0 ; User-mode flag.
96
bpl _resume_kernel
97
.size ret_from_intr, . - ret_from_intr + 2 ; +2 includes the dslot.
98
99
; Note that di below is in delay slot.
100
.type _resume_userspace,@function
101
_resume_userspace:
102
di ; So need_resched and sigpending don't change.
103
104
movs.w -8192, $r0 ; THREAD_SIZE == 8192
105
and.d $sp, $r0
106
107
addoq +TI_flags, $r0, $acr ; current->work
108
move.d [$acr], $r10
109
and.d _TIF_WORK_MASK, $r10 ; Work to be done on return?
110
bne _work_pending
111
nop
112
ba _Rexit
113
nop
114
.size _resume_userspace, . - _resume_userspace
115
116
;; The system_call is called by a BREAK instruction, which looks pretty
117
;; much like any other exception.
118
;;
119
;; System calls can't be made from interrupts but we still stack ERP
120
;; to have a complete stack frame.
121
;;
122
;; In r9 we have the wanted syscall number. Arguments come in r10,r11,r12,
123
;; r13,mof,srp
124
;;
125
;; This function looks on the _surface_ like spaghetti programming, but it's
126
;; really designed so that the fast-path does not force cache-loading of
127
;; non-used instructions. Only the non-common cases cause the outlined code
128
;; to run..
129
130
.type system_call,@function
131
system_call:
132
;; Stack-frame similar to the irq heads, which is reversed in
133
;; ret_from_sys_call.
134
135
sub.d 92, $sp ; Skip EXS and EDA.
136
movem $r13, [$sp]
137
move.d $sp, $r8
138
addq 14*4, $r8
139
move.d $acr, $r0
140
move $srs, $r1
141
move $mof, $r2
142
move $spc, $r3
143
move $ccs, $r4
144
move $srp, $r5
145
move $erp, $r6
146
subq 4, $sp
147
movem $r6, [$r8]
148
ei ; Enable interrupts while processing syscalls.
149
move.d $r10, [$sp]
150
151
; Set S-bit when kernel debugging to keep hardware breakpoints active.
152
#ifdef CONFIG_ETRAX_KGDB
153
move $ccs, $r0
154
or.d (1<<9), $r0
155
move $r0, $ccs
156
#endif
157
158
movs.w -ENOSYS, $r0
159
addoq +PT_r10, $sp, $acr
160
move.d $r0, [$acr]
161
162
;; Check if this process is syscall-traced.
163
movs.w -8192, $r0 ; THREAD_SIZE == 8192
164
and.d $sp, $r0
165
166
addoq +TI_flags, $r0, $acr
167
move.d [$acr], $r0
168
btstq TIF_SYSCALL_TRACE, $r0
169
bmi _syscall_trace_entry
170
nop
171
172
_syscall_traced:
173
;; Check for sanity in the requested syscall number.
174
cmpu.w NR_syscalls, $r9
175
bhs ret_from_sys_call
176
lslq 2, $r9 ; Multiply by 4, in the delay slot.
177
178
;; The location on the stack for the register structure is passed as a
179
;; seventh argument. Some system calls need this.
180
move.d $sp, $r0
181
subq 4, $sp
182
move.d $r0, [$sp]
183
184
;; The registers carrying parameters (R10-R13) are intact. The optional
185
;; fifth and sixth parameters is in MOF and SRP respectively. Put them
186
;; back on the stack.
187
subq 4, $sp
188
move $srp, [$sp]
189
subq 4, $sp
190
move $mof, [$sp]
191
192
;; Actually to the system call.
193
addo.d +sys_call_table, $r9, $acr
194
move.d [$acr], $acr
195
jsr $acr
196
nop
197
198
addq 3*4, $sp ; Pop the mof, srp and regs parameters.
199
addoq +PT_r10, $sp, $acr
200
move.d $r10, [$acr] ; Save the return value.
201
202
moveq 1, $r9 ; "Parameter" to ret_from_sys_call to
203
; show it was a sys call.
204
205
;; Fall through into ret_from_sys_call to return.
206
207
ret_from_sys_call:
208
;; R9 is a parameter:
209
;; >= 1 from syscall
210
;; 0 from irq
211
212
;; Get the current task-struct pointer.
213
movs.w -8192, $r0 ; THREAD_SIZE == 8192
214
and.d $sp, $r0
215
216
di ; Make sure need_resched and sigpending don't change.
217
218
addoq +TI_flags, $r0, $acr
219
move.d [$acr], $r1
220
and.d _TIF_ALLWORK_MASK, $r1
221
bne _syscall_exit_work
222
nop
223
.size system_call, . - system_call
224
225
.type _Rexit,@function
226
_Rexit:
227
;; This epilogue MUST match the prologues in multiple_interrupt, irq.h
228
;; and ptregs.h.
229
addq 4, $sp ; Skip orig_r10.
230
movem [$sp+], $r13 ; Registers R0-R13.
231
move.d [$sp+], $acr
232
move [$sp], $srs
233
addq 4, $sp
234
move [$sp+], $mof
235
move [$sp+], $spc
236
move [$sp+], $ccs
237
move [$sp+], $srp
238
move [$sp+], $erp
239
addq 8, $sp ; Skip EXS, EDA.
240
jump $erp
241
rfe ; Restore condition code stack in delay-slot.
242
.size _Rexit, . - _Rexit
243
244
;; We get here after doing a syscall if extra work might need to be done
245
;; perform syscall exit tracing if needed.
246
247
.type _syscall_exit_work,@function
248
_syscall_exit_work:
249
;; R0 contains current at this point and irq's are disabled.
250
251
addoq +TI_flags, $r0, $acr
252
move.d [$acr], $r1
253
btstq TIF_SYSCALL_TRACE, $r1
254
bpl _work_pending
255
nop
256
ei
257
move.d $r9, $r1 ; Preserve R9.
258
jsr do_syscall_trace
259
nop
260
move.d $r1, $r9
261
ba _resume_userspace
262
nop
263
.size _syscall_exit_work, . - _syscall_exit_work
264
265
.type _work_pending,@function
266
_work_pending:
267
addoq +TI_flags, $r0, $acr
268
move.d [$acr], $r10
269
btstq TIF_NEED_RESCHED, $r10 ; Need resched?
270
bpl _work_notifysig ; No, must be signal/notify.
271
nop
272
.size _work_pending, . - _work_pending
273
274
.type _work_resched,@function
275
_work_resched:
276
move.d $r9, $r1 ; Preserve R9.
277
jsr schedule
278
nop
279
move.d $r1, $r9
280
di
281
282
addoq +TI_flags, $r0, $acr
283
move.d [$acr], $r1
284
and.d _TIF_WORK_MASK, $r1 ; Ignore sycall trace counter.
285
beq _Rexit
286
nop
287
btstq TIF_NEED_RESCHED, $r1
288
bmi _work_resched ; current->work.need_resched.
289
nop
290
.size _work_resched, . - _work_resched
291
292
.type _work_notifysig,@function
293
_work_notifysig:
294
;; Deal with pending signals and notify-resume requests.
295
296
addoq +TI_flags, $r0, $acr
297
move.d [$acr], $r12 ; The thread_info_flags parameter.
298
move.d $sp, $r11 ; The regs param.
299
jsr do_notify_resume
300
move.d $r9, $r10 ; do_notify_resume syscall/irq param.
301
302
ba _Rexit
303
nop
304
.size _work_notifysig, . - _work_notifysig
305
306
;; We get here as a sidetrack when we've entered a syscall with the
307
;; trace-bit set. We need to call do_syscall_trace and then continue
308
;; with the call.
309
310
_syscall_trace_entry:
311
;; PT_r10 in the frame contains -ENOSYS as required, at this point.
312
313
jsr do_syscall_trace
314
nop
315
316
;; Now re-enter the syscall code to do the syscall itself. We need to
317
;; restore R9 here to contain the wanted syscall, and the other
318
;; parameter-bearing registers.
319
addoq +PT_r9, $sp, $acr
320
move.d [$acr], $r9
321
addoq +PT_orig_r10, $sp, $acr
322
move.d [$acr], $r10 ; PT_r10 is already -ENOSYS.
323
addoq +PT_r11, $sp, $acr
324
move.d [$acr], $r11
325
addoq +PT_r12, $sp, $acr
326
move.d [$acr], $r12
327
addoq +PT_r13, $sp, $acr
328
move.d [$acr], $r13
329
addoq +PT_mof, $sp, $acr
330
move [$acr], $mof
331
addoq +PT_srp, $sp, $acr
332
move [$acr], $srp
333
334
ba _syscall_traced
335
nop
336
337
;; Resume performs the actual task-switching, by switching stack
338
;; pointers. Input arguments are:
339
;;
340
;; R10 = prev
341
;; R11 = next
342
;; R12 = thread offset in task struct.
343
;;
344
;; Returns old current in R10.
345
346
.type resume,@function
347
resume:
348
subq 4, $sp ; Make space for srp.
349
350
add.d $r12, $r10 ; R10 = current tasks tss.
351
addoq +THREAD_ccs, $r10, $acr
352
move $srp, [$sp] ; Keep old/new PC on the stack.
353
move $ccs, [$acr] ; Save IRQ enable state.
354
di
355
356
addoq +THREAD_usp, $r10, $acr
357
subq 10*4, $sp ; Make room for R9.
358
move $usp, [$acr] ; Save user-mode stackpointer.
359
360
;; See copy_thread for the reason why register R9 is saved.
361
movem $r9, [$sp] ; Save non-scratch registers and R9.
362
363
addoq +THREAD_ksp, $r10, $acr
364
move.d $sp, $r10 ; Return last running task in R10.
365
move.d $sp, [$acr] ; Save kernel SP for old task.
366
367
and.d -8192, $r10 ; Get thread_info from stackpointer.
368
addoq +TI_task, $r10, $acr
369
add.d $r12, $r11 ; Find the new tasks tss.
370
move.d [$acr], $r10 ; Get task.
371
addoq +THREAD_ksp, $r11, $acr
372
move.d [$acr], $sp ; Switch to new stackframe.
373
addoq +THREAD_usp, $r11, $acr
374
movem [$sp+], $r9 ; Restore non-scratch registers and R9.
375
376
move [$acr], $usp ; Restore user-mode stackpointer.
377
378
addoq +THREAD_ccs, $r11, $acr
379
move.d [$sp+], $r11
380
jump $r11 ; Restore PC.
381
move [$acr], $ccs ; Restore IRQ enable status.
382
.size resume, . - resume
383
384
nmi_interrupt:
385
386
;; If we receive a watchdog interrupt while it is not expected, then set
387
;; up a canonical frame and dump register contents before dying.
388
389
;; This prologue MUST match the one in irq.h and the struct in ptregs.h!
390
subq 12, $sp ; Skip EXS, EDA.
391
move $nrp, [$sp]
392
subq 4, $sp
393
move $srp, [$sp]
394
subq 4, $sp
395
move $ccs, [$sp]
396
subq 4, $sp
397
move $spc, [$sp]
398
subq 4, $sp
399
move $mof, [$sp]
400
subq 4, $sp
401
move $srs, [$sp]
402
subq 4, $sp
403
move.d $acr, [$sp]
404
subq 14*4, $sp ; Make room for R0-R13.
405
movem $r13, [$sp] ; Push R0-R13.
406
subq 4, $sp
407
move.d $r10, [$sp] ; Push orig_r10.
408
move.d REG_ADDR(intr_vect, regi_irq, r_nmi), $r0
409
move.d [$r0], $r0
410
btstq REG_BIT(intr_vect, r_nmi, watchdog), $r0
411
bpl 1f
412
nop
413
jsr handle_watchdog_bite ; In time.c.
414
move.d $sp, $r10 ; Pointer to registers
415
1: btstq REG_BIT(intr_vect, r_nmi, ext), $r0
416
bpl 1f
417
nop
418
jsr handle_nmi
419
move.d $sp, $r10 ; Pointer to registers
420
1: addq 4, $sp ; Skip orig_r10
421
movem [$sp+], $r13
422
move.d [$sp+], $acr
423
move [$sp], $srs
424
addq 4, $sp
425
move [$sp+], $mof
426
move [$sp+], $spc
427
move [$sp+], $ccs
428
move [$sp+], $srp
429
move [$sp+], $nrp
430
addq 8, $sp ; Skip EXS, EDA.
431
jump $nrp
432
rfn
433
434
.comm cause_of_death, 4 ;; Don't declare this anywhere.
435
436
spurious_interrupt:
437
di
438
jump hard_reset_now
439
nop
440
441
;; This handles the case when multiple interrupts arrive at the same
442
;; time. Jump to the first set interrupt bit in a priotiry fashion. The
443
;; hardware will call the unserved interrupts after the handler
444
;; finishes.
445
.type multiple_interrupt, @function
446
multiple_interrupt:
447
;; This prologue MUST match the one in irq.h and the struct in ptregs.h!
448
subq 12, $sp ; Skip EXS, EDA.
449
move $erp, [$sp]
450
subq 4, $sp
451
move $srp, [$sp]
452
subq 4, $sp
453
move $ccs, [$sp]
454
subq 4, $sp
455
move $spc, [$sp]
456
subq 4, $sp
457
move $mof, [$sp]
458
subq 4, $sp
459
move $srs, [$sp]
460
subq 4, $sp
461
move.d $acr, [$sp]
462
subq 14*4, $sp ; Make room for R0-R13.
463
movem $r13, [$sp] ; Push R0-R13.
464
subq 4, $sp
465
move.d $r10, [$sp] ; Push orig_r10.
466
467
; Set S-bit when kernel debugging to keep hardware breakpoints active.
468
#ifdef CONFIG_ETRAX_KGDB
469
move $ccs, $r0
470
or.d (1<<9), $r0
471
move $r0, $ccs
472
#endif
473
474
jsr crisv32_do_multiple
475
move.d $sp, $r10
476
jump ret_from_intr
477
nop
478
.size multiple_interrupt, . - multiple_interrupt
479
480
do_sigtrap:
481
;; Sigtraps the process that executed the BREAK instruction. Creates a
482
;; frame that Rexit expects.
483
subq 4, $sp
484
move $eda, [$sp]
485
subq 4, $sp
486
move $exs, [$sp]
487
subq 4, $sp
488
move $erp, [$sp]
489
subq 4, $sp
490
move $srp, [$sp]
491
subq 4, $sp
492
move $ccs, [$sp]
493
subq 4, $sp
494
move $spc, [$sp]
495
subq 4, $sp
496
move $mof, [$sp]
497
subq 4, $sp
498
move $srs, [$sp]
499
subq 4, $sp
500
move.d $acr, [$sp]
501
di ; Need to disable irq's at this point.
502
subq 14*4, $sp ; Make room for r0-r13.
503
movem $r13, [$sp] ; Push the r0-r13 registers.
504
subq 4, $sp
505
move.d $r10, [$sp] ; Push orig_r10.
506
507
movs.w -8192, $r9 ; THREAD_SIZE == 8192
508
and.d $sp, $r9
509
510
;; thread_info as first parameter
511
move.d $r9, $r10
512
moveq 5, $r11 ; SIGTRAP as second argument.
513
jsr ugdb_trap_user
514
nop
515
jump ret_from_intr ; Use the return routine for interrupts.
516
nop
517
518
gdb_handle_exception:
519
subq 4, $sp
520
move.d $r0, [$sp]
521
#ifdef CONFIG_ETRAX_KGDB
522
move $ccs, $r0 ; U-flag not affected by previous insns.
523
btstq 16, $r0 ; Test the U-flag.
524
bmi _ugdb_handle_exception ; Go to user mode debugging.
525
nop ; Empty delay-slot (cannot pop R0 here).
526
ba kgdb_handle_exception ; Go to kernel debugging.
527
move.d [$sp+], $r0 ; Restore R0 in delay slot.
528
#endif
529
530
_ugdb_handle_exception:
531
ba do_sigtrap ; SIGTRAP the offending process.
532
move.d [$sp+], $r0 ; Restore R0 in delay slot.
533
534
.global kernel_execve
535
.type kernel_execve,@function
536
kernel_execve:
537
move.d __NR_execve, $r9
538
break 13
539
ret
540
nop
541
.size kernel_execve, . - kernel_execve
542
543
.data
544
545
.section .rodata,"a"
546
sys_call_table:
547
.long sys_restart_syscall ; 0 - old "setup()" system call, used
548
; for restarting.
549
.long sys_exit
550
.long sys_fork
551
.long sys_read
552
.long sys_write
553
.long sys_open /* 5 */
554
.long sys_close
555
.long sys_waitpid
556
.long sys_creat
557
.long sys_link
558
.long sys_unlink /* 10 */
559
.long sys_execve
560
.long sys_chdir
561
.long sys_time
562
.long sys_mknod
563
.long sys_chmod /* 15 */
564
.long sys_lchown16
565
.long sys_ni_syscall /* old break syscall holder */
566
.long sys_stat
567
.long sys_lseek
568
.long sys_getpid /* 20 */
569
.long sys_mount
570
.long sys_oldumount
571
.long sys_setuid16
572
.long sys_getuid16
573
.long sys_stime /* 25 */
574
.long sys_ptrace
575
.long sys_alarm
576
.long sys_fstat
577
.long sys_pause
578
.long sys_utime /* 30 */
579
.long sys_ni_syscall /* old stty syscall holder */
580
.long sys_ni_syscall /* old gtty syscall holder */
581
.long sys_access
582
.long sys_nice
583
.long sys_ni_syscall /* 35 old ftime syscall holder */
584
.long sys_sync
585
.long sys_kill
586
.long sys_rename
587
.long sys_mkdir
588
.long sys_rmdir /* 40 */
589
.long sys_dup
590
.long sys_pipe
591
.long sys_times
592
.long sys_ni_syscall /* old prof syscall holder */
593
.long sys_brk /* 45 */
594
.long sys_setgid16
595
.long sys_getgid16
596
.long sys_signal
597
.long sys_geteuid16
598
.long sys_getegid16 /* 50 */
599
.long sys_acct
600
.long sys_umount /* recycled never used phys( */
601
.long sys_ni_syscall /* old lock syscall holder */
602
.long sys_ioctl
603
.long sys_fcntl /* 55 */
604
.long sys_ni_syscall /* old mpx syscall holder */
605
.long sys_setpgid
606
.long sys_ni_syscall /* old ulimit syscall holder */
607
.long sys_ni_syscall /* old sys_olduname holder */
608
.long sys_umask /* 60 */
609
.long sys_chroot
610
.long sys_ustat
611
.long sys_dup2
612
.long sys_getppid
613
.long sys_getpgrp /* 65 */
614
.long sys_setsid
615
.long sys_sigaction
616
.long sys_sgetmask
617
.long sys_ssetmask
618
.long sys_setreuid16 /* 70 */
619
.long sys_setregid16
620
.long sys_sigsuspend
621
.long sys_sigpending
622
.long sys_sethostname
623
.long sys_setrlimit /* 75 */
624
.long sys_old_getrlimit
625
.long sys_getrusage
626
.long sys_gettimeofday
627
.long sys_settimeofday
628
.long sys_getgroups16 /* 80 */
629
.long sys_setgroups16
630
.long sys_select /* was old_select in Linux/E100 */
631
.long sys_symlink
632
.long sys_lstat
633
.long sys_readlink /* 85 */
634
.long sys_uselib
635
.long sys_swapon
636
.long sys_reboot
637
.long sys_old_readdir
638
.long sys_old_mmap /* 90 */
639
.long sys_munmap
640
.long sys_truncate
641
.long sys_ftruncate
642
.long sys_fchmod
643
.long sys_fchown16 /* 95 */
644
.long sys_getpriority
645
.long sys_setpriority
646
.long sys_ni_syscall /* old profil syscall holder */
647
.long sys_statfs
648
.long sys_fstatfs /* 100 */
649
.long sys_ni_syscall /* sys_ioperm in i386 */
650
.long sys_socketcall
651
.long sys_syslog
652
.long sys_setitimer
653
.long sys_getitimer /* 105 */
654
.long sys_newstat
655
.long sys_newlstat
656
.long sys_newfstat
657
.long sys_ni_syscall /* old sys_uname holder */
658
.long sys_ni_syscall /* sys_iopl in i386 */
659
.long sys_vhangup
660
.long sys_ni_syscall /* old "idle" system call */
661
.long sys_ni_syscall /* vm86old in i386 */
662
.long sys_wait4
663
.long sys_swapoff /* 115 */
664
.long sys_sysinfo
665
.long sys_ipc
666
.long sys_fsync
667
.long sys_sigreturn
668
.long sys_clone /* 120 */
669
.long sys_setdomainname
670
.long sys_newuname
671
.long sys_ni_syscall /* sys_modify_ldt */
672
.long sys_adjtimex
673
.long sys_mprotect /* 125 */
674
.long sys_sigprocmask
675
.long sys_ni_syscall /* old "create_module" */
676
.long sys_init_module
677
.long sys_delete_module
678
.long sys_ni_syscall /* 130: old "get_kernel_syms" */
679
.long sys_quotactl
680
.long sys_getpgid
681
.long sys_fchdir
682
.long sys_bdflush
683
.long sys_sysfs /* 135 */
684
.long sys_personality
685
.long sys_ni_syscall /* for afs_syscall */
686
.long sys_setfsuid16
687
.long sys_setfsgid16
688
.long sys_llseek /* 140 */
689
.long sys_getdents
690
.long sys_select
691
.long sys_flock
692
.long sys_msync
693
.long sys_readv /* 145 */
694
.long sys_writev
695
.long sys_getsid
696
.long sys_fdatasync
697
.long sys_sysctl
698
.long sys_mlock /* 150 */
699
.long sys_munlock
700
.long sys_mlockall
701
.long sys_munlockall
702
.long sys_sched_setparam
703
.long sys_sched_getparam /* 155 */
704
.long sys_sched_setscheduler
705
.long sys_sched_getscheduler
706
.long sys_sched_yield
707
.long sys_sched_get_priority_max
708
.long sys_sched_get_priority_min /* 160 */
709
.long sys_sched_rr_get_interval
710
.long sys_nanosleep
711
.long sys_mremap
712
.long sys_setresuid16
713
.long sys_getresuid16 /* 165 */
714
.long sys_ni_syscall /* sys_vm86 */
715
.long sys_ni_syscall /* Old sys_query_module */
716
.long sys_poll
717
.long sys_nfsservctl
718
.long sys_setresgid16 /* 170 */
719
.long sys_getresgid16
720
.long sys_prctl
721
.long sys_rt_sigreturn
722
.long sys_rt_sigaction
723
.long sys_rt_sigprocmask /* 175 */
724
.long sys_rt_sigpending
725
.long sys_rt_sigtimedwait
726
.long sys_rt_sigqueueinfo
727
.long sys_rt_sigsuspend
728
.long sys_pread64 /* 180 */
729
.long sys_pwrite64
730
.long sys_chown16
731
.long sys_getcwd
732
.long sys_capget
733
.long sys_capset /* 185 */
734
.long sys_sigaltstack
735
.long sys_sendfile
736
.long sys_ni_syscall /* streams1 */
737
.long sys_ni_syscall /* streams2 */
738
.long sys_vfork /* 190 */
739
.long sys_getrlimit
740
.long sys_mmap2
741
.long sys_truncate64
742
.long sys_ftruncate64
743
.long sys_stat64 /* 195 */
744
.long sys_lstat64
745
.long sys_fstat64
746
.long sys_lchown
747
.long sys_getuid
748
.long sys_getgid /* 200 */
749
.long sys_geteuid
750
.long sys_getegid
751
.long sys_setreuid
752
.long sys_setregid
753
.long sys_getgroups /* 205 */
754
.long sys_setgroups
755
.long sys_fchown
756
.long sys_setresuid
757
.long sys_getresuid
758
.long sys_setresgid /* 210 */
759
.long sys_getresgid
760
.long sys_chown
761
.long sys_setuid
762
.long sys_setgid
763
.long sys_setfsuid /* 215 */
764
.long sys_setfsgid
765
.long sys_pivot_root
766
.long sys_mincore
767
.long sys_madvise
768
.long sys_getdents64 /* 220 */
769
.long sys_fcntl64
770
.long sys_ni_syscall /* reserved for TUX */
771
.long sys_ni_syscall
772
.long sys_gettid
773
.long sys_readahead /* 225 */
774
.long sys_setxattr
775
.long sys_lsetxattr
776
.long sys_fsetxattr
777
.long sys_getxattr
778
.long sys_lgetxattr /* 230 */
779
.long sys_fgetxattr
780
.long sys_listxattr
781
.long sys_llistxattr
782
.long sys_flistxattr
783
.long sys_removexattr /* 235 */
784
.long sys_lremovexattr
785
.long sys_fremovexattr
786
.long sys_tkill
787
.long sys_sendfile64
788
.long sys_futex /* 240 */
789
.long sys_sched_setaffinity
790
.long sys_sched_getaffinity
791
.long sys_ni_syscall /* sys_set_thread_area */
792
.long sys_ni_syscall /* sys_get_thread_area */
793
.long sys_io_setup /* 245 */
794
.long sys_io_destroy
795
.long sys_io_getevents
796
.long sys_io_submit
797
.long sys_io_cancel
798
.long sys_fadvise64 /* 250 */
799
.long sys_ni_syscall
800
.long sys_exit_group
801
.long sys_lookup_dcookie
802
.long sys_epoll_create
803
.long sys_epoll_ctl /* 255 */
804
.long sys_epoll_wait
805
.long sys_remap_file_pages
806
.long sys_set_tid_address
807
.long sys_timer_create
808
.long sys_timer_settime /* 260 */
809
.long sys_timer_gettime
810
.long sys_timer_getoverrun
811
.long sys_timer_delete
812
.long sys_clock_settime
813
.long sys_clock_gettime /* 265 */
814
.long sys_clock_getres
815
.long sys_clock_nanosleep
816
.long sys_statfs64
817
.long sys_fstatfs64
818
.long sys_tgkill /* 270 */
819
.long sys_utimes
820
.long sys_fadvise64_64
821
.long sys_ni_syscall /* sys_vserver */
822
.long sys_ni_syscall /* sys_mbind */
823
.long sys_ni_syscall /* 275 sys_get_mempolicy */
824
.long sys_ni_syscall /* sys_set_mempolicy */
825
.long sys_mq_open
826
.long sys_mq_unlink
827
.long sys_mq_timedsend
828
.long sys_mq_timedreceive /* 280 */
829
.long sys_mq_notify
830
.long sys_mq_getsetattr
831
.long sys_ni_syscall /* reserved for kexec */
832
.long sys_waitid
833
.long sys_ni_syscall /* 285 */ /* available */
834
.long sys_add_key
835
.long sys_request_key
836
.long sys_keyctl
837
.long sys_ioprio_set
838
.long sys_ioprio_get /* 290 */
839
.long sys_inotify_init
840
.long sys_inotify_add_watch
841
.long sys_inotify_rm_watch
842
.long sys_migrate_pages
843
.long sys_openat /* 295 */
844
.long sys_mkdirat
845
.long sys_mknodat
846
.long sys_fchownat
847
.long sys_futimesat
848
.long sys_fstatat64 /* 300 */
849
.long sys_unlinkat
850
.long sys_renameat
851
.long sys_linkat
852
.long sys_symlinkat
853
.long sys_readlinkat /* 305 */
854
.long sys_fchmodat
855
.long sys_faccessat
856
.long sys_pselect6
857
.long sys_ppoll
858
.long sys_unshare /* 310 */
859
.long sys_set_robust_list
860
.long sys_get_robust_list
861
.long sys_splice
862
.long sys_sync_file_range
863
.long sys_tee /* 315 */
864
.long sys_vmsplice
865
.long sys_move_pages
866
.long sys_getcpu
867
.long sys_epoll_pwait
868
.long sys_utimensat /* 320 */
869
.long sys_signalfd
870
.long sys_timerfd_create
871
.long sys_eventfd
872
.long sys_fallocate
873
.long sys_timerfd_settime /* 325 */
874
.long sys_timerfd_gettime
875
.long sys_signalfd4
876
.long sys_eventfd2
877
.long sys_epoll_create1
878
.long sys_dup3 /* 330 */
879
.long sys_pipe2
880
.long sys_inotify_init1
881
.long sys_preadv
882
.long sys_pwritev
883
.long sys_setns /* 335 */
884
885
/*
886
* NOTE!! This doesn't have to be exact - we just have
887
* to make sure we have _enough_ of the "sys_ni_syscall"
888
* entries. Don't panic if you notice that this hasn't
889
* been shrunk every time we add a new system call.
890
*/
891
892
.rept NR_syscalls - (.-sys_call_table) / 4
893
.long sys_ni_syscall
894
.endr
895
896
897