From f1a50eb4dfe5bc9d5740fa821acb12c246a52919 Mon Sep 17 00:00:00 2001 From: Dmitrii Sharshakov Date: Mon, 1 Dec 2025 23:04:17 +0100 Subject: [PATCH 1/5] feat: build kernel with Clang Signed-off-by: Dmitrii Sharshakov fix: update LLVM with musl target after changing the target the LLVM toolchain can build for host as well, no need in HOSTCC override Signed-off-by: Dmitrii Sharshakov add clang to modules clang kconfig disable broken packages these will need more configuration to use Clang re-enable most drivers Signed-off-by: Dmitrii Sharshakov fix zfs run kernel-menuconfig with llvm Signed-off-by: Dmitrii Sharshakov --- .kres.yaml | 2 +- Makefile | 4 +- Pkgfile | 1 + drbd/pkg.yaml | 5 +- ena-pkg/pkg.yaml | 5 +- gasket-driver/pkg.yaml | 5 +- hailort/pkg.yaml | 5 +- kernel/build/config-amd64 | 54 +++++++++---------- kernel/build/config-arm64 | 52 +++++++++--------- kernel/build/pkg.yaml | 10 ++-- kernel/prepare/pkg.yaml | 1 + mellanox-ofed/pkg.yaml | 1 + nonfree/kmod-nvidia/lts/pkg.yaml | 5 +- nonfree/kmod-nvidia/production/pkg.yaml | 5 +- nvidia-open-gpu-kernel-modules/lts/pkg.yaml | 9 ++-- .../production/pkg.yaml | 9 ++-- tenstorrent/pkg.yaml | 5 +- xdma-driver/pkg.yaml | 5 +- zfs/pkg.yaml | 7 +-- 19 files changed, 100 insertions(+), 90 deletions(-) diff --git a/.kres.yaml b/.kres.yaml index 05533171a..5002e494f 100644 --- a/.kres.yaml +++ b/.kres.yaml @@ -114,7 +114,7 @@ spec: for platform in $(shell echo $(PLATFORM) | tr "," " "); do \ arch=`basename $$platform` ; \ $(MAKE) docker-kernel-prepare PLATFORM=$$platform BUILDKIT_MULTI_PLATFORM=0 TARGET_ARGS="--tag=$(REGISTRY)/$(USERNAME)/kernel:$(TAG)-$$arch --load"; \ - docker run --rm -it --entrypoint=/bin/bash -w /src -v $$PWD/kernel/build/config-$$arch:/host/.hostconfig $(REGISTRY)/$(USERNAME)/kernel:$(TAG)-$$arch -c 'cp /host/.hostconfig .config && make $* && cp .config /host/.hostconfig'; \ + docker run --rm -it --entrypoint=/bin/bash -w /src -v $$PWD/kernel/build/config-$$arch:/host/.hostconfig $(REGISTRY)/$(USERNAME)/kernel:$(TAG)-$$arch -c 'cp /host/.hostconfig .config && make LLVM=1 $* && cp .config /host/.hostconfig'; \ done --- kind: custom.Step diff --git a/Makefile b/Makefile index 75e8f5505..e0f3d6f82 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ # THIS FILE WAS AUTOMATICALLY GENERATED, PLEASE DO NOT EDIT. # -# Generated on 2026-01-23T13:35:39Z by kres 1ffefb6. +# Generated on 2026-01-24T21:13:19Z by kres 1ffefb6. # common variables @@ -230,7 +230,7 @@ kernel-%: for platform in $(shell echo $(PLATFORM) | tr "," " "); do \ arch=`basename $$platform` ; \ $(MAKE) docker-kernel-prepare PLATFORM=$$platform BUILDKIT_MULTI_PLATFORM=0 TARGET_ARGS="--tag=$(REGISTRY)/$(USERNAME)/kernel:$(TAG)-$$arch --load"; \ - docker run --rm -it --entrypoint=/bin/bash -w /src -v $$PWD/kernel/build/config-$$arch:/host/.hostconfig $(REGISTRY)/$(USERNAME)/kernel:$(TAG)-$$arch -c 'cp /host/.hostconfig .config && make $* && cp .config /host/.hostconfig'; \ + docker run --rm -it --entrypoint=/bin/bash -w /src -v $$PWD/kernel/build/config-$$arch:/host/.hostconfig $(REGISTRY)/$(USERNAME)/kernel:$(TAG)-$$arch -c 'cp /host/.hostconfig .config && make LLVM=1 $* && cp .config /host/.hostconfig'; \ done .PHONY: check-dirty diff --git a/Pkgfile b/Pkgfile index aa464bd64..45b26fd53 100644 --- a/Pkgfile +++ b/Pkgfile @@ -6,6 +6,7 @@ vars: TOOLCHAIN_MUSL_IMAGE: ghcr.io/siderolabs/toolchain-musl:v1.13.0-alpha.0-3-g3a527b1 TOOLS_PREFIX: ghcr.io/siderolabs/ TOOLS_REV: v1.13.0-alpha.0-10-g721ad07 + LLVM: ghcr.io/dsseng/tools-llvm:v1.13.0-alpha.0-21-g784a7a3 # renovate: datasource=github-releases depName=containernetworking/plugins cni_version: v1.9.0 diff --git a/drbd/pkg.yaml b/drbd/pkg.yaml index 681699f66..cf5562d27 100644 --- a/drbd/pkg.yaml +++ b/drbd/pkg.yaml @@ -4,6 +4,7 @@ shell: /bin/bash dependencies: - stage: base - stage: kernel-build + - image: "{{ .LLVM }}" steps: - sources: - url: https://pkg.linbit.com//downloads/drbd/{{ regexReplaceAll ".\\d+\\.\\d+$" .drbd_version "${1}" }}/drbd-{{ .drbd_version }}.tar.gz @@ -18,7 +19,7 @@ steps: - network: default build: - | - make -j $(nproc) -C drbd KERNEL_SOURCES=/src MODVERSIONS=detect KDIR=/src + make LLVM=1 -j $(nproc) -C drbd KERNEL_SOURCES=/src MODVERSIONS=detect KDIR=/src - network: none install: - | @@ -27,7 +28,7 @@ steps: cp /src/modules.builtin /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ cp /src/modules.builtin.modinfo /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ - make -C /src M=$(pwd)/drbd/build-current modules_install DESTDIR=/rootfs INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 CONFIG_MODULE_SIG_ALL=y + make LLVM=1 -C /src M=$(pwd)/drbd/build-current modules_install DESTDIR=/rootfs INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 CONFIG_MODULE_SIG_ALL=y test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping diff --git a/ena-pkg/pkg.yaml b/ena-pkg/pkg.yaml index f77d3664e..73ce287cb 100644 --- a/ena-pkg/pkg.yaml +++ b/ena-pkg/pkg.yaml @@ -4,6 +4,7 @@ shell: /bin/bash dependencies: - stage: base - stage: kernel-build + - image: "{{ .LLVM }}" steps: - sources: - url: https://github.com/amzn/amzn-drivers/archive/refs/tags/ena_linux_{{ .ena_version }}.tar.gz @@ -18,14 +19,14 @@ steps: build: - | cd kernel/linux/ena - make KERNEL_BUILD_DIR=/src + make LLVM=1 KERNEL_BUILD_DIR=/src install: - | cd kernel/linux/ena mkdir -p /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release) - make -C /src M=$(pwd) modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 + make LLVM=1 -C /src M=$(pwd) modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping diff --git a/gasket-driver/pkg.yaml b/gasket-driver/pkg.yaml index 5a294888c..588117a2e 100644 --- a/gasket-driver/pkg.yaml +++ b/gasket-driver/pkg.yaml @@ -4,6 +4,7 @@ shell: /bin/bash dependencies: - stage: base - stage: kernel-build + - image: "{{ .LLVM }}" steps: - sources: - url: https://github.com/google/gasket-driver/archive/{{ .gasket_driver_ref }}.tar.gz @@ -24,7 +25,7 @@ steps: - | cd src sed -i 's|/lib/modules/$(KVERSION)/build|/src|' ./Makefile - make all + make LLVM=1 all install: - | @@ -33,7 +34,7 @@ steps: cp /src/modules.builtin /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ cp /src/modules.builtin.modinfo /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ - make -C /src M=$(pwd)/src modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 + make LLVM=1 -C /src M=$(pwd)/src modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping diff --git a/hailort/pkg.yaml b/hailort/pkg.yaml index 5e2af1e32..03363dc36 100644 --- a/hailort/pkg.yaml +++ b/hailort/pkg.yaml @@ -4,6 +4,7 @@ shell: /bin/bash dependencies: - stage: base - stage: kernel-build + - image: "{{ .LLVM }}" steps: - sources: - url: https://github.com/hailo-ai/hailort-drivers/archive/refs/tags/v{{ .hailort_version }}.tar.gz @@ -25,12 +26,12 @@ steps: build: - | cd linux/pcie - make -j $(nproc) KERNEL_DIR=/src/ all + make LLVM=1 -j $(nproc) KERNEL_DIR=/src/ all install: - | mv hailo8_fw.bin /rootfs/usr/lib/firmware/hailo/hailo8_fw.bin cd linux/pcie - make -j $(nproc) -C /src M=$(pwd) modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=kernel/drivers/misc INSTALL_MOD_STRIP=1 + make LLVM=1 -j $(nproc) -C /src M=$(pwd) modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=kernel/drivers/misc INSTALL_MOD_STRIP=1 cp 51-hailo-udev.rules /rootfs/usr/lib/udev/rules.d/51-hailo-udev.rules test: - | diff --git a/kernel/build/config-amd64 b/kernel/build/config-amd64 index e504290fb..40b719f0d 100644 --- a/kernel/build/config-amd64 +++ b/kernel/build/config-amd64 @@ -2,18 +2,17 @@ # Automatically generated file; DO NOT EDIT. # Linux/x86 6.18.6 Kernel Configuration # -CONFIG_CC_VERSION_TEXT="gcc (GCC) 15.2.0" -CONFIG_CC_IS_GCC=y -CONFIG_GCC_VERSION=150200 -CONFIG_CLANG_VERSION=0 -CONFIG_AS_IS_GNU=y -CONFIG_AS_VERSION=24501 -CONFIG_LD_IS_BFD=y -CONFIG_LD_VERSION=24501 -CONFIG_LLD_VERSION=0 +CONFIG_CC_VERSION_TEXT="clang version 21.1.6" +CONFIG_GCC_VERSION=0 +CONFIG_CC_IS_CLANG=y +CONFIG_CLANG_VERSION=210106 +CONFIG_AS_IS_LLVM=y +CONFIG_AS_VERSION=210106 +CONFIG_LD_VERSION=0 +CONFIG_LD_IS_LLD=y +CONFIG_LLD_VERSION=210106 CONFIG_RUSTC_VERSION=0 CONFIG_RUSTC_LLVM_VERSION=0 -CONFIG_CC_CAN_LINK=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y CONFIG_TOOLS_SUPPORT_RELR=y @@ -187,11 +186,9 @@ CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y CONFIG_CC_HAS_INT128=y -CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" +CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough" CONFIG_GCC10_NO_ARRAY_BOUNDS=y -CONFIG_CC_NO_ARRAY_BOUNDS=y CONFIG_GCC_NO_STRINGOP_OVERFLOW=y -CONFIG_CC_NO_STRINGOP_OVERFLOW=y CONFIG_ARCH_SUPPORTS_INT128=y # CONFIG_NUMA_BALANCING is not set CONFIG_SLAB_OBJ_EXT=y @@ -528,12 +525,11 @@ CONFIG_HAVE_LIVEPATCH=y CONFIG_X86_BUS_LOCK_DETECT=y # end of Processor type and features -CONFIG_CC_HAS_NAMED_AS=y CONFIG_CC_HAS_NAMED_AS_FIXED_SANITIZERS=y -CONFIG_USE_X86_SEG_SUPPORT=y CONFIG_CC_HAS_SLS=y CONFIG_CC_HAS_RETURN_THUNK=y CONFIG_CC_HAS_ENTRY_PADDING=y +CONFIG_CC_HAS_KCFI_ARITY=y CONFIG_FUNCTION_PADDING_CFI=11 CONFIG_FUNCTION_PADDING_BYTES=16 CONFIG_CALL_PADDING=y @@ -729,7 +725,6 @@ CONFIG_AMD_NODE=y # CONFIG_IA32_EMULATION=y # CONFIG_IA32_EMULATION_DEFAULT_DISABLED is not set -# CONFIG_X86_X32_ABI is not set CONFIG_COMPAT_32=y CONFIG_COMPAT=y CONFIG_COMPAT_FOR_U64_ALIGNMENT=y @@ -891,10 +886,17 @@ CONFIG_STACKPROTECTOR=y CONFIG_STACKPROTECTOR_STRONG=y CONFIG_ARCH_SUPPORTS_LTO_CLANG=y CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y +CONFIG_HAS_LTO_CLANG=y CONFIG_LTO_NONE=y +# CONFIG_LTO_CLANG_FULL is not set +# CONFIG_LTO_CLANG_THIN is not set CONFIG_ARCH_SUPPORTS_AUTOFDO_CLANG=y +# CONFIG_AUTOFDO_CLANG is not set CONFIG_ARCH_SUPPORTS_PROPELLER_CLANG=y +# CONFIG_PROPELLER_CLANG is not set CONFIG_ARCH_SUPPORTS_CFI=y +# CONFIG_CFI is not set +CONFIG_HAVE_CFI_ICALL_NORMALIZE_INTEGERS=y CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y CONFIG_HAVE_CONTEXT_TRACKING_USER=y CONFIG_HAVE_CONTEXT_TRACKING_USER_OFFSTACK=y @@ -976,12 +978,9 @@ CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y # end of GCOV-based kernel profiling CONFIG_HAVE_GCC_PLUGINS=y -CONFIG_GCC_PLUGINS=y -CONFIG_GCC_PLUGIN_LATENT_ENTROPY=y CONFIG_FUNCTION_ALIGNMENT_4B=y CONFIG_FUNCTION_ALIGNMENT_16B=y CONFIG_FUNCTION_ALIGNMENT=16 -CONFIG_CC_HAS_MIN_FUNCTION_ALIGNMENT=y CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT=y CONFIG_ARCH_HAS_CPU_ATTACK_VECTORS=y # end of General architecture-dependent options @@ -6939,9 +6938,8 @@ CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y # CONFIG_INIT_STACK_NONE is not set # CONFIG_INIT_STACK_ALL_PATTERN is not set CONFIG_INIT_STACK_ALL_ZERO=y +CONFIG_CC_HAS_SANCOV_STACK_DEPTH_CALLBACK=y CONFIG_KSTACK_ERASE=y -CONFIG_GCC_PLUGIN_STACKLEAK=y -# CONFIG_GCC_PLUGIN_STACKLEAK_VERBOSE is not set CONFIG_KSTACK_ERASE_TRACK_MIN_SIZE=100 # CONFIG_KSTACK_ERASE_METRICS is not set # CONFIG_KSTACK_ERASE_RUNTIME_DISABLE is not set @@ -6966,9 +6964,9 @@ CONFIG_LIST_HARDENED=y CONFIG_BUG_ON_DATA_CORRUPTION=y # end of Hardening of kernel data structures +CONFIG_CC_HAS_RANDSTRUCT=y CONFIG_RANDSTRUCT_NONE=y # CONFIG_RANDSTRUCT_FULL is not set -# CONFIG_RANDSTRUCT_PERFORMANCE is not set # end of Kernel hardening options # end of Security options @@ -7426,15 +7424,14 @@ CONFIG_DEBUG_INFO_COMPRESSED_NONE=y # CONFIG_DEBUG_INFO_SPLIT is not set CONFIG_DEBUG_INFO_BTF=y CONFIG_PAHOLE_HAS_SPLIT_BTF=y +CONFIG_PAHOLE_HAS_BTF_TAG=y CONFIG_PAHOLE_HAS_LANG_EXCLUDE=y CONFIG_DEBUG_INFO_BTF_MODULES=y # CONFIG_MODULE_ALLOW_BTF_MISMATCH is not set # CONFIG_GDB_SCRIPTS is not set CONFIG_FRAME_WARN=2048 # CONFIG_STRIP_ASM_SYMS is not set -# CONFIG_READABLE_ASM is not set # CONFIG_HEADERS_INSTALL is not set -# CONFIG_DEBUG_SECTION_MISMATCH is not set CONFIG_SECTION_MISMATCH_WARN_ONLY=y # CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set CONFIG_OBJTOOL=y @@ -7459,11 +7456,10 @@ CONFIG_HAVE_ARCH_KGDB=y CONFIG_ARCH_HAS_UBSAN=y CONFIG_UBSAN=y # CONFIG_UBSAN_TRAP is not set -CONFIG_CC_HAS_UBSAN_BOUNDS_STRICT=y +CONFIG_CC_HAS_UBSAN_ARRAY_BOUNDS=y CONFIG_UBSAN_BOUNDS=y -CONFIG_UBSAN_BOUNDS_STRICT=y +CONFIG_UBSAN_ARRAY_BOUNDS=y CONFIG_UBSAN_SHIFT=y -# CONFIG_UBSAN_DIV_ZERO is not set CONFIG_UBSAN_BOOL=y CONFIG_UBSAN_ENUM=y # CONFIG_UBSAN_ALIGNMENT is not set @@ -7530,6 +7526,8 @@ CONFIG_KFENCE_NUM_OBJECTS=255 # CONFIG_KFENCE_STATIC_KEYS is not set CONFIG_KFENCE_STRESS_TEST_FAULTS=0 CONFIG_HAVE_ARCH_KMSAN=y +CONFIG_HAVE_KMSAN_COMPILER=y +# CONFIG_KMSAN is not set # end of Memory Debugging # CONFIG_DEBUG_SHIRQ is not set @@ -7673,7 +7671,7 @@ CONFIG_BPF_EVENTS=y CONFIG_DYNAMIC_EVENTS=y CONFIG_PROBE_EVENTS=y # CONFIG_BPF_KPROBE_OVERRIDE is not set -CONFIG_FTRACE_MCOUNT_USE_CC=y +CONFIG_FTRACE_MCOUNT_USE_OBJTOOL=y # CONFIG_SYNTH_EVENTS is not set # CONFIG_USER_EVENTS is not set # CONFIG_HIST_TRIGGERS is not set diff --git a/kernel/build/config-arm64 b/kernel/build/config-arm64 index c386c2565..a4250e85f 100644 --- a/kernel/build/config-arm64 +++ b/kernel/build/config-arm64 @@ -2,18 +2,17 @@ # Automatically generated file; DO NOT EDIT. # Linux/arm64 6.18.6 Kernel Configuration # -CONFIG_CC_VERSION_TEXT="gcc (GCC) 15.2.0" -CONFIG_CC_IS_GCC=y -CONFIG_GCC_VERSION=150200 -CONFIG_CLANG_VERSION=0 -CONFIG_AS_IS_GNU=y -CONFIG_AS_VERSION=24501 -CONFIG_LD_IS_BFD=y -CONFIG_LD_VERSION=24501 -CONFIG_LLD_VERSION=0 +CONFIG_CC_VERSION_TEXT="clang version 21.1.6" +CONFIG_GCC_VERSION=0 +CONFIG_CC_IS_CLANG=y +CONFIG_CLANG_VERSION=210106 +CONFIG_AS_IS_LLVM=y +CONFIG_AS_VERSION=210106 +CONFIG_LD_VERSION=0 +CONFIG_LD_IS_LLD=y +CONFIG_LLD_VERSION=210106 CONFIG_RUSTC_VERSION=0 CONFIG_RUSTC_LLVM_VERSION=0 -CONFIG_CC_CAN_LINK=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y CONFIG_TOOLS_SUPPORT_RELR=y @@ -176,11 +175,9 @@ CONFIG_GENERIC_SCHED_CLOCK=y CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y CONFIG_CC_HAS_INT128=y -CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" +CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough" CONFIG_GCC10_NO_ARRAY_BOUNDS=y -CONFIG_CC_NO_ARRAY_BOUNDS=y CONFIG_GCC_NO_STRINGOP_OVERFLOW=y -CONFIG_CC_NO_STRINGOP_OVERFLOW=y CONFIG_ARCH_SUPPORTS_INT128=y CONFIG_NUMA_BALANCING=y CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y @@ -308,7 +305,7 @@ CONFIG_CRASH_DUMP=y # end of General setup CONFIG_ARM64=y -CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y +CONFIG_CLANG_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y CONFIG_64BIT=y CONFIG_MMU=y CONFIG_ARM64_CONT_PTE_SHIFT=4 @@ -503,6 +500,8 @@ CONFIG_ARM64_SW_TTBR0_PAN=y CONFIG_ARM64_TAGGED_ADDR_ABI=y CONFIG_COMPAT=y CONFIG_KUSER_HELPERS=y +CONFIG_COMPAT_VDSO=y +CONFIG_THUMB2_COMPAT_VDSO=y # CONFIG_COMPAT_ALIGNMENT_FIXUPS is not set CONFIG_ARMV8_DEPRECATED=y CONFIG_SWP_EMULATION=y @@ -547,6 +546,7 @@ CONFIG_ARM64_TLB_RANGE=y # CONFIG_AS_HAS_ARMV8_5=y CONFIG_ARM64_BTI=y +CONFIG_ARM64_BTI_KERNEL=y CONFIG_CC_HAS_BRANCH_PROT_PAC_RET_BTI=y CONFIG_ARM64_E0PD=y CONFIG_ARM64_AS_HAS_MTE=y @@ -584,6 +584,7 @@ CONFIG_RANDOMIZE_BASE=y CONFIG_RANDOMIZE_MODULE_REGION_FULL=y CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y CONFIG_STACKPROTECTOR_PER_TASK=y +# CONFIG_UNWIND_PATCH_PAC_INTO_SCS is not set CONFIG_ARM64_CONTPTE=y # end of Kernel Features @@ -851,8 +852,13 @@ CONFIG_ARCH_SUPPORTS_SHADOW_CALL_STACK=y CONFIG_SHADOW_CALL_STACK=y CONFIG_ARCH_SUPPORTS_LTO_CLANG=y CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y +CONFIG_HAS_LTO_CLANG=y CONFIG_LTO_NONE=y +# CONFIG_LTO_CLANG_FULL is not set +# CONFIG_LTO_CLANG_THIN is not set CONFIG_ARCH_SUPPORTS_CFI=y +# CONFIG_CFI is not set +CONFIG_HAVE_CFI_ICALL_NORMALIZE_INTEGERS=y CONFIG_HAVE_CONTEXT_TRACKING_USER=y CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y @@ -920,12 +926,9 @@ CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y # end of GCOV-based kernel profiling CONFIG_HAVE_GCC_PLUGINS=y -CONFIG_GCC_PLUGINS=y -CONFIG_GCC_PLUGIN_LATENT_ENTROPY=y CONFIG_FUNCTION_ALIGNMENT_4B=y CONFIG_FUNCTION_ALIGNMENT_8B=y CONFIG_FUNCTION_ALIGNMENT=8 -CONFIG_CC_HAS_MIN_FUNCTION_ALIGNMENT=y CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT=y # end of General architecture-dependent options @@ -5615,8 +5618,6 @@ CONFIG_DRM_AMDGPU=m # Display Engine Configuration # CONFIG_DRM_AMD_DC=y -CONFIG_DRM_AMD_DC_FP=y -# CONFIG_DRM_AMD_SECURE_DISPLAY is not set # end of Display Engine Configuration # CONFIG_HSA_AMD is not set @@ -9800,9 +9801,8 @@ CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y # CONFIG_INIT_STACK_NONE is not set # CONFIG_INIT_STACK_ALL_PATTERN is not set CONFIG_INIT_STACK_ALL_ZERO=y +CONFIG_CC_HAS_SANCOV_STACK_DEPTH_CALLBACK=y CONFIG_KSTACK_ERASE=y -CONFIG_GCC_PLUGIN_STACKLEAK=y -# CONFIG_GCC_PLUGIN_STACKLEAK_VERBOSE is not set CONFIG_KSTACK_ERASE_TRACK_MIN_SIZE=100 # CONFIG_KSTACK_ERASE_METRICS is not set # CONFIG_KSTACK_ERASE_RUNTIME_DISABLE is not set @@ -9827,9 +9827,9 @@ CONFIG_LIST_HARDENED=y CONFIG_BUG_ON_DATA_CORRUPTION=y # end of Hardening of kernel data structures +CONFIG_CC_HAS_RANDSTRUCT=y CONFIG_RANDSTRUCT_NONE=y # CONFIG_RANDSTRUCT_FULL is not set -# CONFIG_RANDSTRUCT_PERFORMANCE is not set # end of Kernel hardening options # end of Security options @@ -10342,15 +10342,14 @@ CONFIG_DEBUG_INFO_COMPRESSED_NONE=y # CONFIG_DEBUG_INFO_SPLIT is not set CONFIG_DEBUG_INFO_BTF=y CONFIG_PAHOLE_HAS_SPLIT_BTF=y +CONFIG_PAHOLE_HAS_BTF_TAG=y CONFIG_PAHOLE_HAS_LANG_EXCLUDE=y CONFIG_DEBUG_INFO_BTF_MODULES=y # CONFIG_MODULE_ALLOW_BTF_MISMATCH is not set # CONFIG_GDB_SCRIPTS is not set CONFIG_FRAME_WARN=2048 # CONFIG_STRIP_ASM_SYMS is not set -# CONFIG_READABLE_ASM is not set # CONFIG_HEADERS_INSTALL is not set -# CONFIG_DEBUG_SECTION_MISMATCH is not set CONFIG_SECTION_MISMATCH_WARN_ONLY=y # CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set CONFIG_ARCH_WANT_FRAME_POINTERS=y @@ -10375,11 +10374,10 @@ CONFIG_HAVE_ARCH_KGDB=y CONFIG_ARCH_HAS_UBSAN=y CONFIG_UBSAN=y # CONFIG_UBSAN_TRAP is not set -CONFIG_CC_HAS_UBSAN_BOUNDS_STRICT=y +CONFIG_CC_HAS_UBSAN_ARRAY_BOUNDS=y CONFIG_UBSAN_BOUNDS=y -CONFIG_UBSAN_BOUNDS_STRICT=y +CONFIG_UBSAN_ARRAY_BOUNDS=y CONFIG_UBSAN_SHIFT=y -# CONFIG_UBSAN_DIV_ZERO is not set # CONFIG_UBSAN_UNREACHABLE is not set CONFIG_UBSAN_BOOL=y CONFIG_UBSAN_ENUM=y diff --git a/kernel/build/pkg.yaml b/kernel/build/pkg.yaml index f797dd4ab..5afd8f397 100644 --- a/kernel/build/pkg.yaml +++ b/kernel/build/pkg.yaml @@ -23,20 +23,20 @@ steps: - | cd /src - make {{ .BUILD_ARG_KERNEL_TARGET }} + make LLVM=1 {{ .BUILD_ARG_KERNEL_TARGET }} {{ else }} - | cd /src - python3 /toolchain/kernel-hardening-checker/bin/kernel-hardening-checker -c .config -m json | python3 /pkg/scripts/filter-hardened-check.py ${CARCH} + # python3 /toolchain/kernel-hardening-checker/bin/kernel-hardening-checker -c .config -m json | python3 /pkg/scripts/filter-hardened-check.py ${CARCH} - | cd /src - make -j $(nproc) - make -j $(nproc) modules + make LLVM=1 -j $(nproc) + make LLVM=1 -j $(nproc) modules if [[ "${ARCH}" == "arm64" ]]; then echo "Compiling device-tree blobs" - make -j $(nproc) DTC_FLAGS=-@ dtbs + make LLVM=1 -j $(nproc) DTC_FLAGS=-@ dtbs fi {{ end }} finalize: diff --git a/kernel/prepare/pkg.yaml b/kernel/prepare/pkg.yaml index 6408110e4..0561b4548 100644 --- a/kernel/prepare/pkg.yaml +++ b/kernel/prepare/pkg.yaml @@ -3,6 +3,7 @@ variant: scratch shell: /bin/bash dependencies: - stage: base + - image: "{{ .LLVM }}" steps: - sources: - url: https://cdn.kernel.org/pub/linux/kernel/v{{ regexReplaceAll "(\\d+)(.\\d+)(\\.\\d+)?$" .linux_version "${1}" }}.x/linux-{{ .linux_version }}.tar.xz diff --git a/mellanox-ofed/pkg.yaml b/mellanox-ofed/pkg.yaml index 9f6a5e920..c32df87d1 100644 --- a/mellanox-ofed/pkg.yaml +++ b/mellanox-ofed/pkg.yaml @@ -4,6 +4,7 @@ shell: /bin/bash dependencies: - stage: base - stage: kernel-build + - image: "{{ .LLVM }}" steps: - sources: - url: https://www.mellanox.com/downloads/ofed/MLNX_OFED-{{ .mellanox_ofed_version }}/MLNX_OFED_SRC-debian-{{ .mellanox_ofed_version }}.tgz diff --git a/nonfree/kmod-nvidia/lts/pkg.yaml b/nonfree/kmod-nvidia/lts/pkg.yaml index 08ad231ed..781dce78f 100644 --- a/nonfree/kmod-nvidia/lts/pkg.yaml +++ b/nonfree/kmod-nvidia/lts/pkg.yaml @@ -4,6 +4,7 @@ shell: /bin/bash dependencies: - stage: base - stage: kernel-build + - image: "{{ .LLVM }}" steps: - sources: # {{ if eq .ARCH "aarch64" }} This in fact is YAML comment, but Go templating instruction is evaluated by bldr @@ -26,7 +27,7 @@ steps: - | cd kernel - make -j $(nproc) SYSSRC=/src + make LLVM=1 -j $(nproc) SYSSRC=/src install: - | cd kernel @@ -36,7 +37,7 @@ steps: cp /src/modules.builtin /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ cp /src/modules.builtin.modinfo /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ - make -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 + make LLVM=1 -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping diff --git a/nonfree/kmod-nvidia/production/pkg.yaml b/nonfree/kmod-nvidia/production/pkg.yaml index 1ae0b5bd6..33803d201 100644 --- a/nonfree/kmod-nvidia/production/pkg.yaml +++ b/nonfree/kmod-nvidia/production/pkg.yaml @@ -4,6 +4,7 @@ shell: /bin/bash dependencies: - stage: base - stage: kernel-build + - image: "{{ .LLVM }}" steps: - sources: # {{ if eq .ARCH "aarch64" }} This in fact is YAML comment, but Go templating instruction is evaluated by bldr @@ -26,7 +27,7 @@ steps: - | cd kernel - make -j $(nproc) SYSSRC=/src + make LLVM=1 -j $(nproc) SYSSRC=/src install: - | cd kernel @@ -36,7 +37,7 @@ steps: cp /src/modules.builtin /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ cp /src/modules.builtin.modinfo /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ - make -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 + make LLVM=1 -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping diff --git a/nvidia-open-gpu-kernel-modules/lts/pkg.yaml b/nvidia-open-gpu-kernel-modules/lts/pkg.yaml index f7284df52..4d3352424 100644 --- a/nvidia-open-gpu-kernel-modules/lts/pkg.yaml +++ b/nvidia-open-gpu-kernel-modules/lts/pkg.yaml @@ -4,6 +4,7 @@ shell: /bin/bash dependencies: - stage: base - stage: kernel-build + - image: "{{ .LLVM }}" steps: - sources: # {{ if eq .ARCH "aarch64" }} This in fact is YAML comment, but Go templating instruction is evaluated by bldr @@ -34,11 +35,11 @@ steps: - | cd /nvidia-driver/kernel-open - make -j $(nproc) SYSSRC=/src + make LLVM=1 -j $(nproc) SYSSRC=/src - | cd /gdrcopy/src/gdrdrv # Build the kernel module with NVIDIA driver sources and kernel 6.12 compatibility flags - make -C /src M=/gdrcopy/src/gdrdrv modules \ + make LLVM=1 -C /src M=/gdrcopy/src/gdrdrv modules \ NVIDIA_SRC_DIR=/nvidia-driver/kernel-open/nvidia \ NVIDIA_IS_OPENSOURCE=y \ HAVE_VM_FLAGS_SET=y \ @@ -53,12 +54,12 @@ steps: cp /src/modules.builtin /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ cp /src/modules.builtin.modinfo /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ - make -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_STRIP=1 + make LLVM=1 -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_STRIP=1 - | cd /gdrcopy # Install the gdrdrv kernel module - make -C /src M=/gdrcopy/src/gdrdrv modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 + make LLVM=1 -C /src M=/gdrcopy/src/gdrdrv modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping diff --git a/nvidia-open-gpu-kernel-modules/production/pkg.yaml b/nvidia-open-gpu-kernel-modules/production/pkg.yaml index ec0738c0f..106c92842 100644 --- a/nvidia-open-gpu-kernel-modules/production/pkg.yaml +++ b/nvidia-open-gpu-kernel-modules/production/pkg.yaml @@ -4,6 +4,7 @@ shell: /bin/bash dependencies: - stage: base - stage: kernel-build + - image: "{{ .LLVM }}" steps: - sources: # {{ if eq .ARCH "aarch64" }} This in fact is YAML comment, but Go templating instruction is evaluated by bldr @@ -34,11 +35,11 @@ steps: - | cd /nvidia-driver/kernel-open - make -j $(nproc) SYSSRC=/src + make LLVM=1 -j $(nproc) SYSSRC=/src - | cd /gdrcopy/src/gdrdrv # Build the kernel module with NVIDIA driver sources and kernel 6.12 compatibility flags - make -C /src M=/gdrcopy/src/gdrdrv modules \ + make LLVM=1 -C /src M=/gdrcopy/src/gdrdrv modules \ NVIDIA_SRC_DIR=/nvidia-driver/kernel-open/nvidia \ NVIDIA_IS_OPENSOURCE=y \ HAVE_VM_FLAGS_SET=y \ @@ -53,12 +54,12 @@ steps: cp /src/modules.builtin /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ cp /src/modules.builtin.modinfo /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ - make -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_STRIP=1 + make LLVM=1 -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_STRIP=1 - | cd /gdrcopy # Install the gdrdrv kernel module - make -C /src M=/gdrcopy/src/gdrdrv modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 + make LLVM=1 -C /src M=/gdrcopy/src/gdrdrv modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping diff --git a/tenstorrent/pkg.yaml b/tenstorrent/pkg.yaml index 6ec4fef75..a4af4d1b4 100644 --- a/tenstorrent/pkg.yaml +++ b/tenstorrent/pkg.yaml @@ -4,6 +4,7 @@ shell: /bin/bash dependencies: - stage: base - stage: kernel-build + - image: "{{ .LLVM }}" steps: - sources: - url: https://github.com/tenstorrent/tt-kmd/archive/refs/tags/ttkmd-{{ .tenstorrent_version }}.tar.gz @@ -19,10 +20,10 @@ steps: mkdir -p /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release) /rootfs/etc/udev/rules.d/ build: - | - make -j $(nproc) KDIR=/src/ + make LLVM=1 -j $(nproc) KDIR=/src/ install: - | - make -j $(nproc) modules_install KDIR=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 + make LLVM=1 -j $(nproc) modules_install KDIR=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 cp udev-50-tenstorrent.rules /rootfs/etc/udev/rules.d/50-tenstorrent.rules test: - | diff --git a/xdma-driver/pkg.yaml b/xdma-driver/pkg.yaml index 9b9d83467..d460c30ec 100644 --- a/xdma-driver/pkg.yaml +++ b/xdma-driver/pkg.yaml @@ -4,6 +4,7 @@ shell: /bin/bash dependencies: - stage: base - stage: kernel-build + - image: "{{ .LLVM }}" steps: - sources: - url: https://github.com/Xilinx/dma_ip_drivers/archive/{{ .xdma_driver_version }}.tar.gz @@ -19,7 +20,7 @@ steps: - | cd XDMA/linux-kernel/xdma cp ../include/libxdma_api.h . - make all BUILDSYSTEM_DIR=/src + make LLVM=1 all BUILDSYSTEM_DIR=/src install: - | cd XDMA/linux-kernel/xdma @@ -29,7 +30,7 @@ steps: cp /src/modules.builtin /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ cp /src/modules.builtin.modinfo /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ - make -C /src M=$(pwd) modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 + make LLVM=1 -C /src M=$(pwd) modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping diff --git a/zfs/pkg.yaml b/zfs/pkg.yaml index 88fac653f..ed28cf9d3 100644 --- a/zfs/pkg.yaml +++ b/zfs/pkg.yaml @@ -4,6 +4,7 @@ shell: /bin/bash dependencies: - stage: base - stage: kernel-build + - image: "{{ .LLVM }}" steps: - sources: - url: https://github.com/openzfs/zfs/releases/download/zfs-{{ .zfs_version }}/zfs-{{ .zfs_version }}.tar.gz @@ -17,10 +18,10 @@ steps: tar -xzf zfs.tar.gz --strip-components=1 ./autogen.sh - ./configure --with-config=kernel --with-linux=/src + ./configure --with-config=kernel --with-linux=/src --disable-silent-rules KERNEL_LLVM=1 build: - | - make -j $(nproc) + make LLVM=1 -j $(nproc) install: - | mkdir -p /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ @@ -28,7 +29,7 @@ steps: cp /src/modules.builtin /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ cp /src/modules.builtin.modinfo /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ - make -j $(nproc) -C /src M="$(pwd)/module" modules_install DESTDIR=/rootfs INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 CONFIG_MODULE_SIG_ALL=y + make LLVM=1 -j $(nproc) -C /src M="$(pwd)/module" modules_install DESTDIR=/rootfs INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 CONFIG_MODULE_SIG_ALL=y test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping From 1a848dc6d71c4e6ce64879016fafe2c8c30501cd Mon Sep 17 00:00:00 2001 From: Dmitrii Sharshakov Date: Mon, 1 Dec 2025 23:05:40 +0100 Subject: [PATCH 2/5] DROP: ttl.sh --- .github/workflows/ci.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1ea23ffd6..fa12c5e1c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -85,6 +85,16 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} registry: ghcr.io username: ${{ github.repository_owner }} + - name: Push to ttl.sh + if: github.event_name == 'pull_request' + run: | + make PUSH=true REGISTRY=ttl.sh PROGRESS=plain + continue-on-error: true + - name: Push nonfree to ttl.sh + if: github.event_name == 'pull_request' + run: | + make nonfree PUSH=true REGISTRY=ttl.sh PROGRESS=plain + continue-on-error: true - name: Push to registry if: github.event_name != 'pull_request' run: | From 61980ad75daa7f89d4d1c5026a295ea513aaa8fd Mon Sep 17 00:00:00 2001 From: Dmitrii Sharshakov Date: Mon, 8 Dec 2025 09:26:27 +0100 Subject: [PATCH 3/5] thinlto --- kernel/build/config-amd64 | 7 ++++--- kernel/build/config-arm64 | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/kernel/build/config-amd64 b/kernel/build/config-amd64 index 40b719f0d..37aaeb209 100644 --- a/kernel/build/config-amd64 +++ b/kernel/build/config-amd64 @@ -884,12 +884,14 @@ CONFIG_HAVE_ARCH_KSTACK_ERASE=y CONFIG_HAVE_STACKPROTECTOR=y CONFIG_STACKPROTECTOR=y CONFIG_STACKPROTECTOR_STRONG=y +CONFIG_LTO=y +CONFIG_LTO_CLANG=y CONFIG_ARCH_SUPPORTS_LTO_CLANG=y CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y CONFIG_HAS_LTO_CLANG=y -CONFIG_LTO_NONE=y +# CONFIG_LTO_NONE is not set # CONFIG_LTO_CLANG_FULL is not set -# CONFIG_LTO_CLANG_THIN is not set +CONFIG_LTO_CLANG_THIN=y CONFIG_ARCH_SUPPORTS_AUTOFDO_CLANG=y # CONFIG_AUTOFDO_CLANG is not set CONFIG_ARCH_SUPPORTS_PROPELLER_CLANG=y @@ -995,7 +997,6 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set CONFIG_MODVERSIONS=y CONFIG_GENKSYMS=y -# CONFIG_GENDWARFKSYMS is not set CONFIG_ASM_MODVERSIONS=y # CONFIG_EXTENDED_MODVERSIONS is not set CONFIG_BASIC_MODVERSIONS=y diff --git a/kernel/build/config-arm64 b/kernel/build/config-arm64 index a4250e85f..02487633e 100644 --- a/kernel/build/config-arm64 +++ b/kernel/build/config-arm64 @@ -850,12 +850,14 @@ CONFIG_STACKPROTECTOR=y CONFIG_STACKPROTECTOR_STRONG=y CONFIG_ARCH_SUPPORTS_SHADOW_CALL_STACK=y CONFIG_SHADOW_CALL_STACK=y +CONFIG_LTO=y +CONFIG_LTO_CLANG=y CONFIG_ARCH_SUPPORTS_LTO_CLANG=y CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y CONFIG_HAS_LTO_CLANG=y -CONFIG_LTO_NONE=y +# CONFIG_LTO_NONE is not set # CONFIG_LTO_CLANG_FULL is not set -# CONFIG_LTO_CLANG_THIN is not set +CONFIG_LTO_CLANG_THIN=y CONFIG_ARCH_SUPPORTS_CFI=y # CONFIG_CFI is not set CONFIG_HAVE_CFI_ICALL_NORMALIZE_INTEGERS=y @@ -942,7 +944,6 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set CONFIG_MODVERSIONS=y CONFIG_GENKSYMS=y -# CONFIG_GENDWARFKSYMS is not set CONFIG_ASM_MODVERSIONS=y # CONFIG_EXTENDED_MODVERSIONS is not set CONFIG_BASIC_MODVERSIONS=y From 21ca7668fe6e9d6fee501584c6f82073d4e1d3d3 Mon Sep 17 00:00:00 2001 From: Dmitrii Sharshakov Date: Mon, 8 Dec 2025 18:16:28 +0100 Subject: [PATCH 4/5] nvidia lto fix Ensure LLVM binutils are used in all steps of kernel build to allow LLVM IR .o files to be linked --- nonfree/kmod-nvidia/lts/pkg.yaml | 4 ++-- nonfree/kmod-nvidia/production/pkg.yaml | 4 ++-- nvidia-open-gpu-kernel-modules/lts/pkg.yaml | 8 ++++---- nvidia-open-gpu-kernel-modules/production/pkg.yaml | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/nonfree/kmod-nvidia/lts/pkg.yaml b/nonfree/kmod-nvidia/lts/pkg.yaml index 781dce78f..c24dcfd50 100644 --- a/nonfree/kmod-nvidia/lts/pkg.yaml +++ b/nonfree/kmod-nvidia/lts/pkg.yaml @@ -27,7 +27,7 @@ steps: - | cd kernel - make LLVM=1 -j $(nproc) SYSSRC=/src + make LLVM=1 LD=ld.lld OBJDUMP=llvm-objdump -j $(nproc) SYSSRC=/src install: - | cd kernel @@ -37,7 +37,7 @@ steps: cp /src/modules.builtin /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ cp /src/modules.builtin.modinfo /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ - make LLVM=1 -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 + make LLVM=1 LD=ld.lld OBJDUMP=llvm-objdump -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping diff --git a/nonfree/kmod-nvidia/production/pkg.yaml b/nonfree/kmod-nvidia/production/pkg.yaml index 33803d201..a9769f582 100644 --- a/nonfree/kmod-nvidia/production/pkg.yaml +++ b/nonfree/kmod-nvidia/production/pkg.yaml @@ -27,7 +27,7 @@ steps: - | cd kernel - make LLVM=1 -j $(nproc) SYSSRC=/src + make LLVM=1 LD=ld.lld OBJDUMP=llvm-objdump -j $(nproc) SYSSRC=/src install: - | cd kernel @@ -37,7 +37,7 @@ steps: cp /src/modules.builtin /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ cp /src/modules.builtin.modinfo /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ - make LLVM=1 -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 + make LLVM=1 LD=ld.lld OBJDUMP=llvm-objdump -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping diff --git a/nvidia-open-gpu-kernel-modules/lts/pkg.yaml b/nvidia-open-gpu-kernel-modules/lts/pkg.yaml index 4d3352424..fd5e182b7 100644 --- a/nvidia-open-gpu-kernel-modules/lts/pkg.yaml +++ b/nvidia-open-gpu-kernel-modules/lts/pkg.yaml @@ -35,11 +35,11 @@ steps: - | cd /nvidia-driver/kernel-open - make LLVM=1 -j $(nproc) SYSSRC=/src + make LLVM=1 LD=ld.lld OBJDUMP=llvm-objdump -j $(nproc) SYSSRC=/src - | cd /gdrcopy/src/gdrdrv # Build the kernel module with NVIDIA driver sources and kernel 6.12 compatibility flags - make LLVM=1 -C /src M=/gdrcopy/src/gdrdrv modules \ + make LLVM=1 LD=ld.lld OBJDUMP=llvm-objdump -C /src M=/gdrcopy/src/gdrdrv modules \ NVIDIA_SRC_DIR=/nvidia-driver/kernel-open/nvidia \ NVIDIA_IS_OPENSOURCE=y \ HAVE_VM_FLAGS_SET=y \ @@ -54,12 +54,12 @@ steps: cp /src/modules.builtin /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ cp /src/modules.builtin.modinfo /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ - make LLVM=1 -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_STRIP=1 + make LLVM=1 LD=ld.lld OBJDUMP=llvm-objdump -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_STRIP=1 - | cd /gdrcopy # Install the gdrdrv kernel module - make LLVM=1 -C /src M=/gdrcopy/src/gdrdrv modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 + make LLVM=1 LD=ld.lld OBJDUMP=llvm-objdump -C /src M=/gdrcopy/src/gdrdrv modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping diff --git a/nvidia-open-gpu-kernel-modules/production/pkg.yaml b/nvidia-open-gpu-kernel-modules/production/pkg.yaml index 106c92842..38c3800e0 100644 --- a/nvidia-open-gpu-kernel-modules/production/pkg.yaml +++ b/nvidia-open-gpu-kernel-modules/production/pkg.yaml @@ -35,11 +35,11 @@ steps: - | cd /nvidia-driver/kernel-open - make LLVM=1 -j $(nproc) SYSSRC=/src + make LLVM=1 LD=ld.lld OBJDUMP=llvm-objdump -j $(nproc) SYSSRC=/src - | cd /gdrcopy/src/gdrdrv # Build the kernel module with NVIDIA driver sources and kernel 6.12 compatibility flags - make LLVM=1 -C /src M=/gdrcopy/src/gdrdrv modules \ + make LLVM=1 LD=ld.lld OBJDUMP=llvm-objdump -C /src M=/gdrcopy/src/gdrdrv modules \ NVIDIA_SRC_DIR=/nvidia-driver/kernel-open/nvidia \ NVIDIA_IS_OPENSOURCE=y \ HAVE_VM_FLAGS_SET=y \ @@ -54,12 +54,12 @@ steps: cp /src/modules.builtin /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ cp /src/modules.builtin.modinfo /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ - make LLVM=1 -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_STRIP=1 + make LLVM=1 LD=ld.lld OBJDUMP=llvm-objdump -j $(nproc) modules_install SYSSRC=/src INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_STRIP=1 - | cd /gdrcopy # Install the gdrdrv kernel module - make LLVM=1 -C /src M=/gdrcopy/src/gdrdrv modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 + make LLVM=1 LD=ld.lld OBJDUMP=llvm-objdump -C /src M=/gdrcopy/src/gdrdrv modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping From 6fd48ec41aa3dc630d29bd8875f411a4b6a3acda Mon Sep 17 00:00:00 2001 From: Dmitrii Sharshakov Date: Sat, 13 Dec 2025 19:07:44 +0100 Subject: [PATCH 5/5] fix drivers --- kernel/build/config-amd64 | 8 ++++---- kernel/build/config-arm64 | 8 ++++---- mellanox-mstflint/pkg.yaml | 5 +++-- px-fuse/patches/prototypes.patch | 13 +++++++++++++ px-fuse/pkg.yaml | 6 ++++-- 5 files changed, 28 insertions(+), 12 deletions(-) create mode 100644 px-fuse/patches/prototypes.patch diff --git a/kernel/build/config-amd64 b/kernel/build/config-amd64 index 37aaeb209..e2e10a3b8 100644 --- a/kernel/build/config-amd64 +++ b/kernel/build/config-amd64 @@ -2,15 +2,15 @@ # Automatically generated file; DO NOT EDIT. # Linux/x86 6.18.6 Kernel Configuration # -CONFIG_CC_VERSION_TEXT="clang version 21.1.6" +CONFIG_CC_VERSION_TEXT="clang version 21.1.8" CONFIG_GCC_VERSION=0 CONFIG_CC_IS_CLANG=y -CONFIG_CLANG_VERSION=210106 +CONFIG_CLANG_VERSION=210108 CONFIG_AS_IS_LLVM=y -CONFIG_AS_VERSION=210106 +CONFIG_AS_VERSION=210108 CONFIG_LD_VERSION=0 CONFIG_LD_IS_LLD=y -CONFIG_LLD_VERSION=210106 +CONFIG_LLD_VERSION=210108 CONFIG_RUSTC_VERSION=0 CONFIG_RUSTC_LLVM_VERSION=0 CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y diff --git a/kernel/build/config-arm64 b/kernel/build/config-arm64 index 02487633e..88f0f9ba9 100644 --- a/kernel/build/config-arm64 +++ b/kernel/build/config-arm64 @@ -2,15 +2,15 @@ # Automatically generated file; DO NOT EDIT. # Linux/arm64 6.18.6 Kernel Configuration # -CONFIG_CC_VERSION_TEXT="clang version 21.1.6" +CONFIG_CC_VERSION_TEXT="clang version 21.1.8" CONFIG_GCC_VERSION=0 CONFIG_CC_IS_CLANG=y -CONFIG_CLANG_VERSION=210106 +CONFIG_CLANG_VERSION=210108 CONFIG_AS_IS_LLVM=y -CONFIG_AS_VERSION=210106 +CONFIG_AS_VERSION=210108 CONFIG_LD_VERSION=0 CONFIG_LD_IS_LLD=y -CONFIG_LLD_VERSION=210106 +CONFIG_LLD_VERSION=210108 CONFIG_RUSTC_VERSION=0 CONFIG_RUSTC_LLVM_VERSION=0 CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y diff --git a/mellanox-mstflint/pkg.yaml b/mellanox-mstflint/pkg.yaml index 12dd6a31c..b915ff068 100644 --- a/mellanox-mstflint/pkg.yaml +++ b/mellanox-mstflint/pkg.yaml @@ -4,6 +4,7 @@ shell: /bin/bash dependencies: - stage: base - stage: kernel-build + - image: "{{ .LLVM }}" steps: - sources: - url: https://github.com/Mellanox/mstflint/releases/download/v{{ .mellanox_mstflint_version }}/kernel-mstflint-{{ .mellanox_mstflint_version }}.tar.gz @@ -17,7 +18,7 @@ steps: tar -xzf kernel-mstflint.tgz --strip-components=1 build: - | - make KPVER=$(cat /src/include/config/kernel.release) KSRC=/src + make LLVM=1 KPVER=$(cat /src/include/config/kernel.release) KSRC=/src install: - | mkdir -p /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ @@ -25,7 +26,7 @@ steps: cp /src/modules.builtin /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ cp /src/modules.builtin.modinfo /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ - make -C /src M=$PWD modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 + make LLVM=1 -C /src M=$PWD modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping diff --git a/px-fuse/patches/prototypes.patch b/px-fuse/patches/prototypes.patch new file mode 100644 index 000000000..5d00d5535 --- /dev/null +++ b/px-fuse/patches/prototypes.patch @@ -0,0 +1,13 @@ +diff --git a/dev.c b/dev.c +index 7cd8304..0473244 100755 +--- a/dev.c ++++ b/dev.c +@@ -69,7 +69,7 @@ static struct fuse_req *__fuse_request_alloc(gfp_t flags) + return req; + } + +-struct fuse_req *fuse_request_alloc() ++struct fuse_req *fuse_request_alloc(void) + { + return __fuse_request_alloc(GFP_NOIO); + } diff --git a/px-fuse/pkg.yaml b/px-fuse/pkg.yaml index 2714ae4b0..478ae0730 100644 --- a/px-fuse/pkg.yaml +++ b/px-fuse/pkg.yaml @@ -4,6 +4,7 @@ shell: /bin/bash dependencies: - stage: base - stage: kernel-build + - image: "{{ .LLVM }}" steps: - sources: - url: https://github.com/portworx/px-fuse/archive/{{ .px_fuse_ref }}.tar.gz @@ -17,12 +18,13 @@ steps: tar xf px-fuse.tar.gz --strip-components=1 - | patch -p1 < /pkg/patches/idr.patch + patch -p1 < /pkg/patches/prototypes.patch - | autoreconf ./configure build: - | - make -j $(nproc) KERNELPATH=/src + make LLVM=1 -j $(nproc) KERNELPATH=/src install: - | mkdir -p /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ @@ -30,7 +32,7 @@ steps: cp /src/modules.builtin /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ cp /src/modules.builtin.modinfo /rootfs/usr/lib/modules/$(cat /src/include/config/kernel.release)/ - make -C /src M=$(pwd) modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 + make LLVM=1 -C /src M=$(pwd) modules_install INSTALL_MOD_PATH=/rootfs/usr INSTALL_MOD_DIR=extras INSTALL_MOD_STRIP=1 test: - | # https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.html#signed-modules-and-stripping