Commit 8e1e0d74 authored by Ravi Bangoria's avatar Ravi Bangoria Committed by Arnaldo Carvalho de Melo

perf buildid-cache: Support --list option

'perf buildid-cache' allows to add/remove files into cache but there is
no option to list all cached files. Add --list option to list all
_valid_ cached files.

Ex,
  # perf buildid-cache --add /tmp/a.out
  # perf buildid-cache -l
    8a86ef73e44067bca52cc3f6cd3e5446c783391c /tmp/a.out
Signed-off-by: default avatarRavi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Kate Stewart <kstewart@linuxfoundation.org>
Cc: Krister Johansen <kjlx@templeofstupid.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Philippe Ombredanne <pombredanne@nexb.com>
Cc: Sihyeon Jang <uneedsihyeon@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20180417041346.5617-3-ravi.bangoria@linux.vnet.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent d4652f61
...@@ -59,7 +59,9 @@ OPTIONS ...@@ -59,7 +59,9 @@ OPTIONS
exactly same build-id, that is replaced by new one. It can be used exactly same build-id, that is replaced by new one. It can be used
to update kallsyms and kernel dso to vmlinux in order to support to update kallsyms and kernel dso to vmlinux in order to support
annotation. annotation.
-l::
--list::
List all valid binaries from cache.
-v:: -v::
--verbose:: --verbose::
Be more verbose. Be more verbose.
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include "util/session.h" #include "util/session.h"
#include "util/symbol.h" #include "util/symbol.h"
#include "util/time-utils.h" #include "util/time-utils.h"
#include "util/probe-file.h"
static int build_id_cache__kcore_buildid(const char *proc_dir, char *sbuildid) static int build_id_cache__kcore_buildid(const char *proc_dir, char *sbuildid)
{ {
...@@ -297,6 +298,26 @@ static int build_id_cache__update_file(const char *filename, struct nsinfo *nsi) ...@@ -297,6 +298,26 @@ static int build_id_cache__update_file(const char *filename, struct nsinfo *nsi)
return err; return err;
} }
static int build_id_cache__show_all(void)
{
struct strlist *bidlist;
struct str_node *nd;
char *buf;
bidlist = build_id_cache__list_all(true);
if (!bidlist) {
pr_debug("Failed to get buildids: -%d\n", errno);
return -1;
}
strlist__for_each_entry(nd, bidlist) {
buf = build_id_cache__origname(nd->s);
fprintf(stdout, "%s %s\n", nd->s, buf);
free(buf);
}
strlist__delete(bidlist);
return 0;
}
int cmd_buildid_cache(int argc, const char **argv) int cmd_buildid_cache(int argc, const char **argv)
{ {
struct strlist *list; struct strlist *list;
...@@ -304,6 +325,8 @@ int cmd_buildid_cache(int argc, const char **argv) ...@@ -304,6 +325,8 @@ int cmd_buildid_cache(int argc, const char **argv)
int ret = 0; int ret = 0;
int ns_id = -1; int ns_id = -1;
bool force = false; bool force = false;
bool list_files = false;
bool opts_flag = false;
char const *add_name_list_str = NULL, char const *add_name_list_str = NULL,
*remove_name_list_str = NULL, *remove_name_list_str = NULL,
*purge_name_list_str = NULL, *purge_name_list_str = NULL,
...@@ -327,6 +350,7 @@ int cmd_buildid_cache(int argc, const char **argv) ...@@ -327,6 +350,7 @@ int cmd_buildid_cache(int argc, const char **argv)
"file(s) to remove"), "file(s) to remove"),
OPT_STRING('p', "purge", &purge_name_list_str, "file list", OPT_STRING('p', "purge", &purge_name_list_str, "file list",
"file(s) to remove (remove old caches too)"), "file(s) to remove (remove old caches too)"),
OPT_BOOLEAN('l', "list", &list_files, "list all cached files"),
OPT_STRING('M', "missing", &missing_filename, "file", OPT_STRING('M', "missing", &missing_filename, "file",
"to find missing build ids in the cache"), "to find missing build ids in the cache"),
OPT_BOOLEAN('f', "force", &force, "don't complain, do it"), OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
...@@ -344,11 +368,19 @@ int cmd_buildid_cache(int argc, const char **argv) ...@@ -344,11 +368,19 @@ int cmd_buildid_cache(int argc, const char **argv)
argc = parse_options(argc, argv, buildid_cache_options, argc = parse_options(argc, argv, buildid_cache_options,
buildid_cache_usage, 0); buildid_cache_usage, 0);
if (argc || (!add_name_list_str && !kcore_filename && opts_flag = add_name_list_str || kcore_filename ||
!remove_name_list_str && !purge_name_list_str && remove_name_list_str || purge_name_list_str ||
!missing_filename && !update_name_list_str)) missing_filename || update_name_list_str;
if (argc || !(list_files || opts_flag))
usage_with_options(buildid_cache_usage, buildid_cache_options); usage_with_options(buildid_cache_usage, buildid_cache_options);
/* -l is exclusive. It can not be used with other options. */
if (list_files && opts_flag) {
usage_with_options_msg(buildid_cache_usage,
buildid_cache_options, "-l is exclusive.\n");
}
if (ns_id > 0) if (ns_id > 0)
nsi = nsinfo__new(ns_id); nsi = nsinfo__new(ns_id);
...@@ -366,6 +398,11 @@ int cmd_buildid_cache(int argc, const char **argv) ...@@ -366,6 +398,11 @@ int cmd_buildid_cache(int argc, const char **argv)
setup_pager(); setup_pager();
if (list_files) {
ret = build_id_cache__show_all();
goto out;
}
if (add_name_list_str) { if (add_name_list_str) {
list = strlist__new(add_name_list_str, NULL); list = strlist__new(add_name_list_str, NULL);
if (list) { if (list) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment