restore PSW like 9393439a20
for AMD syscall
Change-Id: Ide0a8727af8d0d81361382dbd2460c7a6c5743fc
This commit is contained in:
parent
65eccd1f74
commit
c9278f9170
1 changed files with 7 additions and 1 deletions
|
@ -418,11 +418,17 @@ ENTRY(restore_user_context_syscall)
|
||||||
* enabling interrupts, and of course sysret instead of sysexit.
|
* enabling interrupts, and of course sysret instead of sysexit.
|
||||||
*/
|
*/
|
||||||
mov 4(%esp), %ebp /* retrieve proc ptr arg */
|
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 PCREG(%ebp), %ecx /* sysret restores EIP using ECX */
|
||||||
mov SPREG(%ebp), %esp /* restore ESP directly */
|
mov SPREG(%ebp), %esp /* restore ESP directly */
|
||||||
mov AXREG(%ebp), %eax /* trap return value */
|
mov AXREG(%ebp), %eax /* trap return value */
|
||||||
mov BXREG(%ebp), %ebx /* secondary return value */
|
mov BXREG(%ebp), %ebx /* secondary return value */
|
||||||
movl PSWREG(%ebp), %edi /* load desired PSW to EDI */
|
|
||||||
sysret /* jump to EIP in user */
|
sysret /* jump to EIP in user */
|
||||||
|
|
||||||
ENTRY(restore_user_context_int)
|
ENTRY(restore_user_context_int)
|
||||||
|
|
Loading…
Reference in a new issue