Skip to content

Commit f9602f7

Browse files
committed
llext_manager: refactor: directly pass llext_loader
llext_manager_link() is only interested in the 'llext_loader' part of the 'llext_buf_loader' structure. This patch refactors the code to pass a pointer to the llext_loader directly, making the code more readable. In preparation for the new inspection API, this patch also changes the checks for the buildinfo and mod_manifest pointers to be more explicit. No functional change is intended. Signed-off-by: Luca Burelli <[email protected]>
1 parent 1d1b1dd commit f9602f7

File tree

1 file changed

+20
-17
lines changed

1 file changed

+20
-17
lines changed

src/library_manager/llext_manager.c

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,10 @@ static int llext_manager_load_data_from_storage(const struct llext *ext,
7676
size_t size, uint32_t flags)
7777
{
7878
unsigned int i;
79-
int ret = llext_manager_align_map(vma, size, SYS_MM_MEM_PERM_RW);
79+
int ret;
8080
const elf_shdr_t *shdr;
8181

82+
ret = llext_manager_align_map(vma, size, SYS_MM_MEM_PERM_RW);
8283
if (ret < 0) {
8384
tr_err(&lib_manager_tr, "cannot map %u of %p", size, (__sparse_force void *)vma);
8485
return ret;
@@ -238,7 +239,7 @@ static bool llext_manager_section_detached(const elf_shdr_t *shdr)
238239
return shdr->sh_addr < SOF_MODULE_DRAM_LINK_END;
239240
}
240241

241-
static int llext_manager_link(struct llext_buf_loader *ebl, const char *name,
242+
static int llext_manager_link(struct llext_loader *ldr, const char *name,
242243
struct lib_manager_module *mctx, const void **buildinfo,
243244
const struct sof_man_module_manifest **mod_manifest)
244245
{
@@ -268,54 +269,56 @@ static int llext_manager_link(struct llext_buf_loader *ebl, const char *name,
268269
.section_detached = llext_manager_section_detached,
269270
};
270271

271-
ret = llext_load(&ebl->loader, name, llext, &ldr_parm);
272+
ret = llext_load(ldr, name, llext, &ldr_parm);
272273
if (ret)
273274
return ret;
274275
}
275276

276-
mctx->segment[LIB_MANAGER_TEXT].addr = ebl->loader.sects[LLEXT_MEM_TEXT].sh_addr;
277-
mctx->segment[LIB_MANAGER_TEXT].size = ebl->loader.sects[LLEXT_MEM_TEXT].sh_size;
277+
mctx->segment[LIB_MANAGER_TEXT].addr = ldr->sects[LLEXT_MEM_TEXT].sh_addr;
278+
mctx->segment[LIB_MANAGER_TEXT].size = ldr->sects[LLEXT_MEM_TEXT].sh_size;
278279

279280
tr_dbg(&lib_manager_tr, ".text: start: %#lx size %#x",
280281
mctx->segment[LIB_MANAGER_TEXT].addr,
281282
mctx->segment[LIB_MANAGER_TEXT].size);
282283

283284
/* All read-only data sections */
284285
mctx->segment[LIB_MANAGER_RODATA].addr =
285-
ebl->loader.sects[LLEXT_MEM_RODATA].sh_addr;
286-
mctx->segment[LIB_MANAGER_RODATA].size = ebl->loader.sects[LLEXT_MEM_RODATA].sh_size;
286+
ldr->sects[LLEXT_MEM_RODATA].sh_addr;
287+
mctx->segment[LIB_MANAGER_RODATA].size = ldr->sects[LLEXT_MEM_RODATA].sh_size;
287288

288289
tr_dbg(&lib_manager_tr, ".rodata: start: %#lx size %#x",
289290
mctx->segment[LIB_MANAGER_RODATA].addr,
290291
mctx->segment[LIB_MANAGER_RODATA].size);
291292

292293
/* All writable data sections */
293294
mctx->segment[LIB_MANAGER_DATA].addr =
294-
ebl->loader.sects[LLEXT_MEM_DATA].sh_addr;
295-
mctx->segment[LIB_MANAGER_DATA].size = ebl->loader.sects[LLEXT_MEM_DATA].sh_size;
295+
ldr->sects[LLEXT_MEM_DATA].sh_addr;
296+
mctx->segment[LIB_MANAGER_DATA].size = ldr->sects[LLEXT_MEM_DATA].sh_size;
296297

297298
tr_dbg(&lib_manager_tr, ".data: start: %#lx size %#x",
298299
mctx->segment[LIB_MANAGER_DATA].addr,
299300
mctx->segment[LIB_MANAGER_DATA].size);
300301

301-
mctx->segment[LIB_MANAGER_BSS].addr = ebl->loader.sects[LLEXT_MEM_BSS].sh_addr;
302-
mctx->segment[LIB_MANAGER_BSS].size = ebl->loader.sects[LLEXT_MEM_BSS].sh_size;
302+
mctx->segment[LIB_MANAGER_BSS].addr = ldr->sects[LLEXT_MEM_BSS].sh_addr;
303+
mctx->segment[LIB_MANAGER_BSS].size = ldr->sects[LLEXT_MEM_BSS].sh_size;
303304

304305
tr_dbg(&lib_manager_tr, ".bss: start: %#lx size %#x",
305306
mctx->segment[LIB_MANAGER_BSS].addr,
306307
mctx->segment[LIB_MANAGER_BSS].size);
307308

308-
ssize_t binfo_o = llext_find_section(&ebl->loader, ".mod_buildinfo");
309+
*buildinfo = NULL;
310+
ssize_t binfo_o = llext_find_section(ldr, ".mod_buildinfo");
309311

310312
if (binfo_o >= 0)
311-
*buildinfo = llext_peek(&ebl->loader, binfo_o);
313+
*buildinfo = llext_peek(ldr, binfo_o);
312314

313-
ssize_t mod_o = llext_find_section(&ebl->loader, ".module");
315+
*mod_manifest = NULL;
316+
ssize_t mod_o = llext_find_section(ldr, ".module");
314317

315318
if (mod_o >= 0)
316-
*mod_manifest = llext_peek(&ebl->loader, mod_o);
319+
*mod_manifest = llext_peek(ldr, mod_o);
317320

318-
return binfo_o >= 0 && mod_o >= 0 ? 0 : -EPROTO;
321+
return *buildinfo && *mod_manifest ? 0 : -EPROTO;
319322
}
320323

321324
/* Count "module files" in the library, allocate and initialize memory for their descriptors */
@@ -436,7 +439,7 @@ static int llext_manager_link_single(uint32_t module_id, const struct sof_man_fw
436439
* dependencies, sets up sections and retrieves buildinfo and
437440
* mod_manifest
438441
*/
439-
ret = llext_manager_link(&ebl, mod_array[entry_index - inst_idx].name, mctx,
442+
ret = llext_manager_link(&ebl.loader, mod_array[entry_index - inst_idx].name, mctx,
440443
buildinfo, mod_manifest);
441444
if (ret < 0) {
442445
tr_err(&lib_manager_tr, "linking failed: %d", ret);

0 commit comments

Comments
 (0)