From: Ben Gras Date: Thu, 20 Nov 2014 16:42:32 +0000 (+0000) Subject: restore PSW like 9393439a20 for AMD syscall X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/zpipe.c?a=commitdiff_plain;h=c9278f91709f7b7161c6dc1671806d6d16771556;p=minix.git restore PSW like 9393439a20 for AMD syscall Change-Id: Ide0a8727af8d0d81361382dbd2460c7a6c5743fc --- diff --git a/minix/kernel/arch/i386/mpx.S b/minix/kernel/arch/i386/mpx.S index 81fb696a3..fa38697e5 100644 --- a/minix/kernel/arch/i386/mpx.S +++ b/minix/kernel/arch/i386/mpx.S @@ -418,11 +418,17 @@ ENTRY(restore_user_context_syscall) * enabling interrupts, and of course sysret instead of sysexit. */ mov 4(%esp), %ebp /* retrieve proc ptr arg */ + + /* restore PSW (before we switch to user stack!) */ + movl PSWREG(%ebp), %edi /* load desired PSW to EDI */ + push %edi + popf + mov PCREG(%ebp), %ecx /* sysret restores EIP using ECX */ mov SPREG(%ebp), %esp /* restore ESP directly */ mov AXREG(%ebp), %eax /* trap return value */ mov BXREG(%ebp), %ebx /* secondary return value */ - movl PSWREG(%ebp), %edi /* load desired PSW to EDI */ + sysret /* jump to EIP in user */ ENTRY(restore_user_context_int)