From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752315AbcHZOCu (ORCPT ); Fri, 26 Aug 2016 10:02:50 -0400 Received: from mail.kernel.org ([198.145.29.136]:54204 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751671AbcHZOCt (ORCPT ); Fri, 26 Aug 2016 10:02:49 -0400 Date: Fri, 26 Aug 2016 23:02:38 +0900 From: Masami Hiramatsu To: Masami Hiramatsu Cc: Arnaldo Carvalho de Melo , linux-kernel@vger.kernel.org, Peter Zijlstra , Ingo Molnar , Jiri Olsa Subject: Re: [PATCH v2 2/3] perf-probe: Ignore vmlinux buildid if offline kernel is given Message-Id: <20160826230238.429b06d779f9c1c34f78bab2@kernel.org> In-Reply-To: <147214228193.23638.12581984840822162131.stgit@devbox> References: <147214224523.23638.10155676067678947950.stgit@devbox> <147214228193.23638.12581984840822162131.stgit@devbox> X-Mailer: Sylpheed 3.5.0 (GTK+ 2.24.30; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 26 Aug 2016 01:24:42 +0900 Masami Hiramatsu wrote: > Ignore the buildid of running kernel when both of --definition and > --vmlinux is given because that kernel should be off-line. > This also skips post-processing of kprobe event for relocating > symbol and checking blacklist, because it can not be done on > off-line kernel. Ahh, I missed other commands which doesn't change running kernel, like --funcs, --vars, --lines. Those also should ignore buildid if vmlinux is given. (--add, --del, and --list depend on/change running kernel) I'll add a patch to handle that. Thank you, > > E.g. without this fix perf shows an error as below > ---- > $ perf probe --vmlinux=./vmlinux-arm --definition do_sys_open > ./vmlinux-arm with build id 7a1f76dd56e9c4da707cd3d6333f50748141434b not found, continuing without symbols > Failed to find symbol do_sys_open in kernel > Error: Failed to add events. > ---- > with this fix, we can get the definition > ---- > $ perf probe --vmlinux=./vmlinux-arm --definition do_sys_open > p:probe/do_sys_open do_sys_open+0 > ---- > > Signed-off-by: Masami Hiramatsu > --- > Changes from v1: > - Update the condition since --definition is introduced. > - Skip post processing because this is not running kernel. > - Update documentation too. > --- > tools/perf/Documentation/perf-probe.txt | 2 ++ > tools/perf/builtin-probe.c | 10 +++++++++- > tools/perf/util/probe-event.c | 4 ++++ > 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 ad7094d..8dcec0c 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 a811c13..013cebf 100644 > --- a/tools/perf/util/symbol-elf.c > +++ b/tools/perf/util/symbol-elf.c > @@ -685,7 +685,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) { > -- Masami Hiramatsu