linux-yocto/scripts/remove-stale-files
Masahiro Yamada 4e9903b086 fortify: refactor test_fortify Makefile to fix some build problems
There are some issues in the test_fortify Makefile code.

Problem 1: cc-disable-warning invokes compiler dozens of times

To see how many times the cc-disable-warning is evaluated, change
this code:

  $(call cc-disable-warning,fortify-source)

to:

  $(call cc-disable-warning,$(shell touch /tmp/fortify-$$$$)fortify-source)

Then, build the kernel with CONFIG_FORTIFY_SOURCE=y. You will see a
large number of '/tmp/fortify-<PID>' files created:

  $ ls -1 /tmp/fortify-* | wc
       80      80    1600

This means the compiler was invoked 80 times just for checking the
-Wno-fortify-source flag support.

$(call cc-disable-warning,fortify-source) should be added to a simple
variable instead of a recursive variable.

Problem 2: do not recompile string.o when the test code is updated

The test cases are independent of the kernel. However, when the test
code is updated, $(obj)/string.o is rebuilt and vmlinux is relinked
due to this dependency:

  $(obj)/string.o: $(obj)/$(TEST_FORTIFY_LOG)

always-y is suitable for building the log files.

Problem 3: redundant code

  clean-files += $(addsuffix .o, $(TEST_FORTIFY_LOGS))

... is unneeded because the top Makefile globally cleans *.o files.

This commit fixes these issues and makes the code readable.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Link: https://lore.kernel.org/r/20240727150302.1823750-2-masahiroy@kernel.org
Signed-off-by: Kees Cook <kees@kernel.org>
2024-08-15 09:26:02 -07:00

1.0 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 *.spec

rm -f lib/test_fortify.log