http://git.etherboot.org
/
people
/
xl0
/
gpxe.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
46253ba
)
Code segment may not be writable; create the temporary pointer to the GDT
author
Michael Brown
<mcb30@etherboot.org>
Tue, 6 Jun 2006 15:30:28 +0000
(15:30 +0000)
committer
Michael Brown
<mcb30@etherboot.org>
Tue, 6 Jun 2006 15:30:28 +0000
(15:30 +0000)
on the stack.
src/arch/i386/prefix/libprefix.S
patch
|
blob
|
history
diff --git
a/src/arch/i386/prefix/libprefix.S
b/src/arch/i386/prefix/libprefix.S
index
1022781
..
f0f7682
100644
(file)
--- a/
src/arch/i386/prefix/libprefix.S
+++ b/
src/arch/i386/prefix/libprefix.S
@@
-254,6
+254,7
@@
flatten_real_mode:
/* Preserve real-mode segment values and temporary registers */
pushw %es
pushw %ds
+ pushw %bp
pushl %eax
/* Set GDT base and load GDT */
@@
-261,8
+262,11
@@
flatten_real_mode:
movw %cs, %ax
shll $4, %eax
addl $gdt, %eax
- movl %eax, %cs:gdt_base
- lgdt %cs:gdt
+ pushl %eax
+ pushw %cs:gdt_limit
+ movw %sp, %bp
+ lgdt (%bp)
+ addw $6, %sp
/* Switch to protected mode */
movl %cr0, %eax
@@
-281,6
+285,7
@@
flatten_real_mode:
/* Restore real-mode segment values and temporary registers */
popl %eax
+ popw %bp
popw %ds
popw %es
ret