From cf408519adce60a4d271ef70e1fa358f6f7553ea Mon Sep 17 00:00:00 2001 From: Rafal Kupiec Date: Wed, 17 Apr 2024 20:02:27 +0200 Subject: [PATCH] Initialize AMD64 segments properly --- xtoskrnl/ar/amd64/procsup.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/xtoskrnl/ar/amd64/procsup.c b/xtoskrnl/ar/amd64/procsup.c index 778d1d9..02a18cc 100644 --- a/xtoskrnl/ar/amd64/procsup.c +++ b/xtoskrnl/ar/amd64/procsup.c @@ -386,17 +386,13 @@ XTAPI VOID ArpInitializeSegments(VOID) { - asm volatile("mov %0, %%ax\n" - "mov %%ax, %%fs\n" - "mov %1, %%ax\n" - "mov %%ax, %%ds\n" - "mov %%ax, %%es\n" - "mov %%ax, %%gs\n" - "swapgs\n" - "mov %%ax, %%gs\n" - : - : "i" (KGDT_R3_CMTEB | RPL_MASK), - "i" (KGDT_R3_DATA | RPL_MASK)); + /* Initialize segments */ + ArLoadSegment(SEGMENT_CS, KGDT_R0_CODE); + ArLoadSegment(SEGMENT_DS, KGDT_R3_DATA | RPL_MASK); + ArLoadSegment(SEGMENT_ES, KGDT_R3_DATA | RPL_MASK); + ArLoadSegment(SEGMENT_FS, KGDT_R3_CMTEB | RPL_MASK); + ArLoadSegment(SEGMENT_GS, KGDT_R3_DATA | RPL_MASK); + ArLoadSegment(SEGMENT_SS, KGDT_R0_DATA); } /**