diff options
author | Peter Collingbourne <pcc@google.com> | 2019-07-31 18:18:42 -0700 |
---|---|---|
committer | Will Deacon <will@kernel.org> | 2019-08-05 12:35:35 +0100 |
commit | 5cf896fb6be3effd9aea455b22213e27be8bdb1d (patch) | |
tree | 563e83ed04a2de71b65e831896bf52e0eaf31af0 /init | |
parent | 66cbdf5d0c96f5fe570b548e764583ea9d793077 (diff) | |
download | linux-5cf896fb6be3effd9aea455b22213e27be8bdb1d.tar.gz linux-5cf896fb6be3effd9aea455b22213e27be8bdb1d.tar.bz2 linux-5cf896fb6be3effd9aea455b22213e27be8bdb1d.zip |
arm64: Add support for relocating the kernel with RELR relocations
RELR is a relocation packing format for relative relocations.
The format is described in a generic-abi proposal:
https://groups.google.com/d/topic/generic-abi/bX460iggiKg/discussion
The LLD linker can be instructed to pack relocations in the RELR
format by passing the flag --pack-dyn-relocs=relr.
This patch adds a new config option, CONFIG_RELR. Enabling this option
instructs the linker to pack vmlinux's relative relocations in the RELR
format, and causes the kernel to apply the relocations at startup along
with the RELA relocations. RELA relocations still need to be applied
because the linker will emit RELA relative relocations if they are
unrepresentable in the RELR format (i.e. address not a multiple of 2).
Enabling CONFIG_RELR reduces the size of a defconfig kernel image
with CONFIG_RANDOMIZE_BASE by 3.5MB/16% uncompressed, or 550KB/5%
compressed (lz4).
Signed-off-by: Peter Collingbourne <pcc@google.com>
Tested-by: Nick Desaulniers <ndesaulniers@google.com>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Will Deacon <will@kernel.org>
Diffstat (limited to 'init')
-rw-r--r-- | init/Kconfig | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/init/Kconfig b/init/Kconfig index bd7d650d4a99..d96127ebc44e 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -30,6 +30,9 @@ config CC_CAN_LINK config CC_HAS_ASM_GOTO def_bool $(success,$(srctree)/scripts/gcc-goto.sh $(CC)) +config TOOLS_SUPPORT_RELR + def_bool $(success,env "CC=$(CC)" "LD=$(LD)" "NM=$(NM)" "OBJCOPY=$(OBJCOPY)" $(srctree)/scripts/tools-support-relr.sh) + config CC_HAS_WARN_MAYBE_UNINITIALIZED def_bool $(cc-option,-Wmaybe-uninitialized) help |