Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756027AbZJLKb4 (ORCPT ); Mon, 12 Oct 2009 06:31:56 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755132AbZJLKbz (ORCPT ); Mon, 12 Oct 2009 06:31:55 -0400 Received: from mail-bw0-f210.google.com ([209.85.218.210]:37811 "EHLO mail-bw0-f210.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754890AbZJLKbx convert rfc822-to-8bit (ORCPT ); Mon, 12 Oct 2009 06:31:53 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=GQ4RHerJZVH3eXhH2yMi+D9UFPDechEJE1jGIaoTB20tWCHNnUKUCxHH9RIbnQs6XP 9abWQ+yQgifb8Gx5fITXSHDcsK1bUPEIEjwwrq7X54rmqGvPlbyB4t+mQ62E8mREmIp8 F6z6pc6MY53dSAnGW0bCBjurv6KzojYScuS0Y= MIME-Version: 1.0 In-Reply-To: <20091008211737.29299.14784.stgit@dhcp-100-2-132.bos.redhat.com> References: <4ACE56EE.8060000@redhat.com> <20091008211737.29299.14784.stgit@dhcp-100-2-132.bos.redhat.com> Date: Mon, 12 Oct 2009 12:31:16 +0200 Message-ID: Subject: Re: [PATCH tracing/kprobes v4] perf: Add perf probe subcommand for kprobe-event setup helper From: =?ISO-8859-1?Q?Fr=E9d=E9ric_Weisbecker?= To: Masami Hiramatsu Cc: Steven Rostedt , Ingo Molnar , lkml , systemtap , DLE , Thomas Gleixner , Arnaldo Carvalho de Melo , Mike Galbraith , Paul Mackerras , Peter Zijlstra , Christoph Hellwig , Ananth N Mavinakayanahalli , Jim Keniston , "Frank Ch. Eigler" Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3820 Lines: 105 2009/10/8 Masami Hiramatsu : > Add perf probe subcommand for kprobe-event setup helper to perf command. > This allows user to define kprobe events by C expressions (C line numbers, > C function names, and C local variables). > > Usage > ----- > ?perf probe [] -P 'PROBEDEF' [-P 'PROBEDEF' ...] > > ? ?-k, --vmlinux ?vmlinux/module pathname > ? ?-P, --probe > ? ? ? ? ? ? ? ? ? ? ? ? ?probe point definition, where > ? ? ? ? ? ? ? ?p: ? ? ?kprobe probe > ? ? ? ? ? ? ? ?r: ? ? ?kretprobe probe > ? ? ? ? ? ? ? ?GRP: ? ?Group name (optional) > ? ? ? ? ? ? ? ?NAME: ? Event name > ? ? ? ? ? ? ? ?FUNC: ? Function name > ? ? ? ? ? ? ? ?OFFS: ? Offset from function entry (in byte) > ? ? ? ? ? ? ? ?SRC: ? ?Source code path > ? ? ? ? ? ? ? ?LINE: ? Line number > ? ? ? ? ? ? ? ?ARG: ? ?Probe argument (local variable name or > ? ? ? ? ? ? ? ? ? ? ? ?kprobe-tracer argument format is supported.) > > Changes in v4: > ?- Add _GNU_SOURCE macro for strndup(). > > Changes in v3: > ?- Remove -r option because perf always be used for online kernel. > ?- Check malloc/calloc results. > > Changes in v2: > ?- Check synthesized string length. > ?- Rename perf kprobe to perf probe. > ?- Use spaces for separator and update usage comment. > ?- Check error paths in parse_probepoint(). > ?- Check optimized-out variables. > > Signed-off-by: Masami Hiramatsu > Cc: Frederic Weisbecker > Cc: Ingo Molnar > Cc: Thomas Gleixner > Cc: Arnaldo Carvalho de Melo > Cc: Steven Rostedt > Cc: Mike Galbraith > Cc: Paul Mackerras > Cc: Peter Zijlstra > Cc: Christoph Hellwig > Cc: Ananth N Mavinakayanahalli > Cc: Jim Keniston > Cc: Frank Ch. Eigler > --- > [...] > +/* Default vmlinux search paths */ > +#define NR_SEARCH_PATH 3 > +const char *default_search_path[NR_SEARCH_PATH] = { > +"/lib/modules/%s/build/vmlinux", ? ? ? ? ? ? ? /* Custom build kernel */ > +"/usr/lib/debug/lib/modules/%s/vmlinux", ? ? ? /* Red Hat debuginfo */ > +"/boot/vmlinux-debug-%s", ? ? ? ? ? ? ? ? ? ? ?/* Ubuntu */ > +}; [...] > +static int open_default_vmlinux(void) > +{ > + ? ? ? struct utsname uts; > + ? ? ? char fname[MAX_PATH_LEN]; > + ? ? ? int fd, ret, i; > + > + ? ? ? ret = uname(&uts); > + ? ? ? if (ret) { > + ? ? ? ? ? ? ? debug("uname() failed.\n"); > + ? ? ? ? ? ? ? return -errno; > + ? ? ? } > + ? ? ? session.release = uts.release; > + ? ? ? for (i = 0; i < NR_SEARCH_PATH; i++) { > + ? ? ? ? ? ? ? ret = snprintf(fname, MAX_PATH_LEN, > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?default_search_path[i], session.release); > + ? ? ? ? ? ? ? if (ret >= MAX_PATH_LEN || ret < 0) { > + ? ? ? ? ? ? ? ? ? ? ? debug("Filename(%d,%s) is too long.\n", i, uts.release); > + ? ? ? ? ? ? ? ? ? ? ? errno = E2BIG; > + ? ? ? ? ? ? ? ? ? ? ? return -E2BIG; > + ? ? ? ? ? ? ? } > + ? ? ? ? ? ? ? debug("try to open %s\n", fname); > + ? ? ? ? ? ? ? fd = open(fname, O_RDONLY); > + ? ? ? ? ? ? ? if (fd >= 0) > + ? ? ? ? ? ? ? ? ? ? ? break; > + ? ? ? } > + ? ? ? return fd; > +} We have a kind of kernel path finder already inside perf. It might be encapsulated inside the load_kernel() helper, I don't remember exactly. It would be better to make use of such centralized and already existing facility. The patchset looks good. I'll apply and push it soon. Thanks a lot! -- 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/