]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[lkrnprefix] Make real-mode setup code relocatable
authorMichael Brown <mcb30@ipxe.org>
Thu, 15 May 2014 12:04:47 +0000 (13:04 +0100)
committerMichael Brown <mcb30@ipxe.org>
Thu, 15 May 2014 12:04:47 +0000 (13:04 +0100)
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>
src/arch/i386/prefix/lkrnprefix.S

index de6c6f6bdb17a6bc48efcaaae2b62f22b1f5bbe6..259bc6ba50d129092fa8f94e9df166746d8e6856 100644 (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