ports/152978: [maintainer update] sysutils/grub2-1.98
Rick Richard
rick at lgarchitecture.com
Fri Dec 10 06:40:09 UTC 2010
>Number: 152978
>Category: ports
>Synopsis: [maintainer update] sysutils/grub2-1.98
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: maintainer-update
>Submitter-Id: current-users
>Arrival-Date: Fri Dec 10 06:40:08 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator: Rick Richard
>Release: FreeBSD 8.1
>Organization:
>Environment:
>Description:
Follow-up on PR152389 to allow grub to recognize bsdlabel disklabels.
I confirmed the bug and tested the patch. The original submission was for grub1 and grub2, here's the grub2 part.
>How-To-Repeat:
>Fix:
Patch attached with submission follows:
diff -ruN grub2.orig/Makefile grub2/Makefile
--- grub2.orig/Makefile 2010-10-12 08:48:46.000000000 -0700
+++ grub2/Makefile 2010-12-09 21:56:58.823684162 -0800
@@ -7,6 +7,7 @@
PORTNAME= grub2
PORTVERSION= 1.98
+PORTREVISION= 1
CATEGORIES= sysutils
MASTER_SITES= ftp://alpha.gnu.org/gnu/grub/
DISTNAME= grub-${PORTVERSION}
diff -ruN grub2.orig/files/patch-bsd-partmap grub2/files/patch-bsd-partmap
--- grub2.orig/files/patch-bsd-partmap 1969-12-31 16:00:00.000000000 -0800
+++ grub2/files/patch-bsd-partmap 2010-12-09 21:56:58.823684162 -0800
@@ -0,0 +1,47 @@
+--- include/grub/msdos_partition.h 2010-03-06 20:51:37.000000000 +0000
++++ include/grub/msdos_partition.h 2010-11-17 18:22:29.000000000 +0000
+@@ -57,6 +57,7 @@
+ #define GRUB_PC_PARTITION_BSD_LABEL_SECTOR 1
+ #define GRUB_PC_PARTITION_BSD_LABEL_MAGIC 0x82564557
+ #define GRUB_PC_PARTITION_BSD_MAX_ENTRIES 8
++#define GRUB_PC_PARTITION_BSD_RAW_PART 2
+
+ /* BSD partition types. */
+ #define GRUB_PC_PARTITION_BSD_TYPE_UNUSED 0
+--- partmap/msdos.c 2010-03-06 20:51:37.000000000 +0000
++++ partmap/msdos.c 2010-11-17 18:26:26.000000000 +0000
+@@ -176,6 +176,8 @@
+ /* Check if this is a BSD partition. */
+ if (grub_msdos_partition_is_bsd (e->type))
+ {
++ grub_uint32_t slice_offset = 0, raw_offset = 0;
++
+ /* Check if the BSD label is within the DOS partition. */
+ if (p.len <= GRUB_PC_PARTITION_BSD_LABEL_SECTOR)
+ {
+@@ -200,6 +202,15 @@
+ label.magic, p.index);
+ continue;
+ }
++
++ /* Compensate for relative addressing in FreeBSD. */
++ if (e->type == GRUB_PC_PARTITION_TYPE_FREEBSD
++ && GRUB_PC_PARTITION_BSD_RAW_PART < grub_cpu_to_le16 (label.num_partitions))
++ {
++ slice_offset = p.start;
++ raw_offset = grub_le_to_cpu32 (label.entries[GRUB_PC_PARTITION_BSD_RAW_PART].offset);
++ }
++
+ for (pcdata.bsd_part = 0;
+ pcdata.bsd_part < grub_cpu_to_le16 (label.num_partitions);
+ pcdata.bsd_part++)
+@@ -207,7 +218,9 @@
+ struct grub_msdos_partition_bsd_entry *be
+ = label.entries + pcdata.bsd_part;
+
++ if (grub_le_to_cpu32 (be->offset) < raw_offset)
++ continue;
+- p.start = grub_le_to_cpu32 (be->offset);
++ p.start = grub_le_to_cpu32 (be->offset) - raw_offset + slice_offset;
+ p.len = grub_le_to_cpu32 (be->size);
+ pcdata.bsd_type = be->fs_type;
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list