multiboot: disentangle multiboot and multiboot2.
authorVladimir Serbinenko <phcoder@gmail.com>
Mon, 14 Aug 2017 10:51:26 +0000 (12:51 +0200)
committerVladimir Serbinenko <phcoder@gmail.com>
Mon, 14 Aug 2017 12:08:54 +0000 (14:08 +0200)
Previously we had multiboot and multiboot2 declaring the same symbols.
This can potentially lead to aliasing and strange behaviours when e.g.
module instead of module2 is used with multiboot2.

Bug: #51137

grub-core/loader/i386/multiboot_mbi.c
grub-core/loader/multiboot.c
grub-core/loader/multiboot_elfxx.c
grub-core/loader/multiboot_mbi2.c
include/grub/i386/multiboot.h
include/grub/mips/multiboot.h
include/grub/multiboot.h
include/multiboot2.h

index fd7b41b..dc98dbc 100644 (file)
@@ -239,7 +239,7 @@ grub_multiboot_get_mbi_size (void)
   ret = sizeof (struct multiboot_info) + ALIGN_UP (cmdline_size, 4)
     + modcnt * sizeof (struct multiboot_mod_list) + total_modcmd
     + ALIGN_UP (sizeof(PACKAGE_STRING), 4) 
-    + grub_get_multiboot_mmap_count () * sizeof (struct multiboot_mmap_entry)
+    + grub_multiboot_get_mmap_count () * sizeof (struct multiboot_mmap_entry)
     + elf_sec_entsize * elf_sec_num
     + 256 * sizeof (struct multiboot_color)
 #if GRUB_MACHINE_HAS_VBE || GRUB_MACHINE_HAS_VGA_TEXT
@@ -542,7 +542,7 @@ grub_multiboot_make_mbi (grub_uint32_t *target)
       mbi->mods_count = 0;
     }
 
-  mmap_size = grub_get_multiboot_mmap_count () 
+  mmap_size = grub_multiboot_get_mmap_count () 
     * sizeof (struct multiboot_mmap_entry);
   grub_fill_multiboot_mmap ((struct multiboot_mmap_entry *) ptrorig);
   mbi->mmap_length = mmap_size;
index bd9d5b3..bd3dc19 100644 (file)
 
 #include <grub/loader.h>
 #include <grub/command.h>
+#ifdef GRUB_USE_MULTIBOOT2
+#include <grub/multiboot2.h>
+#define GRUB_MULTIBOOT_CONSOLE_FRAMEBUFFER GRUB_MULTIBOOT2_CONSOLE_FRAMEBUFFER
+#define GRUB_MULTIBOOT_CONSOLE_EGA_TEXT GRUB_MULTIBOOT2_CONSOLE_EGA_TEXT
+#define GRUB_MULTIBOOT(x) grub_multiboot2_ ## x
+#else
 #include <grub/multiboot.h>
+#define GRUB_MULTIBOOT(x) grub_multiboot_ ## x
+#endif
 #include <grub/cpu/multiboot.h>
 #include <grub/elf.h>
 #include <grub/aout.h>
@@ -49,8 +57,8 @@ GRUB_MOD_LICENSE ("GPLv3+");
 #include <grub/efi/efi.h>
 #endif
 
-struct grub_relocator *grub_multiboot_relocator = NULL;
-grub_uint32_t grub_multiboot_payload_eip;
+struct grub_relocator *GRUB_MULTIBOOT (relocator) = NULL;
+grub_uint32_t GRUB_MULTIBOOT (payload_eip);
 #if defined (GRUB_MACHINE_PCBIOS) || defined (GRUB_MACHINE_MULTIBOOT) || defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_QEMU)
 #define DEFAULT_VIDEO_MODE "text"
 #else
