Woops.  I've been pointed out that cross-compiles were actually working and
should be preserved.  I propose this new patch which integrates endianess
conversion macros with include/grub/types.h.

-- 
Robert Millan

<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
2007-10-12  Robert Millan  <[EMAIL PROTECTED]>

	* conf/powerpc-ieee1275.rmk (grub_mkimage_SOURCES): Replace reference
	to util/powerpc/ieee1275/grub-mkimage.c with util/elf/grub-mkimage.c.

	* include/grub/types.h (#ifdef GRUB_CPU_WORDS_BIGENDIAN): Define
	grub_host_to_target16, grub_host_to_target32, grub_host_to_target64,
	grub_target_to_host16, grub_target_to_host32 and grub_target_to_host64.
	(#else): Likewise.

	* include/grub/powerpc/ieee1275/kernel.h (GRUB_IEEE1275_MOD_ALIGN):
	Renamed from to ...
	(GRUB_MOD_ALIGN): ...this.  Update all users.

	* util/elf/grub-mkimage.c: Replace grub_cpu_to_be16, grub_cpu_to_be32,
	grub_be_to_cpu16 and grub_be_to_cpu32 macros with grub_host_to_target16,
	grub_host_to_target32, grub_target_to_host16 and grub_target_to_host32,
	respectively.

2007-10-12  Robert Millan  <[EMAIL PROTECTED]>

	* util/powerpc/ieee1275/grub-mkimage.c: Moved to ...
	* util/elf/grub-mkimage.c: ... here.

diff -ur grub2/conf/powerpc-ieee1275.rmk grub2.mkimage/conf/powerpc-ieee1275.rmk
--- grub2/conf/powerpc-ieee1275.rmk	2007-10-02 23:34:47.000000000 +0200
+++ grub2.mkimage/conf/powerpc-ieee1275.rmk	2007-10-04 23:22:37.000000000 +0200
@@ -32,7 +32,7 @@
 endif
  
 # For grub-mkimage.
-grub_mkimage_SOURCES = util/powerpc/ieee1275/grub-mkimage.c util/misc.c \
+grub_mkimage_SOURCES = util/elf/grub-mkimage.c util/misc.c \
         util/resolve.c 
 
 # For grub-mkdevicemap.
diff -ur grub2/include/grub/powerpc/ieee1275/kernel.h grub2.mkimage/include/grub/powerpc/ieee1275/kernel.h
--- grub2/include/grub/powerpc/ieee1275/kernel.h	2007-07-22 01:32:24.000000000 +0200
+++ grub2.mkimage/include/grub/powerpc/ieee1275/kernel.h	2007-10-04 23:22:37.000000000 +0200
@@ -21,7 +21,7 @@
 
 #include <grub/symbol.h>
 
-#define GRUB_IEEE1275_MOD_ALIGN 0x1000
+#define GRUB_MOD_ALIGN 0x1000
 
 void EXPORT_FUNC (grub_reboot) (void);
 void EXPORT_FUNC (grub_halt) (void);
diff -ur grub2/include/grub/types.h grub2.mkimage/include/grub/types.h
--- grub2/include/grub/types.h	2007-07-22 01:32:22.000000000 +0200
+++ grub2.mkimage/include/grub/types.h	2007-10-04 23:17:49.000000000 +0200
@@ -140,6 +140,21 @@
 # define grub_be_to_cpu16(x)	((grub_uint16_t) (x))
 # define grub_be_to_cpu32(x)	((grub_uint32_t) (x))
 # define grub_be_to_cpu64(x)	((grub_uint64_t) (x))
+# ifdef GRUB_TARGET_WORDS_BIGENDIAN
+#  define grub_target_to_host16(x)	((grub_uint16_t) (x))
+#  define grub_target_to_host32(x)	((grub_uint32_t) (x))
+#  define grub_target_to_host64(x)	((grub_uint64_t) (x))
+#  define grub_host_to_target16(x)	((grub_uint16_t) (x))
+#  define grub_host_to_target32(x)	((grub_uint32_t) (x))
+#  define grub_host_to_target64(x)	((grub_uint64_t) (x))
+# else /* ! GRUB_TARGET_WORDS_BIGENDIAN */
+#  define grub_target_to_host16(x)	grub_swap_bytes16(x)
+#  define grub_target_to_host32(x)	grub_swap_bytes32(x)
+#  define grub_target_to_host64(x)	grub_swap_bytes64(x)
+#  define grub_host_to_target16(x)	grub_swap_bytes16(x)
+#  define grub_host_to_target32(x)	grub_swap_bytes32(x)
+#  define grub_host_to_target64(x)	grub_swap_bytes64(x)
+# endif
 #else /* ! WORDS_BIGENDIAN */
 # define grub_cpu_to_le16(x)	((grub_uint16_t) (x))
 # define grub_cpu_to_le32(x)	((grub_uint32_t) (x))
@@ -153,6 +168,21 @@
 # define grub_be_to_cpu16(x)	grub_swap_bytes16(x)
 # define grub_be_to_cpu32(x)	grub_swap_bytes32(x)
 # define grub_be_to_cpu64(x)	grub_swap_bytes64(x)
+# ifdef GRUB_TARGET_WORDS_BIGENDIAN
+#  define grub_target_to_host16(x)	grub_swap_bytes16(x)
+#  define grub_target_to_host32(x)	grub_swap_bytes32(x)
+#  define grub_target_to_host64(x)	grub_swap_bytes64(x)
+#  define grub_host_to_target16(x)	grub_swap_bytes16(x)
+#  define grub_host_to_target32(x)	grub_swap_bytes32(x)
+#  define grub_host_to_target64(x)	grub_swap_bytes64(x)
+# else /* ! GRUB_TARGET_WORDS_BIGENDIAN */
+#  define grub_target_to_host16(x)	((grub_uint16_t) (x))
+#  define grub_target_to_host32(x)	((grub_uint32_t) (x))
+#  define grub_target_to_host64(x)	((grub_uint64_t) (x))
+#  define grub_host_to_target16(x)	((grub_uint16_t) (x))
+#  define grub_host_to_target32(x)	((grub_uint32_t) (x))
+#  define grub_host_to_target64(x)	((grub_uint64_t) (x))
+# endif
 #endif /* ! WORDS_BIGENDIAN */
 
 #endif /* ! GRUB_TYPES_HEADER */
diff -ur grub2/kern/powerpc/ieee1275/init.c grub2.mkimage/kern/powerpc/ieee1275/init.c
--- grub2/kern/powerpc/ieee1275/init.c	2007-07-22 01:32:27.000000000 +0200
+++ grub2.mkimage/kern/powerpc/ieee1275/init.c	2007-10-04 23:22:37.000000000 +0200
@@ -205,5 +205,5 @@
 grub_addr_t
 grub_arch_modules_addr (void)
 {
-  return ALIGN_UP(_end, GRUB_IEEE1275_MOD_ALIGN);
+  return ALIGN_UP(_end, GRUB_MOD_ALIGN);
 }
diff -ur grub2/util/powerpc/ieee1275/grub-mkimage.c grub2.mkimage/util/powerpc/ieee1275/grub-mkimage.c
--- grub2/util/powerpc/ieee1275/grub-mkimage.c	2007-07-22 01:32:32.000000000 +0200
+++ grub2.mkimage/util/powerpc/ieee1275/grub-mkimage.c	2007-10-04 23:23:16.000000000 +0200
@@ -70,28 +70,28 @@
 
   grub_util_info ("adding CHRP NOTE segment");
 
-  note.header.namesz = grub_cpu_to_be32 (sizeof (GRUB_IEEE1275_NOTE_NAME));
-  note.header.descsz = grub_cpu_to_be32 (note_size);
-  note.header.type = grub_cpu_to_be32 (GRUB_IEEE1275_NOTE_TYPE);
+  note.header.namesz = grub_host_to_target32 (sizeof (GRUB_IEEE1275_NOTE_NAME));
+  note.header.descsz = grub_host_to_target32 (note_size);
+  note.header.type = grub_host_to_target32 (GRUB_IEEE1275_NOTE_TYPE);
   strcpy (note.header.name, GRUB_IEEE1275_NOTE_NAME);
-  note.descriptor.real_mode = grub_cpu_to_be32 (0xffffffff);
-  note.descriptor.real_base = grub_cpu_to_be32 (0x00c00000);
-  note.descriptor.real_size = grub_cpu_to_be32 (0xffffffff);
-  note.descriptor.virt_base = grub_cpu_to_be32 (0xffffffff);
-  note.descriptor.virt_size = grub_cpu_to_be32 (0xffffffff);
-  note.descriptor.load_base = grub_cpu_to_be32 (0x00004000);
+  note.descriptor.real_mode = grub_host_to_target32 (0xffffffff);
+  note.descriptor.real_base = grub_host_to_target32 (0x00c00000);
+  note.descriptor.real_size = grub_host_to_target32 (0xffffffff);
+  note.descriptor.virt_base = grub_host_to_target32 (0xffffffff);
+  note.descriptor.virt_size = grub_host_to_target32 (0xffffffff);
+  note.descriptor.load_base = grub_host_to_target32 (0x00004000);
 
   /* Write the note data to the new segment.  */
   grub_util_write_image_at (&note, note_size,
-			    grub_be_to_cpu32 (phdr->p_offset), out);
+			    grub_target_to_host32 (phdr->p_offset), out);
 
   /* Fill in the rest of the segment header.  */
-  phdr->p_type = grub_cpu_to_be32 (PT_NOTE);
-  phdr->p_flags = grub_cpu_to_be32 (PF_R);
-  phdr->p_align = grub_cpu_to_be32 (sizeof (long));
+  phdr->p_type = grub_host_to_target32 (PT_NOTE);
+  phdr->p_flags = grub_host_to_target32 (PF_R);
+  phdr->p_align = grub_host_to_target32 (sizeof (long));
   phdr->p_vaddr = 0;
   phdr->p_paddr = 0;
-  phdr->p_filesz = grub_cpu_to_be32 (note_size);
+  phdr->p_filesz = grub_host_to_target32 (note_size);
   phdr->p_memsz = 0;
 }
 
