@@ -238,7 +238,7 @@ static bool llext_manager_section_detached(const elf_shdr_t *shdr)
238238 return shdr -> sh_addr < SOF_MODULE_DRAM_LINK_END ;
239239}
240240
241- static int llext_manager_link (struct llext_buf_loader * ebl , const char * name ,
241+ static int llext_manager_link (struct llext_loader * ldr , const char * name ,
242242 struct lib_manager_module * mctx , const void * * buildinfo ,
243243 const struct sof_man_module_manifest * * mod_manifest )
244244{
@@ -268,54 +268,56 @@ static int llext_manager_link(struct llext_buf_loader *ebl, const char *name,
268268 .section_detached = llext_manager_section_detached ,
269269 };
270270
271- ret = llext_load (& ebl -> loader , name , llext , & ldr_parm );
271+ ret = llext_load (ldr , name , llext , & ldr_parm );
272272 if (ret )
273273 return ret ;
274274 }
275275
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 ;
276+ mctx -> segment [LIB_MANAGER_TEXT ].addr = ldr -> sects [LLEXT_MEM_TEXT ].sh_addr ;
277+ mctx -> segment [LIB_MANAGER_TEXT ].size = ldr -> sects [LLEXT_MEM_TEXT ].sh_size ;
278278
279279 tr_dbg (& lib_manager_tr , ".text: start: %#lx size %#x" ,
280280 mctx -> segment [LIB_MANAGER_TEXT ].addr ,
281281 mctx -> segment [LIB_MANAGER_TEXT ].size );
282282
283283 /* All read-only data sections */
284284 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 ;
285+ ldr -> sects [LLEXT_MEM_RODATA ].sh_addr ;
286+ mctx -> segment [LIB_MANAGER_RODATA ].size = ldr -> sects [LLEXT_MEM_RODATA ].sh_size ;
287287
288288 tr_dbg (& lib_manager_tr , ".rodata: start: %#lx size %#x" ,
289289 mctx -> segment [LIB_MANAGER_RODATA ].addr ,
290290 mctx -> segment [LIB_MANAGER_RODATA ].size );
291291
292292 /* All writable data sections */
293293 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 ;
294+ ldr -> sects [LLEXT_MEM_DATA ].sh_addr ;
295+ mctx -> segment [LIB_MANAGER_DATA ].size = ldr -> sects [LLEXT_MEM_DATA ].sh_size ;
296296
297297 tr_dbg (& lib_manager_tr , ".data: start: %#lx size %#x" ,
298298 mctx -> segment [LIB_MANAGER_DATA ].addr ,
299299 mctx -> segment [LIB_MANAGER_DATA ].size );
300300
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 ;
301+ mctx -> segment [LIB_MANAGER_BSS ].addr = ldr -> sects [LLEXT_MEM_BSS ].sh_addr ;
302+ mctx -> segment [LIB_MANAGER_BSS ].size = ldr -> sects [LLEXT_MEM_BSS ].sh_size ;
303303
304304 tr_dbg (& lib_manager_tr , ".bss: start: %#lx size %#x" ,
305305 mctx -> segment [LIB_MANAGER_BSS ].addr ,
306306 mctx -> segment [LIB_MANAGER_BSS ].size );
307307
308- ssize_t binfo_o = llext_find_section (& ebl -> loader , ".mod_buildinfo" );
308+ * buildinfo = NULL ;
309+ ssize_t binfo_o = llext_find_section (ldr , ".mod_buildinfo" );
309310
310311 if (binfo_o >= 0 )
311- * buildinfo = llext_peek (& ebl -> loader , binfo_o );
312+ * buildinfo = llext_peek (ldr , binfo_o );
312313
313- ssize_t mod_o = llext_find_section (& ebl -> loader , ".module" );
314+ * mod_manifest = NULL ;
315+ ssize_t mod_o = llext_find_section (ldr , ".module" );
314316
315317 if (mod_o >= 0 )
316- * mod_manifest = llext_peek (& ebl -> loader , mod_o );
318+ * mod_manifest = llext_peek (ldr , mod_o );
317319
318- return binfo_o >= 0 && mod_o >= 0 ? 0 : - EPROTO ;
320+ return * buildinfo && * mod_manifest ? 0 : - EPROTO ;
319321}
320322
321323/* Count "module files" in the library, allocate and initialize memory for their descriptors */
@@ -427,16 +429,16 @@ static int llext_manager_link_single(uint32_t module_id, const struct sof_man_fw
427429 mod_size = ALIGN_UP (mod_array [i ].segment [LIB_MANAGER_TEXT ].file_offset - mod_offset ,
428430 PAGE_SZ );
429431
430- uintptr_t dram_base = (uintptr_t )desc - SOF_MAN_ELF_TEXT_OFFSET ;
431- struct llext_buf_loader ebl = LLEXT_BUF_LOADER (( uint8_t * ) dram_base + mod_offset , mod_size );
432+ uint8_t * dram_base = (uint8_t * )desc - SOF_MAN_ELF_TEXT_OFFSET ;
433+ struct llext_buf_loader ebl = LLEXT_BUF_LOADER (dram_base + mod_offset , mod_size );
432434
433435 /*
434436 * LLEXT linking is only needed once for all the "drivers" in the
435437 * module. This calls llext_load(), which also takes references to any
436438 * dependencies, sets up sections and retrieves buildinfo and
437439 * mod_manifest
438440 */
439- ret = llext_manager_link (& ebl , mod_array [entry_index - inst_idx ].name , mctx ,
441+ ret = llext_manager_link (& ebl . loader , mod_array [entry_index - inst_idx ].name , mctx ,
440442 buildinfo , mod_manifest );
441443 if (ret < 0 ) {
442444 tr_err (& lib_manager_tr , "linking failed: %d" , ret );
0 commit comments