Beispiel #1
0
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;
}
Beispiel #2
0
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);
}