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        .section .entry.text, "ax"
  29
  30#define IA32_NR_syscalls ((ia32_syscall_end - ia32_sys_call_table)/8)
  31
  32        .macro IA32_ARG_FIXUP noebp=0
  33        movl    %edi,%r8d
  34        .if \noebp
  35        .else
  36        movl    %ebp,%r9d
  37        .endif
  38        xchg    %ecx,%esi
  39        movl    %ebx,%edi
  40        movl    %edx,%edx       /* zero extension */
  41        .endm 
  42
  43        /* clobbers %eax */     
  44        .macro  CLEAR_RREGS offset=0, _r9=rax
  45        xorl    %eax,%eax
  46        movq    %rax,\offset+R11(%rsp)
  47        movq    %rax,\offset+R10(%rsp)
  48        movq    %\_r9,\offset+R9(%rsp)
  49        movq    %rax,\offset+R8(%rsp)
  50        .endm
  51
  52        /*
  53         * Reload arg registers from stack in case ptrace changed them.
  54         * We don't reload %eax because syscall_trace_enter() returned
  55         * the %rax value we should see.  Instead, we just truncate that
  56         * value to 32 bits again as we did on entry from user mode.
  57         * If it's a new value set by user_regset during entry tracing,
  58         * this matches the normal truncation of the user-mode value.
  59         * If it's -1 to make us punt the syscall, then (u32)-1 is still
  60         * an appropriately invalid value.
  61         */
  62        .macro LOAD_ARGS32 offset, _r9=0
  63        .if \_r9
  64        movl \offset+16(%rsp),%r9d
  65        .endif
  66        movl \offset+40(%rsp),%ecx
  67        movl \offset+48(%rsp),%edx
  68        movl \offset+56(%rsp),%esi
  69        movl \offset+64(%rsp),%edi
  70        movl %eax,%eax                  /* zero extension */
  71        .endm
  72        
  73        .macro CFI_STARTPROC32 simple
  74        CFI_STARTPROC   \simple
  75        CFI_UNDEFINED   r8
  76        CFI_UNDEFINED   r9
  77        CFI_UNDEFINED   r10
  78        CFI_UNDEFINED   r11
  79        CFI_UNDEFINED   r12
  80        CFI_UNDEFINED   r13
  81        CFI_UNDEFINED   r14
  82        CFI_UNDEFINED   r15
  83        .endm
  84
  85#ifdef CONFIG_PARAVIRT
  86ENTRY(native_usergs_sysret32)
  87        swapgs
  88        sysretl
  89ENDPROC(native_usergs_sysret32)
  90
  91ENTRY(native_irq_enable_sysexit)
  92        swapgs
  93        sti
  94        sysexit
  95ENDPROC(native_irq_enable_sysexit)
  96#endif
  97
  98/*
  99 * 32bit SYSENTER instruction entry.
 100 *
 101 * Arguments:
 102 * %eax System call number.
 103 * %ebx Arg1
 104 * %ecx Arg2
 105 * %edx Arg3
 106 * %esi Arg4
 107 * %edi Arg5
 108 * %ebp user stack
 109 * 0(%ebp) Arg6 
 110 *      
 111 * Interrupts off.
 112 *      
 113 * This is purely a fast path. For anything complicated we use the int 0x80
 114 * path below.  Set up a complete hardware stack frame to share code
 115 * with the int 0x80 path.
 116 */     
 117ENTRY(ia32_sysenter_target)
 118        CFI_STARTPROC32 simple
 119        CFI_SIGNAL_FRAME
 120        CFI_DEF_CFA     rsp,0
 121        CFI_REGISTER    rsp,rbp
 122        SWAPGS_UNSAFE_STACK
 123        movq    PER_CPU_VAR(kernel_stack), %rsp
 124        addq    $(KERNEL_STACK_OFFSET),%rsp
 125        /*
 126         * No need to follow this irqs on/off section: the syscall
 127         * disabled irqs, here we enable it straight after entry:
 128         */
 129        ENABLE_INTERRUPTS(CLBR_NONE)
 130        movl    %ebp,%ebp               /* zero extension */
 131        pushq_cfi $__USER32_DS
 132        /*CFI_REL_OFFSET ss,0*/
 133        pushq_cfi %rbp
 134        CFI_REL_OFFSET rsp,0
 135        pushfq_cfi
 136        /*CFI_REL_OFFSET rflags,0*/
 137        movl    8*3-THREAD_SIZE+TI_sysenter_return(%rsp), %r10d
 138        CFI_REGISTER rip,r10
 139        pushq_cfi $__USER32_CS
 140        /*CFI_REL_OFFSET cs,0*/
 141        movl    %eax, %eax
 142        pushq_cfi %r10
 143        CFI_REL_OFFSET rip,0
 144        pushq_cfi %rax
 145        cld
 146        SAVE_ARGS 0,1,0
 147        /* no need to do an access_ok check here because rbp has been
 148           32bit zero extended */ 
 1491:      movl    (%rbp),%ebp
 150        .section __ex_table,"a"
 151        .quad 1b,ia32_badarg
 152        .previous       
 153        GET_THREAD_INFO(%r10)
 154        orl    $TS_COMPAT,TI_status(%r10)
 155        testl  $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10)
 156        CFI_REMEMBER_STATE
 157        jnz  sysenter_tracesys
 158        cmpq    $(IA32_NR_syscalls-1),%rax
 159        ja      ia32_badsys
 160sysenter_do_call:
 161        IA32_ARG_FIXUP
 162sysenter_dispatch:
 163        call    *ia32_sys_call_table(,%rax,8)
 164        movq    %rax,RAX-ARGOFFSET(%rsp)
 165        GET_THREAD_INFO(%r10)
 166        DISABLE_INTERRUPTS(CLBR_NONE)
 167        TRACE_IRQS_OFF
 168        testl   $_TIF_ALLWORK_MASK,TI_flags(%r10)
 169        jnz     sysexit_audit
 170sysexit_from_sys_call:
 171        andl    $~TS_COMPAT,TI_status(%r10)
 172        /* clear IF, that popfq doesn't enable interrupts early */
 173        andl  $~0x200,EFLAGS-R11(%rsp) 
 174        movl    RIP-R11(%rsp),%edx              /* User %eip */
 175        CFI_REGISTER rip,rdx
 176        RESTORE_ARGS 0,24,0,0,0,0
 177        xorq    %r8,%r8
 178        xorq    %r9,%r9
 179        xorq    %r10,%r10
 180        xorq    %r11,%r11
 181        popfq_cfi
 182        /*CFI_RESTORE rflags*/
 183        popq_cfi %rcx                           /* User %esp */
 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        cmpq $(IA32_NR_syscalls-1),%rax
 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        cmpq    $(IA32_NR_syscalls-1),%rax
 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,0,0
 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        cmpq $IA32_NR_syscalls-1,%rax
 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 0,-ARG_SKIP,0,0,0
 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        cmpq $(IA32_NR_syscalls-1),%rax
 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_cfi %rax
 419        cld
 420        /* note the registers are not zero extended to the sf.
 421           this could be a problem. */
 422        SAVE_ARGS 0,1,0
 423        GET_THREAD_INFO(%r10)
 424        orl   $TS_COMPAT,TI_status(%r10)
 425        testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10)
 426        jnz ia32_tracesys
 427        cmpq $(IA32_NR_syscalls-1),%rax
 428        ja ia32_badsys
 429ia32_do_call:
 430        IA32_ARG_FIXUP
 431        call *ia32_sys_call_table(,%rax,8) # xxx: rip relative
 432ia32_sysret:
 433        movq %rax,RAX-ARGOFFSET(%rsp)
 434ia32_ret_from_sys_call:
 435        CLEAR_RREGS -ARGOFFSET
 436        jmp int_ret_from_sys_call 
 437
 438ia32_tracesys:                   
 439        SAVE_REST
 440        CLEAR_RREGS
 441        movq $-ENOSYS,RAX(%rsp) /* ptrace can change this for a bad syscall */
 442        movq %rsp,%rdi        /* &pt_regs -> arg1 */
 443        call syscall_trace_enter
 444        LOAD_ARGS32 ARGOFFSET  /* reload args from stack in case ptrace changed it */
 445        RESTORE_REST
 446        cmpq $(IA32_NR_syscalls-1),%rax
 447        ja  int_ret_from_sys_call       /* ia32_tracesys has set RAX(%rsp) */
 448        jmp ia32_do_call
 449END(ia32_syscall)
 450
 451ia32_badsys:
 452        movq $0,ORIG_RAX-ARGOFFSET(%rsp)
 453        movq $-ENOSYS,%rax
 454        jmp ia32_sysret
 455
 456quiet_ni_syscall:
 457        movq $-ENOSYS,%rax
 458        ret
 459        CFI_ENDPROC
 460        
 461        .macro PTREGSCALL label, func, arg
 462        .globl \label
 463\label:
 464        leaq \func(%rip),%rax
 465        leaq -ARGOFFSET+8(%rsp),\arg    /* 8 for return address */
 466        jmp  ia32_ptregs_common 
 467        .endm
 468
 469        CFI_STARTPROC32
 470
 471        PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn, %rdi
 472        PTREGSCALL stub32_sigreturn, sys32_sigreturn, %rdi
 473        PTREGSCALL stub32_sigaltstack, sys32_sigaltstack, %rdx
 474        PTREGSCALL stub32_execve, sys32_execve, %rcx
 475        PTREGSCALL stub32_fork, sys_fork, %rdi
 476        PTREGSCALL stub32_clone, sys32_clone, %rdx
 477        PTREGSCALL stub32_vfork, sys_vfork, %rdi
 478        PTREGSCALL stub32_iopl, sys_iopl, %rsi
 479
 480ENTRY(ia32_ptregs_common)
 481        popq %r11
 482        CFI_ENDPROC
 483        CFI_STARTPROC32 simple
 484        CFI_SIGNAL_FRAME
 485        CFI_DEF_CFA     rsp,SS+8-ARGOFFSET
 486        CFI_REL_OFFSET  rax,RAX-ARGOFFSET
 487        CFI_REL_OFFSET  rcx,RCX-ARGOFFSET
 488        CFI_REL_OFFSET  rdx,RDX-ARGOFFSET
 489        CFI_REL_OFFSET  rsi,RSI-ARGOFFSET
 490        CFI_REL_OFFSET  rdi,RDI-ARGOFFSET
 491        CFI_REL_OFFSET  rip,RIP-ARGOFFSET
 492/*      CFI_REL_OFFSET  cs,CS-ARGOFFSET*/
 493/*      CFI_REL_OFFSET  rflags,EFLAGS-ARGOFFSET*/
 494        CFI_REL_OFFSET  rsp,RSP-ARGOFFSET
 495/*      CFI_REL_OFFSET  ss,SS-ARGOFFSET*/
 496        SAVE_REST
 497        call *%rax
 498        RESTORE_REST
 499        jmp  ia32_sysret        /* misbalances the return cache */
 500        CFI_ENDPROC
 501END(ia32_ptregs_common)
 502
 503        .section .rodata,"a"
 504        .align 8
 505ia32_sys_call_table:
 506        .quad sys_restart_syscall
 507        .quad sys_exit
 508        .quad stub32_fork
 509        .quad sys_read
 510        .quad sys_write
 511        .quad compat_sys_open           /* 5 */
 512        .quad sys_close
 513        .quad sys32_waitpid
 514        .quad sys_creat
 515        .quad sys_link
 516        .quad sys_unlink                /* 10 */
 517        .quad stub32_execve
 518        .quad sys_chdir
 519        .quad compat_sys_time
 520        .quad sys_mknod
 521        .quad sys_chmod         /* 15 */
 522        .quad sys_lchown16
 523        .quad quiet_ni_syscall                  /* old break syscall holder */
 524        .quad sys_stat
 525        .quad sys32_lseek
 526        .quad sys_getpid                /* 20 */
 527        .quad compat_sys_mount  /* mount  */
 528        .quad sys_oldumount     /* old_umount  */
 529        .quad sys_setuid16
 530        .quad sys_getuid16
 531        .quad compat_sys_stime  /* stime */             /* 25 */
 532        .quad compat_sys_ptrace /* ptrace */
 533        .quad sys_alarm
 534        .quad sys_fstat /* (old)fstat */
 535        .quad sys_pause
 536        .quad compat_sys_utime  /* 30 */
 537        .quad quiet_ni_syscall  /* old stty syscall holder */
 538        .quad quiet_ni_syscall  /* old gtty syscall holder */
 539        .quad sys_access
 540        .quad sys_nice  
 541        .quad quiet_ni_syscall  /* 35 */        /* old ftime syscall holder */
 542        .quad sys_sync
 543        .quad sys32_kill
 544        .quad sys_rename
 545        .quad sys_mkdir
 546        .quad sys_rmdir         /* 40 */
 547        .quad sys_dup
 548        .quad sys_pipe
 549        .quad compat_sys_times
 550        .quad quiet_ni_syscall                  /* old prof syscall holder */
 551        .quad sys_brk           /* 45 */
 552        .quad sys_setgid16
 553        .quad sys_getgid16
 554        .quad sys_signal
 555        .quad sys_geteuid16
 556        .quad sys_getegid16     /* 50 */
 557        .quad sys_acct
 558        .quad sys_umount                        /* new_umount */
 559        .quad quiet_ni_syscall                  /* old lock syscall holder */
 560        .quad compat_sys_ioctl
 561        .quad compat_sys_fcntl64                /* 55 */
 562        .quad quiet_ni_syscall                  /* old mpx syscall holder */
 563        .quad sys_setpgid
 564        .quad quiet_ni_syscall                  /* old ulimit syscall holder */
 565        .quad sys_olduname
 566        .quad sys_umask         /* 60 */
 567        .quad sys_chroot
 568        .quad compat_sys_ustat
 569        .quad sys_dup2
 570        .quad sys_getppid
 571        .quad sys_getpgrp               /* 65 */
 572        .quad sys_setsid
 573        .quad sys32_sigaction
 574        .quad sys_sgetmask
 575        .quad sys_ssetmask
 576        .quad sys_setreuid16    /* 70 */
 577        .quad sys_setregid16
 578        .quad sys32_sigsuspend
 579        .quad compat_sys_sigpending
 580        .quad sys_sethostname
 581        .quad compat_sys_setrlimit      /* 75 */
 582        .quad compat_sys_old_getrlimit  /* old_getrlimit */
 583        .quad compat_sys_getrusage
 584        .quad compat_sys_gettimeofday
 585        .quad compat_sys_settimeofday
 586        .quad sys_getgroups16   /* 80 */
 587        .quad sys_setgroups16
 588        .quad compat_sys_old_select
 589        .quad sys_symlink
 590        .quad sys_lstat
 591        .quad sys_readlink              /* 85 */
 592        .quad sys_uselib
 593        .quad sys_swapon
 594        .quad sys_reboot
 595        .quad compat_sys_old_readdir
 596        .quad sys32_mmap                /* 90 */
 597        .quad sys_munmap
 598        .quad sys_truncate
 599        .quad sys_ftruncate
 600        .quad sys_fchmod
 601        .quad sys_fchown16              /* 95 */
 602        .quad sys_getpriority
 603        .quad sys_setpriority
 604        .quad quiet_ni_syscall                  /* old profil syscall holder */
 605        .quad compat_sys_statfs
 606        .quad compat_sys_fstatfs                /* 100 */
 607        .quad sys_ioperm
 608        .quad compat_sys_socketcall
 609        .quad sys_syslog
 610        .quad compat_sys_setitimer
 611        .quad compat_sys_getitimer      /* 105 */
 612        .quad compat_sys_newstat
 613        .quad compat_sys_newlstat
 614        .quad compat_sys_newfstat
 615        .quad sys_uname
 616        .quad stub32_iopl               /* 110 */
 617        .quad sys_vhangup
 618        .quad quiet_ni_syscall  /* old "idle" system call */
 619        .quad sys32_vm86_warning        /* vm86old */ 
 620        .quad compat_sys_wait4
 621        .quad sys_swapoff               /* 115 */
 622        .quad compat_sys_sysinfo
 623        .quad sys32_ipc
 624        .quad sys_fsync
 625        .quad stub32_sigreturn
 626        .quad stub32_clone              /* 120 */
 627        .quad sys_setdomainname
 628        .quad sys_newuname
 629        .quad sys_modify_ldt
 630        .quad compat_sys_adjtimex
 631        .quad sys32_mprotect            /* 125 */
 632        .quad compat_sys_sigprocmask
 633        .quad quiet_ni_syscall          /* create_module */
 634        .quad sys_init_module
 635        .quad sys_delete_module
 636        .quad quiet_ni_syscall          /* 130  get_kernel_syms */
 637        .quad sys32_quotactl
 638        .quad sys_getpgid
 639        .quad sys_fchdir
 640        .quad quiet_ni_syscall  /* bdflush */
 641        .quad sys_sysfs         /* 135 */
 642        .quad sys_personality
 643        .quad quiet_ni_syscall  /* for afs_syscall */
 644        .quad sys_setfsuid16
 645        .quad sys_setfsgid16
 646        .quad sys_llseek                /* 140 */
 647        .quad compat_sys_getdents
 648        .quad compat_sys_select
 649        .quad sys_flock
 650        .quad sys_msync
 651        .quad compat_sys_readv          /* 145 */
 652        .quad compat_sys_writev
 653        .quad sys_getsid
 654        .quad sys_fdatasync
 655        .quad compat_sys_sysctl /* sysctl */
 656        .quad sys_mlock         /* 150 */
 657        .quad sys_munlock
 658        .quad sys_mlockall
 659        .quad sys_munlockall
 660        .quad sys_sched_setparam
 661        .quad sys_sched_getparam   /* 155 */
 662        .quad sys_sched_setscheduler
 663        .quad sys_sched_getscheduler
 664        .quad sys_sched_yield
 665        .quad sys_sched_get_priority_max
 666        .quad sys_sched_get_priority_min  /* 160 */
 667        .quad sys32_sched_rr_get_interval
 668        .quad compat_sys_nanosleep
 669        .quad sys_mremap
 670        .quad sys_setresuid16
 671        .quad sys_getresuid16   /* 165 */
 672        .quad sys32_vm86_warning        /* vm86 */ 
 673        .quad quiet_ni_syscall  /* query_module */
 674        .quad sys_poll
 675        .quad quiet_ni_syscall /* old nfsservctl */
 676        .quad sys_setresgid16   /* 170 */
 677        .quad sys_getresgid16
 678        .quad sys_prctl
 679        .quad stub32_rt_sigreturn
 680        .quad sys32_rt_sigaction
 681        .quad sys32_rt_sigprocmask      /* 175 */
 682        .quad sys32_rt_sigpending
 683        .quad compat_sys_rt_sigtimedwait
 684        .quad sys32_rt_sigqueueinfo
 685        .quad sys_rt_sigsuspend
 686        .quad sys32_pread               /* 180 */
 687        .quad sys32_pwrite
 688        .quad sys_chown16
 689        .quad sys_getcwd
 690        .quad sys_capget
 691        .quad sys_capset
 692        .quad stub32_sigaltstack
 693        .quad sys32_sendfile
 694        .quad quiet_ni_syscall          /* streams1 */
 695        .quad quiet_ni_syscall          /* streams2 */
 696        .quad stub32_vfork            /* 190 */
 697        .quad compat_sys_getrlimit
 698        .quad sys_mmap_pgoff
 699        .quad sys32_truncate64
 700        .quad sys32_ftruncate64
 701        .quad sys32_stat64              /* 195 */
 702        .quad sys32_lstat64
 703        .quad sys32_fstat64
 704        .quad sys_lchown
 705        .quad sys_getuid
 706        .quad sys_getgid                /* 200 */
 707        .quad sys_geteuid
 708        .quad sys_getegid
 709        .quad sys_setreuid
 710        .quad sys_setregid
 711        .quad sys_getgroups     /* 205 */
 712        .quad sys_setgroups
 713        .quad sys_fchown
 714        .quad sys_setresuid
 715        .quad sys_getresuid
 716        .quad sys_setresgid     /* 210 */
 717        .quad sys_getresgid
 718        .quad sys_chown
 719        .quad sys_setuid
 720        .quad sys_setgid
 721        .quad sys_setfsuid              /* 215 */
 722        .quad sys_setfsgid
 723        .quad sys_pivot_root
 724        .quad sys_mincore
 725        .quad sys_madvise
 726        .quad compat_sys_getdents64     /* 220 getdents64 */
 727        .quad compat_sys_fcntl64        
 728        .quad quiet_ni_syscall          /* tux */
 729        .quad quiet_ni_syscall          /* security */
 730        .quad sys_gettid        
 731        .quad sys32_readahead   /* 225 */
 732        .quad sys_setxattr
 733        .quad sys_lsetxattr
 734        .quad sys_fsetxattr
 735        .quad sys_getxattr
 736        .quad sys_lgetxattr     /* 230 */
 737        .quad sys_fgetxattr
 738        .quad sys_listxattr
 739        .quad sys_llistxattr
 740        .quad sys_flistxattr
 741        .quad sys_removexattr   /* 235 */
 742        .quad sys_lremovexattr
 743        .quad sys_fremovexattr
 744        .quad sys_tkill
 745        .quad sys_sendfile64 
 746        .quad compat_sys_futex          /* 240 */
 747        .quad compat_sys_sched_setaffinity
 748        .quad compat_sys_sched_getaffinity
 749        .quad sys_set_thread_area
 750        .quad sys_get_thread_area
 751        .quad compat_sys_io_setup       /* 245 */
 752        .quad sys_io_destroy
 753        .quad compat_sys_io_getevents
 754        .quad compat_sys_io_submit
 755        .quad sys_io_cancel
 756        .quad sys32_fadvise64           /* 250 */
 757        .quad quiet_ni_syscall  /* free_huge_pages */
 758        .quad sys_exit_group
 759        .quad sys32_lookup_dcookie
 760        .quad sys_epoll_create
 761        .quad sys_epoll_ctl             /* 255 */
 762        .quad sys_epoll_wait
 763        .quad sys_remap_file_pages
 764        .quad sys_set_tid_address
 765        .quad compat_sys_timer_create
 766        .quad compat_sys_timer_settime  /* 260 */
 767        .quad compat_sys_timer_gettime
 768        .quad sys_timer_getoverrun
 769        .quad sys_timer_delete
 770        .quad compat_sys_clock_settime
 771        .quad compat_sys_clock_gettime  /* 265 */
 772        .quad compat_sys_clock_getres
 773        .quad compat_sys_clock_nanosleep
 774        .quad compat_sys_statfs64
 775        .quad compat_sys_fstatfs64
 776        .quad sys_tgkill                /* 270 */
 777        .quad compat_sys_utimes
 778        .quad sys32_fadvise64_64
 779        .quad quiet_ni_syscall  /* sys_vserver */
 780        .quad sys_mbind
 781        .quad compat_sys_get_mempolicy  /* 275 */
 782        .quad sys_set_mempolicy
 783        .quad compat_sys_mq_open
 784        .quad sys_mq_unlink
 785        .quad compat_sys_mq_timedsend
 786        .quad compat_sys_mq_timedreceive        /* 280 */
 787        .quad compat_sys_mq_notify
 788        .quad compat_sys_mq_getsetattr
 789        .quad compat_sys_kexec_load     /* reserved for kexec */
 790        .quad compat_sys_waitid
 791        .quad quiet_ni_syscall          /* 285: sys_altroot */
 792        .quad sys_add_key
 793        .quad sys_request_key
 794        .quad sys_keyctl
 795        .quad sys_ioprio_set
 796        .quad sys_ioprio_get            /* 290 */
 797        .quad sys_inotify_init
 798        .quad sys_inotify_add_watch
 799        .quad sys_inotify_rm_watch
 800        .quad sys_migrate_pages
 801        .quad compat_sys_openat         /* 295 */
 802        .quad sys_mkdirat
 803        .quad sys_mknodat
 804        .quad sys_fchownat
 805        .quad compat_sys_futimesat
 806        .quad sys32_fstatat             /* 300 */
 807        .quad sys_unlinkat
 808        .quad sys_renameat
 809        .quad sys_linkat
 810        .quad sys_symlinkat
 811        .quad sys_readlinkat            /* 305 */
 812        .quad sys_fchmodat
 813        .quad sys_faccessat
 814        .quad compat_sys_pselect6
 815        .quad compat_sys_ppoll
 816        .quad sys_unshare               /* 310 */
 817        .quad compat_sys_set_robust_list
 818        .quad compat_sys_get_robust_list
 819        .quad sys_splice
 820        .quad sys32_sync_file_range
 821        .quad sys_tee                   /* 315 */
 822        .quad compat_sys_vmsplice
 823        .quad compat_sys_move_pages
 824        .quad sys_getcpu
 825        .quad sys_epoll_pwait
 826        .quad compat_sys_utimensat      /* 320 */
 827        .quad compat_sys_signalfd
 828        .quad sys_timerfd_create
 829        .quad sys_eventfd
 830        .quad sys32_fallocate
 831        .quad compat_sys_timerfd_settime        /* 325 */
 832        .quad compat_sys_timerfd_gettime
 833        .quad compat_sys_signalfd4
 834        .quad sys_eventfd2
 835        .quad sys_epoll_create1
 836        .quad sys_dup3                          /* 330 */
 837        .quad sys_pipe2
 838        .quad sys_inotify_init1
 839        .quad compat_sys_preadv
 840        .quad compat_sys_pwritev
 841        .quad compat_sys_rt_tgsigqueueinfo      /* 335 */
 842        .quad sys_perf_event_open
 843        .quad compat_sys_recvmmsg
 844        .quad sys_fanotify_init
 845        .quad sys32_fanotify_mark
 846        .quad sys_prlimit64             /* 340 */
 847        .quad sys_name_to_handle_at
 848        .quad compat_sys_open_by_handle_at
 849        .quad compat_sys_clock_adjtime
 850        .quad sys_syncfs
 851        .quad compat_sys_sendmmsg       /* 345 */
 852        .quad sys_setns
 853        .quad compat_sys_process_vm_readv
 854        .quad compat_sys_process_vm_writev
 855ia32_syscall_end:
 856
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.