Commit bb29b957eaaa for kernel

commit bb29b957eaaa15be33243550d9ee576c2d601669
Merge: 12d5fc96ebbb 997208ce9f43
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Wed Oct 21 10:45:44 2026 -1000

    Merge tag 'kbuild-7.4-1' of git://git.kernel.org/pub/scm/linux/kernel/git/kbuild/linux

    Pull Kbuild / Kconfig updates from Nathan Chancellor:
     "Kbuild:

       - Suppress compiler flags in debug info for external module builds

       - Use '-fmacro-prefix-map' in more places in the build

       - Merge initial set of changes from Lorenzo's speed up series, along
         with some fixes found through testing:

         - Avoid allocating .modinfo in vmlinux

         - Speed up kallsyms by indexing symbols by token and outputting
           binary data to disk directly then including in assembly via
           .incbin

         - Don't sort $(NM) output when unnecessary

         - Only emit relocations on the final vmlinx link

         - Reimplement mksysmap in C

         - Move many cc-option and ld-option calls into the Kconfig stage to
           cache their results

         - Use pigz for gzip compression when available

       - Move gen_init_cpio and gen_initramfs.sh from usr/ to scripts/

       - Add a TOML configuration to scripts/container and update
         documentation accordingly

       - Add a generic, opt-in mechanism for checking that headers can
         compile standalone

       - Update machine function splitting argument for LLVM 24 rename in
         AutoFDO build

       - Miscellaneous minor clean ups, fixes, and hardening, mostly
         found/fixed via LLMs

      Kconfig:

       - Turn recursive ranges into an error

       - Fix savedefconfig for defaults that were adjusted for being out of
         range and revert a previously applied workaround

       - Improvements and hardening around integer and hexadecimal values

       - Emit a warning when selecting or implying a choice symbol, which
         has no effect

       - Emit a warning when KCONFIG_PROBABILITY is malformed

       - Introduce def_string / def_int / def_hex to mirror the existing
         def_bool / def_tristate to succinctly set a value and type at the
         same time.

       - Add cc-option-str and ld-option-str macros to act like Kbuild's
         cc-option and ld-option, returning the string when the option is
         supported, allowing many checks to be moved into Kconfig

       - Minor usability improvements to Kconfig tests"

    * tag 'kbuild-7.4-1' of git://git.kernel.org/pub/scm/linux/kernel/git/kbuild/linux: (59 commits)
      kbuild: AutoFDO: Update split machine function argument for upstream rename
      kbuild: Mark the initcall ordering recipe as recursive
      kbuild: Mark the gzip recipes as recursive
      localmodconfig: Explicitly report boolean configs during integrity check
      scripts/make_fit: Ignore schema checks when decomposing DTBs
      clang-tools: Import os for broken pipe handling
      kconfig: use the value argument in sym_get_near_range_bound()
      kconfig: fix infinite loop in conf_choice() when no choice value is visible
      kconfig: cleanup stale comment about 'keys' array
      kconfig: Improve ergonomics around disabling warnings with cc-option
      scripts/Kconfig.toolchain: Drop compiler symbols from dependencies
      checkkconfigsymbols.py: Parse Git status output line by line
      gen_init_cpio: stop parsing on lines with a missing argument list
      .gitignore: drop Module.markers
      .gitignore: ignore pacman package signatures
      kbuild: add header check facility as a manually run static analyzer
      Documentation: dev-tools: refer to user ID rather than id
      Documentation: dev-tools: update container.rst with config file
      scripts: add TOML config to container tool
      kconfig: tests: {old,save}defconfig: Forward dynamic keyword arguments
      ...

