Commit 50116aec authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by Greg Kroah-Hartman
Browse files

scripts: get_abi.pl: don't skip what that ends with wildcards



The search algorithm used inside check_undefined_symbols
has an optimization: it seeks only whats that have the same
leave name. This helps not only to speedup the search, but
it also allows providing a hint about a partial match.

There's a drawback, however: when "what:" finishes with a
wildcard, the logic will skip the what, reporting it as
"not found".

Fix it by grouping the remaining cases altogether, and
disabing any hints for such cases.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Link: https://lore.kernel.org/r/79ba5139643355230e3bba136b20991cfc92020f.1631957565.git.mchehab+huawei@kernel.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 14c94257
Loading
Loading
Loading
Loading
+46 −34
Original line number Diff line number Diff line
@@ -589,8 +589,11 @@ sub check_undefined_symbols {
			$found_string = 1;
		}

		if ($leave =~ /^\d+$/ || !defined($leaf{$leave})) {
			$leave = "others";
		}

		print "--> $file\n" if ($found_string && $hint);
		if (defined($leaf{$leave})) {
		my $what = $leaf{$leave};
		$whats .= " $what" if (!($whats =~ m/$what/));

@@ -626,7 +629,7 @@ sub check_undefined_symbols {
		}

		$defined++;
		}

		next if ($exact);

		# Ignore some sysfs nodes
@@ -637,7 +640,7 @@ sub check_undefined_symbols {
		# is not easily parseable.
		next if ($file =~ m#/parameters/#);

		if ($hint && $defined) {
		if ($hint && $defined && $leave ne "others") {
			print "$leave at $path might be one of:$whats\n"  if (!$search_string || $found_string);
			next;
		}
@@ -699,7 +702,16 @@ sub undefined_symbols {
			my $leave = $what;
			$leave =~ s,.*/,,;

			next if ($leave =~ m/^\.\*/ || $leave eq "");
			# $leave is used to improve search performance at
			# check_undefined_symbols, as the algorithm there can seek
			# for a small number of "what". It also allows giving a
			# hint about a leave with the same name somewhere else.
			# However, there are a few occurences where the leave is
			# either a wildcard or a number. Just group such cases
			# altogether.
			if ($leave =~ m/^\.\*/ || $leave eq "" || $leave =~ /^\d+$/) {
				$leave = "others" ;
			}

			# Escape all other symbols
			$what =~ s/$escape_symbols/\\$1/g;