From 687d18815da5742d201e876e71b8c0209a097a21 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Sat, 24 Jul 2021 21:18:33 +0200 Subject: sysenter: save the registers into _sysexit_regs, makes the code cleaner (imo) --- src/kernel/arch/i386/sysenter.s | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'src/kernel/arch/i386/sysenter.s') diff --git a/src/kernel/arch/i386/sysenter.s b/src/kernel/arch/i386/sysenter.s index 24cbc89..db65a8c 100644 --- a/src/kernel/arch/i386/sysenter.s +++ b/src/kernel/arch/i386/sysenter.s @@ -24,7 +24,7 @@ _sysexit_real: // restore the registers mov $_sysexit_regs, %esp - popal // probably a bad idea + popal sysexit @@ -48,11 +48,17 @@ sysenter_setup: ret sysenter_stage1: - pushal // register dump + // disable paging + // I don't want to damage any of the registers passed in by the user, + // so i'm using ESP as a temporary register. At this point there's nothing + // useful in it, it's == _bss_end. + mov %cr0, %esp + and $0x7FFFFFFF, %esp // disable paging + mov %esp, %cr0 - mov %cr0, %eax - and $0x7FFFFFFF, %eax // disable paging - mov %eax, %cr0 + // save the registers + mov $(_sysexit_regs + 32), %esp + pushal - call sysenter_stage2 - jmp halt_cpu + mov $_bss_end, %esp + jmp sysenter_stage2 -- cgit v1.2.3