perf trace: Fix ')' placement in "interrupted" syscall lines
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: 172bf02d564bdb6df8410f64720fa2c68e755d1a Gitweb: https://git.kernel.org/tip/172bf02d564bdb6df8410f64720fa2c68e755d1a Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Mon, 7 Jan 2019 16:24:27 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 8 Jan 2019 13:28:12 -0300
perf trace: Fix ')' placement in "interrupted" syscall lines
When we get the sys_enter for a syscall we check if the last one is still waiting for its matching sys_exit, if so we print this:
468.753 ( ): firefox/32382 poll(ufds: 0x7f3988d3dd00, nfds: 7, timeout_msecs: 4294967295) ...
449.575 ( 0.004 ms): Softwar~cThrea/32434 futex(uaddr: 0x7f39a18a9b70, op: WAKE|PRIVATE_FLAG, val: 1) = 0
At some point we'll get that poll sys_exit event and will print a "[continued]" line.
While making the sizing of the alignment after the syscall arg list and its result configurable, so that we can mimic strace, which uses a smaller alingment by default, a bug was introduced where the closing parens appeared before the syscall name and its arg list, fix it.
--- tools/perf/builtin-trace.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
tools/perf/builtin-trace.c +8 -2
@@ -1758,6 +1758,7 @@ static int trace__printf_interrupted_entry(struct trace *trace) {struct thread_trace *ttrace;size_t printed; +int len;if (trace->failure_only || trace->current ==NULL )return 0 ;
@@ -1768,9 +1769,14 @@ static int trace__printf_interrupted_entry(struct trace *trace)return 0 ; printed =trace__fprintf_entry_head (trace, trace->current,0 , false, ttrace->entry_time, trace->output); - printed +=fprintf (trace->output,")%-*s ...\n" , trace->args_alignment, ttrace->entry_str); - ttrace->entry_pending = false; + printed += len =fprintf (trace->output,"%s)" , ttrace->entry_str); + +if (len < trace->args_alignment -4 ) + printed +=fprintf (trace->output,"%-*s" , trace->args_alignment -4 - len," " ); + printed +=fprintf (trace->output," ...\n" ); + + ttrace->entry_pending = false; ++trace->nr_events_printed;return printed;