'extern' checking information is not clear, refine it.
Plus, fix a comment.
Signed-off-by: WANG Cong <[email protected]>
Cc: Sam Ravnborg <[email protected]>
----
diff --git a/scripts/headers_check.pl b/scripts/headers_check.pl
index 56f90a4..3923888 100644
--- a/scripts/headers_check.pl
+++ b/scripts/headers_check.pl
@@ -2,7 +2,7 @@
#
# headers_check.pl execute a number of trivial consistency checks
#
-# Usage: headers_check.pl dir [files...]
+# Usage: headers_check.pl dir arch [files...]
# dir: dir to look for included files
# arch: architecture
# files: list of files to check
@@ -37,7 +37,7 @@ foreach my $file (@files) {
&check_include();
&check_asm_types();
&check_sizetypes();
- &check_prototypes();
+ &check_declarations();
# Dropped for now. Too much noise &check_config();
}
close FH;
@@ -61,10 +61,14 @@ sub check_include
}
}
-sub check_prototypes
+sub check_declarations
{
- if ($line =~ m/^\s*extern\b/) {
- printf STDERR "$filename:$lineno: extern's make no sense in userspace\n";
+ if ($line =~m/^\s*extern\b/) {
+ if ($line =~ m/^\s*extern\b.*\(.*\)/) {
+ printf STDERR "$filename:$lineno: extern's make no sense in userspace\n";
+ } else {
+ printf STDERR "$filename:$lineno: exporting global variable to userspace is suspicious\n";
+ }
}
}
'drop' variable is unused.
'ppc' and 'sparc64' directories don't exist in arch/,
and I think their headers can be well exported now, so
just remove them.
Signed-off-by: WANG Cong <[email protected]>
Cc: Sam Ravnborg <[email protected]>
------
diff --git a/scripts/headers.sh b/scripts/headers.sh
index d33426f..0308ecc 100755
--- a/scripts/headers.sh
+++ b/scripts/headers.sh
@@ -15,19 +15,12 @@ do_command()
fi
}
-# Do not try this architecture
-drop="generic um ppc sparc64 cris"
-
archs=$(ls ${srctree}/arch)
for arch in ${archs}; do
case ${arch} in
um) # no userspace export
;;
- ppc) # headers exported by powerpc
- ;;
- sparc64) # headers exported by sparc
- ;;
cris) # headers export are known broken
;;
*)
On Friday 05 June 2009, Amerigo Wang wrote:
> -sub check_prototypes
> +sub check_declarations
> {
> - if ($line =~ m/^\s*extern\b/) {
> - printf STDERR "$filename:$lineno: extern's make no sense in userspace\n";
> + if ($line =~m/^\s*extern\b/) {
> + if ($line =~ m/^\s*extern\b.*\(.*\)/) {
> + printf STDERR "$filename:$lineno: extern's make no sense in userspace\n";
> + } else {
> + printf STDERR "$filename:$lineno: exporting global variable to userspace is suspicious\n";
> + }
> }
> }
I don't think we really need that distinction here, the old
text applies to both. But please find a way to get rid of
the "extern's".
http://angryflower.com/bobsqu.gif
Arnd <><
Arnd Bergmann wrote:
> On Friday 05 June 2009, Amerigo Wang wrote:
>
>> -sub check_prototypes
>> +sub check_declarations
>> {
>> - if ($line =~ m/^\s*extern\b/) {
>> - printf STDERR "$filename:$lineno: extern's make no sense in userspace\n";
>> + if ($line =~m/^\s*extern\b/) {
>> + if ($line =~ m/^\s*extern\b.*\(.*\)/) {
>> + printf STDERR "$filename:$lineno: extern's make no sense in userspace\n";
>> + } else {
>> + printf STDERR "$filename:$lineno: exporting global variable to userspace is suspicious\n";
>> + }
>> }
>> }
>>
>
> I don't think we really need that distinction here, the old
> text applies to both.
Even for function declarations?
> But please find a way to get rid of
> the "extern's".
>
Here, that one has already been removed by other patch ...
Arnd Bergmann wrote:
> On Friday 05 June 2009, Amerigo Wang wrote:
>> -sub check_prototypes
>> +sub check_declarations
>> {
>> - if ($line =~ m/^\s*extern\b/) {
>> - printf STDERR "$filename:$lineno: extern's make no sense in userspace\n";
>> + if ($line =~m/^\s*extern\b/) {
>> + if ($line =~ m/^\s*extern\b.*\(.*\)/) {
>> + printf STDERR "$filename:$lineno: extern's make no sense in userspace\n";
>> + } else {
>> + printf STDERR "$filename:$lineno: exporting global variable to userspace is suspicious\n";
>> + }
>> }
>> }
>
> I don't think we really need that distinction here, the old
> text applies to both. But please find a way to get rid of
> the "extern's".
>
> http://angryflower.com/bobsqu.gif
Hehe, made me smile :-)
On Friday 05 June 2009, Amerigo Wang wrote:
>
> >
> > I don't think we really need that distinction here, the old
> > text applies to both.
>
> Even for function declarations?
Yes. Any use of 'extern' in a kernel header file by definition
refers to a symbol that is defined in the kernel and therefore
not accessibly in user space. It is the same problem for
variables and functions, with the complication that leaving
out the 'extern' statement on a function declaration will
hide it from this check, while leaving it out on a variable
declaration turns it into a definition.
Arnd <><
On Thu, Jun 04, 2009 at 10:12:09PM -0400, Amerigo Wang wrote:
>
> 'drop' variable is unused.
>
> 'ppc' and 'sparc64' directories don't exist in arch/,
> and I think their headers can be well exported now, so
> just remove them.
Applied,
Sam
On Thu, Jun 04, 2009 at 10:12:01PM -0400, Amerigo Wang wrote:
>
> 'extern' checking information is not clear, refine it.
> Plus, fix a comment.
Applied,
Sam