diff --git a/loader/i386/multiboot.c b/loader/i386/multiboot.c index a59085c..9472f61 100644 --- a/loader/i386/multiboot.c +++ b/loader/i386/multiboot.c @@ -269,7 +269,8 @@ grub_multiboot (int argc, char *argv[]) grub_multiboot_payload_size = cmdline_length /* boot_loader_name_length might need to grow for mbi,etc to be aligned (see below) */ + boot_loader_name_length + 3 - + sizeof (struct grub_multiboot_info) + mmap_length; + + sizeof (struct grub_multiboot_info) + mmap_length + + 100000; if (header->flags & MULTIBOOT_AOUT_KLUDGE) { @@ -315,6 +316,7 @@ grub_multiboot (int argc, char *argv[]) mbi_dest = mbi_addr (grub_multiboot_payload_dest); grub_memset (mbi, 0, sizeof (struct grub_multiboot_info)); mbi->mmap_length = mmap_length; + mbi->mods_addr = mmap_addr (grub_multiboot_payload_dest) + mmap_length; grub_fill_multiboot_mmap (mmap_addr (grub_multiboot_payload_orig)); @@ -440,8 +442,8 @@ grub_module (int argc, char *argv[]) { struct grub_mod_list *modlist = (struct grub_mod_list *) mbi->mods_addr; - modlist = grub_realloc (modlist, (mbi->mods_count + 1) - * sizeof (struct grub_mod_list)); + // modlist = grub_realloc (modlist, (mbi->mods_count + 1) + // * sizeof (struct grub_mod_list)); if (! modlist) goto fail; mbi->mods_addr = (grub_uint32_t) modlist; @@ -454,7 +456,8 @@ grub_module (int argc, char *argv[]) } else { - struct grub_mod_list *modlist = grub_malloc (sizeof (struct grub_mod_list)); + struct grub_mod_list *modlist = (struct grub_mod_list *) mbi->mods_addr; + // struct grub_mod_list *modlist = grub_malloc (sizeof (struct grub_mod_list)); if (! modlist) goto fail; modlist->mod_start = (grub_uint32_t) module;