Cross built head -r309179 TARGET_ARCH=powerpc64 with clang 3.9.0/powerpc64-binutils based buildworld operates; but fails "self-hosted buildworld" for undefined references

Mark Millard markmi at dsl-only.net
Sat Dec 3 05:26:26 UTC 2016


On 2016-Dec-2, at 7:38 PM, Kevin Bowling <kevin.bowling at kev009.com> wrote:

> Interesting, that is quite a lot of progress if it boots with a crossbuild.  I wonder if editing /usr/src/contrib/llvm/lib/Support/Atomic.cpp so the GNU_ATOMICS path is taken will work around these errors until someone more knowledgeable can comment.

This is only buildworld, not buildkernel.

Roman Divacky privately sent a note:

> On 2016-Dec-2, at 2:52 AM, Roman Divacky <rdivacky at freebsd.org> wrote:
> 
> Can you try to add Atomic.cpp to lib/clang/libllvmminimal/Makefile ?

I have a buildworld (WITHOUT_LIB32= )on the powerpc64 that
just finished while editing this note. It is based on the
following change:

# svnlite diff /usr/src/lib/clang/libllvmminimal/Makefile
Index: /usr/src/lib/clang/libllvmminimal/Makefile
===================================================================
--- /usr/src/lib/clang/libllvmminimal/Makefile	(revision 309179)
+++ /usr/src/lib/clang/libllvmminimal/Makefile	(working copy)
@@ -7,6 +7,7 @@
 
 SRCDIR=		lib
 SRCS+=		Support/APInt.cpp
+SRCS+=		Support/Atomic.cpp
 SRCS+=		Support/CommandLine.cpp
 SRCS+=		Support/ConvertUTF.c
 SRCS+=		Support/ConvertUTFWrapper.cpp

(So those "X86..." names might not be what the names
suggested to me.)

I'll try installing and rebooting somewhat later.

One known area is the need to use WITHOUT_LIB32= because
it rejects assembler notation that is in use. (I wonder
of those "X86" file names might be associated with this.)

Another known area is needing to avoid things that depend
on C++ exception handling (for any exceptions that actually
occur). Even:

#include <exception>

int main(void)
{
    try { throw std::exception(); }
    catch (std::exception& e) {}
    return 0;
}

fails (calls abort). The buildworld's that I've
done are based on implicit WITHOUT_LLVM_LIBUNWIND
so far.

clang 3.9.0 builds of devel/kyua are not able to run
usefully yet because of the extensive C++ exception
usage.

The assembler notation issue is also involved if one
tries to buildkernel as I remember.

I had to use src.conf material to force clang 3.9.0
to use devel/binutils (powerpc64) or
devel/powerpc64-binutils (amd64, possibly an
alternative on powerpc64 as well) instead of using 
bootstrapped system utils. This involved making
sure that -B would make internal util use in
clang/clang++ also redirect.

Based on other's reports of having to revert them
I've got:

-r416639 of devel/binutils
-r407342 of devel/powerpc64-binutils
-r413189 of devel/powerpc64-gcc

(devel/binutils used on powerpc64,
devel/powerpc64-binutils used on amd64,
devel/powerpc64-gcc not used in this
activity but I have it around, both on
amd64 and on powerpc64.)

These reverts avoid 4.27 vintage materials for them.
I'm not sure of the powerpc vs. powerpc64 vs. both
status for this and simply decided to avoid the
issue for now, testing other aspects of things
since the binutils vintage issue was known to
others and already public.


===
Mark Millard
markmi at dsl-only.net

Older material. . .

