From nobody Mon Nov 25 02:47:22 2024 Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AFC7E1E32D8 for ; Wed, 30 Oct 2024 17:16:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1730308599; cv=none; b=OqRMSvYwVLIAzUQhbLK4dbpvp9Zr299+gDjWqTuvArJqxYYus9uKh7NWAVVKnhLf6QNPBohN3RT4DWNlEwBNgA1mET0PwoExGkotoHTh4sp9LMpN2w+0RXYzwKFYEpcRfnixCcr7r+uLN/EUJgAx/l17piU9USNxxwT/NqBNMgk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1730308599; c=relaxed/simple; bh=Tm1wNYqvzeAF3HnTDVTnjC8Rcq/6gl29WbAbQZ1MVNg=; h=Date:Mime-Version:Message-ID:Subject:From:To:Cc:Content-Type; b=gdLNpJDo70xXGRTyL6Aq+lS5g62PXmcp3ba8vrFJWqOJnB998Mh90FafnpqjrJXrbznJoDDVwcqaYUN0NFWXUeaS5zkpjt0dXGC1l1UF6y8Xxp7DGoZNSlbTYUy9Yx1D2FLkIZY+tDqm/KTEHsPCkcKLsK13HJZ/Q8NLlkOAyZ8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--mmaurer.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ggoZYOY+; arc=none smtp.client-ip=209.85.219.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--mmaurer.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ggoZYOY+" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-e30df8dbfd4so79818276.0 for ; Wed, 30 Oct 2024 10:16:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1730308596; x=1730913396; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=g6NaQ3IuZZfSraqlt8TSkxzrbSmeVk6CTF7q3lZSxz4=; b=ggoZYOY+OBg8MYH9iZI4VkvQ9iww88haatF39UO3Di1sJp0y9oNHbNspMBdEcVNZ/N 9e+KHQjRjP9h4j0sVl6jqBbxk/paVpdkvXFPeIqhOp1vn7GsW23+QqlFZVUPvGE/EOSp nBFq2tKYbni5iyhKjyEmfaU32JqUYjX5ZouSTEWh0nG5QEM5RAcdyY9kncNM+BIjolED VjjB58mBrdVr/mvNDzHNEQKLIICmhVZtRr+NjVmLHof6q0fs3w8hSLVN42jPkdTOLK1b LbBvo4zXemia7U3JfMIgKD81q7WnK6cjHPxsTGI5HndK3luzXxzbtd6F2cZtqBO2EM4K 5gRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730308596; x=1730913396; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=g6NaQ3IuZZfSraqlt8TSkxzrbSmeVk6CTF7q3lZSxz4=; b=mli1OARQIbCwHP/ihNU/g6tMoxSIO1k2F0jyPjr39X7bKYu5UUHvNmis2tXi+Ekgfa GRpkqlvNoDfD9J93jBfSZyCYlF0Viyl4aH1i5n5BhCJmClLUx6/ibuCQBbVEerBYEB/f wGCoQXEO/rIGdWmEmZi26fLwRP0r9AvmzH9Z0qRUCh8bOR3onny0J9hFxyjHMzxhdNhS YbJ+3HM17n8w7qI1E1MapOzNxC4yKUoHPGk24ji6lD4w8vnu4rEj/3izZeBNr706OnsL lFXAAc9IaSit3sucZRBWC49IGkV5+Pf0wSnqbrgAlH0HtaVHkcoTw8xqugEKFtnP2YUX aGLg== X-Forwarded-Encrypted: i=1; AJvYcCWuaBfDF/twPOBzD6wcNPH1UPJm+WOJOrPwnpJ5RsIS2lbgyMc7uoNDsyT4/m10I+yZmfdCsUHOG3Q+gCA=@vger.kernel.org X-Gm-Message-State: AOJu0YwAnFQlCWeahT6RYRWsLOyOxjT1PYIS3QZXrm9t6Sqh8Lx+yOY7 myGMaj0jdfS27y+K77l0PcGMCYGq8AnhYcFiaxIM2IRGcwRBd+MCgLwbicssJVbeIFEpzq/dVef 3CP0eUw== X-Google-Smtp-Source: AGHT+IG5xPxqqpKxLgZ6zXN6V78UnUjBXaSxpkGut/FS6GJSqSvmQ69f6lOGEvOsEwQHgaeCqjpR5w/uRE0E X-Received: from anyblade.c.googlers.com ([fda3:e722:ac3:cc00:20:ed76:c0a8:1791]) (user=mmaurer job=sendgmr) by 2002:a25:4b85:0:b0:e29:68a9:8612 with SMTP id 3f1490d57ef6-e3087a54ccemr74678276.4.1730308595588; Wed, 30 Oct 2024 10:16:35 -0700 (PDT) Date: Wed, 30 Oct 2024 17:16:34 +0000 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-B4-Tracking: v=1; b=H4sIAPFpImcC/4WNQQqDMBBFryKzbopJrCVd9R7FhR1HDagTEgkWy d2b5gJdfd6H//4JgbylAI/qBE/RBstbBnWpAOd+m0jYITOoWjWyVkZ4WjmSoMOx3zOVcIu46/a GLfb6TQR57TyN9ijmV5d5tmFn/ylHUf7a/84ohRQGhxZxNLox+jkxTwtdkVfoUkpfzMP6kL8AA AA= X-Change-Id: 20241029-remove-export-report-pl-7365c6ca3bee X-Mailer: b4 0.15-dev Message-ID: <20241030-remove-export-report-pl-v2-1-f289ab92bd2e@google.com> Subject: [PATCH v2] scripts: Remove export_report.pl From: Matthew Maurer To: Masahiro Yamada Cc: Nathan Chancellor , Nicolas Schier , Luis Chamberlain , linux-kernel@vger.kernel.org, linux-kbuild@vger.kernel.org, linux-modules@vger.kernel.org, Sami Tolvanen , Matthew Maurer Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable This script has been broken for 5 years with no user complaints. It first had its .mod.c parser broken in commit a3d0cb04f7df ("modpost: use __section in the output to *.mod.c"). Later, it had its object file enumeration broken in commit f65a486821cf ("kbuild: change module.order to list *.o instead of *.ko"). Both of these changes sat for years with no reports. Rather than reviving this script as we make further changes to `.mod.c`, this patch gets rid of it because it is clearly unused. Signed-off-by: Matthew Maurer Acked-by: Masahiro Yamada --- Changes in v2: - Remove references to export_report from Makefile - Link to v1: https://lore.kernel.org/r/20241029-remove-export-report-pl-v1= -1-9cd6ccf93493@google.com --- Makefile | 6 +- scripts/export_report.pl | 186 -------------------------------------------= ---- 2 files changed, 1 insertion(+), 191 deletions(-) diff --git a/Makefile b/Makefile index f554430954deebd56ede882f81a541ebc42f1937..5333b3f8a1a916d70614d6d125d= c383b2a47bb34 100644 --- a/Makefile +++ b/Makefile @@ -1620,7 +1620,6 @@ help: @echo ' with a stack size larger than MINSTACKSIZE (d= efault: 100)' @echo ' versioncheck - Sanity check on version.h usage' @echo ' includecheck - Check for duplicate included header files' - @echo ' export_report - List the usages of all exported symbols' @echo ' headerdep - Detect inclusion cycles in headers' @echo ' coccicheck - Check with Coccinelle' @echo ' clang-analyzer - Check with clang static analyzer' @@ -2033,7 +2032,7 @@ endif # Scripts to check various things for consistency # ------------------------------------------------------------------------= --- =20 -PHONY +=3D includecheck versioncheck coccicheck export_report +PHONY +=3D includecheck versioncheck coccicheck =20 includecheck: find $(srctree)/* $(RCS_FIND_IGNORE) \ @@ -2048,9 +2047,6 @@ versioncheck: coccicheck: $(Q)$(BASH) $(srctree)/scripts/$@ =20 -export_report: - $(PERL) $(srctree)/scripts/export_report.pl - PHONY +=3D checkstack kernelrelease kernelversion image_name =20 # UML needs a little special treatment here. It wants to use the host diff --git a/scripts/export_report.pl b/scripts/export_report.pl deleted file mode 100755 index feb3d5542a62d90b7af4f041d98a3c4b5ac386c0..000000000000000000000000000= 0000000000000 --- a/scripts/export_report.pl +++ /dev/null @@ -1,186 +0,0 @@ -#!/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 =3D (split /\s+/, $a)[1]; - my $no2 =3D (split /\s+/, $b)[1]; - return $no1 <=3D> $no2; -} - -sub alphabetically { - my ($module1, $value1) =3D @{$a}; - my ($module2, $value2) =3D @{$b}; - return $value1 <=3D> $value2 || $module2 cmp $module1; -} - -sub print_depends_on { - my ($href) =3D @_; - print "\n"; - for my $mod (sort keys %$href) { - my $list =3D $href->{$mod}; - print "\t$mod:\n"; - foreach my $sym (sort numerically @{$list}) { - my ($symbol, $no) =3D 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 =3D @ARGV; -} else { - @allcfiles =3D collectcfiles(); -} - -if (not defined $opt{'k'}) { - $opt{'k'} =3D "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) =3D split('\t'); - $SYMBOL { $symbol } =3D [ $module , "0" , $symbol, $gpl]; -} -close($module_symvers); - -# -# collect the usage count of each symbol. -# -my $modversion_warnings =3D 0; - -foreach my $thismod (@allcfiles) { - my $module; - - unless (open ($module, '<', $thismod)) { - warn "Sorry, cannot open $thismod: $!\n"; - next; - } - - my $state=3D0; - while ( <$module> ) { - chomp; - if ($state =3D=3D 0) { - $state =3D 1 if ($_ =3D~ /static const struct modversion_info/); - next; - } - if ($state =3D=3D 1) { - $state =3D 2 if ($_ =3D~ /__attribute__\(\(section\("__versions"\)\)\)/= ); - next; - } - if ($state =3D=3D 2) { - if ( $_ !~ /0x[0-9a-f]+,/ ) { - next; - } - my $sym =3D (split /([,"])/,)[4]; - my ($module, $value, $symbol, $gpl) =3D @{$SYMBOL{$sym}}; - $SYMBOL{ $sym } =3D [ $module, $value+1, $symbol, $gpl]; - push(@{$MODULE{$thismod}} , $sym); - } - } - if ($state !=3D 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) =3D @{$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 t= hat -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 =3D $MODULE{$thismod}; - my %depends; - $thismod =3D~ s/\.mod\.c/.ko/; - print "\t\t\t$thismod\n"; - foreach my $symbol (@{$list}) { - my ($module, $value, undef, $gpl) =3D @{$SYMBOL{$symbol}}; - push (@{$depends{"$module"}}, "$symbol $value"); - } - print_depends_on(\%depends); -} --- base-commit: 6fb2fa9805c501d9ade047fc511961f3273cdcb5 change-id: 20241029-remove-export-report-pl-7365c6ca3bee Best regards, --=20 Matthew Maurer