scripts: get_abi.pl: add an option to filter undefined results
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Sat, 18 Sep 2021 09:52:14 +0000 (11:52 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 21 Sep 2021 16:32:53 +0000 (18:32 +0200)
The output of this script can be too big. Add an option to
filter out results, in order to help finding issues at the
ABI files.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Link: https://lore.kernel.org/r/7b56c10195bb5e5dfd8b5838a3db8d361231d884.1631957565.git.mchehab+huawei@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
scripts/get_abi.pl

index b0ca4f4..f5f2f66 100755 (executable)
@@ -18,6 +18,7 @@ my $enable_lineno = 0;
 my $show_warnings = 1;
 my $prefix="Documentation/ABI";
 my $sysfs_prefix="/sys";
+my $search_string;
 
 #
 # If true, assumes that the description is formatted with ReST
@@ -31,6 +32,7 @@ GetOptions(
        "dir=s" => \$prefix,
        'help|?' => \$help,
        "show-hints" => \$hint,
+       "search-string=s" => \$search_string,
        man => \$man
 ) or pod2usage(2);
 
@@ -568,16 +570,13 @@ sub parse_existing_sysfs {
 sub check_undefined_symbols {
        foreach my $file (sort @files) {
 
-               # sysfs-module is special, as its definitions are inside
-               # a text. For now, just ignore them.
-               next if ($file =~ m#^/sys/module/#);
-
                # Ignore cgroup and firmware
                next if ($file =~ m#^/sys/(fs/cgroup|firmware)/#);
 
                my $defined = 0;
                my $exact = 0;
                my $whats = "";
+               my $found_string;
 
                my $leave = $file;
                $leave =~ s,.*/,,;
@@ -585,6 +584,12 @@ sub check_undefined_symbols {
                my $path = $file;
                $path =~ s,(.*/).*,$1,;
 
+               if ($search_string) {
+                       next if (!($file =~ m#$search_string#));
+                       $found_string = 1;
+               }
+
+               print "--> $file\n" if ($found_string && $hint);
                if (defined($leaf{$leave})) {
                        my $what = $leaf{$leave};
                        $whats .= " $what" if (!($whats =~ m/$what/));
@@ -610,6 +615,7 @@ sub check_undefined_symbols {
                                if (substr($file, 0, $len) eq $new) {
                                        my $newf = $a . substr($file, $len);
 
+                                       print "    $newf\n" if ($found_string && $hint);
                                        foreach my $w (split / /, $what) {
                                                if ($newf =~ m#^$w$#) {
                                                        $exact = 1;
@@ -632,10 +638,10 @@ sub check_undefined_symbols {
                next if ($file =~ m#/parameters/#);
 
                if ($hint && $defined) {
-                       print "$leave at $path might be one of:$whats\n";
+                       print "$leave at $path might be one of:$whats\n"  if (!$search_string || $found_string);
                        next;
                }
-               print "$file not found.\n";
+               print "$file not found.\n" if (!$search_string || $found_string);
        }
 }
 
@@ -701,16 +707,29 @@ sub undefined_symbols {
                        $what =~ s/\\([\[\]\(\)\|])/$1/g;
                        $what =~ s/(\d+)\\(-\d+)/$1$2/g;
 
+                       $what =~ s/\xff/\\d+/g;
+
+
+                       # Special case: IIO ABI which a parenthesis.
+                       $what =~ s/sqrt(.*)/sqrt\(.*\)/;
+
                        $leave =~ s/[\(\)]//g;
 
+                       my $added = 0;
                        foreach my $l (split /\|/, $leave) {
                                if (defined($leaf{$l})) {
                                        next if ($leaf{$l} =~ m/$what/);
                                        $leaf{$l} .= " " . $what;
+                                       $added = 1;
                                } else {
                                        $leaf{$l} = $what;
+                                       $added = 1;
                                }
                        }
+                       if ($search_string && $added) {
+                               print "What: $what\n" if ($what =~ m#$search_string#);
+                       }
+
                }
        }
        check_undefined_symbols;
@@ -764,6 +783,7 @@ abi_book.pl - parse the Linux ABI files and produce a ReST book.
 
 B<abi_book.pl> [--debug] [--enable-lineno] [--man] [--help]
               [--(no-)rst-source] [--dir=<dir>] [--show-hints]
+              [--search-string <regex>]
               <COMAND> [<ARGUMENT>]
 
 Where <COMMAND> can be:
@@ -811,6 +831,11 @@ times, to increase verbosity.
 Show hints about possible definitions for the missing ABI symbols.
 Used only when B<undefined>.
 
+=item B<--search-string> [regex string]
+
+Show only occurences that match a search string.
+Used only when B<undefined>.
+
 =item B<--help>
 
 Prints a brief help message and exits.