On Fri, Nov 13, 2020 at 11:56 AM Nathan Chancellor <natechancellor@xxxxxxxxx> wrote: > > ld.lld 10.0.1 spews a bunch of various warnings about .rela sections, > along with a few others. Newer versions of ld.lld do not have these > warnings. As a result, do not add '--orphan-handling=warn' to > LDFLAGS_vmlinux if ld.lld's version is not new enough. > > Reported-by: Arvind Sankar <nivedita@xxxxxxxxxxxx> > Reported-by: kernelci.org bot <bot@xxxxxxxxxxxx> > Reported-by: Mark Brown <broonie@xxxxxxxxxx> > Link: https://github.com/ClangBuiltLinux/linux/issues/1187 > Link: https://github.com/ClangBuiltLinux/linux/issues/1193 > Signed-off-by: Nathan Chancellor <natechancellor@xxxxxxxxx> > --- > MAINTAINERS | 1 + > init/Kconfig | 6 +++++- > scripts/lld-version.sh | 20 ++++++++++++++++++++ > 3 files changed, 26 insertions(+), 1 deletion(-) > create mode 100755 scripts/lld-version.sh > > diff --git a/MAINTAINERS b/MAINTAINERS > index 3da6d8c154e4..4b83d3591ec7 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -4284,6 +4284,7 @@ B: https://github.com/ClangBuiltLinux/linux/issues > C: irc://chat.freenode.net/clangbuiltlinux > F: Documentation/kbuild/llvm.rst > F: scripts/clang-tools/ > +F: scripts/lld-version.sh > K: \b(?i:clang|llvm)\b > > CLEANCACHE API > diff --git a/init/Kconfig b/init/Kconfig > index a270716562de..40c9ca60ac1d 100644 > --- a/init/Kconfig > +++ b/init/Kconfig > @@ -47,6 +47,10 @@ config CLANG_VERSION > int > default $(shell,$(srctree)/scripts/clang-version.sh $(CC)) > > +config LLD_VERSION > + int > + default $(shell,$(srctree)/scripts/lld-version.sh $(LD)) > + > config CC_CAN_LINK > bool > default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(m64-flag)) if 64BIT > @@ -1349,7 +1353,7 @@ config LD_DEAD_CODE_DATA_ELIMINATION > own risk. > > config LD_ORPHAN_WARN > - def_bool ARCH_WANT_LD_ORPHAN_WARN && $(ld-option,--orphan-handling=warn) > + def_bool ARCH_WANT_LD_ORPHAN_WARN && $(ld-option,--orphan-handling=warn) && (!LD_IS_LLD || LLD_VERSION >= 110000) > > config SYSCTL > bool > diff --git a/scripts/lld-version.sh b/scripts/lld-version.sh > new file mode 100755 > index 000000000000..cc779f412e39 > --- /dev/null > +++ b/scripts/lld-version.sh > @@ -0,0 +1,20 @@ > +#!/bin/sh > +# SPDX-License-Identifier: GPL-2.0 > +# > +# ld.lld-version ld.lld-command ^ it looks like this format was copied from scripts/gcc-version, but it's kind of curious/cryptic to me for a comment about usage. Is it necessary? A comment in the form: # Usage: ./scripts/lld-version.sh ld.lld Would be clearer to me. > +# > +# Print the linker version of `ld.lld-command' in a 5 or 6-digit form > +# such as `100001' for ld.lld 10.0.1 etc. > + > +linker="$*" > + > +if ! ( $linker --version | grep -q LLD ); then > + echo 0 > + exit 1 > +fi > + > +VERSION=$($linker --version | cut -d ' ' -f 2) This is going to invoke the linker potentially twice if it's LLD. Would it be nicer to capture the output of `$linker --version`, check which linker it is, then slice that up via `cut` to get the version? This version is fine to me, but if you're going to send a v2, that might be a nice slight cleanup. Otherwise, Reviewed-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> Tested-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> (Please drop those tags if you modify this for v2 and I'll rereview/retest). > +MAJOR=$(echo $VERSION | cut -d . -f 1) > +MINOR=$(echo $VERSION | cut -d . -f 2) > +PATCHLEVEL=$(echo $VERSION | cut -d . -f 3) > +printf "%d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL > -- > 2.29.2 > -- Thanks, ~Nick Desaulniers