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