• Nick Desaulniers's avatar
    arm64: link with -z norelro for LLD or aarch64-elf · 0855fe6d
    Nick Desaulniers authored
    commit 311bea3c upstream.
    
    With GNU binutils 2.35+, linking with BFD produces warnings for vmlinux:
    aarch64-linux-gnu-ld: warning: -z norelro ignored
    
    BFD can produce this warning when the target emulation mode does not
    support RELRO program headers, and -z relro or -z norelro is passed.
    
    Alan Modra clarifies:
      The default linker emulation for an aarch64-linux ld.bfd is
      -maarch64linux, the default for an aarch64-elf linker is
      -maarch64elf.  They are not equivalent.  If you choose -maarch64elf
      you get an emulation that doesn't support -z relro.
    
    The ARCH=arm64 kernel prefers -maarch64elf, but may fall back to
    -maarch64linux based on the toolchain configuration.
    
    LLD will always create RELRO program header regardless of target
    emulation.
    
    To avoid the above warning when linking with BFD, pass -z norelro only
    when linking with LLD or with -maarch64linux.
    
    Fixes: 3b92fa74 ("arm64: link with -z norelro regardless of C...
    0855fe6d
Makefile 5.89 KB