@@ -86,11 +86,31 @@ static int llext_manager_load_data_from_storage(const struct llext_loader *ldr,
8686 return ret ;
8787 }
8888
89+ /* DEBUG */
90+ size_t init_offset = 0 ;
91+ const elf_shdr_t * shdr ;
92+
93+ /* Need to copy sections within regions individually, offsets may differ */
94+ for (i = 0 , shdr = llext_section_headers (ext ); i < llext_section_count (ext ); i ++ , shdr ++ ) {
95+ if ((uintptr_t )shdr -> sh_addr < (uintptr_t )vma ||
96+ (uintptr_t )shdr -> sh_addr >= (uintptr_t )vma + size )
97+ continue ;
98+
99+ if (!init_offset )
100+ init_offset = shdr -> sh_offset ;
101+
102+ /* found a section within the region */
103+ size_t offset = shdr -> sh_offset - init_offset ;
104+
105+ tr_info (& lib_manager_tr , "old %u: %p -> %p, %u" , i ,
106+ (void * )shdr -> sh_addr ,
107+ (const uint8_t * )ext -> mem [region ] + offset , shdr -> sh_size );
108+ }
109+
89110 llext_get_region_info (ldr , ext , region , NULL , & region_addr , NULL );
90111
91112 /* Need to copy sections within regions individually, offsets may differ */
92113 for (i = 0 ; i < llext_section_count (ext ); i ++ ) {
93- const elf_shdr_t * shdr ;
94114 enum llext_mem s_region = LLEXT_MEM_COUNT ;
95115 size_t s_offset = 0 ;
96116
@@ -99,6 +119,10 @@ static int llext_manager_load_data_from_storage(const struct llext_loader *ldr,
99119 if (s_region != region )
100120 continue ;
101121
122+ tr_info (& lib_manager_tr , "%u: %p -> %p, %u" , i ,
123+ (void * )shdr -> sh_addr ,
124+ (const uint8_t * )region_addr + s_offset , shdr -> sh_size );
125+
102126 ret = memcpy_s ((__sparse_force void * )shdr -> sh_addr , size - s_offset ,
103127 (const uint8_t * )region_addr + s_offset , shdr -> sh_size );
104128 if (ret < 0 )
@@ -260,29 +284,29 @@ static int llext_manager_link(struct llext_buf_loader *ebl, const char *name,
260284 mctx -> segment [LIB_MANAGER_TEXT ].addr = hdr -> sh_addr ;
261285 mctx -> segment [LIB_MANAGER_TEXT ].size = hdr -> sh_size ;
262286
263- tr_dbg (& lib_manager_tr , ".text: start: %#lx size %#x" ,
264- mctx -> segment [LIB_MANAGER_TEXT ].addr ,
265- mctx -> segment [LIB_MANAGER_TEXT ].size );
287+ tr_info (& lib_manager_tr , ".text: start: %#lx size %#x" ,
288+ mctx -> segment [LIB_MANAGER_TEXT ].addr ,
289+ mctx -> segment [LIB_MANAGER_TEXT ].size );
266290
267291 /* All read-only data sections */
268292 llext_get_region_info (& ebl -> loader , * llext , LLEXT_MEM_RODATA ,
269293 & hdr , NULL , NULL );
270294 mctx -> segment [LIB_MANAGER_RODATA ].addr = hdr -> sh_addr ;
271295 mctx -> segment [LIB_MANAGER_RODATA ].size = hdr -> sh_size ;
272296
273- tr_dbg (& lib_manager_tr , ".rodata: start: %#lx size %#x" ,
274- mctx -> segment [LIB_MANAGER_RODATA ].addr ,
275- mctx -> segment [LIB_MANAGER_RODATA ].size );
297+ tr_info (& lib_manager_tr , ".rodata: start: %#lx size %#x" ,
298+ mctx -> segment [LIB_MANAGER_RODATA ].addr ,
299+ mctx -> segment [LIB_MANAGER_RODATA ].size );
276300
277301 /* All writable data sections */
278302 llext_get_region_info (& ebl -> loader , * llext , LLEXT_MEM_DATA ,
279303 & hdr , NULL , NULL );
280304 mctx -> segment [LIB_MANAGER_DATA ].addr = hdr -> sh_addr ;
281305 mctx -> segment [LIB_MANAGER_DATA ].size = hdr -> sh_size ;
282306
283- tr_dbg (& lib_manager_tr , ".data: start: %#lx size %#x" ,
284- mctx -> segment [LIB_MANAGER_DATA ].addr ,
285- mctx -> segment [LIB_MANAGER_DATA ].size );
307+ tr_info (& lib_manager_tr , ".data: start: %#lx size %#x" ,
308+ mctx -> segment [LIB_MANAGER_DATA ].addr ,
309+ mctx -> segment [LIB_MANAGER_DATA ].size );
286310
287311 * buildinfo = NULL ;
288312 ret = llext_section_shndx (& ebl -> loader , * llext , ".mod_buildinfo" );
0 commit comments