diff options
author | dzwdz | 2021-07-18 14:16:24 +0200 |
---|---|---|
committer | dzwdz | 2021-07-18 14:16:24 +0200 |
commit | ed12953042ec38244f3ab93d67f4c2dea6f1fee3 (patch) | |
tree | 7984f01c156535fb57104db9cbcf0f8a9112b7ed /src/kernel/arch/i386/sysenter.s | |
parent | e333a43fb7c1e39418cfcc1be660d5006903c42a (diff) |
move all kernel sources to src/kernel/
Diffstat (limited to 'src/kernel/arch/i386/sysenter.s')
-rw-r--r-- | src/kernel/arch/i386/sysenter.s | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/kernel/arch/i386/sysenter.s b/src/kernel/arch/i386/sysenter.s new file mode 100644 index 0000000..666c0f0 --- /dev/null +++ b/src/kernel/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 |