From b31aa828721195e63fa6944865d32b7583ae73aa Mon Sep 17 00:00:00 2001 From: Rafal Kupiec Date: Wed, 17 Apr 2024 16:46:03 +0200 Subject: [PATCH] Fix loading CS segment for i686 architecture --- xtoskrnl/ar/i686/cpufunc.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/xtoskrnl/ar/i686/cpufunc.c b/xtoskrnl/ar/i686/cpufunc.c index e488746..8da2efa 100644 --- a/xtoskrnl/ar/i686/cpufunc.c +++ b/xtoskrnl/ar/i686/cpufunc.c @@ -216,31 +216,43 @@ ArLoadSegment(IN USHORT Segment, switch(Segment) { case SEGMENT_CS: - asm volatile("movl %0, %%cs" + /* Load CS Segment */ + asm volatile("mov %0, %%eax\n" + "push %%eax\n" + "lea label, %%eax\n" + "push %%eax\n" + "lret\n" + "label:" : - : "r" (Source)); + : "ri" (Source) + : "eax"); break; case SEGMENT_DS: + /* Load DS Segment */ asm volatile("movl %0, %%ds" : : "r" (Source)); break; case SEGMENT_ES: + /* Load ES Segment */ asm volatile("movl %0, %%es" : : "r" (Source)); break; case SEGMENT_FS: + /* Load FS Segment */ asm volatile("movl %0, %%fs" : : "r" (Source)); break; case SEGMENT_GS: + /* Load GS Segment */ asm volatile("movl %0, %%gs" : : "r" (Source)); break; case SEGMENT_SS: + /* Load SS Segment */ asm volatile("movl %0, %%ss" : : "r" (Source));