Commit-ID:  5654997838c2ac9b1950d633fc97f354cc4180e7
Gitweb:     https://git.kernel.org/tip/5654997838c2ac9b1950d633fc97f354cc4180e7
Author:     Adrian Hunter <adrian.hun...@intel.com>
AuthorDate: Wed, 9 May 2018 14:43:34 +0300
Committer:  Arnaldo Carvalho de Melo <a...@redhat.com>
CommitDate: Tue, 15 May 2018 14:31:25 -0300

perf tools: Use the "_stest" symbol to identify the kernel map when loading 
kcore

The first symbol is not necessarily in the kernel text.  Instead of
using the first symbol, use the _stest symbol to identify the kernel map
when loading kcore.

This allows for the introduction of symbols to identify the x86_64 PTI
entry trampolines.

Signed-off-by: Adrian Hunter <adrian.hun...@intel.com>
Cc: Alexander Shishkin <alexander.shish...@linux.intel.com>
Cc: Andi Kleen <a...@linux.intel.com>
Cc: Andy Lutomirski <l...@kernel.org>
Cc: Dave Hansen <dave.han...@linux.intel.com>
Cc: H. Peter Anvin <h...@zytor.com>
Cc: Jiri Olsa <jo...@redhat.com>
Cc: Joerg Roedel <j...@8bytes.org>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Thomas Gleixner <t...@linutronix.de>
Cc: x...@kernel.org
Link: 
http://lkml.kernel.org/r/1525866228-30321-6-git-send-email-adrian.hun...@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <a...@redhat.com>
---
 tools/perf/util/symbol.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index f48dc157c2bd..4a39f4d0a174 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -1149,7 +1149,7 @@ static int dso__load_kcore(struct dso *dso, struct map 
*map,
        bool is_64_bit;
        int err, fd;
        char kcore_filename[PATH_MAX];
-       struct symbol *sym;
+       u64 stext;
 
        if (!kmaps)
                return -EINVAL;
@@ -1198,13 +1198,13 @@ static int dso__load_kcore(struct dso *dso, struct map 
*map,
                old_map = next;
        }
 
-       /* Find the kernel map using the first symbol */
-       sym = dso__first_symbol(dso);
-       list_for_each_entry(new_map, &md.maps, node) {
-               if (sym && sym->start >= new_map->start &&
-                   sym->start < new_map->end) {
-                       replacement_map = new_map;
-                       break;
+       /* Find the kernel map using the '_stext' symbol */
+       if (!kallsyms__get_function_start(kallsyms_filename, "_stext", &stext)) 
{
+               list_for_each_entry(new_map, &md.maps, node) {
+                       if (stext >= new_map->start && stext < new_map->end) {
+                               replacement_map = new_map;
+                               break;
+                       }
                }
        }
 

Reply via email to