1/* 2 * Compatibility mode system call entry point for x86-64. 3 * 4 * Copyright 2000-2002 Andi Kleen, SuSE Labs. 5 */ 6 7#include <asm/dwarf2.h> 8#include <asm/calling.h> 9#include <asm/asm-offsets.h> 10#include <asm/current.h> 11#include <asm/errno.h> 12#include <asm/ia32_unistd.h> 13#include <asm/thread_info.h> 14#include <asm/segment.h> 15#include <asm/irqflags.h> 16#include <linux/linkage.h> 17 18/* Avoid __ASSEMBLER__'ifying <linux/audit.h> just for this. */ 19#include <linux/elf-em.h> 20#define AUDIT_ARCH_I386 (EM_386|__AUDIT_ARCH_LE) 21#define __AUDIT_ARCH_LE 0x40000000 22 23#ifndef CONFIG_AUDITSYSCALL 24#define sysexit_audit ia32_ret_from_sys_call 25#define sysretl_audit ia32_ret_from_sys_call 26#endif 27 28#define IA32_NR_syscalls ((ia32_syscall_end - ia32_sys_call_table)/8) 29 30 .macro IA32_ARG_FIXUP noebp=0 31 movl %edi,%r8d 32 .if \noebp 33 .else 34 movl %ebp,%r9d 35 .endif 36 xchg %ecx,%esi 37 movl %ebx,%edi 38 movl %edx,%edx /* zero extension */ 39 .endm 40 41 /* clobbers %eax */ 42 .macro CLEAR_RREGS offset=0, _r9=rax 43 xorl %eax,%eax 44 movq %rax,\offset+R11(%rsp) 45 movq %rax,\offset+R10(%rsp) 46 movq %\_r9,\offset+R9(%rsp) 47 movq %rax,\offset+R8(%rsp) 48 .endm 49 50 /* 51 * Reload arg registers from stack in case ptrace changed them. 52 * We don't reload %eax because syscall_trace_enter() returned 53 * the %rax value we should see. Instead, we just truncate that 54 * value to 32 bits again as we did on entry from user mode. 55 * If it's a new value set by user_regset during entry tracing, 56 * this matches the normal truncation of the user-mode value. 57 * If it's -1 to make us punt the syscall, then (u32)-1 is still 58 * an appropriately invalid value. 59 */ 60 .macro LOAD_ARGS32 offset, _r9=0 61 .if \_r9 62 movl \offset+16(%rsp),%r9d 63 .endif 64 movl \offset+40(%rsp),%ecx 65 movl \offset+48(%rsp),%edx 66 movl \offset+56(%rsp),%esi 67 movl \offset+64(%rsp),%edi 68 movl %eax,%eax /* zero extension */ 69 .endm 70 71 .macro CFI_STARTPROC32 simple 72 CFI_STARTPROC \simple 73 CFI_UNDEFINED r8 74 CFI_UNDEFINED r9 75 CFI_UNDEFINED r10 76 CFI_UNDEFINED r11 77 CFI_UNDEFINED r12 78 CFI_UNDEFINED r13 79 CFI_UNDEFINED r14 80 CFI_UNDEFINED r15 81 .endm 82 83#ifdef CONFIG_PARAVIRT 84ENTRY(native_usergs_sysret32) 85 swapgs 86 sysretl 87ENDPROC(native_usergs_sysret32) 88 89ENTRY(native_irq_enable_sysexit) 90 swapgs 91 sti 92 sysexit 93ENDPROC(native_irq_enable_sysexit) 94#endif 95 96/* 97 * 32bit SYSENTER instruction entry. 98 * 99 * Arguments: 100 * %eax System call number. 101 * %ebx Arg1 102 * %ecx Arg2 103 * %edx Arg3 104 * %esi Arg4 105 * %edi Arg5 106 * %ebp user stack 107 * 0(%ebp) Arg6 108 * 109 * Interrupts off. 110 * 111 * This is purely a fast path. For anything complicated we use the int 0x80 112 * path below. Set up a complete hardware stack frame to share code 113 * with the int 0x80 path. 114 */ 115ENTRY(ia32_sysenter_target) 116 CFI_STARTPROC32 simple 117 CFI_SIGNAL_FRAME 118 CFI_DEF_CFA rsp,0 119 CFI_REGISTER rsp,rbp 120 SWAPGS_UNSAFE_STACK 121 movq PER_CPU_VAR(kernel_stack), %rsp 122 addq $(KERNEL_STACK_OFFSET),%rsp 123 /* 124 * No need to follow this irqs on/off section: the syscall 125 * disabled irqs, here we enable it straight after entry: 126 */ 127 ENABLE_INTERRUPTS(CLBR_NONE) 128 movl %ebp,%ebp /* zero extension */ 129 pushq $__USER32_DS 130 CFI_ADJUST_CFA_OFFSET 8 131 /*CFI_REL_OFFSET ss,0*/ 132 pushq %rbp 133 CFI_ADJUST_CFA_OFFSET 8 134 CFI_REL_OFFSET rsp,0 135 pushfq 136 CFI_ADJUST_CFA_OFFSET 8 137 /*CFI_REL_OFFSET rflags,0*/ 138 movl 8*3-THREAD_SIZE+TI_sysenter_return(%rsp), %r10d 139 CFI_REGISTER rip,r10 140 pushq $__USER32_CS 141 CFI_ADJUST_CFA_OFFSET 8 142 /*CFI_REL_OFFSET cs,0*/ 143 movl %eax, %eax 144 pushq %r10 145 CFI_ADJUST_CFA_OFFSET 8 146 CFI_REL_OFFSET rip,0 147 pushq %rax 148 CFI_ADJUST_CFA_OFFSET 8 149 cld 150 SAVE_ARGS 0,0,1 151 /* no need to do an access_ok check here because rbp has been 152 32bit zero extended */ 1531: movl (%rbp),%ebp 154 .section __ex_table,"a" 155 .quad 1b,ia32_badarg 156 .previous 157 GET_THREAD_INFO(%r10) 158 orl $TS_COMPAT,TI_status(%r10) 159 testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10) 160 CFI_REMEMBER_STATE 161 jnz sysenter_tracesys 162 cmpq $(IA32_NR_syscalls-1),%rax 163 ja ia32_badsys 164sysenter_do_call: 165 IA32_ARG_FIXUP 166sysenter_dispatch: 167 call *ia32_sys_call_table(,%rax,8) 168 movq %rax,RAX-ARGOFFSET(%rsp) 169 GET_THREAD_INFO(%r10) 170 DISABLE_INTERRUPTS(CLBR_NONE) 171 TRACE_IRQS_OFF 172 testl $_TIF_ALLWORK_MASK,TI_flags(%r10) 173 jnz sysexit_audit 174sysexit_from_sys_call: 175 andl $~TS_COMPAT,TI_status(%r10) 176 /* clear IF, that popfq doesn't enable interrupts early */ 177 andl $~0x200,EFLAGS-R11(%rsp) 178 movl RIP-R11(%rsp),%edx /* User %eip */ 179 CFI_REGISTER rip,rdx 180 RESTORE_ARGS 1,24,1,1,1,1 181 xorq %r8,%r8 182 xorq %r9,%r9 183 xorq %r10,%r10 184 xorq %r11,%r11 185 popfq 186 CFI_ADJUST_CFA_OFFSET -8 187 /*CFI_RESTORE rflags*/ 188 popq %rcx /* User %esp */ 189 CFI_ADJUST_CFA_OFFSET -8 190 CFI_REGISTER rsp,rcx 191 TRACE_IRQS_ON 192 ENABLE_INTERRUPTS_SYSEXIT32 193 194#ifdef CONFIG_AUDITSYSCALL 195 .macro auditsys_entry_common 196 movl %esi,%r9d /* 6th arg: 4th syscall arg */ 197 movl %edx,%r8d /* 5th arg: 3rd syscall arg */ 198 /* (already in %ecx) 4th arg: 2nd syscall arg */ 199 movl %ebx,%edx /* 3rd arg: 1st syscall arg */ 200 movl %eax,%esi /* 2nd arg: syscall number */ 201 movl $AUDIT_ARCH_I386,%edi /* 1st arg: audit arch */ 202 call audit_syscall_entry 203 movl RAX-ARGOFFSET(%rsp),%eax /* reload syscall number */ 204 cmpq $(IA32_NR_syscalls-1),%rax 205 ja ia32_badsys 206 movl %ebx,%edi /* reload 1st syscall arg */ 207 movl RCX-ARGOFFSET(%rsp),%esi /* reload 2nd syscall arg */ 208 movl RDX-ARGOFFSET(%rsp),%edx /* reload 3rd syscall arg */ 209 movl RSI-ARGOFFSET(%rsp),%ecx /* reload 4th syscall arg */ 210 movl RDI-ARGOFFSET(%rsp),%r8d /* reload 5th syscall arg */ 211 .endm 212 213 .macro auditsys_exit exit 214 testl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),TI_flags(%r10) 215 jnz ia32_ret_from_sys_call 216 TRACE_IRQS_ON 217 sti 218 movl %eax,%esi /* second arg, syscall return value */ 219 cmpl $0,%eax /* is it < 0? */ 220 setl %al /* 1 if so, 0 if not */ 221 movzbl %al,%edi /* zero-extend that into %edi */ 222 inc %edi /* first arg, 0->1(AUDITSC_SUCCESS), 1->2(AUDITSC_FAILURE) */ 223 call audit_syscall_exit 224 GET_THREAD_INFO(%r10) 225 movl RAX-ARGOFFSET(%rsp),%eax /* reload syscall return value */ 226 movl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),%edi 227 cli 228 TRACE_IRQS_OFF 229 testl %edi,TI_flags(%r10) 230 jz \exit 231 CLEAR_RREGS -ARGOFFSET 232 jmp int_with_check 233 .endm 234 235sysenter_auditsys: 236 CFI_RESTORE_STATE 237 auditsys_entry_common 238 movl %ebp,%r9d /* reload 6th syscall arg */ 239 jmp sysenter_dispatch 240 241sysexit_audit: 242 auditsys_exit sysexit_from_sys_call 243#endif 244 245sysenter_tracesys: 246#ifdef CONFIG_AUDITSYSCALL 247 testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%r10) 248 jz sysenter_auditsys 249#endif 250 SAVE_REST 251 CLEAR_RREGS 252 movq $-ENOSYS,RAX(%rsp)/* ptrace can change this for a bad syscall */ 253 movq %rsp,%rdi /* &pt_regs -> arg1 */ 254 call syscall_trace_enter 255 LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */ 256 RESTORE_REST 257 cmpq $(IA32_NR_syscalls-1),%rax 258 ja int_ret_from_sys_call /* sysenter_tracesys has set RAX(%rsp) */ 259 jmp sysenter_do_call 260 CFI_ENDPROC 261ENDPROC(ia32_sysenter_target) 262 263/* 264 * 32bit SYSCALL instruction entry. 265 * 266 * Arguments: 267 * %eax System call number. 268 * %ebx Arg1 269 * %ecx return EIP 270 * %edx Arg3 271 * %esi Arg4 272 * %edi Arg5 273 * %ebp Arg2 [note: not saved in the stack frame, should not be touched] 274 * %esp user stack 275 * 0(%esp) Arg6 276 * 277 * Interrupts off. 278 * 279 * This is purely a fast path. For anything complicated we use the int 0x80 280 * path below. Set up a complete hardware stack frame to share code 281 * with the int 0x80 path. 282 */ 283ENTRY(ia32_cstar_target) 284 CFI_STARTPROC32 simple 285 CFI_SIGNAL_FRAME 286 CFI_DEF_CFA rsp,KERNEL_STACK_OFFSET 287 CFI_REGISTER rip,rcx 288 /*CFI_REGISTER rflags,r11*/ 289 SWAPGS_UNSAFE_STACK 290 movl %esp,%r8d 291 CFI_REGISTER rsp,r8 292 movq PER_CPU_VAR(kernel_stack),%rsp 293 /* 294 * No need to follow this irqs on/off section: the syscall 295 * disabled irqs and here we enable it straight after entry: 296 */ 297 ENABLE_INTERRUPTS(CLBR_NONE) 298 SAVE_ARGS 8,1,1 299 movl %eax,%eax /* zero extension */ 300 movq %rax,ORIG_RAX-ARGOFFSET(%rsp) 301 movq %rcx,RIP-ARGOFFSET(%rsp) 302 CFI_REL_OFFSET rip,RIP-ARGOFFSET 303 movq %rbp,RCX-ARGOFFSET(%rsp) /* this lies slightly to ptrace */ 304 movl %ebp,%ecx 305 movq $__USER32_CS,CS-ARGOFFSET(%rsp) 306 movq $__USER32_DS,SS-ARGOFFSET(%rsp) 307 movq %r11,EFLAGS-ARGOFFSET(%rsp) 308 /*CFI_REL_OFFSET rflags,EFLAGS-ARGOFFSET*/ 309 movq %r8,RSP-ARGOFFSET(%rsp) 310 CFI_REL_OFFSET rsp,RSP-ARGOFFSET 311 /* no need to do an access_ok check here because r8 has been 312 32bit zero extended */ 313 /* hardware stack frame is complete now */ 3141: movl (%r8),%r9d 315 .section __ex_table,"a" 316 .quad 1b,ia32_badarg 317 .previous 318 GET_THREAD_INFO(%r10) 319 orl $TS_COMPAT,TI_status(%r10) 320 testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10) 321 CFI_REMEMBER_STATE 322 jnz cstar_tracesys 323 cmpq $IA32_NR_syscalls-1,%rax 324 ja ia32_badsys 325cstar_do_call: 326 IA32_ARG_FIXUP 1 327cstar_dispatch: 328 call *ia32_sys_call_table(,%rax,8) 329 movq %rax,RAX-ARGOFFSET(%rsp) 330 GET_THREAD_INFO(%r10) 331 DISABLE_INTERRUPTS(CLBR_NONE) 332 TRACE_IRQS_OFF 333 testl $_TIF_ALLWORK_MASK,TI_flags(%r10) 334 jnz sysretl_audit 335sysretl_from_sys_call: 336 andl $~TS_COMPAT,TI_status(%r10) 337 RESTORE_ARGS 1,-ARG_SKIP,1,1,1 338 movl RIP-ARGOFFSET(%rsp),%ecx 339 CFI_REGISTER rip,rcx 340 movl EFLAGS-ARGOFFSET(%rsp),%r11d 341 /*CFI_REGISTER rflags,r11*/ 342 xorq %r10,%r10 343 xorq %r9,%r9 344 xorq %r8,%r8 345 TRACE_IRQS_ON 346 movl RSP-ARGOFFSET(%rsp),%esp 347 CFI_RESTORE rsp 348 USERGS_SYSRET32 349 350#ifdef CONFIG_AUDITSYSCALL 351cstar_auditsys: 352 CFI_RESTORE_STATE 353 movl %r9d,R9-ARGOFFSET(%rsp) /* register to be clobbered by call */ 354 auditsys_entry_common 355 movl R9-ARGOFFSET(%rsp),%r9d /* reload 6th syscall arg */ 356 jmp cstar_dispatch 357 358sysretl_audit: 359 auditsys_exit sysretl_from_sys_call 360#endif 361 362cstar_tracesys: 363#ifdef CONFIG_AUDITSYSCALL 364 testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%r10) 365 jz cstar_auditsys 366#endif 367 xchgl %r9d,%ebp 368 SAVE_REST 369 CLEAR_RREGS 0, r9 370 movq $-ENOSYS,RAX(%rsp) /* ptrace can change this for a bad syscall */ 371 movq %rsp,%rdi /* &pt_regs -> arg1 */ 372 call syscall_trace_enter 373 LOAD_ARGS32 ARGOFFSET, 1 /* reload args from stack in case ptrace changed it */ 374 RESTORE_REST 375 xchgl %ebp,%r9d 376 cmpq $(IA32_NR_syscalls-1),%rax 377 ja int_ret_from_sys_call /* cstar_tracesys has set RAX(%rsp) */ 378 jmp cstar_do_call 379END(ia32_cstar_target) 380 381ia32_badarg: 382 movq $-EFAULT,%rax 383 jmp ia32_sysret 384 CFI_ENDPROC 385 386/* 387 * Emulated IA32 system calls via int 0x80. 388 * 389 * Arguments: 390 * %eax System call number. 391 * %ebx Arg1 392 * %ecx Arg2 393 * %edx Arg3 394 * %esi Arg4 395 * %edi Arg5 396 * %ebp Arg6 [note: not saved in the stack frame, should not be touched] 397 * 398 * Notes: 399 * Uses the same stack frame as the x86-64 version. 400 * All registers except %eax must be saved (but ptrace may violate that) 401 * Arguments are zero extended. For system calls that want sign extension and 402 * take long arguments a wrapper is needed. Most calls can just be called 403 * directly. 404 * Assumes it is only called from user space and entered with interrupts off. 405 */ 406 407ENTRY(ia32_syscall) 408 CFI_STARTPROC32 simple 409 CFI_SIGNAL_FRAME 410 CFI_DEF_CFA rsp,SS+8-RIP 411 /*CFI_REL_OFFSET ss,SS-RIP*/ 412 CFI_REL_OFFSET rsp,RSP-RIP 413 /*CFI_REL_OFFSET rflags,EFLAGS-RIP*/ 414 /*CFI_REL_OFFSET cs,CS-RIP*/ 415 CFI_REL_OFFSET rip,RIP-RIP 416 PARAVIRT_ADJUST_EXCEPTION_FRAME 417 SWAPGS 418 /* 419 * No need to follow this irqs on/off section: the syscall 420 * disabled irqs and here we enable it straight after entry: 421 */ 422 ENABLE_INTERRUPTS(CLBR_NONE) 423 movl %eax,%eax 424 pushq %rax 425 CFI_ADJUST_CFA_OFFSET 8 426 cld 427 /* note the registers are not zero extended to the sf. 428 this could be a problem. */ 429 SAVE_ARGS 0,0,1 430 GET_THREAD_INFO(%r10) 431 orl $TS_COMPAT,TI_status(%r10) 432 testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10) 433 jnz ia32_tracesys 434 cmpq $(IA32_NR_syscalls-1),%rax 435 ja ia32_badsys 436ia32_do_call: 437 IA32_ARG_FIXUP 438 call *ia32_sys_call_table(,%rax,8) # xxx: rip relative 439ia32_sysret: 440 movq %rax,RAX-ARGOFFSET(%rsp) 441ia32_ret_from_sys_call: 442 CLEAR_RREGS -ARGOFFSET 443 jmp int_ret_from_sys_call 444 445ia32_tracesys: 446 SAVE_REST 447 CLEAR_RREGS 448 movq $-ENOSYS,RAX(%rsp) /* ptrace can change this for a bad syscall */ 449 movq %rsp,%rdi /* &pt_regs -> arg1 */ 450 call syscall_trace_enter 451 LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */ 452 RESTORE_REST 453 cmpq $(IA32_NR_syscalls-1),%rax 454 ja int_ret_from_sys_call /* ia32_tracesys has set RAX(%rsp) */ 455 jmp ia32_do_call 456END(ia32_syscall) 457 458ia32_badsys: 459 movq $0,ORIG_RAX-ARGOFFSET(%rsp) 460 movq $-ENOSYS,%rax 461 jmp ia32_sysret 462 463quiet_ni_syscall: 464 movq $-ENOSYS,%rax 465 ret 466 CFI_ENDPROC 467 468 .macro PTREGSCALL label, func, arg 469 .globl \label 470\label: 471 leaq \func(%rip),%rax 472 leaq -ARGOFFSET+8(%rsp),\arg /* 8 for return address */ 473 jmp ia32_ptregs_common 474 .endm 475 476 CFI_STARTPROC32 477 478 PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn, %rdi 479 PTREGSCALL stub32_sigreturn, sys32_sigreturn, %rdi 480 PTREGSCALL stub32_sigaltstack, sys32_sigaltstack, %rdx 481 PTREGSCALL stub32_execve, sys32_execve, %rcx 482 PTREGSCALL stub32_fork, sys_fork, %rdi 483 PTREGSCALL stub32_clone, sys32_clone, %rdx 484 PTREGSCALL stub32_vfork, sys_vfork, %rdi 485 PTREGSCALL stub32_iopl, sys_iopl, %rsi 486 487ENTRY(ia32_ptregs_common) 488 popq %r11 489 CFI_ENDPROC 490 CFI_STARTPROC32 simple 491 CFI_SIGNAL_FRAME 492 CFI_DEF_CFA rsp,SS+8-ARGOFFSET 493 CFI_REL_OFFSET rax,RAX-ARGOFFSET 494 CFI_REL_OFFSET rcx,RCX-ARGOFFSET 495 CFI_REL_OFFSET rdx,RDX-ARGOFFSET 496 CFI_REL_OFFSET rsi,RSI-ARGOFFSET 497 CFI_REL_OFFSET rdi,RDI-ARGOFFSET 498 CFI_REL_OFFSET rip,RIP-ARGOFFSET 499/* CFI_REL_OFFSET cs,CS-ARGOFFSET*/ 500/* CFI_REL_OFFSET rflags,EFLAGS-ARGOFFSET*/ 501 CFI_REL_OFFSET rsp,RSP-ARGOFFSET 502/* CFI_REL_OFFSET ss,SS-ARGOFFSET*/ 503 SAVE_REST 504 call *%rax 505 RESTORE_REST 506 jmp ia32_sysret /* misbalances the return cache */ 507 CFI_ENDPROC 508END(ia32_ptregs_common) 509 510 .section .rodata,"a" 511 .align 8 512ia32_sys_call_table: 513 .quad sys_restart_syscall 514 .quad sys_exit 515 .quad stub32_fork 516 .quad sys_read 517 .quad sys_write 518 .quad compat_sys_open /* 5 */ 519 .quad sys_close 520 .quad sys32_waitpid 521 .quad sys_creat 522 .quad sys_link 523 .quad sys_unlink /* 10 */ 524 .quad stub32_execve 525 .quad sys_chdir 526 .quad compat_sys_time 527 .quad sys_mknod 528 .quad sys_chmod /* 15 */ 529 .quad sys_lchown16 530 .quad quiet_ni_syscall /* old break syscall holder */ 531 .quad sys_stat 532 .quad sys32_lseek 533 .quad sys_getpid /* 20 */ 534 .quad compat_sys_mount /* mount */ 535 .quad sys_oldumount /* old_umount */ 536 .quad sys_setuid16 537 .quad sys_getuid16 538 .quad compat_sys_stime /* stime */ /* 25 */ 539 .quad compat_sys_ptrace /* ptrace */ 540 .quad sys_alarm 541 .quad sys_fstat /* (old)fstat */ 542 .quad sys_pause 543 .quad compat_sys_utime /* 30 */ 544 .quad quiet_ni_syscall /* old stty syscall holder */ 545 .quad quiet_ni_syscall /* old gtty syscall holder */ 546 .quad sys_access 547 .quad sys_nice 548 .quad quiet_ni_syscall /* 35 */ /* old ftime syscall holder */ 549 .quad sys_sync 550 .quad sys32_kill 551 .quad sys_rename 552 .quad sys_mkdir 553 .quad sys_rmdir /* 40 */ 554 .quad sys_dup 555 .quad sys_pipe 556 .quad compat_sys_times 557 .quad quiet_ni_syscall /* old prof syscall holder */ 558 .quad sys_brk /* 45 */ 559 .quad sys_setgid16 560 .quad sys_getgid16 561 .quad sys_signal 562 .quad sys_geteuid16 563 .quad sys_getegid16 /* 50 */ 564 .quad sys_acct 565 .quad sys_umount /* new_umount */ 566 .quad quiet_ni_syscall /* old lock syscall holder */ 567 .quad compat_sys_ioctl 568 .quad compat_sys_fcntl64 /* 55 */ 569 .quad quiet_ni_syscall /* old mpx syscall holder */ 570 .quad sys_setpgid 571 .quad quiet_ni_syscall /* old ulimit syscall holder */ 572 .quad sys_olduname 573 .quad sys_umask /* 60 */ 574 .quad sys_chroot 575 .quad compat_sys_ustat 576 .quad sys_dup2 577 .quad sys_getppid 578 .quad sys_getpgrp /* 65 */ 579 .quad sys_setsid 580 .quad sys32_sigaction 581 .quad sys_sgetmask 582 .quad sys_ssetmask 583 .quad sys_setreuid16 /* 70 */ 584 .quad sys_setregid16 585 .quad sys32_sigsuspend 586 .quad compat_sys_sigpending 587 .quad sys_sethostname 588 .quad compat_sys_setrlimit /* 75 */ 589 .quad compat_sys_old_getrlimit /* old_getrlimit */ 590 .quad compat_sys_getrusage 591 .quad compat_sys_gettimeofday 592 .quad compat_sys_settimeofday 593 .quad sys_getgroups16 /* 80 */ 594 .quad sys_setgroups16 595 .quad compat_sys_old_select 596 .quad sys_symlink 597 .quad sys_lstat 598 .quad sys_readlink /* 85 */ 599 .quad sys_uselib 600 .quad sys_swapon 601 .quad sys_reboot 602 .quad compat_sys_old_readdir 603 .quad sys32_mmap /* 90 */ 604 .quad sys_munmap 605 .quad sys_truncate 606 .quad sys_ftruncate 607 .quad sys_fchmod 608 .quad sys_fchown16 /* 95 */ 609 .quad sys_getpriority 610 .quad sys_setpriority 611 .quad quiet_ni_syscall /* old profil syscall holder */ 612 .quad compat_sys_statfs 613 .quad compat_sys_fstatfs /* 100 */ 614 .quad sys_ioperm 615 .quad compat_sys_socketcall 616 .quad sys_syslog 617 .quad compat_sys_setitimer 618 .quad compat_sys_getitimer /* 105 */ 619 .quad compat_sys_newstat 620 .quad compat_sys_newlstat 621 .quad compat_sys_newfstat 622 .quad sys_uname 623 .quad stub32_iopl /* 110 */ 624 .quad sys_vhangup 625 .quad quiet_ni_syscall /* old "idle" system call */ 626 .quad sys32_vm86_warning /* vm86old */ 627 .quad compat_sys_wait4 628 .quad sys_swapoff /* 115 */ 629 .quad compat_sys_sysinfo 630 .quad sys32_ipc 631 .quad sys_fsync 632 .quad stub32_sigreturn 633 .quad stub32_clone /* 120 */ 634 .quad sys_setdomainname 635 .quad sys_newuname 636 .quad sys_modify_ldt 637 .quad compat_sys_adjtimex 638 .quad sys32_mprotect /* 125 */ 639 .quad compat_sys_sigprocmask 640 .quad quiet_ni_syscall /* create_module */ 641 .quad sys_init_module 642 .quad sys_delete_module 643 .quad quiet_ni_syscall /* 130 get_kernel_syms */ 644 .quad sys32_quotactl 645 .quad sys_getpgid 646 .quad sys_fchdir 647 .quad quiet_ni_syscall /* bdflush */ 648 .quad sys_sysfs /* 135 */ 649 .quad sys_personality 650 .quad quiet_ni_syscall /* for afs_syscall */ 651 .quad sys_setfsuid16 652 .quad sys_setfsgid16 653 .quad sys_llseek /* 140 */ 654 .quad compat_sys_getdents 655 .quad compat_sys_select 656 .quad sys_flock 657 .quad sys_msync 658 .quad compat_sys_readv /* 145 */ 659 .quad compat_sys_writev 660 .quad sys_getsid 661 .quad sys_fdatasync 662 .quad compat_sys_sysctl /* sysctl */ 663 .quad sys_mlock /* 150 */ 664 .quad sys_munlock 665 .quad sys_mlockall 666 .quad sys_munlockall 667 .quad sys_sched_setparam 668 .quad sys_sched_getparam /* 155 */ 669 .quad sys_sched_setscheduler 670 .quad sys_sched_getscheduler 671 .quad sys_sched_yield 672 .quad sys_sched_get_priority_max 673 .quad sys_sched_get_priority_min /* 160 */ 674 .quad sys32_sched_rr_get_interval 675 .quad compat_sys_nanosleep 676 .quad sys_mremap 677 .quad sys_setresuid16 678 .quad sys_getresuid16 /* 165 */ 679 .quad sys32_vm86_warning /* vm86 */ 680 .quad quiet_ni_syscall /* query_module */ 681 .quad sys_poll 682 .quad compat_sys_nfsservctl 683 .quad sys_setresgid16 /* 170 */ 684 .quad sys_getresgid16 685 .quad sys_prctl 686 .quad stub32_rt_sigreturn 687 .quad sys32_rt_sigaction 688 .quad sys32_rt_sigprocmask /* 175 */ 689 .quad sys32_rt_sigpending 690 .quad compat_sys_rt_sigtimedwait 691 .quad sys32_rt_sigqueueinfo 692 .quad sys_rt_sigsuspend 693 .quad sys32_pread /* 180 */ 694 .quad sys32_pwrite 695 .quad sys_chown16 696 .quad sys_getcwd 697 .quad sys_capget 698 .quad sys_capset 699 .quad stub32_sigaltstack 700 .quad sys32_sendfile 701 .quad quiet_ni_syscall /* streams1 */ 702 .quad quiet_ni_syscall /* streams2 */ 703 .quad stub32_vfork /* 190 */ 704 .quad compat_sys_getrlimit 705 .quad sys_mmap_pgoff 706 .quad sys32_truncate64 707 .quad sys32_ftruncate64 708 .quad sys32_stat64 /* 195 */ 709 .quad sys32_lstat64 710 .quad sys32_fstat64 711 .quad sys_lchown 712 .quad sys_getuid 713 .quad sys_getgid /* 200 */ 714 .quad sys_geteuid 715 .quad sys_getegid 716 .quad sys_setreuid 717 .quad sys_setregid 718 .quad sys_getgroups /* 205 */ 719 .quad sys_setgroups 720 .quad sys_fchown 721 .quad sys_setresuid 722 .quad sys_getresuid 723 .quad sys_setresgid /* 210 */ 724 .quad sys_getresgid 725 .quad sys_chown 726 .quad sys_setuid 727 .quad sys_setgid 728 .quad sys_setfsuid /* 215 */ 729 .quad sys_setfsgid 730 .quad sys_pivot_root 731 .quad sys_mincore 732 .quad sys_madvise 733 .quad compat_sys_getdents64 /* 220 getdents64 */ 734 .quad compat_sys_fcntl64 735 .quad quiet_ni_syscall /* tux */ 736 .quad quiet_ni_syscall /* security */ 737 .quad sys_gettid 738 .quad sys32_readahead /* 225 */ 739 .quad sys_setxattr 740 .quad sys_lsetxattr 741 .quad sys_fsetxattr 742 .quad sys_getxattr 743 .quad sys_lgetxattr /* 230 */ 744 .quad sys_fgetxattr 745 .quad sys_listxattr 746 .quad sys_llistxattr 747 .quad sys_flistxattr 748 .quad sys_removexattr /* 235 */ 749 .quad sys_lremovexattr 750 .quad sys_fremovexattr 751 .quad sys_tkill 752 .quad sys_sendfile64 753 .quad compat_sys_futex /* 240 */ 754 .quad compat_sys_sched_setaffinity 755 .quad compat_sys_sched_getaffinity 756 .quad sys_set_thread_area 757 .quad sys_get_thread_area 758 .quad compat_sys_io_setup /* 245 */ 759 .quad sys_io_destroy 760 .quad compat_sys_io_getevents 761 .quad compat_sys_io_submit 762 .quad sys_io_cancel 763 .quad sys32_fadvise64 /* 250 */ 764 .quad quiet_ni_syscall /* free_huge_pages */ 765 .quad sys_exit_group 766 .quad sys32_lookup_dcookie 767 .quad sys_epoll_create 768 .quad sys_epoll_ctl /* 255 */ 769 .quad sys_epoll_wait 770 .quad sys_remap_file_pages 771 .quad sys_set_tid_address 772 .quad compat_sys_timer_create 773 .quad compat_sys_timer_settime /* 260 */ 774 .quad compat_sys_timer_gettime 775 .quad sys_timer_getoverrun 776 .quad sys_timer_delete 777 .quad compat_sys_clock_settime 778 .quad compat_sys_clock_gettime /* 265 */ 779 .quad compat_sys_clock_getres 780 .quad compat_sys_clock_nanosleep 781 .quad compat_sys_statfs64 782 .quad compat_sys_fstatfs64 783 .quad sys_tgkill /* 270 */ 784 .quad compat_sys_utimes 785 .quad sys32_fadvise64_64 786 .quad quiet_ni_syscall /* sys_vserver */ 787 .quad sys_mbind 788 .quad compat_sys_get_mempolicy /* 275 */ 789 .quad sys_set_mempolicy 790 .quad compat_sys_mq_open 791 .quad sys_mq_unlink 792 .quad compat_sys_mq_timedsend 793 .quad compat_sys_mq_timedreceive /* 280 */ 794 .quad compat_sys_mq_notify 795 .quad compat_sys_mq_getsetattr 796 .quad compat_sys_kexec_load /* reserved for kexec */ 797 .quad compat_sys_waitid 798 .quad quiet_ni_syscall /* 285: sys_altroot */ 799 .quad sys_add_key 800 .quad sys_request_key 801 .quad sys_keyctl 802 .quad sys_ioprio_set 803 .quad sys_ioprio_get /* 290 */ 804 .quad sys_inotify_init 805 .quad sys_inotify_add_watch 806 .quad sys_inotify_rm_watch 807 .quad sys_migrate_pages 808 .quad compat_sys_openat /* 295 */ 809 .quad sys_mkdirat 810 .quad sys_mknodat 811 .quad sys_fchownat 812 .quad compat_sys_futimesat 813 .quad sys32_fstatat /* 300 */ 814 .quad sys_unlinkat 815 .quad sys_renameat 816 .quad sys_linkat 817 .quad sys_symlinkat 818 .quad sys_readlinkat /* 305 */ 819 .quad sys_fchmodat 820 .quad sys_faccessat 821 .quad compat_sys_pselect6 822 .quad compat_sys_ppoll 823 .quad sys_unshare /* 310 */ 824 .quad compat_sys_set_robust_list 825 .quad compat_sys_get_robust_list 826 .quad sys_splice 827 .quad sys32_sync_file_range 828 .quad sys_tee /* 315 */ 829 .quad compat_sys_vmsplice 830 .quad compat_sys_move_pages 831 .quad sys_getcpu 832 .quad sys_epoll_pwait 833 .quad compat_sys_utimensat /* 320 */ 834 .quad compat_sys_signalfd 835 .quad sys_timerfd_create 836 .quad sys_eventfd 837 .quad sys32_fallocate 838 .quad compat_sys_timerfd_settime /* 325 */ 839 .quad compat_sys_timerfd_gettime 840 .quad compat_sys_signalfd4 841 .quad sys_eventfd2 842 .quad sys_epoll_create1 843 .quad sys_dup3 /* 330 */ 844 .quad sys_pipe2 845 .quad sys_inotify_init1 846 .quad compat_sys_preadv 847 .quad compat_sys_pwritev 848 .quad compat_sys_rt_tgsigqueueinfo /* 335 */ 849 .quad sys_perf_event_open 850 .quad compat_sys_recvmmsg 851 .quad sys_fanotify_init 852 .quad sys32_fanotify_mark 853 .quad sys_prlimit64 /* 340 */ 854ia32_syscall_end: 855