diff options
author | Adrian Hunter <adrian.hunter@intel.com> | 2018-06-05 03:30:00 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2018-06-06 11:52:06 -0400 |
commit | 97802f3b81dc0d1da0f89c498249547d73a01164 (patch) | |
tree | 568cd853b2582ce9cd9ba6f010c46900bb193e5f | |
parent | f6c66d73bb8192d357bb5fb8cd5826920f811d8c (diff) |
perf map: Consider PTI entry trampolines in rip_2objdump()
perf tools uses map__rip_2objdump() to calculate objdump virtual addresses.
map__rip_2objdump() needs to be amended to deal with PTI entry trampolines.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1528183800-21577-1-git-send-email-adrian.hunter@intel.com
[ split from a larger patch ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r-- | tools/perf/util/map.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c index 92abc8e248c5..89ac5b5dc218 100644 --- a/tools/perf/util/map.c +++ b/tools/perf/util/map.c | |||
@@ -449,6 +449,20 @@ int map__fprintf_srcline(struct map *map, u64 addr, const char *prefix, | |||
449 | */ | 449 | */ |
450 | u64 map__rip_2objdump(struct map *map, u64 rip) | 450 | u64 map__rip_2objdump(struct map *map, u64 rip) |
451 | { | 451 | { |
452 | struct kmap *kmap = __map__kmap(map); | ||
453 | |||
454 | /* | ||
455 | * vmlinux does not have program headers for PTI entry trampolines and | ||
456 | * kcore may not either. However the trampoline object code is on the | ||
457 | * main kernel map, so just use that instead. | ||
458 | */ | ||
459 | if (kmap && is_entry_trampoline(kmap->name) && kmap->kmaps && kmap->kmaps->machine) { | ||
460 | struct map *kernel_map = machine__kernel_map(kmap->kmaps->machine); | ||
461 | |||
462 | if (kernel_map) | ||
463 | map = kernel_map; | ||
464 | } | ||
465 | |||
452 | if (!map->dso->adjust_symbols) | 466 | if (!map->dso->adjust_symbols) |
453 | return rip; | 467 | return rip; |
454 | 468 | ||