diff options
author | jmmv <jmmv> | 2006-02-03 09:59:32 +0000 |
---|---|---|
committer | jmmv <jmmv> | 2006-02-03 09:59:32 +0000 |
commit | 69c3c0173ed72c529c6be6fac34275641fee8427 (patch) | |
tree | c6ee21fa8dd216972043acbad7f90b137cb55c13 /sysutils/grub | |
parent | 74e39d983b2068b77a51f1d47d1e1ae99ce342e3 (diff) | |
download | pkgsrc-69c3c0173ed72c529c6be6fac34275641fee8427.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/Makefile | 4 | ||||
-rw-r--r-- | sysutils/grub/distinfo | 4 | ||||
-rw-r--r-- | sysutils/grub/patches/patch-ac | 54 |
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 != ' ') { |