diff options
Diffstat (limited to 'scripts/namespace.pl')
| -rwxr-xr-x | scripts/namespace.pl | 65 |
1 files changed, 33 insertions, 32 deletions
diff --git a/scripts/namespace.pl b/scripts/namespace.pl index c6e88c652c2f..361d0f71184b 100755 --- a/scripts/namespace.pl +++ b/scripts/namespace.pl | |||
| @@ -175,12 +175,11 @@ sub do_nm | |||
| 175 | } | 175 | } |
| 176 | if (! -e "$source.c" && ! -e "$source.S") { | 176 | if (! -e "$source.c" && ! -e "$source.S") { |
| 177 | # No obvious source, exclude the object if it is conglomerate | 177 | # No obvious source, exclude the object if it is conglomerate |
| 178 | if (! open(OBJDUMPDATA, "$objdump $basename|")) { | 178 | open(my $objdumpdata, "$objdump $basename|") |
| 179 | printf STDERR "$objdump $fullname failed $!\n"; | 179 | or die "$objdump $fullname failed $!\n"; |
| 180 | return; | 180 | |
| 181 | } | ||
| 182 | my $comment; | 181 | my $comment; |
| 183 | while (<OBJDUMPDATA>) { | 182 | while (<$objdumpdata>) { |
| 184 | chomp(); | 183 | chomp(); |
| 185 | if (/^In archive/) { | 184 | if (/^In archive/) { |
| 186 | # Archives are always conglomerate | 185 | # Archives are always conglomerate |
| @@ -190,18 +189,18 @@ sub do_nm | |||
| 190 | next if (! /^[ 0-9a-f]{5,} /); | 189 | next if (! /^[ 0-9a-f]{5,} /); |
| 191 | $comment .= substr($_, 43); | 190 | $comment .= substr($_, 43); |
| 192 | } | 191 | } |
| 193 | close(OBJDUMPDATA); | 192 | close($objdumpdata); |
| 193 | |||
| 194 | if (!defined($comment) || $comment !~ /GCC\:.*GCC\:/m) { | 194 | if (!defined($comment) || $comment !~ /GCC\:.*GCC\:/m) { |
| 195 | printf STDERR "No source file found for $fullname\n"; | 195 | printf STDERR "No source file found for $fullname\n"; |
| 196 | } | 196 | } |
| 197 | return; | 197 | return; |
| 198 | } | 198 | } |
| 199 | if (! open(NMDATA, "$nm $basename|")) { | 199 | open (my $nmdata, "$nm $basename|") |
| 200 | printf STDERR "$nm $fullname failed $!\n"; | 200 | or die "$nm $fullname failed $!\n"; |
| 201 | return; | 201 | |
| 202 | } | ||
| 203 | my @nmdata; | 202 | my @nmdata; |
| 204 | while (<NMDATA>) { | 203 | while (<$nmdata>) { |
| 205 | chop; | 204 | chop; |
| 206 | ($type, $name) = (split(/ +/, $_, 3))[1..2]; | 205 | ($type, $name) = (split(/ +/, $_, 3))[1..2]; |
| 207 | # Expected types | 206 | # Expected types |
| @@ -268,7 +267,8 @@ sub do_nm | |||
| 268 | } | 267 | } |
| 269 | } | 268 | } |
| 270 | } | 269 | } |
| 271 | close(NMDATA); | 270 | close($nmdata); |
| 271 | |||
| 272 | if ($#nmdata < 0) { | 272 | if ($#nmdata < 0) { |
| 273 | if ( | 273 | if ( |
| 274 | $fullname ne "lib/brlock.o" | 274 | $fullname ne "lib/brlock.o" |
| @@ -316,8 +316,7 @@ sub drop_def | |||
| 316 | 316 | ||
| 317 | sub list_multiply_defined | 317 | sub list_multiply_defined |
| 318 | { | 318 | { |
| 319 | my ($name, $module); | 319 | foreach my $name (keys(%def)) { |
| 320 | foreach $name (keys(%def)) { | ||
| 321 | if ($#{$def{$name}} > 0) { | 320 | if ($#{$def{$name}} > 0) { |
| 322 | # Special case for cond_syscall | 321 | # Special case for cond_syscall |
| 323 | if ($#{$def{$name}} == 1 && $name =~ /^sys_/ && | 322 | if ($#{$def{$name}} == 1 && $name =~ /^sys_/ && |
| @@ -333,8 +332,9 @@ sub list_multiply_defined | |||
| 333 | &drop_def("arch/x86/kernel/vsyscall-sysenter_32.o", $name); | 332 | &drop_def("arch/x86/kernel/vsyscall-sysenter_32.o", $name); |
| 334 | next; | 333 | next; |
| 335 | } | 334 | } |
| 335 | |||
| 336 | printf "$name is multiply defined in :-\n"; | 336 | printf "$name is multiply defined in :-\n"; |
| 337 | foreach $module (@{$def{$name}}) { | 337 | foreach my $module (@{$def{$name}}) { |
| 338 | printf "\t$module\n"; | 338 | printf "\t$module\n"; |
| 339 | } | 339 | } |
| 340 | } | 340 | } |
| @@ -343,12 +343,13 @@ sub list_multiply_defined | |||
| 343 | 343 | ||
| 344 | sub resolve_external_references | 344 | sub resolve_external_references |
| 345 | { | 345 | { |
| 346 | my ($object, $type, $name, $i, $j, $kstrtab, $ksymtab, $export); | 346 | my ($kstrtab, $ksymtab, $export); |
| 347 | |||
| 347 | printf "\n"; | 348 | printf "\n"; |
| 348 | foreach $object (keys(%nmdata)) { | 349 | foreach my $object (keys(%nmdata)) { |
| 349 | my $nmdata = $nmdata{$object}; | 350 | my $nmdata = $nmdata{$object}; |
| 350 | for ($i = 0; $i <= $#{$nmdata}; ++$i) { | 351 | for (my $i = 0; $i <= $#{$nmdata}; ++$i) { |
| 351 | ($type, $name) = split(' ', $nmdata->[$i], 2); | 352 | my ($type, $name) = split(' ', $nmdata->[$i], 2); |
| 352 | if ($type eq "U" || $type eq "w") { | 353 | if ($type eq "U" || $type eq "w") { |
| 353 | if (exists($def{$name}) || exists($ksymtab{$name})) { | 354 | if (exists($def{$name}) || exists($ksymtab{$name})) { |
| 354 | # add the owning object to the nmdata | 355 | # add the owning object to the nmdata |
| @@ -357,7 +358,7 @@ sub resolve_external_references | |||
| 357 | $kstrtab = "R __kstrtab_$name"; | 358 | $kstrtab = "R __kstrtab_$name"; |
| 358 | $ksymtab = "R __ksymtab_$name"; | 359 | $ksymtab = "R __ksymtab_$name"; |
| 359 | $export = 0; | 360 | $export = 0; |
| 360 | for ($j = 0; $j <= $#{$nmdata}; ++$j) { | 361 | for (my $j = 0; $j <= $#{$nmdata}; ++$j) { |
| 361 | if ($nmdata->[$j] eq $kstrtab || | 362 | if ($nmdata->[$j] eq $kstrtab || |
| 362 | $nmdata->[$j] eq $ksymtab) { | 363 | $nmdata->[$j] eq $ksymtab) { |
| 363 | $export = 1; | 364 | $export = 1; |
| @@ -424,11 +425,11 @@ sub resolve_external_references | |||
| 424 | sub list_extra_externals | 425 | sub list_extra_externals |
| 425 | { | 426 | { |
| 426 | my %noref = (); | 427 | my %noref = (); |
| 427 | my ($name, @module, $module, $export); | 428 | |
| 428 | foreach $name (keys(%def)) { | 429 | foreach my $name (keys(%def)) { |
| 429 | if (! exists($ref{$name})) { | 430 | if (! exists($ref{$name})) { |
| 430 | @module = @{$def{$name}}; | 431 | my @module = @{$def{$name}}; |
| 431 | foreach $module (@module) { | 432 | foreach my $module (@module) { |
| 432 | if (! exists($noref{$module})) { | 433 | if (! exists($noref{$module})) { |
| 433 | $noref{$module} = []; | 434 | $noref{$module} = []; |
| 434 | } | 435 | } |
| @@ -438,16 +439,16 @@ sub list_extra_externals | |||
| 438 | } | 439 | } |
| 439 | if (%noref) { | 440 | if (%noref) { |
| 440 | printf "\nExternally defined symbols with no external references\n"; | 441 | printf "\nExternally defined symbols with no external references\n"; |
| 441 | foreach $module (sort(keys(%noref))) { | 442 | foreach my $module (sort(keys(%noref))) { |
| 442 | printf " $module\n"; | 443 | printf " $module\n"; |
| 443 | foreach (sort(@{$noref{$module}})) { | 444 | foreach (sort(@{$noref{$module}})) { |
| 444 | if (exists($export{$_})) { | 445 | my $export; |
| 445 | $export = " (export only)"; | 446 | if (exists($export{$_})) { |
| 446 | } | 447 | $export = " (export only)"; |
| 447 | else { | 448 | } else { |
| 448 | $export = ""; | 449 | $export = ""; |
| 449 | } | 450 | } |
| 450 | printf " $_$export\n"; | 451 | printf " $_$export\n"; |
| 451 | } | 452 | } |
| 452 | } | 453 | } |
| 453 | } | 454 | } |
