Skip to content

Commit fdf8c2b

Browse files
ethan-vanderheijdencgaebel
authored andcommitted
Fix: regex errors for 'tr strt jmp' in modern Linux perf.
Signed-off-by: Ethan Van Der Heijden <ethanvanderheijden@gmail.com>
1 parent acc643f commit fdf8c2b

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

src/perf_decode.ml

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ let perf_callstack_entry_re = Re.Perl.re "^\t *([0-9a-f]+) (.*)$" |> Re.compile
2121

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

@@ -235,7 +235,13 @@ let parse_perf_branches_event ?perf_maps (thread : Event.Thread.t) time line : E
235235
let starts_trace, kind =
236236
match String.chop_prefix kind ~prefix:"tr strt" with
237237
| None -> false, kind
238-
| Some rest -> true, String.lstrip ~drop:Char.is_whitespace rest
238+
| Some rest ->
239+
( true
240+
, String.lstrip
241+
~drop:Char.is_whitespace
242+
(match String.chop_prefix rest ~prefix:" jmp" with
243+
| None -> rest
244+
| Some r -> r) )
239245
in
240246
let ends_trace, kind =
241247
match String.chop_prefix kind ~prefix:"tr end" with
@@ -437,6 +443,16 @@ module%test _ = struct
437443
(data (Trace (trace_state_change Start) (src 0x0) (dst 0x7f6fce0b71d0)))))) |}]
438444
;;
439445

446+
let%expect_test "C symbol trace start jump" =
447+
check
448+
{| 25375/25375 4509191.343298468: 1 branches:uH: tr strt jmp 0 [unknown] (foo.so) => 7f6fce0b71d0 __clock_gettime+0x0 (foo.so)|};
449+
[%expect
450+
{|
451+
((Ok
452+
((thread ((pid (25375)) (tid (25375)))) (time 52d4h33m11.343298468s)
453+
(data (Trace (trace_state_change Start) (src 0x0) (dst 0x7f6fce0b71d0)))))) |}]
454+
;;
455+
440456
let%expect_test "C++ symbol" =
441457
check
442458
{| 7166/7166 4512623.871133092: 1 branches:uH: call 9bc6db a::B<a::C, a::D<a::E>, a::F, a::F, G::H, a::I>::run+0x1eb (foo.so) => 9f68b0 J::K<int, std::string>+0x0 (foo.so)|};

0 commit comments

Comments
 (0)