kbuild: Consolidate C dialect options
Introduce CC_FLAGS_DIALECT to make it easier to update the various places in the tree that rely on the GNU C standard and Microsoft extensions flags atomically. All remaining uses of '-std=gnu11' and '-fms-extensions' are in the tools directory (which has its own build system) and other standalone Makefiles. This will allow the kernel to use a narrower option to enable the Microsoft anonymous tagged structure extension in a simpler manner. Place the CC_FLAGS_DIALECT block after the configuration include (so that a future change can move the selection of the flag to Kconfig) but before the arch/$(SRCARCH)/Makefile include (so that CC_FLAGS_DIALECT is available for use in those Makefiles). Signed-off-by: Nathan Chancellor <nathan@kernel.org> Reviewed-by: Nicolas Schier <nsc@kernel.org> Acked-by: Ard Biesheuvel <ardb@kernel.org> Acked-by: Helge Deller <deller@gmx.de> # parisc Link: https://patch.msgid.link/20260223-fms-anonymous-structs-v1-1-8ee406d3c36c@kernel.org Signed-off-by: Nicolas Schier <nsc@kernel.org>master
parent
febb5c81fa
commit
ec4c28276c
16
Makefile
16
Makefile
|
|
@ -587,7 +587,6 @@ LINUXINCLUDE := \
|
||||||
KBUILD_AFLAGS := -D__ASSEMBLY__ -fno-PIE
|
KBUILD_AFLAGS := -D__ASSEMBLY__ -fno-PIE
|
||||||
|
|
||||||
KBUILD_CFLAGS :=
|
KBUILD_CFLAGS :=
|
||||||
KBUILD_CFLAGS += -std=gnu11
|
|
||||||
KBUILD_CFLAGS += -fshort-wchar
|
KBUILD_CFLAGS += -fshort-wchar
|
||||||
KBUILD_CFLAGS += -funsigned-char
|
KBUILD_CFLAGS += -funsigned-char
|
||||||
KBUILD_CFLAGS += -fno-common
|
KBUILD_CFLAGS += -fno-common
|
||||||
|
|
@ -790,6 +789,18 @@ ifdef need-config
|
||||||
include $(objtree)/include/config/auto.conf
|
include $(objtree)/include/config/auto.conf
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
CC_FLAGS_DIALECT := -std=gnu11
|
||||||
|
# Allow including a tagged struct or union anonymously in another struct/union.
|
||||||
|
CC_FLAGS_DIALECT += -fms-extensions
|
||||||
|
# Clang enables warnings about GNU and Microsoft extensions by default, disable
|
||||||
|
# them because this is expected with the above options.
|
||||||
|
ifdef CONFIG_CC_IS_CLANG
|
||||||
|
CC_FLAGS_DIALECT += -Wno-gnu
|
||||||
|
CC_FLAGS_DIALECT += -Wno-microsoft-anon-tag
|
||||||
|
endif
|
||||||
|
export CC_FLAGS_DIALECT
|
||||||
|
KBUILD_CFLAGS += $(CC_FLAGS_DIALECT)
|
||||||
|
|
||||||
ifeq ($(KBUILD_EXTMOD),)
|
ifeq ($(KBUILD_EXTMOD),)
|
||||||
# Objects we will link into vmlinux / subdirs we need to visit
|
# Objects we will link into vmlinux / subdirs we need to visit
|
||||||
core-y :=
|
core-y :=
|
||||||
|
|
@ -1093,9 +1104,6 @@ NOSTDINC_FLAGS += -nostdinc
|
||||||
# perform bounds checking.
|
# perform bounds checking.
|
||||||
KBUILD_CFLAGS += $(call cc-option, -fstrict-flex-arrays=3)
|
KBUILD_CFLAGS += $(call cc-option, -fstrict-flex-arrays=3)
|
||||||
|
|
||||||
# Allow including a tagged struct or union anonymously in another struct/union.
|
|
||||||
KBUILD_CFLAGS += -fms-extensions
|
|
||||||
|
|
||||||
# disable invalid "can't wrap" optimizations for signed / pointers
|
# disable invalid "can't wrap" optimizations for signed / pointers
|
||||||
KBUILD_CFLAGS += -fno-strict-overflow
|
KBUILD_CFLAGS += -fno-strict-overflow
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ VDSO_CFLAGS += -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
||||||
$(filter -Werror,$(KBUILD_CPPFLAGS)) \
|
$(filter -Werror,$(KBUILD_CPPFLAGS)) \
|
||||||
-Werror-implicit-function-declaration \
|
-Werror-implicit-function-declaration \
|
||||||
-Wno-format-security \
|
-Wno-format-security \
|
||||||
-std=gnu11 -fms-extensions
|
$(CC_FLAGS_DIALECT)
|
||||||
VDSO_CFLAGS += -O2
|
VDSO_CFLAGS += -O2
|
||||||
# Some useful compiler-dependent flags from top-level Makefile
|
# Some useful compiler-dependent flags from top-level Makefile
|
||||||
VDSO_CFLAGS += $(call cc32-option,-Wno-pointer-sign)
|
VDSO_CFLAGS += $(call cc32-option,-Wno-pointer-sign)
|
||||||
|
|
@ -71,7 +71,6 @@ VDSO_CFLAGS += -fno-strict-overflow
|
||||||
VDSO_CFLAGS += $(call cc32-option,-Werror=strict-prototypes)
|
VDSO_CFLAGS += $(call cc32-option,-Werror=strict-prototypes)
|
||||||
VDSO_CFLAGS += -Werror=date-time
|
VDSO_CFLAGS += -Werror=date-time
|
||||||
VDSO_CFLAGS += $(call cc32-option,-Werror=incompatible-pointer-types)
|
VDSO_CFLAGS += $(call cc32-option,-Werror=incompatible-pointer-types)
|
||||||
VDSO_CFLAGS += $(if $(CONFIG_CC_IS_CLANG),-Wno-microsoft-anon-tag)
|
|
||||||
|
|
||||||
# Compile as THUMB2 or ARM. Unwinding via frame-pointers in THUMB2 is
|
# Compile as THUMB2 or ARM. Unwinding via frame-pointers in THUMB2 is
|
||||||
# unreliable.
|
# unreliable.
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ endif
|
||||||
cflags-vdso := $(ccflags-vdso) \
|
cflags-vdso := $(ccflags-vdso) \
|
||||||
-isystem $(shell $(CC) -print-file-name=include) \
|
-isystem $(shell $(CC) -print-file-name=include) \
|
||||||
$(filter -W%,$(filter-out -Wa$(comma)%,$(KBUILD_CFLAGS))) \
|
$(filter -W%,$(filter-out -Wa$(comma)%,$(KBUILD_CFLAGS))) \
|
||||||
-std=gnu11 -fms-extensions -O2 -g -fno-strict-aliasing -fno-common -fno-builtin \
|
$(CC_FLAGS_DIALECT) -O2 -g -fno-strict-aliasing -fno-common -fno-builtin \
|
||||||
-fno-stack-protector -fno-jump-tables -DDISABLE_BRANCH_PROFILING \
|
-fno-stack-protector -fno-jump-tables -DDISABLE_BRANCH_PROFILING \
|
||||||
$(call cc-option, -fno-asynchronous-unwind-tables) \
|
$(call cc-option, -fno-asynchronous-unwind-tables) \
|
||||||
$(call cc-option, -fno-stack-protector)
|
$(call cc-option, -fno-stack-protector)
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ KBUILD_CFLAGS += -fno-PIE -mno-space-regs -mdisable-fpregs -Os
|
||||||
ifndef CONFIG_64BIT
|
ifndef CONFIG_64BIT
|
||||||
KBUILD_CFLAGS += -mfast-indirect-calls
|
KBUILD_CFLAGS += -mfast-indirect-calls
|
||||||
endif
|
endif
|
||||||
KBUILD_CFLAGS += -std=gnu11 -fms-extensions
|
KBUILD_CFLAGS += $(CC_FLAGS_DIALECT)
|
||||||
|
|
||||||
LDFLAGS_vmlinux := -X -e startup --as-needed -T
|
LDFLAGS_vmlinux := -X -e startup --as-needed -T
|
||||||
$(obj)/vmlinux: $(obj)/vmlinux.lds $(addprefix $(obj)/, $(OBJECTS)) $(LIBGCC) FORCE
|
$(obj)/vmlinux: $(obj)/vmlinux.lds $(addprefix $(obj)/, $(OBJECTS)) $(LIBGCC) FORCE
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ BOOTCPPFLAGS := -nostdinc $(LINUXINCLUDE)
|
||||||
BOOTCPPFLAGS += -isystem $(shell $(BOOTCC) -print-file-name=include)
|
BOOTCPPFLAGS += -isystem $(shell $(BOOTCC) -print-file-name=include)
|
||||||
|
|
||||||
BOOTCFLAGS := $(BOOTTARGETFLAGS) \
|
BOOTCFLAGS := $(BOOTTARGETFLAGS) \
|
||||||
-std=gnu11 -fms-extensions \
|
$(CC_FLAGS_DIALECT) \
|
||||||
-Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
-Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
||||||
-fno-strict-aliasing -O2 \
|
-fno-strict-aliasing -O2 \
|
||||||
-msoft-float -mno-altivec -mno-vsx \
|
-msoft-float -mno-altivec -mno-vsx \
|
||||||
|
|
@ -86,7 +86,6 @@ BOOTARFLAGS := -crD
|
||||||
|
|
||||||
ifdef CONFIG_CC_IS_CLANG
|
ifdef CONFIG_CC_IS_CLANG
|
||||||
BOOTCFLAGS += $(CLANG_FLAGS)
|
BOOTCFLAGS += $(CLANG_FLAGS)
|
||||||
BOOTCFLAGS += -Wno-microsoft-anon-tag
|
|
||||||
BOOTAFLAGS += $(CLANG_FLAGS)
|
BOOTAFLAGS += $(CLANG_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ KBUILD_AFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -D__ASSEMBLY__
|
||||||
ifndef CONFIG_AS_IS_LLVM
|
ifndef CONFIG_AS_IS_LLVM
|
||||||
KBUILD_AFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),$(aflags_dwarf))
|
KBUILD_AFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),$(aflags_dwarf))
|
||||||
endif
|
endif
|
||||||
KBUILD_CFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -O2 -mpacked-stack -std=gnu11 -fms-extensions
|
KBUILD_CFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -O2 -mpacked-stack $(CC_FLAGS_DIALECT)
|
||||||
KBUILD_CFLAGS_DECOMPRESSOR += -DDISABLE_BRANCH_PROFILING -D__NO_FORTIFY
|
KBUILD_CFLAGS_DECOMPRESSOR += -DDISABLE_BRANCH_PROFILING -D__NO_FORTIFY
|
||||||
KBUILD_CFLAGS_DECOMPRESSOR += -D__DECOMPRESSOR
|
KBUILD_CFLAGS_DECOMPRESSOR += -D__DECOMPRESSOR
|
||||||
KBUILD_CFLAGS_DECOMPRESSOR += -Wno-pointer-sign
|
KBUILD_CFLAGS_DECOMPRESSOR += -Wno-pointer-sign
|
||||||
|
|
@ -35,7 +35,6 @@ KBUILD_CFLAGS_DECOMPRESSOR += $(call cc-disable-warning, address-of-packed-membe
|
||||||
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
|
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
|
||||||
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
|
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
|
||||||
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_CC_NO_ARRAY_BOUNDS),-Wno-array-bounds)
|
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_CC_NO_ARRAY_BOUNDS),-Wno-array-bounds)
|
||||||
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_CC_IS_CLANG),-Wno-microsoft-anon-tag)
|
|
||||||
|
|
||||||
UTS_MACHINE := s390x
|
UTS_MACHINE := s390x
|
||||||
STACK_SIZE := $(if $(CONFIG_KASAN),65536,$(if $(CONFIG_KMSAN),65536,16384))
|
STACK_SIZE := $(if $(CONFIG_KASAN),65536,$(if $(CONFIG_KMSAN),65536,16384))
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ CFLAGS_sha256.o := -D__NO_FORTIFY
|
||||||
$(obj)/mem.o: $(srctree)/arch/s390/lib/mem.S FORCE
|
$(obj)/mem.o: $(srctree)/arch/s390/lib/mem.S FORCE
|
||||||
$(call if_changed_rule,as_o_S)
|
$(call if_changed_rule,as_o_S)
|
||||||
|
|
||||||
KBUILD_CFLAGS := -std=gnu11 -fms-extensions -fno-strict-aliasing -Wall -Wstrict-prototypes
|
KBUILD_CFLAGS := $(CC_FLAGS_DIALECT) -fno-strict-aliasing -Wall -Wstrict-prototypes
|
||||||
KBUILD_CFLAGS += -Wno-pointer-sign -Wno-sign-compare
|
KBUILD_CFLAGS += -Wno-pointer-sign -Wno-sign-compare
|
||||||
KBUILD_CFLAGS += -fno-zero-initialized-in-bss -fno-builtin -ffreestanding
|
KBUILD_CFLAGS += -fno-zero-initialized-in-bss -fno-builtin -ffreestanding
|
||||||
KBUILD_CFLAGS += -Os -m64 -msoft-float -fno-common
|
KBUILD_CFLAGS += -Os -m64 -msoft-float -fno-common
|
||||||
|
|
@ -21,7 +21,6 @@ KBUILD_CFLAGS += -fno-stack-protector
|
||||||
KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
|
KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
|
||||||
KBUILD_CFLAGS += -D__DISABLE_EXPORTS
|
KBUILD_CFLAGS += -D__DISABLE_EXPORTS
|
||||||
KBUILD_CFLAGS += $(CLANG_FLAGS)
|
KBUILD_CFLAGS += $(CLANG_FLAGS)
|
||||||
KBUILD_CFLAGS += $(if $(CONFIG_CC_IS_CLANG),-Wno-microsoft-anon-tag)
|
|
||||||
KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
|
KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
|
||||||
KBUILD_CFLAGS += $(call cc-option, -Wno-default-const-init-unsafe)
|
KBUILD_CFLAGS += $(call cc-option, -Wno-default-const-init-unsafe)
|
||||||
KBUILD_AFLAGS := $(filter-out -DCC_USING_EXPOLINE,$(KBUILD_AFLAGS))
|
KBUILD_AFLAGS := $(filter-out -DCC_USING_EXPOLINE,$(KBUILD_AFLAGS))
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ endif
|
||||||
|
|
||||||
# How to compile the 16-bit code. Note we always compile for -march=i386;
|
# How to compile the 16-bit code. Note we always compile for -march=i386;
|
||||||
# that way we can complain to the user if the CPU is insufficient.
|
# that way we can complain to the user if the CPU is insufficient.
|
||||||
REALMODE_CFLAGS := -std=gnu11 -fms-extensions -m16 -g -Os \
|
REALMODE_CFLAGS := $(CC_FLAGS_DIALECT) -m16 -g -Os \
|
||||||
-DDISABLE_BRANCH_PROFILING -D__DISABLE_EXPORTS \
|
-DDISABLE_BRANCH_PROFILING -D__DISABLE_EXPORTS \
|
||||||
-Wall -Wstrict-prototypes -march=i386 -mregparm=3 \
|
-Wall -Wstrict-prototypes -march=i386 -mregparm=3 \
|
||||||
-fno-strict-aliasing -fomit-frame-pointer -fno-pic \
|
-fno-strict-aliasing -fomit-frame-pointer -fno-pic \
|
||||||
|
|
@ -59,10 +59,6 @@ REALMODE_CFLAGS += -fno-stack-protector
|
||||||
REALMODE_CFLAGS += -Wno-address-of-packed-member
|
REALMODE_CFLAGS += -Wno-address-of-packed-member
|
||||||
REALMODE_CFLAGS += $(cc_stack_align4)
|
REALMODE_CFLAGS += $(cc_stack_align4)
|
||||||
REALMODE_CFLAGS += $(CLANG_FLAGS)
|
REALMODE_CFLAGS += $(CLANG_FLAGS)
|
||||||
ifdef CONFIG_CC_IS_CLANG
|
|
||||||
REALMODE_CFLAGS += -Wno-gnu
|
|
||||||
REALMODE_CFLAGS += -Wno-microsoft-anon-tag
|
|
||||||
endif
|
|
||||||
export REALMODE_CFLAGS
|
export REALMODE_CFLAGS
|
||||||
|
|
||||||
# BITS is used as extension for files which are available in a 32 bit
|
# BITS is used as extension for files which are available in a 32 bit
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ targets := vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma \
|
||||||
# avoid errors with '-march=i386', and future flags may depend on the target to
|
# avoid errors with '-march=i386', and future flags may depend on the target to
|
||||||
# be valid.
|
# be valid.
|
||||||
KBUILD_CFLAGS := -m$(BITS) -O2 $(CLANG_FLAGS)
|
KBUILD_CFLAGS := -m$(BITS) -O2 $(CLANG_FLAGS)
|
||||||
KBUILD_CFLAGS += -std=gnu11 -fms-extensions
|
KBUILD_CFLAGS += $(CC_FLAGS_DIALECT)
|
||||||
KBUILD_CFLAGS += -fno-strict-aliasing -fPIE
|
KBUILD_CFLAGS += -fno-strict-aliasing -fPIE
|
||||||
KBUILD_CFLAGS += -Wundef
|
KBUILD_CFLAGS += -Wundef
|
||||||
KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
|
KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
|
||||||
|
|
@ -36,10 +36,6 @@ KBUILD_CFLAGS += -mno-mmx -mno-sse
|
||||||
KBUILD_CFLAGS += -ffreestanding -fshort-wchar
|
KBUILD_CFLAGS += -ffreestanding -fshort-wchar
|
||||||
KBUILD_CFLAGS += -fno-stack-protector
|
KBUILD_CFLAGS += -fno-stack-protector
|
||||||
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
||||||
ifdef CONFIG_CC_IS_CLANG
|
|
||||||
KBUILD_CFLAGS += -Wno-gnu
|
|
||||||
KBUILD_CFLAGS += -Wno-microsoft-anon-tag
|
|
||||||
endif
|
|
||||||
KBUILD_CFLAGS += -Wno-pointer-sign
|
KBUILD_CFLAGS += -Wno-pointer-sign
|
||||||
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
|
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
|
||||||
KBUILD_CFLAGS += -D__DISABLE_EXPORTS
|
KBUILD_CFLAGS += -D__DISABLE_EXPORTS
|
||||||
|
|
|
||||||
|
|
@ -11,12 +11,11 @@ cflags-y := $(KBUILD_CFLAGS)
|
||||||
|
|
||||||
cflags-$(CONFIG_X86_32) := -march=i386
|
cflags-$(CONFIG_X86_32) := -march=i386
|
||||||
cflags-$(CONFIG_X86_64) := -mcmodel=small
|
cflags-$(CONFIG_X86_64) := -mcmodel=small
|
||||||
cflags-$(CONFIG_X86) += -m$(BITS) -D__KERNEL__ -std=gnu11 -fms-extensions \
|
cflags-$(CONFIG_X86) += -m$(BITS) -D__KERNEL__ $(CC_FLAGS_DIALECT) \
|
||||||
-fPIC -fno-strict-aliasing -mno-red-zone \
|
-fPIC -fno-strict-aliasing -mno-red-zone \
|
||||||
-mno-mmx -mno-sse -fshort-wchar \
|
-mno-mmx -mno-sse -fshort-wchar \
|
||||||
-Wno-pointer-sign \
|
-Wno-pointer-sign \
|
||||||
$(call cc-disable-warning, address-of-packed-member) \
|
$(call cc-disable-warning, address-of-packed-member) \
|
||||||
$(if $(CONFIG_CC_IS_CLANG),-Wno-gnu -Wno-microsoft-anon-tag) \
|
|
||||||
-fno-asynchronous-unwind-tables \
|
-fno-asynchronous-unwind-tables \
|
||||||
$(CLANG_FLAGS)
|
$(CLANG_FLAGS)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,11 +28,6 @@ endif
|
||||||
KBUILD_CFLAGS-$(CONFIG_CC_NO_ARRAY_BOUNDS) += -Wno-array-bounds
|
KBUILD_CFLAGS-$(CONFIG_CC_NO_ARRAY_BOUNDS) += -Wno-array-bounds
|
||||||
|
|
||||||
ifdef CONFIG_CC_IS_CLANG
|
ifdef CONFIG_CC_IS_CLANG
|
||||||
# The kernel builds with '-std=gnu11' and '-fms-extensions' so use of GNU and
|
|
||||||
# Microsoft extensions is acceptable.
|
|
||||||
KBUILD_CFLAGS += -Wno-gnu
|
|
||||||
KBUILD_CFLAGS += -Wno-microsoft-anon-tag
|
|
||||||
|
|
||||||
# Clang checks for overflow/truncation with '%p', while GCC does not:
|
# Clang checks for overflow/truncation with '%p', while GCC does not:
|
||||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111219
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111219
|
||||||
KBUILD_CFLAGS += $(call cc-option, -Wno-format-overflow-non-kprintf)
|
KBUILD_CFLAGS += $(call cc-option, -Wno-format-overflow-non-kprintf)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue