util/lint: Make usage of IS_ENABLED() an error
As long as we keep the IS_ENABLED() definition in libpayload for compatibility, we should check that IS_ENABLED() usage doesn't sneak back in. Also remove all other IS_ENABLED() checks. Change-Id: Id30ffa0089cec6c24fc3dbbb10a1be35f63b3d89 Signed-off-by: Nico Huber <nico.h@gmx.de> Reviewed-on: https://review.coreboot.org/c/coreboot/+/32229 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
parent
086149eb32
commit
ec017590e5
|
@ -6184,16 +6184,6 @@ sub process {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# check for #if defined CONFIG_<FOO> || defined CONFIG_<FOO>_MODULE
|
|
||||||
if ($line =~ /^\+\s*#\s*if\s+defined(?:\s*\(?\s*|\s+)(CONFIG_[A-Z_]+)\s*\)?\s*\|\|\s*defined(?:\s*\(?\s*|\s+)\1_MODULE\s*\)?\s*$/) {
|
|
||||||
my $config = $1;
|
|
||||||
if (WARN("PREFER_IS_ENABLED",
|
|
||||||
"Prefer IS_ENABLED(<FOO>) to CONFIG_<FOO> || CONFIG_<FOO>_MODULE\n" . $herecurr) &&
|
|
||||||
$fix) {
|
|
||||||
$fixed[$fixlinenr] = "\+#if IS_ENABLED($config)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# check for case / default statements not preceded by break/fallthrough/switch
|
# check for case / default statements not preceded by break/fallthrough/switch
|
||||||
if ($line =~ /^.\s*(?:case\s+(?:$Ident|$Constant)\s*|default):/) {
|
if ($line =~ /^.\s*(?:case\s+(?:$Ident|$Constant)\s*|default):/) {
|
||||||
my $has_break = 0;
|
my $has_break = 0;
|
||||||
|
|
|
@ -93,7 +93,7 @@ sub Main {
|
||||||
check_used_symbols();
|
check_used_symbols();
|
||||||
check_for_ifdef();
|
check_for_ifdef();
|
||||||
check_for_def();
|
check_for_def();
|
||||||
check_is_enabled();
|
check_config_macro();
|
||||||
check_selected_symbols();
|
check_selected_symbols();
|
||||||
|
|
||||||
# Run checks based on the data that was found
|
# Run checks based on the data that was found
|
||||||
|
@ -213,27 +213,6 @@ sub check_for_ifdef {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
my @collected_is_enabled;
|
|
||||||
if ($dont_use_git_grep) {
|
|
||||||
@collected_is_enabled =
|
|
||||||
`grep -Irn -- "\\<IS_ENABLED[[:space:]]*(.*)" | grep -v '$exclude_dirs_and_files' | grep -v "kconfig.h"`;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
@collected_is_enabled =
|
|
||||||
`git grep -In -- "\\<IS_ENABLED[[:space:]]*(.*)" | grep -v '$exclude_dirs_and_files' | grep -v "kconfig.h"`;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ( my $line = shift @collected_is_enabled ) {
|
|
||||||
if ($line !~ /CONFIG_/ && $line =~ /^([^:]+):(\d+):.+IS_ENABLED\s*\(\s*(\w+)/ ) {
|
|
||||||
my $file = $1;
|
|
||||||
my $lineno = $2;
|
|
||||||
my $symbol = $3;
|
|
||||||
if ( ( exists $symbols{$symbol} ) ) {
|
|
||||||
show_error("IS_ENABLED missing CONFIG_ prefix on symbol '$symbol' at $file:$lineno.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
|
@ -289,11 +268,15 @@ sub check_type {
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
# check_is_enabled - The IS_ENABLED() and CONFIG() macros are only valid for
|
# check_config_macro - The CONFIG() macro is only valid for symbols of type
|
||||||
# symbols of type bool. It would probably work on type hex or int if the value
|
# bool. It would probably work on type hex or int if the value was 0 or 1,
|
||||||
# was 0 or 1, but this seems like a bad plan. Using it on strings is dead out.
|
# but this seems like a bad plan. Using it on strings is dead out.
|
||||||
|
#
|
||||||
|
# The IS_ENABLED() macro is forbidden in coreboot now. Though, as long as
|
||||||
|
# we keep its definition in libpayload for compatibility, we have to check
|
||||||
|
# that it doesn't sneak back in.
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
sub check_is_enabled {
|
sub check_config_macro {
|
||||||
my @is_enabled_symbols = @collected_symbols;
|
my @is_enabled_symbols = @collected_symbols;
|
||||||
|
|
||||||
#sort through symbols found by grep and store them in a hash for easy access
|
#sort through symbols found by grep and store them in a hash for easy access
|
||||||
|
@ -322,31 +305,19 @@ sub check_is_enabled {
|
||||||
my $lineno = $2;
|
my $lineno = $2;
|
||||||
$line = $3;
|
$line = $3;
|
||||||
if ( ( $line !~ /(.*)IS_ENABLED\s*\(\s*CONFIG_(\w+)(.*)/ ) && ( $line !~ /(\/[\*\/])(.*)IS_ENABLED/ ) ) {
|
if ( ( $line !~ /(.*)IS_ENABLED\s*\(\s*CONFIG_(\w+)(.*)/ ) && ( $line !~ /(\/[\*\/])(.*)IS_ENABLED/ ) ) {
|
||||||
show_warning("# uninterpreted IS_ENABLED at $file:$lineno: $line");
|
show_error("# uninterpreted IS_ENABLED at $file:$lineno: $line");
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
while ( $line =~ /(.*)IS_ENABLED\s*\(\s*CONFIG_(\w+)(.*)/ ) {
|
while ( $line =~ /(.*)IS_ENABLED\s*\(\s*CONFIG_(\w+)(.*)/ ) {
|
||||||
my $symbol = $2;
|
my $symbol = $2;
|
||||||
$line = $1 . $3;
|
$line = $1 . $3;
|
||||||
|
show_error("IS_ENABLED(CONFIG_$symbol) at $file:$lineno is deprecated. Use CONFIG($symbol) instead.");
|
||||||
#make sure that the type is bool
|
|
||||||
if ( exists $symbols{$symbol} ) {
|
|
||||||
if ( $symbols{$symbol}{type} ne "bool" ) {
|
|
||||||
show_error( "IS_ENABLED(CONFIG_$symbol) used at $file:$lineno."
|
|
||||||
. " IS_ENABLED is only valid for type 'bool', not '$symbols{$symbol}{type}'." );
|
|
||||||
} else {
|
|
||||||
show_warning("IS_ENABLED(CONFIG_$symbol) at $file:$lineno is deprecated. Use CONFIG($symbol) instead." );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
show_error("IS_ENABLED() used on unknown value CONFIG_$symbol at $file:$lineno.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} elsif ( $line =~ /^([^:]+):(\d+):\s*#\s*(?:el)?if\s+!?\s*\(?\s*CONFIG_(\w+)\)?(\s*==\s*1)?.*?$/ ) {
|
} elsif ( $line =~ /^([^:]+):(\d+):\s*#\s*(?:el)?if\s+!?\s*\(?\s*CONFIG_(\w+)\)?(\s*==\s*1)?.*?$/ ) {
|
||||||
my $file = $1;
|
my $file = $1;
|
||||||
my $lineno = $2;
|
my $lineno = $2;
|
||||||
my $symbol = $3;
|
my $symbol = $3;
|
||||||
# If the type is bool, give a warning that IS_ENABLED should be used
|
# If the type is bool, give a warning that CONFIG() should be used
|
||||||
if ( exists $symbols{$symbol} ) {
|
if ( exists $symbols{$symbol} ) {
|
||||||
if ( $symbols{$symbol}{type} eq "bool" ) {
|
if ( $symbols{$symbol}{type} eq "bool" ) {
|
||||||
show_error( "#if CONFIG_$symbol used at $file:$lineno."
|
show_error( "#if CONFIG_$symbol used at $file:$lineno."
|
||||||
|
@ -357,7 +328,7 @@ sub check_is_enabled {
|
||||||
my $file = $1;
|
my $file = $1;
|
||||||
my $lineno = $2;
|
my $lineno = $2;
|
||||||
my $symbol = $3;
|
my $symbol = $3;
|
||||||
# If the type is bool, give a warning that IS_ENABLED should be used
|
# If the type is bool, give a warning that CONFIG() should be used
|
||||||
if ( exists $symbols{$symbol} ) {
|
if ( exists $symbols{$symbol} ) {
|
||||||
if ( $symbols{$symbol}{type} eq "bool" ) {
|
if ( $symbols{$symbol}{type} eq "bool" ) {
|
||||||
show_error( "#if CONFIG_$symbol used at $file:$lineno."
|
show_error( "#if CONFIG_$symbol used at $file:$lineno."
|
||||||
|
|
|
@ -49,9 +49,7 @@ Warnings in Kconfig files:
|
||||||
globs are excluded from this check.
|
globs are excluded from this check.
|
||||||
|
|
||||||
Warnings in coreboot source files:
|
Warnings in coreboot source files:
|
||||||
- 'IS_ENABLED()' block that could not be interpreted.
|
|
||||||
- Kconfig files that are not loaded by a 'source' keyword.
|
- Kconfig files that are not loaded by a 'source' keyword.
|
||||||
- IS_ENABLED() used on a Kconfig (deprecated in favor of CONFIG())
|
|
||||||
- Naked use of boolean CONFIG_XXX Kconfig in C that's not wrapped in CONFIG()
|
- Naked use of boolean CONFIG_XXX Kconfig in C that's not wrapped in CONFIG()
|
||||||
|
|
||||||
Errors in Kconfig files:
|
Errors in Kconfig files:
|
||||||
|
@ -96,8 +94,8 @@ Errors in coreboot source files:
|
||||||
symbols.
|
symbols.
|
||||||
- '#ifdef' or '#if defined' used on bool, int, or hex - these are always
|
- '#ifdef' or '#if defined' used on bool, int, or hex - these are always
|
||||||
defined in coreboot's version of Kconfig.
|
defined in coreboot's version of Kconfig.
|
||||||
- The CONFIG() and IS_ENABLED() macros is only valid for bool symbols.
|
- The CONFIG() macro is only valid for bool symbols.
|
||||||
- CONFIG() or IS_ENABLED() used on unknown Kconfig, like an obsolete symbol.
|
- CONFIG() used on unknown Kconfig, like an obsolete symbol.
|
||||||
- The IS_ENABLED() macro is used on a symbol without the CONFIG_ prefix.
|
- The deprecated IS_ENABLED() macro is used.
|
||||||
|
|
||||||
TODO: check for choice entries at the top level
|
TODO: check for choice entries at the top level
|
||||||
|
|
Loading…
Reference in New Issue