From 4cc786de810a74659b6266d04188c78b5b202103 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Wed, 30 Jul 2008 19:45:48 +0100 Subject: [PATCH] [prefix] Reasonable value for lkrn initrd_addr_max H. Peter Anvin sent word that Sergey Vlasov 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 | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/arch/i386/prefix/lkrnprefix.S b/src/arch/i386/prefix/lkrnprefix.S index 59e70cd1..c1e92f57 100644 --- a/src/arch/i386/prefix/lkrnprefix.S +++ b/src/arch/i386/prefix/lkrnprefix.S @@ -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: