scripts/namespace.pl: improve to get more correct results
authorAmerigo Wang <amwang@redhat.com>
Wed, 27 Oct 2010 19:42:01 +0000 (12:42 -0700)
committerMichal Marek <mmarek@suse.cz>
Wed, 27 Oct 2010 22:07:46 +0000 (00:07 +0200)
Exclude more symbols from arch/x86/vdso/ and arch/x86/boot/; add some more
linker-defined symbols into exception list; add other cond_syscalls
besides "sys_*".

Signed-off-by: Amerigo Wang <amwang@redhat.com>
Cc: Stephen Hemminger <shemminger@vyatta.com>
Cc: Michal Marek <mmarek@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Michal Marek <mmarek@suse.cz>
scripts/namespace.pl

index bccf610..a71be6b 100755 (executable)
@@ -133,6 +133,12 @@ my %nameexception = (
     '__nosave_begin'   => 1,
     '__nosave_end'     => 1,
     'pg0'              => 1,
+    'vdso_enabled'     => 1,
+    '__stack_chk_fail'  => 1,
+    'VDSO32_PRELINK'   => 1,
+    'VDSO32_vsyscall'  => 1,
+    'VDSO32_rt_sigreturn'=>1,
+    'VDSO32_sigreturn' => 1,
 );
 
 
@@ -157,7 +163,8 @@ sub linux_objects
        if (/.*\.o$/ &&
                ! (
                m:/built-in.o$:
-               || m:arch/x86/kernel/vsyscall-syms.o$:
+               || m:arch/x86/vdso/:
+               || m:arch/x86/boot/:
                || m:arch/ia64/ia32/ia32.o$:
                || m:arch/ia64/kernel/gate-syms.o$:
                || m:arch/ia64/lib/__divdi3.o$:
@@ -200,6 +207,7 @@ sub linux_objects
                || m:^.*/\.tmp_:
                || m:^\.tmp_:
                || m:/vmlinux-obj.o$:
+               || m:^tools/:
                )
        ) {
                do_nm($basename, $_);
@@ -355,20 +363,15 @@ sub list_multiply_defined
        foreach my $name (keys(%def)) {
                if ($#{$def{$name}} > 0) {
                        # Special case for cond_syscall
-                       if ($#{$def{$name}} == 1 && $name =~ /^sys_/) {
+                       if ($#{$def{$name}} == 1 &&
+                          ($name =~ /^sys_/ || $name =~ /^compat_sys_/ ||
+                           $name =~ /^sys32_/)) {
                                if($def{$name}[0] eq "kernel/sys_ni.o" ||
                                   $def{$name}[1] eq "kernel/sys_ni.o") {
                                        &drop_def("kernel/sys_ni.o", $name);
                                        next;
                                }
                        }
-                       # Special case for i386 entry code
-                       if ($#{$def{$name}} == 1 && $name =~ /^__kernel_/ &&
-                           $def{$name}[0] eq "arch/x86/kernel/vsyscall-int80_32.o" &&
-                           $def{$name}[1] eq "arch/x86/kernel/vsyscall-sysenter_32.o") {
-                               &drop_def("arch/x86/kernel/vsyscall-sysenter_32.o", $name);
-                               next;
-                       }
 
                        printf "$name is multiply defined in :-\n";
                        foreach my $module (@{$def{$name}}) {