On Mon, Nov 28, 2016 at 4:02 AM, Mark Millard <markmi at dsl-only.net> wrote:
> [The powerpc64 self-hosted buildworld failure is for undefined
> references to llvm::sys::CompareAndSwap and
> llvm::sys::MemoryFence. See later below.]
> 
> 
> I cross built TARGET_ARCH=powerpc64 head -r309179 via . . .
> (has workaround matching -r309201 and my PowerMac G5 booting hack)
> 
> buildworld via clang 3.9.0 and it using powerpc64-binutils
> buildkernel via powerpc-xtoolchain-gcc (and so powerpc64-binutils)
> 
> and installed and booted the combination:
> 
> > # uname -apKU
> > FreeBSD FBSDG5L 12.0-CURRENT FreeBSD 12.0-CURRENT #1 r309179M: Mon Nov 28 01:23:26 PST 2016     markmi at FreeBSDx64:/usr/obj/powerpc64vtsc_xtoolchain_kernel/powerpc.powerpc64/usr/src/sys/GENERIC64vtsc-NODBG  powerpc powerpc64 1200017 1200017
> 
> 
> > # clang --version
> > FreeBSD clang version 3.9.0 (tags/RELEASE_390/final 280324) (based on LLVM 3.9.0)
> > Target: powerpc64-unknown-freebsd12.0
> > Thread model: posix
> > InstalledDir: /usr/bin
> 
> 
> I then attempted a self-hosted buildworld but it failed with:
> 
> > Building /usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/usr/src/usr.bin/clang/clang-tblgen/clang-tblgen.full
> > --- clang-tblgen.full ---
> > /usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/usr/src/lib/clang/libllvmminimal/libllvmminimal.a(ManagedStatic.o): In function `getManagedStaticMutex()':
> > /usr/src/contrib/llvm/lib/Support/ManagedStatic.cpp:(.text+0x1c4): undefined reference to `llvm::sys::CompareAndSwap(unsigned int volatile*, unsigned int, unsigned int)'
> > /usr/src/contrib/llvm/lib/Support/ManagedStatic.cpp:(.text+0x1d8): undefined reference to `llvm::sys::MemoryFence()'
> > /usr/src/contrib/llvm/lib/Support/ManagedStatic.cpp:(.text+0x220): undefined reference to `llvm::sys::MemoryFence()'
> > clang++: error: linker command failed with exit code 1 (use -v to see invocation)
> > *** [clang-tblgen.full] Error code 1
> >
> > make[3]: stopped in /usr/src/usr.bin/clang/clang-tblgen
> > .ERROR_TARGET='clang-tblgen.full'
> > .ERROR_META_FILE='/usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/usr/src/usr.bin/clang/clang-tblgen/clang-tblgen.full.meta'
> > .MAKE.LEVEL='3'
> > MAKEFILE=''
> > .MAKE.MODE='meta missing-filemon=yes missing-meta=yes silent=yes verbose'
> > .CURDIR='/usr/src/usr.bin/clang/clang-tblgen'
> > .MAKE='make'
> > .OBJDIR='/usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/usr/src/usr.bin/clang/clang-tblgen'
> > .TARGETS='all'
> > DESTDIR=''
> > LD_LIBRARY_PATH=''
> > MACHINE='powerpc'
> > MACHINE_ARCH='powerpc64'
> > MAKEOBJDIRPREFIX='/usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp'
> > MAKESYSPATH='/usr/src/share/mk'
> > MAKE_VERSION='20160818'
> > PATH='/usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/legacy/usr/sbin:/usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/legacy/usr/bin:/usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/legacy/bin:/sbin:/bin:/usr/sbin:/usr/bin'
> > SRCTOP='/usr/src'
> > OBJTOP='/usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/usr/src'
> > .MAKE.MAKEFILES='/usr/src/share/mk/sys.mk /usr/src/share/mk/local.sys.env.mk /usr/src/share/mk/src.sys.env.mk /root/src.configs/src.conf.powerpc64-clang_altbinutils-bootstrap.powerpc64-host /usr/src/share/mk/bsd.mkopt.mk /usr/src/share/mk/bsd.suffixes.mk /root/src.configs/make.conf /usr/src/share/mk/local.sys.mk /usr/src/share/mk/src.sys.mk /dev/null /usr/src/usr.bin/clang/clang-tblgen/Makefile /usr/src/usr.bin/clang/llvm.prog.mk /usr/src/lib/clang/llvm.pre.mk /usr/src/lib/clang/llvm.build.mk /usr/src/tools/build/mk/bsd.prog.mk /usr/src/share/mk/bsd.prog.mk /usr/src/share/mk/bsd.init.mk /usr/src/share/mk/bsd.opts.mk /usr/src/share/mk/bsd.cpu.mk /usr/src/share/mk/local.init.mk /usr/src/share/mk/src.init.mk /usr/src/usr.bin/clang/clang-tblgen/../Makefile.inc /usr/src/usr.bin/clang/clang-tblgen/../../Makefile.inc /usr/src/share/mk/bsd.own.mk /usr/src/share/mk/bsd.compiler.mk /usr/src/share/mk/bsd.compiler.mk /usr/src/share/mk/bsd.libnames.mk /usr/src/share/mk/src.libnames.mk /usr/src/
>  share/mk/src.opts.mk /usr/src/share/mk/bsd.nls.mk /usr/src/share/mk/bsd.confs.mk /usr/src/share/mk/bsd.files.mk /usr/src/share/mk/bsd.incs.mk /usr/src/share/mk/bsd.links.mk /usr/src/share/mk/bsd.dep.mk /usr/src/share/mk/bsd.clang-analyze.mk /usr/src/share/mk/bsd.obj.mk /usr/src/share/mk/bsd.subdir.mk /usr/src/share/mk/bsd.sys.mk /usr/src/tools/build/mk/Makefile.boot'
> > .PATH='. /usr/src/usr.bin/clang/clang-tblgen /usr/src/contrib/llvm/tools/clang/utils/TableGen'
> > 1 error
> 
> . . .
> 
> 
> 
> 
> > # less /usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/usr/src/usr.bin/clang/clang-tblgen/clang-tblgen.full.meta
> > # Meta data file /usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/usr/src/usr.bin/clang/clang-tblgen/clang-tblgen.full.meta
> > CMD /usr/bin/clang++ -B /usr/local/powerpc64-freebsd/bin/ -O2 -pipe -I/usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/usr/src/lib/clang/libllvm -I/usr/src/lib/clang/include -I/usr/src/contrib/llvm/include -DLLVM_ON_UNIX -DLLVM_ON_FREEBSD -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DLLVM_DEFAULT_TARGET_TRIPLE=\"powerpc64-unknown-freebsd12.0\" -DLLVM_HOST_TRIPLE=\"powerpc64-unknown-freebsd12.0\" -DDEFAULT_SYSROOT=\"/usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp\" -g -Qunused-arguments -I/usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/legacy/usr/include -std=c++11 -fno-exceptions -fno-rtti -stdlib=libc++ -Wno-c++11-extensions  -static -L/usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/legacy/usr/lib -o clang-tblgen.full  ClangASTNodesEmitter.o ClangAttrEmitter.o ClangCommentCommandInfoEmitter.o ClangCommentHTMLNamedCharacterReferenceEmitter.o ClangCommentHTMLTagsEmit
>  ter.o ClangDiagnosticsEmitter.o ClangSACheckersEmitter.o NeonEmitter.o TableGen.o /usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/usr/src/lib/clang/libllvmminimal/libllvmminimal.a  -lncursesw  -lpthread -legacy
> > CWD /usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/usr/src/usr.bin/clang/clang-tblgen
> > TARGET clang-tblgen.full
> > -- command output --
> > /usr/obj/powerpc64vtsc_clang_altbinutils_world/powerpc.powerpc64/usr/src/tmp/usr/src/lib/clang/libllvmminimal/libllvmminimal.a(ManagedStatic.o): In function `getManagedStaticMutex()':
> > /usr/src/contrib/llvm/lib/Support/ManagedStatic.cpp:(.text+0x1c4): undefined reference to `llvm::sys::CompareAndSwap(unsigned int volatile*, unsigned int, unsigned int)'
> > /usr/src/contrib/llvm/lib/Support/ManagedStatic.cpp:(.text+0x1d8): undefined reference to `llvm::sys::MemoryFence()'
> > /usr/src/contrib/llvm/lib/Support/ManagedStatic.cpp:(.text+0x220): undefined reference to `llvm::sys::MemoryFence()'
> > clang++: error: linker command failed with exit code 1 (use -v to see invocation)
> > *** Error code 1
> . . .
> 
> 
> 
> > # svnlite info /usr/src/ | grep "Re[lpv]"
> > Relative URL: ^/head
> > Repository Root: https://svn0.us-west.freebsd.org/base
> > Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
> > Revision: 309179
> > Last Changed Rev: 309179
> 
> 
> ===
> Mark Millard
> markmi at dsl-only.net



More information about the freebsd-toolchain mailing list