david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[lkrnprefix] Make real-mode setup code relocatable

The bzImage boot protocol allows the real-mode code to be loaded at
any segment within base memory.  (The fact that both iPXE and recent
versions of Syslinux will load the real-mode code at 1000:0000 is a
coincidence; it is not guaranteed by the specification.)

Fix by making the code relocatable.

Reported-by: Andrew Stuart <andrew@shopcusa.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2014-05-15 13:04:47 +01:00
parent a8f037a275
commit f747a00c54
1 changed files with 4 additions and 3 deletions

View File

@ -1,6 +1,5 @@
FILE_LICENCE ( GPL_ANY ) FILE_LICENCE ( GPL_ANY )
#define BZI_RM_SEGMENT 0x1000
#define BZI_LOAD_HIGH_ADDR 0x100000 #define BZI_LOAD_HIGH_ADDR 0x100000
.text .text
@ -61,7 +60,7 @@ version:
realmode_swtch: realmode_swtch:
.long 0 .long 0
start_sys: start_sys:
.word BZI_RM_SEGMENT .word 0
kernel_version: kernel_version:
.word version_string - 0x200 .word version_string - 0x200
type_of_loader: type_of_loader:
@ -114,7 +113,9 @@ version_string:
setup: setup:
/* Fix up code segment */ /* Fix up code segment */
ljmp $BZI_RM_SEGMENT, $1f pushw %ds
pushw $1f
lret
1: 1:
/* Set up stack just below 0x7c00 and clear direction flag */ /* Set up stack just below 0x7c00 and clear direction flag */
xorw %ax, %ax xorw %ax, %ax