Skip to contentSkip to conversation

kbuild: Fix gcc -x syntax

PATCH Superseded Jean Delvare 3 participants 5 messages Sep 28, 2012 – Sep 29, 2012

Subsystems (4)

v1 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 kbuild: Fix gcc -x syntax

The correct syntax for gcc -x is "gcc -x assembler", not "gcc -xassembler". Even though the latter happens to work, the former is what is documented in the manual page and thus what gcc wrappers such as icecream do expect.

This isn't a cosmetic change. The missing space prevents icecream from recognizing compilation tasks it can't handle, leading to silent kernel miscompilations.

Besides me, credits go to Richard Guenther and Dirk Mueller for investigating the miscompilation issue and tracking it down to this incorrect -x parameter syntax.

Cc Bernhard Walle <[email protected]>
Cc Michal Marek <[email protected]>
Cc Ralf Baechle <[email protected]>
---
 arch/mips/Makefile            |    2 +-
 arch/mips/kernel/Makefile     |    2 +-
 arch/x86/Makefile             |    2 +-
 scripts/Kbuild.include        |   12 ++++++------
 tools/power/cpupower/Makefile |    2 +-
 5 files changed, 10 insertions(+), 10 deletions(-)
arch/mips/Makefile +1 -1
@@ -225,7 +225,7 @@ KBUILD_CPPFLAGS += -DDATAOFFSET=$(if $(d
 LDFLAGS			+= -m $(ld-emul)
 
 ifdef CONFIG_MIPS
-CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -xc /dev/null | \
+CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \
 	egrep -vw '__GNUC_(|MINOR_|PATCHLEVEL_)_' | \
 	sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/")
 ifdef CONFIG_64BIT
arch/mips/kernel/Makefile +1 -1
@@ -104,7 +104,7 @@ obj-$(CONFIG_MIPS_MACHINE)	+= mips_machi
 
 obj-$(CONFIG_OF)		+= prom.o
 
-CFLAGS_cpu-bugs64.o	= $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi)
+CFLAGS_cpu-bugs64.o	= $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -x c /dev/null >/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi)
 
 obj-$(CONFIG_HAVE_STD_PC_SERIAL_PORT)	+= 8250-platform.o
 
