Index: loader/powerpc/ieee1275/linux.c =================================================================== RCS file: /cvsroot/grub/grub2/loader/powerpc/ieee1275/linux.c,v retrieving revision 1.6 diff -u -p -w -r1.6 linux.c --- loader/powerpc/ieee1275/linux.c 14 Feb 2005 18:41:33 -0000 1.6 +++ loader/powerpc/ieee1275/linux.c 9 May 2005 02:03:46 -0000 @@ -56,6 +56,12 @@ grub_linux_boot (void) grub_ieee1275_set_property (chosen, "bootargs", linux_args, grub_strlen (linux_args) + 1, &actual); + grub_dprintf ("loader", "entry point: 0x%x\n", linux_addr); + grub_dprintf ("loader", "initrd at: 0x%x, size 0x%x\n", initrd_addr, + initrd_size); + grub_dprintf ("loader", "/chosen/bootargs: %s\n", linux_args); + grub_dprintf ("loader", "jumping to Linux...\n"); + /* Boot the kernel. */ linuxmain = (kernel_entry_t) linux_addr; linuxmain ((void *) initrd_addr, initrd_size, grub_ieee1275_entry_fn, 0, 0); @@ -188,13 +194,18 @@ grub_rescue_cmd_linux (int argc, char *a if (phdr->p_type == PT_LOAD) { + void *segment_addr = ((char *) entry) + offset; + if (grub_file_seek (file, phdr->p_offset) == -1) { grub_error (GRUB_ERR_BAD_OS, "Invalid offset in program header"); goto fail; } - if (grub_file_read (file, (void *) (((char *) entry) + offset) , phdr->p_filesz) + grub_dprintf ("loader", "Loading segment %d at %p, size 0x%x\n", i, + segment_addr, phdr->p_filesz); + + if (grub_file_read (file, segment_addr , phdr->p_filesz) != (grub_ssize_t) phdr->p_filesz) goto fail; @@ -275,6 +286,8 @@ grub_rescue_cmd_initrd (int argc, char * goto fail; } + grub_dprintf ("loader", "Loading initrd at 0x%x, size 0x%x\n", addr, size); + if (grub_file_read (file, (void *) addr, size) != size) { grub_ieee1275_release (addr, size);