From 8a29c78d34f1924c4e39a3a951b36c4512ffe9c1 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Fri, 23 Jul 2021 13:50:00 +0200 Subject: update the process' EIP/ESP when it syscalls --- src/kernel/arch/i386/sysenter.s | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/kernel/arch/i386') diff --git a/src/kernel/arch/i386/sysenter.s b/src/kernel/arch/i386/sysenter.s index 7375e06..64b7d01 100644 --- a/src/kernel/arch/i386/sysenter.s +++ b/src/kernel/arch/i386/sysenter.s @@ -49,6 +49,8 @@ sysenter_setup: sysenter_handler: pushal + push %edx + push %ecx push %edi push %esi push %ebx @@ -61,13 +63,13 @@ sysenter_handler: call syscall_handler // save the return value - mov %eax, 44(%esp) // 16 [top of eflags] + 7*4 [skip until EAX] - mov %edx, 32(%esp) // 16 + 4*4 [skip until EBX] + mov %eax, 52(%esp) // 24 [top of eflags] + 7*4 [skip until EAX] + mov %edx, 40(%esp) // 24 + 4*4 [skip until EBX] mov %cr0, %eax or $0x80000000, %eax // enable paging mov %eax, %cr0 - add $16, %esp + add $24, %esp popal sysexit -- cgit v1.2.3