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)
{
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;
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;
/* Load SS Segment */
case SEGMENT_SS:
asm volatile("movl %0, %%ss"
: