diff options
author | Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com> | 2017-08-31 05:14:56 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2017-09-01 13:45:59 -0400 |
commit | 9a805d8648ee09c136130fe4114a09574bc0b1ef (patch) | |
tree | eb8d5f1e30955b31f62793a84b71429c94b7af24 /tools/perf/tests/code-reading.c | |
parent | 27702bcfe8a125a1feeeb5f07526d63b20cac47f (diff) |
perf test powerpc: Fix 'Object code reading' test
'Object code reading' test always fails on powerpc guest. Two reasons
for the failure are:
1. When elf section is too big (size beyond 'unsigned int' max value).
objdump fails to disassemble from such section. This was fixed with
commit 0f6329bd7fc ("binutils/objdump: Fix disassemble for huge elf
sections") in binutils.
2. When the sample is from hypervisor. Hypervisor symbols can not be
resolved within guest and thus thread__find_addr_map() fails for such
symbols. Fix this by ignoring hypervisor symbols in the test.
Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: linuxppc-dev@lists.ozlabs.org
Link: http://lkml.kernel.org/r/1504170896-7876-1-git-send-email-ravi.bangoria@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/tests/code-reading.c')
-rw-r--r-- | tools/perf/tests/code-reading.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c index 761c5a448c56..466a462b26d1 100644 --- a/tools/perf/tests/code-reading.c +++ b/tools/perf/tests/code-reading.c | |||
@@ -237,6 +237,11 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode, | |||
237 | 237 | ||
238 | thread__find_addr_map(thread, cpumode, MAP__FUNCTION, addr, &al); | 238 | thread__find_addr_map(thread, cpumode, MAP__FUNCTION, addr, &al); |
239 | if (!al.map || !al.map->dso) { | 239 | if (!al.map || !al.map->dso) { |
240 | if (cpumode == PERF_RECORD_MISC_HYPERVISOR) { | ||
241 | pr_debug("Hypervisor address can not be resolved - skipping\n"); | ||
242 | return 0; | ||
243 | } | ||
244 | |||
240 | pr_debug("thread__find_addr_map failed\n"); | 245 | pr_debug("thread__find_addr_map failed\n"); |
241 | return -1; | 246 | return -1; |
242 | } | 247 | } |