2007-10-12 Robert Millan
* 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
* 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
-#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 (¬e, 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);