diff --git a/debian/changelog b/debian/changelog index 64e15bb2a..741cc50d5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +grub2 (2.00-13) UNRELEASED; urgency=low + + * Backport from upstream: + - Fix booting FreeBSD >= 9.1 amd64 kernels (closes: #699002). + + -- Colin Watson Mon, 28 Jan 2013 11:08:07 +0000 + grub2 (2.00-12) experimental; urgency=low * Silence output from running-in-container. diff --git a/debian/patches/kfreebsd_9.1.patch b/debian/patches/kfreebsd_9.1.patch new file mode 100644 index 000000000..befab6544 --- /dev/null +++ b/debian/patches/kfreebsd_9.1.patch @@ -0,0 +1,57 @@ +Description: Fix booting FreeBSD >= 9.1 amd64 kernels +Author: Vladimir Serbinenko +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/4556 +Bug-Debian: http://bugs.debian.org/699002 +Forwarded: not-needed +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/4556 +Last-Update: 2013-01-28 + +Index: b/grub-core/loader/i386/bsd.c +=================================================================== +--- a/grub-core/loader/i386/bsd.c ++++ b/grub-core/loader/i386/bsd.c +@@ -1309,7 +1309,7 @@ + && phdr->p_type != PT_DYNAMIC) + return 0; + +- paddr = phdr->p_paddr & 0xFFFFFF; ++ paddr = phdr->p_paddr & 0xFFFFFFF; + + if (paddr < kern_start) + kern_start = paddr; +@@ -1333,7 +1333,7 @@ + } + + *do_load = 1; +- phdr->p_paddr &= 0xFFFFFF; ++ phdr->p_paddr &= 0xFFFFFFF; + paddr = phdr->p_paddr; + + *addr = (grub_addr_t) (paddr - kern_start + (grub_uint8_t *) kern_chunk_src); +@@ -1351,7 +1351,7 @@ + && phdr->p_type != PT_DYNAMIC) + return 0; + +- paddr = phdr->p_paddr & 0xffffff; ++ paddr = phdr->p_paddr & 0xfffffff; + + if (paddr < kern_start) + kern_start = paddr; +@@ -1375,7 +1375,7 @@ + } + + *do_load = 1; +- paddr = phdr->p_paddr & 0xffffff; ++ paddr = phdr->p_paddr & 0xfffffff; + + *addr = (grub_addr_t) (paddr - kern_start + (grub_uint8_t *) kern_chunk_src); + +@@ -1394,7 +1394,7 @@ + { + grub_relocator_chunk_t ch; + +- entry = elf->ehdr.ehdr32.e_entry & 0xFFFFFF; ++ entry = elf->ehdr.ehdr32.e_entry & 0xFFFFFFF; + err = grub_elf32_phdr_iterate (elf, filename, + grub_bsd_elf32_size_hook, NULL); + if (err) diff --git a/debian/patches/series b/debian/patches/series index 10158eda0..0d3848b16 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -33,3 +33,4 @@ gnulib_gets.patch no_insmod_on_sb.patch default_grub_d.patch blacklist_1440x900x32.patch +kfreebsd_9.1.patch diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c index 0fd4df0ff..6e024e4e3 100644 --- a/grub-core/loader/i386/bsd.c +++ b/grub-core/loader/i386/bsd.c @@ -1309,7 +1309,7 @@ grub_bsd_elf32_size_hook (grub_elf_t elf __attribute__ ((unused)), && phdr->p_type != PT_DYNAMIC) return 0; - paddr = phdr->p_paddr & 0xFFFFFF; + paddr = phdr->p_paddr & 0xFFFFFFF; if (paddr < kern_start) kern_start = paddr; @@ -1333,7 +1333,7 @@ grub_bsd_elf32_hook (Elf32_Phdr * phdr, grub_addr_t * addr, int *do_load) } *do_load = 1; - phdr->p_paddr &= 0xFFFFFF; + phdr->p_paddr &= 0xFFFFFFF; paddr = phdr->p_paddr; *addr = (grub_addr_t) (paddr - kern_start + (grub_uint8_t *) kern_chunk_src); @@ -1351,7 +1351,7 @@ grub_bsd_elf64_size_hook (grub_elf_t elf __attribute__ ((unused)), && phdr->p_type != PT_DYNAMIC) return 0; - paddr = phdr->p_paddr & 0xffffff; + paddr = phdr->p_paddr & 0xfffffff; if (paddr < kern_start) kern_start = paddr; @@ -1375,7 +1375,7 @@ grub_bsd_elf64_hook (Elf64_Phdr * phdr, grub_addr_t * addr, int *do_load) } *do_load = 1; - paddr = phdr->p_paddr & 0xffffff; + paddr = phdr->p_paddr & 0xfffffff; *addr = (grub_addr_t) (paddr - kern_start + (grub_uint8_t *) kern_chunk_src); @@ -1394,7 +1394,7 @@ grub_bsd_load_elf (grub_elf_t elf, const char *filename) { grub_relocator_chunk_t ch; - entry = elf->ehdr.ehdr32.e_entry & 0xFFFFFF; + entry = elf->ehdr.ehdr32.e_entry & 0xFFFFFFF; err = grub_elf32_phdr_iterate (elf, filename, grub_bsd_elf32_size_hook, NULL); if (err)