Skip to content

Commit

Permalink
[TMP] add debugging code
Browse files Browse the repository at this point in the history
Add debugging code for comparing memory copy operations between previous
and current situations.

Signed-off-by: Luca Burelli <[email protected]>
  • Loading branch information
pillo79 committed Feb 20, 2025
1 parent 76a4efc commit c3108a6
Showing 1 changed file with 39 additions and 10 deletions.
49 changes: 39 additions & 10 deletions src/library_manager/llext_manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -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, "[%i OLD]: %u, %p <- %p, %u", region, i,
(void *)shdr->sh_addr,
(void *)((uint8_t *)ext->mem[region] + offset), shdr->sh_size);
}

llext_get_region_info(ldr, ext, region, NULL, &region_addr, NULL);

/* 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;

Expand All @@ -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, "[%i NEW]: %u, %p <- %p, %u", region, i,
(void *)shdr->sh_addr,
(void *)((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)
Expand Down Expand Up @@ -248,6 +272,8 @@ static int llext_manager_link(const char *name,
const elf_shdr_t *hdr;
int ret;

tr_info(&lib_manager_tr, "%s: reloc %i mapped %i", name, !*llext, mctx->mapped);

if (*llext && !mctx->mapped) {
/*
* All module instances have been terminated, so we freed SRAM,
Expand Down Expand Up @@ -282,27 +308,27 @@ static int llext_manager_link(const char *name,
mctx->segment[LIB_MANAGER_TEXT].addr = hdr->sh_addr;
mctx->segment[LIB_MANAGER_TEXT].size = hdr->sh_size;

tr_dbg(&lib_manager_tr, ".text: start: %#lx size %#x",
mctx->segment[LIB_MANAGER_TEXT].addr,
mctx->segment[LIB_MANAGER_TEXT].size);
tr_info(&lib_manager_tr, ".text: start: %#lx size %#x",
mctx->segment[LIB_MANAGER_TEXT].addr,
mctx->segment[LIB_MANAGER_TEXT].size);

/* All read-only data sections */
llext_get_region_info(ldr, *llext, LLEXT_MEM_RODATA, &hdr, NULL, NULL);
mctx->segment[LIB_MANAGER_RODATA].addr = hdr->sh_addr;
mctx->segment[LIB_MANAGER_RODATA].size = hdr->sh_size;

tr_dbg(&lib_manager_tr, ".rodata: start: %#lx size %#x",
mctx->segment[LIB_MANAGER_RODATA].addr,
mctx->segment[LIB_MANAGER_RODATA].size);
tr_info(&lib_manager_tr, ".rodata: start: %#lx size %#x",
mctx->segment[LIB_MANAGER_RODATA].addr,
mctx->segment[LIB_MANAGER_RODATA].size);

/* All writable data sections */
llext_get_region_info(ldr, *llext, LLEXT_MEM_DATA, &hdr, NULL, NULL);
mctx->segment[LIB_MANAGER_DATA].addr = hdr->sh_addr;
mctx->segment[LIB_MANAGER_DATA].size = hdr->sh_size;

tr_dbg(&lib_manager_tr, ".data: start: %#lx size %#x",
mctx->segment[LIB_MANAGER_DATA].addr,
mctx->segment[LIB_MANAGER_DATA].size);
tr_info(&lib_manager_tr, ".data: start: %#lx size %#x",
mctx->segment[LIB_MANAGER_DATA].addr,
mctx->segment[LIB_MANAGER_DATA].size);

/* Writable uninitialized data section */
llext_get_region_info(ldr, *llext, LLEXT_MEM_BSS, &hdr, NULL, NULL);
Expand Down Expand Up @@ -640,6 +666,9 @@ int llext_manager_free_module(const uint32_t component_id)
*/
int ret = llext_unload(&mctx->llext);

tr_info(&lib_manager_tr,
"mod_id: %#x: llext_unload(): %d",
component_id, ret);
if (ret <= 0) {
tr_err(&lib_manager_tr,
"mod_id: %#x: invalid return code from llext_unload(): %d",
Expand Down

0 comments on commit c3108a6

Please sign in to comment.