summaryrefslogtreecommitdiff
path: root/tools/perf/builtin-trace.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/builtin-trace.c')
-rw-r--r--tools/perf/builtin-trace.c41
1 files changed, 26 insertions, 15 deletions
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 2ec53ed..a6e05e1 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -2114,6 +2114,28 @@ out_put:
return err;
}
+static int trace__fprintf_callchain(struct trace *trace, struct perf_evsel *evsel,
+ struct perf_sample *sample)
+{
+ struct addr_location al;
+ /* TODO: user-configurable print_opts */
+ const unsigned int print_opts = PRINT_IP_OPT_SYM |
+ PRINT_IP_OPT_DSO |
+ PRINT_IP_OPT_UNKNOWN_AS_ADDR;
+
+ if (sample->callchain == NULL)
+ return 0;
+
+ if (machine__resolve(trace->host, &al, sample) < 0) {
+ pr_err("Problem processing %s callchain, skipping...\n",
+ perf_evsel__name(evsel));
+ return 0;
+ }
+
+ return perf_evsel__fprintf_callchain(evsel, sample, &al, 38, print_opts,
+ scripting_max_stack, trace->output);
+}
+
static int trace__sys_exit(struct trace *trace, struct perf_evsel *evsel,
union perf_event *event __maybe_unused,
struct perf_sample *sample)
@@ -2193,21 +2215,7 @@ signed_print:
fputc('\n', trace->output);
- if (sample->callchain) {
- struct addr_location al;
- /* TODO: user-configurable print_opts */
- const unsigned int print_opts = PRINT_IP_OPT_SYM |
- PRINT_IP_OPT_DSO |
- PRINT_IP_OPT_UNKNOWN_AS_ADDR;
-
- if (machine__resolve(trace->host, &al, sample) < 0) {
- pr_err("problem processing %d event, skipping it.\n",
- event->header.type);
- goto out_put;
- }
- perf_evsel__fprintf_callchain(evsel, sample, &al, 38, print_opts,
- scripting_max_stack, trace->output);
- }
+ trace__fprintf_callchain(trace, evsel, sample);
out:
ttrace->entry_pending = false;
err = 0;
@@ -2355,6 +2363,9 @@ static int trace__event_handler(struct trace *trace, struct perf_evsel *evsel,
}
fprintf(trace->output, ")\n");
+
+ trace__fprintf_callchain(trace, evsel, sample);
+
return 0;
}