Skip to content

Commit

Permalink
perf probe: Unify show_available_functions for uprobes/kprobes
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Masami Hiramatsu authored and Arnaldo Carvalho de Melo committed Feb 18, 2014
1 parent 5a62257 commit 2df5863
Showing 1 changed file with 26 additions and 46 deletions.
72 changes: 26 additions & 46 deletions tools/perf/util/probe-event.c
Original file line number Diff line number Diff line change
Expand Up @@ -2323,66 +2323,46 @@ static int filter_available_functions(struct map *map __maybe_unused,
return 1;
}

static int __show_available_funcs(struct map *map)
{
if (map__load(map, filter_available_functions)) {
pr_err("Failed to load map.\n");
return -EINVAL;
}
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)
int show_available_funcs(const char *target, struct strfilter *_filter,
bool user)
{
struct map *map;
int ret;

ret = init_symbol_maps(false);
ret = init_symbol_maps(user);
if (ret < 0)
return ret;

map = kernel_get_module_map(module);
/* Get a symbol map */
if (user)
map = dso__new_map(target);
else
map = kernel_get_module_map(target);
if (!map) {
pr_err("Failed to find %s map.\n", (module) ? : "kernel");
pr_err("Failed to get a map for %s\n", (target) ? : "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)
{
setup_pager();
/* 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);

if (!user)
return available_kernel_funcs(target);
/* Show all (filtered) symbols */
setup_pager();
dso__fprintf_symbols_by_name(map->dso, map->type, stdout);
end:
if (user) {
dso__delete(map->dso);
map__delete(map);
}
exit_symbol_maps();

return available_user_funcs(target);
return ret;
}

/*
Expand Down

0 comments on commit 2df5863

Please sign in to comment.