@@ -120,9 +120,9 @@
 
   module_img = xmalloc (total_module_size);
   modinfo = (struct grub_module_info *) module_img;
-  modinfo->magic = grub_cpu_to_be32 (GRUB_MODULE_MAGIC);
-  modinfo->offset = grub_cpu_to_be32 (sizeof (struct grub_module_info));
-  modinfo->size = grub_cpu_to_be32 (total_module_size);
+  modinfo->magic = grub_host_to_target32 (GRUB_MODULE_MAGIC);
+  modinfo->offset = grub_host_to_target32 (sizeof (struct grub_module_info));
+  modinfo->size = grub_host_to_target32 (total_module_size);
 
   /* Load all the modules, with headers, into module_img.  */
   for (p = path_list; p; p = p->next)
@@ -135,8 +135,8 @@
       mod_size = grub_util_get_image_size (p->name);
 
       header = (struct grub_module_header *) (module_img + offset);
-      header->offset = grub_cpu_to_be32 (sizeof (*header));
-      header->size = grub_cpu_to_be32 (mod_size + sizeof (*header));
+      header->offset = grub_host_to_target32 (sizeof (*header));
+      header->size = grub_host_to_target32 (mod_size + sizeof (*header));
 
       grub_util_load_image (p->name, module_img + offset + sizeof (*header));
 
