• Ard Biesheuvel's avatar
    arch: enable relative relocations for arm64, power and x86 · 271ca788
    Ard Biesheuvel authored
    Patch series "add support for relative references in special sections", v10.
    
    This adds support for emitting special sections such as initcall arrays,
    PCI fixups and tracepoints as relative references rather than absolute
    references.  This reduces the size by 50% on 64-bit architectures, but
    more importantly, it removes the need for carrying relocation metadata for
    these sections in relocatable kernels (e.g., for KASLR) that needs to be
    fixed up at boot time.  On arm64, this reduces the vmlinux footprint of
    such a reference by 8x (8 byte absolute reference + 24 byte RELA entry vs
    4 byte relative reference)
    
    Patch #3 was sent out before as a single patch.  This series supersedes
    the previous submission.  This version makes relative ksymtab entries
    dependent on the new Kconfig symbol HAVE_ARCH_PREL32_RELOCATIONS rather
    than trying to infer from kbuild test robot replies for which
    architectures it should be blacklisted.
    
    Patch #1 introduces the new Kconfig symbol HAVE_ARCH_PREL32_RELOCATIONS,
    and sets it for the main architectures that are expected to benefit the
    most from this feature, i.e., 64-bit architectures or ones that use
    runtime relocations.
    
    Patch #2 add support for #define'ing __DISABLE_EXPORTS to get rid of
    ksymtab/kcrctab sections in decompressor and EFI stub objects when
    rebuilding existing C files to run in a different context.
    
    Patches #4 - #6 implement relative references for initcalls, PCI fixups
    and tracepoints, respectively, all of which produce sections with order
    ~1000 entries on an arm64 defconfig kernel with tracing enabled.  This
    means we save about 28 KB of vmlinux space for each of these patches.
    
    [From the v7 series blurb, which included the jump_label patches as well]:
    
      For the arm64 kernel, all patches combined reduce the memory footprint
      of vmlinux by about 1.3 MB (using a config copied from Ubuntu that has
      KASLR enabled), of which ~1 MB is the size reduction of the RELA section
      in .init, and the remaining 300 KB is reduction of .text/.data.
    
    This patch (of 6):
    
    Before updating certain subsystems to use place relative 32-bit
    relocations in special sections, to save space and reduce the number of
    absolute relocations that need to be processed at runtime by relocatable
    kernels, introduce the Kconfig symbol and define it for some architectures
    that should be able to support and benefit from it.
    
    Link: http://lkml.kernel.org/r/20180704083651.24360-2-ard.biesheuvel@linaro.orgSigned-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Acked-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Reviewed-by: default avatarWill Deacon <will.deacon@arm.com>
    Acked-by: default avatarIngo Molnar <mingo@kernel.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Thomas Garnier <thgarnie@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: "Serge E. Hallyn" <serge@hallyn.com>
    Cc: Bjorn Helgaas <bhelgaas@google.com>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Russell King <linux@armlinux.org.uk>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: James Morris <jmorris@namei.org>
    Cc: Nicolas Pitre <nico@linaro.org>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
    Cc: James Morris <james.morris@microsoft.com>
    Cc: Jessica Yu <jeyu@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    271ca788
Kconfig 41.4 KB