1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#!/usr/bin/env perl 2b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovuse warnings; 4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovuse strict; 5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#--------------------------------------------------------------------- 7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# A list of files specific to the tool at hand. Line numbers in 8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# these files will be removed from backtrace entries matching these files. 9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#--------------------------------------------------------------------- 10436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovmy @tool_files = ( "vg_replace_strmem.c", "vg_replace_malloc.c" ); 11b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 13b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovsub massage_backtrace_line ($$$) { 14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov my ($line, $tool_files, $cmdlin_files) = @_; 15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov my ($string, $qstring); 16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# If LINE matches any of the file names passed on the command line 18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# (i.e. in CMDLIN_FILES) return LINE unmodified. 19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov foreach $string (@$cmdlin_files) { 21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov $qstring = quotemeta($string); 22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return $line if ($line =~ /$qstring/); 23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# If LINE matches any of the file names in TOOL_FILES remove the line 26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# number and return the so modified line. 27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov foreach $string (@$tool_files) { 29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov $qstring = quotemeta($string); 30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return $line if ($line =~ s/$qstring:[0-9]+/$string:.../m); 31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Special case for functions whose line numbers have been removed in 32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# filter_stderr_basic. FIXME: filter_stderr_basic should not do that. 33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return $line if ($line =~ s/$qstring:\.\.\./$string:.../m); 34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Did not match anything 37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov $line =~ s/[\w]+.*/.../m; 38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return "$line"; 40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 43b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#--------------------------------------------------------------------- 44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Process lines. Two categories 45b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# (a) lines from back traces 46b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# pass through those lines that contain file names we're interested in 47b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# (b) everything else 48b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# pass through as is 49b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#--------------------------------------------------------------------- 50b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovmy $prev_line = ""; 51b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovwhile (<STDIN>) { 52b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov my $line = $_; 53b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov chomp($line); 54b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if ($line =~ /^\s+(at |by )/) { # lines in a back trace 55b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov $line = massage_backtrace_line($line, \@tool_files, \@ARGV); 56b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if ($line =~ /\s+\.\.\./) { 57b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov print "$line\n" if ($prev_line !~ /\s+\.\.\./); 58b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } else { 59b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov print "$line\n"; 60b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 61b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } else { 62b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov print "$line\n"; # everything else 63b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 64b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov $prev_line = $line 65b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 66b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 67b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovexit 0; 68