/usr/src/linux-headers-5.15.0-181/scripts
NameSizeModeActions
atomic/-0755rm
basic/-0755rm
clang-tools/-0755rm
coccinelle/-0755rm
dtc/-0755rm
dummy-tools/-0755rm
gcc-plugins/-0755rm
gdb/-0755rm
genksyms/-0755rm
kconfig/-0755rm
ksymoops/-0755rm
mod/-0755rm
package/-0755rm
selinux/-0755rm
tracing/-0755rm
.gitignore1600644editdlrm
adjust_autoksyms.sh21220755editdlrm
as-version.sh20810755editdlrm
asn1_compiler.c361800644editdlrm
bin2c.c7430644editdlrm
bloat-o-meter34450755editdlrm
bootgraph.pl57800755editdlrm
bpf_doc.py255820755editdlrm
cc-can-link.sh1660755editdlrm
cc-version.sh15490755editdlrm
check-sysctl-docs44720755editdlrm
checkdeclares.pl11230755editdlrm
checkincludes.pl19880755editdlrm
checkkconfigsymbols.py161260755editdlrm
checkpatch.pl2291280755editdlrm
checkstack.pl60010755editdlrm
checksyscalls.sh76000755editdlrm
checkversion.pl22110755editdlrm
check_extable.sh50480755editdlrm
cleanfile35420755editdlrm
cleanpatch51820755editdlrm
coccicheck80750755editdlrm
config48990755editdlrm
const_structs.checkpatch10090644editdlrm
decodecode29520755editdlrm
decode_stacktrace.sh76910755editdlrm
depmod.sh14410755editdlrm
dev-needs.sh62190755editdlrm
diffconfig42220755editdlrm
documentation-file-ref-check56870755editdlrm
export_report.pl46050755editdlrm
extract-cert.c37200644editdlrm
extract-ikconfig17340755editdlrm
extract-module-sig.pl37460755editdlrm
extract-sys-certs.pl38360755editdlrm
extract-vmlinux16950755editdlrm
extract_xc3028.pl456860755editdlrm
faddr2line83640755editdlrm
file-size.sh860755editdlrm
find-unused-docs.sh13040755editdlrm
gcc-goto.sh5110755editdlrm
gcc-ld7110755editdlrm
gcc-x86_32-has-stack-protector.sh4050755editdlrm
gcc-x86_64-has-stack-protector.sh1950755editdlrm
generate_initcall_order.pl60900755editdlrm
gen_autoksyms.sh15090755editdlrm
gen_ksymdeps.sh5560755editdlrm
get_abi.pl154630755editdlrm
get_dvb_firmware251280755editdlrm
get_feat.pl146890755editdlrm
get_maintainer.pl687440755editdlrm
gfp-translate17320755editdlrm
headerdep.pl35870755editdlrm
headers_check.pl38190755editdlrm
headers_install.sh34310755editdlrm
insert-sys-cert.c133920644editdlrm
jobserver-exec22130755editdlrm
kallsyms.c184980644editdlrm
Kbuild.include103920644editdlrm
Kconfig.include26350644editdlrm
kernel-doc703880755editdlrm
ld-version.sh18640755editdlrm
leaking_addresses.pl131120755editdlrm
Lindent5020755editdlrm
link-vmlinux.sh111810755editdlrm
Makefile16810644editdlrm
Makefile.asm-generic18640644editdlrm
Makefile.build201350644editdlrm
Makefile.clang16020644editdlrm
Makefile.clean22540644editdlrm
Makefile.compiler28060644editdlrm
Makefile.dtbinst10070644editdlrm
Makefile.extrawarn30920644editdlrm
Makefile.gcc-plugins27780644editdlrm
Makefile.headersinst29500644editdlrm
Makefile.host47430644editdlrm
Makefile.kasan17150644editdlrm
Makefile.kcov3330644editdlrm
Makefile.kcsan7390644editdlrm
Makefile.lib184550644editdlrm
Makefile.modfinal27930644editdlrm
Makefile.modinst25810644editdlrm
Makefile.modpost44780644editdlrm
Makefile.package67710644editdlrm
Makefile.ubsan7700644editdlrm
Makefile.userprogs16070644editdlrm
makelst8080755editdlrm
markup_oops.pl81100755editdlrm
min-tool-version.sh5580755editdlrm
mkcompile_h25410755editdlrm
mksysmap13690755editdlrm
mkuboot.sh4140755editdlrm
module.lds.S16910644editdlrm
modules-check.sh4270755editdlrm
nsdeps17650644editdlrm
objdiff29050755editdlrm
pahole-flags.sh7490755editdlrm
pahole-version.sh2690755editdlrm
parse-maintainers.pl46460755editdlrm
patch-kernel101850755editdlrm
profile2linkerlist.pl4140755editdlrm
prune-kernel7080755editdlrm
recordmcount.c171520644editdlrm
recordmcount.h198320644editdlrm
recordmcount.pl180490755editdlrm
remove-stale-files13360755editdlrm
setlocalversion35800755editdlrm
show_delta30870755editdlrm
sign-file.c101720644editdlrm
sorttable.c89490644editdlrm
sorttable.h100630644editdlrm
spdxcheck-test.sh2770644editdlrm
spdxcheck.py103340755editdlrm
spelling.txt326460644editdlrm
sphinx-pre-install250350755editdlrm
split-man.pl6040755editdlrm
stackdelta18870755editdlrm
stackusage7940755editdlrm
subarch.include6190644editdlrm
syscallhdr.sh19350755editdlrm
syscallnr.sh14850755editdlrm
syscalltbl.sh14890755editdlrm
tags.sh101100755editdlrm
tools-support-relr.sh5460755editdlrm
ubuntu-retpoline-extract-one74340644editdlrm
unifdef.c356370644editdlrm
ver_linux26480755editdlrm
xen-hypercalls.sh3860755editdlrm
xz_wrap.sh5630755editdlrm
Edit: /usr/src/linux-headers-5.15.0-181/scripts/export_report.pl (4605B)
#!/usr/bin/env perl # SPDX-License-Identifier: GPL-2.0-only # # (C) Copyright IBM Corporation 2006. # Author : Ram Pai (linuxram@us.ibm.com) # # Usage: export_report.pl -k Module.symvers [-o report_file ] -f *.mod.c # use warnings; use Getopt::Std; use strict; sub numerically { my $no1 = (split /\s+/, $a)[1]; my $no2 = (split /\s+/, $b)[1]; return $no1 <=> $no2; } sub alphabetically { my ($module1, $value1) = @{$a}; my ($module2, $value2) = @{$b}; return $value1 <=> $value2 || $module2 cmp $module1; } sub print_depends_on { my ($href) = @_; print "\n"; for my $mod (sort keys %$href) { my $list = $href->{$mod}; print "\t$mod:\n"; foreach my $sym (sort numerically @{$list}) { my ($symbol, $no) = split /\s+/, $sym; printf("\t\t%-25s\n", $symbol); } print "\n"; } print "\n"; print "~"x80 , "\n"; } sub usage { print "Usage: @_ -h -k Module.symvers [ -o outputfile ] \n", "\t-f: treat all the non-option argument as .mod.c files. ", "Recommend using this as the last option\n", "\t-h: print detailed help\n", "\t-k: the path to Module.symvers file. By default uses ", "the file from the current directory\n", "\t-o outputfile: output the report to outputfile\n"; exit 0; } sub collectcfiles { my @file; open my $fh, '< modules.order' or die "cannot open modules.order: $!\n"; while (<$fh>) { s/\.ko$/.mod.c/; push (@file, $_) } close($fh); chomp @file; return @file; } my (%SYMBOL, %MODULE, %opt, @allcfiles); if (not getopts('hk:o:f',\%opt) or defined $opt{'h'}) { usage($0); } if (defined $opt{'f'}) { @allcfiles = @ARGV; } else { @allcfiles = collectcfiles(); } if (not defined $opt{'k'}) { $opt{'k'} = "Module.symvers"; } open (my $module_symvers, '<', $opt{'k'}) or die "Sorry, cannot open $opt{'k'}: $!\n"; if (defined $opt{'o'}) { open (my $out, '>', $opt{'o'}) or die "Sorry, cannot open $opt{'o'} $!\n"; select $out; } # # collect all the symbols and their attributes from the # Module.symvers file # while ( <$module_symvers> ) { chomp; my (undef, $symbol, $module, $gpl, $namespace) = split('\t'); $SYMBOL { $symbol } = [ $module , "0" , $symbol, $gpl]; } close($module_symvers); # # collect the usage count of each symbol. # my $modversion_warnings = 0; foreach my $thismod (@allcfiles) { my $module; unless (open ($module, '<', $thismod)) { warn "Sorry, cannot open $thismod: $!\n"; next; } my $state=0; while ( <$module> ) { chomp; if ($state == 0) { $state = 1 if ($_ =~ /static const struct modversion_info/); next; } if ($state == 1) { $state = 2 if ($_ =~ /__attribute__\(\(section\("__versions"\)\)\)/); next; } if ($state == 2) { if ( $_ !~ /0x[0-9a-f]+,/ ) { next; } my $sym = (split /([,"])/,)[4]; my ($module, $value, $symbol, $gpl) = @{$SYMBOL{$sym}}; $SYMBOL{ $sym } = [ $module, $value+1, $symbol, $gpl]; push(@{$MODULE{$thismod}} , $sym); } } if ($state != 2) { warn "WARNING:$thismod is not built with CONFIG_MODVERSIONS enabled\n"; $modversion_warnings++; } close($module); } print "\tThis file reports the exported symbols usage patterns by in-tree\n", "\t\t\t\tmodules\n"; printf("%s\n\n\n","x"x80); printf("\t\t\t\tINDEX\n\n\n"); printf("SECTION 1: Usage counts of all exported symbols\n"); printf("SECTION 2: List of modules and the exported symbols they use\n"); printf("%s\n\n\n","x"x80); printf("SECTION 1:\tThe exported symbols and their usage count\n\n"); printf("%-25s\t%-25s\t%-5s\t%-25s\n", "Symbol", "Module", "Usage count", "export type"); # # print the list of unused exported symbols # foreach my $list (sort alphabetically values(%SYMBOL)) { my ($module, $value, $symbol, $gpl) = @{$list}; printf("%-25s\t%-25s\t%-10s\t", $symbol, $module, $value); if (defined $gpl) { printf("%-25s\n",$gpl); } else { printf("\n"); } } printf("%s\n\n\n","x"x80); printf("SECTION 2:\n\tThis section reports export-symbol-usage of in-kernel modules. Each module lists the modules, and the symbols from that module that it uses. Each listed symbol reports the number of modules using it\n"); print "\nNOTE: Got $modversion_warnings CONFIG_MODVERSIONS warnings\n\n" if $modversion_warnings; print "~"x80 , "\n"; for my $thismod (sort keys %MODULE) { my $list = $MODULE{$thismod}; my %depends; $thismod =~ s/\.mod\.c/.ko/; print "\t\t\t$thismod\n"; foreach my $symbol (@{$list}) { my ($module, $value, undef, $gpl) = @{$SYMBOL{$symbol}}; push (@{$depends{"$module"}}, "$symbol $value"); } print_depends_on(\%depends); }