From: Masami Hiramatsu <mhiramat@kernel.org> To: Arnaldo Carvalho de Melo <acme@kernel.org> Cc: Masami Hiramatsu <mhiramat@kernel.org>, linux-kernel@vger.kernel.org, Jiri Olsa <jolsa@redhat.com>, Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>, Namhyung Kim <namhyung@kernel.org> Subject: [PATCH perf/core v2 2/4] perf-probe: Add error checks to offline probe post-processing Date: Wed, 11 Jan 2017 15:00:47 +0900 [thread overview] Message-ID: <148411443738.9978.4617979132625405545.stgit@devbox> (raw) In-Reply-To: <148411429514.9978.10060675441541429175.stgit@devbox> Add error check codes to post process and improve it for offline probe events as; - post process fails if no matched symbol found in map(-ENOENT) or strdup() failed(-ENOMEM). - Even if the symbol name is same, it updates symbol address and offset. Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> --- tools/perf/util/probe-event.c | 50 +++++++++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index 4a57c8a..aa8a922 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c @@ -610,6 +610,33 @@ static int find_perf_probe_point_from_dwarf(struct probe_trace_point *tp, return ret ? : -ENOENT; } +/* Adjust symbol name and address */ +static int post_process_probe_trace_point(struct probe_trace_point *tp, + struct map *map, unsigned long offs) +{ + struct symbol *sym; + u64 addr = tp->address + tp->offset - offs; + + sym = map__find_symbol(map, addr); + if (!sym) + return -ENOENT; + + if (strcmp(sym->name, tp->symbol)) { + /* If we have no realname, use symbol for it */ + if (!tp->realname) + tp->realname = tp->symbol; + else + free(tp->symbol); + tp->symbol = strdup(sym->name); + if (!tp->symbol) + return -ENOMEM; + } + tp->offset = addr - sym->start; + tp->address -= offs; + + return 0; +} + /* * Rename DWARF symbols to ELF symbols -- gcc sometimes optimizes functions * and generate new symbols with suffixes such as .constprop.N or .isra.N @@ -622,11 +649,9 @@ static int post_process_offline_probe_trace_events(struct probe_trace_event *tevs, int ntevs, const char *pathname) { - struct symbol *sym; struct map *map; unsigned long stext = 0; - u64 addr; - int i; + int i, ret = 0; /* Prepare a map for offline binary */ map = dso__new_map(pathname); @@ -636,23 +661,14 @@ post_process_offline_probe_trace_events(struct probe_trace_event *tevs, } for (i = 0; i < ntevs; i++) { - addr = tevs[i].point.address + tevs[i].point.offset - stext; - sym = map__find_symbol(map, addr); - if (!sym) - continue; - if (!strcmp(sym->name, tevs[i].point.symbol)) - continue; - /* If we have no realname, use symbol for it */ - if (!tevs[i].point.realname) - tevs[i].point.realname = tevs[i].point.symbol; - else - free(tevs[i].point.symbol); - tevs[i].point.symbol = strdup(sym->name); - tevs[i].point.offset = addr - sym->start; + ret = post_process_probe_trace_point(&tevs[i].point, + map, stext); + if (ret < 0) + break; } map__put(map); - return 0; + return ret; } static int add_exec_to_probe_trace_events(struct probe_trace_event *tevs,
next prev parent reply other threads:[~2017-01-11 6:01 UTC|newest] Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-01-11 5:58 [PATCH perf/core v2 0/4] perf-probe: Fix and improve module probe events Masami Hiramatsu 2017-01-11 5:59 ` [PATCH perf/core v2 1/4] perf-probe: Fix to show correct locations for events on modules Masami Hiramatsu 2017-01-16 18:32 ` Arnaldo Carvalho de Melo 2017-01-18 9:22 ` [tip:perf/urgent] perf probe: " tip-bot for Masami Hiramatsu 2017-01-11 6:00 ` Masami Hiramatsu [this message] 2017-01-18 9:22 ` [tip:perf/urgent] perf probe: Add error checks to offline probe post-processing tip-bot for Masami Hiramatsu 2017-01-11 6:01 ` [PATCH perf/core v2 3/4] perf-probe: Fix to probe on gcc generated functions in modules Masami Hiramatsu 2017-01-18 9:23 ` [tip:perf/urgent] perf probe: " tip-bot for Masami Hiramatsu 2017-01-11 6:03 ` [PATCH perf/core v2 4/4] perf-probe: Find probe events without target module Masami Hiramatsu 2017-01-16 18:44 ` Arnaldo Carvalho de Melo 2017-01-16 22:21 ` Masami Hiramatsu 2017-01-16 8:08 ` [PATCH perf/core v2 0/4] perf-probe: Fix and improve module probe events 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=148411443738.9978.4617979132625405545.stgit@devbox \ --to=mhiramat@kernel.org \ --cc=acme@kernel.org \ --cc=jolsa@redhat.com \ --cc=linux-kernel@vger.kernel.org \ --cc=mingo@redhat.com \ --cc=namhyung@kernel.org \ --cc=peterz@infradead.org \ --subject='Re: [PATCH perf/core v2 2/4] perf-probe: Add error checks to offline probe post-processing' \ /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 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.