Skip to content

Commit 4987f62

Browse files
committed
llext_manager: [TMP] add debugging code
Add debugging code for comparing memory copy operations between previous and current situations. Signed-off-by: Luca Burelli <l.burelli@arduino.cc>
1 parent ce254e3 commit 4987f62

File tree

1 file changed

+34
-10
lines changed

1 file changed

+34
-10
lines changed

src/library_manager/llext_manager.c

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)