From 0ab05376b80005c7ddf19eab3948e4f28898fec4 Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Tue, 11 Feb 2025 17:39:42 +0100 Subject: [PATCH] llext_manager: [TMP] add debugging code Add debugging code for comparing memory copy operations between previous and current situations. Signed-off-by: Luca Burelli --- src/library_manager/llext_manager.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/library_manager/llext_manager.c b/src/library_manager/llext_manager.c index 46bbd672479e..70d27c51c177 100644 --- a/src/library_manager/llext_manager.c +++ b/src/library_manager/llext_manager.c @@ -87,11 +87,31 @@ static int llext_manager_load_data_from_storage(const struct llext_loader *ldr, return ret; } + /* DEBUG */ + size_t init_offset = 0; + const elf_shdr_t *shdr; + + /* Need to copy sections within regions individually, offsets may differ */ + for (i = 0, shdr = llext_section_headers(ext); i < llext_section_count(ext); i++, shdr++) { + if ((uintptr_t)shdr->sh_addr < (uintptr_t)vma || + (uintptr_t)shdr->sh_addr >= (uintptr_t)vma + size) + continue; + + if (!init_offset) + init_offset = shdr->sh_offset; + + /* found a section within the region */ + size_t offset = shdr->sh_offset - init_offset; + + tr_info(&lib_manager_tr, "old %u: %p -> %p, %u", i, + (void *)shdr->sh_addr, + (const uint8_t *)ext->mem[region] + offset, shdr->sh_size); + } + llext_get_region_info(ldr, ext, region, NULL, ®ion_addr, ®ion_size); /* Need to copy sections within regions individually, offsets may differ */ for (i = 0; i < llext_section_count(ext); i++) { - const elf_shdr_t *shdr; enum llext_mem s_region = LLEXT_MEM_COUNT; size_t s_offset = 0; @@ -100,6 +120,10 @@ static int llext_manager_load_data_from_storage(const struct llext_loader *ldr, if (s_region != region) continue; + tr_info(&lib_manager_tr, "%u: %p -> %p, %u", i, + (void *)shdr->sh_addr, + (const uint8_t *)region_addr + s_offset, shdr->sh_size); + ret = memcpy_s((__sparse_force void *)shdr->sh_addr, size - s_offset, (const uint8_t *)region_addr + s_offset, shdr->sh_size); if (ret < 0)