Skip to content

Commit e36e025

Browse files
committed
Handle tr end async trace events
Kernel commit https://lore.kernel.org/lkml/[email protected]/ set `PERF_IP_FLAG_ASYNC` on trace end events. As per https://github.com/torvalds/linux/blob/7ee022567bf9e2e0b3cd92461a2f4986ecc99673/tools/perf/builtin-script.c#L1546 This means that where `perf` would have previously outputted `tr end jmp`, it now outputs `tr end async`. Adjust our regex to allow `async`, and treat it as a branch. Signed-off-by: Tudor Brindus <[email protected]>
1 parent 79a3bba commit e36e025

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

src/perf_decode.ml

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ let perf_callstack_entry_re = Re.Perl.re "^\t *([0-9a-f]+) (.*)$" |> Re.compile
2222

2323
let perf_branches_event_re =
2424
Re.Perl.re
25-
{|^ *(call|return|tr strt|syscall|sysret|hw int|iret|tr end|tr strt tr end|tr end (?:call|return|syscall|sysret|iret)|jmp|jcc) +([0-9a-f]+) (.*) => +([0-9a-f]+) (.*)$|}
25+
{|^ *(call|return|tr strt|syscall|sysret|hw int|iret|tr end|tr strt tr end|tr end (?:async|call|return|syscall|sysret|iret)|jmp|jcc) +([0-9a-f]+) (.*) => +([0-9a-f]+) (.*)$|}
2626
|> Re.compile
2727
;;
2828

@@ -262,6 +262,16 @@ let parse_perf_branches_event ?perf_maps (thread : Event.Thread.t) time line : E
262262
| "hw int" -> Some Hardware_interrupt
263263
| "iret" -> Some Iret
264264
| "sysret" -> Some Sysret
265+
| "async" ->
266+
(match trace_state_change with
267+
| Some End -> Some Jump
268+
| _ ->
269+
raise_s
270+
[%message
271+
"BUG: async flag set on something other than a trace end event. Please \
272+
report this to https://github.com/janestreet/magic-trace/issues/"
273+
(trace_state_change : Trace_state_change.t option)
274+
(line : string)])
265275
| "" -> None
266276
| _ ->
267277
printf "Warning: skipping unrecognized perf output: %s\n%!" line;
@@ -688,6 +698,18 @@ let%test_module _ =
688698
((thread ((pid (25375)) (tid (25375)))) (time 52d4h33m11.343298468s)
689699
(data (Trace (kind Call) (src 0x7f6fce0b71f4) (dst 0x7ffd193838e0)))))) |}]
690700
;;
701+
702+
let%expect_test "tr end async" =
703+
check
704+
{| 25375/25375 4509191.343298468: 1 branches:uH: tr end async 7f6fce0b71f4 [unknown] (foo.so) => 0 [unknown] ([unknown])|};
705+
[%expect
706+
{|
707+
((Ok
708+
((thread ((pid (25375)) (tid (25375)))) (time 52d4h33m11.343298468s)
709+
(data
710+
(Trace (trace_state_change End) (kind Jump) (src 0x7f6fce0b71f4)
711+
(dst 0x0)))))) |}]
712+
;;
691713
end)
692714
;;
693715

0 commit comments

Comments
 (0)