diff options
Diffstat (limited to 'tools/perf/util/symbol.c')
| -rw-r--r-- | tools/perf/util/symbol.c | 27 | 
1 files changed, 21 insertions, 6 deletions
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index 60f11414bb5c..1f97ffb158a6 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -441,10 +441,25 @@ static struct symbol *symbols__find_by_name(struct rb_root *symbols,  	return &s->sym;  } +void dso__reset_find_symbol_cache(struct dso *dso) +{ +	enum map_type type; + +	for (type = MAP__FUNCTION; type <= MAP__VARIABLE; ++type) { +		dso->last_find_result[type].addr   = 0; +		dso->last_find_result[type].symbol = NULL; +	} +} +  struct symbol *dso__find_symbol(struct dso *dso,  				enum map_type type, u64 addr)  { -	return symbols__find(&dso->symbols[type], addr); +	if (dso->last_find_result[type].addr != addr) { +		dso->last_find_result[type].addr   = addr; +		dso->last_find_result[type].symbol = symbols__find(&dso->symbols[type], addr); +	} + +	return dso->last_find_result[type].symbol;  }  struct symbol *dso__first_symbol(struct dso *dso, enum map_type type) @@ -1133,8 +1148,8 @@ static int dso__load_kcore(struct dso *dso, struct map *map,  	fd = open(kcore_filename, O_RDONLY);  	if (fd < 0) { -		pr_err("%s requires CAP_SYS_RAWIO capability to access.\n", -			kcore_filename); +		pr_debug("Failed to open %s. Note /proc/kcore requires CAP_SYS_RAWIO capability to access.\n", +			 kcore_filename);  		return -EINVAL;  	} @@ -1838,7 +1853,7 @@ static void vmlinux_path__exit(void)  	zfree(&vmlinux_path);  } -static int vmlinux_path__init(struct perf_session_env *env) +static int vmlinux_path__init(struct perf_env *env)  {  	struct utsname uts;  	char bf[PATH_MAX]; @@ -1906,7 +1921,7 @@ int setup_list(struct strlist **list, const char *list_str,  	if (list_str == NULL)  		return 0; -	*list = strlist__new(true, list_str); +	*list = strlist__new(list_str, NULL);  	if (!*list) {  		pr_err("problems parsing %s list\n", list_name);  		return -1; @@ -1949,7 +1964,7 @@ static bool symbol__read_kptr_restrict(void)  	return value;  } -int symbol__init(struct perf_session_env *env) +int symbol__init(struct perf_env *env)  {  	const char *symfs;  | 
