From owner-svn-src-all@freebsd.org Mon Dec 14 10:33:28 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5E24C4B596C; Mon, 14 Dec 2020 10:33:28 +0000 (UTC) (envelope-from arichardson.kde@gmail.com) Received: from mail-ed1-f67.google.com (mail-ed1-f67.google.com [209.85.208.67]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Cvd5h22h1z4hvQ; Mon, 14 Dec 2020 10:33:28 +0000 (UTC) (envelope-from arichardson.kde@gmail.com) Received: by mail-ed1-f67.google.com with SMTP id r5so16605510eda.12; Mon, 14 Dec 2020 02:33:28 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=nmWyEIfR/WqvhAq14mS5eVyD3sCbqjCHlmHBfHQNDmI=; b=Go8Khs8R9nUOiu/kT4GEvthdX0+K5IBiJU1i+UVPX0Q42p78Db9GR3snJ2i0KY3fFV 5NChyhpyBh0rsvTrpqZl1o+Pejn0zrPlGs5HqDwKkMoHra13TYt4hlyH4xR1i7YjPhxw wnPWJQdrnO3ps+Rxh5Ex1pNyhhPZVPql+Mtx3Jhirlt3eg1cmsuAoWeNQy9rtS8BFcMi 0x2cggCj3Taln9ZI4dGi5ulAgdV4DZ2Aw1WocIs6f0I9gBSNVDMUNI2BkVzJ4O5zF+W7 aOlTapcML+zlPnCN655AONRLylIi1udSmzBWI7yieWHQKbE/aljuc1ed6UO0z4T3kmtN e3Fw== X-Gm-Message-State: AOAM530t/LLSYgxJTfFHojP6qija1W7WzQGt9hXkwICQJdqCicY68QQ6 C7a0C/+8AX7fMIZ6hW3LU9cSjAoHn5KZ9+d/ X-Google-Smtp-Source: ABdhPJwg5FJlrzgCneCeyQjvLCiIVvUkpr+8GJQzKnTkOvz/upgDtelTptJwsJY/X4A5oYsa2/P+mQ== X-Received: by 2002:aa7:cad2:: with SMTP id l18mr24125886edt.183.1607942006375; Mon, 14 Dec 2020 02:33:26 -0800 (PST) Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com. [209.85.128.44]) by smtp.gmail.com with ESMTPSA id n16sm15418037edq.62.2020.12.14.02.33.26 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 14 Dec 2020 02:33:26 -0800 (PST) Received: by mail-wm1-f44.google.com with SMTP id a6so13235169wmc.2; Mon, 14 Dec 2020 02:33:26 -0800 (PST) X-Received: by 2002:a1c:2483:: with SMTP id k125mr27247441wmk.67.1607942005664; Mon, 14 Dec 2020 02:33:25 -0800 (PST) MIME-Version: 1.0 References: <202008251330.07PDU4WQ055570@repo.freebsd.org> In-Reply-To: From: Alexander Richardson Date: Mon, 14 Dec 2020 10:33:14 +0000 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r364761 - in head: share/mk sys/conf sys/modules/cloudabi32 sys/modules/cloudabi64 sys/modules/linux sys/modules/linux64 To: Ryan Libby Cc: src-committers , svn-src-all , svn-src-head , Brooks Davis , Ed Maste Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4Cvd5h22h1z4hvQ X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_FROM(0.00)[] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Dec 2020 10:33:28 -0000 On Sun, 13 Dec 2020 at 19:22, Ryan Libby wrote: > > On Tue, Aug 25, 2020 at 6:30 AM Alex Richardson wrote: > > > > Author: arichardson > > Date: Tue Aug 25 13:30:03 2020 > > New Revision: 364761 > > URL: https://svnweb.freebsd.org/changeset/base/364761 > > > > Log: > > Pass -fuse-ld=/path/to/ld if ${LD} != "ld" > > > > This is needed so that setting LD/XLD is not ignored when linking with $CC > > instead of directly using $LD. Currently only clang accepts an absolute > > path for -fuse-ld= (Clang 12+ will add a new --ld-path flag), so we now > > warn when building with GCC and $LD != "ld" since that might result in the > > wrong linker being used. > > > > We have been setting XLD=/path/to/cheri/ld.lld in CheriBSD for a long time and > > used a similar version of this patch to avoid linking with /usr/bin/ld. > > This change is also required when building FreeBSD on an Ubuntu with Clang: > > In that case we set XCC=/usr/lib/llvm-10/bin/clang and since > > /usr/lib/llvm-10/bin/ does not contain a "ld" binary the build fails with > > `clang: error: unable to execute command: Executable "ld" doesn't exist!` > > unless we pass -fuse-ld=/usr/lib/llvm-10/bin/ld.lld. > > > > This change passes -fuse-ld instead of copying ${XLD} to WOLRDTMP/bin/ld > > since then we would have to ensure that this file does not exist while > > building the bootstrap tools. The cross-linker might not be compatible with > > the host linker (e.g. when building on macos: host-linker= Mach-O /usr/bin/ld, > > cross-linker=LLVM ld.lld). > > > > Reviewed By: brooks, emaste > > Differential Revision: https://reviews.freebsd.org/D26055 > > > > Modified: > > head/share/mk/bsd.sys.mk > > head/sys/conf/kern.mk > > head/sys/conf/kern.post.mk > > head/sys/modules/cloudabi32/Makefile > > head/sys/modules/cloudabi64/Makefile > > head/sys/modules/linux/Makefile > > head/sys/modules/linux64/Makefile > > > > Modified: head/share/mk/bsd.sys.mk > > ============================================================================== > > --- head/share/mk/bsd.sys.mk Tue Aug 25 13:29:57 2020 (r364760) > > +++ head/share/mk/bsd.sys.mk Tue Aug 25 13:30:03 2020 (r364761) > > @@ -284,6 +284,19 @@ CFLAGS+= ERROR-tried-to-rebuild-during-make-install > > .endif > > .endif > > > > +# Please keep this if in sync with kern.mk > > +.if ${LD} != "ld" && (${CC:[1]:H} != ${LD:[1]:H} || ${LD:[1]:T} != "ld") > > +# Add -fuse-ld=${LD} if $LD is in a different directory or not called "ld". > > +# Note: Clang 12+ will prefer --ld-path= over -fuse-ld=. > > +.if ${COMPILER_TYPE} == "clang" > > +LDFLAGS+= -fuse-ld=${LD:[1]} > > +.else > > +# GCC does not support an absolute path for -fuse-ld so we just print this > > +# warning instead and let the user add the required symlinks. > > +.warning LD (${LD}) is not the default linker for ${CC} but -fuse-ld= is not supported > > FYI: This causes a huge amount of wrong and irrelevant warnings in the > build log for gcc cross compilers with XLD set, such as the toolchain > from pkg install amd64-xtoolchain-gcc. That causes XLD to be set (via > CROSS_BINUTILS_PREFIX in Makefile.inc1) to a path which is indeed the > default linker for the cross compiler. The warnings are harmless, but > annoying. Sorry, I don't have a suggestion for a better method. > > You can see an example in the build log from a gcc build in CI here > (although note that the build currently fails for unrelated reasons): > https://ci.freebsd.org/job/FreeBSD-head-amd64-gcc6_build/3131 > Hi Ryan, I think there are (at least) 3 options to fix/silence this warning: 1) The easiest option would be to turn off this warning for GCC builds and hope that the user-supplied LD matches the one that GCC will invoke. 2) Another option could be to ask GCC for what it thinks the default linker is and use that in the toolchain file, and update the check to use `${CC} --print-prog-name ld` instead of (${CC:[1]:H} != ${LD:[1]:H} || ${LD:[1]:T} != "ld") $ /usr/local/bin/mips-unknown-freebsd12.1-gcc6 --print-prog-name ld /usr/local/bin/mips-unknown-freebsd12.1-ld $ /usr/local/bin/mips-unknown-freebsd12.1-gcc6 --print-prog-name ld.bfd /usr/local/lib/gcc/mips-unknown-freebsd12.1/6.5.0/../../../../mips-unknown-freebsd12.1/bin/ld.bfd 2a) We could also use ${CC} -xc /dev/null -o /dev/null -Wl,--version` to detect linker features in bsd.linker.mk and check if that matches the value returned by ${LD} --version. 3) Change the xtoolchain installed a gcc-N hardlink in /usr/local/-unknown-freebsd/bin and use that as ${CC}. It would match then the ld directory and the existing check could work. I'd personally opt for 1 since I don't build with GCC and don't have time right now to implement the other options. Let me know what you think. Thanks, Alex > > +.endif > > +.endif > > + > > # Tell bmake not to mistake standard targets for things to be searched for > > # or expect to ever be up-to-date. > > PHONY_NOTMAIN = analyze afterdepend afterinstall all beforedepend beforeinstall \ > > > > Modified: head/sys/conf/kern.mk > > ============================================================================== > > --- head/sys/conf/kern.mk Tue Aug 25 13:29:57 2020 (r364760) > > +++ head/sys/conf/kern.mk Tue Aug 25 13:30:03 2020 (r364761) > > @@ -270,6 +270,22 @@ CFLAGS+= -std=iso9899:1999 > > CFLAGS+= -std=${CSTD} > > .endif # CSTD > > > > +# Please keep this if in sync with bsd.sys.mk > > +.if ${LD} != "ld" && (${CC:[1]:H} != ${LD:[1]:H} || ${LD:[1]:T} != "ld") > > +# Add -fuse-ld=${LD} if $LD is in a different directory or not called "ld". > > +# Note: Clang 12+ will prefer --ld-path= over -fuse-ld=. > > +.if ${COMPILER_TYPE} == "clang" > > +# Note: unlike bsd.sys.mk we can't use LDFLAGS here since that is used for the > > +# flags required when linking the kernel. We don't need those flags when > > +# building the vdsos. However, we do need -fuse-ld, so use ${CCLDFLAGS} instead. > > +CCLDFLAGS+= -fuse-ld=${LD:[1]} > > +.else > > +# GCC does not support an absolute path for -fuse-ld so we just print this > > +# warning instead and let the user add the required symlinks. > > +.warning LD (${LD}) is not the default linker for ${CC} but -fuse-ld= is not supported > > +.endif > > +.endif > > + > > # Set target-specific linker emulation name. > > LD_EMULATION_aarch64=aarch64elf > > LD_EMULATION_amd64=elf_x86_64_fbsd > > > > Modified: head/sys/conf/kern.post.mk > > ============================================================================== > > --- head/sys/conf/kern.post.mk Tue Aug 25 13:29:57 2020 (r364760) > > +++ head/sys/conf/kern.post.mk Tue Aug 25 13:30:03 2020 (r364761) > > @@ -228,7 +228,7 @@ kernel-clean: > > # in the a.out ld. For now, this works. > > hack.pico: Makefile > > :> hack.c > > - ${CC} -shared ${CFLAGS} -nostdlib hack.c -o hack.pico > > + ${CC} ${CCLDFLAGS} -shared ${CFLAGS} -nostdlib hack.c -o hack.pico > > rm -f hack.c > > > > offset.inc: $S/kern/genoffset.sh genoffset.o > > > > Modified: head/sys/modules/cloudabi32/Makefile > > ============================================================================== > > --- head/sys/modules/cloudabi32/Makefile Tue Aug 25 13:29:57 2020 (r364760) > > +++ head/sys/modules/cloudabi32/Makefile Tue Aug 25 13:30:03 2020 (r364761) > > @@ -33,7 +33,7 @@ BINARY_ARCHITECTURE=i386 > > .endif > > > > cloudabi32_vdso.o: ${VDSO_SRCS} > > - ${CC} -x assembler-with-cpp -m32 -shared -nostdinc -nostdlib \ > > + ${CC} ${CCLDFLAGS} -x assembler-with-cpp -m32 -shared -nostdinc -nostdlib \ > > -Wl,-T${SYSDIR}/compat/cloudabi/cloudabi_vdso.lds \ > > ${VDSO_SRCS} -o ${.TARGET} > > > > > > Modified: head/sys/modules/cloudabi64/Makefile > > ============================================================================== > > --- head/sys/modules/cloudabi64/Makefile Tue Aug 25 13:29:57 2020 (r364760) > > +++ head/sys/modules/cloudabi64/Makefile Tue Aug 25 13:30:03 2020 (r364761) > > @@ -25,7 +25,7 @@ BINARY_ARCHITECTURE=i386 > > .endif > > > > cloudabi64_vdso.o: ${VDSO_SRCS} > > - ${CC} -x assembler-with-cpp -shared -nostdinc -nostdlib \ > > + ${CC} ${CCLDFLAGS} -x assembler-with-cpp -shared -nostdinc -nostdlib \ > > -Wl,-T${SYSDIR}/compat/cloudabi/cloudabi_vdso.lds \ > > ${VDSO_SRCS} -o ${.TARGET} > > > > > > Modified: head/sys/modules/linux/Makefile > > ============================================================================== > > --- head/sys/modules/linux/Makefile Tue Aug 25 13:29:57 2020 (r364760) > > +++ head/sys/modules/linux/Makefile Tue Aug 25 13:30:03 2020 (r364761) > > @@ -54,7 +54,7 @@ linux${SFX}_assym.h: linux${SFX}_genassym.o > > sh ${SYSDIR}/kern/genassym.sh linux${SFX}_genassym.o > ${.TARGET} > > > > linux${SFX}_locore.o: linux${SFX}_assym.h assym.inc > > - ${CC} -x assembler-with-cpp -DLOCORE -m32 -shared -s \ > > + ${CC} ${CCLDFLAGS} -x assembler-with-cpp -DLOCORE -m32 -shared -s \ > > -pipe -I. -I${SYSDIR} ${WERROR} -Wall -fno-common -nostdinc -nostdlib \ > > -fno-omit-frame-pointer -fPIC \ > > -Wl,-T${SRCTOP}/sys/${MACHINE_CPUARCH}/linux${SFX}/${VDSO}.lds.s \ > > > > Modified: head/sys/modules/linux64/Makefile > > ============================================================================== > > --- head/sys/modules/linux64/Makefile Tue Aug 25 13:29:57 2020 (r364760) > > +++ head/sys/modules/linux64/Makefile Tue Aug 25 13:30:03 2020 (r364761) > > @@ -30,7 +30,7 @@ linux_assym.h: linux_genassym.o > > sh ${SYSDIR}/kern/genassym.sh linux_genassym.o > ${.TARGET} > > > > linux_locore.o: linux_locore.asm linux_assym.h > > - ${CC} -x assembler-with-cpp -DLOCORE -shared -mcmodel=small \ > > + ${CC} ${CCLDFLAGS} -x assembler-with-cpp -DLOCORE -shared -mcmodel=small \ > > -pipe -I. -I${SYSDIR} ${WERROR} -Wall -fno-common -fPIC -nostdinc \ > > -Wl,-T${SRCTOP}/sys/${MACHINE}/linux/${VDSO}.lds.s \ > > -Wl,-soname=${VDSO}.so.1,-warn-common -nostdlib \