From 1bf5e324005ce7122a195af106cec656960648dc Mon Sep 17 00:00:00 2001 From: dzwdz Date: Sat, 10 Jul 2021 17:41:32 +0200 Subject: a sensible source structure The idea is that src/kernel/ is only allowed to interface with the hardware using whatever's defined in src/arch/generic.h. I'll probably write a small script for checking this later on. This is a giant commit so I've probably fucked something up. It boots fine on Bochs and QEMU, so at least there's that. --- src/arch/i386/sysenter.s | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/arch/i386/sysenter.s (limited to 'src/arch/i386/sysenter.s') diff --git a/src/arch/i386/sysenter.s b/src/arch/i386/sysenter.s new file mode 100644 index 0000000..666c0f0 --- /dev/null +++ b/src/arch/i386/sysenter.s @@ -0,0 +1,31 @@ +/* arch/i386/gdt.c */ +.set SEG_r0code, 1 +.set SEG_r3code, 3 +.set SEG_r3data, 4 + +.set IA32_SYSENTER_CS, 0x174 + +.section .text +.global sysexit +.type sysexit, @function +sysexit: + pop %ecx + pop %edx + + mov $(SEG_r3data << 3 | 3), %ax + mov %ax, %ds + mov %ax, %es + mov %ax, %fs + mov %ax, %gs + + sysexit + + +.global sysenter_setup +.type sysenter_setup, @function +sysenter_setup: + xor %edx, %edx + mov $(SEG_r0code << 3), %eax + mov $IA32_SYSENTER_CS, %ecx + wrmsr + ret -- cgit v1.2.3