This commit is contained in:
Patrick Lipka 2025-08-18 17:01:41 +02:00
parent cad600fd59
commit a72ba8066c
1 changed files with 11 additions and 11 deletions

View File

@ -14,7 +14,7 @@ static int g_base_address_calculated = 0;
// base address calculatiion
static void calculate_base_address(void* known_runtime_addr, uintptr_t known_elf_addr){
static void calculate_base_address_offset(void* known_runtime_addr, uintptr_t known_elf_addr){
if (g_base_address_calculated) return;
uintptr_t runtime_addr = (uintptr_t)known_runtime_addr;
@ -94,7 +94,7 @@ static int parse_elf_symbols(const char* filepath){
}
unsigned char* elf_data = (unsigned char*)mapped;
if (elf_data[0] != 0x7f || elf_data[1] != 'E' || elf_data[2] != 'L' || elf_data != 'F'){
if (elf_data[0] != 0x7f || elf_data[1] != 'E' || elf_data[2] != 'L' || elf_data[3] != 'F'){
// not an ELF file
munmap(mapped, st.st_size);
return -1;
@ -227,7 +227,7 @@ static int parse_elf_symbols(const char* filepath){
// sort symbols by address for quick binary search
if (g_rvprof.symbols.size > 0){
qsort(g_rvprof.symbols.data, g_rvprof.symbols.size, sizeof(symbol_entry_t), symbol_compare);
qsort(g_rvprof.symbols.data, g_rvprof.symbols.size, sizeof(symbol_entry_t), compare_symbol);
g_rvprof.symbols_loaded = 1;
}
@ -309,21 +309,21 @@ const char* rvprof_symbols_lookup(void* addr){
// if symbol has size info, check if address is within range
if (sym->size > 0) {
if (adjusted_addr >= sym->addr && adjusted_addr < sym->addr + sym->size){
strncpy(g_temp_func_name, sym->name, sizeof(g_temp_func_name) - 1);
g_temp_func_name[sizeof(g_temp_func_name) - 1] = '\0';
return g_temp_func_name;
strncpy(g_tmp_func_name, sym->name, sizeof(g_tmp_func_name) - 1);
g_tmp_func_name[sizeof(g_tmp_func_name) - 1] = '\0';
return g_tmp_func_name;
}
} else {
// no size info, use 64 KB heuristic: must be within reasonable range
if (adjusted_addr >= sym->addr && (adjusted_addr - sym->addr) < 0x10000){
strncpy(g_temp_func_name, sym->name, sizeof(g_temp_func_name) - 1);
g_temp_func_name[sizeof(g_temp_func_name) - 1] = '\0';
return g_temp_func_name;
strncpy(g_tmp_func_name, sym->name, sizeof(g_tmp_func_name) - 1);
g_tmp_func_name[sizeof(g_tmp_func_name) - 1] = '\0';
return g_tmp_func_name;
}
}
}
// fallback to addresses if we cannot resolve symbols
snprintf(g_temp_func_name, sizeof(g_temp_func_name), "func_%p", addr);
return g_temp_func_name;
snprintf(g_tmp_func_name, sizeof(g_tmp_func_name), "func_%p", addr);
return g_tmp_func_name;
}