Merge branch 'upstream' of git://git.infradead.org/users/pcmoore/audit
[firefly-linux-kernel-4.4.55.git] / tools / perf / builtin-data.c
index 1eee97d020fabce67cbfbb84fa10fc2b68b0b78f..d6525bc54d13e337e927b197ab87da55f99492ae 100644 (file)
@@ -3,6 +3,7 @@
 #include "perf.h"
 #include "debug.h"
 #include "parse-options.h"
+#include "data-convert-bt.h"
 
 typedef int (*data_cmd_fn_t)(int argc, const char **argv, const char *prefix);
 
@@ -21,7 +22,9 @@ static const struct option data_options[] = {
        OPT_END()
 };
 
-static const char * const data_usage[] = {
+static const char * const data_subcommands[] = { "convert", NULL };
+
+static const char *data_usage[] = {
        "perf data [<common options>] <command> [<options>]",
        NULL
 };
@@ -41,8 +44,53 @@ static void print_usage(void)
        printf("\n");
 }
 
+static const char * const data_convert_usage[] = {
+       "perf data convert [<options>]",
+       NULL
+};
+
+static int cmd_data_convert(int argc, const char **argv,
+                           const char *prefix __maybe_unused)
+{
+       const char *to_ctf     = NULL;
+       bool force = false;
+       const struct option options[] = {
+               OPT_INCR('v', "verbose", &verbose, "be more verbose"),
+               OPT_STRING('i', "input", &input_name, "file", "input file name"),
+#ifdef HAVE_LIBBABELTRACE_SUPPORT
+               OPT_STRING(0, "to-ctf", &to_ctf, NULL, "Convert to CTF format"),
+#endif
+               OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
+               OPT_END()
+       };
+
+#ifndef HAVE_LIBBABELTRACE_SUPPORT
+       pr_err("No conversion support compiled in.\n");
+       return -1;
+#endif
+
+       argc = parse_options(argc, argv, options,
+                            data_convert_usage, 0);
+       if (argc) {
+               usage_with_options(data_convert_usage, options);
+               return -1;
+       }
+
+       if (to_ctf) {
+#ifdef HAVE_LIBBABELTRACE_SUPPORT
+               return bt_convert__perf2ctf(input_name, to_ctf, force);
+#else
+               pr_err("The libbabeltrace support is not compiled in.\n");
+               return -1;
+#endif
+       }
+
+       return 0;
+}
+
 static struct data_cmd data_cmds[] = {
-       { NULL },
+       { "convert", "converts data file between formats", cmd_data_convert },
+       { .name = NULL, },
 };
 
 int cmd_data(int argc, const char **argv, const char *prefix)
@@ -54,7 +102,7 @@ int cmd_data(int argc, const char **argv, const char *prefix)
        if (argc < 2)
                goto usage;
 
-       argc = parse_options(argc, argv, data_options, data_usage,
+       argc = parse_options_subcommand(argc, argv, data_options, data_subcommands, data_usage,
                             PARSE_OPT_STOP_AT_NON_OPTION);
        if (argc < 1)
                goto usage;