From e0ea44cbfa6003c29a1dff785c3d629fda0324cd Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Thu, 28 Sep 2023 13:56:54 +0200 Subject: [PATCH] llext: fix symbol address calculation for ET_DYN Symbopl tables of ELF objects of type ET_REL contain offsets instead of addresses as for ET_DYN. Signed-off-by: Guennadi Liakhovetski --- subsys/llext/llext.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/subsys/llext/llext.c b/subsys/llext/llext.c index 84c38765d95..3d99c8af4fa 100644 --- a/subsys/llext/llext.c +++ b/subsys/llext/llext.c @@ -433,8 +433,10 @@ static int llext_copy_symbols(struct llext_loader *ldr, struct llext *ext) __ASSERT(j <= sym_tab->sym_cnt, "Miscalculated symbol number %u\n", j); sym_tab->syms[j].name = name; - sym_tab->syms[j].addr = (void *)((uintptr_t)ext->mem[mem] - + sym.st_value); + sym_tab->syms[j].addr = (void *)((uintptr_t)ext->mem[mem] + + sym.st_value - + (ldr->hdr.e_type == ET_REL ? 0 : + ldr->sects[sect_idx].sh_addr)); LOG_DBG("function symbol %d name %s addr %p", j, name, sym_tab->syms[j].addr); j++;