Fix interrupt mixup from previous commit.

* include/grub/i386/pc/int.h (grub_i386_idt): New struct.
	(grub_realidt): New var.
	* grub-core/lib/i386/relocator16.S (grub_relocator16_idt): New variable
	Load idt.
	* grub-core/lib/i386/relocator.c (grub_relocator16_idt):
	New declaration.
	(grub_relocator16_boot): Set grub_relocator16_idt.
	* grub-core/kern/i386/realmode.S (realidt): Renamed to ...
	(LOCAL(realidt)): ... this.
	* grub-core/boot/i386/pc/startup_raw.S: Pass pointer to realidt in eax.
	* grub-core/kern/i386/pc/startup.S: Save pointer to realidt.
	(grub_realidt): New variable.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2012-02-26 22:10:13 +01:00
parent 27317084c6
commit 94f064b4c9
7 changed files with 47 additions and 4 deletions

View file

@ -118,7 +118,7 @@ gdt:
gdtdesc:
.word 0x27 /* limit */
.long gdt /* addr */
realidt:
LOCAL(realidt):
.word 0
.long 0
protidt:
@ -175,7 +175,7 @@ protcseg:
/* zero %eax */
xorl %eax, %eax
sidt realidt
sidt LOCAL(realidt)
lidt protidt
/* return on the old (or initialized) stack! */
@ -205,7 +205,7 @@ prot_to_real:
lgdt gdtdesc
sidt protidt
lidt realidt
lidt LOCAL(realidt)
/* save the protected mode stack */
movl %esp, %eax