All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Borislav Petkov <bp@suse.de>, David Ahern <dsahern@gmail.com>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	Stephane Eranian <eranian@google.com>
Subject: [PATCH 02/22] perf annotate: Reset the dso find_symbol cache when removing symbols
Date: Wed, 26 Aug 2015 12:57:52 -0300	[thread overview]
Message-ID: <1440604692-26918-3-git-send-email-acme@kernel.org> (raw)
In-Reply-To: <1440604692-26918-1-git-send-email-acme@kernel.org>

From: Arnaldo Carvalho de Melo <acme@redhat.com>

The 'annotate' tool does some filtering in the entries in a DSO but
forgot to reset the cache done in dso__find_symbol(), cauxing a SEGV:

  [root@zoo ~]# perf annotate netlink_poll
  perf: Segmentation fault
  -------- backtrace --------
  perf[0x526ceb]
  /lib64/libc.so.6(+0x34960)[0x7faedfbe0960]
  perf(rb_erase+0x223)[0x499d63]
  perf[0x4213e9]
  perf[0x4bc123]
  perf[0x4bc621]
  perf[0x4bf26b]
  perf[0x4bc855]
  perf(perf_session__process_events+0x340)[0x4bddc0]
  perf(cmd_annotate+0x6bb)[0x421b5b]
  perf[0x479063]
  perf(main+0x60a)[0x42098a]
  /lib64/libc.so.6(__libc_start_main+0xf0)[0x7faedfbcbfe0]
  perf[0x420aa9]
  [0x0]
  [root@zoo ~]#

Fix it by reseting the find cache when removing symbols.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Fixes: b685ac22b436 ("perf symbols: Add front end cache for DSO symbol lookup")
Link: http://lkml.kernel.org/n/tip-b2y9x46y0t8yem1ive41zqyp@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-annotate.c |  1 +
 tools/perf/util/dso.h         |  2 ++
 tools/perf/util/symbol.c      | 10 ++++++++++
 3 files changed, 13 insertions(+)

diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
index a32a64ef08e2..8edc205ff9a7 100644
--- a/tools/perf/builtin-annotate.c
+++ b/tools/perf/builtin-annotate.c
@@ -67,6 +67,7 @@ static int perf_evsel__add_sample(struct perf_evsel *evsel,
 			rb_erase(&al->sym->rb_node,
 				 &al->map->dso->symbols[al->map->type]);
 			symbol__delete(al->sym);
+			dso__reset_find_symbol_cache(al->map->dso);
 		}
 		return 0;
 	}
diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h
index c73276db6d6f..fc8db9c764ac 100644
--- a/tools/perf/util/dso.h
+++ b/tools/perf/util/dso.h
@@ -324,6 +324,8 @@ struct dso *__dsos__findnew(struct dsos *dsos, const char *name);
 struct dso *dsos__findnew(struct dsos *dsos, const char *name);
 bool __dsos__read_build_ids(struct list_head *head, bool with_hits);
 
+void dso__reset_find_symbol_cache(struct dso *dso);
+
 size_t __dsos__fprintf_buildid(struct list_head *head, FILE *fp,
 			       bool (skip)(struct dso *dso, int parm), int parm);
 size_t __dsos__fprintf(struct list_head *head, FILE *fp);
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 42e98ab5a9bb..46ae0532a8a6 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -441,6 +441,16 @@ static struct symbol *symbols__find_by_name(struct rb_root *symbols,
 	return &s->sym;
 }
 
+void dso__reset_find_symbol_cache(struct dso *dso)
+{
+	enum map_type type;
+
+	for (type = MAP__FUNCTION; type <= MAP__VARIABLE; ++type) {
+		dso->last_find_result[type].addr   = 0;
+		dso->last_find_result[type].symbol = NULL;
+	}
+}
+
 struct symbol *dso__find_symbol(struct dso *dso,
 				enum map_type type, u64 addr)
 {
-- 
2.1.0


  parent reply	other threads:[~2015-08-26 15:58 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-26 15:57 [GIT PULL 00/22] perf/core improvements and fixes Arnaldo Carvalho de Melo
2015-08-26 15:57 ` [PATCH 01/22] perf tools: Fix tarball build broken by pt/bts Arnaldo Carvalho de Melo
2015-08-26 15:57 ` Arnaldo Carvalho de Melo [this message]
2015-08-26 15:57 ` [PATCH 03/22] perf ui tui progress: Implement the ui_progress_ops->finish() method Arnaldo Carvalho de Melo
2015-08-26 15:57 ` [PATCH 04/22] perf ordered_events: Clear the progress bar at the end of a flush Arnaldo Carvalho de Melo
2015-08-26 15:57 ` [PATCH 05/22] perf tools: Fix Intel PT 'instructions' sample period Arnaldo Carvalho de Melo
2015-08-26 15:57 ` [PATCH 06/22] perf tools: Add Intel PT support for PSB periods Arnaldo Carvalho de Melo
2015-08-26 15:57 ` [PATCH 07/22] perf tools: Add new Intel PT packet definitions Arnaldo Carvalho de Melo
2015-08-26 15:57 ` [PATCH 08/22] perf tools: Pass Intel PT information for decoding MTC and CYC Arnaldo Carvalho de Melo
2015-08-26 15:57 ` [PATCH 09/22] perf tools: Add Intel PT support for decoding MTC packets Arnaldo Carvalho de Melo
2015-08-26 15:58 ` [PATCH 10/22] perf tools: Add Intel PT support for using " Arnaldo Carvalho de Melo
2015-08-26 15:58 ` [PATCH 11/22] perf tools: Add Intel PT support for decoding CYC packets Arnaldo Carvalho de Melo
2015-08-26 15:58 ` [PATCH 12/22] perf tools: Add Intel PT support for using " Arnaldo Carvalho de Melo
2015-08-26 15:58 ` [PATCH 13/22] perf tools: Add Intel PT support for decoding TRACESTOP packets Arnaldo Carvalho de Melo
2015-08-26 15:58 ` [PATCH 14/22] perf tools: Update Intel PT documentation Arnaldo Carvalho de Melo
2015-08-26 15:58 ` [PATCH 15/22] perf probe: Prevent segfault when reading probe point with absolute address Arnaldo Carvalho de Melo
2015-08-26 15:58 ` [PATCH 16/22] perf tools: Remove export.h from MANIFEST Arnaldo Carvalho de Melo
2015-08-26 15:58 ` [PATCH 17/22] tools build: Allow duplicate objects in the object list Arnaldo Carvalho de Melo
2015-08-26 15:58 ` [PATCH 18/22] perf probe: Fix list result when symbol can't be found Arnaldo Carvalho de Melo
2015-08-26 15:58 ` [PATCH 19/22] perf probe: Fix list result when address is zero Arnaldo Carvalho de Melo
2015-08-26 15:58 ` [PATCH 20/22] perf probe: Fix error reported when offset without function Arnaldo Carvalho de Melo
2015-08-26 15:58 ` [PATCH 21/22] perf probe: Support probing at absolute address Arnaldo Carvalho de Melo
2015-08-26 15:58 ` [PATCH 22/22] tracing/uprobes: Do not print '0x (null)' when offset is 0 Arnaldo Carvalho de Melo
2015-08-28  6:24 ` [GIT PULL 00/22] perf/core improvements and fixes Ingo Molnar

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=1440604692-26918-3-git-send-email-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=adrian.hunter@intel.com \
    --cc=bp@suse.de \
    --cc=dsahern@gmail.com \
    --cc=eranian@google.com \
    --cc=fweisbec@gmail.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.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.