mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 16:24:13 +08:00
7e3fa56141
The check for references to CONFIG_ symbols in exported headers turned out to be too agressive with the current state of affairs. After the work of Jaswinder to clean up all relevant cases we are down to almost pure noise. So lets drop the check for now - we can always add it back later should our headers be ready for that. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
123 lines
2.6 KiB
Perl
123 lines
2.6 KiB
Perl
#!/usr/bin/perl -w
|
|
#
|
|
# headers_check.pl execute a number of trivial consistency checks
|
|
#
|
|
# Usage: headers_check.pl dir [files...]
|
|
# dir: dir to look for included files
|
|
# arch: architecture
|
|
# files: list of files to check
|
|
#
|
|
# The script reads the supplied files line by line and:
|
|
#
|
|
# 1) for each include statement it checks if the
|
|
# included file actually exists.
|
|
# Only include files located in asm* and linux* are checked.
|
|
# The rest are assumed to be system include files.
|
|
#
|
|
# 2) It is checked that prototypes does not use "extern"
|
|
#
|
|
# 3) Check for leaked CONFIG_ symbols
|
|
|
|
use strict;
|
|
|
|
my ($dir, $arch, @files) = @ARGV;
|
|
|
|
my $ret = 0;
|
|
my $line;
|
|
my $lineno = 0;
|
|
my $filename;
|
|
|
|
foreach my $file (@files) {
|
|
local *FH;
|
|
$filename = $file;
|
|
open(FH, "<$filename") or die "$filename: $!\n";
|
|
$lineno = 0;
|
|
while ($line = <FH>) {
|
|
$lineno++;
|
|
&check_include();
|
|
&check_asm_types();
|
|
&check_sizetypes();
|
|
&check_prototypes();
|
|
# Dropped for now. Too much noise &check_config();
|
|
}
|
|
close FH;
|
|
}
|
|
exit $ret;
|
|
|
|
sub check_include
|
|
{
|
|
if ($line =~ m/^\s*#\s*include\s+<((asm|linux).*)>/) {
|
|
my $inc = $1;
|
|
my $found;
|
|
$found = stat($dir . "/" . $inc);
|
|
if (!$found) {
|
|
$inc =~ s#asm/#asm-$arch/#;
|
|
$found = stat($dir . "/" . $inc);
|
|
}
|
|
if (!$found) {
|
|
printf STDERR "$filename:$lineno: included file '$inc' is not exported\n";
|
|
$ret = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
sub check_prototypes
|
|
{
|
|
if ($line =~ m/^\s*extern\b/) {
|
|
printf STDERR "$filename:$lineno: extern's make no sense in userspace\n";
|
|
}
|
|
}
|
|
|
|
sub check_config
|
|
{
|
|
if ($line =~ m/[^a-zA-Z0-9_]+CONFIG_([a-zA-Z0-9]+)[^a-zA-Z0-9]/) {
|
|
printf STDERR "$filename:$lineno: leaks CONFIG_$1 to userspace where it is not valid\n";
|
|
}
|
|
}
|
|
|
|
my $linux_asm_types;
|
|
sub check_asm_types()
|
|
{
|
|
if ($filename =~ /types.h|int-l64.h|int-ll64.h/o) {
|
|
return;
|
|
}
|
|
if ($lineno == 1) {
|
|
$linux_asm_types = 0;
|
|
} elsif ($linux_asm_types >= 1) {
|
|
return;
|
|
}
|
|
if ($line =~ m/^\s*#\s*include\s+<asm\/types.h>/) {
|
|
$linux_asm_types = 1;
|
|
printf STDERR "$filename:$lineno: " .
|
|
"include of <linux/types.h> is preferred over <asm/types.h>\n"
|
|
# Warn until headers are all fixed
|
|
#$ret = 1;
|
|
}
|
|
}
|
|
|
|
my $linux_types;
|
|
sub check_sizetypes
|
|
{
|
|
if ($filename =~ /types.h|int-l64.h|int-ll64.h/o) {
|
|
return;
|
|
}
|
|
if ($lineno == 1) {
|
|
$linux_types = 0;
|
|
} elsif ($linux_types >= 1) {
|
|
return;
|
|
}
|
|
if ($line =~ m/^\s*#\s*include\s+<linux\/types.h>/) {
|
|
$linux_types = 1;
|
|
return;
|
|
}
|
|
if ($line =~ m/__[us](8|16|32|64)\b/) {
|
|
printf STDERR "$filename:$lineno: " .
|
|
"found __[us]{8,16,32,64} type " .
|
|
"without #include <linux/types.h>\n";
|
|
$linux_types = 2;
|
|
# Warn until headers are all fixed
|
|
#$ret = 1;
|
|
}
|
|
}
|
|
|