Commit 56549978 authored by Adrian Hunter's avatar Adrian Hunter Committed by Arnaldo Carvalho de Melo

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: default avatarAdrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: x86@kernel.org
Link: http://lkml.kernel.org/r/1525866228-30321-6-git-send-email-adrian.hunter@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent d8fc764d
...@@ -1149,7 +1149,7 @@ static int dso__load_kcore(struct dso *dso, struct map *map, ...@@ -1149,7 +1149,7 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
bool is_64_bit; bool is_64_bit;
int err, fd; int err, fd;
char kcore_filename[PATH_MAX]; char kcore_filename[PATH_MAX];
struct symbol *sym; u64 stext;
if (!kmaps) if (!kmaps)
return -EINVAL; return -EINVAL;
...@@ -1198,15 +1198,15 @@ static int dso__load_kcore(struct dso *dso, struct map *map, ...@@ -1198,15 +1198,15 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
old_map = next; old_map = next;
} }
/* Find the kernel map using the first symbol */ /* Find the kernel map using the '_stext' symbol */
sym = dso__first_symbol(dso); if (!kallsyms__get_function_start(kallsyms_filename, "_stext", &stext)) {
list_for_each_entry(new_map, &md.maps, node) { list_for_each_entry(new_map, &md.maps, node) {
if (sym && sym->start >= new_map->start && if (stext >= new_map->start && stext < new_map->end) {
sym->start < new_map->end) {
replacement_map = new_map; replacement_map = new_map;
break; break;
} }
} }
}
if (!replacement_map) if (!replacement_map)
replacement_map = list_entry(md.maps.next, struct map, node); replacement_map = list_entry(md.maps.next, struct map, node);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment