diff --git a/ChangeLog b/ChangeLog index 6cf11a6..6c36901 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2009-08-23 Vladimir Serbinenko + Support for 64-bit NetBSD. + + * loader/i386/bsd.c (grub_bsd_load_elf): Apply correct mask to entry + point when booting non-FreeBSD. + +2009-08-23 Vladimir Serbinenko + * loader/i386/bsd.c (freebsd_opts): Rewritten to use extcmd. (openbsd_opts): Likewise. (netbsd_opts): Likewise. diff --git a/loader/i386/bsd.c b/loader/i386/bsd.c index d5f677a..d9d628c 100644 --- a/loader/i386/bsd.c +++ b/loader/i386/bsd.c @@ -776,8 +776,18 @@ grub_bsd_load_elf (grub_elf_t elf) else if (grub_elf_is_elf64 (elf)) { is_64bit = 1; - entry = elf->ehdr.ehdr64.e_entry & 0xffffffff; - entry_hi = (elf->ehdr.ehdr64.e_entry >> 32) & 0xffffffff; + + /* FreeBSD has 64-bit entry point. */ + if (kernel_type == KERNEL_TYPE_FREEBSD) + { + entry = elf->ehdr.ehdr64.e_entry & 0xffffffff; + entry_hi = (elf->ehdr.ehdr64.e_entry >> 32) & 0xffffffff; + } + else + { + entry = elf->ehdr.ehdr64.e_entry & 0x0fffffff; + entry_hi = 0; + } return grub_elf64_load (elf, grub_bsd_elf64_hook, 0, 0); } else