Commit adff90a9 authored by Franck Bui-Huu's avatar Franck Bui-Huu Committed by Ralf Baechle

[MIPS] Automatically set CONFIG_BUILD_ELF64

We do not rely on user anymore to setup this config correctly.
Instead we make our choice depending on the load address.

If we want to force Kbuild to use ELF64 format whatever
the load address we can still do:

        $ make BUILD_ELF32=no
Signed-off-by: default avatarFranck Bui-Huu <fbuihuu@gmail.com>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 8c67316e
...@@ -1853,21 +1853,6 @@ source "fs/Kconfig.binfmt" ...@@ -1853,21 +1853,6 @@ source "fs/Kconfig.binfmt"
config TRAD_SIGNALS config TRAD_SIGNALS
bool bool
config BUILD_ELF64
bool "Use 64-bit ELF format for building"
depends on 64BIT
help
A 64-bit kernel is usually built using the 64-bit ELF binary object
format as it's one that allows arbitrary 64-bit constructs. For
kernels that are loaded within the KSEG compatibility segments the
32-bit ELF format can optionally be used resulting in a somewhat
smaller binary, but this option is not explicitly supported by the
toolchain and since binutils 2.14 it does not even work at all.
Say Y to use the 64-bit format or N to use the 32-bit one.
If unsure say Y.
config BINFMT_IRIX config BINFMT_IRIX
bool "Include IRIX binary compatibility" bool "Include IRIX binary compatibility"
depends on CPU_BIG_ENDIAN && 32BIT && BROKEN depends on CPU_BIG_ENDIAN && 32BIT && BROKEN
......
...@@ -60,9 +60,6 @@ vmlinux-32 = vmlinux.32 ...@@ -60,9 +60,6 @@ vmlinux-32 = vmlinux.32
vmlinux-64 = vmlinux vmlinux-64 = vmlinux
cflags-y += -mabi=64 cflags-y += -mabi=64
ifndef CONFIG_BUILD_ELF64
cflags-y += $(call cc-option,-msym32)
endif
endif endif
all-$(CONFIG_BOOT_ELF32) := $(vmlinux-32) all-$(CONFIG_BOOT_ELF32) := $(vmlinux-32)
...@@ -576,6 +573,26 @@ else ...@@ -576,6 +573,26 @@ else
JIFFIES = jiffies_64 JIFFIES = jiffies_64
endif endif
#
# Automatically detect the build format. By default we choose
# the elf format according to the load address.
# We can always force a build with a 64-bits symbol format by
# passing 'BUILD_ELF32=no' option to the make's command line.
#
ifdef CONFIG_64BIT
ifndef BUILD_ELF32
ifeq ($(shell expr $(load-y) \< 0xffffffff80000000), 0)
BUILD_ELF32 = y
endif
endif
ifeq ($(BUILD_ELF32), y)
cflags-y += -msym32
else
cflags-y += -DCONFIG_BUILD_ELF64
endif
endif
AFLAGS += $(cflags-y) AFLAGS += $(cflags-y)
CFLAGS += $(cflags-y) \ CFLAGS += $(cflags-y) \
-D"VMLINUX_LOAD_ADDRESS=$(load-y)" -D"VMLINUX_LOAD_ADDRESS=$(load-y)"
......
...@@ -142,7 +142,7 @@ typedef struct { unsigned long pgprot; } pgprot_t; ...@@ -142,7 +142,7 @@ typedef struct { unsigned long pgprot; } pgprot_t;
/* /*
* __pa()/__va() should be used only during mem init. * __pa()/__va() should be used only during mem init.
*/ */
#ifdef CONFIG_64BIT #if defined(CONFIG_64BIT) && !defined(CONFIG_BUILD_ELF64)
#define __pa(x) \ #define __pa(x) \
({ \ ({ \
unsigned long __x = (unsigned long)(x); \ unsigned long __x = (unsigned long)(x); \
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment