mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-25 19:42:19 +00:00
This was triggered by one of my mis-uses causing odd build warnings on sparc in linux-next, but while figuring out why the "obviously correct" use of cc-option caused such odd breakage, I found eight other cases of the same thing in the tree. The root cause is that 'cc-option' doesn't work for checking negative warning options (ie things like '-Wno-stringop-overflow') because gcc will silently accept options it doesn't recognize, and so 'cc-option' ends up thinking they are perfectly fine. And it all works, until you have a situation where _another_ warning is emitted. At that point the compiler will go "Hmm, maybe the user intended to disable this warning but used that wrong option that I didn't recognize", and generate a warning for the unrecognized negative option. Which explains why we have several cases of this in the tree: the 'cc-option' test really doesn't work for this situation, but most of the time it simply doesn't matter that ity doesn't work. The reason my recently added case caused problems on sparc was pointed out by Thomas Weißschuh: the sparc build had a previous explicit warning that then triggered the new one. I think the best fix for this would be to make 'cc-option' a bit smarter about this sitation, possibly by adding an intentional warning to the test case that then triggers the unrecognized option warning reliably. But the short-term fix is to replace 'cc-option' with an existing helper designed for this exact case: 'cc-disable-warning', which picks the negative warning but uses the positive form for testing the compiler support. Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Link: https://lore.kernel.org/all/20250422204718.0b4e3f81@canb.auug.org.au/ Explained-by: Thomas Weißschuh <linux@weissschuh.net> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
128 lines
3.6 KiB
Makefile
128 lines
3.6 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
# Makefile for the RISC-V Linux kernel
|
|
#
|
|
|
|
ifdef CONFIG_FTRACE
|
|
CFLAGS_REMOVE_ftrace.o = $(CC_FLAGS_FTRACE)
|
|
CFLAGS_REMOVE_patch.o = $(CC_FLAGS_FTRACE)
|
|
CFLAGS_REMOVE_sbi.o = $(CC_FLAGS_FTRACE)
|
|
CFLAGS_REMOVE_return_address.o = $(CC_FLAGS_FTRACE)
|
|
endif
|
|
CFLAGS_syscall_table.o += $(call cc-disable-warning, override-init)
|
|
CFLAGS_compat_syscall_table.o += $(call cc-disable-warning, override-init)
|
|
|
|
ifdef CONFIG_KEXEC_CORE
|
|
AFLAGS_kexec_relocate.o := -mcmodel=medany $(call cc-option,-mno-relax)
|
|
endif
|
|
|
|
# cmodel=medany and notrace when patching early
|
|
ifdef CONFIG_RISCV_ALTERNATIVE_EARLY
|
|
CFLAGS_alternative.o := -mcmodel=medany
|
|
CFLAGS_cpufeature.o := -mcmodel=medany
|
|
CFLAGS_sbi_ecall.o := -mcmodel=medany
|
|
ifdef CONFIG_FTRACE
|
|
CFLAGS_REMOVE_alternative.o = $(CC_FLAGS_FTRACE)
|
|
CFLAGS_REMOVE_cpufeature.o = $(CC_FLAGS_FTRACE)
|
|
CFLAGS_REMOVE_sbi_ecall.o = $(CC_FLAGS_FTRACE)
|
|
endif
|
|
ifdef CONFIG_RELOCATABLE
|
|
CFLAGS_alternative.o += -fno-pie
|
|
CFLAGS_cpufeature.o += -fno-pie
|
|
CFLAGS_sbi_ecall.o += -fno-pie
|
|
endif
|
|
ifdef CONFIG_KASAN
|
|
KASAN_SANITIZE_alternative.o := n
|
|
KASAN_SANITIZE_cpufeature.o := n
|
|
KASAN_SANITIZE_sbi_ecall.o := n
|
|
endif
|
|
ifdef CONFIG_FORTIFY_SOURCE
|
|
CFLAGS_alternative.o += -D__NO_FORTIFY
|
|
CFLAGS_cpufeature.o += -D__NO_FORTIFY
|
|
CFLAGS_sbi_ecall.o += -D__NO_FORTIFY
|
|
endif
|
|
endif
|
|
|
|
extra-y += vmlinux.lds
|
|
|
|
obj-y += head.o
|
|
obj-y += soc.o
|
|
obj-$(CONFIG_RISCV_ALTERNATIVE) += alternative.o
|
|
obj-y += cpu.o
|
|
obj-y += cpufeature.o
|
|
obj-y += entry.o
|
|
obj-y += irq.o
|
|
obj-y += process.o
|
|
obj-y += ptrace.o
|
|
obj-y += reset.o
|
|
obj-y += return_address.o
|
|
obj-y += setup.o
|
|
obj-y += signal.o
|
|
obj-y += syscall_table.o
|
|
obj-y += sys_riscv.o
|
|
obj-y += sys_hwprobe.o
|
|
obj-y += time.o
|
|
obj-y += traps.o
|
|
obj-y += riscv_ksyms.o
|
|
obj-y += stacktrace.o
|
|
obj-y += cacheinfo.o
|
|
obj-y += patch.o
|
|
obj-y += vendor_extensions.o
|
|
obj-y += vendor_extensions/
|
|
obj-y += probes/
|
|
obj-y += tests/
|
|
obj-$(CONFIG_MMU) += vdso.o vdso/
|
|
|
|
obj-$(CONFIG_RISCV_MISALIGNED) += traps_misaligned.o
|
|
obj-$(CONFIG_RISCV_MISALIGNED) += unaligned_access_speed.o
|
|
obj-$(CONFIG_RISCV_PROBE_UNALIGNED_ACCESS) += copy-unaligned.o
|
|
obj-$(CONFIG_RISCV_PROBE_VECTOR_UNALIGNED_ACCESS) += vec-copy-unaligned.o
|
|
|
|
obj-$(CONFIG_FPU) += fpu.o
|
|
obj-$(CONFIG_FPU) += kernel_mode_fpu.o
|
|
obj-$(CONFIG_RISCV_ISA_V) += vector.o
|
|
obj-$(CONFIG_RISCV_ISA_V) += kernel_mode_vector.o
|
|
obj-$(CONFIG_SMP) += smpboot.o
|
|
obj-$(CONFIG_SMP) += smp.o
|
|
obj-$(CONFIG_SMP) += cpu_ops.o
|
|
|
|
obj-$(CONFIG_RISCV_BOOT_SPINWAIT) += cpu_ops_spinwait.o
|
|
obj-$(CONFIG_MODULES) += module.o
|
|
obj-$(CONFIG_MODULE_SECTIONS) += module-sections.o
|
|
|
|
obj-$(CONFIG_CPU_PM) += suspend_entry.o suspend.o
|
|
obj-$(CONFIG_HIBERNATION) += hibernate.o hibernate-asm.o
|
|
|
|
obj-$(CONFIG_FUNCTION_TRACER) += mcount.o ftrace.o
|
|
obj-$(CONFIG_DYNAMIC_FTRACE) += mcount-dyn.o
|
|
|
|
obj-$(CONFIG_PERF_EVENTS) += perf_callchain.o
|
|
obj-$(CONFIG_HAVE_PERF_REGS) += perf_regs.o
|
|
obj-$(CONFIG_RISCV_SBI) += sbi.o sbi_ecall.o
|
|
ifeq ($(CONFIG_RISCV_SBI), y)
|
|
obj-$(CONFIG_SMP) += sbi-ipi.o
|
|
obj-$(CONFIG_SMP) += cpu_ops_sbi.o
|
|
endif
|
|
obj-$(CONFIG_HOTPLUG_CPU) += cpu-hotplug.o
|
|
obj-$(CONFIG_PARAVIRT) += paravirt.o
|
|
obj-$(CONFIG_KGDB) += kgdb.o
|
|
obj-$(CONFIG_KEXEC_CORE) += kexec_relocate.o crash_save_regs.o machine_kexec.o
|
|
obj-$(CONFIG_KEXEC_FILE) += elf_kexec.o machine_kexec_file.o
|
|
obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
|
|
obj-$(CONFIG_VMCORE_INFO) += vmcore_info.o
|
|
|
|
obj-$(CONFIG_JUMP_LABEL) += jump_label.o
|
|
|
|
obj-$(CONFIG_CFI_CLANG) += cfi.o
|
|
|
|
obj-$(CONFIG_EFI) += efi.o
|
|
obj-$(CONFIG_COMPAT) += compat_syscall_table.o
|
|
obj-$(CONFIG_COMPAT) += compat_signal.o
|
|
obj-$(CONFIG_COMPAT) += compat_vdso/
|
|
|
|
obj-$(CONFIG_64BIT) += pi/
|
|
obj-$(CONFIG_ACPI) += acpi.o
|
|
obj-$(CONFIG_ACPI_NUMA) += acpi_numa.o
|
|
|
|
obj-$(CONFIG_GENERIC_CPU_VULNERABILITIES) += bugs.o
|