diff --cc arch/alpha/boot/compressed/Makefile
index 692a29588aad,000000000000..eb930f01b4be
mode 100644,000000..100644
--- a/arch/alpha/boot/compressed/Makefile
+++ b/arch/alpha/boot/compressed/Makefile
@@@ -1,89 -1,0 +1,89 @@@
 +# SPDX-License-Identifier: GPL-2.0-only
 +#
 +# Create a self-extracting compressed vmlinux image from the original
 +# vmlinux. aboot loads and enters it like a plain vmlinux.
 +#
 +
 +OBJECTS := head.o misc.o trampoline.o piggy.o
 +OBJECTS += memcpy.o memmove.o memset.o
 +OBJECTS += __divqu.o __remqu.o __divlu.o __remlu.o
 +targets := vmlinux.lds vmlinux vmlinux.bin
 +targets += vmlinux.bin.bz2 vmlinux.bin.gz vmlinux.bin.lz4
 +targets += vmlinux.bin.lzma vmlinux.bin.lzo vmlinux.bin.xz
 +targets += vmlinux.bin.zst
 +targets += $(OBJECTS)
 +
 +# The stub runs before the kernel has identified the CPU it booted on, so
 +# build it for the base Alpha instruction set rather than inheriting the
 +# kernel's -mcpu=.
 +KBUILD_CFLAGS := -D__KERNEL__ -std=gnu11 -Os -fno-strict-aliasing
 +KBUILD_CFLAGS += -fno-PIE -ffreestanding -fno-stack-protector
 +KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
 +KBUILD_CFLAGS += -pipe -mcpu=ev4 -mno-fp-regs -ffixed-8
 +KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING -D__DISABLE_EXPORTS
 +KBUILD_CFLAGS += $(CC_FLAGS_DIALECT)
 +KBUILD_AFLAGS := -D__ASSEMBLY__ $(KBUILD_CFLAGS)
 +
 +# The stub has no sanitizer or coverage runtime. arch/alpha/lib/lib.a is
 +# built with the kernel's instrumentation and -mcpu=, so build private
 +# copies of the library routines the stub needs instead of linking it.
 +UBSAN_SANITIZE := n
 +GCOV_PROFILE := n
 +
 +$(obj)/memcpy.o: $(srctree)/arch/alpha/lib/memcpy.c FORCE
 +	$(call if_changed_dep,cc_o_c)
 +
 +$(obj)/memmove.o: $(srctree)/arch/alpha/lib/memmove.S FORCE
 +	$(call if_changed_dep,as_o_S)
 +
 +$(obj)/memset.o: $(srctree)/arch/alpha/lib/memset.S FORCE
 +	$(call if_changed_dep,as_o_S)
 +
 +AFLAGS___divqu.o := -DDIV
 +AFLAGS___remqu.o := -DREM
 +AFLAGS___divlu.o := -DDIV -DINTSIZE
 +AFLAGS___remlu.o := -DREM -DINTSIZE
 +
 +$(addprefix $(obj)/,__divqu.o __remqu.o __divlu.o __remlu.o): $(srctree)/arch/alpha/lib/divide.S FORCE
 +	$(call if_changed_dep,as_o_S)
 +
 +# zstd's decompressor uses __builtin_ctzll()/__builtin_clzll(). Those are
 +# inline code only with the CIX extension, which the base instruction set
 +# the stub is built for does not have, so they become calls to libgcc's
 +# __ctzdi2/__clzdi2.
 +LIBGCC := $(shell $(CC) -print-libgcc-file-name)
 +
 +LDFLAGS_vmlinux := -X --orphan-handling=warn -T
 +$(obj)/vmlinux: $(obj)/vmlinux.lds $(addprefix $(obj)/, $(OBJECTS)) $(LIBGCC) FORCE
 +	$(call if_changed,ld)
 +
 +OBJCOPYFLAGS_vmlinux.bin := -R .comment -R .note -S
 +$(obj)/vmlinux.bin: vmlinux FORCE
 +	$(call if_changed,objcopy)
 +
 +suffix-$(CONFIG_KERNEL_BZIP2)	:= bz2
 +suffix-$(CONFIG_KERNEL_GZIP)	:= gz
 +suffix-$(CONFIG_KERNEL_LZ4)	:= lz4
 +suffix-$(CONFIG_KERNEL_LZMA)	:= lzma
 +suffix-$(CONFIG_KERNEL_LZO)	:= lzo
 +suffix-$(CONFIG_KERNEL_XZ)	:= xz
 +suffix-$(CONFIG_KERNEL_ZSTD)	:= zst
 +
 +$(obj)/vmlinux.bin.bz2: $(obj)/vmlinux.bin FORCE
 +	$(call if_changed,bzip2_with_size)
 +$(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin FORCE
- 	$(call if_changed,gzip)
++	+$(call if_changed,gzip)
 +$(obj)/vmlinux.bin.lz4: $(obj)/vmlinux.bin FORCE
 +	$(call if_changed,lz4_with_size)
 +$(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin FORCE
 +	$(call if_changed,lzma_with_size)
 +$(obj)/vmlinux.bin.lzo: $(obj)/vmlinux.bin FORCE
 +	$(call if_changed,lzo_with_size)
 +$(obj)/vmlinux.bin.xz: $(obj)/vmlinux.bin FORCE
 +	$(call if_changed,xzkern_with_size)
 +$(obj)/vmlinux.bin.zst: $(obj)/vmlinux.bin FORCE
 +	$(call if_changed,zstd22_with_size)
 +
 +LDFLAGS_piggy.o := -r --format binary --oformat elf64-alpha -T
 +$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.$(suffix-y) FORCE
 +	$(call if_changed,ld)
diff --cc scripts/Kconfig.toolchain
index 000000000000,254393d4f98a..4b962831d62a
mode 000000,100644..100644
--- a/scripts/Kconfig.toolchain
+++ b/scripts/Kconfig.toolchain
@@@ -1,0 -1,272 +1,274 @@@
+ # SPDX-License-Identifier: GPL-2.0-only
+ config CC_VERSION_TEXT
+ 	string
+ 	default "$(CC_VERSION_TEXT)"
+ 	help
+ 	  This is used in unclear ways:
+
+ 	  - Re-run Kconfig when the compiler is updated
+ 	    The 'default' property references the environment variable,
+ 	    CC_VERSION_TEXT so it is recorded in include/config/auto.conf.cmd.
+ 	    When the compiler is updated, Kconfig will be invoked.
+
+ 	  - Ensure full rebuild when the compiler is updated
+ 	    include/linux/compiler-version.h contains this option in the comment
+ 	    line so fixdep adds include/config/CC_VERSION_TEXT into the
+ 	    auto-generated dependency. When the compiler is updated, syncconfig
+ 	    will touch it and then every file will be rebuilt.
+
+ config CC_IS_GCC
+ 	def_bool $(success,test "$(cc-name)" = GCC)
+
+ config GCC_VERSION
+ 	int
+ 	default $(cc-version) if CC_IS_GCC
+ 	default 0
+
+ config CC_IS_CLANG
+ 	def_bool $(success,test "$(cc-name)" = Clang)
+
+ config CLANG_VERSION
+ 	int
+ 	default $(cc-version) if CC_IS_CLANG
+ 	default 0
+
+ config AS_IS_GNU
+ 	def_bool $(success,test "$(as-name)" = GNU)
+
+ config AS_IS_LLVM
+ 	def_bool $(success,test "$(as-name)" = LLVM)
+
+ config AS_VERSION
+ 	int
+ 	# Use clang version if this is the integrated assembler
+ 	default CLANG_VERSION if AS_IS_LLVM
+ 	default $(as-version)
+
+ config LD_IS_BFD
+ 	def_bool $(success,test "$(ld-name)" = BFD)
+
+ config LD_VERSION
+ 	int
+ 	default $(ld-version) if LD_IS_BFD
+ 	default 0
+
+ config LD_IS_LLD
+ 	def_bool $(success,test "$(ld-name)" = LLD)
+
+ config LLD_VERSION
+ 	int
+ 	default $(ld-version) if LD_IS_LLD
+ 	default 0
+
+ config RUSTC_VERSION
+ 	int
+ 	default $(rustc-version)
+ 	help
+ 	  It does not depend on `RUST` since that one may need to use the version
+ 	  in a `depends on`.
+
+ config RUST_IS_AVAILABLE
+ 	def_bool $(success,$(srctree)/scripts/rust_is_available.sh)
+ 	help
+ 	  This shows whether a suitable Rust toolchain is available (found).
+
+ 	  Please see Documentation/rust/quick-start.rst for instructions on how
+ 	  to satisfy the build requirements of Rust support.
+
+ 	  In particular, the Makefile target 'rustavailable' is useful to check
+ 	  why the Rust toolchain is not being detected.
+
+ config RUSTC_LLVM_VERSION
+ 	int
+ 	default $(rustc-llvm-version)
+
+ config RUSTC_LLVM_MAJOR_VERSION
+ 	int
+ 	default $(shell,expr $(rustc-llvm-version) / 10000)
+
+ config RUSTC_CLANG_LLVM_COMPATIBLE
+ 	bool
+ 	default y if CC_IS_CLANG && RUSTC_LLVM_MAJOR_VERSION = $(shell,expr $(cc-version) / 10000)
+ 	help
+ 	  This indicates whether Rust and Clang use LLVM of the same major
+ 	  version.
+
+ 	  Operations involving handling LLVM IR or bitcode (e.g. cross-language
+ 	  LTO) require the same LLVM major version to work properly. For best
+ 	  compatibility it is recommended that the exact same LLVM is used.
+
+ config ARCH_HAS_CC_CAN_LINK
+ 	bool
+
+ config CC_CAN_LINK
+ 	bool
+ 	default ARCH_CC_CAN_LINK if ARCH_HAS_CC_CAN_LINK
+ 	default $(cc_can_link_user,$(m64-flag)) if 64BIT
+ 	default $(cc_can_link_user,$(m32-flag))
+
+ # Fixed in GCC 14, 13.3, 12.4 and 11.5
+ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113921
+ config GCC_ASM_GOTO_OUTPUT_BROKEN
+ 	bool
+ 	depends on CC_IS_GCC
+ 	default y if GCC_VERSION < 110500
+ 	default y if GCC_VERSION >= 120000 && GCC_VERSION < 120400
+ 	default y if GCC_VERSION >= 130000 && GCC_VERSION < 130300
+
+ config CC_HAS_ASM_GOTO_OUTPUT
+ 	def_bool y
+ 	depends on !GCC_ASM_GOTO_OUTPUT_BROKEN
+ 	depends on $(success,echo 'int foo(int x) { asm goto ("": "=r"(x) ::: bar); return x; bar: return 0; }' | $(CC) -x c - -c -o /dev/null)
+
+ config CC_HAS_ASM_GOTO_TIED_OUTPUT
+ 	depends on CC_HAS_ASM_GOTO_OUTPUT
+ 	# Detect buggy gcc and clang, fixed in gcc-11 clang-14.
+ 	def_bool $(success,echo 'int foo(int *x) { asm goto (".long (%l[bar]) - .": "+m"(*x) ::: bar); return *x; bar: return 0; }' | $CC -x c - -c -o /dev/null)
+
+ config TOOLS_SUPPORT_RELR
+ 	def_bool $(success,env "CC=$(CC)" "LD=$(LD)" "NM=$(NM)" "OBJCOPY=$(OBJCOPY)" $(srctree)/scripts/tools-support-relr.sh)
+
+ config CC_HAS_ASM_INLINE
+ 	def_bool $(success,echo 'void foo(void) { asm inline (""); }' | $(CC) -x c - -c -o /dev/null)
+
+ config CC_HAS_ASSUME
+ 	bool
+ 	# clang needs to be at least 19.1.0 since the meaning of the assume
+ 	# attribute changed:
+ 	# https://github.com/llvm/llvm-project/commit/c44fa3e8a9a44c2e9a575768a3c185354b9f6c17
+ 	default y if CC_IS_CLANG && CLANG_VERSION >= 190100
+ 	# supported since gcc 13.1.0
+ 	# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106654
+ 	default y if CC_IS_GCC && GCC_VERSION >= 130100
+
+ config CC_HAS_NO_PROFILE_FN_ATTR
+ 	def_bool $(success,echo '__attribute__((no_profile_instrument_function)) int x();' | $(CC) -x c - -c -o /dev/null -Werror)
+
+ config CC_OPT_ZERO_INIT_PADDING_BITS
+ 	def_string "$(cc-option-str,-fzero-init-padding-bits=all)"
+
+ config CC_OPT_NO_ADDRSIG
+ 	def_string "$(cc-option-str,-fno-addrsig)"
+
+ config CC_OPT_DIAGNOSTICS_SHOW_CONTEXT
+ 	def_string "$(cc-option-str,-fdiagnostics-show-context=2)"
+
+ config CC_OPT_DIAGNOSTICS_SHOW_INLINING_CHAIN
+ 	def_string "$(cc-option-str,-fdiagnostics-show-inlining-chain)"
+
+ config CC_OPT_STRICT_FLEX_ARRAYS
+ 	def_string "$(cc-option-str,-fstrict-flex-arrays=3)"
+
+ # gcc-10 renamed --param=allow-store-data-races=0 to -fno-allow-store-data-races
+ config CC_OPT_ALLOW_STORE_DATA_RACES_PARAM
+ 	def_string "$(cc-option-str,--param=allow-store-data-races=0)"
+
+ config CC_OPT_NO_ALLOW_STORE_DATA_RACES
+ 	def_string "$(cc-option-str,-fno-allow-store-data-races)"
+
+ config CC_HAS_MNOP_MCOUNT
+ 	def_bool $(cc-option,-mnop-mcount)
+
+ # s390-linux-gnu-gcc did not support -mfentry until gcc-9.
+ config CC_HAS_MFENTRY
+ 	def_bool $(cc-option,-mfentry)
+
+ config LD_OPT_FORCE_GROUP_ALLOCATION
+ 	def_string "$(ld-option-str,--force-group-allocation)"
+
+ config LD_OPT_NO_WARN_RWX_SEGMENTS
+ 	def_string "$(ld-option-str,--no-warn-rwx-segments)"
+
+ config CC_OPT_WNO_ADDRESS_OF_PACKED_MEMBER
+ 	def_string "$(cc-option-str,-Wno-address-of-packed-member)"
+
+ config CC_OPT_WNO_FORMAT_OVERFLOW_NON_KPRINTF
+ 	def_string "$(cc-option-str,-Wno-format-overflow-non-kprintf)"
+
+ config CC_OPT_WNO_FORMAT_TRUNCATION_NON_KPRINTF
+ 	def_string "$(cc-option-str,-Wno-format-truncation-non-kprintf)"
+
+ config CC_OPT_WNO_DEFAULT_CONST_INIT_UNSAFE
+ 	def_string "$(cc-option-str,-Wno-default-const-init-unsafe)"
+
+ config CC_OPT_WNO_DANGLING_POINTER
+ 	def_string "$(cc-option-str,-Wno-dangling-pointer)"
+
+ config CC_OPT_WVLA_LARGER_THAN
+ 	def_string "$(cc-option-str,-Wvla-larger-than=1)"
+
+ config CC_HAS_WSTRINGOP_OVERFLOW
+ 	def_bool $(cc-option,-Wstringop-overflow)
+
+ config CC_OPT_WNO_UNTERMINATED_STRING_INITIALIZATION
+ 	def_string "$(cc-option-str,-Wno-unterminated-string-initialization)"
+
+ config CC_OPT_WERROR_DESIGNATED_INIT
+ 	def_string "$(cc-option-str,-Werror=designated-init)"
+
+ config CC_OPT_WENUM_CONVERSION
+ 	def_string "$(cc-option-str,-Wenum-conversion)"
+
+ config CC_OPT_WNO_PACKED_NOT_ALIGNED
+ 	def_string "$(cc-option-str,-Wno-packed-not-aligned)"
+
+ config CC_OPT_WNO_FORMAT_OVERFLOW
+ 	def_string "$(cc-option-str,-Wno-format-overflow)"
+
+ config CC_OPT_WNO_STRINGOP_TRUNCATION
+ 	def_string "$(cc-option-str,-Wno-stringop-truncation)"
+
+ config CC_HAS_COUNTED_BY
+ 	bool
+ 	# clang needs to be at least 20.1.0 to avoid potential crashes
+ 	# when building structures that contain __counted_by
+ 	# https://github.com/ClangBuiltLinux/linux/issues/2114
+ 	# https://github.com/llvm/llvm-project/commit/160fb1121cdf703c3ef5e61fb26c5659eb581489
+ 	default y if CC_IS_CLANG && CLANG_VERSION >= 200100
+ 	# supported since gcc 15.1.0
+ 	# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108896
+ 	default y if CC_IS_GCC && GCC_VERSION >= 150100
+
+ config CC_HAS_COUNTED_BY_PTR
+ 	bool
+ 	# supported since clang 22
+ 	default y if CC_IS_CLANG && CLANG_VERSION >= 220100
+ 	# supported since gcc 16.0.0
+ 	default y if CC_IS_GCC && GCC_VERSION >= 160000
+
+ config CC_HAS_BROKEN_COUNTED_BY_REF
+ 	bool
+ 	# https://github.com/llvm/llvm-project/issues/182575
+ 	default y if CC_IS_CLANG && CLANG_VERSION < 220100
+
+ config CC_HAS_ALLOC_TOKEN
+ 	def_bool $(cc-option,-falloc-token-max=123)
+
+ config CC_HAS_MULTIDIMENSIONAL_NONSTRING
+ 	def_bool $(success,echo 'char tag[][4] __attribute__((__nonstring__)) = { };' | $(CC) $(CLANG_FLAGS) -x c - -c -o /dev/null -Werror)
+
++config CC_OPT_INLINE_MEMSET
++	string
++	default "-finline-stringops=memset" if $(cc-option,-finline-stringops=memset)
++	default "-mllvm -max-store-memset=4294967294" if $(cc-option,-mllvm -max-store-memset=4294967294)
++
+ config LD_CAN_USE_KEEP_IN_OVERLAY
+ 	# ld.lld prior to 21.0.0 did not support KEEP within an overlay description
+ 	# https://github.com/llvm/llvm-project/pull/130661
+ 	def_bool LD_IS_BFD || LLD_VERSION >= 210000
+
 -config RUSTC_HAS_SPAN_FILE
 -	def_bool RUSTC_VERSION >= 108800
 -
+ config RUSTC_HAS_UNNECESSARY_TRANSMUTES
+ 	def_bool RUSTC_VERSION >= 108800
+
+ config RUSTC_HAS_FILE_WITH_NUL
+ 	def_bool RUSTC_VERSION >= 108900
+
+ config RUSTC_HAS_FILE_AS_C_STR
+ 	def_bool RUSTC_VERSION >= 109100
+
+ config RUSTC_HAS_SUSPICIOUS_RUNTIME_SYMBOL_DEFINITIONS
+ 	def_bool RUSTC_VERSION >= 109800
+
+ config PAHOLE_VERSION
+ 	int
+ 	default "$(PAHOLE_VERSION)"
diff --cc scripts/remove-stale-files
index f1f776caae00,e46337e4bfb8..70a2ead4d0f1
--- a/scripts/remove-stale-files
+++ b/scripts/remove-stale-files
@@@ -27,4 -27,4 +27,6 @@@ rm -f *.spe

  rm -f lib/test_fortify.log

 +rm -f rust/doctests_kernel_generated_kunit.c
++
+ rm -f usr/gen_init_cpio