diff options
author | Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> | 2014-02-06 00:32:11 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2014-02-18 07:34:50 -0500 |
commit | 2df58634cd2ad33d7c7ca2e02e1a44db6c8cf68d (patch) | |
tree | 831c979e6f830a324cee463c368e5bec3cfe04bd /tools/perf/util | |
parent | 5a62257a3ddd1a09cf278eae0697fcbe20897447 (diff) |
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>
Diffstat (limited to 'tools/perf/util')
-rw-r--r-- | tools/perf/util/probe-event.c | 72 |
1 files changed, 26 insertions, 46 deletions
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index f70fd08f00b7..ace3ba37c880 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c | |||
@@ -2323,66 +2323,46 @@ static int filter_available_functions(struct map *map __maybe_unused, | |||
2323 | return 1; | 2323 | return 1; |
2324 | } | 2324 | } |
2325 | 2325 | ||
2326 | static int __show_available_funcs(struct map *map) | 2326 | int show_available_funcs(const char *target, struct strfilter *_filter, |
2327 | { | 2327 | bool user) |
2328 | if (map__load(map, filter_available_functions)) { | ||
2329 | pr_err("Failed to load map.\n"); | ||
2330 | return -EINVAL; | ||
2331 | } | ||
2332 | if (!dso__sorted_by_name(map->dso, map->type)) | ||
2333 | dso__sort_by_name(map->dso, map->type); | ||
2334 | |||
2335 | dso__fprintf_symbols_by_name(map->dso, map->type, stdout); | ||
2336 | return 0; | ||
2337 | } | ||
2338 | |||
2339 | static int available_kernel_funcs(const char *module) | ||
2340 | { | 2328 | { |
2341 | struct map *map; | 2329 | struct map *map; |
2342 | int ret; | 2330 | int ret; |
2343 | 2331 | ||
2344 | ret = init_symbol_maps(false); | 2332 | ret = init_symbol_maps(user); |
2345 | if (ret < 0) | 2333 | if (ret < 0) |
2346 | return ret; | 2334 | return ret; |
2347 | 2335 | ||
2348 | map = kernel_get_module_map(module); | 2336 | /* Get a symbol map */ |
2337 | if (user) | ||
2338 | map = dso__new_map(target); | ||
2339 | else | ||
2340 | map = kernel_get_module_map(target); | ||
2349 | if (!map) { | 2341 | if (!map) { |
2350 | pr_err("Failed to find %s map.\n", (module) ? : "kernel"); | 2342 | pr_err("Failed to get a map for %s\n", (target) ? : "kernel"); |
2351 | return -EINVAL; | 2343 | return -EINVAL; |
2352 | } | 2344 | } |
2353 | ret = __show_available_funcs(map); | ||
2354 | exit_symbol_maps(); | ||
2355 | |||
2356 | return ret; | ||
2357 | } | ||
2358 | |||
2359 | static int available_user_funcs(const char *target) | ||
2360 | { | ||
2361 | struct map *map; | ||
2362 | int ret; | ||
2363 | 2345 | ||
2364 | ret = init_symbol_maps(true); | 2346 | /* Load symbols with given filter */ |
2365 | if (ret < 0) | ||
2366 | return ret; | ||
2367 | |||
2368 | map = dso__new_map(target); | ||
2369 | ret = __show_available_funcs(map); | ||
2370 | dso__delete(map->dso); | ||
2371 | map__delete(map); | ||
2372 | exit_symbol_maps(); | ||
2373 | return ret; | ||
2374 | } | ||
2375 | |||
2376 | int show_available_funcs(const char *target, struct strfilter *_filter, | ||
2377 | bool user) | ||
2378 | { | ||
2379 | setup_pager(); | ||
2380 | available_func_filter = _filter; | 2347 | available_func_filter = _filter; |
2348 | if (map__load(map, filter_available_functions)) { | ||
2349 | pr_err("Failed to load symbols in %s\n", (target) ? : "kernel"); | ||
2350 | goto end; | ||
2351 | } | ||
2352 | if (!dso__sorted_by_name(map->dso, map->type)) | ||
2353 | dso__sort_by_name(map->dso, map->type); | ||
2381 | 2354 | ||
2382 | if (!user) | 2355 | /* Show all (filtered) symbols */ |
2383 | return available_kernel_funcs(target); | 2356 | setup_pager(); |
2357 | dso__fprintf_symbols_by_name(map->dso, map->type, stdout); | ||
2358 | end: | ||
2359 | if (user) { | ||
2360 | dso__delete(map->dso); | ||
2361 | map__delete(map); | ||
2362 | } | ||
2363 | exit_symbol_maps(); | ||
2384 | 2364 | ||
2385 | return available_user_funcs(target); | 2365 | return ret; |
2386 | } | 2366 | } |
2387 | 2367 | ||
2388 | /* | 2368 | /* |