libvirt/src/check-symfile.pl
Michal Privoznik 5468594f46 Check for private symbols presence as well
Currently, we are checking if libvirt.so contains public symbols.
However, sometimes we rename an internal symbol and forget to
change libvirt_private.syms accordingly. Hence, it's safer to check
for internal symbols as well.
2012-10-05 15:04:56 +02:00

55 lines
994 B
Perl
Executable File

#!/usr/bin/perl
die "syntax: $0 SYMFILE ELFLIB(S)" unless int(@ARGV) >= 2;
my $symfile = shift @ARGV;
my @elflibs = @ARGV;
my %wantsyms;
my %gotsyms;
my $ret = 0;
open SYMFILE, $symfile or die "cannot read $symfile: $!";
while (<SYMFILE>) {
next if /{/;
next if /}/;
next if /global:/;
next if /local:/;
next if /^\s*$/;
next if /^\s*#/;
next if /\*/;
die "malformed line $_" unless /^\s*(\S+);$/;
if (exists $wantsyms{$1}) {
print STDERR "Symbol $1 is listed twice\n";
$ret = 1;
} else {
$wantsyms{$1} = 1;
}
}
close SYMFILE;
foreach my $elflib (@elflibs) {
open NM, "-|", "nm", $elflib or die "cannot run 'nm $elflib': $!";
while (<NM>) {
next unless /^\S+\s(?:[TBD])\s(\S+)\s*$/;
$gotsyms{$1} = 1;
}
close NM;
}
foreach my $sym (keys(%wantsyms)) {
next if exists $gotsyms{$sym};
print STDERR "Expected symbol $sym is not in ELF library\n";
$ret = 1;
}
exit($ret);