|
@@ -42,8 +42,15 @@ r_base = .
|
|
|
movl $0xA5A5A5A5, trampoline_data - r_base
|
|
|
# write marker for master knows we're running
|
|
|
|
|
|
- lidt idt_48 - r_base # load idt with 0, 0
|
|
|
- lgdt gdt_48 - r_base # load gdt with whatever is appropriate
|
|
|
+ /*
|
|
|
+ * GDT tables in non default location kernel can be beyond 16MB and
|
|
|
+ * lgdt will not be able to load the address as in real mode default
|
|
|
+ * operand size is 16bit. Use lgdtl instead to force operand size
|
|
|
+ * to 32 bit.
|
|
|
+ */
|
|
|
+
|
|
|
+ lidtl idt_48 - r_base # load idt with 0, 0
|
|
|
+ lgdtl gdt_48 - r_base # load gdt with whatever is appropriate
|
|
|
|
|
|
xor %ax, %ax
|
|
|
inc %ax # protected mode (PE) bit
|