Re: [tip:x86/build] x86: Default to ARCH= x86 to avoid overridingCONFIG_64BIT

From: David Rientjes
Date: Wed Dec 26 2012 - 01:31:57 EST


On Thu, 20 Dec 2012, tip-bot for David Woodhouse wrote:

> diff --git a/Makefile b/Makefile
> index 540f7b2..9a07340 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -165,7 +165,8 @@ export srctree objtree VPATH
> # then ARCH is assigned, getting whatever value it gets normally, and
> # SUBARCH is subsequently ignored.
>
> -SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
> +SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ \
> + -e s/sun4u/sparc64/ \
> -e s/arm.*/arm/ -e s/sa110/arm/ \
> -e s/s390x/s390/ -e s/parisc64/parisc/ \
> -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index 46c3bff..9084c7b 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -1,7 +1,7 @@
> # Select 32 or 64 bit
> config 64BIT
> bool "64-bit kernel" if ARCH = "x86"
> - default ARCH = "x86_64"
> + default ARCH != "i386"
> ---help---
> Say yes to build a 64-bit kernel - formerly known as x86_64
> Say no to build a 32-bit kernel - formerly known as i386
> diff --git a/arch/x86/Makefile b/arch/x86/Makefile
> index 05afcca..fa981ca 100644
> --- a/arch/x86/Makefile
> +++ b/arch/x86/Makefile
> @@ -2,7 +2,11 @@
>
> # select defconfig based on actual architecture
> ifeq ($(ARCH),x86)
> + ifeq ($(shell uname -m),x86_64)
> + KBUILD_DEFCONFIG := x86_64_defconfig
> + else
> KBUILD_DEFCONFIG := i386_defconfig
> + endif
> else
> KBUILD_DEFCONFIG := $(ARCH)_defconfig
> endif
> diff --git a/arch/x86/configs/i386_defconfig b/arch/x86/configs/i386_defconfig
> index 5598547..9444708 100644
> --- a/arch/x86/configs/i386_defconfig
> +++ b/arch/x86/configs/i386_defconfig
> @@ -1,3 +1,4 @@
> +# CONFIG_64BIT is not set
> CONFIG_EXPERIMENTAL=y
> # CONFIG_LOCALVERSION_AUTO is not set
> CONFIG_SYSVIPC=y

This creates quite a few build failures on auto-latest:

arch/x86/built-in.o: In function `hpet_setup_msi_irq':
hpet.c:(.text+0x34638): undefined reference to `arch_setup_hpet_msi'
hpet.c:(.text+0x34651): undefined reference to `destroy_irq'
arch/x86/built-in.o: In function `hpet_msi_capability_lookup':
hpet.c:(.text+0x347ff): undefined reference to `create_irq_nr'
arch/x86/built-in.o:(.data+0xd1c): undefined reference to `native_setup_msi_irqs'
arch/x86/built-in.o:(.data+0xd20): undefined reference to `native_teardown_msi_irq'
drivers/built-in.o: In function `dmar_set_interrupt':
(.text+0x89eec0): undefined reference to `create_irq'
drivers/built-in.o: In function `dmar_set_interrupt':
(.text+0x89ef0b): undefined reference to `arch_setup_dmar_msi'
drivers/built-in.o: In function `dmar_set_interrupt':
(.text+0x89ef44): undefined reference to `destroy_irq'
drivers/built-in.o: In function `free_dmar_iommu':
(.text+0x8a6ae8): undefined reference to `destroy_irq'

These functions require CONFIG_X86_IO_APIC, which is only possible with
X86_64 or X86_32_NON_STANDARD. CONFIG_HPET_TIMER, however, can be enabled
with X86_32, and CONFIG_DMAR_TABLE can be enabled with any X86 via
CONFIG_INTEL_IOMMU.

That said, I didn't try to fix this up because I believe the commit itself
is wrong. When I do "make randconfig" and uname -m is x86_64, I expect
CONFIG_64BIT to always be set. This commit makes this random for all x86
so that "make randconfig" may result in a 32-bit build. That should be
the behavior for "make ARCH=i386 randconfig" but not "make randconfig" on
a 64-bit machine.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/