]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
WIP2
authorVladimir Serbinenko <phcoder@gmail.com>
Fri, 19 Feb 2016 15:47:36 +0000 (16:47 +0100)
committerVladimir Serbinenko <phcoder@gmail.com>
Fri, 19 Feb 2016 15:47:36 +0000 (16:47 +0100)
util/grub-mkimagexx.c
util/mkimage.c

index 6d12eb54731d628b698094194646f949886f6eaf..7f3ba3800ce44eb6f28aa3324b44e05fdc803bd8 100644 (file)
@@ -89,7 +89,8 @@ struct fixup_block_list
 static int
 is_relocatable (const struct grub_install_image_target_desc *image_target)
 {
-  return image_target->id == IMAGE_EFI || image_target->id == IMAGE_UBOOT;
+  return image_target->id == IMAGE_EFI || image_target->id == IMAGE_UBOOT
+    || (image_target->id == IMAGE_COREBOOT && image_target->elf_target == EM_ARM);
 }
 
 #ifdef MKIMAGE_ELF32
@@ -291,7 +292,7 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
       phdr->p_filesz = phdr->p_memsz
        = grub_host_to_target32 (*core_size - kernel_size);
 
-      if (image_target->id == IMAGE_COREBOOT)
+      if (image_target->id == IMAGE_COREBOOT && image_target->elf_target == EM_386)
        target_addr_mods = GRUB_KERNEL_I386_COREBOOT_MODULES_ADDR;
       else
        target_addr_mods = ALIGN_UP (target_addr + kernel_size + bss_size
@@ -1796,7 +1797,7 @@ SUFFIX (locate_sections) (Elf_Ehdr *e, const char *kernel_path,
      Platforms other than EFI and U-boot shouldn't have .bss in
      their binaries as we build with -Wl,-Ttext.
   */
-  if (image_target->id != IMAGE_UBOOT)
+  if (image_target->id == IMAGE_EFI || !is_relocatable (image_target))
     layout->kernel_size = layout->end;
 
   return section_addresses;
@@ -1899,6 +1900,7 @@ SUFFIX (grub_mkimage_load_image) (const char *kernel_path,
   if (image_target->id == IMAGE_SPARC64_AOUT
       || image_target->id == IMAGE_SPARC64_RAW
       || image_target->id == IMAGE_UBOOT
+      || image_target->id == IMAGE_COREBOOT
       || image_target->id == IMAGE_SPARC64_CDCORE)
     layout->kernel_size = ALIGN_UP (layout->kernel_size, image_target->mod_align);
 
@@ -1995,7 +1997,8 @@ SUFFIX (grub_mkimage_load_image) (const char *kernel_path,
           Platforms other than EFI and U-boot shouldn't have .bss in
           their binaries as we build with -Wl,-Ttext.
        */
-       || (SUFFIX (is_bss_section) (s, image_target) && (image_target->id != IMAGE_UBOOT))
+       || (SUFFIX (is_bss_section) (s, image_target)
+           && ((image_target->id == IMAGE_EFI) || !is_relocatable (image_target)))
        || SUFFIX (is_text_section) (s, image_target))
       {
        if (grub_target_to_host32 (s->sh_type) == SHT_NOBITS)
index 06d28e7fe26e38e26ee201ae7b1d80d73ac7687b..134347ab1d34e17c70fb8bc52b3cbf85010c620a 100644 (file)
@@ -531,6 +531,26 @@ static const struct grub_install_image_target_desc image_targets[] =
       .mod_align = GRUB_KERNEL_ARM_UBOOT_MOD_ALIGN,
       .link_align = 4
     },
+    {
+      .dirname = "arm-coreboot",
+      .names = { "arm-coreboot", NULL },
+      .voidp_sizeof = 4,
+      .bigendian = 0,
+      .id = IMAGE_COREBOOT,
+      .flags = PLATFORM_FLAGS_NONE,
+      .total_module_size = GRUB_KERNEL_ARM_COREBOOT_TOTAL_MODULE_SIZE,
+      .decompressor_compressed_size = TARGET_NO_FIELD,
+      .decompressor_uncompressed_size = TARGET_NO_FIELD,
+      .decompressor_uncompressed_addr = TARGET_NO_FIELD,
+      .section_align = GRUB_KERNEL_ARM_COREBOOT_MOD_ALIGN,
+      .vaddr_offset = 0,
+      .elf_target = EM_ARM,
+      .mod_gap = GRUB_KERNEL_ARM_COREBOOT_MOD_GAP,
+      .mod_align = GRUB_KERNEL_ARM_COREBOOT_MOD_ALIGN,
+      .link_align = 4,
+      /* FIXME: Remove once coreboot supports load to any address. */
+      .link_addr = 0x60100000,
+    },
     {
       .dirname = "arm-efi",
       .names = { "arm-efi", NULL },
@@ -1031,7 +1051,7 @@ grub_install_generate_image (const char *dir, const char *prefix,
        /* fallthrough */
     case IMAGE_COREBOOT:
     case IMAGE_QEMU:
-       if (layout.kernel_size + layout.bss_size + GRUB_KERNEL_I386_PC_LINK_ADDR > 0x68000)
+        if (image_target->elf_target != EM_ARM && layout.kernel_size + layout.bss_size + GRUB_KERNEL_I386_PC_LINK_ADDR > 0x68000)
          grub_util_error (_("kernel image is too big (0x%x > 0x%x)"),
                           (unsigned) layout.kernel_size + (unsigned) layout.bss_size
                           + GRUB_KERNEL_I386_PC_LINK_ADDR,