linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: tip-bot for Masami Hiramatsu <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: acme@redhat.com, namhyung@kernel.org, peterz@infradead.org,
	mhiramat@kernel.org, mingo@kernel.org, tglx@linutronix.de,
	linux-kernel@vger.kernel.org, hemant@linux.vnet.ibm.com,
	brendan.d.gregg@gmail.com, ananth@linux.vnet.ibm.com,
	hpa@zytor.com
Subject: [tip:perf/core] perf probe: Add perf_probe_event__copy()
Date: Thu, 16 Jun 2016 01:33:07 -0700	[thread overview]
Message-ID: <tip-0542bb9c8da51faa8d8703c394c32e334ac4e9d6@git.kernel.org> (raw)
In-Reply-To: <20160608092940.3116.18034.stgit@devbox>

Commit-ID:  0542bb9c8da51faa8d8703c394c32e334ac4e9d6
Gitweb:     http://git.kernel.org/tip/0542bb9c8da51faa8d8703c394c32e334ac4e9d6
Author:     Masami Hiramatsu <mhiramat@kernel.org>
AuthorDate: Wed, 8 Jun 2016 18:29:40 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 14 Jun 2016 09:29:54 -0300

perf probe: Add perf_probe_event__copy()

Add perf_probe_event__copy() to copy perf_probe_event data structure and
sub data structures under given source perf_probe_event.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
Cc: Hemant Kumar <hemant@linux.vnet.ibm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20160608092940.3116.18034.stgit@devbox
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/probe-event.c | 76 +++++++++++++++++++++++++++++++++++++++++--
 tools/perf/util/probe-event.h |  3 ++
 2 files changed, 76 insertions(+), 3 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 7ae3dd1..84f4b2b3 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -2030,6 +2030,79 @@ void clear_perf_probe_event(struct perf_probe_event *pev)
 	memset(pev, 0, sizeof(*pev));
 }
 
