13 Nov, 2019

1 commit

  • When the CC variable contains quotes, e.g. when using
    ccache (make CC="ccache "), this script always
    fails, so CONFIG_RELR is never enabled, even when the
    toolchain supports this feature. Removing the /dev/null
    redirect and invoking the script manually shows the issue:

    $ CC='/usr/bin/ccache clang' ./scripts/tools-support-relr.sh
    ./scripts/tools-support-relr.sh: 7: ./scripts/tools-support-relr.sh: /usr/bin/ccache clang: not found

    Fix this by un-quoting the variables.

    Before:
    $ make ARCH=arm64 CC='/usr/bin/ccache clang' LD=ld.lld \
    NM=llvm-nm OBJCOPY=llvm-objcopy defconfig
    $ grep RELR .config
    CONFIG_ARCH_HAS_RELR=y

    With this change:
    $ make ARCH=arm64 CC='/usr/bin/ccache clang' LD=ld.lld \
    NM=llvm-nm OBJCOPY=llvm-objcopy defconfig
    $ grep RELR .config
    CONFIG_TOOLS_SUPPORT_RELR=y
    CONFIG_ARCH_HAS_RELR=y
    CONFIG_RELR=y

    Fixes: 5cf896fb6be3 ("arm64: Add support for relocating the kernel with RELR relocations")
    Reported-by: Dmitry Golovin
    Reviewed-by: Nathan Chancellor
    Reviewed-by: Masahiro Yamada
    Link: https://github.com/ClangBuiltLinux/linux/issues/769
    Cc: Peter Collingbourne
    Signed-off-by: Ilie Halip
    Signed-off-by: Will Deacon

    Ilie Halip
     

05 Aug, 2019

1 commit

  • 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
    Tested-by: Nick Desaulniers
    Reviewed-by: Nick Desaulniers
    Signed-off-by: Will Deacon

    Peter Collingbourne