linux-yocto/scripts/remove-stale-files
Masahiro Yamada 5e9e95cc91 kbuild: implement CONFIG_TRIM_UNUSED_KSYMS without recursion
When CONFIG_TRIM_UNUSED_KSYMS is enabled, Kbuild recursively traverses
the directory tree to determine which EXPORT_SYMBOL to trim. If an
EXPORT_SYMBOL turns out to be unused by anyone, Kbuild begins the
second traverse, where some source files are recompiled with their
EXPORT_SYMBOL() tuned into a no-op.

Linus stated negative opinions about this slowness in commits:

 - 5cf0fd591f ("Kbuild: disable TRIM_UNUSED_KSYMS option")
 - a555bdd0c5 ("Kbuild: enable TRIM_UNUSED_KSYMS again, with some guarding")

We can do this better now. The final data structures of EXPORT_SYMBOL
are generated by the modpost stage, so modpost can selectively emit
KSYMTAB entries that are really used by modules.

Commit f73edc8951 ("kbuild: unify two modpost invocations") is another
ground-work to do this in a one-pass algorithm. With the list of modules,
modpost sets sym->used if it is used by a module. modpost emits KSYMTAB
only for symbols with sym->used==true.

BTW, Nicolas explained why the trimming was implemented with recursion:

  https://lore.kernel.org/all/2o2rpn97-79nq-p7s2-nq5-8p83391473r@syhkavp.arg/

Actually, we never achieved that level of optimization where the chain
reaction of trimming comes into play because:

 - CONFIG_LTO_CLANG cannot remove any unused symbols
 - CONFIG_LD_DEAD_CODE_DATA_ELIMINATION is enabled only for vmlinux,
   but not modules

If deeper trimming is required, we need to revisit this, but I guess
that is unlikely to happen.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
2023-06-22 21:21:06 +09:00

1.3 KiB
Executable File

#!/bin/sh

set -e

When you move, remove or rename generated files, you probably also update

.gitignore and cleaning rules in the Makefile. This is the right thing

to do. However, people usually do 'git pull', 'git bisect', etc. without

running 'make clean'. Then, the stale generated files are left over, often

causing build issues.

Also, 'git status' shows such stale build artifacts as untracked files.

What is worse, some people send a wrong patch to get them back to .gitignore

without checking the commit history.

So, when you (re)move generated files, please move the cleaning rules from

the Makefile to this script. This is run before Kbuild starts building

anything, so people will not be annoyed by such garbage files.

This script is not intended to grow endlessly. Rather, it is a temporary scrap

yard. Stale files stay in this file for a while (for some release cycles?),

then will be really dead and removed from the code base entirely.

rm -f arch/powerpc/purgatory/kexec-purgatory.c rm -f arch/riscv/purgatory/kexec-purgatory.c rm -f arch/x86/purgatory/kexec-purgatory.c

rm -f scripts/extract-cert

rm -f scripts/kconfig/[gmnq]conf-cfg

rm -f rust/target.json

rm -f scripts/bin2c

rm -f .scmversion

rm -rf include/ksym

find . -name '*.usyms' | xargs rm -f