[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:
parent
a8f037a275
commit
f747a00c54
|
@ -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
|
||||||
|
|
Reference in New Issue