Remove erroneous swapgs and implement proper segment setting
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 34s
Builds / ExectOS (amd64, debug) (push) Successful in 38s
Builds / ExectOS (amd64, release) (push) Successful in 36s
Builds / ExectOS (i686, release) (push) Successful in 36s

This commit is contained in:
2026-04-01 11:18:28 +02:00
parent 154b2062ba
commit d88f9f0a15
2 changed files with 19 additions and 4 deletions

View File

@@ -109,13 +109,22 @@ _Ar\Type\Vector\()Start:
mov %cr2, %eax
mov %eax, TrapCr2(%ebp)
/* Test previous mode and swap GS if needed */
/* Test previous mode */
movl $0, TrapPreviousMode(%ebp)
mov TrapSegCs(%ebp), %ax
and $3, %al
mov %al, TrapPreviousMode(%ebp)
jz KernelMode\Type\Vector
swapgs
/* Load Kernel PB selector into FS */
mov $KGDT_R0_PB, %ax
mov %ax, %fs
/* Set sane data segment selectors */
mov $(KGDT_R3_DATA | RPL_MASK), %ax
mov %ax, %ds
mov %ax, %es
jmp UserMode\Type\Vector
KernelMode\Type\Vector:
@@ -141,11 +150,10 @@ UserMode\Type\Vector:
/* Clean up the stack */
add $4, %esp
/* Test previous mode and swapgs if needed */
/* Test previous mode and disable interrupts before user mode return */
testb $1, TrapPreviousMode(%ebp)
jz KernelModeReturn\Type\Vector
cli
swapgs
KernelModeReturn\Type\Vector:
/* Restore segment selectors */

View File

@@ -10,6 +10,13 @@
#define __XTOSKRNL_I686_ASMSUP_H
/* Selector masks */
#define RPL_MASK 0x0003
/* GDT selectors */
#define KGDT_R3_DATA 0x0020
#define KGDT_R0_PB 0x0030
/* KTRAP_FRAME structure offsets */
#define TrapPreviousMode 0
#define TrapCr2 4