summaryrefslogtreecommitdiff
path: root/sysutils/grub
diff options
context:
space:
mode:
authorjmmv <jmmv>2006-02-03 09:59:32 +0000
committerjmmv <jmmv>2006-02-03 09:59:32 +0000
commit725b695fb3ed8c5a0ca81a21fc598a8ec5d34bb8 (patch)
treec6ee21fa8dd216972043acbad7f90b137cb55c13 /sysutils/grub
parentba40b944d3aa28fcab52befb3b55bf19d2883b0c (diff)
downloadpkgsrc-725b695fb3ed8c5a0ca81a21fc598a8ec5d34bb8.tar.gz
Workaround a bug that prevents GRUB to load ELF kernels that explicitly
specify load addresses in their Multiboot header. (E.g., NetBSD.) This has already been sent to GRUB's bug tracking system: http://savannah.gnu.org/bugs/?func=detailitem&item_id=15590 Bump PKGREVISION to 4.
Diffstat (limited to 'sysutils/grub')
-rw-r--r--sysutils/grub/Makefile4
-rw-r--r--sysutils/grub/distinfo4
-rw-r--r--sysutils/grub/patches/patch-ac54
3 files changed, 53 insertions, 9 deletions
diff --git a/sysutils/grub/Makefile b/sysutils/grub/Makefile
index 058701eb402..920d0af7d52 100644
--- a/sysutils/grub/Makefile
+++ b/sysutils/grub/Makefile
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.38 2006/01/20 16:15:54 jmmv Exp $
+# $NetBSD: Makefile,v 1.39 2006/02/03 09:59:32 jmmv Exp $
#
DISTNAME= grub-0.97
-PKGREVISION= 3
+PKGREVISION= 4
CATEGORIES= sysutils
MASTER_SITES= ftp://alpha.gnu.org/gnu/grub/
diff --git a/sysutils/grub/distinfo b/sysutils/grub/distinfo
index 5ff354708a7..2495e6e1d28 100644
--- a/sysutils/grub/distinfo
+++ b/sysutils/grub/distinfo
@@ -1,9 +1,9 @@
-$NetBSD: distinfo,v 1.18 2005/11/12 06:35:24 jlam Exp $
+$NetBSD: distinfo,v 1.19 2006/02/03 09:59:32 jmmv Exp $
SHA1 (grub-0.97.tar.gz) = 2580626c4579bd99336d3af4482c346c95dac4fb
RMD160 (grub-0.97.tar.gz) = 7fb5674edf0c950bd38e94f85ff1e2909aa741f0
Size (grub-0.97.tar.gz) = 971783 bytes
-SHA1 (patch-ac) = c2c657af9b4ed15991d642a1359cb65d61662df6
+SHA1 (patch-ac) = dc7774a09ca88f6696e0680a7be39df56244eedc
SHA1 (patch-ad) = 613e915a015ad22c9bd5712d416e12b1b81fdb93
SHA1 (patch-ae) = 96d8283e90ceb3e887ba0ada05619858c52bc144
SHA1 (patch-ai) = 60088cf6786a364da37e19fbb5df4c6fd7641016
diff --git a/sysutils/grub/patches/patch-ac b/sysutils/grub/patches/patch-ac
index 77e2ce78b20..3e30b031344 100644
--- a/sysutils/grub/patches/patch-ac
+++ b/sysutils/grub/patches/patch-ac
@@ -1,7 +1,7 @@
-$NetBSD: patch-ac,v 1.3 2005/08/21 15:08:46 jmmv Exp $
+$NetBSD: patch-ac,v 1.4 2006/02/03 09:59:32 jmmv Exp $
---- stage2/boot.c 2004-03-30 13:44:08.000000000 +0200
-+++ stage2/boot.c 2005-07-25 21:55:29.000000000 +0200
+--- stage2/boot.c.orig 2004-03-30 13:44:08.000000000 +0200
++++ stage2/boot.c
@@ -22,6 +22,7 @@
#include "shared.h"
@@ -10,7 +10,51 @@ $NetBSD: patch-ac,v 1.3 2005/08/21 15:08:46 jmmv Exp $
#include "imgact_aout.h"
#include "i386-elf.h"
-@@ -872,6 +873,91 @@
+@@ -104,7 +105,21 @@ load_image (char *kernel, char *arg, ker
+ && BOOTABLE_I386_ELF ((*((Elf32_Ehdr *) buffer))))
+ {
+ if (type == KERNEL_TYPE_MULTIBOOT)
+- entry_addr = (entry_func) pu.elf->e_entry;
++ {
++ if (flags & MULTIBOOT_AOUT_KLUDGE)
++ {
++ struct multiboot_header *mbh;
++
++ mbh = (struct multiboot_header *) (buffer + i);
++
++ entry_addr = (entry_func) mbh->entry_addr;
++ text_len = mbh->load_end_addr - mbh->load_addr;
++ data_len = 0;
++ bss_len = mbh->bss_end_addr - mbh->load_end_addr;
++ }
++ else
++ entry_addr = (entry_func) pu.elf->e_entry;
++ }
+ else
+ entry_addr = (entry_func) (pu.elf->e_entry & 0xFFFFFF);
+
+@@ -610,9 +625,19 @@ load_image (char *kernel, char *arg, ker
+ if (type == KERNEL_TYPE_FREEBSD || type == KERNEL_TYPE_NETBSD)
+ memaddr = RAW_ADDR (phdr->p_paddr & 0xFFFFFF);
+ else
+- memaddr = RAW_ADDR (phdr->p_paddr);
++ {
++ memaddr = RAW_ADDR (phdr->p_paddr);
++ if (flags & MULTIBOOT_AOUT_KLUDGE &&
++ memaddr >= mbi.mem_upper * 1024)
++ {
++ memaddr &= RAW_ADDR (0xFFFFFF);
++ }
++ }
+
+ memsiz = phdr->p_memsz;
++ if (flags & MULTIBOOT_AOUT_KLUDGE)
++ memsiz += bss_len;
++
+ if (memaddr < RAW_ADDR (0x100000))
+ errnum = ERR_BELOW_1MB;
+
+@@ -872,6 +897,91 @@ bsd_boot_entry (int flags, int bootdev,
* variables.
*/
@@ -102,7 +146,7 @@ $NetBSD: patch-ac,v 1.3 2005/08/21 15:08:46 jmmv Exp $
void
bsd_boot (kernel_t type, int bootdev, char *arg)
-@@ -894,31 +980,12 @@
+@@ -894,31 +1004,12 @@ bsd_boot (kernel_t type, int bootdev, ch
{
while (*str && *str != ' ')
{