Skip to content

Commit 7dfbea4

Browse files
jacob-kellermasahir0y
authored andcommitted
scripts: remove namespace.pl
namespace.pl is intended to help locate symbols which are defined but are not used externally. The goal is to avoid bloat of the namespace in the resulting kernel image. The script relies on object data, and only finds unused symbols for the configuration used to generate that object data. This results in a lot of false positive warnings such as symbols only used by a single architecture, or symbols which are used externally only under certain configurations. Running namespace.pl using allyesconfig, allmodconfig, and x86_64_defconfig yields the following results: * allmodconfig * 11122 unique symbol names with no external reference * 1194 symbols listed as multiply defined * 214 symbols it can't resolve * allyesconfig * 10997 unique symbol names with no external reference * 1194 symbols listed as multiply defined * 214 symbols it can't resolve * x86_64_defconfig * 5757 unique symbol names with no external reference * 528 symbols listed as multiply defined * 154 symbols it can't resolve The script also has no way to easily limit the scope of the checks to a given subset of the kernel, such as only checking for symbols defined within a module or subsystem. Discussion on public mailing lists seems to indicate that many view the tool output as suspect or not very useful (see discussions at [1] and [2] for further context). As described by Masahiro Yamada at [2], namespace.pl provides 3 types of checks: listing multiply defined symbols, resolving external symbols, and warnings about symbols with no reference. The first category of issues is easily caught by the linker as any set of multiply defined symbols should fail to link. The second category of issues is also caught by linking, as undefined symbols would cause issues. Even with modules, these types of issues where a module relies on an external symbol are caught by modpost. The remaining category of issues reported is the list of symbols with no external reference, and is the primary motivation of this script. However, it ought to be clear from the above examples that the output is difficult to sort through. Even allyesconfig has ~10000 entries. The current submit-checklist indicates that patches ought to go through namespacecheck and fix any new issues arising. But that itself presents problems. As described at [1], many cases of reports are due to configuration where a function is used externally by some configuration settings. Prominent maintainers appear to dislike changes modify code such that symbols become static based on CONFIG_* flags ([3], and [4]) One possible solution is to adjust the advice and indicate that we only care about the output of namespacecheck on allyesconfig or allmodconfig builds... However, given the discussion at [2], I suspect that few people are actively using this tool. It doesn't have a maintainer in the MAINTAINERS flie, and it produces so many warnings for unused symbols that it is difficult to use effectively. Thus, I propose we simply remove it. [1] https://lore.kernel.org/netdev/20200708164812.384ae8ea@kicinski-fedora-pc1c0hjn.dhcp.thefacebook.com/ [2] https://lore.kernel.org/lkml/20190129204319.15238-1-jacob.e.keller@intel.com/ [3] https://lore.kernel.org/netdev/20190828.154744.2058157956381129672.davem@davemloft.net/ [4] https://lore.kernel.org/netdev/20190827210928.576c5fef@cakuba.netronome.com/ Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Acked-by: Randy Dunlap <rdunlap@infradead.org> Acked-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
1 parent 76c3766 commit 7dfbea4

3 files changed

Lines changed: 2 additions & 480 deletions

File tree

Documentation/process/submit-checklist.rst

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ and elsewhere regarding submitting Linux kernel patches.
4949

5050
9) Check cleanly with sparse.
5151

52-
10) Use ``make checkstack`` and ``make namespacecheck`` and fix any problems
53-
that they find.
52+
10) Use ``make checkstack`` and fix any problems that it finds.
5453

5554
.. note::
5655

Makefile

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1576,7 +1576,6 @@ help:
15761576
echo ''
15771577
@echo 'Static analysers:'
15781578
@echo ' checkstack - Generate a list of stack hogs'
1579-
@echo ' namespacecheck - Name space analysis on compiled kernel'
15801579
@echo ' versioncheck - Sanity check on version.h usage'
15811580
@echo ' includecheck - Check for duplicate included header files'
15821581
@echo ' export_report - List the usages of all exported symbols'
@@ -1876,7 +1875,7 @@ endif
18761875
# Scripts to check various things for consistency
18771876
# ---------------------------------------------------------------------------
18781877

1879-
PHONY += includecheck versioncheck coccicheck namespacecheck export_report
1878+
PHONY += includecheck versioncheck coccicheck export_report
18801879

18811880
includecheck:
18821881
find $(srctree)/* $(RCS_FIND_IGNORE) \
@@ -1891,9 +1890,6 @@ versioncheck:
18911890
coccicheck:
18921891
$(Q)$(BASH) $(srctree)/scripts/$@
18931892

1894-
namespacecheck:
1895-
$(PERL) $(srctree)/scripts/namespace.pl
1896-
18971893
export_report:
18981894
$(PERL) $(srctree)/scripts/export_report.pl
18991895

0 commit comments

Comments
 (0)