View | Details | Raw Unified | Return to bug 156580
Collapse All | Expand All

(-)linux/arch/x86_64/kernel/entry.S (-18 / +11 lines)
Lines 178-183 rff_trace: Link Here
178
 * Interrupts are off on entry.
178
 * Interrupts are off on entry.
179
 * Only called from user space.
179
 * Only called from user space.
180
 *
180
 *
181
 * EM64T CPUs have somewhat weird error reporting for non canonical RIPs in SYSRET. 
182
 * We can't handle any exceptions there because the exception handler would
183
 * end up running on the user stack which is unsafe. To avoid problems 
184
 * any code that might end up with a user touched pt_regs should return
185
 * using int_ret_from_syscall.
186
 *
181
 * XXX	if we had a free scratch register we could save the RSP into the stack frame
187
 * XXX	if we had a free scratch register we could save the RSP into the stack frame
182
 *      and report it properly in ps. Unfortunately we haven't.
188
 *      and report it properly in ps. Unfortunately we haven't.
183
 */ 			 		
189
 */ 			 		
Lines 254-260 sysret_signal: Link Here
254
	xorl %esi,%esi # oldset -> arg2
260
	xorl %esi,%esi # oldset -> arg2
255
	call ptregscall_common
261
	call ptregscall_common
256
1:	movl $_TIF_NEED_RESCHED,%edi
262
1:	movl $_TIF_NEED_RESCHED,%edi
257
	jmp sysret_check
263
	/* Stack frame might have been changed. The IRET path does
264
	   some additional checks to handle this */
265
	jmp int_with_check
258
	
266
	
259
badsys:
267
badsys:
260
	movq $-ENOSYS,RAX-ARGOFFSET(%rsp)
268
	movq $-ENOSYS,RAX-ARGOFFSET(%rsp)
Lines 280-286 tracesys: Link Here
280
	call syscall_trace_leave
288
	call syscall_trace_leave
281
	RESTORE_TOP_OF_STACK %rbx
289
	RESTORE_TOP_OF_STACK %rbx
282
	RESTORE_REST
290
	RESTORE_REST
283
	jmp ret_from_sys_call
291
	/* Stack frame might have been changed. Use the more careful IRET path */
292
	jmp int_ret_from_sys_call
284
	CFI_ENDPROC
293
	CFI_ENDPROC
285
		
294
		
286
/* 
295
/* 
Lines 408-432 ENTRY(stub_execve) Link Here
408
	CFI_ADJUST_CFA_OFFSET -8
417
	CFI_ADJUST_CFA_OFFSET -8
409
	CFI_REGISTER rip, r11
418
	CFI_REGISTER rip, r11
410
	SAVE_REST
419
	SAVE_REST
411
	movq %r11, %r15
412
	CFI_REGISTER rip, r15
413
	FIXUP_TOP_OF_STACK %r11
420
	FIXUP_TOP_OF_STACK %r11
414
	call sys_execve
421
	call sys_execve
415
	GET_THREAD_INFO(%rcx)
416
	bt $TIF_IA32,threadinfo_flags(%rcx)
417
	CFI_REMEMBER_STATE
418
	jc exec_32bit
419
	RESTORE_TOP_OF_STACK %r11
422
	RESTORE_TOP_OF_STACK %r11
420
	movq %r15, %r11
421
	CFI_REGISTER rip, r11
422
	RESTORE_REST
423
	pushq %r11
424
	CFI_ADJUST_CFA_OFFSET 8
425
	CFI_REL_OFFSET rip, 0
426
	ret
427
428
exec_32bit:
429
	CFI_RESTORE_STATE
430
	movq %rax,RAX(%rsp)
423
	movq %rax,RAX(%rsp)
431
	RESTORE_REST
424
	RESTORE_REST
432
	jmp int_ret_from_sys_call
425
	jmp int_ret_from_sys_call

Return to bug 156580