Re: fms extension (Was: [PATCH] fs/pipe: stop duplicating union pipe_index declaration)

Nathan Chancellor
2025-10-31T01:35:02Z

On Thu, Oct 30, 2025 at 09:16:02PM +0100, Christian Brauner wrote:
> On Thu, Oct 30, 2025 at 10:29:18AM -0700, Nathan Chancellor wrote:
> > There are several other places in the kernel that blow away
> > KBUILD_CFLAGS like this that will need the same fix (I went off of
> > searching for -std=gnu11, as that was needed in many places to fix GCC
> > 15). It is possible that we might want to take the opportunity to unify
> > these flags into something like KBUILD_DIALECT_CFLAGS but for now, I
> > just bothered with adding the flags in the existing places.
>
> That should hopefully do it. Can you update the shared branch with that
> and then tell me when I can repull?

I have applied this as commit e066b73bd881 ("kbuild: Add
'-fms-extensions' to areas with dedicated CFLAGS") in the
kbuild-ms-extensions branch. I may solicit acks from architecture
maintainers but I would like to make sure there are no other surprises
before then.

> > diff --git a/arch/arm64/kernel/vdso32/Makefile b/arch/arm64/kernel/vdso32/Makefile
> > index ffa3536581f6..9d0efed91414 100644
> > --- a/arch/arm64/kernel/vdso32/Makefile
> > +++ b/arch/arm64/kernel/vdso32/Makefile
> > @@ -63,7 +63,7 @@ VDSO_CFLAGS += -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
> > $(filter -Werror,$(KBUILD_CPPFLAGS)) \
> > -Werror-implicit-function-declaration \
> > -Wno-format-security \
> > - -std=gnu11
> > + -std=gnu11 -fms-extensions
> > VDSO_CFLAGS += -O2
> > # Some useful compiler-dependent flags from top-level Makefile
> > VDSO_CFLAGS += $(call cc32-option,-Wno-pointer-sign)
> > @@ -71,6 +71,7 @@ VDSO_CFLAGS += -fno-strict-overflow
> > VDSO_CFLAGS += $(call cc32-option,-Werror=strict-prototypes)
> > VDSO_CFLAGS += -Werror=date-time
> > 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
> > # unreliable.
> > diff --git a/arch/loongarch/vdso/Makefile b/arch/loongarch/vdso/Makefile
> > index d8316f993482..c0cc3ca5da9f 100644
> > --- a/arch/loongarch/vdso/Makefile
> > +++ b/arch/loongarch/vdso/Makefile
> > @@ -19,7 +19,7 @@ ccflags-vdso := \
> > cflags-vdso := $(ccflags-vdso) \
> > -isystem $(shell $(CC) -print-file-name=include) \
> > $(filter -W%,$(filter-out -Wa$(comma)%,$(KBUILD_CFLAGS))) \
> > - -std=gnu11 -O2 -g -fno-strict-aliasing -fno-common -fno-builtin \
> > + -std=gnu11 -fms-extensions -O2 -g -fno-strict-aliasing -fno-common -fno-builtin \
> > -fno-stack-protector -fno-jump-tables -DDISABLE_BRANCH_PROFILING \
> > $(call cc-option, -fno-asynchronous-unwind-tables) \
> > $(call cc-option, -fno-stack-protector)
> > diff --git a/arch/parisc/boot/compressed/Makefile b/arch/parisc/boot/compressed/Makefile
> > index 17c42d718eb3..f8481e4e9d21 100644
> > --- a/arch/parisc/boot/compressed/Makefile
> > +++ b/arch/parisc/boot/compressed/Makefile
> > @@ -18,7 +18,7 @@ KBUILD_CFLAGS += -fno-PIE -mno-space-regs -mdisable-fpregs -Os
> > ifndef CONFIG_64BIT
> > KBUILD_CFLAGS += -mfast-indirect-calls
> > endif
> > -KBUILD_CFLAGS += -std=gnu11
> > +KBUILD_CFLAGS += -std=gnu11 -fms-extensions
> >
> > LDFLAGS_vmlinux := -X -e startup --as-needed -T
> > $(obj)/vmlinux: $(obj)/vmlinux.lds $(addprefix $(obj)/, $(OBJECTS)) $(LIBGCC) FORCE
> > diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
> > index c47b78c1d3e7..f1a4761ebd44 100644
> > --- a/arch/powerpc/boot/Makefile
> > +++ b/arch/powerpc/boot/Makefile
> > @@ -70,7 +70,7 @@ BOOTCPPFLAGS := -nostdinc $(LINUXINCLUDE)
> > BOOTCPPFLAGS += -isystem $(shell $(BOOTCC) -print-file-name=include)
> >
> > BOOTCFLAGS := $(BOOTTARGETFLAGS) \
> > - -std=gnu11 \
> > + -std=gnu11 -fms-extensions \
> > -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
> > -fno-strict-aliasing -O2 \
> > -msoft-float -mno-altivec -mno-vsx \
> > @@ -86,6 +86,7 @@ BOOTARFLAGS := -crD
> >
> > ifdef CONFIG_CC_IS_CLANG
> > BOOTCFLAGS += $(CLANG_FLAGS)
> > +BOOTCFLAGS += -Wno-microsoft-anon-tag
> > BOOTAFLAGS += $(CLANG_FLAGS)
> > endif
> >
> > diff --git a/arch/s390/Makefile b/arch/s390/Makefile
> > index b4769241332b..8578361133a4 100644
> > --- a/arch/s390/Makefile
> > +++ b/arch/s390/Makefile
> > @@ -22,7 +22,7 @@ KBUILD_AFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -D__ASSEMBLY__
> > ifndef CONFIG_AS_IS_LLVM
> > KBUILD_AFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),$(aflags_dwarf))
> > endif
> > -KBUILD_CFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -O2 -mpacked-stack -std=gnu11
> > +KBUILD_CFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -O2 -mpacked-stack -std=gnu11 -fms-extensions
> > KBUILD_CFLAGS_DECOMPRESSOR += -DDISABLE_BRANCH_PROFILING -D__NO_FORTIFY
> > KBUILD_CFLAGS_DECOMPRESSOR += -D__DECOMPRESSOR
> > KBUILD_CFLAGS_DECOMPRESSOR += -Wno-pointer-sign
> > @@ -35,6 +35,7 @@ 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_DWARF4), $(call cc-option, -gdwarf-4,))
> > 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
> > STACK_SIZE := $(if $(CONFIG_KASAN),65536,$(if $(CONFIG_KMSAN),65536,16384))
> > diff --git a/arch/s390/purgatory/Makefile b/arch/s390/purgatory/Makefile
> > index bd39b36e7bd6..0c196a5b194a 100644
> > --- a/arch/s390/purgatory/Makefile
> > +++ b/arch/s390/purgatory/Makefile
> > @@ -13,7 +13,7 @@ CFLAGS_sha256.o := -D__NO_FORTIFY
> > $(obj)/mem.o: $(srctree)/arch/s390/lib/mem.S FORCE
> > $(call if_changed_rule,as_o_S)
> >
> > -KBUILD_CFLAGS := -std=gnu11 -fno-strict-aliasing -Wall -Wstrict-prototypes
> > +KBUILD_CFLAGS := -std=gnu11 -fms-extensions -fno-strict-aliasing -Wall -Wstrict-prototypes
> > KBUILD_CFLAGS += -Wno-pointer-sign -Wno-sign-compare
> > KBUILD_CFLAGS += -fno-zero-initialized-in-bss -fno-builtin -ffreestanding
> > KBUILD_CFLAGS += -Os -m64 -msoft-float -fno-common
> > @@ -21,6 +21,7 @@ KBUILD_CFLAGS += -fno-stack-protector
> > KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
> > KBUILD_CFLAGS += -D__DISABLE_EXPORTS
> > KBUILD_CFLAGS += $(CLANG_FLAGS)
> > +KBUILD_CFLAGS += $(if $(CONFIG_CC_IS_CLANG),-Wno-microsoft-anon-tag)
> > KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
> > KBUILD_AFLAGS := $(filter-out -DCC_USING_EXPOLINE,$(KBUILD_AFLAGS))
> > KBUILD_AFLAGS += -D__DISABLE_EXPORTS
> > diff --git a/arch/x86/Makefile b/arch/x86/Makefile
> > index 4db7e4bf69f5..e20e25b8b16c 100644
> > --- a/arch/x86/Makefile
> > +++ b/arch/x86/Makefile
> > @@ -48,7 +48,8 @@ endif
> >
> > # 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.
> > -REALMODE_CFLAGS := -std=gnu11 -m16 -g -Os -DDISABLE_BRANCH_PROFILING -D__DISABLE_EXPORTS \
> > +REALMODE_CFLAGS := -std=gnu11 -fms-extensions -m16 -g -Os \
> > + -DDISABLE_BRANCH_PROFILING -D__DISABLE_EXPORTS \
> > -Wall -Wstrict-prototypes -march=i386 -mregparm=3 \
> > -fno-strict-aliasing -fomit-frame-pointer -fno-pic \
> > -mno-mmx -mno-sse $(call cc-option,-fcf-protection=none)
> > @@ -60,6 +61,7 @@ REALMODE_CFLAGS += $(cc_stack_align4)
> > REALMODE_CFLAGS += $(CLANG_FLAGS)
> > ifdef CONFIG_CC_IS_CLANG
> > REALMODE_CFLAGS += -Wno-gnu
> > +REALMODE_CFLAGS += -Wno-microsoft-anon-tag
> > endif
> > export REALMODE_CFLAGS
> >
> > diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
> > index 74657589264d..68f9d7a1683b 100644
> > --- a/arch/x86/boot/compressed/Makefile
> > +++ b/arch/x86/boot/compressed/Makefile
> > @@ -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
> > # be valid.
> > KBUILD_CFLAGS := -m$(BITS) -O2 $(CLANG_FLAGS)
> > -KBUILD_CFLAGS += -std=gnu11
> > +KBUILD_CFLAGS += -std=gnu11 -fms-extensions
> > KBUILD_CFLAGS += -fno-strict-aliasing -fPIE
> > KBUILD_CFLAGS += -Wundef
> > KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
> > @@ -36,7 +36,10 @@ KBUILD_CFLAGS += -mno-mmx -mno-sse
> > KBUILD_CFLAGS += -ffreestanding -fshort-wchar
> > KBUILD_CFLAGS += -fno-stack-protector
> > KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
> > -KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
> > +ifdef CONFIG_CC_IS_CLANG
> > +KBUILD_CFLAGS += -Wno-gnu
> > +KBUILD_CFLAGS += -Wno-microsoft-anon-tag
> > +endif
> > KBUILD_CFLAGS += -Wno-pointer-sign
> > KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
> > KBUILD_CFLAGS += -D__DISABLE_EXPORTS
> > diff --git a/drivers/firmware/efi/libstub/Makefile b/drivers/firmware/efi/libstub/Makefile
> > index 94b05e4451dd..7d15a85d579f 100644
> > --- a/drivers/firmware/efi/libstub/Makefile
> > +++ b/drivers/firmware/efi/libstub/Makefile
> > @@ -11,12 +11,12 @@ cflags-y := $(KBUILD_CFLAGS)
> >
> > cflags-$(CONFIG_X86_32) := -march=i386
> > cflags-$(CONFIG_X86_64) := -mcmodel=small
> > -cflags-$(CONFIG_X86) += -m$(BITS) -D__KERNEL__ -std=gnu11 \
> > +cflags-$(CONFIG_X86) += -m$(BITS) -D__KERNEL__ -std=gnu11 -fms-extensions \
> > -fPIC -fno-strict-aliasing -mno-red-zone \
> > -mno-mmx -mno-sse -fshort-wchar \
> > -Wno-pointer-sign \
> > $(call cc-disable-warning, address-of-packed-member) \
> > - $(call cc-disable-warning, gnu) \
> > + $(if $(CONFIG_CC_IS_CLANG),-Wno-gnu -Wno-microsoft-anon-tag) \
> > -fno-asynchronous-unwind-tables \
> > $(CLANG_FLAGS)
> >