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, Chris Phlipot <cphlipot0@gmail.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 02/13] perf symbols: Add dso__insert_symbol function
Date: Wed, 11 May 2016 13:32:43 -0300	[thread overview]
Message-ID: <1462984374-11067-3-git-send-email-acme@kernel.org> (raw)
In-Reply-To: <1462984374-11067-1-git-send-email-acme@kernel.org>

From: Chris Phlipot <cphlipot0@gmail.com>

The current method for inserting symbols is to use the symbols__insert()
function. However symbols__insert() does not update the dso symbol
cache.  This causes problems in the following scenario:

1. symbol not found at addr using dso__find_symbol

2. symbol inserted at addr using the existing symbols__insert function

3. symbol still not found at addr using dso__find_symbol() because cache isn't
   updated. This is undesired behavior.

The undesired behavior in (3) is addressed by creating a new function,
dso__insert_symbol() to both insert the symbol and update the symbol
cache if necessary.

If dso__insert_symbol() is used in (2) instead of symbols__insert(),
then the undesired behavior in (3) is avoided.

Signed-off-by: Chris Phlipot <cphlipot0@gmail.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1462937209-6032-2-git-send-email-cphlipot0@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/symbol.c | 12 ++++++++++++
 tools/perf/util/symbol.h |  3 +++
 2 files changed, 15 insertions(+)

diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 2946295ca502..21af8e8891fe 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -413,6 +413,18 @@ void dso__reset_find_symbol_cache(struct dso *dso)
 	}
 }
 
+void dso__insert_symbol(struct dso *dso, enum map_type type, struct symbol *sym)
+{
+	symbols__insert(&dso->symbols[type], sym);
+
+	/* update the symbol cache if necessary */
+	if (dso->last_find_result[type].addr >= sym->start &&
+	    (dso->last_find_result[type].addr < sym->end ||
+	    sym->start == sym->end)) {
+		dso->last_find_result[type].symbol = sym;
+	}
+}
+
 struct symbol *dso__find_symbol(struct dso *dso,
 				enum map_type type, u64 addr)
 {
diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h
index 07211c2f8456..2b5e4ed76fcb 100644
--- a/tools/perf/util/symbol.h
+++ b/tools/perf/util/symbol.h
@@ -246,6 +246,9 @@ int __dso__load_kallsyms(struct dso *dso, const char *filename, struct map *map,
 int dso__load_kallsyms(struct dso *dso, const char *filename, struct map *map,
 		       symbol_filter_t filter);
 
+void dso__insert_symbol(struct dso *dso, enum map_type type,
+			struct symbol *sym);
+
 struct symbol *dso__find_symbol(struct dso *dso, enum map_type type,
 				u64 addr);
 struct symbol *dso__find_symbol_by_name(struct dso *dso, enum map_type type,
-- 
2.5.5

  parent reply	other threads:[~2016-05-11 16:33 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-11 16:32 [GIT PULL 00/13] perf/core improvements and fixes Arnaldo Carvalho de Melo
2016-05-11 16:32 ` [PATCH 01/13] perf scripting python: Use Py_FatalError instead of die() Arnaldo Carvalho de Melo
2016-05-11 16:32 ` Arnaldo Carvalho de Melo [this message]
2016-05-11 16:32 ` [PATCH 03/13] perf script: Fix symbol insertion behavior in db-export Arnaldo Carvalho de Melo
2016-05-11 16:32 ` [PATCH 04/13] perf script: Fix callchain addresses " Arnaldo Carvalho de Melo
2016-05-11 16:32 ` [PATCH 05/13] perf script: Fix export of callchains with recursion " Arnaldo Carvalho de Melo
2016-05-11 16:32 ` [PATCH 06/13] perf build: Add build-test for libunwind cross-platforms support Arnaldo Carvalho de Melo
2016-05-11 16:32 ` [PATCH 07/13] perf build: Add build-test for debug-frame on arm/arm64 Arnaldo Carvalho de Melo
2016-05-11 16:32 ` [PATCH 08/13] perf trace: Move flock op beautifier to tools/perf/trace/beauty/ Arnaldo Carvalho de Melo
2016-05-11 16:32 ` [PATCH 09/13] perf trace: Move seccomp args beautifiers " Arnaldo Carvalho de Melo
2016-05-11 16:32 ` [PATCH 10/13] perf tools: Fix lsdir to set errno correctly Arnaldo Carvalho de Melo
2016-05-11 16:32 ` [PATCH 11/13] perf tools: Use SBUILD_ID_SIZE where applicable Arnaldo Carvalho de Melo
2016-05-11 16:32 ` [PATCH 12/13] perf symbols: Use lsdir() for the search in kcore cache directory Arnaldo Carvalho de Melo
2016-05-11 16:32 ` [PATCH 13/13] perf buildid-cache: Use lsdir() for looking up buildid caches Arnaldo Carvalho de Melo
2016-05-12  6:58 ` [GIT PULL 00/13] 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=1462984374-11067-3-git-send-email-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=adrian.hunter@intel.com \
    --cc=cphlipot0@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.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.