| #!/usr/bin/perl |
| # |
| # Scrub the variable fields from the normal trace2 output to |
| # make testing easier. |
| |
| use strict; |
| use warnings; |
| |
| my $float = '[0-9]*\.[0-9]+([eE][-+]?[0-9]+)?'; |
| |
| # This code assumes that the trace2 data was written with bare |
| # turned on (which omits the "<clock> <file>:<line>" prefix. |
| |
| while (<>) { |
| # Various messages include an elapsed time in the middle |
| # of the message. Replace the time with a placeholder to |
| # simplify our HEREDOC in the test script. |
| s/elapsed:$float/elapsed:_TIME_/g; |
| |
| my $line = $_; |
| |
| # we expect: |
| # start <argv0> [<argv1> [<argv2> [...]]] |
| # |
| # where argv0 might be a relative or absolute path, with |
| # or without quotes, and platform dependent. Replace argv0 |
| # with a token for HEREDOC matching in the test script. |
| |
| if ($line =~ m/^start/) { |
| $line =~ /^start\s+(.*)/; |
| my $argv = $1; |
| $argv =~ m/(\'[^\']*\'|[^ ]+)\s+(.*)/; |
| my $argv_0 = $1; |
| my $argv_rest = $2; |
| |
| print "start _EXE_ $argv_rest\n"; |
| } |
| elsif ($line =~ m/^cmd_path/) { |
| # Likewise, the 'cmd_path' message breaks out argv[0]. |
| # |
| # This line is only emitted when RUNTIME_PREFIX is defined, |
| # so just omit it for testing purposes. |
| # print "cmd_path _EXE_\n"; |
| } |
| elsif ($line =~ m/^cmd_ancestry/) { |
| # 'cmd_ancestry' is not implemented everywhere, so for portability's |
| # sake, skip it when parsing normal. |
| # |
| # print "$line"; |
| } |
| else { |
| print "$line"; |
| } |
| } |