Em Thu, Jun 16, 2016 at 08:02:41AM +0000, Wang Nan escreveu: > With '--dry-run', 'perf record' doesn't do reall recording. Combine with > llvm.dump-obj option, --dry-run can be used to help compile BPF objects for > embedded platform.
So these are nice and have value, but can we have a subcommand to do all this with an expressive name, Something like: perf bpfcc foo.c -o foo or shorter: perf bcc foo.c -o foo Just like one would use gcc or some other compiler to generate something for later use? That if called as: perf bcc foo.c Would default to generating a foo.o file. Then, later, one could use this as a event name, i.e. trace --event foo Would, knowing that there is no event named "foo", look at the current directory (and in some other places perhaps) for a file named "foo" that was a bpf object file to use as it would a foo.c, shortcircuiting the bpf compilation code. If this was done instead: trace --event foo.c And foo.c wasn't present, it would fallback to the behaviour described in the previous paragraph: look for a foo.o or foo bpf object file, etc. What do you think? - Arnaldo > Signed-off-by: Wang Nan <wangn...@huawei.com> > Cc: Arnaldo Carvalho de Melo <a...@redhat.com> > Cc: Alexei Starovoitov <a...@kernel.org> > Cc: Jiri Olsa <jo...@kernel.org> > --- > tools/perf/Documentation/perf-record.txt | 7 +++++++ > tools/perf/builtin-record.c | 7 +++++++ > 2 files changed, 14 insertions(+) > > diff --git a/tools/perf/Documentation/perf-record.txt > b/tools/perf/Documentation/perf-record.txt > index 8dbee83..5b46b1d 100644 > --- a/tools/perf/Documentation/perf-record.txt > +++ b/tools/perf/Documentation/perf-record.txt > @@ -360,6 +360,13 @@ particular perf.data snapshot should be kept or not. > > Implies --timestamp-filename, --no-buildid and --no-buildid-cache. > > +--dry-run:: > +Parse options then exit. --dry-run can be used to detect errors in cmdline > +options. > + > +'perf record --dry-run -e' can act as a BPF script compiler if llvm.dump-obj > +in config file is set to true. > + > SEE ALSO > -------- > linkperf:perf-stat[1], linkperf:perf-list[1] > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c > index d4cf1b0..b1304eb 100644 > --- a/tools/perf/builtin-record.c > +++ b/tools/perf/builtin-record.c > @@ -1274,6 +1274,8 @@ static struct record record = { > const char record_callchain_help[] = CALLCHAIN_RECORD_HELP > "\n\t\t\t\tDefault: fp"; > > +static bool dry_run; > + > /* > * XXX Will stay a global variable till we fix builtin-script.c to stop > messing > * with it and switch to use the library functions in perf_evlist that came > @@ -1393,6 +1395,8 @@ struct option __record_options[] = { > "append timestamp to output filename"), > OPT_BOOLEAN(0, "switch-output", &record.switch_output, > "Switch output when receive SIGUSR2"), > + OPT_BOOLEAN(0, "dry-run", &dry_run, > + "Parse options then exit"), > OPT_END() > }; > > @@ -1462,6 +1466,9 @@ int cmd_record(int argc, const char **argv, const char > *prefix __maybe_unused) > if (err) > return err; > > + if (dry_run) > + return 0; > + > err = bpf__setup_stdout(rec->evlist); > if (err) { > bpf__strerror_setup_stdout(rec->evlist, err, errbuf, > sizeof(errbuf)); > -- > 1.8.3.4