diff options
-rw-r--r-- | tools/perf/Documentation/perf-probe.txt | 2 | ||||
-rw-r--r-- | tools/perf/builtin-probe.c | 10 | ||||
-rw-r--r-- | tools/perf/util/probe-event.c | 4 | ||||
-rw-r--r-- | tools/perf/util/symbol-elf.c | 2 |
4 files changed, 16 insertions, 2 deletions
diff --git a/tools/perf/Documentation/perf-probe.txt b/tools/perf/Documentation/perf-probe.txt index 56db4d4..e6c9902 100644 --- a/tools/perf/Documentation/perf-probe.txt +++ b/tools/perf/Documentation/perf-probe.txt @@ -36,6 +36,8 @@ OPTIONS -k:: --vmlinux=PATH:: Specify vmlinux path which has debuginfo (Dwarf binary). + Only when using this with --definition, you can give an offline + vmlinux file. -m:: --module=MODNAME|PATH:: diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c index 7a3d8c4..b4220cd 100644 --- a/tools/perf/builtin-probe.c +++ b/tools/perf/builtin-probe.c @@ -654,8 +654,16 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused) return ret; } break; - case 'a': case 'D': + /* + * If user gives offline vmlinux, ignore buildid, since + * --definition doesn't change running kernel. + */ + if (symbol_conf.vmlinux_name) + symbol_conf.ignore_vmlinux_buildid = true; + /* fall through */ + case 'a': + /* Ensure the last given target is used */ if (params.target && !params.target_used) { pr_err(" Error: -x/-m must follow the probe definitions.\n"); diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index 4a49cb8..8a1e9e6 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c @@ -674,6 +674,10 @@ post_process_kernel_probe_trace_events(struct probe_trace_event *tevs, char *tmp; int i, skipped = 0; + /* Skip post process if the target is an offline kernel */ + if (symbol_conf.ignore_vmlinux_buildid) + return 0; + reloc_sym = kernel_get_ref_reloc_sym(); if (!reloc_sym) { pr_warning("Relocated base symbol is not found!\n"); diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index fbe31ef..e680371 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -732,7 +732,7 @@ int symsrc__init(struct symsrc *ss, struct dso *dso, const char *name, } /* Always reject images with a mismatched build-id: */ - if (dso->has_build_id) { + if (dso->has_build_id && !symbol_conf.ignore_vmlinux_buildid) { u8 build_id[BUILD_ID_SIZE]; if (elf_read_build_id(elf, build_id, BUILD_ID_SIZE) < 0) { |