+#define strdup_or_goto(str, label)	\
+({ char *__p = NULL; if (str && !(__p = strdup(str))) goto label; __p; })
+
+static int perf_probe_point__copy(struct perf_probe_point *dst,
+				  struct perf_probe_point *src)
+{
+	dst->file = strdup_or_goto(src->file, out_err);
+	dst->function = strdup_or_goto(src->function, out_err);
+	dst->lazy_line = strdup_or_goto(src->lazy_line, out_err);
+	dst->line = src->line;
+	dst->retprobe = src->retprobe;
+	dst->offset = src->offset;
+	return 0;
+
+out_err:
+	clear_perf_probe_point(dst);
+	return -ENOMEM;
+}
+
+static int perf_probe_arg__copy(struct perf_probe_arg *dst,
+				struct perf_probe_arg *src)
+{
+	struct perf_probe_arg_field *field, **ppfield;
+
+	dst->name = strdup_or_goto(src->name, out_err);
+	dst->var = strdup_or_goto(src->var, out_err);
+	dst->type = strdup_or_goto(src->type, out_err);
+
+	field = src->field;
+	ppfield = &(dst->field);
+	while (field) {
+		*ppfield = zalloc(sizeof(*field));
+		if (!*ppfield)
+			goto out_err;
+		(*ppfield)->name = strdup_or_goto(field->name, out_err);
+		(*ppfield)->index = field->index;
+		(*ppfield)->ref = field->ref;
+		field = field->next;
+		ppfield = &((*ppfield)->next);
+	}
+	return 0;
+out_err:
+	return -ENOMEM;
+}
+
+int perf_probe_event__copy(struct perf_probe_event *dst,
+			   struct perf_probe_event *src)
+{
+	int i;
+
+	dst->event = strdup_or_goto(src->event, out_err);
+	dst->group = strdup_or_goto(src->group, out_err);
+	dst->target = strdup_or_goto(src->target, out_err);
+	dst->uprobes = src->uprobes;
+
+	if (perf_probe_point__copy(&dst->point, &src->point) < 0)
+		goto out_err;
+
+	dst->args = zalloc(sizeof(struct perf_probe_arg) * src->nargs);
+	if (!dst->args)
+		goto out_err;
+	dst->nargs = src->nargs;
+
+	for (i = 0; i < src->nargs; i++)
+		if (perf_probe_arg__copy(&dst->args[i], &src->args[i]) < 0)
+			goto out_err;
+	return 0;
+
+out_err:
+	clear_perf_probe_event(dst);
+	return -ENOMEM;
+}
+
 void clear_probe_trace_event(struct probe_trace_event *tev)
 {
 	struct probe_trace_arg_ref *ref, *next;
@@ -2505,9 +2578,6 @@ static int find_probe_functions(struct map *map, char *name,
 	return found;
 }
 
-#define strdup_or_goto(str, label)	\
-	({ char *__p = strdup(str); if (!__p) goto label; __p; })
-
 void __weak arch__fix_tev_from_maps(struct perf_probe_event *pev __maybe_unused,
 				struct probe_trace_event *tev __maybe_unused,
 				struct map *map __maybe_unused,
diff --git a/tools/perf/util/probe-event.h b/tools/perf/util/probe-event.h
index 5a27eb4..367f886 100644
--- a/tools/perf/util/probe-event.h
+++ b/tools/perf/util/probe-event.h
@@ -122,6 +122,9 @@ char *synthesize_perf_probe_command(struct perf_probe_event *pev);
 char *synthesize_probe_trace_command(struct probe_trace_event *tev);
 char *synthesize_perf_probe_arg(struct perf_probe_arg *pa);
 
+int perf_probe_event__copy(struct perf_probe_event *dst,
+			   struct perf_probe_event *src);
+
 /* Check the perf_probe_event needs debuginfo */
 bool perf_probe_event_need_dwarf(struct perf_probe_event *pev);
 

  reply	other threads:[~2016-06-16  8:33 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-08  9:29 [PATCH perf/core v10 00/23] perf-probe --cache and SDT support Masami Hiramatsu
2016-06-08  9:29 ` [PATCH perf/core v10 01/23] perf: util: Fix rm_rf() to handle non-regular files correctly Masami Hiramatsu
2016-06-16  8:31   ` [tip:perf/core] perf tools: " tip-bot for Masami Hiramatsu
2016-06-08  9:29 ` [PATCH perf/core v10 02/23] perf-probe: Fix to add NULL check for strndup Masami Hiramatsu
2016-06-16  8:32   ` [tip:perf/core] perf probe: " tip-bot for Masami Hiramatsu
2016-06-08  9:29 ` [PATCH perf/core v10 03/23] perf-buildid: Rename and export build_id_cache__cachedir() Masami Hiramatsu
2016-06-16  8:32   ` [tip:perf/core] perf buildid: " tip-bot for Masami Hiramatsu
2016-06-08  9:29 ` [PATCH perf/core v10 04/23] perf probe: Add perf_probe_event__copy() Masami Hiramatsu
2016-06-16  8:33   ` tip-bot for Masami Hiramatsu [this message]
2016-06-08  9:29 ` [PATCH perf/core v10 05/23] perf probe: Recover and export synthesize_perf_probe_point() Masami Hiramatsu
2016-06-16  8:33   ` [tip:perf/core] perf probe: Uncomment " tip-bot for Masami Hiramatsu
2016-06-08  9:29 ` [PATCH perf/core v10 06/23] perf probe-file: Introduce perf_cache interfaces Masami Hiramatsu
2016-06-09 14:16   ` Arnaldo Carvalho de Melo
2016-06-10 22:18     ` Masami Hiramatsu
2016-06-08  9:30 ` [PATCH perf/core v10 07/23] perf probe: Add --cache option to cache the probe definitions Masami Hiramatsu
2016-06-09 14:18   ` Arnaldo Carvalho de Melo
2016-06-10 23:32     ` Masami Hiramatsu
2016-06-08  9:30 ` [PATCH perf/core v10 08/23] perf probe: Use cache entry if possible Masami Hiramatsu
2016-06-08  9:30 ` [PATCH perf/core v10 09/23] perf probe: Show all cached probes Masami Hiramatsu
2016-06-09 14:22   ` Arnaldo Carvalho de Melo
2016-06-11  0:28     ` Masami Hiramatsu
2016-06-12  3:20       ` Masami Hiramatsu
2016-06-08  9:30 ` [PATCH perf/core v10 10/23] perf probe: Remove caches when --cache is given Masami Hiramatsu
2016-06-09 14:28   ` Arnaldo Carvalho de Melo
2016-06-11  1:17     ` Masami Hiramatsu
2016-06-08  9:30 ` [PATCH perf/core v10 11/23] perf/sdt: ELF support for SDT Masami Hiramatsu
2016-06-08  9:31 ` [PATCH perf/core v10 12/23] perf probe: Add group name support Masami Hiramatsu
2016-06-08  9:31 ` [PATCH perf/core v10 13/23] perf buildid-cache: Scan and import user SDT events to probe cache Masami Hiramatsu
2016-06-08  9:31 ` [PATCH perf/core v10 14/23] perf probe: Accept %sdt and %cached event name Masami Hiramatsu
2016-06-08  9:31 ` [PATCH perf/core v10 15/23] perf-list: Show SDT and pre-cached events Masami Hiramatsu
2016-06-08  9:31 ` [PATCH perf/core v10 16/23] perf-list: Skip SDTs placed in invalid binaries Masami Hiramatsu
2016-06-08  9:31 ` [PATCH perf/core v10 17/23] perf: probe-cache: Add for_each_probe_cache_entry() wrapper Masami Hiramatsu
2016-06-08  9:31 ` [PATCH perf/core v10 18/23] perf probe: Allow wildcard for cached events Masami Hiramatsu
2016-06-08  9:32 ` [PATCH perf/core v10 19/23] perf probe: Search SDT/cached event from all probe caches Masami Hiramatsu
2016-06-08  9:32 ` [PATCH perf/core v10 20/23] perf probe: Support @BUILDID or @FILE suffix for SDT events Masami Hiramatsu
2016-06-08  9:32 ` [PATCH perf/core v10 21/23] perf probe: Support a special SDT probe format Masami Hiramatsu
2016-06-08  9:32 ` [PATCH perf/core v10 22/23] perf build: Add sdt feature detection Masami Hiramatsu
2016-06-08  9:32 ` [PATCH perf/core v10 23/23] perf-test: Add a test case for SDT event Masami Hiramatsu
2016-06-08 11:13 ` [PATCH perf/core v10 00/23] perf-probe --cache and SDT support Masami Hiramatsu
2016-06-08 11:15 ` [PATCH perf/core v10 22/23] perf build: Add sdt feature detection Masami Hiramatsu
2016-06-08 11:16 ` [PATCH perf/core v10 23/23] perf-test: Add a test case for SDT event Masami Hiramatsu

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=tip-0542bb9c8da51faa8d8703c394c32e334ac4e9d6@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=acme@redhat.com \
    --cc=ananth@linux.vnet.ibm.com \
    --cc=brendan.d.gregg@gmail.com \
    --cc=hemant@linux.vnet.ibm.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --subject='Re: [tip:perf/core] perf probe: Add perf_probe_event__copy()' \
    /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

This is a public inbox, see mirroring instructions
on how to clone and mirror all data and code used for this inbox