Fix 32bit build for git-x86
PATCH 1/1 Fix 32bit build for git-x86
Fixes the 32build here with git-x86 (tip 2f42671697ea9abc7d10ea7f663d6ef6e8ec6358)
Fix git-x86 build
Otherwise
make[3]: Nothing to be done for `vmlinux'.KBUILD_IMAGE := arch/x86/boot/bzImage
make[2]: KBUILD_IMAGE: Command not found
make[2]: *** [all] Error 127
arch/x86/Makefile +2 -1
@@ -211,7 +211,8 @@ PHONY += zImage bzImage compressed zlilo all: bzImage # KBUILD_IMAGE specify target image being built - KBUILD_IMAGE := $(boot)/bzImage +KBUILD_IMAGE := $(boot)/bzImage + zImage zlilo zdisk: KBUILD_IMAGE := arch/x86/boot/zImage zImage bzImage: vmlinux
Quoted 11 lines · Andi Kleen
Fixes the 32build here with git-x86 (tip
2f42671697ea9abc7d10ea7f663d6ef6e8ec6358)Fix git-x86 build
Otherwise
make[3]: Nothing to be done for `vmlinux'.
KBUILD_IMAGE:=arch/x86/boot/bzImage
make[2]:KBUILD_IMAGE: Command not found
make[2]: *** [all] Error 127
Thanks Andi.
I wonder how these tabs came in.
I am almost sure they were not in my original patch. But as git-send-email do not save copies of my sent mails I cannot be sure.
Ingo - do you have a script on your side that could have converted the spaces to tabs?
It could be a simple "make checkpatch happy" change too - but in this case it was wrong.
Leading tabs in Makefiles that are not in front of commands are a typical source of non-so-easy-to-debug problems.
Been there before....
Sam
Quoted 17 lines
Signed-off-by Andi Kleen <[email protected]>Index: linux/arch/x86/Makefile
===================================================================arch/x86/Makefile +2
-1@@ -211,7 +211,8 @@ PHONY += zImage bzImage compressed zlilo all: bzImage # KBUILD_IMAGE specify target image being built - KBUILD_IMAGE := $(boot)/bzImage +KBUILD_IMAGE := $(boot)/bzImage + zImage zlilo zdisk: KBUILD_IMAGE := arch/x86/boot/zImage zImage bzImage: vmlinux
Quoted 8 lines · Sam Ravnborg
I wonder how these tabs came in.
I am almost sure they were not in my original patch. But as git-send-email do not save copies of my sent mails I cannot be sure.Ingo - do you have a script on your side that could have converted the spaces to tabs?
It could be a simple "make checkpatch happy" change too - but in this case it was wrong.
"git-apply --whitespace=fix" can also contribute to this issue, but only when "core.whitespace = indent-with-non-tab" is explicitly enabled by the user's configuration.
Quoted 3 lines · Sam Ravnborg
I wonder how these tabs came in. I am almost sure they were not in my original patch. But as git-send-email do not save copies of my sent mails I cannot be sure.
they are spaces in the patch i have from you, not tabs. I've attached your patch below. (the spaces are ugly, but they are as fine as far as Makefile syntax rules go.) Since your patch has been in x86.git for a few weeks already, nobody could have built 32-bit x86.git for a long time.
Andi, have you enabled any git smarts recently that fixes up whitespaces to tabs? I remember you had problems in this area and that you enabled some git stuff that does whitespace fixups, perhaps it's your side that does this.
Ingo
------------->
Subject: x86: unification of arch/x86/Makefiles
From: Sam Ravnborg <[email protected]>
Unify the 32 and 64 bit specific Makefiles.
The unification was simplest to do in one step although the readability of the patch suffers a bit from this.
Noteworthy remarks on the unification:
- The 64 bit cpu stuff should be moved to Makefile_32.cpu
but I did not feel confident doing it due to subtle differences
- The use of cflags-y were abandoned since we have seen one bug where we did wrong due to missing assignment to KBUILD_CFLAGS.
The cc-option marcro uses KBUILD_CFLAGS.
- The "No need to remake" line are deleted. It caused "make -B" to fail
- For 64 bit the sub architecture stuff is not used.
- The way head64.o is specified could be nicer - but it awaits the introduction of head32.o (which seems like a win to introduce for readability)
- Patch is checkpatch clean
Patch is tested by doing a defconfig build for i386 and x86_64 and in both cases monitoring that only relevant files were recompiled when applying the patch.
[ [email protected]: build fix ]
--- arch/x86/Makefile | 243 ++++++++++++++++++++++++++++++++++++++++++++++++++- arch/x86/Makefile_32 | 181 ------------------------------------- arch/x86/Makefile_64 | 141 ----------------------------- 3 files changed, 239 insertions(+), 326 deletions(-) delete mode 100644 arch/x86/Makefile_32 delete mode 100644 arch/x86/Makefile_64
arch/x86/Makefile +239 -4
@@ -7,13 +7,248 @@ else KBUILD_DEFCONFIG := $(ARCH)_defconfig endif -# No need to remake these files -$(srctree)/arch/x86/Makefile%: ; +# BITS is used as extension for files which are available in a 32 bit +# and a 64 bit version to simplify shared Makefiles. +# e.g.: obj-y += foo_$(BITS).o +export BITS ifeq ($(CONFIG_X86_32),y) + BITS := 32 UTS_MACHINE := i386 - include $(srctree)/arch/x86/Makefile_32 + + HAS_BIARCH := $(call cc-option-yn, -m32) + ifeq ($(HAS_BIARCH),y) + AS := $(AS) --32 + LD := $(LD) -m elf_i386 + CC := $(CC) -m32 + endif + + ifdef CONFIG_RELOCATABLE + LDFLAGS_vmlinux := --emit-relocs + endif + CHECKFLAGS += -D__i386__ + + KBUILD_CFLAGS += -msoft-float -mregparm=3 -freg-struct-return + + # prevent gcc from keeping the stack 16 byte aligned + KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=2) + + # Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use + # a lot more stack due to the lack of sharing of stacklots: + KBUILD_CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then \ + echo $(call cc-option,-fno-unit-at-a-time); fi ;) + + # CPU-specific tuning. Anything which can be shared with UML should go here. + include $(srctree)/arch/x86/Makefile_32.cpu + KBUILD_CFLAGS += $(cflags-y) + + # temporary until string.h is fixed + KBUILD_CFLAGS += -ffreestanding else + BITS := 64 UTS_MACHINE := x86_64 - include $(srctree)/arch/x86/Makefile_64 + CHECKFLAGS += -D__x86_64__ -m64 + + KBUILD_AFLAGS += -m64 + KBUILD_CFLAGS += -m64 + + # FIXME - should be integrated in Makefile.cpu (Makefile_32.cpu) + cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8) + cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona) + + cflags-$(CONFIG_MCORE2) += \ + $(call cc-option,-march=core2,$(call cc-option,-mtune=generic)) + cflags-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=generic) + KBUILD_CFLAGS += $(cflags-y) + + KBUILD_CFLAGS += -mno-red-zone + KBUILD_CFLAGS += -mcmodel=kernel + + KBUILD_CFLAGS += -Wno-sign-compare + KBUILD_CFLAGS += -fno-asynchronous-unwind-tables + # -funit-at-a-time shrinks the kernel .text considerably + # unfortunately it makes reading oopses harder. + KBUILD_CFLAGS += $(call cc-option,-funit-at-a-time) + + # prevent gcc from generating any FP code by mistake + KBUILD_CFLAGS += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,) + # this works around some issues with generating unwind tables in older gccs + # newer gccs do it by default + KBUILD_CFLAGS += -maccumulate-outgoing-args + + stackp := $(CONFIG_SHELL) $(srctree)/scripts/gcc-x86_64-has-stack-protector.sh + stackp-$(CONFIG_CC_STACKPROTECTOR) := $(shell $(stackp) \ + "$(CC)" -fstack-protector ) + stackp-$(CONFIG_CC_STACKPROTECTOR_ALL) += $(shell $(stackp) \ + "$(CC)" -fstack-protector-all ) + + KBUILD_CFLAGS += $(stackp-y) +endif + +# Stackpointer is addressed different for 32 bit and 64 bit x86 +sp-$(CONFIG_X86_32) := esp +sp-$(CONFIG_X86_64) := rsp + +# do binutils support CFI? +cfi := $(call as-instr,.cfi_startproc\n.cfi_rel_offset $(sp-y)$(comma)0\n.cfi_endproc,-DCONFIG_AS_CFI=1) +# is .cfi_signal_frame supported too? +cfi-sigframe := $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1) +KBUILD_AFLAGS += $(cfi) $(cfi-sigframe) +KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) + +LDFLAGS := -m elf_$(UTS_MACHINE) +OBJCOPYFLAGS := -O binary -R .note -R .comment -S +KBUILD_CFLAGS += -pipe + +### +# Sub architecture support +# fcore-y is linked before mcore-y files. + +# Default subarch .c files +mcore-y := arch/x86/mach-default/ + +# Voyager subarch support +mflags-$(CONFIG_X86_VOYAGER) := -Iinclude/asm-x86/mach-voyager +mcore-$(CONFIG_X86_VOYAGER) := arch/x86/mach-voyager/ + +# VISWS subarch support +mflags-$(CONFIG_X86_VISWS) := -Iinclude/asm-x86/mach-visws +mcore-$(CONFIG_X86_VISWS) := arch/x86/mach-visws/ + +# NUMAQ subarch support +mflags-$(CONFIG_X86_NUMAQ) := -Iinclude/asm-x86/mach-numaq +mcore-$(CONFIG_X86_NUMAQ) := arch/x86/mach-default/ + +# BIGSMP subarch support +mflags-$(CONFIG_X86_BIGSMP) := -Iinclude/asm-x86/mach-bigsmp +mcore-$(CONFIG_X86_BIGSMP) := arch/x86/mach-default/ + +# RDC R-321x subarch support +mflags-$(CONFIG_X86_RDC321X) := -Iinclude/asm-x86/mach-rdc321x +fcore-$(CONFIG_X86_RDC321X) += arch/x86/mach-rdc321x/ +mcore-$(CONFIG_X86_RDC321X) := arch/x86/mach-default/ + + +#Summit subarch support +mflags-$(CONFIG_X86_SUMMIT) := -Iinclude/asm-x86/mach-summit +mcore-$(CONFIG_X86_SUMMIT) := arch/x86/mach-default/ + +# generic subarchitecture +mflags-$(CONFIG_X86_GENERICARCH):= -Iinclude/asm-x86/mach-generic +fcore-$(CONFIG_X86_GENERICARCH) += arch/x86/mach-generic/ +mcore-$(CONFIG_X86_GENERICARCH) := arch/x86/mach-default/ + + +# ES7000 subarch support +mflags-$(CONFIG_X86_ES7000) := -Iinclude/asm-x86/mach-es7000 +fcore-$(CONFIG_X86_ES7000) := arch/x86/mach-es7000/ +mcore-$(CONFIG_X86_ES7000) := arch/x86/mach-default/ + +# default subarch .h files +mflags-y += -Iinclude/asm-x86/mach-default + +# 64 bit does not support subarch support - clear sub arch variables +fcore-$(CONFIG_X86_64) := +mcore-$(CONFIG_X86_64) := +mflags-$(CONFIG_X86_64) := + +KBUILD_CFLAGS += $(mflags-y) +KBUILD_AFLAGS += $(mflags-y) + +### +# Kernel objects + +head-y := arch/x86/kernel/head_$(BITS).o +head-$(CONFIG_X86_64) += arch/x86/kernel/head64.o +head-y += arch/x86/kernel/init_task.o + +libs-y += arch/x86/lib/ + +# Sub architecture files that needs linking first +core-y += $(fcore-y) + +# Xen paravirtualization support +core-$(CONFIG_XEN) += arch/x86/xen/ + +# lguest paravirtualization support +core-$(CONFIG_LGUEST_GUEST) += arch/x86/lguest/ + +core-y += arch/x86/kernel/ +core-y += arch/x86/mm/ + +# Remaining sub architecture files +core-y += $(mcore-y) + +core-y += arch/x86/crypto/ +core-y += arch/x86/vdso/ +core-$(CONFIG_IA32_EMULATION) += arch/x86/ia32/ + +# drivers-y are linked after core-y +drivers-$(CONFIG_MATH_EMULATION) += arch/x86/math-emu/ +drivers-$(CONFIG_PCI) += arch/x86/pci/ + +# must be linked after kernel/ +drivers-$(CONFIG_OPROFILE) += arch/x86/oprofile/ + +ifeq ($(CONFIG_X86_32),y) +drivers-$(CONFIG_PM) += arch/x86/power/ +drivers-$(CONFIG_FB) += arch/x86/video/ endif + +#### +# boot loader support. Several targets are kept for legacy purposes + +boot := arch/x86/boot + +PHONY += zImage bzImage compressed zlilo bzlilo \ + zdisk bzdisk fdimage fdimage144 fdimage288 isoimage install + +# Default kernel to build +all: bzImage + +# KBUILD_IMAGE specify target image being built + KBUILD_IMAGE := $(boot)/bzImage +zImage zlilo zdisk: KBUILD_IMAGE := arch/x86/boot/zImage + +zImage bzImage: vmlinux + $(Q)$(MAKE) $(build)=$(boot) $(KBUILD_IMAGE) + $(Q)mkdir -p $(objtree)/arch/$(UTS_MACHINE)/boot + $(Q)ln -fsn ../../x86/boot/bzImage $(objtree)/arch/$(UTS_MACHINE)/boot/bzImage + +compressed: zImage + +zlilo bzlilo: vmlinux + $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) zlilo + +zdisk bzdisk: vmlinux + $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) zdisk + +fdimage fdimage144 fdimage288 isoimage: vmlinux + $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@ + +install: vdso_install + $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install + +PHONY += vdso_install +vdso_install: + $(Q)$(MAKE) $(build)=arch/x86/vdso $@ + +archclean: + $(Q)rm -rf $(objtree)/arch/i386 + $(Q)rm -rf $(objtree)/arch/x86_64 + $(Q)$(MAKE) $(clean)=$(boot) + +define archhelp + echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)' + echo ' install - Install kernel using' + echo ' (your) ~/bin/installkernel or' + echo ' (distribution) /sbin/installkernel or' + echo ' install to $$(INSTALL_PATH) and run lilo' + echo ' bzdisk - Create a boot floppy in /dev/fd0' + echo ' fdimage - Create a boot floppy image' + echo ' isoimage - Create a boot CD-ROM image' +endef + +CLEAN_FILES += arch/x86/boot/fdimage \ + arch/x86/boot/image.iso \ + arch/x86/boot/mtools.conf
arch/x86/Makefile_32 deleted +0 -181
181 lines not on this page · raw message
arch/x86/Makefile_64 deleted +0 -141
141 lines not on this page · raw message
Quoted 4 lines · Andi Kleen
Fixes the 32build here with git-x86 (tip
2f42671697ea9abc7d10ea7f663d6ef6e8ec6358)Fix git-x86 build
your patch does not apply and this build bug is not present in x86.git. This bit:
arch/x86/Makefile PHONY += zImage bzImage compressed zlilo · line 214
Quoted 2 lines
arch/x86/Makefile +1
-1- KBUILD_IMAGE := $(boot)/bzImage +KBUILD_IMAGE := $(boot)/bzImage
that whitespaec is tabs in your repository while it's spaces in mine and in the x86.git repository as well. So there's no bug in x86.git AFAICS.
Ingo