arch/x86/Makefile +1 -1
@@ -92,7 +92,7 @@ endif
 ifdef CONFIG_X86_X32
 	x32_ld_ok := $(call try-run,\
 			/bin/echo -e '1: .quad 1b' | \
-			$(CC) $(KBUILD_AFLAGS) -c -xassembler -o "$$TMP" - && \
+			$(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" - && \
 			$(OBJCOPY) -O elf32-x86-64 "$$TMP" "$$TMPO" && \
 			$(LD) -m elf32_x86_64 "$$TMPO" -o "$$TMP",y,n)
         ifeq ($(x32_ld_ok),y)
scripts/Kbuild.include +6 -6
@@ -98,24 +98,24 @@ try-run = $(shell set -e;		\
 # Usage: cflags-y += $(call as-option,-Wa$(comma)-isa=foo,)
 
 as-option = $(call try-run,\
-	$(CC) $(KBUILD_CFLAGS) $(1) -c -xassembler /dev/null -o "$$TMP",$(1),$(2))
+	$(CC) $(KBUILD_CFLAGS) $(1) -c -x assembler /dev/null -o "$$TMP",$(1),$(2))
 
 # as-instr
 # Usage: cflags-y += $(call as-instr,instr,option1,option2)
 
 as-instr = $(call try-run,\
-	printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -xassembler -o "$$TMP" -,$(2),$(3))
+	printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3))
 
 # cc-option
 # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
 
 cc-option = $(call try-run,\
-	$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",$(1),$(2))
+	$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
 
 # cc-option-yn
 # Usage: flag := $(call cc-option-yn,-march=winchip-c6)
 cc-option-yn = $(call try-run,\
-	$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",y,n)
+	$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n)
 
 # cc-option-align
 # Prefix align with either -falign or -malign
@@ -125,7 +125,7 @@ cc-option-align = $(subst -functions=0,,
 # cc-disable-warning
 # Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable)
 cc-disable-warning = $(call try-run,\
-	$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -xc /dev/null -o "$$TMP",-Wno-$(strip $(1)))
+	$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
 
 # cc-version
 # Usage gcc-ver := $(call cc-version)
@@ -143,7 +143,7 @@ cc-ifversion = $(shell [ $(call cc-versi
 # cc-ldoption
 # Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both)
 cc-ldoption = $(call try-run,\
-	$(CC) $(1) -nostdlib -xc /dev/null -o "$$TMP",$(1),$(2))
+	$(CC) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2))
 
 # ld-option
 # Usage: LDFLAGS += $(call ld-option, -X)
tools/power/cpupower/Makefile +1 -1
@@ -111,7 +111,7 @@ GMO_FILES = ${shell for HLANG in ${LANGU
 export CROSS CC AR STRIP RANLIB CFLAGS LDFLAGS LIB_OBJS
 
 # check if compiler option is supported
-cc-supports = ${shell if $(CC) ${1} -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; fi;}
+cc-supports = ${shell if $(CC) ${1} -S -o /dev/null -x c /dev/null > /dev/null 2>&1; then echo "$(1)"; fi;}
 
 # use '-Os' optimization if available, else use -O2
 OPTIMIZATION := $(call cc-supports,-Os,-O2)
Signature · 2 lines
Jean Delvare
Suse L3
#1 lore raw
Quoted 8 lines · Jean Delvare

The correct syntax for gcc -x is "gcc -x assembler", not "gcc -xassembler". Even though the latter happens to work, the former is what is documented in the manual page and thus what gcc wrappers such as icecream do expect.

This isn't a cosmetic change. The missing space prevents icecream from recognizing compilation tasks it can't handle, leading to silent kernel miscompilations.

Although we can apply this patch, it won't solve the problem of building older kernels (and bisecting, etc.).

Wouldn't it be prudent to increase the compatibility of icecream, so that it accepts what GCC accepts in practice, such as -xassembler?

Thanks,

Ingo

#2 lore raw

Hi,

Quoted 11 lines · Ingo Molnar
Quoted 8 lines · Jean Delvare

The correct syntax for gcc -x is "gcc -x assembler", not "gcc -xassembler". Even though the latter happens to work, the former is what is documented in the manual page and thus what gcc wrappers such as icecream do expect.

This isn't a cosmetic change. The missing space prevents icecream from recognizing compilation tasks it can't handle, leading to silent kernel miscompilations.

Quoted 6 lines

Although we can apply this patch, it won't solve the problem of building older kernels (and bisecting, etc.).

Wouldn't it be prudent to increase the compatibility of icecream, so that it accepts what GCC accepts in practice, such as -xassembler?

Wouldn't it make sense to do both? Using the documented syntax in the build system *and* increase compatibility in 3rd party tools?

Regards,
Bernhard

#3 lore raw
Quoted 17 lines · Bernhard Walle

Hi,

Quoted 14 lines · Ingo Molnar
Quoted 8 lines · Jean Delvare

The correct syntax for gcc -x is "gcc -x assembler", not "gcc -xassembler". Even though the latter happens to work, the former is what is documented in the manual page and thus what gcc wrappers such as icecream do expect.

This isn't a cosmetic change. The missing space prevents icecream from recognizing compilation tasks it can't handle, leading to silent kernel miscompilations.

Although we can apply this patch, it won't solve the problem of building older kernels (and bisecting, etc.).

Quoted 7 lines
Quoted 3 lines

Wouldn't it be prudent to increase the compatibility of icecream, so that it accepts what GCC accepts in practice, such as -xassembler?

Wouldn't it make sense to do both? Using the documented syntax in the build system *and* increase compatibility in 3rd party tools?

Yes.

Thanks,

Ingo

#4 lore raw
In reply to Bernhard Walle

Hi Ingo, hi Bernhard,

Quoted 8 lines · Bernhard Walle
Quoted 7 lines · Ingo Molnar
Quoted 5 lines · Jean Delvare

The correct syntax for gcc -x is "gcc -x assembler", not "gcc -xassembler". Even though the latter happens to work, the former is what is documented in the manual page and thus what gcc wrappers such as icecream do expect.

Quoted 6 lines
Quoted 6 lines
Quoted 3 lines

This isn't a cosmetic change. The missing space prevents icecream from recognizing compilation tasks it can't handle, leading to silent kernel miscompilations.

Although we can apply this patch, it won't solve the problem of building older kernels (and bisecting, etc.).

WRT older kernels, I recommend that we apply the fix to all stable and longterm kernel branches.

Quoted 6 lines
Quoted 3 lines

Wouldn't it be prudent to increase the compatibility of icecream, so that it accepts what GCC accepts in practice, such as -xassembler?

Wouldn't it make sense to do both? Using the documented syntax in the build system *and* increase compatibility in 3rd party tools?

Yes of course, this is exactly the plan. Silent micompilations are very painful so we want to fix the problem on every side we can.

Thanks,

Signature · 2 lines
Jean Delvare
Suse L3