Fix loading CS segment for AMD64 architecture
Builds / ExectOS (amd64) (push) Successful in 35s Details
Builds / ExectOS (i686) (push) Successful in 33s Details

This commit is contained in:
Rafal Kupiec 2024-04-17 16:48:18 +02:00
parent b31aa82872
commit 7011d456e9
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
1 changed files with 14 additions and 2 deletions

View File

@ -235,30 +235,42 @@ ArLoadSegment(IN USHORT Segment,
switch(Segment) switch(Segment)
{ {
case SEGMENT_CS: case SEGMENT_CS:
asm volatile("movl %0, %%cs" /* Load CS Segment */
asm volatile("mov %0, %%rax\n"
"push %%rax\n"
"lea label(%%rip), %%rax\n"
"push %%rax\n"
"lretq\n"
"label:"
: :
: "r" (Source)); : "ri" ((ULONGLONG)Source)
: "rax");
break; break;
case SEGMENT_DS: case SEGMENT_DS:
/* Load DS Segment */
asm volatile("movl %0, %%ds" asm volatile("movl %0, %%ds"
: :
: "r" (Source)); : "r" (Source));
break; break;
case SEGMENT_ES: case SEGMENT_ES:
/* Load ES Segment */
asm volatile("movl %0, %%es" asm volatile("movl %0, %%es"
: :
: "r" (Source)); : "r" (Source));
break; break;
case SEGMENT_FS: case SEGMENT_FS:
/* Load FS Segment */
asm volatile("movl %0, %%fs" asm volatile("movl %0, %%fs"
: :
: "r" (Source)); : "r" (Source));
break; break;
case SEGMENT_GS: case SEGMENT_GS:
/* Load GS Segment */
asm volatile("movl %0, %%gs" asm volatile("movl %0, %%gs"
: :
: "r" (Source)); : "r" (Source));
break; break;
/* Load SS Segment */
case SEGMENT_SS: case SEGMENT_SS:
asm volatile("movl %0, %%ss" asm volatile("movl %0, %%ss"
: :