linux/scripts
Miguel Ojeda 46e24a545c rust: kasan/kbuild: fix missing flags on first build
If KASAN is enabled, and one runs in a clean repository e.g.:

    make LLVM=1 prepare
    make LLVM=1 prepare

Then the Rust code gets rebuilt, which should not happen.

The reason is some of the LLVM KASAN `rustc` flags are added in the
second run:

    -Cllvm-args=-asan-instrumentation-with-call-threshold=10000
    -Cllvm-args=-asan-stack=0
    -Cllvm-args=-asan-globals=1
    -Cllvm-args=-asan-kernel-mem-intrinsic-prefix=1

Further runs do not rebuild Rust because the flags do not change anymore.

Rebuilding like that in the second run is bad, even if this just happens
with KASAN enabled, but missing flags in the first one is even worse.

The root issue is that we pass, for some architectures and for the moment,
a generated `target.json` file. That file is not ready by the time `rustc`
gets called for the flag test, and thus the flag test fails just because
the file is not available, e.g.:

    $ ... --target=./scripts/target.json ... -Cllvm-args=...
    error: target file "./scripts/target.json" does not exist

There are a few approaches we could take here to solve this. For instance,
we could ensure that every time that the config is rebuilt, we regenerate
the file and recompute the flags. Or we could use the LLVM version to
check for these flags, instead of testing the flag (which may have other
advantages, such as allowing us to detect renames on the LLVM side).

However, it may be easier than that: `rustc` is aware of the `-Cllvm-args`
regardless of the `--target` (e.g. I checked that the list printed
is the same, plus that I can check for these flags even if I pass
a completely unrelated target), and thus we can just eliminate the
dependency completely.

Thus filter out the target.

This does mean that `rustc-option` cannot be used to test a flag that
requires the right target, but we don't have other users yet, it is a
minimal change and we want to get rid of custom targets in the future.

We could only filter in the case `target.json` is used, to make it work
in more cases, but then it would be harder to notice that it may not
work in a couple architectures.

