Re: 2.6.18-rc4 warning on arch/x86_64/boot/compressed/head.o

From: Jan Engelhardt
Date: Thu Aug 10 2006 - 03:21:49 EST

>> >> Compiling 2.6.18-rc4 on x86_64 gets this warning.
>> >>
>> >> gcc -Wp,-MD,arch/x86_64/boot/compressed/.head.o.d -nostdinc -isystem /usr/lib64/gcc/x86_64-suse-linux/4.1.0/include -D__KERNEL__ -Iinclude -Iinclude2 -I$KBUILD_OUTPUT/linux/include -include include/linux/autoconf.h -D__ASSEMBLY__ -m64 -traditional -m32 -c -o arch/x86_64/boot/compressed/head.o $KBUILD_OUTPUT/linux/arch/x86_64/boot/compressed/head.S
>> >> ld -m elf_i386 -Ttext 0x100000 -e startup_32 -m elf_i386 arch/x86_64/boot/compressed/head.o arch/x86_64/boot/compressed/misc.o arch/x86_64/boot/compressed/piggy.o -o arch/x86_64/boot/compressed/vmlinux
>> >> ld: warning: i386:x86-64 architecture of input file `arch/x86_64/boot/compressed/head.o' is incompatible with i386 output
>> >
>> >It always gave that since some binutils update long ago.
>> >If you know how to fix it please submit a patch, but as far as I know it's harmless.
>If you think you have a solution please submit a tested patch.

Ok here:

Actually you have to look some lines above, namely

gcc -Wp,-MD,arch/x86_64/boot/compressed/.head.o.d -nostdinc -isystem
/usr/lib64/gcc/x86_64-suse-linux/4.1.0/include -D__KERNEL__ -Iinclude
-include include/linux/autoconf.h -D__ASSEMBLY__ -m64 -traditional -m32
-c -o arch/x86_64/boot/compressed/head.o arch/x86_64/boot/compressed/head.S

It specifies both -m64 and -m32 on the line. Let's see what happens:

$ file arch/x86_64/boot/compressed/head.o
arch/x86_64/boot/compressed/head.o: ELF 64-bit LSB relocatable, AMD x86-64,
version 1 (SYSV), not stripped

$ grep AFLAGS arch/x86_64/boot/compressed/Makefile
EXTRA_AFLAGS := -traditional -m32

I would have expected it to become an ELF32 object, but it is not.
Bug or feature of gcc/as?

$ gcc -v
gcc version 4.1.0 (SUSE Linux/10.1)
$ as -v
GNU assembler version (x86_64-suse-linux) using BFD version 20051219 (SUSE Linux)

Patch below kills the warning, but I question how appropriate this is (it
feels like casting a warning in C away).. I did not test how the resulting
kernel image behaves, as I do not have any x64 that I could just reboot or
install vmware on.

diff --fast -Ndpru linux-2.6.18-rc4/arch/x86_64/boot/compressed/Makefile linux-2.6.18-rc4+/arch/x86_64/boot/compressed/Makefile
--- linux-2.6.18-rc4/arch/x86_64/boot/compressed/Makefile 2006-08-06 14:20:11.000000000 -0400
+++ linux-2.6.18-rc4+/arch/x86_64/boot/compressed/Makefile 2006-08-10 03:19:34.000000000 -0400
@@ -7,6 +7,7 @@

targets := vmlinux vmlinux.bin vmlinux.bin.gz head.o misc.o piggy.o
+AFLAGS := $(filter-out -m64,$(AFLAGS))
EXTRA_AFLAGS := -traditional -m32

# cannot use EXTRA_CFLAGS because base CFLAGS contains -mkernel which conflicts with

Jan Engelhardt
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at