@@ -145,16 +145,16 @@
 
   /* Write the module data to the new segment.  */
   grub_util_write_image_at (module_img, total_module_size,
-			    grub_cpu_to_be32 (phdr->p_offset), out);
+			    grub_host_to_target32 (phdr->p_offset), out);
 
   /* Fill in the rest of the segment header.  */
-  phdr->p_type = grub_cpu_to_be32 (PT_LOAD);
-  phdr->p_flags = grub_cpu_to_be32 (PF_R | PF_W | PF_X);
-  phdr->p_align = grub_cpu_to_be32 (sizeof (long));
-  phdr->p_vaddr = grub_cpu_to_be32 (modbase);
-  phdr->p_paddr = grub_cpu_to_be32 (modbase);
-  phdr->p_filesz = grub_cpu_to_be32 (total_module_size);
-  phdr->p_memsz = grub_cpu_to_be32 (total_module_size);
+  phdr->p_type = grub_host_to_target32 (PT_LOAD);
+  phdr->p_flags = grub_host_to_target32 (PF_R | PF_W | PF_X);
+  phdr->p_align = grub_host_to_target32 (sizeof (long));
+  phdr->p_vaddr = grub_host_to_target32 (modbase);
+  phdr->p_paddr = grub_host_to_target32 (modbase);
+  phdr->p_filesz = grub_host_to_target32 (total_module_size);
+  phdr->p_memsz = grub_host_to_target32 (total_module_size);
 }
 
 void
@@ -177,10 +177,10 @@
 
   grub_util_read_at (&ehdr, sizeof (ehdr), 0, in);
   
-  phdrs = xmalloc (grub_be_to_cpu16 (ehdr.e_phentsize)
-		   * (grub_be_to_cpu16 (ehdr.e_phnum) + 2));
+  phdrs = xmalloc (grub_target_to_host16 (ehdr.e_phentsize)
+		   * (grub_target_to_host16 (ehdr.e_phnum) + 2));
   /* Copy all existing segments.  */
-  for (i = 0; i < grub_be_to_cpu16 (ehdr.e_phnum); i++)
+  for (i = 0; i < grub_target_to_host16 (ehdr.e_phnum); i++)
     {
       char *segment_img;
       grub_size_t segment_end;
@@ -189,26 +189,26 @@
 
       /* Read segment header.  */
       grub_util_read_at (phdr, sizeof (Elf32_Phdr),
-			 (grub_be_to_cpu32 (ehdr.e_phoff)
-			  + (i * grub_be_to_cpu16 (ehdr.e_phentsize))),
+			 (grub_target_to_host32 (ehdr.e_phoff)
+			  + (i * grub_target_to_host16 (ehdr.e_phentsize))),
 			 in);
       grub_util_info ("copying segment %d, type %d", i,
-		      grub_be_to_cpu32 (phdr->p_type));
+		      grub_target_to_host32 (phdr->p_type));
 
       /* Locate _end.  */
