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>
FILE_LICENCE ( GPL_ANY )
-#define BZI_RM_SEGMENT 0x1000
#define BZI_LOAD_HIGH_ADDR 0x100000
.text
realmode_swtch:
.long 0
start_sys:
- .word BZI_RM_SEGMENT
+ .word 0
kernel_version:
.word version_string - 0x200
type_of_loader:
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