All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michel Dänzer" <michel@daenzer.net>
To: Grub-devel@gnu.org
Subject: Re: State of GRUB on PowerPC
Date: Tue, 27 Jan 2009 08:19:41 +0100	[thread overview]
Message-ID: <1233040781.5108.98.camel@thor.local> (raw)

[-- Attachment #1: Type: text/plain, Size: 1468 bytes --]


I was able to reproduce Jordi's findings on my PowerBook G4. (Well,
except device.map seems to get generated correctly and the search
command seems to work for me, maybe this is due to differences between
our OF device trees or something like that)

After some printf-style debugging over the weekend, the failure to load
some modules indeed turns out to be an hfs.mod bug: the problem is that
strncasecmp() doesn't match the HFS B-tree sort order, which in
particular breaks lookup of files with an underscore in their name. The
first attached patch fixes this using a lookup table from Linux
fs/hfs/string.c.

The failure to auto-load some modules like search was also caused by
this, the auto-loading process aborts after failing to load a module. It
might be better to continue auto-loading other modules anyway.


BTW, I also need the second attached patch to be able to boot my
self-built 32 bit kernels configured to support 2GB lowmem.
elf->ehdr.ehdr32.e_entry ends up as 0x70000000.


P.S. Please reconsider automatically rejecting posts from
non-subscribers. I co-moderate half a dozen mailing lists, only costs me
a couple of minutes a day thanks to a nice tool called 'listadmin'.

I probably won't be subscribed to this list for long, please keep me
CC'd on followups.

-- 
Earthling Michel Dänzer           |                http://www.vmware.com
Libre software enthusiast         |          Debian, X and DRI developer

[-- Attachment #2: grub2-hfs.diff --]
[-- Type: text/x-patch, Size: 2716 bytes --]

--- grub2-1.96+20081201.orig/fs/hfs.c	2008-01-23 21:21:18.000000000 +0100
+++ grub2-1.96+20081201/fs/hfs.c	2009-01-26 15:23:08.000000000 +0100
@@ -391,6 +391,34 @@ grub_hfs_mount (grub_disk_t disk)
 }
 
 
