diff --git a/ChangeLog b/ChangeLog index fd260b57e..574f63cb4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2011-12-13 Vladimir Serbinenko + + * include/grub/kernel.h (FOR_MODULES): Preserve alignment invariants. + 2011-12-13 Vladimir Serbinenko * grub-core/loader/multiboot_mbi2.c (grub_multiboot_add_elfsyms): diff --git a/include/grub/kernel.h b/include/grub/kernel.h index f587de514..c9a549675 100644 --- a/include/grub/kernel.h +++ b/include/grub/kernel.h @@ -71,13 +71,15 @@ struct grub_module_info64 extern grub_addr_t EXPORT_VAR (grub_modbase); -#define FOR_MODULES(var) for (\ - var = grub_modbase ? (struct grub_module_header *) \ +#define FOR_MODULES(var) for (var = grub_modbase ? (struct grub_module_header *) \ (grub_modbase + (((struct grub_module_info *) grub_modbase)->offset)) : 0;\ var && (grub_addr_t) var \ < (grub_modbase + (((struct grub_module_info *) grub_modbase)->size)); \ var = (struct grub_module_header *) \ - ((char *) var + ((struct grub_module_header *) var)->size)) + ((grub_uint32_t *) var \ + + ((((struct grub_module_header *) var)->size \ + + sizeof (grub_uint32_t) - 1) \ + / sizeof (grub_uint32_t)))) grub_addr_t grub_modules_get_end (void);