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

