diff options
-rw-r--r-- | tools/perf/builtin-script.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 9e9c91f5b7fa..333b15ebe72b 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c | |||
@@ -427,15 +427,22 @@ static void print_sample_bts(union perf_event *event, | |||
427 | struct addr_location *al) | 427 | struct addr_location *al) |
428 | { | 428 | { |
429 | struct perf_event_attr *attr = &evsel->attr; | 429 | struct perf_event_attr *attr = &evsel->attr; |
430 | bool print_srcline_last = false; | ||
430 | 431 | ||
431 | /* print branch_from information */ | 432 | /* print branch_from information */ |
432 | if (PRINT_FIELD(IP)) { | 433 | if (PRINT_FIELD(IP)) { |
433 | if (!symbol_conf.use_callchain) | 434 | unsigned int print_opts = output[attr->type].print_ip_opts; |
434 | printf(" "); | 435 | |
435 | else | 436 | if (symbol_conf.use_callchain && sample->callchain) { |
436 | printf("\n"); | 437 | printf("\n"); |
437 | perf_evsel__print_ip(evsel, sample, al, | 438 | } else { |
438 | output[attr->type].print_ip_opts, | 439 | printf(" "); |
440 | if (print_opts & PRINT_IP_OPT_SRCLINE) { | ||
441 | print_srcline_last = true; | ||
442 | print_opts &= ~PRINT_IP_OPT_SRCLINE; | ||
443 | } | ||
444 | } | ||
445 | perf_evsel__print_ip(evsel, sample, al, print_opts, | ||
439 | PERF_MAX_STACK_DEPTH); | 446 | PERF_MAX_STACK_DEPTH); |
440 | } | 447 | } |
441 | 448 | ||
@@ -447,6 +454,9 @@ static void print_sample_bts(union perf_event *event, | |||
447 | !output[attr->type].user_set)) | 454 | !output[attr->type].user_set)) |
448 | print_sample_addr(event, sample, al->machine, thread, attr); | 455 | print_sample_addr(event, sample, al->machine, thread, attr); |
449 | 456 | ||
457 | if (print_srcline_last) | ||
458 | map__fprintf_srcline(al->map, al->addr, "\n ", stdout); | ||
459 | |||
450 | printf("\n"); | 460 | printf("\n"); |
451 | } | 461 | } |
452 | 462 | ||