linux/arch/x86/ia32/ia32entry.S
<<
>>
Prefs
   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
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.