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