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

perf intel-pt: Add some more logging to intel_pt_walk_next_insn()

To aid debugging, add some more logging to intel_pt_walk_next_insn().
Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Acked-by: default avatarIan Rogers <irogers@google.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: kvm@vger.kernel.org
Link: https://lore.kernel.org/r/20220711093218.10967-30-adrian.hunter@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 7c0b20d1
...@@ -758,27 +758,38 @@ static int intel_pt_walk_next_insn(struct intel_pt_insn *intel_pt_insn, ...@@ -758,27 +758,38 @@ static int intel_pt_walk_next_insn(struct intel_pt_insn *intel_pt_insn,
if (nr) { if (nr) {
if ((!symbol_conf.guest_code && cpumode != PERF_RECORD_MISC_GUEST_KERNEL) || if ((!symbol_conf.guest_code && cpumode != PERF_RECORD_MISC_GUEST_KERNEL) ||
intel_pt_get_guest(ptq)) intel_pt_get_guest(ptq)) {
intel_pt_log("ERROR: no guest machine\n");
return -EINVAL; return -EINVAL;
}
machine = ptq->guest_machine; machine = ptq->guest_machine;
thread = ptq->guest_thread; thread = ptq->guest_thread;
if (!thread) { if (!thread) {
if (cpumode != PERF_RECORD_MISC_GUEST_KERNEL) if (cpumode != PERF_RECORD_MISC_GUEST_KERNEL) {
intel_pt_log("ERROR: no guest thread\n");
return -EINVAL; return -EINVAL;
}
thread = ptq->unknown_guest_thread; thread = ptq->unknown_guest_thread;
} }
} else { } else {
thread = ptq->thread; thread = ptq->thread;
if (!thread) { if (!thread) {
if (cpumode != PERF_RECORD_MISC_KERNEL) if (cpumode != PERF_RECORD_MISC_KERNEL) {
intel_pt_log("ERROR: no thread\n");
return -EINVAL; return -EINVAL;
}
thread = ptq->pt->unknown_thread; thread = ptq->pt->unknown_thread;
} }
} }
while (1) { while (1) {
if (!thread__find_map(thread, cpumode, *ip, &al) || !al.map->dso) if (!thread__find_map(thread, cpumode, *ip, &al) || !al.map->dso) {
if (al.map)
intel_pt_log("ERROR: thread has no dso for %#" PRIx64 "\n", *ip);
else
intel_pt_log("ERROR: thread has no map for %#" PRIx64 "\n", *ip);
return -EINVAL; return -EINVAL;
}
if (al.map->dso->data.status == DSO_DATA_STATUS_ERROR && if (al.map->dso->data.status == DSO_DATA_STATUS_ERROR &&
dso__data_status_seen(al.map->dso, dso__data_status_seen(al.map->dso,
...@@ -819,8 +830,12 @@ static int intel_pt_walk_next_insn(struct intel_pt_insn *intel_pt_insn, ...@@ -819,8 +830,12 @@ static int intel_pt_walk_next_insn(struct intel_pt_insn *intel_pt_insn,
len = dso__data_read_offset(al.map->dso, machine, len = dso__data_read_offset(al.map->dso, machine,
offset, buf, offset, buf,
INTEL_PT_INSN_BUF_SZ); INTEL_PT_INSN_BUF_SZ);
if (len <= 0) if (len <= 0) {
intel_pt_log("ERROR: failed to read at %" PRIu64 " ", offset);
if (intel_pt_enable_logging)
dso__fprintf(al.map->dso, intel_pt_log_fp());
return -EINVAL; return -EINVAL;
}
if (intel_pt_get_insn(buf, len, x86_64, intel_pt_insn)) if (intel_pt_get_insn(buf, len, x86_64, intel_pt_insn))
return -EINVAL; return -EINVAL;
......
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