perf probe: Unify show_available_functions for uprobes/kprobes

Unify show_available_functions for uprobes/kprobes to cleanup and reduce
the code. This also improves error messages.

Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: "David A. Long" <dave.long@linaro.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: yrl.pp-manager.tt@hitachi.com
Link: http://lkml.kernel.org/r/20140206053211.29635.20563.stgit@kbuild-fedora.yrl.intra.hitachi.co.jp
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Masami Hiramatsu 2014-02-06 05:32:11 +00:00 committed by Arnaldo Carvalho de Melo
parent 5a62257a3d
commit 2df58634cd

View File

@ -2323,66 +2323,46 @@ static int filter_available_functions(struct map *map __maybe_unused,
return 1;
}
static int __show_available_funcs(struct map *map)
int show_available_funcs(const char *target, struct strfilter *_filter,
bool user)
{
if (map__load(map, filter_available_functions)) {
pr_err("Failed to load map.\n");
struct map *map;
int ret;
ret = init_symbol_maps(user);
if (ret < 0)
return ret;
/* Get a symbol map */
if (user)
map = dso__new_map(target);
else
map = kernel_get_module_map(target);
if (!map) {
pr_err("Failed to get a map for %s\n", (target) ? : "kernel");
return -EINVAL;
}
/* Load symbols with given filter */
available_func_filter = _filter;
if (map__load(map, filter_available_functions)) {
pr_err("Failed to load symbols in %s\n", (target) ? : "kernel");
goto end;
}
if (!dso__sorted_by_name(map->dso, map->type))
dso__sort_by_name(map->dso, map->type);
dso__fprintf_symbols_by_name(map->dso, map->type, stdout);
return 0;
}
static int available_kernel_funcs(const char *module)
{
struct map *map;
int ret;
ret = init_symbol_maps(false);
if (ret < 0)
return ret;
map = kernel_get_module_map(module);
if (!map) {
pr_err("Failed to find %s map.\n", (module) ? : "kernel");
return -EINVAL;
}
ret = __show_available_funcs(map);
exit_symbol_maps();
return ret;
}
static int available_user_funcs(const char *target)
{
struct map *map;
int ret;
ret = init_symbol_maps(true);
if (ret < 0)
return ret;
map = dso__new_map(target);
ret = __show_available_funcs(map);
dso__delete(map->dso);
map__delete(map);
exit_symbol_maps();
return ret;
}
int show_available_funcs(const char *target, struct strfilter *_filter,
bool user)
{
/* Show all (filtered) symbols */
setup_pager();
available_func_filter = _filter;
dso__fprintf_symbols_by_name(map->dso, map->type, stdout);
end:
if (user) {
dso__delete(map->dso);
map__delete(map);
}
exit_symbol_maps();
if (!user)
return available_kernel_funcs(target);
return available_user_funcs(target);
return ret;
}
/*