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 /tools | |
| 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>
Diffstat (limited to 'tools')
| -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 | ||
