From c9278f91709f7b7161c6dc1671806d6d16771556 Mon Sep 17 00:00:00 2001 From: Ben Gras Date: Thu, 20 Nov 2014 16:42:32 +0000 Subject: [PATCH] restore PSW like 9393439a20 for AMD syscall Change-Id: Ide0a8727af8d0d81361382dbd2460c7a6c5743fc --- minix/kernel/arch/i386/mpx.S | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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) -- 2.44.0