string_size += sizeof (".xen");
footer_size += XEN_NOTE_SIZE;
}
- if (image_target->id == IMAGE_COREBOOT && image_target->elf_target == EM_ARM)
+ if (image_target->id == IMAGE_COREBOOT && image_target->elf_target == EM_ARM
+ && image_target->link_addr == 0)
{
phnum++;
shnum++;
phdr->p_align = grub_host_to_target32 (image_target->link_align);
}
- if (image_target->id == IMAGE_COREBOOT && image_target->elf_target == EM_ARM)
+ if (image_target->id == IMAGE_COREBOOT && image_target->elf_target == EM_ARM
+ && image_target->link_addr == 0)
{
char *note_start = (elf_img + program_size + header_size);
Elf_Nhdr *note_ptr;
shdr->sh_entsize = grub_host_to_target32 (0);
shdr++;
}
- if (image_target->id == IMAGE_COREBOOT && image_target->elf_target == EM_ARM)
+ if (image_target->id == IMAGE_COREBOOT && image_target->elf_target == EM_ARM
+ && image_target->link_addr == 0)
{
memcpy (ptr, ".coreboot_flags", sizeof (".coreboot_flags"));
shdr->sh_name = grub_host_to_target32 (ptr - str_start);
.mod_gap = GRUB_KERNEL_ARM_COREBOOT_MOD_GAP,
.mod_align = GRUB_KERNEL_ARM_COREBOOT_MOD_ALIGN,
.link_align = 4,
- /* FIXME: Kept only for comaptibility with existing coreboot installs. */
+ },
+ /* For coreboot versions that don't support self-relocating images. */
+ {
+ .dirname = "arm-coreboot-veyron",
+ .names = { "arm-coreboot-veyron", 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,
.link_addr = 0x43000000,
},
{