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