Cc: Matthew Maurer <mmaurer@google.com>
Cc: Sami Tolvanen <samitolvanen@google.com>
Cc: stable@vger.kernel.org
Fixes: e3117404b4 ("kbuild: rust: Enable KASAN support")
Tested-by: Alice Ryhl <aliceryhl@google.com>
Link: https://lore.kernel.org/r/20250408220311.1033475-1-ojeda@kernel.org
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
2025-04-14 16:10:59 +02:00
..
atomic locking/atomic: scripts: fix ${atomic}_sub_and_test() kerneldoc 2024-06-05 15:52:34 +02:00
bash-completion kbuild: add Kbuild bash completion 2025-03-15 21:22:52 +09:00
basic fixdep: use xmalloc() 2024-09-01 20:34:49 +09:00
clang-tools gen_compile_commands.py: remove code for '\#' replacement 2025-03-15 21:16:21 +09:00
coccinelle - The 7 patch series "powerpc/crash: use generic crashkernel 2025-04-01 10:06:52 -07:00
dtc dt: dt-extract-compatibles: Extract compatibles from function parameters 2024-09-05 10:17:03 -05:00
dummy-tools kbuild: dummy-tools: pretend we understand -fpatchable-function-entry 2023-11-01 23:24:56 +09:00
gcc-plugins gcc-plugins: randstruct: Remove GCC 4.7 or newer requirement 2024-08-05 14:34:23 -07:00
gdb - The 7 patch series "powerpc/crash: use generic crashkernel 2025-04-01 10:06:52 -07:00
gendwarfksyms gendwarfksyms: Add a separate pass to resolve FQNs 2025-03-15 21:16:11 +09:00
genksyms genksyms: factor out APP for the ST_NORMAL state 2025-03-15 21:16:21 +09:00
include scripts: import more list macros 2024-10-07 02:12:27 +09:00
ipe scripts: ipe: polgen: remove redundant close and error exit path 2024-11-19 13:57:03 -08:00
kconfig kconfig: merge_config: use an empty file as initfile 2025-04-06 06:22:01 +09:00
ksymoops
lib/abi docs: ABI: move README contents to the top 2025-02-13 09:47:44 -07:00
mod Disable SLUB_TINY for build testing 2025-04-06 10:00:04 -07:00
package kbuild: rpm-pkg: build a debuginfo RPM 2025-04-06 06:22:01 +09:00
selinux selinux: Chain up tool resolving errors in install_policy.sh 2025-03-07 14:38:34 -05:00
tracing scripts/tracing: Remove scripts/tracing/draw_functrace.py 2025-03-20 07:02:21 -04:00
.gitignore lib: packing: add pack_fields() and unpack_fields() 2024-12-11 20:13:00 -08:00
as-version.sh kbuild: Update assembler calls to use proper flags and language target 2023-01-26 12:41:38 +09:00
asn1_compiler.c ASN.1: Fix check for strdup() success 2023-04-21 08:58:00 -07:00
bloat-o-meter scripts/bloat-o-meter: count weak symbol sizes 2023-08-21 13:46:25 -07:00
bootgraph.pl
bpf_doc.py bpf: Allow specifying bpf_fastcall attribute for BPF helpers 2024-10-03 17:47:53 -07:00
build-version kbuild: move init/build-version to scripts/ 2024-07-16 01:08:37 +09:00
cc-can-link.sh
cc-version.sh scripts: Remove ICC-related dead code 2023-04-24 10:18:32 -07:00
check-git kbuild: use git-archive for source package creation 2023-03-16 22:46:12 +09:00
check-sysctl-docs scripts: check-sysctl-docs: handle per-namespace sysctls 2024-02-23 12:13:09 +01:00
check-uapi.sh check-uapi: Introduce check-uapi.sh 2023-12-29 22:25:20 +09:00
check-variable-fonts.sh docs: scripts/check-variable-fonts.sh: Improve commands for detection 2024-05-02 10:14:52 -06:00
check_extable.sh
checkdeclares.pl
checkincludes.pl
checkkconfigsymbols.py scripts: handle BrokenPipeError for python scripts 2023-01-26 12:43:33 +09:00
checkpatch.pl Kbuild updates for v6.15 2025-04-05 15:46:50 -07:00
checkstack.pl scripts/checkstack.pl: fix no space expression between sp and offset 2023-12-29 12:22:28 -08:00
checksyscalls.sh checksyscalls: ignore fstat to silence build warning on LoongArch 2023-03-23 17:18:32 -07:00
checktransupdate.py scripts: fix all issues reported by pylint 2024-07-29 15:34:22 -06:00
checkversion.pl
cleanfile
cleanpatch
coccicheck kbuild: change working directory to external module directory with M= 2024-11-28 08:10:23 +09:00
config kbuild: fix argument parsing in scripts/config 2025-03-15 21:22:42 +09:00
const_structs.checkpatch const_structs.checkpatch: add ctl_table 2024-10-09 13:39:11 +02:00
decode_stacktrace.sh scripts/decode_stacktrace.sh: fix decoding of lines with an additional info 2025-01-12 19:03:34 -08:00
decodecode scripts/decodecode: add support for LoongArch 2023-12-29 12:22:25 -08:00
depmod.sh kbuild: add $(objtree)/ prefix to some in-kernel build artifacts 2024-11-27 09:38:27 +09:00
dev-needs.sh
diffconfig scripts: handle BrokenPipeError for python scripts 2023-01-26 12:43:33 +09:00
documentation-file-ref-check scripts/documentation-file-ref-check: don't check perl/python scripts 2025-02-10 11:19:56 -07:00
extract-fwblobs scripts: add script to extract built-in firmware blobs 2025-03-16 22:30:46 -07:00
extract-ikconfig scripts/extract-ikconfig: add zstd compression support 2022-08-29 13:58:47 +09:00
extract-module-sig.pl
extract-sys-certs.pl
extract-vmlinux
extract_xc3028.pl
faddr2line Revert "scripts/faddr2line: Check only two symbols when calculating symbol size" 2024-10-17 15:16:04 -07:00
file-size.sh
find-unused-docs.sh
gen-crc-consts.py riscv/crc: add "template" for Zbc optimized CRC functions 2025-03-10 09:29:08 -07:00
gen-randstruct-seed.sh
gen_packed_field_checks.c lib: packing: add pack_fields() and unpack_fields() 2024-12-11 20:13:00 -08:00
generate_builtin_ranges.awk kbuild: exclude .rodata.(cst|str)* when building ranges 2025-03-15 21:22:52 +09:00
generate_initcall_order.pl
generate_rust_analyzer.py scripts: generate_rust_analyzer: Add ffi crate 2025-04-08 19:47:06 +02:00
generate_rust_target.rs ARM and clkdev updates for 6.15-rc1 2025-04-03 12:21:44 -07:00
get_abi.py scripts/get_abi.py: add support for undefined ABIs 2025-02-10 11:19:57 -07:00
get_dvb_firmware
get_feat.pl scripts: get_feat.pl: substitute s390x with s390 2025-03-12 16:25:50 -06:00
get_maintainer.pl get_maintainer: stop reporting subsystem status as maintainer role 2025-03-16 22:30:49 -07:00
gfp-translate scripts: fix gfp-translate after ___GFP_*_BITS conversion to an enum 2024-09-01 17:59:01 -07:00
git.orderFile scripts: Introduce a default git.orderFile 2023-12-29 22:25:20 +09:00
head-object-list.txt openrisc: place exception table at the head of vmlinux 2024-12-10 12:04:19 +00:00
headerdep.pl
headers_install.sh m68k: Avoid CONFIG_COLDFIRE switch in uapi header 2024-05-07 08:55:23 +10:00
insert-sys-cert.c
install.sh kbuild: Create INSTALL_PATH directory if it does not exist 2024-07-20 13:34:54 +09:00
integer-wrap-ignore.scl ubsan/overflow: Enable ignorelist parsing and add type filter 2025-03-07 19:58:05 -08:00
jobserver-exec scripts: support GNU make 4.4 in jobserver-exec 2023-01-16 20:15:20 +09:00
kallsyms.c kallsyms: Remove KALLSYMS_ABSOLUTE_PERCPU 2025-02-18 10:16:04 +01:00
Kbuild.include kbuild: add $(objtree)/ prefix to some in-kernel build artifacts 2024-11-27 09:38:27 +09:00
Kconfig.include kbuild: rust: add CONFIG_RUSTC_LLVM_VERSION 2024-10-13 22:22:28 +02:00
kernel-doc scripts/kernel-doc: drop dead code for Wcontents_before_sections 2025-03-04 09:47:42 -07:00
ld-version.sh kbuild: Make ld-version.sh more robust against version string changes 2024-07-15 03:13:32 +09:00
leaking_addresses.pl leaking_addresses: Provide mechanism to scan binary files 2024-02-29 13:38:03 -08:00
Lindent
link-vmlinux.sh Kbuild updates for v6.15 2025-04-05 15:46:50 -07:00
macro_checker.py scripts: add macro_checker script to check unused parameters in macros 2024-09-01 20:43:28 -07:00
make_fit.py scripts/make_fit: Print DT name before libfdt errors 2025-03-27 14:03:32 -05:00
Makefile Kbuild updates for v6.14 2025-01-31 12:07:07 -08:00
Makefile.asm-headers kbuild: fix rebuild of generic syscall headers 2024-07-18 10:01:55 -07:00
Makefile.autofdo AutoFDO: Enable machine function split optimization for AutoFDO 2024-11-27 09:38:27 +09:00
Makefile.btf kbuild, bpf: Correct pahole version that supports distilled base btf feature 2025-02-24 14:14:52 -08:00
Makefile.build Kbuild updates for v6.15 2025-04-05 15:46:50 -07:00
Makefile.clang kbuild: clang: Support building UM with SUBARCH=i386 2025-03-04 09:40:13 -08:00
Makefile.clean kbuild: change working directory to external module directory with M= 2024-11-28 08:10:23 +09:00
Makefile.compiler rust: kasan/kbuild: fix missing flags on first build 2025-04-14 16:10:59 +02:00
Makefile.debug kbuild: rust: use -Zdebuginfo-compression 2024-04-02 17:41:22 +02:00
Makefile.defconf kbuild: suppress stdout from merge_config for silent builds 2025-01-10 23:01:21 +09:00
Makefile.dtbinst kbuild: Install dtb files as 0644 in Makefile.dtbinst 2024-06-26 00:18:57 +09:00
Makefile.dtbs kbuild: move non-boot built-in DTBs to .rodata section 2024-09-30 20:42:52 +09:00
Makefile.extrawarn kbuild: move -fzero-init-padding-bits=all to the top-level Makefile 2025-03-15 21:19:44 +09:00
Makefile.gcc-plugins gcc-plugins: Undefine LATENT_ENTROPY_PLUGIN when plugin disabled for a file 2022-08-16 12:25:53 -07:00
Makefile.headersinst
Makefile.host kbuild: support building external modules in a separate build directory 2024-11-28 08:11:55 +09:00
Makefile.kasan kbuild: rust: Enable KASAN support 2024-09-16 18:04:37 +02:00
Makefile.kcov
Makefile.kcsan
Makefile.kmsan kmsan: add KMSAN runtime core 2022-10-03 14:03:19 -07:00
Makefile.lib Kbuild updates for v6.15 2025-04-05 15:46:50 -07:00
Makefile.modfinal kbuild: re-enable KCSAN for autogenerated *.mod.c intermediaries 2024-11-28 08:11:55 +09:00
Makefile.modinst kbuild: Fix signing issue for external modules 2025-01-18 08:52:09 +09:00
Makefile.modpost modpost: Allow extended modversions without basic MODVERSIONS 2025-01-11 02:36:32 +09:00
Makefile.package kbuild: rpm-pkg: disable kernel-devel package when cross-compiling 2024-10-31 21:40:46 +09:00
Makefile.propeller kbuild: Fix Propeller build option 2024-11-27 09:38:27 +09:00
Makefile.randstruct
Makefile.ubsan ubsan/overflow: Enable ignorelist parsing and add type filter 2025-03-07 19:58:05 -08:00
Makefile.userprogs kbuild: support 'userldlibs' syntax 2023-11-01 23:26:01 +09:00
Makefile.vdsoinst more s390 updates for 6.10 merge window 2024-05-21 12:09:36 -07:00
Makefile.vmlinux kbuild: Create intermediate vmlinux build with relocations preserved 2025-03-17 00:29:50 +09:00
Makefile.vmlinux_o objtool: Remove --no-unreachable for noinstr-only vmlinux.o runs 2025-03-25 09:20:27 +01:00
makelst
markup_oops.pl
min-tool-version.sh x86/build: Raise the minimum LLVM version to 15.0.0 2025-02-21 14:08:16 +01:00
misc-check kbuild: make W=1 warn files that are tracked but ignored by git 2023-01-22 23:43:33 +09:00
mkcompile_h Revert "kbuild: Make scripts/compile.h when sh != bash" 2022-09-29 04:40:15 +09:00
mksysmap scripts/mksysmap: Fix escape chars '$' 2024-12-28 23:23:52 +09:00
mkuboot.sh
module-common.c kbuild: compile constant module information only once 2024-09-07 17:24:08 +09:00
module.lds.S kbuild: keep symbols for symbol_get() even with CONFIG_TRIM_UNUSED_KSYMS 2025-02-06 01:08:58 +09:00
modules-check.sh kbuild: change module.order to list *.o instead of *.ko 2022-12-14 15:42:40 +09:00
nsdeps scripts/nsdeps: get 'make nsdeps' working again 2024-12-03 08:22:25 -08:00
objdiff kbuild: clean .tmp_* pattern by make clean 2022-06-05 06:20:57 +09:00
objdump-func scripts/objdump-func: Support multiple functions 2023-04-14 16:08:28 +02:00
orc_hash.sh x86/unwind/orc: Add ELF section with ORC version identifier 2023-06-16 17:17:42 +02:00
pahole-version.sh
parse-maintainers.pl
patch-kernel
profile2linkerlist.pl
prune-kernel
recordmcount.c scripts: clean up IA-64 code 2023-12-03 18:51:48 +09:00
recordmcount.h
recordmcount.pl riscv: remove MCOUNT_NAME workaround 2024-02-22 15:38:54 -08:00
relocs_check.sh powerpc: Move script to check relocations at compile time in scripts/ 2023-04-19 07:46:31 -07:00
remove-stale-files selinux: move genheaders to security/selinux/ 2024-10-03 16:07:51 -04:00
rust_is_available.sh rust: document bindgen 0.71.0 regression 2025-01-10 00:17:00 +01:00
rust_is_available_bindgen_0_66.h rust: warn about bindgen versions 0.66.0 and 0.66.1 2024-07-10 10:28:52 +02:00
rust_is_available_bindgen_libclang.h scripts: add rust_is_available.sh 2022-09-28 09:02:06 +02:00
rust_is_available_bindgen_libclang_concat.h rust: warn on bindgen < 0.69.5 and libclang >= 19.1 2024-11-12 21:26:54 +01:00
rust_is_available_test.py rust: warn on bindgen < 0.69.5 and libclang >= 19.1 2024-11-12 21:26:54 +01:00
rustc-llvm-version.sh kbuild: rust: avoid errors with old rustcs without LLVM patch version 2024-10-28 00:27:16 +01:00
rustc-version.sh kbuild: rust: add CONFIG_RUSTC_VERSION 2024-09-05 22:44:18 +02:00
rustdoc_test_builder.rs rust: support running Rust documentation tests as KUnit ones 2023-07-19 09:32:53 -06:00
rustdoc_test_gen.rs Rust changes for v6.15 2025-03-30 17:03:26 -07:00
setlocalversion setlocalversion: add -e option 2024-11-28 08:11:56 +09:00
show_delta scripts: make python shebangs specific about desired version 2025-03-15 21:19:44 +09:00
sign-file.c sign-file,extract-cert: use pkcs11 provider for OPENSSL MAJOR >= 3 2024-09-20 19:52:48 +03:00
sorttable.c scripts/sorttable: Fix endianness handling in build-time mcount sort 2025-04-02 09:51:26 -04:00
spdxcheck-test.sh docs: move Linux logo into a new images folder 2022-06-01 09:32:45 -06:00
spdxcheck.py scripts/spdxcheck: Handle license identifiers in Jinja comments 2025-01-08 15:38:33 +01:00
spdxexclude
spelling.txt kernel-wide: add explicity||explicitly to spelling.txt 2025-01-12 20:21:06 -08:00
sphinx-pre-install scripts: sphinx-pre-install: remove unnecessary double check for $cur_version 2024-09-05 14:32:36 -06:00
split-man.pl
ssl-common.h sign-file,extract-cert: avoid using deprecated ERR_get_error_line() 2024-09-20 19:49:52 +03:00
stackdelta
stackusage
subarch.include scripts: subarch.include: fix SUBARCH on macOS hosts 2024-09-10 13:56:37 +09:00
syscall.tbl fs: add open_tree_attr() 2025-02-12 12:12:28 +01:00
syscallhdr.sh
syscallnr.sh
syscalltbl.sh x86/syscall: Mark exit[_group] syscall handlers __noreturn 2024-06-28 15:23:38 +02:00
tags.sh scripts/tags.sh: tag SYM_*START*() assembler symbols 2025-02-20 15:24:09 +01:00
tools-support-relr.sh Makefile: use -z pack-relative-relocs 2023-04-17 11:23:06 +09:00
unifdef.c scripts/unifdef: avoid constexpr keyword 2024-04-23 00:09:41 +09:00
ver_linux
verify_builtin_ranges.awk scripts: add verifier script for builtin module range data 2024-09-20 09:21:52 +09:00
xen-hypercalls.sh
xz_wrap.sh xz: adjust arch-specific options for better kernel compression 2024-09-01 20:43:27 -07:00