[prefix] Reasonable value for lkrn initrd_addr_max
authorStefan Hajnoczi <stefanha@gmail.com>
Wed, 30 Jul 2008 18:45:48 +0000 (19:45 +0100)
committerStefan Hajnoczi <stefanha@gmail.com>
Wed, 30 Jul 2008 18:45:48 +0000 (19:45 +0100)
H. Peter Anvin <hpa@zytor.com> sent word that Sergey Vlasov
<vsu@altlinux.ru> discovered gPXE lkrn images fail to load in SYSLINUX
3.70 because we have initrd_addr_max zeroed.  This patch sets the same
value as the Linux kernel.

Also change the header jmp instruction to use a hardcoded opcode value
like Linux does.  Just in case the assembler decides to use a three-byte
instruction instead of the desired two-byte jmp.

src/arch/i386/prefix/lkrnprefix.S

index 59e70cd..c1e92f5 100644 (file)
@@ -110,7 +110,10 @@ root_dev:
 boot_flag: 
        .word   0xAA55
 jump:
-       jmp     setup_code
+       /* Manually specify a two-byte jmp instruction here rather
+        * than leaving it up to the assembler. */
+       .byte   0xeb
+       .byte   setup_code - header
 header:
        .byte   'H', 'd', 'r', 'S'
 version:
@@ -142,7 +145,10 @@ pad1:
 cmd_line_ptr:
        .long   0
 initrd_addr_max:
-       .long   0
+       /* We don't use an initrd but some bootloaders (e.g. SYSLINUX) have
+        * been known to require this field.  Set the value to 2 GB.  This
+        * value is also used by the Linux kernel. */
+       .long   0x7fffffff
 kernel_alignment:
        .long   0
 relocatable_kernel: