From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753577AbaHOBvh (ORCPT ); Thu, 14 Aug 2014 21:51:37 -0400 Received: from mail9.hitachi.co.jp ([133.145.228.44]:38463 "EHLO mail9.hitachi.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751637AbaHOBvg (ORCPT ); Thu, 14 Aug 2014 21:51:36 -0400 Message-ID: <53ED67A1.3080607@hitachi.com> Date: Fri, 15 Aug 2014 10:51:29 +0900 From: Masami Hiramatsu Organization: Hitachi, Ltd., Japan User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20120614 Thunderbird/13.0.1 MIME-Version: 1.0 To: Arnaldo Carvalho de Melo Cc: Namhyung Kim , David Ahern , LKML , yrl.pp-manager.tt@hitachi.com, Brendan Gregg , Jiri Olsa Subject: Re: [PATCH] perf probe: Warn user to rebuild target with debuginfo References: <53ED627E.2090804@hitachi.com> <20140815014432.29869.57941.stgit@kbuild-fedora.novalocal> In-Reply-To: <20140815014432.29869.57941.stgit@kbuild-fedora.novalocal> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Here is v2 patch, which I've added "or install an appropriate debuginfo pacakge." :) Thank you, (2014/08/15 10:44), Masami Hiramatsu wrote: > Warn user to rebuild target with debuginfo when the perf probe > fails to find debug information in the target binary. > Without this, perf probe just reports the failure, but it's > no hint for users. This gives more hint for users. > > Without this, > > $ strip perf > $ ./perf probe -x perf -L argv_split > Failed to open debuginfo file. > Error: Failed to show lines. > > With this, > > $ strip perf > $ ./perf probe -x perf -L argv_split > The /home/fedora/ksrc/linux-3/tools/perf/perf file has no debug information. > Rebuild with -g, or install an appropriate debuginfo pacakge. > Error: Failed to show lines. > > The "rebuild with ..." part changes to "rebuild with CONFIG_DEBUG_INFO" > if the target is the kernel or a kernel module. > > Signed-off-by: Masami Hiramatsu > Reported-by: Arnaldo Carvalho de Melo > Cc: Jiri Olsa > Cc: Namhyung Kim > Cc: David Ahern > Cc: Brendan Gregg > --- > tools/perf/util/probe-event.c | 41 +++++++++++++++++++++++------------------ > 1 file changed, 23 insertions(+), 18 deletions(-) > > diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c > index 784ea42..9a29c72 100644 > --- a/tools/perf/util/probe-event.c > +++ b/tools/perf/util/probe-event.c > @@ -258,21 +258,33 @@ static void clear_probe_trace_events(struct probe_trace_event *tevs, int ntevs) > #ifdef HAVE_DWARF_SUPPORT > > /* Open new debuginfo of given module */ > -static struct debuginfo *open_debuginfo(const char *module) > +static struct debuginfo *open_debuginfo(const char *module, bool silent) > { > const char *path = module; > + struct debuginfo *ret; > > if (!module || !strchr(module, '/')) { > path = kernel_get_module_path(module); > if (!path) { > - pr_err("Failed to find path of %s module.\n", > - module ?: "kernel"); > + if (!silent) > + pr_err("Failed to find path of %s module.\n", > + module ?: "kernel"); > return NULL; > } > } > - return debuginfo__new(path); > + ret = debuginfo__new(path); > + if (!ret && !silent) { > + pr_warning("The %s file has no debug information.\n", path); > + if (!module || !strtailcmp(path, ".ko")) > + pr_warning("Rebuild with CONFIG_DEBUG_INFO=y, "); > + else > + pr_warning("Rebuild with -g, "); > + pr_warning("or install an appropriate debuginfo pacakge.\n"); > + } > + return ret; > } > > + > static int get_text_start_address(const char *exec, unsigned long *address) > { > Elf *elf; > @@ -333,15 +345,13 @@ static int find_perf_probe_point_from_dwarf(struct probe_trace_point *tp, > pr_debug("try to find information at %" PRIx64 " in %s\n", addr, > tp->module ? : "kernel"); > > - dinfo = open_debuginfo(tp->module); > + dinfo = open_debuginfo(tp->module, verbose == 0); > if (dinfo) { > ret = debuginfo__find_probe_point(dinfo, > (unsigned long)addr, pp); > debuginfo__delete(dinfo); > - } else { > - pr_debug("Failed to open debuginfo at 0x%" PRIx64 "\n", addr); > + } else > ret = -ENOENT; > - } > > if (ret > 0) { > pp->retprobe = tp->retprobe; > @@ -457,13 +467,11 @@ static int try_to_find_probe_trace_events(struct perf_probe_event *pev, > struct debuginfo *dinfo; > int ntevs, ret = 0; > > - dinfo = open_debuginfo(target); > + dinfo = open_debuginfo(target, !need_dwarf); > > if (!dinfo) { > - if (need_dwarf) { > - pr_warning("Failed to open debuginfo file.\n"); > + if (need_dwarf) > return -ENOENT; > - } > pr_debug("Could not open debuginfo. Try to use symbols.\n"); > return 0; > } > @@ -620,11 +628,9 @@ static int __show_line_range(struct line_range *lr, const char *module) > char *tmp; > > /* Search a line range */ > - dinfo = open_debuginfo(module); > - if (!dinfo) { > - pr_warning("Failed to open debuginfo file.\n"); > + dinfo = open_debuginfo(module, false); > + if (!dinfo) > return -ENOENT; > - } > > ret = debuginfo__find_line_range(dinfo, lr); > debuginfo__delete(dinfo); > @@ -772,9 +778,8 @@ int show_available_vars(struct perf_probe_event *pevs, int npevs, > if (ret < 0) > return ret; > > - dinfo = open_debuginfo(module); > + dinfo = open_debuginfo(module, false); > if (!dinfo) { > - pr_warning("Failed to open debuginfo file.\n"); > ret = -ENOENT; > goto out; > } > > -- Masami HIRAMATSU Software Platform Research Dept. Linux Technology Research Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu.pt@hitachi.com