-      segment_end = grub_be_to_cpu32 (phdr->p_paddr)
-		    + grub_be_to_cpu32 (phdr->p_memsz);
+      segment_end = grub_target_to_host32 (phdr->p_paddr)
+		    + grub_target_to_host32 (phdr->p_memsz);
       grub_util_info ("segment %u end 0x%lx", i, segment_end);
       if (segment_end > grub_end)
 	grub_end = segment_end;
 
       /* Read segment data and write it to new file.  */
-      segment_img = xmalloc (grub_be_to_cpu32 (phdr->p_filesz));
+      segment_img = xmalloc (grub_target_to_host32 (phdr->p_filesz));
   
-      grub_util_read_at (segment_img, grub_be_to_cpu32 (phdr->p_filesz),
-			 grub_be_to_cpu32 (phdr->p_offset), in);
-      grub_util_write_image_at (segment_img, grub_be_to_cpu32 (phdr->p_filesz),
-				grub_be_to_cpu32 (phdr->p_offset), out);
+      grub_util_read_at (segment_img, grub_target_to_host32 (phdr->p_filesz),
+			 grub_target_to_host32 (phdr->p_offset), in);
+      grub_util_write_image_at (segment_img, grub_target_to_host32 (phdr->p_filesz),
+				grub_target_to_host32 (phdr->p_offset), out);
 
       free (segment_img);
     }
@@ -218,14 +218,14 @@
       grub_addr_t modbase;
 
       /* Place modules just after grub segment.  */
-      modbase = ALIGN_UP(grub_end, GRUB_IEEE1275_MOD_ALIGN);
+      modbase = ALIGN_UP(grub_end, GRUB_MOD_ALIGN);
 
       /* Construct new segment header for modules.  */
-      phdr = phdrs + grub_be_to_cpu16 (ehdr.e_phnum);
-      ehdr.e_phnum = grub_cpu_to_be16 (grub_be_to_cpu16 (ehdr.e_phnum) + 1);
+      phdr = phdrs + grub_target_to_host16 (ehdr.e_phnum);
+      ehdr.e_phnum = grub_host_to_target16 (grub_target_to_host16 (ehdr.e_phnum) + 1);
 
       /* Fill in p_offset so the callees know where to write.  */
-      phdr->p_offset = grub_cpu_to_be32 (ALIGN_UP (grub_util_get_fp_size (out),
+      phdr->p_offset = grub_host_to_target32 (ALIGN_UP (grub_util_get_fp_size (out),
 						   sizeof (long)));
 
       load_modules (modbase, phdr, dir, mods, out);
@@ -234,11 +234,11 @@
   if (chrp)
     {
       /* Construct new segment header for the CHRP note.  */
-      phdr = phdrs + grub_be_to_cpu16 (ehdr.e_phnum);
-      ehdr.e_phnum = grub_cpu_to_be16 (grub_be_to_cpu16 (ehdr.e_phnum) + 1);
+      phdr = phdrs + grub_target_to_host16 (ehdr.e_phnum);
+      ehdr.e_phnum = grub_host_to_target16 (grub_target_to_host16 (ehdr.e_phnum) + 1);
 
       /* Fill in p_offset so the callees know where to write.  */
-      phdr->p_offset = grub_cpu_to_be32 (ALIGN_UP (grub_util_get_fp_size (out),
+      phdr->p_offset = grub_host_to_target32 (ALIGN_UP (grub_util_get_fp_size (out),
 						   sizeof (long)));
 
       load_note (phdr, out);
@@ -251,12 +251,12 @@
 
   /* Append entire segment table to the file.  */
   phdroff = ALIGN_UP (grub_util_get_fp_size (out), sizeof (long));
-  grub_util_write_image_at (phdrs, grub_be_to_cpu16 (ehdr.e_phentsize)
-			    * grub_be_to_cpu16 (ehdr.e_phnum), phdroff,
+  grub_util_write_image_at (phdrs, grub_target_to_host16 (ehdr.e_phentsize)
+			    * grub_target_to_host16 (ehdr.e_phnum), phdroff,
 			    out);
 
   /* Write ELF header.  */
-  ehdr.e_phoff = grub_cpu_to_be32 (phdroff);
+  ehdr.e_phoff = grub_host_to_target32 (phdroff);
   grub_util_write_image_at (&ehdr, sizeof (ehdr), 0, out);
 
   free (phdrs);
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to