@@ -76,9 +76,10 @@ static int llext_manager_load_data_from_storage(const struct llext *ext,
76
76
size_t size , uint32_t flags )
77
77
{
78
78
unsigned int i ;
79
- int ret = llext_manager_align_map ( vma , size , SYS_MM_MEM_PERM_RW ) ;
79
+ int ret ;
80
80
const elf_shdr_t * shdr ;
81
81
82
+ ret = llext_manager_align_map (vma , size , SYS_MM_MEM_PERM_RW );
82
83
if (ret < 0 ) {
83
84
tr_err (& lib_manager_tr , "cannot map %u of %p" , size , (__sparse_force void * )vma );
84
85
return ret ;
@@ -238,7 +239,7 @@ static bool llext_manager_section_detached(const elf_shdr_t *shdr)
238
239
return shdr -> sh_addr < SOF_MODULE_DRAM_LINK_END ;
239
240
}
240
241
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 ,
242
243
struct lib_manager_module * mctx , const void * * buildinfo ,
243
244
const struct sof_man_module_manifest * * mod_manifest )
244
245
{
@@ -268,54 +269,56 @@ static int llext_manager_link(struct llext_buf_loader *ebl, const char *name,
268
269
.section_detached = llext_manager_section_detached ,
269
270
};
270
271
271
- ret = llext_load (& ebl -> loader , name , llext , & ldr_parm );
272
+ ret = llext_load (ldr , name , llext , & ldr_parm );
272
273
if (ret )
273
274
return ret ;
274
275
}
275
276
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 ;
278
279
279
280
tr_dbg (& lib_manager_tr , ".text: start: %#lx size %#x" ,
280
281
mctx -> segment [LIB_MANAGER_TEXT ].addr ,
281
282
mctx -> segment [LIB_MANAGER_TEXT ].size );
282
283
283
284
/* All read-only data sections */
284
285
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 ;
287
288
288
289
tr_dbg (& lib_manager_tr , ".rodata: start: %#lx size %#x" ,
289
290
mctx -> segment [LIB_MANAGER_RODATA ].addr ,
290
291
mctx -> segment [LIB_MANAGER_RODATA ].size );
291
292
292
293
/* All writable data sections */
293
294
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 ;
296
297
297
298
tr_dbg (& lib_manager_tr , ".data: start: %#lx size %#x" ,
298
299
mctx -> segment [LIB_MANAGER_DATA ].addr ,
299
300
mctx -> segment [LIB_MANAGER_DATA ].size );
300
301
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 ;
303
304
304
305
tr_dbg (& lib_manager_tr , ".bss: start: %#lx size %#x" ,
305
306
mctx -> segment [LIB_MANAGER_BSS ].addr ,
306
307
mctx -> segment [LIB_MANAGER_BSS ].size );
307
308
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" );
309
311
310
312
if (binfo_o >= 0 )
311
- * buildinfo = llext_peek (& ebl -> loader , binfo_o );
313
+ * buildinfo = llext_peek (ldr , binfo_o );
312
314
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" );
314
317
315
318
if (mod_o >= 0 )
316
- * mod_manifest = llext_peek (& ebl -> loader , mod_o );
319
+ * mod_manifest = llext_peek (ldr , mod_o );
317
320
318
- return binfo_o >= 0 && mod_o >= 0 ? 0 : - EPROTO ;
321
+ return * buildinfo && * mod_manifest ? 0 : - EPROTO ;
319
322
}
320
323
321
324
/* 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
436
439
* dependencies, sets up sections and retrieves buildinfo and
437
440
* mod_manifest
438
441
*/
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 ,
440
443
buildinfo , mod_manifest );
441
444
if (ret < 0 ) {
442
445
tr_err (& lib_manager_tr , "linking failed: %d" , ret );
0 commit comments