Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Dec 2010 06:34:25 GMT
From:      Rick Richard <rick@lgarchitecture.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   ports/152978: [maintainer update] sysutils/grub2-1.98
Message-ID:  <201012100634.oBA6YPPL040744@red.freebsd.org>
Resent-Message-ID: <201012100640.oBA6e8Vd083100@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>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:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201012100634.oBA6YPPL040744>