static const char *resolve(const char *name,unsigned long long addr) { static char resolved[MAX_FUNC_LEN] = ""; unsigned long long naddr; naddr = strtoull(name,NULL,16); specialChars(name,resolved,MAX_FUNC_LEN); if(std::string(name).find_first_not_of("0123456789ABCDEFabcdef",0) == std::string::npos) { const char *symname = sym_resolve(naddr); strncat(resolved,": ",std::min((size_t)2,MAX_FUNC_LEN - strlen(resolved))); strncat(resolved,symname,std::min(strlen(symname),MAX_FUNC_LEN - strlen(resolved))); } else if(addr != 0) snprintf(resolved + strlen(resolved),MAX_FUNC_LEN - strlen(resolved),": #%Lx",addr); return resolved; }
static sym_item_t * resolve_unique(sym_t *sym, uint64_t addr, sym_item_t **arr, uint64_t *base_addr) { sym_item_t *item_arr, *item; int num, i; if (sym_resolve(sym, addr, &item_arr, &num, base_addr) != 0) { *arr = NULL; return (NULL); } ASSERT(num > 0); for (i = 0; i < num; i++) { item = &item_arr[i]; if (item->name[0] != '_') { *arr = item_arr; return (item); } } *arr = item_arr; return (item); }