TCF Agent: Fixed computation of run-time addresses of symbols from a separate debug info file
Some versions of Linux require p-header address from debug file, the rest of p-header info - from executable file
diff --git a/agent/tcf/services/tcf_elf.c b/agent/tcf/services/tcf_elf.c
index 90292cc..e6a859f 100644
--- a/agent/tcf/services/tcf_elf.c
+++ b/agent/tcf/services/tcf_elf.c
@@ -1824,11 +1824,14 @@
}
for (i = 0; i < mem_file->pheader_cnt; i++) {
ELF_PHeader * p = mem_file->pheaders + i;
- if (!is_p_header_region(mem_file, p, r)) continue;
- if (addr < p->address || addr >= p->address + p->mem_size) continue;
- rt = (ContextAddress)(addr - p->address + p->offset - r->file_offs + r->addr);
- if (rt < r->addr || rt > r->addr + r->size - 1) continue;
- return rt;
+ if (p->type == PT_LOAD) {
+ U8_T p_addr = i < file->pheader_cnt ? file->pheaders[i].address : p->address;
+ if (addr < p_addr || addr >= p_addr + p->mem_size) continue;
+ if (!is_p_header_region(mem_file, p, r)) continue;
+ rt = (ContextAddress)(addr - p_addr + p->offset - r->file_offs + r->addr);
+ if (rt < r->addr || rt > r->addr + r->size - 1) continue;
+ return rt;
+ }
}
}
else if (sec != NULL) {