lkml.org 
[lkml]   [2021]   [Jun]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH RFC 1/1] get_abi.pl: Check for missing symbols at the ABI specs
    Date
    Check for the symbols that exists under /sys but aren't
    defined at Documentation/ABI.

    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    ---
    scripts/get_abi.pl | 72 ++++++++++++++++++++++++++++++++++++++++++++--
    1 file changed, 70 insertions(+), 2 deletions(-)

    diff --git a/scripts/get_abi.pl b/scripts/get_abi.pl
    index d7aa82094296..e85cee0f8901 100755
    --- a/scripts/get_abi.pl
    +++ b/scripts/get_abi.pl
    @@ -14,6 +14,7 @@ my $man = 0;
    my $debug = 0;
    my $enable_lineno = 0;
    my $prefix="Documentation/ABI";
    +my $sysfs_prefix="/sys";

    #
    # If true, assumes that the description is formatted with ReST
    @@ -36,7 +37,7 @@ pod2usage(2) if (scalar @ARGV < 1 || @ARGV > 2);

    my ($cmd, $arg) = @ARGV;

    -pod2usage(2) if ($cmd ne "search" && $cmd ne "rest" && $cmd ne "validate");
    +pod2usage(2) if ($cmd ne "search" && $cmd ne "rest" && $cmd ne "validate" && $cmd ne "undefined");
    pod2usage(2) if ($cmd eq "search" && !$arg);

    require Data::Dumper if ($debug);
    @@ -521,6 +522,68 @@ sub search_symbols {
    }
    }

    +my %leaf;
    +
    +my $escape_symbols = qr { ([\x01-\x08\x0e-\x1f\x21-\x29\x2b-\x2d\x3a-\x40\x7b-\xff]) }x;
    +sub parse_existing_sysfs {
    + my $file = $File::Find::name;
    +
    + my $mode = (stat($file))[2];
    + return if ($mode & S_IFDIR);
    +
    + # /sys/.*/<foo>
    + return if ($file =~ m/(initstate|bind|unbind)/);
    +
    + my $leave = $file;
    + $leave =~ s,.*/,,;
    +
    + if (defined($leaf{$leave})) {
    + # FIXME: need to check if the path makes sense
    + my $what = $leaf{$leave};
    +
    + $what =~ s/,/ /g;
    +
    + $what =~ s/\<[^\>]+\>/.*/g;
    + $what =~ s/\{[^\}]+\}/.*/g;
    + $what =~ s/\[[^\]]+\]/.*/g;
    + $what =~ s,/\.\.\./,/.*/,g;
    + $what =~ s,/\*/,/.*/,g;
    +
    + $what =~ s/\s+/ /g;
    +
    + # Escape all other symbols
    + $what =~ s/$escape_symbols/\\$1/g;
    +
    + foreach my $i (split / /,$what) {
    + if ($file =~ m#^$i$#) {
    +# print "$file: $i: OK!\n";
    + return;
    + }
    + }
    +
    + print "$file: $leave is defined at $what\n";
    +
    + return;
    + }
    +
    +# print "$file not found.\n";
    +}
    +
    +sub undefined_symbols {
    + foreach my $what (sort keys %data) {
    + my $leave = $what;
    + $leave =~ s,.*/,,;
    +
    + if (defined($leaf{$leave})) {
    + $leaf{$leave} .= " " . $what;
    + } else {
    + $leaf{$leave} = $what;
    + }
    + }
    +
    + find({wanted =>\&parse_existing_sysfs, no_chdir => 1}, $sysfs_prefix);
    +}
    +
    # Ensure that the prefix will always end with a slash
    # While this is not needed for find, it makes the patch nicer
    # with --enable-lineno
    @@ -536,7 +599,9 @@ print STDERR Data::Dumper->Dump([\%data], [qw(*data)]) if ($debug);
    #
    # Handles the command
    #
    -if ($cmd eq "search") {
    +if ($cmd eq "undefined") {
    + undefined_symbols;
    +} elsif ($cmd eq "search") {
    search_symbols;
    } else {
    if ($cmd eq "rest") {
    @@ -575,6 +640,9 @@ B<rest> - output the ABI in ReST markup language

    B<validate> - validate the ABI contents

    +B<undefined> - existing symbols at the system that aren't
    + defined at Documentation/ABI
    +
    =back

    =head1 OPTIONS
    --
    2.31.1
    \
     
     \ /
      Last update: 2021-06-18 13:29    [W:5.249 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site