This commit is contained in:
Vladimir Serbinenko committed 2016-02-19 16:47:36 +01:00
1 parent 2c3a054f4f
commit ba6d40e8bb
2 files changed
+28 -5

No files matched your search

+7 -4
View File
@@ -89,7 +89,8 @@ struct fixup_block_list
static int static int
is_relocatable (const struct grub_install_image_target_desc *image_target) 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 #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 phdr->p_filesz = phdr->p_memsz
= grub_host_to_target32 (*core_size - kernel_size); = 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; target_addr_mods = GRUB_KERNEL_I386_COREBOOT_MODULES_ADDR;
else else
target_addr_mods = ALIGN_UP (target_addr + kernel_size + bss_size 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 Platforms other than EFI and U-boot shouldn't have .bss in
their binaries as we build with -Wl,-Ttext. 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; layout->kernel_size = layout->end;
return section_addresses; return section_addresses;
@@ -1899,6 +1900,7 @@ SUFFIX (grub_mkimage_load_image) (const char *kernel_path,
if (image_target->id == IMAGE_SPARC64_AOUT if (image_target->id == IMAGE_SPARC64_AOUT
|| image_target->id == IMAGE_SPARC64_RAW || image_target->id == IMAGE_SPARC64_RAW
|| image_target->id == IMAGE_UBOOT || image_target->id == IMAGE_UBOOT
|| image_target->id == IMAGE_COREBOOT
|| image_target->id == IMAGE_SPARC64_CDCORE) || image_target->id == IMAGE_SPARC64_CDCORE)
layout->kernel_size = ALIGN_UP (layout->kernel_size, image_target->mod_align); 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 Platforms other than EFI and U-boot shouldn't have .bss in
their binaries as we build with -Wl,-Ttext. 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)) || SUFFIX (is_text_section) (s, image_target))
{ {
if (grub_target_to_host32 (s->sh_type) == SHT_NOBITS) if (grub_target_to_host32 (s->sh_type) == SHT_NOBITS)
+21 -1
View File
@@ -531,6 +531,26 @@ static const struct grub_install_image_target_desc image_targets[] =
.mod_align = GRUB_KERNEL_ARM_UBOOT_MOD_ALIGN, .mod_align = GRUB_KERNEL_ARM_UBOOT_MOD_ALIGN,
.link_align = 4 .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", .dirname = "arm-efi",
.names = { "arm-efi", NULL }, .names = { "arm-efi", NULL },
@@ -1031,7 +1051,7 @@ grub_install_generate_image (const char *dir, const char *prefix,
/* fallthrough */ /* fallthrough */
case IMAGE_COREBOOT: case IMAGE_COREBOOT:
case IMAGE_QEMU: 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)"), grub_util_error (_("kernel image is too big (0x%x > 0x%x)"),
(unsigned) layout.kernel_size + (unsigned) layout.bss_size (unsigned) layout.kernel_size + (unsigned) layout.bss_size
+ GRUB_KERNEL_I386_PC_LINK_ADDR, + GRUB_KERNEL_I386_PC_LINK_ADDR,