|
|
|
@ -587,6 +587,12 @@ static int llext_copy_symbols(struct llext_loader *ldr, struct llext *ext,
@@ -587,6 +587,12 @@ static int llext_copy_symbols(struct llext_loader *ldr, struct llext *ext,
|
|
|
|
|
|
|
|
|
|
elf_shdr_t *shdr = ldr->sect_hdrs + shndx; |
|
|
|
|
uintptr_t section_addr = shdr->sh_addr; |
|
|
|
|
|
|
|
|
|
if (ldr_parm->pre_located && |
|
|
|
|
(!ldr_parm->section_detached || !ldr_parm->section_detached(shdr))) { |
|
|
|
|
sym_tab->syms[j].addr = (uint8_t *)sym.st_value + |
|
|
|
|
(ldr->hdr.e_type == ET_REL ? section_addr : 0); |
|
|
|
|
} else { |
|
|
|
|
const void *base; |
|
|
|
|
|
|
|
|
|
base = llext_loaded_sect_ptr(ldr, ext, shndx); |
|
|
|
@ -604,11 +610,6 @@ static int llext_copy_symbols(struct llext_loader *ldr, struct llext *ext,
@@ -604,11 +610,6 @@ static int llext_copy_symbols(struct llext_loader *ldr, struct llext *ext,
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (ldr_parm->pre_located && |
|
|
|
|
(!ldr_parm->section_detached || !ldr_parm->section_detached(shdr))) { |
|
|
|
|
sym_tab->syms[j].addr = (uint8_t *)sym.st_value + |
|
|
|
|
(ldr->hdr.e_type == ET_REL ? section_addr : 0); |
|
|
|
|
} else { |
|
|
|
|
sym_tab->syms[j].addr = (uint8_t *)base + sym.st_value - |
|
|
|
|
(ldr->hdr.e_type == ET_REL ? 0 : section_addr); |
|
|
|
|
} |
|
|
|
|