| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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> | 
| Sam Ravnborg | e2d5df9 | 2005-09-09 21:28:48 +0200 | [diff] [blame] | 9 | #include <asm/asm-offsets.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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> | 
| Ingo Molnar | 2601e64 | 2006-07-03 00:24:45 -0700 | [diff] [blame] | 15 | #include <asm/irqflags.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 16 | #include <linux/linkage.h> | 
|  | 17 |  | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 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 | 
| Jan Beulich | 24e3580 | 2009-09-30 11:22:11 +0100 | [diff] [blame] | 24 | #define sysexit_audit ia32_ret_from_sys_call | 
|  | 25 | #define sysretl_audit ia32_ret_from_sys_call | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 26 | #endif | 
|  | 27 |  | 
| Andi Kleen | 67d53ea | 2006-04-07 19:50:31 +0200 | [diff] [blame] | 28 | #define IA32_NR_syscalls ((ia32_syscall_end - ia32_sys_call_table)/8) | 
|  | 29 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 */ | 
| Jan Beulich | 24e3580 | 2009-09-30 11:22:11 +0100 | [diff] [blame] | 42 | .macro  CLEAR_RREGS offset=0, _r9=rax | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 43 | xorl 	%eax,%eax | 
| Jan Beulich | 24e3580 | 2009-09-30 11:22:11 +0100 | [diff] [blame] | 44 | movq	%rax,\offset+R11(%rsp) | 
|  | 45 | movq	%rax,\offset+R10(%rsp) | 
|  | 46 | movq	%\_r9,\offset+R9(%rsp) | 
|  | 47 | movq	%rax,\offset+R8(%rsp) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 48 | .endm | 
|  | 49 |  | 
| Roland McGrath | d4d6715 | 2008-07-09 02:38:07 -0700 | [diff] [blame] | 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 | */ | 
| Jan Beulich | 295286a | 2008-08-29 13:21:11 +0100 | [diff] [blame] | 55 | .macro LOAD_ARGS32 offset, _r9=0 | 
|  | 56 | .if \_r9 | 
| Andi Kleen | 176df24 | 2007-09-21 16:16:18 +0200 | [diff] [blame] | 57 | movl \offset+16(%rsp),%r9d | 
| Jan Beulich | 295286a | 2008-08-29 13:21:11 +0100 | [diff] [blame] | 58 | .endif | 
| Andi Kleen | 176df24 | 2007-09-21 16:16:18 +0200 | [diff] [blame] | 59 | movl \offset+40(%rsp),%ecx | 
|  | 60 | movl \offset+48(%rsp),%edx | 
|  | 61 | movl \offset+56(%rsp),%esi | 
|  | 62 | movl \offset+64(%rsp),%edi | 
| Andi Kleen | 176df24 | 2007-09-21 16:16:18 +0200 | [diff] [blame] | 63 | .endm | 
|  | 64 |  | 
| Jan Beulich | 2765130 | 2006-01-11 22:41:59 +0100 | [diff] [blame] | 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 |  | 
| Jeremy Fitzhardinge | 2be2998 | 2008-06-25 00:19:28 -0400 | [diff] [blame] | 77 | #ifdef CONFIG_PARAVIRT | 
|  | 78 | ENTRY(native_usergs_sysret32) | 
|  | 79 | swapgs | 
|  | 80 | sysretl | 
|  | 81 | ENDPROC(native_usergs_sysret32) | 
|  | 82 |  | 
|  | 83 | ENTRY(native_irq_enable_sysexit) | 
|  | 84 | swapgs | 
|  | 85 | sti | 
|  | 86 | sysexit | 
|  | 87 | ENDPROC(native_irq_enable_sysexit) | 
|  | 88 | #endif | 
|  | 89 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | */ | 
|  | 109 | ENTRY(ia32_sysenter_target) | 
| Jan Beulich | 2765130 | 2006-01-11 22:41:59 +0100 | [diff] [blame] | 110 | CFI_STARTPROC32	simple | 
| Jan Beulich | adf1423 | 2006-09-26 10:52:41 +0200 | [diff] [blame] | 111 | CFI_SIGNAL_FRAME | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 112 | CFI_DEF_CFA	rsp,0 | 
|  | 113 | CFI_REGISTER	rsp,rbp | 
| Jeremy Fitzhardinge | 457da70 | 2008-06-26 07:28:51 -0700 | [diff] [blame] | 114 | SWAPGS_UNSAFE_STACK | 
| Brian Gerst | 9af4565 | 2009-01-19 00:38:58 +0900 | [diff] [blame] | 115 | movq	PER_CPU_VAR(kernel_stack), %rsp | 
|  | 116 | addq	$(KERNEL_STACK_OFFSET),%rsp | 
| Ingo Molnar | 2601e64 | 2006-07-03 00:24:45 -0700 | [diff] [blame] | 117 | /* | 
|  | 118 | * No need to follow this irqs on/off section: the syscall | 
|  | 119 | * disabled irqs, here we enable it straight after entry: | 
|  | 120 | */ | 
| Jeremy Fitzhardinge | 6680415 | 2008-06-25 00:19:29 -0400 | [diff] [blame] | 121 | ENABLE_INTERRUPTS(CLBR_NONE) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 122 | movl	%ebp,%ebp		/* zero extension */ | 
|  | 123 | pushq	$__USER32_DS | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 124 | CFI_ADJUST_CFA_OFFSET 8 | 
|  | 125 | /*CFI_REL_OFFSET ss,0*/ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 126 | pushq	%rbp | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 127 | CFI_ADJUST_CFA_OFFSET 8 | 
|  | 128 | CFI_REL_OFFSET rsp,0 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 129 | pushfq | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 130 | CFI_ADJUST_CFA_OFFSET 8 | 
|  | 131 | /*CFI_REL_OFFSET rflags,0*/ | 
| Glauber Costa | 26ccb8a | 2008-06-24 11:19:35 -0300 | [diff] [blame] | 132 | movl	8*3-THREAD_SIZE+TI_sysenter_return(%rsp), %r10d | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 133 | CFI_REGISTER rip,r10 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 134 | pushq	$__USER32_CS | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 135 | CFI_ADJUST_CFA_OFFSET 8 | 
|  | 136 | /*CFI_REL_OFFSET cs,0*/ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 137 | movl	%eax, %eax | 
|  | 138 | pushq	%r10 | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 139 | CFI_ADJUST_CFA_OFFSET 8 | 
|  | 140 | CFI_REL_OFFSET rip,0 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 141 | pushq	%rax | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 142 | CFI_ADJUST_CFA_OFFSET 8 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 143 | cld | 
| Jan Beulich | cdc1793 | 2007-07-21 17:10:20 +0200 | [diff] [blame] | 144 | SAVE_ARGS 0,0,1 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 145 | /* no need to do an access_ok check here because rbp has been | 
|  | 146 | 32bit zero extended */ | 
| Jan Beulich | 295286a | 2008-08-29 13:21:11 +0100 | [diff] [blame] | 147 | 1:	movl	(%rbp),%ebp | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 148 | .section __ex_table,"a" | 
|  | 149 | .quad 1b,ia32_badarg | 
|  | 150 | .previous | 
|  | 151 | GET_THREAD_INFO(%r10) | 
| Glauber Costa | 26ccb8a | 2008-06-24 11:19:35 -0300 | [diff] [blame] | 152 | orl    $TS_COMPAT,TI_status(%r10) | 
| Roland McGrath | d4d6715 | 2008-07-09 02:38:07 -0700 | [diff] [blame] | 153 | testl  $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10) | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 154 | CFI_REMEMBER_STATE | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 155 | jnz  sysenter_tracesys | 
| Andi Kleen | 67d53ea | 2006-04-07 19:50:31 +0200 | [diff] [blame] | 156 | cmpl	$(IA32_NR_syscalls-1),%eax | 
|  | 157 | ja	ia32_badsys | 
| Roland McGrath | d4d6715 | 2008-07-09 02:38:07 -0700 | [diff] [blame] | 158 | sysenter_do_call: | 
| Jan Beulich | 295286a | 2008-08-29 13:21:11 +0100 | [diff] [blame] | 159 | IA32_ARG_FIXUP | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 160 | sysenter_dispatch: | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 161 | call	*ia32_sys_call_table(,%rax,8) | 
|  | 162 | movq	%rax,RAX-ARGOFFSET(%rsp) | 
|  | 163 | GET_THREAD_INFO(%r10) | 
| Jeremy Fitzhardinge | 6680415 | 2008-06-25 00:19:29 -0400 | [diff] [blame] | 164 | DISABLE_INTERRUPTS(CLBR_NONE) | 
| Ingo Molnar | 2601e64 | 2006-07-03 00:24:45 -0700 | [diff] [blame] | 165 | TRACE_IRQS_OFF | 
| Glauber Costa | 26ccb8a | 2008-06-24 11:19:35 -0300 | [diff] [blame] | 166 | testl	$_TIF_ALLWORK_MASK,TI_flags(%r10) | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 167 | jnz	sysexit_audit | 
|  | 168 | sysexit_from_sys_call: | 
| Glauber Costa | 26ccb8a | 2008-06-24 11:19:35 -0300 | [diff] [blame] | 169 | andl    $~TS_COMPAT,TI_status(%r10) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 170 | /* clear IF, that popfq doesn't enable interrupts early */ | 
|  | 171 | andl  $~0x200,EFLAGS-R11(%rsp) | 
| Roland McGrath | 36197c9 | 2008-01-30 13:30:43 +0100 | [diff] [blame] | 172 | movl	RIP-R11(%rsp),%edx		/* User %eip */ | 
|  | 173 | CFI_REGISTER rip,rdx | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 174 | RESTORE_ARGS 1,24,1,1,1,1 | 
| Jan Beulich | 24e3580 | 2009-09-30 11:22:11 +0100 | [diff] [blame] | 175 | xorq	%r8,%r8 | 
|  | 176 | xorq	%r9,%r9 | 
|  | 177 | xorq	%r10,%r10 | 
|  | 178 | xorq	%r11,%r11 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 179 | popfq | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 180 | CFI_ADJUST_CFA_OFFSET -8 | 
|  | 181 | /*CFI_RESTORE rflags*/ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 182 | popq	%rcx				/* User %esp */ | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 183 | CFI_ADJUST_CFA_OFFSET -8 | 
|  | 184 | CFI_REGISTER rsp,rcx | 
| Ingo Molnar | 2601e64 | 2006-07-03 00:24:45 -0700 | [diff] [blame] | 185 | TRACE_IRQS_ON | 
| Jeremy Fitzhardinge | 2be2998 | 2008-06-25 00:19:28 -0400 | [diff] [blame] | 186 | ENABLE_INTERRUPTS_SYSEXIT32 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 187 |  | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 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 |  | 
| Jan Beulich | 8176674 | 2009-10-26 15:20:29 +0000 | [diff] [blame] | 207 | .macro auditsys_exit exit | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 208 | testl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),TI_flags(%r10) | 
| Jan Beulich | 24e3580 | 2009-09-30 11:22:11 +0100 | [diff] [blame] | 209 | jnz ia32_ret_from_sys_call | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 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 */ | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 220 | movl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),%edi | 
|  | 221 | cli | 
|  | 222 | TRACE_IRQS_OFF | 
|  | 223 | testl %edi,TI_flags(%r10) | 
| Jan Beulich | 24e3580 | 2009-09-30 11:22:11 +0100 | [diff] [blame] | 224 | jz \exit | 
|  | 225 | CLEAR_RREGS -ARGOFFSET | 
|  | 226 | jmp int_with_check | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 227 | .endm | 
|  | 228 |  | 
|  | 229 | sysenter_auditsys: | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 230 | CFI_RESTORE_STATE | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 231 | auditsys_entry_common | 
|  | 232 | movl %ebp,%r9d			/* reload 6th syscall arg */ | 
|  | 233 | jmp sysenter_dispatch | 
|  | 234 |  | 
|  | 235 | sysexit_audit: | 
|  | 236 | auditsys_exit sysexit_from_sys_call | 
|  | 237 | #endif | 
|  | 238 |  | 
|  | 239 | sysenter_tracesys: | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 240 | #ifdef CONFIG_AUDITSYSCALL | 
|  | 241 | testl	$(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%r10) | 
|  | 242 | jz	sysenter_auditsys | 
|  | 243 | #endif | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 244 | SAVE_REST | 
|  | 245 | CLEAR_RREGS | 
| Roland McGrath | 48ee679 | 2008-03-18 18:23:50 -0700 | [diff] [blame] | 246 | movq	$-ENOSYS,RAX(%rsp)/* ptrace can change this for a bad syscall */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 247 | movq	%rsp,%rdi        /* &pt_regs -> arg1 */ | 
|  | 248 | call	syscall_trace_enter | 
| Andi Kleen | 176df24 | 2007-09-21 16:16:18 +0200 | [diff] [blame] | 249 | LOAD_ARGS32 ARGOFFSET  /* reload args from stack in case ptrace changed it */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 250 | RESTORE_REST | 
| Roland McGrath | 48ee679 | 2008-03-18 18:23:50 -0700 | [diff] [blame] | 251 | cmpl	$(IA32_NR_syscalls-1),%eax | 
|  | 252 | ja	int_ret_from_sys_call /* sysenter_tracesys has set RAX(%rsp) */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 253 | jmp	sysenter_do_call | 
|  | 254 | CFI_ENDPROC | 
| Jan Beulich | 4b787e0 | 2006-06-26 13:56:55 +0200 | [diff] [blame] | 255 | ENDPROC(ia32_sysenter_target) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | */ | 
|  | 277 | ENTRY(ia32_cstar_target) | 
| Jan Beulich | 2765130 | 2006-01-11 22:41:59 +0100 | [diff] [blame] | 278 | CFI_STARTPROC32	simple | 
| Jan Beulich | adf1423 | 2006-09-26 10:52:41 +0200 | [diff] [blame] | 279 | CFI_SIGNAL_FRAME | 
| Brian Gerst | 9af4565 | 2009-01-19 00:38:58 +0900 | [diff] [blame] | 280 | CFI_DEF_CFA	rsp,KERNEL_STACK_OFFSET | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 281 | CFI_REGISTER	rip,rcx | 
|  | 282 | /*CFI_REGISTER	rflags,r11*/ | 
| Jeremy Fitzhardinge | 457da70 | 2008-06-26 07:28:51 -0700 | [diff] [blame] | 283 | SWAPGS_UNSAFE_STACK | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 284 | movl	%esp,%r8d | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 285 | CFI_REGISTER	rsp,r8 | 
| Brian Gerst | 9af4565 | 2009-01-19 00:38:58 +0900 | [diff] [blame] | 286 | movq	PER_CPU_VAR(kernel_stack),%rsp | 
| Ingo Molnar | 2601e64 | 2006-07-03 00:24:45 -0700 | [diff] [blame] | 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 | */ | 
| Jeremy Fitzhardinge | 6680415 | 2008-06-25 00:19:29 -0400 | [diff] [blame] | 291 | ENABLE_INTERRUPTS(CLBR_NONE) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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) | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 296 | CFI_REL_OFFSET rip,RIP-ARGOFFSET | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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) | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 302 | /*CFI_REL_OFFSET rflags,EFLAGS-ARGOFFSET*/ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 303 | movq	%r8,RSP-ARGOFFSET(%rsp) | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 304 | CFI_REL_OFFSET rsp,RSP-ARGOFFSET | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 */ | 
|  | 308 | 1:	movl	(%r8),%r9d | 
|  | 309 | .section __ex_table,"a" | 
|  | 310 | .quad 1b,ia32_badarg | 
|  | 311 | .previous | 
|  | 312 | GET_THREAD_INFO(%r10) | 
| Glauber Costa | 26ccb8a | 2008-06-24 11:19:35 -0300 | [diff] [blame] | 313 | orl   $TS_COMPAT,TI_status(%r10) | 
| Roland McGrath | d4d6715 | 2008-07-09 02:38:07 -0700 | [diff] [blame] | 314 | testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10) | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 315 | CFI_REMEMBER_STATE | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 316 | jnz   cstar_tracesys | 
| Andi Kleen | 67d53ea | 2006-04-07 19:50:31 +0200 | [diff] [blame] | 317 | cmpl $IA32_NR_syscalls-1,%eax | 
|  | 318 | ja  ia32_badsys | 
| Jan Beulich | 295286a | 2008-08-29 13:21:11 +0100 | [diff] [blame] | 319 | cstar_do_call: | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 320 | IA32_ARG_FIXUP 1 | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 321 | cstar_dispatch: | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 322 | call *ia32_sys_call_table(,%rax,8) | 
|  | 323 | movq %rax,RAX-ARGOFFSET(%rsp) | 
|  | 324 | GET_THREAD_INFO(%r10) | 
| Jeremy Fitzhardinge | 6680415 | 2008-06-25 00:19:29 -0400 | [diff] [blame] | 325 | DISABLE_INTERRUPTS(CLBR_NONE) | 
| Ingo Molnar | 2601e64 | 2006-07-03 00:24:45 -0700 | [diff] [blame] | 326 | TRACE_IRQS_OFF | 
| Glauber Costa | 26ccb8a | 2008-06-24 11:19:35 -0300 | [diff] [blame] | 327 | testl $_TIF_ALLWORK_MASK,TI_flags(%r10) | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 328 | jnz sysretl_audit | 
|  | 329 | sysretl_from_sys_call: | 
| Glauber Costa | 26ccb8a | 2008-06-24 11:19:35 -0300 | [diff] [blame] | 330 | andl $~TS_COMPAT,TI_status(%r10) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 331 | RESTORE_ARGS 1,-ARG_SKIP,1,1,1 | 
|  | 332 | movl RIP-ARGOFFSET(%rsp),%ecx | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 333 | CFI_REGISTER rip,rcx | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 334 | movl EFLAGS-ARGOFFSET(%rsp),%r11d | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 335 | /*CFI_REGISTER rflags,r11*/ | 
| Jan Beulich | 24e3580 | 2009-09-30 11:22:11 +0100 | [diff] [blame] | 336 | xorq	%r10,%r10 | 
|  | 337 | xorq	%r9,%r9 | 
|  | 338 | xorq	%r8,%r8 | 
| Ingo Molnar | 2601e64 | 2006-07-03 00:24:45 -0700 | [diff] [blame] | 339 | TRACE_IRQS_ON | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 340 | movl RSP-ARGOFFSET(%rsp),%esp | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 341 | CFI_RESTORE rsp | 
| Jeremy Fitzhardinge | 2be2998 | 2008-06-25 00:19:28 -0400 | [diff] [blame] | 342 | USERGS_SYSRET32 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 343 |  | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 344 | #ifdef CONFIG_AUDITSYSCALL | 
|  | 345 | cstar_auditsys: | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 346 | CFI_RESTORE_STATE | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 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 |  | 
|  | 352 | sysretl_audit: | 
| Jan Beulich | 8176674 | 2009-10-26 15:20:29 +0000 | [diff] [blame] | 353 | auditsys_exit sysretl_from_sys_call | 
| Roland McGrath | 5cbf156 | 2008-06-24 01:13:31 -0700 | [diff] [blame] | 354 | #endif | 
|  | 355 |  | 
|  | 356 | cstar_tracesys: | 
|  | 357 | #ifdef CONFIG_AUDITSYSCALL | 
|  | 358 | testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%r10) | 
|  | 359 | jz cstar_auditsys | 
|  | 360 | #endif | 
| Chuck Ebbert | ecd744e | 2007-11-07 10:48:39 -0500 | [diff] [blame] | 361 | xchgl %r9d,%ebp | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 362 | SAVE_REST | 
| Jan Beulich | 24e3580 | 2009-09-30 11:22:11 +0100 | [diff] [blame] | 363 | CLEAR_RREGS 0, r9 | 
| Roland McGrath | 48ee679 | 2008-03-18 18:23:50 -0700 | [diff] [blame] | 364 | movq $-ENOSYS,RAX(%rsp)	/* ptrace can change this for a bad syscall */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 365 | movq %rsp,%rdi        /* &pt_regs -> arg1 */ | 
|  | 366 | call syscall_trace_enter | 
| Jan Beulich | 295286a | 2008-08-29 13:21:11 +0100 | [diff] [blame] | 367 | LOAD_ARGS32 ARGOFFSET, 1  /* reload args from stack in case ptrace changed it */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 368 | RESTORE_REST | 
| Chuck Ebbert | ecd744e | 2007-11-07 10:48:39 -0500 | [diff] [blame] | 369 | xchgl %ebp,%r9d | 
| Roland McGrath | 48ee679 | 2008-03-18 18:23:50 -0700 | [diff] [blame] | 370 | cmpl $(IA32_NR_syscalls-1),%eax | 
|  | 371 | ja int_ret_from_sys_call /* cstar_tracesys has set RAX(%rsp) */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 372 | jmp cstar_do_call | 
| Jan Beulich | 4b787e0 | 2006-06-26 13:56:55 +0200 | [diff] [blame] | 373 | END(ia32_cstar_target) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 374 |  | 
|  | 375 | ia32_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 |  | 
|  | 401 | ENTRY(ia32_syscall) | 
| Jan Beulich | cdc1793 | 2007-07-21 17:10:20 +0200 | [diff] [blame] | 402 | CFI_STARTPROC32	simple | 
| Jan Beulich | adf1423 | 2006-09-26 10:52:41 +0200 | [diff] [blame] | 403 | CFI_SIGNAL_FRAME | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 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 | 
| Jeremy Fitzhardinge | 360c044 | 2008-07-08 15:06:28 -0700 | [diff] [blame] | 410 | PARAVIRT_ADJUST_EXCEPTION_FRAME | 
| Jeremy Fitzhardinge | 6680415 | 2008-06-25 00:19:29 -0400 | [diff] [blame] | 411 | SWAPGS | 
| Ingo Molnar | 2601e64 | 2006-07-03 00:24:45 -0700 | [diff] [blame] | 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 | */ | 
| Jeremy Fitzhardinge | 6680415 | 2008-06-25 00:19:29 -0400 | [diff] [blame] | 416 | ENABLE_INTERRUPTS(CLBR_NONE) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 417 | movl %eax,%eax | 
|  | 418 | pushq %rax | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 419 | CFI_ADJUST_CFA_OFFSET 8 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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) | 
| Glauber Costa | 26ccb8a | 2008-06-24 11:19:35 -0300 | [diff] [blame] | 425 | orl   $TS_COMPAT,TI_status(%r10) | 
| Roland McGrath | d4d6715 | 2008-07-09 02:38:07 -0700 | [diff] [blame] | 426 | testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 427 | jnz ia32_tracesys | 
| Andi Kleen | 67d53ea | 2006-04-07 19:50:31 +0200 | [diff] [blame] | 428 | cmpl $(IA32_NR_syscalls-1),%eax | 
| Roland McGrath | c09249f | 2009-02-06 18:15:18 -0800 | [diff] [blame] | 429 | ja ia32_badsys | 
|  | 430 | ia32_do_call: | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 431 | IA32_ARG_FIXUP | 
|  | 432 | call *ia32_sys_call_table(,%rax,8) # xxx: rip relative | 
|  | 433 | ia32_sysret: | 
|  | 434 | movq %rax,RAX-ARGOFFSET(%rsp) | 
| Jan Beulich | 24e3580 | 2009-09-30 11:22:11 +0100 | [diff] [blame] | 435 | ia32_ret_from_sys_call: | 
|  | 436 | CLEAR_RREGS -ARGOFFSET | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 437 | jmp int_ret_from_sys_call | 
|  | 438 |  | 
|  | 439 | ia32_tracesys: | 
|  | 440 | SAVE_REST | 
| Jan Beulich | cdc1793 | 2007-07-21 17:10:20 +0200 | [diff] [blame] | 441 | CLEAR_RREGS | 
| Roland McGrath | 8ab32bb | 2008-03-16 21:57:41 -0700 | [diff] [blame] | 442 | movq $-ENOSYS,RAX(%rsp)	/* ptrace can change this for a bad syscall */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 443 | movq %rsp,%rdi        /* &pt_regs -> arg1 */ | 
|  | 444 | call syscall_trace_enter | 
| Andi Kleen | 176df24 | 2007-09-21 16:16:18 +0200 | [diff] [blame] | 445 | LOAD_ARGS32 ARGOFFSET  /* reload args from stack in case ptrace changed it */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 446 | RESTORE_REST | 
| Roland McGrath | c09249f | 2009-02-06 18:15:18 -0800 | [diff] [blame] | 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 | 
| Jan Beulich | 4b787e0 | 2006-06-26 13:56:55 +0200 | [diff] [blame] | 450 | END(ia32_syscall) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 451 |  | 
|  | 452 | ia32_badsys: | 
|  | 453 | movq $0,ORIG_RAX-ARGOFFSET(%rsp) | 
| Jan Beulich | 24e3580 | 2009-09-30 11:22:11 +0100 | [diff] [blame] | 454 | movq $-ENOSYS,%rax | 
|  | 455 | jmp ia32_sysret | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 456 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 457 | quiet_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 |  | 
| Jan Beulich | 2765130 | 2006-01-11 22:41:59 +0100 | [diff] [blame] | 470 | CFI_STARTPROC32 | 
| Jan Beulich | 7effaa8 | 2005-09-12 18:49:24 +0200 | [diff] [blame] | 471 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 472 | PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn, %rdi | 
|  | 473 | PTREGSCALL stub32_sigreturn, sys32_sigreturn, %rdi | 
|  | 474 | PTREGSCALL stub32_sigaltstack, sys32_sigaltstack, %rdx | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 480 |  | 
|  | 481 | ENTRY(ia32_ptregs_common) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 482 | popq %r11 | 
| Jan Beulich | 2765130 | 2006-01-11 22:41:59 +0100 | [diff] [blame] | 483 | CFI_ENDPROC | 
|  | 484 | CFI_STARTPROC32	simple | 
| Jan Beulich | adf1423 | 2006-09-26 10:52:41 +0200 | [diff] [blame] | 485 | CFI_SIGNAL_FRAME | 
| Jan Beulich | 2765130 | 2006-01-11 22:41:59 +0100 | [diff] [blame] | 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*/ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 497 | SAVE_REST | 
|  | 498 | call *%rax | 
|  | 499 | RESTORE_REST | 
|  | 500 | jmp  ia32_sysret	/* misbalances the return cache */ | 
|  | 501 | CFI_ENDPROC | 
| Jan Beulich | 4b787e0 | 2006-06-26 13:56:55 +0200 | [diff] [blame] | 502 | END(ia32_ptregs_common) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 503 |  | 
| Arjan van de Ven | bb152f5 | 2006-01-06 00:12:05 -0800 | [diff] [blame] | 504 | .section .rodata,"a" | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 505 | .align 8 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 506 | ia32_sys_call_table: | 
|  | 507 | .quad sys_restart_syscall | 
|  | 508 | .quad sys_exit | 
|  | 509 | .quad stub32_fork | 
|  | 510 | .quad sys_read | 
|  | 511 | .quad sys_write | 
| Miklos Szeredi | e922efc | 2005-09-06 15:18:25 -0700 | [diff] [blame] | 512 | .quad compat_sys_open		/* 5 */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 */ | 
| Roland McGrath | 562b80b | 2008-04-22 12:21:25 -0700 | [diff] [blame] | 533 | .quad compat_sys_ptrace	/* ptrace */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| Amerigo Wang | 4c71157 | 2009-08-06 15:58:12 -0700 | [diff] [blame] | 549 | .quad sys_pipe | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 sys32_olduname | 
|  | 567 | .quad sys_umask		/* 60 */ | 
|  | 568 | .quad sys_chroot | 
| Christoph Hellwig | 2b1c6bd | 2008-11-28 10:09:09 +0100 | [diff] [blame] | 569 | .quad compat_sys_ustat | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| Jan Beulich | 5f0120b | 2008-06-18 12:42:11 +0100 | [diff] [blame] | 579 | .quad sys32_sigsuspend | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| Christoph Hellwig | b418da1 | 2008-10-15 22:02:06 -0700 | [diff] [blame] | 585 | .quad compat_sys_gettimeofday | 
|  | 586 | .quad compat_sys_settimeofday | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 587 | .quad sys_getgroups16	/* 80 */ | 
|  | 588 | .quad sys_setgroups16 | 
|  | 589 | .quad sys32_old_select | 
|  | 590 | .quad sys_symlink | 
|  | 591 | .quad sys_lstat | 
|  | 592 | .quad sys_readlink		/* 85 */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 593 | .quad sys_uselib | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 sys32_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 */ | 
| Kyle McMartin | d4d23ad | 2007-02-10 01:46:00 -0800 | [diff] [blame] | 623 | .quad compat_sys_sysinfo | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 624 | .quad sys32_ipc | 
|  | 625 | .quad sys_fsync | 
|  | 626 | .quad stub32_sigreturn | 
|  | 627 | .quad stub32_clone		/* 120 */ | 
|  | 628 | .quad sys_setdomainname | 
|  | 629 | .quad sys_uname | 
|  | 630 | .quad sys_modify_ldt | 
| Stephen Rothwell | 3158e94 | 2006-03-26 01:37:29 -0800 | [diff] [blame] | 631 | .quad compat_sys_adjtimex | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 */ | 
| Vasily Tarasov | b716395 | 2007-07-15 23:41:12 -0700 | [diff] [blame] | 638 | .quad sys32_quotactl | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| Eric W. Biederman | c3359fb | 2009-04-03 00:59:52 -0700 | [diff] [blame] | 656 | .quad compat_sys_sysctl	/* sysctl */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 */ | 
| Alexandr Andreev | a9bc3bf | 2007-03-16 21:07:36 +0100 | [diff] [blame] | 668 | .quad sys32_sched_rr_get_interval | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| Jan Beulich | 5f0120b | 2008-06-18 12:42:11 +0100 | [diff] [blame] | 686 | .quad sys_rt_sigsuspend | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| Al Viro | f8b7256 | 2009-11-30 17:37:04 -0500 | [diff] [blame] | 699 | .quad sys_mmap_pgoff | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| Andi Kleen | e412ac4 | 2007-06-20 12:23:30 +0200 | [diff] [blame] | 732 | .quad sys32_readahead	/* 225 */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| Roland McGrath | efd1ca5 | 2008-01-30 13:30:46 +0100 | [diff] [blame] | 750 | .quad sys_set_thread_area | 
|  | 751 | .quad sys_get_thread_area | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| Andi Kleen | e412ac4 | 2007-06-20 12:23:30 +0200 | [diff] [blame] | 757 | .quad sys32_fadvise64		/* 250 */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| Christoph Hellwig | 3a0f69d | 2006-01-09 20:52:08 -0800 | [diff] [blame] | 766 | .quad compat_sys_timer_create | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| Eric W. Biederman | 5234f5e | 2005-06-25 14:58:02 -0700 | [diff] [blame] | 790 | .quad compat_sys_kexec_load	/* reserved for kexec */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 791 | .quad compat_sys_waitid | 
| Robert Love | 725b38ab | 2005-07-25 15:19:29 -0400 | [diff] [blame] | 792 | .quad quiet_ni_syscall		/* 285: sys_altroot */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 793 | .quad sys_add_key | 
|  | 794 | .quad sys_request_key | 
|  | 795 | .quad sys_keyctl | 
| Robert Love | 725b38ab | 2005-07-25 15:19:29 -0400 | [diff] [blame] | 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 | 
| Christoph Lameter | 3974388 | 2006-01-08 01:00:51 -0800 | [diff] [blame] | 801 | .quad sys_migrate_pages | 
| Ulrich Drepper | a60fc51 | 2006-01-18 17:43:56 -0800 | [diff] [blame] | 802 | .quad compat_sys_openat		/* 295 */ | 
|  | 803 | .quad sys_mkdirat | 
|  | 804 | .quad sys_mknodat | 
|  | 805 | .quad sys_fchownat | 
| Andrew Morton | 3833a70 | 2006-02-01 03:04:32 -0800 | [diff] [blame] | 806 | .quad compat_sys_futimesat | 
| Ulrich Drepper | cff2b76 | 2006-02-11 17:55:47 -0800 | [diff] [blame] | 807 | .quad sys32_fstatat		/* 300 */ | 
| Ulrich Drepper | a60fc51 | 2006-01-18 17:43:56 -0800 | [diff] [blame] | 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 | 
| Andi Kleen | 957dc87 | 2006-09-26 10:52:27 +0200 | [diff] [blame] | 815 | .quad compat_sys_pselect6 | 
|  | 816 | .quad compat_sys_ppoll | 
| Andi Kleen | 4b88f09 | 2006-02-09 00:35:50 +0100 | [diff] [blame] | 817 | .quad sys_unshare		/* 310 */ | 
| Ingo Molnar | 8fdd6c6 | 2006-03-27 01:16:26 -0800 | [diff] [blame] | 818 | .quad compat_sys_set_robust_list | 
|  | 819 | .quad compat_sys_get_robust_list | 
| Andi Kleen | b8feb47 | 2006-04-07 19:50:34 +0200 | [diff] [blame] | 820 | .quad sys_splice | 
| Andi Kleen | e412ac4 | 2007-06-20 12:23:30 +0200 | [diff] [blame] | 821 | .quad sys32_sync_file_range | 
| Ulrich Drepper | 1c710c8 | 2007-05-08 00:33:25 -0700 | [diff] [blame] | 822 | .quad sys_tee			/* 315 */ | 
| Andi Kleen | d261020 | 2006-05-01 12:15:48 -0700 | [diff] [blame] | 823 | .quad compat_sys_vmsplice | 
| Christoph Lameter | 1b2db9f | 2006-06-23 02:03:56 -0700 | [diff] [blame] | 824 | .quad compat_sys_move_pages | 
| Andi Kleen | 3cfc348 | 2006-09-26 10:52:28 +0200 | [diff] [blame] | 825 | .quad sys_getcpu | 
| Ralf Baechle | 9af3cf0 | 2007-02-13 13:26:26 +0100 | [diff] [blame] | 826 | .quad sys_epoll_pwait | 
| Ulrich Drepper | 1c710c8 | 2007-05-08 00:33:25 -0700 | [diff] [blame] | 827 | .quad compat_sys_utimensat	/* 320 */ | 
| Heiko Carstens | ae7d5c8 | 2007-05-12 17:27:41 +0200 | [diff] [blame] | 828 | .quad compat_sys_signalfd | 
| Davide Libenzi | cb9282e | 2008-02-04 22:27:28 -0800 | [diff] [blame] | 829 | .quad sys_timerfd_create | 
| Davide Libenzi | fdb902b | 2007-05-10 22:23:20 -0700 | [diff] [blame] | 830 | .quad sys_eventfd | 
| Amit Arora | 97ac735 | 2007-07-17 21:42:44 -0400 | [diff] [blame] | 831 | .quad sys32_fallocate | 
| Davide Libenzi | cb9282e | 2008-02-04 22:27:28 -0800 | [diff] [blame] | 832 | .quad compat_sys_timerfd_settime	/* 325 */ | 
|  | 833 | .quad compat_sys_timerfd_gettime | 
| Ulrich Drepper | 9deb27b | 2008-07-23 21:29:24 -0700 | [diff] [blame] | 834 | .quad compat_sys_signalfd4 | 
| Ulrich Drepper | b087498e | 2008-07-23 21:29:25 -0700 | [diff] [blame] | 835 | .quad sys_eventfd2 | 
| Ulrich Drepper | 9fe5ad9 | 2008-07-23 21:29:43 -0700 | [diff] [blame] | 836 | .quad sys_epoll_create1 | 
| Ingo Molnar | 241771e | 2008-12-03 10:39:53 +0100 | [diff] [blame] | 837 | .quad sys_dup3				/* 330 */ | 
| Ulrich Drepper | ed8cae8 | 2008-07-23 21:29:30 -0700 | [diff] [blame] | 838 | .quad sys_pipe2 | 
| Ulrich Drepper | 4006553 | 2008-07-23 21:29:32 -0700 | [diff] [blame] | 839 | .quad sys_inotify_init1 | 
| Gerd Hoffmann | f3554f4 | 2009-04-02 16:59:23 -0700 | [diff] [blame] | 840 | .quad compat_sys_preadv | 
|  | 841 | .quad compat_sys_pwritev | 
| Thomas Gleixner | 12d1611 | 2009-04-04 21:01:10 +0000 | [diff] [blame] | 842 | .quad compat_sys_rt_tgsigqueueinfo	/* 335 */ | 
| Ingo Molnar | cdd6c48 | 2009-09-21 12:02:48 +0200 | [diff] [blame] | 843 | .quad sys_perf_event_open | 
| Arnaldo Carvalho de Melo | a2e2725 | 2009-10-12 23:40:10 -0700 | [diff] [blame] | 844 | .quad compat_sys_recvmmsg | 
| Heiko Carstens | ae7d5c8 | 2007-05-12 17:27:41 +0200 | [diff] [blame] | 845 | ia32_syscall_end: |