All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>,
	linux-kernel@vger.kernel.org,
	Adrian Hunter <adrian.hunter@intel.com>,
	Ingo Molnar <mingo@redhat.com>, Paul Mackerras <paulus@samba.org>,
	Jiri Olsa <jolsa@kernel.org>, Namhyung Kim <namhyung@kernel.org>,
	Borislav Petkov <bp@suse.de>,
	Hemant Kumar <hemant@linux.vnet.ibm.com>
Subject: [RFC PATCH perf/core v3 15/17] perf-list: Show SDT events
Date: Sat, 15 Aug 2015 20:43:25 +0900	[thread overview]
Message-ID: <20150815114325.13642.39416.stgit@localhost.localdomain> (raw)
In-Reply-To: <20150815114252.13642.62690.stgit@localhost.localdomain>

Show SDT events by perf-list as below.

  ----
  # perf list sdt | head -n 7

  List of pre-defined events (to be used in -e):

    sdt_libc:lll_futex_wake                            [SDT event]
    sdt_libc:lll_lock_wait_private                     [SDT event]
    sdt_libc:longjmp                                   [SDT event]
    sdt_libc:longjmp_target                            [SDT event]
  ----

Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
---
 tools/perf/builtin-list.c      |    3 +
 tools/perf/util/parse-events.c |   83 ++++++++++++++++++++++++++++++++++++++++
 tools/perf/util/parse-events.h |    2 +
 3 files changed, 88 insertions(+)

diff --git a/tools/perf/builtin-list.c b/tools/perf/builtin-list.c
index af5bd05..85331e1 100644
--- a/tools/perf/builtin-list.c
+++ b/tools/perf/builtin-list.c
@@ -60,6 +60,8 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
 			print_hwcache_events(NULL, raw_dump);
 		else if (strcmp(argv[i], "pmu") == 0)
 			print_pmu_events(NULL, raw_dump);
+		else if (strcmp(argv[i], "sdt") == 0)
+			print_sdt_events(NULL, NULL, raw_dump);
 		else {
 			char *sep = strchr(argv[i], ':'), *s;
 			int sep_idx;
@@ -75,6 +77,7 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
 
 			s[sep_idx] = '\0';
 			print_tracepoint_events(s, s + sep_idx + 1, raw_dump);
+			print_sdt_events(s, s + sep_idx + 1, raw_dump);
 			free(s);
 		}
 	}
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index d826e6f..485dbdc 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -5,6 +5,7 @@
 #include "evsel.h"
 #include "parse-options.h"
 #include "parse-events.h"
+#include "probe-file.h"
 #include "exec_cmd.h"
 #include "string.h"
 #include "symbol.h"
@@ -1519,6 +1520,86 @@ static bool is_event_supported(u8 type, unsigned config)
 	return ret;
 }
 
+void print_sdt_events(const char *subsys_glob, const char *event_glob,
+		      bool name_only)
+{
+	struct probe_cache *pcache;
+	struct probe_cache_entry *ent;
+	struct strlist *bidlist, *sdtlist;
+	struct strlist_config cfg = {.dont_dupstr = true};
+	struct str_node *nd, *nd2;
+	char *buf, *path, *ptr = NULL;
+	bool show_detail = false;
+	int ret;
+
+	sdtlist = strlist__new(NULL, &cfg);
+	if (!sdtlist) {
+		pr_debug("Failed to allocate new strlist for SDT\n");
+		return;
+	}
+	ret = build_id_cache__list_all(&bidlist);
+	if (ret < 0) {
+		pr_debug("Failed to get buildids: %d\n", ret);
+		return;
+	}
+	strlist__for_each(nd, bidlist) {
+		pcache = probe_cache__new(nd->s);
+		if (!pcache)
+			continue;
+		if (!list_empty(&pcache->list))
+			list_for_each_entry(ent, &pcache->list, list) {
+				if (!ent->sdt)
+					continue;
+				if (subsys_glob &&
+				    !strglobmatch(ent->pev.group, subsys_glob))
+					continue;
+				if (event_glob &&
+				    !strglobmatch(ent->pev.event, event_glob))
+					continue;
+				ret = asprintf(&buf, "%s:%s@%s", ent->pev.group,
+						ent->pev.event, nd->s);
+				if (ret > 0)
+					strlist__add(sdtlist, buf);
+			}
+		probe_cache__delete(pcache);
+	}
+	strlist__delete(bidlist);
+
+	strlist__for_each(nd, sdtlist) {
+		buf = strchr(nd->s, '@');
+		if (buf)
+			*buf = '\0';
+		if (name_only) {
+			printf("%s ", nd->s);
+			continue;
+		}
+		nd2 = strlist__next(nd);
+		if (nd2) {
+			ptr = strchr(nd2->s, '@');
+			if (ptr)
+				*ptr = '\0';
+			if (strcmp(nd->s, nd2->s) == 0)
+				show_detail = true;
+		}
+		if (show_detail) {
+			path = build_id_cache__origname(buf + 1);
+			ret = asprintf(&buf, "%s@%s@0x%.12s", nd->s, path, buf + 1);
+			if (ret > 0) {
+				printf("  %-50s [%s]\n", buf, "SDT event");
+				free(buf);
+			}
+		} else
+			printf("  %-50s [%s]\n", nd->s, "SDT event");
+		if (nd2) {
+			if (strcmp(nd->s, nd2->s) != 0)
+				show_detail = false;
+			if (ptr)
+				*ptr = '@';
+		}
+	}
+	strlist__delete(sdtlist);
+}
+
 int print_hwcache_events(const char *event_glob, bool name_only)
 {
 	unsigned int type, op, i, evt_i = 0, evt_num = 0;
@@ -1700,6 +1781,8 @@ void print_events(const char *event_glob, bool name_only)
 	}
 
 	print_tracepoint_events(NULL, NULL, name_only);
