bugfixes
This commit is contained in:
parent
cad600fd59
commit
a72ba8066c
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue