1 #!/usr/bin/perl
   2 
   3 use strict;
   4 
   5 sub help()
   6 {
   7     print "usage: $0 [-r]\n";
   8     print "Counts the number of errors of each type.\n";
   9     print "-r means down to the nearest 10.\n";
  10     exit 1;
  11 }
  12 
  13 my $round;
  14 my $arg = shift;
  15 if ($arg =~ /-h/) {
  16     help();
  17 } elsif ($arg =~ /-r/) {
  18     $round = 1;
  19 }
  20 
  21 my %msgs;
  22 
  23 sub add_msg($)
  24 {
  25     my $msg = shift;
  26 
  27     if (defined $msgs{$msg}) {
  28         $msgs{$msg}++;
  29     } else {
  30         $msgs{$msg} = 1;
  31     }
  32 }
  33 
  34 while (<>) {
  35     s/^.*?:\d+(|:\d+:) .*? //;
  36     s/[us](16|32|64)(min|max)//g;
  37     s/0x\w+//g;
  38     s/[01234567890]//g;
  39     if ($_ =~ /can't/) {
  40         s/(.*can't.*').*?('.*)/$1 $2/;
  41         s/(.*?)'.*?'(.*can't.*)/$1 $2/;
  42     } elsif ($_ =~ /don't/) {
  43         s/(.*don't.*').*?('.*)/$1 $2/;
  44     } else {
  45         s/'.*?'/''/g;
  46     }
  47     s/,//g;
  48     s/\(\w+ returns null\)/(... returns null)/;
  49     s/dma on the stack \(.*?\)/dma on the stack (...)/;
  50     s/possible ERR_PTR '' to .*/possible ERR_PTR '' to .../;
  51     s/inconsistent returns ([^ ]+?) locked \(\)/inconsistent returns ... locked ()/;
  52     s/(.*) [^ ]* (too large for) [^ ]+ (.*)/$1 $2 $3/;
  53 
  54     add_msg($_);
  55 }
  56 
  57 foreach my $key (sort { $msgs{$b} <=> $msgs{$a} } keys %msgs) {
  58     my $count = $msgs{$key};
  59 
  60     if ($round) {
  61         $count = $msgs{$key} - $msgs{$key} % 10;
  62     }
  63     print "$count $key";
  64 }