diff --git a/arch/efi/efi/efi.c b/arch/efi/efi/efi.c index ed449dc..9c270a5 100644 --- a/arch/efi/efi/efi.c +++ b/arch/efi/efi/efi.c @@ -293,46 +293,6 @@ extern initcall_t __barebox_initcalls_start[], __barebox_early_initcalls_end[], __barebox_initcalls_end[]; -/* - * We have a position independent binary generated with -fpic. This function - * fixes the linker generated tables. - */ -static void fixup_tables(void) -{ - initcall_t *initcall; - unsigned long offset = (unsigned long)image_base; - struct command *cmdtp; - struct magicvar *m; - - for (initcall = __barebox_initcalls_start; - initcall < __barebox_initcalls_end; initcall++) - *initcall += offset; - - for (cmdtp = &__barebox_cmd_start; - cmdtp != &__barebox_cmd_end; - cmdtp++) { - cmdtp->name += offset; - cmdtp->cmd += offset; - if (cmdtp->complete) - cmdtp->complete += offset; - if (cmdtp->desc) - cmdtp->desc += offset; - if (cmdtp->help) - cmdtp->help += offset; - if (cmdtp->opts) - cmdtp->opts += offset; - if (cmdtp->aliases) - cmdtp->aliases = (void *)cmdtp->aliases + offset; - } - - for (m = &__barebox_magicvar_start; - m != &__barebox_magicvar_end; - m++) { - m->name += offset; - m->description += offset; - } -} - static int efi_init(void) { char *env; @@ -373,8 +333,6 @@ BS->handle_protocol(efi_loaded_image->device_handle, &efi_device_path_protocol_guid, (void **)&efi_device_path); - fixup_tables(); - mem = 0x3fffffff; for (memsize = SZ_256M; memsize >= SZ_8M; memsize /= 2) { efiret = BS->allocate_pages(EFI_ALLOCATE_MAX_ADDRESS, diff --git a/arch/efi/lib/elf_x86_64_efi.lds.S b/arch/efi/lib/elf_x86_64_efi.lds.S index 9aa4e8d..e1bc212 100644 --- a/arch/efi/lib/elf_x86_64_efi.lds.S +++ b/arch/efi/lib/elf_x86_64_efi.lds.S @@ -78,6 +78,8 @@ .rela : { *(.rela.data*) + *(.rela.barebox*) + *(.rela.initcall*) *(.rela.got) *(.rela.stab) }