8 if (!defined($warns)) {
9 print "usage: $0 <warns.txt>\n";
13 my $db = DBI
->connect("dbi:SQLite:smatch_db.sqlite", "", "", {RaiseError
=> 1, AutoCommit
=> 0});
21 $db->do("delete from caller_info");
23 open(WARNS
, "<$warns");
25 if (!($_ =~ /info:/)) {
28 if ($_ =~ /__builtin_/) {
31 if ($_ =~ /(printk|memset|memcpy|kfree|printf|dev_err|writel)/) {
37 my ($file, $line, $dummy, $func, $param, $value);
39 if ($_ =~ /info: passes param_value /) {
40 # init/main.c +165 obsolete_checksetup(7) info: passes param_value strlen 0 min-max
42 ($file, $line, $dummy, $dummy, $dummy, $dummy, $func, $param, $value) = split(/ /, $_);
44 } elsif ($_ =~ /info: passes_buffer /) {
45 # init/main.c +175 obsolete_checksetup(17) info: passes_buffer 'printk' 0 38
47 ($file, $line, $dummy, $dummy, $dummy, $func, $param, $value) = split(/ /, $_);
52 if (!defined($value) || !($param =~ /^\d+$/)) {
58 if ($prev_fn ne $func || $prev_line ne $line || $param < $prev_param) {
62 $db->do("insert into caller_info values ('$file', '$func', $func_id, $type, $param, '$value')");