diff --git a/cmake/compiler/xt-clang/target.cmake b/cmake/compiler/xt-clang/target.cmake index 32def2e5b8fe6..978bc7c7860f4 100644 --- a/cmake/compiler/xt-clang/target.cmake +++ b/cmake/compiler/xt-clang/target.cmake @@ -29,5 +29,6 @@ set(LLEXT_APPEND_FLAGS ${LLEXT_APPEND_FLAGS} else() set(LLEXT_APPEND_FLAGS ${LLEXT_APPEND_FLAGS} -ffreestanding + -mno-generate-flix ) endif() diff --git a/subsys/llext/llext_link.c b/subsys/llext/llext_link.c index 6d5e2ff23bc75..7dacb112a006a 100644 --- a/subsys/llext/llext_link.c +++ b/subsys/llext/llext_link.c @@ -259,10 +259,7 @@ static void llext_link_plt(struct llext_loader *ldr, struct llext *ext, elf_shdr arch_elf_relocate_global(ldr, ext, &rela, &sym, got_offset, link_addr); break; case STB_LOCAL: - if (ldr_parm->relocate_local) { - arch_elf_relocate_local(ldr, ext, &rela, &sym, got_offset, - ldr_parm); - } + arch_elf_relocate_local(ldr, ext, &rela, &sym, got_offset, ldr_parm); } LOG_DBG("symbol %s offset %#zx r-offset %#zx .text offset %#zx stb %u", diff --git a/subsys/llext/llext_load.c b/subsys/llext/llext_load.c index bd73312c085e2..06f4b9a2f97c4 100644 --- a/subsys/llext/llext_load.c +++ b/subsys/llext/llext_load.c @@ -712,11 +712,13 @@ int do_llext_load(struct llext_loader *ldr, struct llext *ext, goto out; } - LOG_DBG("Linking ELF..."); - ret = llext_link(ldr, ext, ldr_parm); - if (ret != 0) { - LOG_ERR("Failed to link, ret %d", ret); - goto out; + if (ldr_parm->relocate_local) { + LOG_DBG("Linking ELF..."); + ret = llext_link(ldr, ext, ldr_parm); + if (ret != 0) { + LOG_ERR("Failed to link, ret %d", ret); + goto out; + } } ret = llext_export_symbols(ldr, ext);