~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/scripts/export_report.pl

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /scripts/export_report.pl (Version linux-6.12-rc7) and /scripts/export_report.pl (Version linux-5.4.284)


  1 #!/usr/bin/env perl                               
  2 # SPDX-License-Identifier: GPL-2.0-only           
  3 #                                                 
  4 # (C) Copyright IBM Corporation 2006.             
  5 #       Author : Ram Pai (linuxram@us.ibm.com)    
  6 #                                                 
  7 # Usage: export_report.pl -k Module.symvers [-    
  8 #                                                 
  9                                                   
 10 use warnings;                                     
 11 use Getopt::Std;                                  
 12 use strict;                                       
 13                                                   
 14 sub numerically {                                 
 15         my $no1 = (split /\s+/, $a)[1];           
 16         my $no2 = (split /\s+/, $b)[1];           
 17         return $no1 <=> $no2;                     
 18 }                                                 
 19                                                   
 20 sub alphabetically {                              
 21         my ($module1, $value1) = @{$a};           
 22         my ($module2, $value2) = @{$b};           
 23         return $value1 <=> $value2 || $module2    
 24 }                                                 
 25                                                   
 26 sub print_depends_on {                            
 27         my ($href) = @_;                          
 28         print "\n";                               
 29         for my $mod (sort keys %$href) {          
 30                 my $list = $href->{$mod};         
 31                 print "\t$mod:\n";                
 32                 foreach my $sym (sort numerica    
 33                         my ($symbol, $no) = sp    
 34                         printf("\t\t%-25s\n",     
 35                 }                                 
 36                 print "\n";                       
 37         }                                         
 38         print "\n";                               
 39         print "~"x80 , "\n";                      
 40 }                                                 
 41                                                   
 42 sub usage {                                       
 43         print "Usage: @_ -h -k Module.symvers     
 44               "\t-f: treat all the non-option     
 45               "Recommend using this as the las    
 46               "\t-h: print detailed help\n",      
 47               "\t-k: the path to Module.symver    
 48               "the file from the current direc    
 49               "\t-o outputfile: output the rep    
 50         exit 0;                                   
 51 }                                                 
 52                                                   
 53 sub collectcfiles {                               
 54     my @file;                                     
 55     open my $fh, '< modules.order' or die "can    
 56     while (<$fh>) {                               
 57         s/\.ko$/.mod.c/;                          
 58         push (@file, $_)                          
 59     }                                             
 60     close($fh);                                   
 61     chomp @file;                                  
 62     return @file;                                 
 63 }                                                 
 64                                                   
 65 my (%SYMBOL, %MODULE, %opt, @allcfiles);          
 66                                                   
 67 if (not getopts('hk:o:f',\%opt) or defined $op    
 68         usage($0);                                
 69 }                                                 
 70                                                   
 71 if (defined $opt{'f'}) {                          
 72         @allcfiles = @ARGV;                       
 73 } else {                                          
 74         @allcfiles = collectcfiles();             
 75 }                                                 
 76                                                   
 77 if (not defined $opt{'k'}) {                      
 78         $opt{'k'} = "Module.symvers";             
 79 }                                                 
 80                                                   
 81 open (my $module_symvers, '<', $opt{'k'})         
 82     or die "Sorry, cannot open $opt{'k'}: $!\n    
 83                                                   
 84 if (defined $opt{'o'}) {                          
 85     open (my $out, '>', $opt{'o'})                
 86         or die "Sorry, cannot open $opt{'o'} $    
 87                                                   
 88     select $out;                                  
 89 }                                                 
 90                                                   
 91 #                                                 
 92 # collect all the symbols and their attributes    
 93 # Module.symvers file                             
 94 #                                                 
 95 while ( <$module_symvers> ) {                     
 96         chomp;                                    
 97         my (undef, $symbol, $module, $gpl, $na    
 98         $SYMBOL { $symbol } =  [ $module , "0"    
 99 }                                                 
100 close($module_symvers);                           
101                                                   
102 #                                                 
103 # collect the usage count of each symbol.         
104 #                                                 
105 my $modversion_warnings = 0;                      
106                                                   
107 foreach my $thismod (@allcfiles) {                
108         my $module;                               
109                                                   
110         unless (open ($module, '<', $thismod))    
111                 warn "Sorry, cannot open $this    
112                 next;                             
113         }                                         
114                                                   
115         my $state=0;                              
116         while ( <$module> ) {                     
117                 chomp;                            
118                 if ($state == 0) {                
119                         $state = 1 if ($_ =~ /    
120                         next;                     
121                 }                                 
122                 if ($state == 1) {                
123                         $state = 2 if ($_ =~ /    
124                         next;                     
125                 }                                 
126                 if ($state == 2) {                
127                         if ( $_ !~ /0x[0-9a-f]    
128                                 next;             
129                         }                         
130                         my $sym = (split /([,"    
131                         my ($module, $value, $    
132                         $SYMBOL{ $sym } =  [ $    
133                         push(@{$MODULE{$thismo    
134                 }                                 
135         }                                         
136         if ($state != 2) {                        
137                 warn "WARNING:$thismod is not     
138                 $modversion_warnings++;           
139         }                                         
140         close($module);                           
141 }                                                 
142                                                   
143 print "\tThis file reports the exported symbol    
144         "\t\t\t\tmodules\n";                      
145 printf("%s\n\n\n","x"x80);                        
146 printf("\t\t\t\tINDEX\n\n\n");                    
147 printf("SECTION 1: Usage counts of all exporte    
148 printf("SECTION 2: List of modules and the exp    
149 printf("%s\n\n\n","x"x80);                        
150 printf("SECTION 1:\tThe exported symbols and t    
151 printf("%-25s\t%-25s\t%-5s\t%-25s\n", "Symbol"    
152         "export type");                           
153                                                   
154 #                                                 
155 # print the list of unused exported symbols       
156 #                                                 
157 foreach my $list (sort alphabetically values(%    
158         my ($module, $value, $symbol, $gpl) =     
159         printf("%-25s\t%-25s\t%-10s\t", $symbo    
160         if (defined $gpl) {                       
161                 printf("%-25s\n",$gpl);           
162         } else {                                  
163                 printf("\n");                     
164         }                                         
165 }                                                 
166 printf("%s\n\n\n","x"x80);                        
167                                                   
168 printf("SECTION 2:\n\tThis section reports exp    
169 modules. Each module lists the modules, and th    
170 it uses.  Each listed symbol reports the numbe    
171                                                   
172 print "\nNOTE: Got $modversion_warnings CONFIG    
173     if $modversion_warnings;                      
174                                                   
175 print "~"x80 , "\n";                              
176 for my $thismod (sort keys %MODULE) {             
177         my $list = $MODULE{$thismod};             
178         my %depends;                              
179         $thismod =~ s/\.mod\.c/.ko/;              
180         print "\t\t\t$thismod\n";                 
181         foreach my $symbol (@{$list}) {           
182                 my ($module, $value, undef, $g    
183                 push (@{$depends{"$module"}},     
184         }                                         
185         print_depends_on(\%depends);              
186 }                                                 
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php