Skip to content
  • Masahiro Yamada's avatar
    kbuild: simplify ld-option implementation · 1f855871
    Masahiro Yamada authored
    commit 0294e6f4 upstream.
    
    Currently, linker options are tested by the coordination of $(CC) and
    $(LD) because $(LD) needs some object to link.
    
    As commit 86a9df59 ("kbuild: fix linker feature test macros when
    cross compiling with Clang") addressed, we need to make sure $(CC)
    and $(LD) agree the underlying architecture of the passed object.
    
    This could be a bit complex when we combine tools from different groups.
    For example, we can use clang for $(CC), but we still need to rely on
    GCC toolchain for $(LD).
    
    So, I was searching for a way of standalone testing of linker options.
    A trick I found is to use '-v'; this not only prints the version string,
    but also tests if the given option is recognized.
    
    If a given option is supported,
    
      $ aarch64-linux-gnu-ld -v --fix-cortex-a53-843419
      GNU ld (Linaro_Binutils-2017.11) 2.28.2.20170706
      $ echo $?
      0
    
    If unsupported,
    
      $ aarch64-linux-gnu-ld -v --fix-cortex-a53-843419
      GNU ld (crosstool-NG linaro-1.13.1-4.7-2013.04-20130415 - Linaro GCC 2013.04) 2.23.1
      aarch64-linux-gnu-ld: unrecognized option '--fix-cortex-a53-843419'
      aarch64-linux-gnu-ld: use the --help option for usage information
      $ echo $?
      1
    
    Gold works likewise.
    
      $ aarch64-linux-gnu-ld.gold -v --fix-cortex-a53-843419
      GNU gold (Linaro_Binutils-2017.11 2.28.2.20170706) 1.14
      masahiro@pug:~/ref/linux$ echo $?
      0
      $ aarch64-linux-gnu-ld.gold -v --fix-cortex-a53-999999
      GNU gold (Linaro_Binutils-2017.11 2.28.2.20170706) 1.14
      aarch64-linux-gnu-ld.gold: --fix-cortex-a53-999999: unknown option
      aarch64-linux-gnu-ld.gold: use the --help option for usage information
      $ echo $?
      1
    
    LLD too.
    
      $ ld.lld -v --gc-sections
      LLD 7.0.0 (http://llvm.org/git/lld.git 4a0e4190e74cea19f8a8dc625ccaebdf8b5d1585) (compatible with GNU linkers)
      $ echo $?
      0
      $ ld.lld -v --fix-cortex-a53-843419
      LLD 7.0.0 (http://llvm.org/git/lld.git 4a0e4190e74cea19f8a8dc625ccaebdf8b5d1585) (compatible with GNU linkers)
      $ echo $?
      0
      $ ld.lld -v --fix-cortex-a53-999999
      ld.lld: error: unknown argument: --fix-cortex-a53-999999
      LLD 7.0.0 (http://llvm.org/git/lld.git
    
     4a0e4190e74cea19f8a8dc625ccaebdf8b5d1585) (compatible with GNU linkers)
      $ echo $?
      1
    
    Signed-off-by: Masahiro Yamada's avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    Tested-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    [nc: try-run-cached was added later, just use try-run, which is the
         current mainline state]
    Signed-off-by: default avatarNathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    1f855871