Skip to content
  • Ard Biesheuvel's avatar
    arm64: relocatable: fix inconsistencies in linker script and options · f21ce3cd
    Ard Biesheuvel authored
    commit 3bbd3db8 upstream.
    
    readelf complains about the section layout of vmlinux when building
    with CONFIG_RELOCATABLE=y (for KASLR):
    
      readelf: Warning: [21]: Link field (0) should index a symtab section.
      readelf: Warning: [21]: Info field (0) should index a relocatable section.
    
    Also, it seems that our use of '-pie -shared' is contradictory, and
    thus ambiguous. In general, the way KASLR is wired up at the moment
    is highly tailored to how ld.bfd happens to implement (and conflate)
    PIE executables and shared libraries, so given the current effort to
    support other toolchains, let's fix some of these issues as well.
    
    - Drop the -pie linker argument and just leave -shared. In ld.bfd,
      the differences between them are unclear (except for the ELF type
      of the produced image [0]) but lld chokes on seeing both at the
      same time.
    
    - Rename the .rela output section to .rela.dyn, as is customary for
      shared libraries and PIE executables, so that it is not misidentified
      by readelf as a static relocation section (producing the warnings
      above).
    
    - Pass the -z notext and -z norelro options to explicitly instruct the
      linker to permit text relocations, and to omit the RELRO program
      header (which requires a certain section layout that we don't adhere
      to in the kernel). These are the defaults for current versions of
      ld.bfd.
    
    - Discard .eh_frame and .gnu.hash sections to avoid them from being
      emitted between .head.text and .text, screwing up the section layout.
    
    These changes only affect the ELF image, and produce the same binary
    image.
    
    [0] b9dce7f1
    
     ("arm64: kernel: force ET_DYN ELF type for ...")
    
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Cc: Peter Smith <peter.smith@linaro.org>
    Tested-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    f21ce3cd