MIPS: Add CONFIG_RELOCATABLE Kconfig option
authorMatt Redfearn <matt.redfearn@imgtec.com>
Thu, 31 Mar 2016 09:05:39 +0000 (10:05 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Fri, 13 May 2016 12:02:03 +0000 (14:02 +0200)
Add option to KConfig to enable the kernel to relocate itself at
runtime.

Relocation is supported R2 and later of the MIPS architecture, 32bit
and 64bit. The platform is also required to provide support through
plat_get_fdt() added in a later patch.

Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: kernel-hardening@lists.openwall.com
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/12987/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/Kconfig

index 99ec21f..7040a6b 100644 (file)
@@ -475,6 +475,7 @@ config MIPS_MALTA
        select SYS_SUPPORTS_MULTITHREADING
        select SYS_SUPPORTS_SMARTMIPS
        select SYS_SUPPORTS_ZBOOT
+       select SYS_SUPPORTS_RELOCATABLE
        select USE_OF
        select ZONE_DMA32 if 64BIT
        select BUILTIN_DTB
@@ -519,6 +520,7 @@ config MIPS_SEAD3
        select SYS_SUPPORTS_SMARTMIPS
        select SYS_SUPPORTS_MICROMIPS
        select SYS_SUPPORTS_MIPS16
+       select SYS_SUPPORTS_RELOCATABLE
        select USB_EHCI_BIG_ENDIAN_DESC
        select USB_EHCI_BIG_ENDIAN_MMIO
        select USE_OF
@@ -1158,6 +1160,13 @@ config ISA_DMA_API
 config HOLES_IN_ZONE
        bool
 
+config SYS_SUPPORTS_RELOCATABLE
+       bool
+       help
+        Selected if the platform supports relocating the kernel.
+        The platform must provide plat_get_fdt() if it selects CONFIG_USE_OF
+        to allow access to command line and entropy sources.
+
 #
 # Endianness selection.  Sufficiently obscure so many users don't know what to
 # answer,so we try hard to limit the available choices.  Also the use of a
@@ -2473,6 +2482,15 @@ config NUMA
 config SYS_SUPPORTS_NUMA
        bool
 
+config RELOCATABLE
+       bool "Relocatable kernel"
+       depends on SYS_SUPPORTS_RELOCATABLE && (CPU_MIPS32_R2 || CPU_MIPS64_R2 || CPU_MIPS32_R6 || CPU_MIPS64_R6)
+       help
+         This builds a kernel image that retains relocation information
+         so it can be loaded someplace besides the default 1MB.
+         The relocations make the kernel binary about 15% larger,
+         but are discarded at runtime
+
 config RELOCATION_TABLE_SIZE
        hex "Relocation table size"
        depends on RELOCATABLE