+/*
+ * unsigned char caseorder[]
+ *
+ * Defines the lexical ordering of characters on the Macintosh
+ *
+ * Composition of the 'casefold' and 'order' tables from ARDI's code
+ * with the entry for 0x20 changed to match that for 0xCA to remove
+ * special case for those two characters.
+ */
+static unsigned char caseorder[256] = {
+	0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
+	0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
+	0x20,0x22,0x23,0x28,0x29,0x2A,0x2B,0x2C,0x2F,0x30,0x31,0x32,0x33,0x34,0x35,0x36,
+	0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x46,
+	0x47,0x48,0x57,0x59,0x5D,0x5F,0x66,0x68,0x6A,0x6C,0x72,0x74,0x76,0x78,0x7A,0x7E,
+	0x8C,0x8E,0x90,0x92,0x95,0x97,0x9E,0xA0,0xA2,0xA4,0xA7,0xA9,0xAA,0xAB,0xAC,0xAD,
+	0x4E,0x48,0x57,0x59,0x5D,0x5F,0x66,0x68,0x6A,0x6C,0x72,0x74,0x76,0x78,0x7A,0x7E,
+	0x8C,0x8E,0x90,0x92,0x95,0x97,0x9E,0xA0,0xA2,0xA4,0xA7,0xAF,0xB0,0xB1,0xB2,0xB3,
+	0x4A,0x4C,0x5A,0x60,0x7B,0x7F,0x98,0x4F,0x49,0x51,0x4A,0x4B,0x4C,0x5A,0x60,0x63,
+	0x64,0x65,0x6E,0x6F,0x70,0x71,0x7B,0x84,0x85,0x86,0x7F,0x80,0x9A,0x9B,0x9C,0x98,
+	0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0x94,0xBB,0xBC,0xBD,0xBE,0xBF,0xC0,0x4D,0x81,
+	0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0x55,0x8A,0xCC,0x4D,0x81,
+	0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0x26,0x27,0xD4,0x20,0x49,0x4B,0x80,0x82,0x82,
+	0xD5,0xD6,0x24,0x25,0x2D,0x2E,0xD7,0xD8,0xA6,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
+	0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
+	0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
+};
+
 /* Compare the K1 and K2 catalog file keys.  */
 static int
 grub_hfs_cmp_catkeys (struct grub_hfs_catalog_key *k1,
@@ -398,17 +426,19 @@ grub_hfs_cmp_catkeys (struct grub_hfs_ca
 {
   int cmp = (grub_be_to_cpu32 (k1->parent_dir)
 	     - grub_be_to_cpu32 (k2->parent_dir));
+  int i;
   
   if (cmp != 0)
     return cmp;
-  
-  cmp = grub_strncasecmp ((char *) (k1->str), (char *) (k2->str), k1->strlen);
-  
-  /* This is required because the compared strings are not of equal
-     length.  */
-  if (cmp == 0 && k1->strlen < k2->strlen)
-    return -1;
-  return cmp;
+
+  for (i = 0; i < k1->strlen && i < k2->strlen; i++) {
+    cmp = caseorder[k1->str[i]] - caseorder[k2->str[i]];
+
+    if (cmp != 0)
+      return cmp;
+  }
+
+  return k1->strlen - k2->strlen;
 }
 
 

[-- Attachment #3: grub2-ELF32_LOADMASK.diff --]
[-- Type: text/x-patch, Size: 568 bytes --]

diff -up -ru grub2-1.96+20081201.orig/loader/powerpc/ieee1275/linux.c grub2-1.96+20081201/loader/powerpc/ieee1275/linux.c
--- grub2-1.96+20081201.orig/loader/powerpc/ieee1275/linux.c	2007-07-22 01:32:33.000000000 +0200
+++ grub2-1.96+20081201/loader/powerpc/ieee1275/linux.c	2009-01-24 16:14:32.000000000 +0100
@@ -27,7 +27,7 @@
 #include <grub/ieee1275/ieee1275.h>
 #include <grub/machine/loader.h>
 
-#define ELF32_LOADMASK (0xc0000000UL)
+#define ELF32_LOADMASK (0xf0000000UL)
 #define ELF64_LOADMASK (0xc000000000000000ULL)
 
 static grub_dl_t my_mod;

             reply	other threads:[~2009-01-27  7:19 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-27  7:19 Michel Dänzer [this message]
2009-01-27 16:54 ` State of GRUB on PowerPC Vesa Jääskeläinen
2009-01-27 17:15   ` Michel Dänzer
2009-01-29  2:57 ` Pavel Roskin
2009-01-29 16:18   ` Michel Dänzer
2009-02-07 19:48 ` hfs patch (Re: State of GRUB on PowerPC) Robert Millan
2009-02-08  4:38   ` Pavel Roskin
2009-02-09 14:19     ` Robert Millan
2009-02-10  9:55       ` Michel Dänzer
2009-02-10  9:54     ` Michel Dänzer
2009-02-10 10:50       ` Jordi Mallach
2009-02-10 12:06         ` Jordi Mallach
2009-02-10 12:12           ` Michel Dänzer
2009-02-21 12:46         ` Robert Millan
2009-02-10 14:47       ` Robert Millan
2009-02-11  9:24         ` Michel Dänzer
2009-02-21 13:01           ` Robert Millan
  -- strict thread matches above, loose matches on Subject: below --
2008-12-19  0:00 State of GRUB on PowerPC Jordi Mallach
2008-12-19 11:47 ` Manoel Rebelo Abranches
2008-12-21 18:37 ` Jordi Mallach

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1233040781.5108.98.camel@thor.local \
    --to=michel@daenzer.net \
    --cc=Grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.