mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-05 05:15:23 +02:00

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. Commitf73edc8951
("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>
1.3 KiB
Executable File
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