From 27308001ffd599df42889203c087fc74bcf528cf052757f3eb96047c75be3a15 Mon Sep 17 00:00:00 2001 From: Michal Marek Date: Tue, 4 Oct 2011 05:01:26 +0000 Subject: [PATCH] OBS-URL: https://build.opensuse.org/package/show/Kernel:HEAD/kernel-source?expand=0&rev=7069 --- kabi.pl | 131 -------------------------------------------------------- 1 file changed, 131 deletions(-) delete mode 100644 kabi.pl diff --git a/kabi.pl b/kabi.pl deleted file mode 100644 index 09c8be80d..000000000 --- a/kabi.pl +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/perl -use strict; -use warnings; - -use Getopt::Long; -use Data::Dumper; - -# ( { sym => regexp, mod => regexp, fail => 0/1 }, ... ) -my @rules; -my ($opt_verbose, $opt_rules); - -sub load_rules { - my $file = shift; - my $errors = 0; - - xopen(my $fh, '<', $file); - while (<$fh>) { - chomp; - s/#.*//; - next if /^\s*$/; - my ($pattern, $verdict) = split(/\s+/); - my $new = {}; - if (uc($verdict) eq "PASS") { - $new->{fail} = 0; - } elsif (uc($verdict) eq "FAIL") { - $new->{fail} = 1; - } else { - print STDERR "$file:$.: invalid verdict \"$verdict\", must be either PASS or FAIL.\n"; - $errors++; - next; - } - # simple glob -> regexp conversion - $pattern =~ s/\*/.*/g; - $pattern =~ s/\?/./g; - $pattern =~ s/.*/^$&\$/; - if ($pattern =~ /\/|^vmlinux$/) { - $new->{mod} = $pattern; - } else { - $new->{sym} = $pattern; - } - push(@rules, $new); - } - if ($errors && !@rules) { - print STDERR "error: only garbage found in $file.\n"; - exit 1; - } - close($fh); -} - -sub load_symvers { - my $file = shift; - my %res; - my $errors = 0; - - xopen(my $fh, '<', $file); - while (<$fh>) { - my @l = split(/\s+/); - if (@l < 3) { - print STDERR "$file:$.: unknown line\n"; - $errors++; - next; - } - my $new = { crc => $l[0], mod => $l[2] }; - $res{$l[1]} = $new; - } - if (!%res) { - print STDERR "error: no symvers found in $file.\n"; - exit 1; - } - close($fh); - return %res; -} - -my $kabi_errors = 0; -sub kabi_change { - my ($sym, $mod, $oldcrc, $newcrc) = @_; - my $fail = 1; - - for my $rule (@rules) { - if ($rule->{mod} && $mod =~ $rule->{mod} || - $rule->{sym} && $sym =~ $rule->{sym}) { - $fail = $rule->{fail}; - last; - } - } - return unless $fail or $opt_verbose; - print STDERR "KABI: symbol $sym($mod) "; - if ($newcrc) { - print STDERR "changed crc from $oldcrc to $newcrc" - } else { - print STDERR "lost"; - } - if ($fail) { - $kabi_errors++; - print STDERR "\n"; - } else { - print STDERR " (tolerated)\n"; - } -} - -sub xopen { - open($_[0], $_[1], @_[2..$#_]) or die "$_[2]: $!\n"; -} - -my $res = GetOptions( - 'verbose|v' => \$opt_verbose, - 'rules|r=s' => \$opt_rules, -); -if (!$res || @ARGV != 2) { - print STDERR "Usage: $0 [--rules ] Module.symvers.old Module.symvers\n"; - exit 1; -} -if (defined($opt_rules)) { - load_rules($opt_rules); -} -my %old = load_symvers($ARGV[0]); -my %new = load_symvers($ARGV[1]); - -for my $sym (sort keys(%old)) { - if (!$new{$sym}) { - kabi_change($sym, $old{$sym}->{mod}, $old{$sym}->{crc}, 0); - } elsif ($old{$sym}->{crc} ne $new{$sym}->{crc}) { - kabi_change($sym, $new{$sym}->{mod}, $old{$sym}->{crc}, - $new{$sym}->{crc}); - } -} -if ($kabi_errors) { - print STDERR "KABI: aborting due to kabi changes.\n"; - exit 1; -} -exit 0;