Partially link kernel.img and take advantage of the new PLATFORM_FLAGS_ABS_RELOC support to link the final kernel image for a particular address.
Signed-off-by: Ian Campbell <i...@hellion.org.uk> --- grub-core/Makefile.core.def | 2 +- include/grub/offsets.h | 2 +- util/mkimage.c | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index e5e558c..f14a2c4 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -95,7 +95,7 @@ kernel = { i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)'; emu_cflags = '$(CFLAGS_GNULIB)'; emu_cppflags = '$(CPPFLAGS_GNULIB)'; - arm_uboot_ldflags = '-Wl,-Ttext=0x08000000'; + arm_uboot_ldflags = '-Wl,-r,-d'; arm_uboot_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; i386_pc_startup = kern/i386/pc/startup.S; diff --git a/include/grub/offsets.h b/include/grub/offsets.h index 85e7401..bb14190 100644 --- a/include/grub/offsets.h +++ b/include/grub/offsets.h @@ -120,7 +120,7 @@ #define GRUB_KERNEL_ARM_UBOOT_MOD_ALIGN 0x8 #define GRUB_KERNEL_ARM_UBOOT_TOTAL_MODULE_SIZE 0x4 -#define GRUB_KERNEL_ARM_UBOOT_LINK_ADDR 0x08000000 +#define GRUB_KERNEL_ARM_UBOOT_DEFAULT_LINK_ADDR 0x08000000 /* Minimal gap between _end and the start of the modules. It's a hack for PowerMac to prevent "CLAIM failed" error. The real fix is to diff --git a/util/mkimage.c b/util/mkimage.c index 7b29acf..112092e 100644 --- a/util/mkimage.c +++ b/util/mkimage.c @@ -549,14 +549,14 @@ static const struct grub_install_image_target_desc image_targets[] = .voidp_sizeof = 4, .bigendian = 0, .id = IMAGE_UBOOT, - .flags = PLATFORM_FLAGS_NONE, + .flags = PLATFORM_FLAGS_ABS_RELOC, .total_module_size = GRUB_KERNEL_ARM_UBOOT_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_UBOOT_MOD_ALIGN, .vaddr_offset = 0, - .link_addr = GRUB_KERNEL_ARM_UBOOT_LINK_ADDR, + .link_addr = GRUB_KERNEL_ARM_UBOOT_DEFAULT_LINK_ADDR, .elf_target = EM_ARM, .mod_gap = GRUB_KERNEL_ARM_UBOOT_MOD_GAP, .mod_align = GRUB_KERNEL_ARM_UBOOT_MOD_ALIGN, @@ -1802,8 +1802,8 @@ grub_install_generate_image (const char *dir, const char *prefix, hdr->ih_magic = grub_cpu_to_be32_compile_time (GRUB_UBOOT_IH_MAGIC); hdr->ih_time = grub_cpu_to_be32 (time (0)); hdr->ih_size = grub_cpu_to_be32 (core_size); - hdr->ih_load = grub_cpu_to_be32 (image_target->link_addr); - hdr->ih_ep = grub_cpu_to_be32 (image_target->link_addr); + hdr->ih_load = grub_cpu_to_be32 (target_address); + hdr->ih_ep = grub_cpu_to_be32 (start_address); hdr->ih_type = GRUB_UBOOT_IH_TYPE_KERNEL; hdr->ih_os = GRUB_UBOOT_IH_OS_LINUX; hdr->ih_arch = GRUB_UBOOT_IH_ARCH_ARM; -- 1.8.4.rc3 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel