summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2013-01-31 22:44:28 +0100
committerHelge Deller <deller@gmx.de>2013-02-20 22:46:57 +0100
commitec758f98328da3eb933a25dc7a2eed01ef44d849 (patch)
tree9c6e20e3926fc8eabdca18b7b6ce54908dff8c81
parentparisc: Fix comment describing setup of access rights in entry.S (diff)
downloadlinux-ec758f98328da3eb933a25dc7a2eed01ef44d849.tar.xz
linux-ec758f98328da3eb933a25dc7a2eed01ef44d849.zip
parisc: add CONFIG_MLONGCALLS option to enable linkage of huge vmlinux executables
When building a 64bit kernel which includes all necessary drivers and filesystems the vmlinux kernel often gets so huge, that the linker won't be able to resolve the branch stubs. This patch overcomes this limit by providing an option to compile the kernel with the -mlong-calls compiler option. Signed-off-by: Helge Deller <deller@gmx.de>
-rw-r--r--arch/parisc/Kconfig17
-rw-r--r--arch/parisc/Makefile4
2 files changed, 21 insertions, 0 deletions
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index b77feffbadea..3df1c35a217a 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -161,6 +161,23 @@ config PREFETCH
def_bool y
depends on PA8X00 || PA7200
+config MLONGCALLS
+ bool "Enable the -mlong-calls compiler option for big kernels"
+ def_bool y if (!MODULES)
+ depends on PA8X00
+ help
+ If you configure the kernel to include many drivers built-in instead
+ as modules, the kernel executable may become too big, so that the
+ linker will not be able to resolve some long branches and fails to link
+ your vmlinux kernel. In that case enabling this option will help you
+ to overcome this limit by using the -mlong-calls compiler option.
+
+ Usually you want to say N here, unless you e.g. want to build
+ a kernel which includes all necessary drivers built-in and which can
+ be used for TFTP booting without the need to have an initrd ramdisk.
+
+ Enabling this option will probably slow down your kernel.
+
config 64BIT
bool "64-bit kernel"
depends on PA8X00
diff --git a/arch/parisc/Makefile b/arch/parisc/Makefile
index 87f64d6b5dcb..ed9a14ccd066 100644
--- a/arch/parisc/Makefile
+++ b/arch/parisc/Makefile
@@ -64,6 +64,10 @@ ifndef CONFIG_FUNCTION_TRACER
cflags-y += -ffunction-sections
endif
+# Use long jumps instead of long branches (needed if your linker fails to
+# link a too big vmlinux executable)
+cflags-$(CONFIG_MLONGCALLS) += -mlong-calls
+
# select which processor to optimise for
cflags-$(CONFIG_PA7100) += -march=1.1 -mschedule=7100
cflags-$(CONFIG_PA7200) += -march=1.1 -mschedule=7200