Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757505AbZLOP3q (ORCPT ); Tue, 15 Dec 2009 10:29:46 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1758533AbZLOP3c (ORCPT ); Tue, 15 Dec 2009 10:29:32 -0500 Received: from mx1.redhat.com ([209.132.183.28]:9558 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758734AbZLOP27 (ORCPT ); Tue, 15 Dec 2009 10:28:59 -0500 From: Masami Hiramatsu Subject: [PATCH -tip 13/14] perf probe: Check symbols in symtab/kallsyms To: Ingo Molnar , Frederic Weisbecker , lkml Cc: Paul Mackerras , Arnaldo Carvalho de Melo , Steven Rostedt , Jim Keniston , Ananth N Mavinakayanahalli , Christoph Hellwig , "Frank Ch. Eigler" , Jason Baron , "K.Prasad" , Peter Zijlstra , Srikar Dronamraju , systemtap , DLE Date: Tue, 15 Dec 2009 10:32:40 -0500 Message-ID: <20091215153239.17436.55034.stgit@dhcp-100-2-132.bos.redhat.com> In-Reply-To: <20091215153106.17436.66584.stgit@dhcp-100-2-132.bos.redhat.com> References: <20091215153106.17436.66584.stgit@dhcp-100-2-132.bos.redhat.com> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 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 Content-Length: 3661 Lines: 119 Check symbols in symtab/kallsyms when no debuginfo is available. e.g. # perf probe test Fatal: Kernel symbol 'test' not found - probe not added. Signed-off-by: Masami Hiramatsu Cc: Ingo Molnar Cc: Paul Mackerras Cc: Arnaldo Carvalho de Melo Cc: Steven Rostedt Cc: Jim Keniston Cc: Ananth N Mavinakayanahalli Cc: Christoph Hellwig Cc: Frank Ch. Eigler Cc: Frederic Weisbecker Cc: Jason Baron Cc: K.Prasad Cc: Peter Zijlstra Cc: Srikar Dronamraju --- tools/perf/builtin-probe.c | 32 ++++++++++++++++++++++---------- 1 files changed, 22 insertions(+), 10 deletions(-) diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c index 5008605..f019536 100644 --- a/tools/perf/builtin-probe.c +++ b/tools/perf/builtin-probe.c @@ -59,6 +59,7 @@ static struct { struct strlist *dellist; struct symbol_conf conf; struct perf_session *psession; + struct map *kmap; } session; @@ -115,22 +116,26 @@ static int opt_del_probe_event(const struct option *opt __used, return 0; } +/* Currently just checking function name from symbol map */ +static void evaluate_probe_point(struct probe_point *pp) +{ + struct symbol *sym; + sym = map__find_symbol_by_name(session.kmap, pp->function, + session.psession, NULL); + if (!sym) + die("Kernel symbol \'%s\' not found - probe not added.", + pp->function); +} + #ifndef NO_LIBDWARF static int open_vmlinux(void) { - struct map *kmap; - kmap = map_groups__find_by_name(&session.psession->kmaps, - MAP__FUNCTION, "[kernel.kallsyms]"); - if (!kmap) { - pr_debug("Could not find kernel map.\n"); - return -ENOENT; - } - if (map__load(kmap, session.psession, NULL) < 0) { + if (map__load(session.kmap, session.psession, NULL) < 0) { pr_debug("Failed to load kernel map.\n"); return -EINVAL; } - pr_debug("Try to open %s\n", kmap->dso->long_name); - return open(kmap->dso->long_name, O_RDONLY); + pr_debug("Try to open %s\n", session.kmap->dso->long_name); + return open(session.kmap->dso->long_name, O_RDONLY); } #endif @@ -219,6 +224,7 @@ int cmd_probe(int argc, const char **argv, const char *prefix __used) } /* Initialize symbol maps for vmlinux */ + session.conf.sort_by_name = true; if (session.conf.vmlinux_name == NULL) session.conf.try_vmlinux_path = true; if (symbol__init(&session.conf) < 0) @@ -227,6 +233,11 @@ int cmd_probe(int argc, const char **argv, const char *prefix __used) &session.conf); if (session.psession == NULL) die("Failed to init perf_session."); + session.kmap = map_groups__find_by_name(&session.psession->kmaps, + MAP__FUNCTION, + "[kernel.kallsyms]"); + if (!session.kmap) + die("Could not find kernel map.\n"); if (session.need_dwarf) #ifdef NO_LIBDWARF @@ -279,6 +290,7 @@ end_dwarf: if (pp->found) /* This probe is already found. */ continue; + evaluate_probe_point(pp); ret = synthesize_trace_kprobe_event(pp); if (ret == -E2BIG) die("probe point definition becomes too long."); -- Masami Hiramatsu Software Engineer Hitachi Computer Products (America), Inc. Software Solutions Division e-mail: mhiramat@redhat.com -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/