On Wed, Mar 3, 2021 at 1:02 PM Nathan Chancellor <nat...@kernel.org> wrote: > > Hi Bernhard, > > I have added the ClangBuiltLinux mailing list, kbuild mailing list, and > Masahiro and Nick to CC. Maybe ld-version.sh and cc-version.sh should be > added to a MAINTAINERS entry to make sure we get CC'd (I can send one > along tomorrow). > > On Tue, Mar 02, 2021 at 11:12:11PM +0100, Bernhard Rosenkränzer wrote: > > If LLD was built with -DLLD_VENDOR="xyz", ld.lld --version output > > will prefix LLD_VENDOR. Since LLD_VENDOR can contain spaces, the > > LLD identifier isn't guaranteed to be $2 either. > > TIL about LLD_VENDOR... > > > Adjust the version checker to handle such versions of lld. > > > > Signed-off-by: Bernhard Rosenkränzer <b...@lindev.ch> > > --- > > scripts/ld-version.sh | 12 ++++++++++++ > > 1 file changed, 12 insertions(+) > > > > diff --git a/scripts/ld-version.sh b/scripts/ld-version.sh > > index a463273509b5..4c042a306e22 100755 > > --- a/scripts/ld-version.sh > > +++ b/scripts/ld-version.sh > > @@ -49,6 +49,18 @@ elif [ "$1" = LLD ]; then > > min_version=$lld_min_version > > name=LLD > > disp_name=LLD > > +elif echo "$@" |grep -q ' LLD '; then > > + # if LLD was built with -DLLD_VENDOR="xyz", it ld.lld --version > > + # says "xyz LLD [...]". Since LLD_VENDOR may contain spaces, we > > + # don't know the exact position of "LLD" and the version info > > + # at this point > > + while [ "$1" != "LLD" ]; do > > + shift > > + done > > + version=$2 > > + min_version=$lld_min_version > > + name=LLD > > + disp_name=LLD > > else > > echo "$orig_args: unknown linker" >&2 > > exit 1 > > -- > > 2.30.1 > > > > I am not sure what a better fix would be of the top of my head but > wouldn't it be better to avoid the duplication? This diff below works > for me with or without LLD_VENDOR defined. > > diff --git a/scripts/ld-version.sh b/scripts/ld-version.sh > index a463273509b5..84f9fc741f09 100755 > --- a/scripts/ld-version.sh > +++ b/scripts/ld-version.sh > @@ -44,7 +44,10 @@ if [ "$1" = GNU -a "$2" = ld ]; then > elif [ "$1" = GNU -a "$2" = gold ]; then > echo "gold linker is not supported as it is not capable of linking > the kernel proper." >&2 > exit 1 > -elif [ "$1" = LLD ]; then > +elif echo "$*" | grep -q LLD; then > + while [ "$1" != "LLD" ]; do > + shift > + done > version=$2 > min_version=$lld_min_version > name=LLD
You do not need to use grep. How about this? ... else while [ $# -gt 1 -a "$1" != "LLD" ]; do shift done if [ "$1" = LLD ]; then version=$2 min_version=$lld_min_version name=LLD disp_name=LLD else echo "$orig_args: unknown linker" >&2 exit 1 fi fi -- Best Regards Masahiro Yamada