@@ -78,7 +86,7 @@ count_hook (grub_uint64_t addr __attribute__ ((unused)),
 /* Return the length of the Multiboot mmap that will be needed to allocate
    our platform's map.  */
 grub_uint32_t
-grub_get_multiboot_mmap_count (void)
+GRUB_MULTIBOOT (get_mmap_count) (void)
 {
   grub_size_t count = 0;
 
@@ -88,7 +96,7 @@ grub_get_multiboot_mmap_count (void)
 }
 
 grub_err_t
-grub_multiboot_set_video_mode (void)
+GRUB_MULTIBOOT (set_video_mode) (void)
 {
   grub_err_t err;
   const char *modevar;
@@ -164,19 +172,23 @@ static grub_err_t
 grub_multiboot_boot (void)
 {
   grub_err_t err;
-  struct grub_relocator32_state state = MULTIBOOT_INITIAL_STATE;
 
-  state.MULTIBOOT_ENTRY_REGISTER = grub_multiboot_payload_eip;
+#ifdef GRUB_USE_MULTIBOOT2
+  struct grub_relocator32_state state = MULTIBOOT2_INITIAL_STATE;
+#else
+  struct grub_relocator32_state state = MULTIBOOT_INITIAL_STATE;
+#endif
+  state.MULTIBOOT_ENTRY_REGISTER = GRUB_MULTIBOOT (payload_eip);
 
-  err = grub_multiboot_make_mbi (&state.MULTIBOOT_MBI_REGISTER);
+  err = GRUB_MULTIBOOT (make_mbi) (&state.MULTIBOOT_MBI_REGISTER);
 
   if (err)
     return err;
 
   if (grub_efi_is_finished)
-    normal_boot (grub_multiboot_relocator, state);
+    normal_boot (GRUB_MULTIBOOT (relocator), state);
   else
-    efi_boot (grub_multiboot_relocator, state.MULTIBOOT_MBI_REGISTER);
+    efi_boot (GRUB_MULTIBOOT (relocator), state.MULTIBOOT_MBI_REGISTER);
 
   /* Not reached.  */
   return GRUB_ERR_NONE;
@@ -185,10 +197,10 @@ grub_multiboot_boot (void)
 static grub_err_t
 grub_multiboot_unload (void)
 {
-  grub_multiboot_free_mbi ();
+  GRUB_MULTIBOOT (free_mbi) ();
 
-  grub_relocator_unload (grub_multiboot_relocator);
-  grub_multiboot_relocator = NULL;
+  grub_relocator_unload (GRUB_MULTIBOOT (relocator));
+  GRUB_MULTIBOOT (relocator) = NULL;
 
   grub_dl_unref (my_mod);
 
@@ -207,7 +219,7 @@ static grub_uint64_t highest_load;
 
 /* Load ELF32 or ELF64.  */
 grub_err_t
-grub_multiboot_load_elf (mbi_load_data_t *mld)
+GRUB_MULTIBOOT (load_elf) (mbi_load_data_t *mld)
 {
   if (grub_multiboot_is_elf32 (mld->buffer))
     return grub_multiboot_load_elf32 (mld);
@@ -218,9 +230,9 @@ grub_multiboot_load_elf (mbi_load_data_t *mld)
 }
 
 grub_err_t
-grub_multiboot_set_console (int console_type, int accepted_consoles,
-                           int width, int height, int depth,
-                           int console_req)
+GRUB_MULTIBOOT (set_console) (int console_type, int accepted_consoles,
+                             int width, int height, int depth,
+                             int console_req)
 {
   console_required = console_req;
   if (!(accepted_consoles 
@@ -313,19 +325,19 @@ grub_cmd_multiboot (grub_command_t cmd __attribute__ ((unused)),
   grub_dl_ref (my_mod);
 
   /* Skip filename.  */
-  grub_multiboot_init_mbi (argc - 1, argv + 1);
+  GRUB_MULTIBOOT (init_mbi) (argc - 1, argv + 1);
 
-  grub_relocator_unload (grub_multiboot_relocator);
-  grub_multiboot_relocator = grub_relocator_new ();
+  grub_relocator_unload (GRUB_MULTIBOOT (relocator));
+  GRUB_MULTIBOOT (relocator) = grub_relocator_new ();
 
-  if (!grub_multiboot_relocator)
+  if (!GRUB_MULTIBOOT (relocator))
     goto fail;
 
-  err = grub_multiboot_load (file, argv[0]);
+  err = GRUB_MULTIBOOT (load) (file, argv[0]);
   if (err)
     goto fail;
 
-  grub_multiboot_set_bootdev ();
+  GRUB_MULTIBOOT (set_bootdev) ();
 
   grub_loader_set (grub_multiboot_boot, grub_multiboot_unload, 0);
 
@@ -335,8 +347,8 @@ grub_cmd_multiboot (grub_command_t cmd __attribute__ ((unused)),
 
   if (grub_errno != GRUB_ERR_NONE)
     {
-      grub_relocator_unload (grub_multiboot_relocator);
-      grub_multiboot_relocator = NULL;
+      grub_relocator_unload (GRUB_MULTIBOOT (relocator));
+      GRUB_MULTIBOOT (relocator) = NULL;
       grub_dl_unref (my_mod);
     }
 
@@ -368,7 +380,7 @@ grub_cmd_module (grub_command_t cmd __attribute__ ((unused)),
   if (argc == 0)
     return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
 
-  if (!grub_multiboot_relocator)
+  if (!GRUB_MULTIBOOT (relocator))
     return grub_error (GRUB_ERR_BAD_ARGUMENT,
                       N_("you need to load the kernel first"));
 
@@ -389,7 +401,7 @@ grub_cmd_module (grub_command_t cmd __attribute__ ((unused)),
   if (size)
   {
     grub_relocator_chunk_t ch;
-    err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch,
+    err = grub_relocator_alloc_chunk_align (GRUB_MULTIBOOT (relocator), &ch,
                                            lowest_addr, (0xffffffff - size) + 1,
                                            size, MULTIBOOT_MOD_ALIGN,
                                            GRUB_RELOCATOR_PREFERENCE_NONE, 1);
@@ -407,7 +419,7 @@ grub_cmd_module (grub_command_t cmd __attribute__ ((unused)),
       target = 0;
     }
 
-  err = grub_multiboot_add_module (target, size, argc - 1, argv + 1);
+  err = GRUB_MULTIBOOT (add_module) (target, size, argc - 1, argv + 1);
   if (err)
     {
       grub_file_close (file);
index 5e649ed..67daf59 100644 (file)
@@ -104,13 +104,13 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld)
       if (load_size > mld->max_addr || mld->min_addr > mld->max_addr - load_size)
        return grub_error (GRUB_ERR_BAD_OS, "invalid min/max address and/or load size");
 
-      err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch,
+      err = grub_relocator_alloc_chunk_align (GRUB_MULTIBOOT (relocator), &ch,
                                              mld->min_addr, mld->max_addr - load_size,
                                              load_size, mld->align ? mld->align : 1,
                                              mld->preference, mld->avoid_efi_boot_services);
     }
   else
-    err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator, &ch,
+    err = grub_relocator_alloc_chunk_addr (GRUB_MULTIBOOT (relocator), &ch,
                                           mld->link_base_addr, load_size);
 
   if (err)
@@ -167,7 +167,7 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld)
     if (phdr(i)->p_vaddr <= ehdr->e_entry
        && phdr(i)->p_vaddr + phdr(i)->p_memsz > ehdr->e_entry)
       {
-       grub_multiboot_payload_eip = (ehdr->e_entry - phdr(i)->p_vaddr)
+       GRUB_MULTIBOOT (payload_eip) = (ehdr->e_entry - phdr(i)->p_vaddr)
          + phdr(i)->p_paddr;
 #ifdef MULTIBOOT_LOAD_ELF64
 # ifdef __mips
@@ -191,7 +191,7 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld)
 #if defined (__i386__) || defined (__x86_64__)
   
 #elif defined (__mips)
-  grub_multiboot_payload_eip |= 0x80000000;
+  GRUB_MULTIBOOT (payload_eip) |= 0x80000000;
 #else
 #error Please complete this
 #endif
@@ -238,7 +238,7 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld)
          if (sh->sh_size == 0)
            continue;
 
-         err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch, 0,
+         err = grub_relocator_alloc_chunk_align (GRUB_MULTIBOOT (relocator), &ch, 0,
                                                  (0xffffffff - sh->sh_size) + 1,
                                                  sh->sh_size, sh->sh_addralign,
                                                  GRUB_RELOCATOR_PREFERENCE_NONE,
@@ -264,8 +264,8 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld)
            }
          sh->sh_addr = target;
        }
-      grub_multiboot_add_elfsyms (ehdr->e_shnum, ehdr->e_shentsize,
-                                 ehdr->e_shstrndx, shdr);
+      GRUB_MULTIBOOT (add_elfsyms) (ehdr->e_shnum, ehdr->e_shentsize,
+                                   ehdr->e_shstrndx, shdr);
     }
 
 #undef phdr
index b0679a9..4df6595 100644 (file)
@@ -22,7 +22,7 @@
 #include <grub/machine/apm.h>
 #include <grub/machine/memory.h>
 #endif
-#include <grub/multiboot.h>
+#include <grub/multiboot2.h>
 #include <grub/cpu/multiboot.h>
 #include <grub/cpu/relocator.h>
 #include <grub/disk.h>
@@ -71,7 +71,7 @@ static int keep_bs = 0;
 static grub_uint32_t load_base_addr;
 
 void
-grub_multiboot_add_elfsyms (grub_size_t num, grub_size_t entsize,
+grub_multiboot2_add_elfsyms (grub_size_t num, grub_size_t entsize,
                            unsigned shndx, void *data)
 {
   elf_sec_num = num;
@@ -90,17 +90,17 @@ find_header (grub_properly_aligned_t *buffer, grub_ssize_t len)
        ((char *) header <= (char *) buffer + len - 12);
        header = (struct multiboot_header *) ((grub_uint32_t *) header + MULTIBOOT_HEADER_ALIGN / 4))
     {
-      if (header->magic == MULTIBOOT_HEADER_MAGIC
+      if (header->magic == MULTIBOOT2_HEADER_MAGIC
          && !(header->magic + header->architecture
               + header->header_length + header->checksum)
-         && header->architecture == MULTIBOOT_ARCHITECTURE_CURRENT)
+         && header->architecture == MULTIBOOT2_ARCHITECTURE_CURRENT)
        return header;
     }
   return NULL;
 }
 
 grub_err_t
-grub_multiboot_load (grub_file_t file, const char *filename)
+grub_multiboot2_load (grub_file_t file, const char *filename)
 {
   grub_ssize_t len;
   struct multiboot_header *header;
@@ -112,7 +112,7 @@ grub_multiboot_load (grub_file_t file, const char *filename)
   grub_addr_t entry = 0, efi_entry = 0;
   grub_uint32_t console_required = 0;
   struct multiboot_header_tag_framebuffer *fbtag = NULL;
-  int accepted_consoles = GRUB_MULTIBOOT_CONSOLE_EGA_TEXT;
+  int accepted_consoles = GRUB_MULTIBOOT2_CONSOLE_EGA_TEXT;
   mbi_load_data_t mld;
 
   mld.mbi_ver = 2;
@@ -210,7 +210,7 @@ grub_multiboot_load (grub_file_t file, const char *filename)
       case MULTIBOOT_HEADER_TAG_CONSOLE_FLAGS:
        if (!(((struct multiboot_header_tag_console_flags *) tag)->console_flags
            & MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED))
-         accepted_consoles &= ~GRUB_MULTIBOOT_CONSOLE_EGA_TEXT;
+         accepted_consoles &= ~GRUB_MULTIBOOT2_CONSOLE_EGA_TEXT;
        if (((struct multiboot_header_tag_console_flags *) tag)->console_flags
            & MULTIBOOT_CONSOLE_FLAGS_CONSOLE_REQUIRED)
          console_required = 1;
@@ -218,7 +218,7 @@ grub_multiboot_load (grub_file_t file, const char *filename)
 
       case MULTIBOOT_HEADER_TAG_FRAMEBUFFER:
        fbtag = (struct multiboot_header_tag_framebuffer *) tag;
-       accepted_consoles |= GRUB_MULTIBOOT_CONSOLE_FRAMEBUFFER;
+       accepted_consoles |= GRUB_MULTIBOOT2_CONSOLE_FRAMEBUFFER;
        break;
 
       case MULTIBOOT_HEADER_TAG_RELOCATABLE:
@@ -295,13 +295,13 @@ grub_multiboot_load (grub_file_t file, const char *filename)
              return grub_error (GRUB_ERR_BAD_OS, "invalid min/max address and/or load size");
            }
 
-         err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch,
+         err = grub_relocator_alloc_chunk_align (grub_multiboot2_relocator, &ch,
                                                  mld.min_addr, mld.max_addr - code_size,
                                                  code_size, mld.align ? mld.align : 1,
                                                  mld.preference, keep_bs);
        }
       else
-       err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator,
+       err = grub_relocator_alloc_chunk_addr (grub_multiboot2_relocator,
                                               &ch, load_addr, code_size);
       if (err)
        {
@@ -343,7 +343,7 @@ grub_multiboot_load (grub_file_t file, const char *filename)
       mld.file = file;
       mld.filename = filename;
       mld.avoid_efi_boot_services = keep_bs;
-      err = grub_multiboot_load_elf (&mld);
+      err = grub_multiboot2_load_elf (&mld);
       if (err)
        {
          grub_free (mld.buffer);
@@ -354,9 +354,9 @@ grub_multiboot_load (grub_file_t file, const char *filename)
   load_base_addr = mld.load_base_addr;
 
   if (keep_bs && efi_entry_specified)
-    grub_multiboot_payload_eip = efi_entry;
+    grub_multiboot2_payload_eip = efi_entry;
   else if (entry_specified)
-    grub_multiboot_payload_eip = entry;
+    grub_multiboot2_payload_eip = entry;
 
   if (mld.relocatable)
     {
@@ -370,20 +370,20 @@ grub_multiboot_load (grub_file_t file, const char *filename)
        * 64-bit int here.
        */
       if (mld.load_base_addr >= mld.link_base_addr)
-       grub_multiboot_payload_eip += mld.load_base_addr - mld.link_base_addr;
+       grub_multiboot2_payload_eip += mld.load_base_addr - mld.link_base_addr;
       else
-       grub_multiboot_payload_eip -= mld.link_base_addr - mld.load_base_addr;
+       grub_multiboot2_payload_eip -= mld.link_base_addr - mld.load_base_addr;
     }
 
   if (fbtag)
-    err = grub_multiboot_set_console (GRUB_MULTIBOOT_CONSOLE_FRAMEBUFFER,
-                                     accepted_consoles,
-                                     fbtag->width, fbtag->height,
-                                     fbtag->depth, console_required);
+    err = grub_multiboot2_set_console (GRUB_MULTIBOOT2_CONSOLE_FRAMEBUFFER,
+                                      accepted_consoles,
+                                      fbtag->width, fbtag->height,
+                                      fbtag->depth, console_required);
   else
-    err = grub_multiboot_set_console (GRUB_MULTIBOOT_CONSOLE_EGA_TEXT,
-                                     accepted_consoles,
-                                     0, 0, 0, console_required);
+    err = grub_multiboot2_set_console (GRUB_MULTIBOOT2_CONSOLE_EGA_TEXT,
+                                      accepted_consoles,
+                                      0, 0, 0, console_required);
   return err;
 }
 
@@ -459,7 +459,7 @@ net_size (void)
 }
 
 static grub_size_t
-grub_multiboot_get_mbi_size (void)
+grub_multiboot2_get_mbi_size (void)
 {
 #ifdef GRUB_MACHINE_EFI
   if (!keep_bs && !efi_mmap_size)
@@ -478,7 +478,7 @@ grub_multiboot_get_mbi_size (void)
     + ALIGN_UP (sizeof (struct multiboot_tag_elf_sections), MULTIBOOT_TAG_ALIGN)
     + ALIGN_UP (elf_sec_entsize * elf_sec_num, MULTIBOOT_TAG_ALIGN)
     + ALIGN_UP ((sizeof (struct multiboot_tag_mmap)
-                + grub_get_multiboot_mmap_count ()
+                + grub_multiboot2_get_mmap_count ()
                 * sizeof (struct multiboot_mmap_entry)), MULTIBOOT_TAG_ALIGN)
     + ALIGN_UP (sizeof (struct multiboot_tag_framebuffer), MULTIBOOT_TAG_ALIGN)
     + ALIGN_UP (sizeof (struct multiboot_tag_old_acpi)
@@ -522,7 +522,7 @@ grub_fill_multiboot_mmap (struct multiboot_tag_mmap *tag)
 
   tag->type = MULTIBOOT_TAG_TYPE_MMAP;
   tag->size = sizeof (struct multiboot_tag_mmap)
-    + sizeof (struct multiboot_mmap_entry) * grub_get_multiboot_mmap_count (); 
+    + sizeof (struct multiboot_mmap_entry) * grub_multiboot2_get_mmap_count (); 
   tag->entry_size = sizeof (struct multiboot_mmap_entry);
   tag->entry_version = 0;
 
@@ -588,7 +588,7 @@ retrieve_video_parameters (grub_properly_aligned_t **ptrorig)
   struct multiboot_tag_framebuffer *tag
     = (struct multiboot_tag_framebuffer *) *ptrorig;
 
-  err = grub_multiboot_set_video_mode ();
+  err = grub_multiboot2_set_video_mode ();
   if (err)
     {
       grub_print_error ();
@@ -731,7 +731,7 @@ retrieve_video_parameters (grub_properly_aligned_t **ptrorig)
 }
 
 grub_err_t
-grub_multiboot_make_mbi (grub_uint32_t *target)
+grub_multiboot2_make_mbi (grub_uint32_t *target)
 {
   grub_properly_aligned_t *ptrorig;
   grub_properly_aligned_t *mbistart;
@@ -739,11 +739,11 @@ grub_multiboot_make_mbi (grub_uint32_t *target)
   grub_size_t bufsize;
   grub_relocator_chunk_t ch;
 
-  bufsize = grub_multiboot_get_mbi_size ();
+  bufsize = grub_multiboot2_get_mbi_size ();
 
   COMPILE_TIME_ASSERT (MULTIBOOT_TAG_ALIGN % sizeof (grub_properly_aligned_t) == 0);
 
-  err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch,
+  err = grub_relocator_alloc_chunk_align (grub_multiboot2_relocator, &ch,
                                          0, 0xffffffff - bufsize,
                                          bufsize, MULTIBOOT_TAG_ALIGN,
                                          GRUB_RELOCATOR_PREFERENCE_NONE, 1);
@@ -1039,7 +1039,7 @@ grub_multiboot_make_mbi (grub_uint32_t *target)
 }
 
 void
-grub_multiboot_free_mbi (void)
+grub_multiboot2_free_mbi (void)
 {
   struct module *cur, *next;
 
@@ -1061,11 +1061,11 @@ grub_multiboot_free_mbi (void)
 }
 
 grub_err_t
-grub_multiboot_init_mbi (int argc, char *argv[])
+grub_multiboot2_init_mbi (int argc, char *argv[])
 {
   grub_ssize_t len = 0;
 
-  grub_multiboot_free_mbi ();
+  grub_multiboot2_free_mbi ();
 
   len = grub_loader_cmdline_size (argc, argv);
 
@@ -1081,7 +1081,7 @@ grub_multiboot_init_mbi (int argc, char *argv[])
 }
 
 grub_err_t
-grub_multiboot_add_module (grub_addr_t start, grub_size_t size,
+grub_multiboot2_add_module (grub_addr_t start, grub_size_t size,
                           int argc, char *argv[])
 {
   struct module *newmod;
@@ -1119,7 +1119,7 @@ grub_multiboot_add_module (grub_addr_t start, grub_size_t size,
 }
 
 void
-grub_multiboot_set_bootdev (void)
+grub_multiboot2_set_bootdev (void)
 {
   grub_device_t dev;
 
index 807a1de..9cd97df 100644 (file)
 #ifndef GRUB_MULTIBOOT_CPU_HEADER
 #define GRUB_MULTIBOOT_CPU_HEADER      1
 
+#define MULTIBOOT2_INITIAL_STATE  { .eax = MULTIBOOT2_BOOTLOADER_MAGIC,        \
+    .ecx = 0,                                                          \
+    .edx = 0,                                                          \
+    /* Set esp to some random location in low memory to avoid breaking */ \
+    /* non-compliant kernels.  */                                      \
+    .esp = 0x7ff00                                                     \
+      }
 #define MULTIBOOT_INITIAL_STATE  { .eax = MULTIBOOT_BOOTLOADER_MAGIC,  \
     .ecx = 0,                                                          \
     .edx = 0,                                                          \
@@ -28,7 +35,7 @@
       }
 #define MULTIBOOT_ENTRY_REGISTER eip
 #define MULTIBOOT_MBI_REGISTER ebx
-#define MULTIBOOT_ARCHITECTURE_CURRENT MULTIBOOT_ARCHITECTURE_I386
+#define MULTIBOOT2_ARCHITECTURE_CURRENT MULTIBOOT2_ARCHITECTURE_I386
 
 #ifdef GRUB_MACHINE_EFI
 #ifdef __x86_64__
index 4aebf29..c4eee2d 100644 (file)
 #ifndef GRUB_MULTIBOOT_CPU_HEADER
 #define GRUB_MULTIBOOT_CPU_HEADER      1
 
-#define MULTIBOOT_INITIAL_STATE  { .gpr[4] = MULTIBOOT_BOOTLOADER_MAGIC, \
+#define MULTIBOOT2_INITIAL_STATE  { .gpr[4] = MULTIBOOT2_BOOTLOADER_MAGIC, \
     .jumpreg = 1 }
 #define MULTIBOOT_ENTRY_REGISTER gpr[1]
 #define MULTIBOOT_MBI_REGISTER gpr[5]
-#define MULTIBOOT_ARCHITECTURE_CURRENT MULTIBOOT_ARCHITECTURE_MIPS32
+#define MULTIBOOT2_ARCHITECTURE_CURRENT MULTIBOOT_ARCHITECTURE_MIPS32
 
 #define MULTIBOOT_ELF32_MACHINE EM_MIPS
 #define MULTIBOOT_ELF64_MACHINE EM_MIPS
index c96492b..bd0a987 100644 (file)
 
 #include <grub/file.h>
 
-#ifdef GRUB_USE_MULTIBOOT2
-#include <multiboot2.h>
-/* Same thing as far as our loader is concerned.  */
-#define MULTIBOOT_BOOTLOADER_MAGIC     MULTIBOOT2_BOOTLOADER_MAGIC
-#define MULTIBOOT_HEADER_MAGIC         MULTIBOOT2_HEADER_MAGIC
-#else
 #include <multiboot.h>
-#endif
 
 #include <grub/types.h>
 #include <grub/err.h>
 
-#ifndef GRUB_USE_MULTIBOOT2
 typedef enum
   {
     GRUB_MULTIBOOT_QUIRKS_NONE = 0,
@@ -42,7 +34,6 @@ typedef enum
     GRUB_MULTIBOOT_QUIRK_MODULES_AFTER_KERNEL = 2
   } grub_multiboot_quirks_t;
 extern grub_multiboot_quirks_t grub_multiboot_quirks;
-#endif
 
 extern struct grub_relocator *grub_multiboot_relocator;
 
@@ -60,7 +51,7 @@ void
 grub_multiboot_add_elfsyms (grub_size_t num, grub_size_t entsize,
                            unsigned shndx, void *data);
 
-grub_uint32_t grub_get_multiboot_mmap_count (void);
+grub_uint32_t grub_multiboot_get_mmap_count (void);
 grub_err_t grub_multiboot_set_video_mode (void);
 
 /* FIXME: support coreboot as well.  */
index 5a3db5a..5693923 100644 (file)
@@ -75,8 +75,8 @@
 #define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64  9
 #define MULTIBOOT_HEADER_TAG_RELOCATABLE  10
 
-#define MULTIBOOT_ARCHITECTURE_I386  0
-#define MULTIBOOT_ARCHITECTURE_MIPS32  4
+#define MULTIBOOT2_ARCHITECTURE_I386  0
+#define MULTIBOOT2_ARCHITECTURE_MIPS32  4
 #define MULTIBOOT_HEADER_TAG_OPTIONAL 1
 
 #define MULTIBOOT_LOAD_PREFERENCE_NONE 0