mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 02:50:43 +00:00
![Masahiro Yamada](/assets/img/avatar_default.png)
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>
39 lines
1.3 KiB
Bash
Executable file
39 lines
1.3 KiB
Bash
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
|