aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorHe Kuang <hekuang@huawei.com>2015-12-14 05:39:23 -0500
committerArnaldo Carvalho de Melo <acme@redhat.com>2015-12-14 11:04:12 -0500
commit7efe0e034c713716060bc7794c7e332589980c70 (patch)
tree3cdd3a8257e75551fdacbcbe17af85f0ceda10ee /tools
parent48e1cab1ba4db84fbc26379b887ba94a180347fe (diff)
perf record: Support custom vmlinux path
Make perf-record command support --vmlinux option if BPF_PROLOGUE is on. 'perf record' needs vmlinux as the source of DWARF info to generate prologue for BPF programs, so path of vmlinux should be specified. Short name 'k' has been taken by 'clockid'. This patch skips the short option name and uses '--vmlinux' for vmlinux path. Documentation is also updated. Test result: In a production (or broken) environment: (by: # rm -rf ~/.debug/ # mv /lib/modules/`uname -r`/build/vmlinux /tmp/ ) # ./perf record -e ./test_bpf_base.c ls Failed to find the path for kernel: No such file or directory event syntax error: './test_bpf_base.c' \___ You need to check probing points in BPF file ... # ./perf record --vmlinux /tmp/vmlinux -e ./test_bpf_base.c ls ... [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.011 MB perf.data ] Help messages when build with NO_LIBBPF: # ./perf record -h --transaction sample transaction flags (special events only) --vmlinux <file> vmlinux pathname (not built-in because NO_LIBBPF=1) # ./perf record --vmlinux /tmp/vmlinux ls / Warning: option `vmlinux' is being ignored because NO_LIBBPF=1 ... [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.011 MB perf.data (11 samples) ] Help messages when build with NO_DWARF: # ./perf record -h --transaction sample transaction flags (special events only) --vmlinux <file> vmlinux pathname (not built-in because NO_DWARF=1) Signed-off-by: He Kuang <hekuang@huawei.com> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Wang Nan <wangnan0@huawei.com> Cc: Zefan Li <lizefan@huawei.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1450089563-122430-15-git-send-email-wangnan0@huawei.com Signed-off-by: Wang Nan <wangnan0@huawei.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/Documentation/perf-record.txt10
-rw-r--r--tools/perf/builtin-record.c16
2 files changed, 24 insertions, 2 deletions
diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt
index e630a7d2c348..8d032f4e50bf 100644
--- a/tools/perf/Documentation/perf-record.txt
+++ b/tools/perf/Documentation/perf-record.txt
@@ -314,11 +314,17 @@ This option sets the time out limit. The default value is 500 ms.
314Record context switch events i.e. events of type PERF_RECORD_SWITCH or 314Record context switch events i.e. events of type PERF_RECORD_SWITCH or
315PERF_RECORD_SWITCH_CPU_WIDE. 315PERF_RECORD_SWITCH_CPU_WIDE.
316 316
317--clang-path:: 317--clang-path=PATH::
318Path to clang binary to use for compiling BPF scriptlets. 318Path to clang binary to use for compiling BPF scriptlets.
319(enabled when BPF support is on)
319 320
320--clang-opt:: 321--clang-opt=OPTIONS::
321Options passed to clang when compiling BPF scriptlets. 322Options passed to clang when compiling BPF scriptlets.
323(enabled when BPF support is on)
324
325--vmlinux=PATH::
326Specify vmlinux path which has debuginfo.
327(enabled when BPF prologue is on)
322 328
323SEE ALSO 329SEE ALSO
324-------- 330--------
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index c2ba377e8d3a..3ef3c79e7534 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -1117,6 +1117,8 @@ struct option __record_options[] = {
1117 "clang binary to use for compiling BPF scriptlets"), 1117 "clang binary to use for compiling BPF scriptlets"),
1118 OPT_STRING(0, "clang-opt", &llvm_param.clang_opt, "clang options", 1118 OPT_STRING(0, "clang-opt", &llvm_param.clang_opt, "clang options",
1119 "options passed to clang when compiling BPF scriptlets"), 1119 "options passed to clang when compiling BPF scriptlets"),
1120 OPT_STRING(0, "vmlinux", &symbol_conf.vmlinux_name,
1121 "file", "vmlinux pathname"),
1120 OPT_END() 1122 OPT_END()
1121}; 1123};
1122 1124
@@ -1135,6 +1137,20 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused)
1135# undef set_nobuild 1137# undef set_nobuild
1136#endif 1138#endif
1137 1139
1140#ifndef HAVE_BPF_PROLOGUE
1141# if !defined (HAVE_DWARF_SUPPORT)
1142# define REASON "NO_DWARF=1"
1143# elif !defined (HAVE_LIBBPF_SUPPORT)
1144# define REASON "NO_LIBBPF=1"
1145# else
1146# define REASON "this architecture doesn't support BPF prologue"
1147# endif
1148# define set_nobuild(s, l, c) set_option_nobuild(record_options, s, l, REASON, c)
1149 set_nobuild('\0', "vmlinux", true);
1150# undef set_nobuild
1151# undef REASON
1152#endif
1153
1138 rec->evlist = perf_evlist__new(); 1154 rec->evlist = perf_evlist__new();
1139 if (rec->evlist == NULL) 1155 if (rec->evlist == NULL)
1140 return -ENOMEM; 1156 return -ENOMEM;