[PATCH v2 4/5] scripts: get_abi.pl: add an option to filter undefined results

From: Mauro Carvalho Chehab
Date: Tue Sep 14 2021 - 10:46:37 EST


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@xxxxxxxxxx>
---
scripts/get_abi.pl | 37 +++++++++++++++++++++++++++++++------
1 file changed, 31 insertions(+), 6 deletions(-)

diff --git a/scripts/get_abi.pl b/scripts/get_abi.pl
index 8bde9944ee12..4f31d2e34dd0 100755
--- a/scripts/get_abi.pl
+++ b/scripts/get_abi.pl
@@ -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.
--
2.31.1