+
+	print_sdt_events(NULL, NULL, name_only);
 }
 
 int parse_events__is_hardcoded_term(struct parse_events_term *term)
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
index a09b0e2..5dc631d 100644
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h
@@ -151,6 +151,8 @@ void print_symbol_events(const char *event_glob, unsigned type,
 				bool name_only);
 void print_tracepoint_events(const char *subsys_glob, const char *event_glob,
 			     bool name_only);
+void print_sdt_events(const char *subsys_glob, const char *event_glob,
+		      bool name_only);
 int print_hwcache_events(const char *event_glob, bool name_only);
 extern int is_valid_tracepoint(const char *event_string);
 


  parent reply	other threads:[~2015-08-15 11:49 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-15 11:42 [RFC PATCH perf/core v3 00/17] perf-probe --cache and SDT support Masami Hiramatsu
2015-08-15 11:42 ` [RFC PATCH perf/core v3 01/17] perf probe: Use strbuf for making strings in probe-event.c Masami Hiramatsu
2015-08-28 15:56   ` Arnaldo Carvalho de Melo
2015-08-15 11:42 ` [RFC PATCH perf/core v3 02/17] perf-buildid-cache: Use path/to/bin/buildid/elf instead of path/to/bin/buildid Masami Hiramatsu
2015-08-28 16:07   ` Arnaldo Carvalho de Melo
2015-08-15 11:42 ` [RFC PATCH perf/core v3 03/17] perf buildid: Introduce sysfs/filename__sprintf_build_id Masami Hiramatsu
2015-08-28 16:14   ` Arnaldo Carvalho de Melo
2015-08-31  8:32   ` [tip:perf/core] perf buildid: Introduce sysfs/ filename__sprintf_build_id tip-bot for Masami Hiramatsu
2015-08-15 11:43 ` [RFC PATCH perf/core v3 04/17] perf: Add lsdir to read a directory Masami Hiramatsu
2015-08-15 11:43 ` [RFC PATCH perf/core v3 05/17] perf-buildid-cache: Use lsdir for looking up buildid caches Masami Hiramatsu
2015-08-28 16:17   ` Arnaldo Carvalho de Melo
2015-08-15 11:43 ` [RFC PATCH perf/core v3 06/17] perf probe: Add --cache option to cache the probe definitions Masami Hiramatsu
2015-08-15 11:43 ` [RFC PATCH perf/core v3 07/17] perf probe: Use cache entry if possible Masami Hiramatsu
2015-08-15 11:43 ` [RFC PATCH perf/core v3 08/17] perf probe: Show all cached probes Masami Hiramatsu
2015-08-15 11:43 ` [RFC PATCH perf/core v3 09/17] perf probe: Remove caches when --cache is given Masami Hiramatsu
2015-08-15 11:43 ` [RFC PATCH perf/core v3 10/17] perf/sdt: ELF support for SDT Masami Hiramatsu
2015-08-15 11:43 ` [RFC PATCH perf/core v3 11/17] perf probe: Add group name support Masami Hiramatsu
2015-08-15 11:43 ` [RFC PATCH perf/core v3 12/17] perf-probe: Set default kprobe group name if it is not given Masami Hiramatsu
2015-08-15 11:43 ` [RFC PATCH perf/core v3 13/17] perf buildid-cache: Scan and import user SDT events to probe cache Masami Hiramatsu
2015-08-15 11:43 ` [RFC PATCH perf/core v3 14/17] perf probe: Accept %sdt and %cached event name Masami Hiramatsu
2015-08-15 11:43 ` Masami Hiramatsu [this message]
2015-08-15 11:43 ` [RFC PATCH perf/core v3 16/17] perf-list: Skip SDTs placed in invalid binaries Masami Hiramatsu
2015-08-15 11:43 ` [RFC PATCH perf/core v3 17/17] perf record: Support recording SDT events Masami Hiramatsu
2015-08-19  8:30 ` [RFC PATCH perf/core v3 00/17] perf-probe --cache and SDT support Namhyung Kim
2015-08-19 15:15   ` 平松雅巳 / HIRAMATU,MASAMI

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150815114325.13642.39416.stgit@localhost.localdomain \
    --to=masami.hiramatsu.pt@hitachi.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=bp@suse.de \
    --cc=hemant@linux.vnet.ibm.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=paulus@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.