Fix loading CS segment for i686 architecture
This commit is contained in:
parent
9d4751abee
commit
b31aa82872
|
@ -216,31 +216,43 @@ 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, %%eax\n"
|
||||||
|
"push %%eax\n"
|
||||||
|
"lea label, %%eax\n"
|
||||||
|
"push %%eax\n"
|
||||||
|
"lret\n"
|
||||||
|
"label:"
|
||||||
:
|
:
|
||||||
: "r" (Source));
|
: "ri" (Source)
|
||||||
|
: "eax");
|
||||||
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;
|
||||||
case SEGMENT_SS:
|
case SEGMENT_SS:
|
||||||
|
/* Load SS Segment */
|
||||||
asm volatile("movl %0, %%ss"
|
asm volatile("movl %0, %%ss"
|
||||||
:
|
:
|
||||||
: "r" (Source));
|
: "r" (Source));
|
||||||
|
|
Loading…
Reference in New Issue