* grub-core/loader/i386/linux.c (grub_cmd_initrd): Align initrds at 4.
* grub-core/loader/i386/pc/linux.c (grub_cmd_initrd): Likewise.
* grub-core/loader/ia64/efi/linux.c (grub_cmd_initrd): Likewise.
* grub-core/loader/mips/linux.c (grub_cmd_initrd): Likewise.
* grub-core/loader/powerpc/ieee1275/linux.c (grub_cmd_initrd): Likewise.
* grub-core/loader/sparc64/ieee1275/linux.c (grub_cmd_initrd): Likewise.
+2012-03-04 Vladimir Serbinenko <phcoder@gmail.com>
+
+ * include/grub/misc.h (ALIGN_UP_OVERHEAD): New define.
+ * grub-core/loader/i386/linux.c (grub_cmd_initrd): Align initrds at 4.
+ * grub-core/loader/i386/pc/linux.c (grub_cmd_initrd): Likewise.
+ * grub-core/loader/ia64/efi/linux.c (grub_cmd_initrd): Likewise.
+ * grub-core/loader/mips/linux.c (grub_cmd_initrd): Likewise.
+ * grub-core/loader/powerpc/ieee1275/linux.c (grub_cmd_initrd): Likewise.
+ * grub-core/loader/sparc64/ieee1275/linux.c (grub_cmd_initrd): Likewise.
+
2012-03-04 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/commands/menuentry.c (options): Remove
if (! files[i])
goto fail;
nfiles++;
- size += grub_file_size (files[i]);
+ size += ALIGN_UP (grub_file_size (files[i]), 4);
}
initrd_pages = (page_align (size) >> 12);
goto fail;
}
ptr += cursize;
+ grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
+ ptr += ALIGN_UP_OVERHEAD (cursize, 4);
}
grub_dprintf ("linux", "Initrd, addr=0x%x, size=0x%x\n",
if (! files[i])
goto fail;
nfiles++;
- size += grub_file_size (files[i]);
+ size += ALIGN_UP (grub_file_size (files[i]), 4);
}
{
goto fail;
}
ptr += cursize;
+ grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
+ ptr += ALIGN_UP_OVERHEAD (cursize, 4);
}
lh->ramdisk_image = initrd_addr;
if (! files[i])
goto fail;
nfiles++;
- initrd_size += grub_file_size (files[i]);
+ initrd_size += ALIGN_UP (grub_file_size (files[i]), 4);
grub_dprintf ("linux", "File %d: %s\n", i, argv[i]);
}
goto fail;
}
ptr += cursize;
+ grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
+ ptr += ALIGN_UP_OVERHEAD (cursize, 4);
}
fail:
for (i = 0; i < nfiles; i++)
if (! files[i])
goto fail;
nfiles++;
- size += grub_file_size (files[i]);
+ size += ALIGN_UP (grub_file_size (files[i]), 4);
}
{
goto fail;
}
ptr += cursize;
+ grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
+ ptr += ALIGN_UP_OVERHEAD (cursize, 4);
}
#ifdef GRUB_MACHINE_MIPS_QEMU_MIPS
if (! files[i])
goto fail;
nfiles++;
- size += grub_file_size (files[i]);
+ size += ALIGN_UP (grub_file_size (files[i]), 4);
}
first_addr = linux_addr + linux_size;
goto fail;
}
ptr += cursize;
+ grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
+ ptr += ALIGN_UP_OVERHEAD (cursize, 4);
}
initrd_addr = addr;
if (! files[i])
goto fail;
nfiles++;
- size += grub_file_size (files[i]);
+ size += ALIGN_UP(grub_file_size (files[i]), 4);
}
addr = 0x60000000;
goto fail;
}
ptr += cursize;
+ grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
+ ptr += ALIGN_UP_OVERHEAD (cursize, 4);
}
initrd_addr = addr;
#define ALIGN_UP(addr, align) \
((addr + (typeof (addr)) align - 1) & ~((typeof (addr)) align - 1))
+#define ALIGN_UP_OVERHEAD(addr, align) ((-(addr)) & ((typeof (addr)) (align) - 1))
#define ALIGN_DOWN(addr, align) \
((addr) & ~((typeof (addr)) align - 1))
#define ARRAY_SIZE(array) (sizeof (array) / sizeof (array[0]))