Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Dec 2020 12:25:09 -0400
From:      Mitchell Horne <mhorne@freebsd.org>
To:        Dennis Clarke <dclarke@blastwave.org>
Cc:        freebsd-riscv <freebsd-riscv@freebsd.org>
Subject:   Re: llvm stage in buildworld fails with 368820. Has anyone even tried this ?
Message-ID:  <CADeAsy2cj4-XZdh-oLbaWaeWZ1hc6QgvtD1Ks-w%2BAS78JV-5vw@mail.gmail.com>
In-Reply-To: <3396d30e-a2a1-d585-63f5-83f4e6c2233a@blastwave.org>
References:  <48461668-e8cd-ea55-273c-9f53cd318a1f@blastwave.org> <3396d30e-a2a1-d585-63f5-83f4e6c2233a@blastwave.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Dec 21, 2020 at 10:38 AM Dennis Clarke via freebsd-riscv
<freebsd-riscv@freebsd.org> wrote:
>
>
> Fairly certain that Mr. Horne said to me that no one tries to run a
> buildworld within a RISC-V system and it seems cross-compile is what
> folks are doing. So I am going to assume this is a LLVM/Clang bug and
> not really a bug within the FreeBSD buildworld. At least at this point
> I see no alternative than to keep running my FreeBSD 13.0-CURRENT at
> rev 367349.  Any thoughts ?
>

Hi Dennis,

To be clear, this is not a regression, but your first time attempting
such a build within QEMU, is that correct?

To update this system, you have the option of cross-building world +
kernel on the host, mounting the QEMU disk image, and installing.
Roughly, the instructions to do so are:

# Crossbuild from host
make TARGET=riscv buildworld
make TARGET=riscv KERNCONF=QEMU buildkernel

# Create md(4) disk from QEMU image file
mdconfig -af /path/to/riscv.img
gpart show md0 #show the partition table

# Mount the ufs root filesystem (exact partition number may vary)
mount /dev/md0p3 /mnt

# Update world + kernel
make TARGET=riscv DESTDIR=/mnt installworld
make TARGET=riscv DESTDIR=/mnt installkernel

# Unmount and cleanup
umount /mnt
mdconfig -du 0

The next time you boot riscv.img, it should have an updated world +
kernel. It may seem obvious but your QEMU instance should be shut down
while you do this.

>
> .
> .
> .
> --- _bootstrap-tools-usr.bin/clang/llvm-tblgen ---
> --- CodeGenSchedule.o ---
> c++  -O2 -pipe -fno-common
> -I/usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/clang/libllvm
> -march=rv64imafdc -mabi=lp64d -I/usr/src/head/lib/clang/include
> -I/usr/src/head/contrib/llvm-project/llvm/include
> -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
> -DHAVE_VCS_VERSION_INC
> -DLLVM_DEFAULT_TARGET_TRIPLE=\"riscv64-unknown-freebsd13.0\"
> -DLLVM_HOST_TRIPLE=\"riscv64-unknown-freebsd13.0\"
> -DDEFAULT_SYSROOT=\"/usr/obj/usr/src/head/riscv.riscv64/tmp\"
> -DLLVM_TARGET_ENABLE_RISCV
> -DLLVM_NATIVE_ASMPARSER=LLVMInitializeRISCVAsmParser
> -DLLVM_NATIVE_ASMPRINTER=LLVMInitializeRISCVAsmPrinter
> -DLLVM_NATIVE_DISASSEMBLER=LLVMInitializeRISCVDisassembler
> -DLLVM_NATIVE_TARGET=LLVMInitializeRISCVTarget
> -DLLVM_NATIVE_TARGETINFO=LLVMInitializeRISCVTargetInfo
> -DLLVM_NATIVE_TARGETMC=LLVMInitializeRISCVTargetMC -ffunction-sections
> -fdata-sections -mno-relax -gline-tables-only -MD
> -MF.depend.CodeGenSchedule.o -MTCodeGenSchedule.o
> -Wno-format-zero-length -Qunused-arguments
> -I/usr/obj/usr/src/head/riscv.riscv64/tmp/legacy/usr/include
> -fno-exceptions -fno-rtti -std=c++14 -stdlib=libc++
> -Wno-c++11-extensions   -c
> /usr/src/head/contrib/llvm-project/llvm/utils/TableGen/CodeGenSchedule.cpp
> -o CodeGenSchedule.o
> --- _bootstrap-tools-usr.bin/clang/clang-tblgen ---
> --- clang-tblgen.full ---
> c++ -O2 -pipe -fno-common
> -I/usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/clang/libllvm
> -march=rv64imafdc -mabi=lp64d -I/usr/src/head/lib/clang/include
> -I/usr/src/head/contrib/llvm-project/llvm/include
> -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
> -DHAVE_VCS_VERSION_INC
> -DLLVM_DEFAULT_TARGET_TRIPLE=\"riscv64-unknown-freebsd13.0\"
> -DLLVM_HOST_TRIPLE=\"riscv64-unknown-freebsd13.0\"
> -DDEFAULT_SYSROOT=\"/usr/obj/usr/src/head/riscv.riscv64/tmp\"
> -DLLVM_TARGET_ENABLE_RISCV
> -DLLVM_NATIVE_ASMPARSER=LLVMInitializeRISCVAsmParser
> -DLLVM_NATIVE_ASMPRINTER=LLVMInitializeRISCVAsmPrinter
> -DLLVM_NATIVE_DISASSEMBLER=LLVMInitializeRISCVDisassembler
> -DLLVM_NATIVE_TARGET=LLVMInitializeRISCVTarget
> -DLLVM_NATIVE_TARGETINFO=LLVMInitializeRISCVTargetInfo
> -DLLVM_NATIVE_TARGETMC=LLVMInitializeRISCVTargetMC -ffunction-sections
> -fdata-sections -mno-relax -gline-tables-only -Wno-format-zero-length
> -Qunused-arguments
> -I/usr/obj/usr/src/head/riscv.riscv64/tmp/legacy/usr/include
> -fno-exceptions -fno-rtti -std=c++14 -stdlib=libc++
> -Wno-c++11-extensions  -Wl,--gc-sections -static
> -L/usr/obj/usr/src/head/riscv.riscv64/tmp/legacy/usr/lib -o
> clang-tblgen.full  ASTTableGen.o ClangASTNodesEmitter.o
> ClangASTPropertiesEmitter.o ClangAttrEmitter.o
> ClangCommentCommandInfoEmitter.o
> ClangCommentHTMLNamedCharacterReferenceEmitter.o
> ClangCommentHTMLTagsEmitter.o ClangDataCollectorsEmitter.o
> ClangDiagnosticsEmitter.o ClangOpcodesEmitter.o
> ClangOpenCLBuiltinEmitter.o ClangOptionDocEmitter.o
> ClangSACheckersEmitter.o ClangTypeNodesEmitter.o MveEmitter.o
> NeonEmitter.o SveEmitter.o TableGen.o
> /usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/clang/libllvmminimal/libllvmminimal.a
> -L/usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/libexecinfo
> -lexecinfo
> -L/usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/libelf -lelf
> -L/usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/ncurses/ncursesw
> -lncursesw
> -L/usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/libthr -lpthread
>  -legacy
> ld: error: undefined symbol: llvm::EnableABIBreakingChecks

Seems that LLVM will purposefully cause this link error, according to
the following code block I found:

// One of these two variables will be referenced by a symbol defined in
// llvm-config.h. We provide a link-time (or load time for DSO) failure when
// there is a mismatch in the build configuration of the API client and LLVM.
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
int EnableABIBreakingChecks;
#else int DisableABIBreakingChecks;
#endif

Is this instance a copy of the image I provided you a few weeks back?
If so, it's possible that while building it I took a WITHOUT_CLANG=yes
shortcut and ended up with a mismatched clang and llvm library. I will
see if I can reproduce the same error on a fresh build. If you end up
doing the upgrade steps above, please try the native buildworld again
and let me know if you see the same error.

> >>> referenced by PrettyStackTrace.cpp
> >>>               PrettyStackTrace.o:(.sdata+0x0) in archive
> /usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/clang/libllvmminimal/libllvmminimal.a
> >>> referenced by Signals.cpp
> >>>               Signals.o:(.sdata+0x8) in archive
> /usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/clang/libllvmminimal/libllvmminimal.a
> >>> referenced by Timer.cpp
> >>>               Timer.o:(.sdata+0x28) in archive
> /usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/clang/libllvmminimal/libllvmminimal.a
> c++: 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/head/usr.bin/clang/clang-tblgen
> 1 error
>
> make[3]: stopped in /usr/src/head/usr.bin/clang/clang-tblgen
> --- _bootstrap-tools-usr.bin/clang/llvm-tblgen ---
> real 3234.48
> user 5924.02
> sys 310.00
> ijiraq#
>
> The timestamp there tells you the sort of time needed within a qemu
> instance.  I fired off the buildworld thus :
>
>     /usr/bin/time -p /usr/bin/nice -n +15 make -j 2 buildworld
>
> Concerned that I was tripping over some sort of error caused by
> previous attempts I did destroy the zfs filesystem for /usr/src and
> did a recreate and fresh checkout. No help there.
>
> ijiraq#
> ijiraq# svnlite info
> Path: .
> Working Copy Root Path: /usr/src/head
> URL: https://svn.freebsd.org/base/head
> Relative URL: ^/head
> Repository Root: https://svn.freebsd.org/base
> Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
> Revision: 368820
> Node Kind: directory
> Schedule: normal
> Last Changed Author: lwhsu
> Last Changed Rev: 368820
> Last Changed Date: 2020-12-20 02:59:44 +0000 (Sun, 20 Dec 2020)
>
> ijiraq# uname -apKU
> FreeBSD ijiraq 13.0-CURRENT FreeBSD 13.0-CURRENT #0 r367349: Wed Nov  4
> 22:48:25 UTC 2020
> root@FreeBSD-head-riscv64-build.jail.ci.FreeBSD.org:/usr/obj/usr/src/riscv.riscv64/sys/QEMU
>  riscv riscv64 1300125 1300125
> ijiraq#
>
>
> --
> Dennis Clarke
> RISC-V/SPARC/PPC/ARM/CISC
> UNIX and Linux spoken
> GreyBeard and suspenders optional
>
>
> -------- Forwarded Message --------
> Subject: trying to build from head with 368820 and previous revs always fail
> Date: Sun, 20 Dec 2020 15:33:12 -0500
> From: Dennis Clarke via freebsd-riscv <freebsd-riscv@freebsd.org>
> Reply-To: Dennis Clarke <dclarke@blastwave.org>
> To: freebsd-riscv@freebsd.org
>
>
> buildworld seems to always blow up in the same place :
>
>
> .
> .
> .
> /src/head/lib/clang/include
> -I/usr/src/head/contrib/llvm-project/llvm/include
> -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
> -DHAVE_VCS_VERSION_INC
> -DLLVM_DEFAULT_TARGET_TRIPLE=\"riscv64-unknown-freebsd13.0\"
> -DLLVM_HOST_TRIPLE=\"riscv64-unknown-freebsd13.0\"
> -DDEFAULT_SYSROOT=\"/usr/obj/usr/src/head/riscv.riscv64/tmp\"
> -DLLVM_TARGET_ENABLE_RISCV
> -DLLVM_NATIVE_ASMPARSER=LLVMInitializeRISCVAsmParser
> -DLLVM_NATIVE_ASMPRINTER=LLVMInitializeRISCVAsmPrinter
> -DLLVM_NATIVE_DISASSEMBLER=LLVMInitializeRISCVDisassembler
> -DLLVM_NATIVE_TARGET=LLVMInitializeRISCVTarget
> -DLLVM_NATIVE_TARGETINFO=LLVMInitializeRISCVTargetInfo
> -DLLVM_NATIVE_TARGETMC=LLVMInitializeRISCVTargetMC -ffunction-sections
> -fdata-sections -mno-relax -gline-tables-only -Wno-format-zero-length
> -Qunused-arguments
> -I/usr/obj/usr/src/head/riscv.riscv64/tmp/legacy/usr/include
> -fno-exceptions -fno-rtti -std=c++14 -stdlib=libc++
> -Wno-c++11-extensions  -Wl,--gc-sections -static
> -L/usr/obj/usr/src/head/riscv.riscv64/tmp/legacy/usr/lib -o
> clang-tblgen.full  ASTTableGen.o ClangASTNodesEmitter.o
> ClangASTPropertiesEmitter.o ClangAttrEmitter.o
> ClangCommentCommandInfoEmitter.o
> ClangCommentHTMLNamedCharacterReferenceEmitter.o
> ClangCommentHTMLTagsEmitter.o ClangDataCollectorsEmitter.o
> ClangDiagnosticsEmitter.o ClangOpcodesEmitter.o
> ClangOpenCLBuiltinEmitter.o ClangOptionDocEmitter.o
> ClangSACheckersEmitter.o ClangTypeNodesEmitter.o MveEmitter.o
> NeonEmitter.o SveEmitter.o TableGen.o
> /usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/clang/libllvmminimal/libllvmminimal.a
> -L/usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/libexecinfo
> -lexecinfo
> -L/usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/libelf -lelf
> -L/usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/ncurses/ncursesw
> -lncursesw
> -L/usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/libthr -lpthread
>  -legacy
> ld: error: undefined symbol: llvm::EnableABIBreakingChecks
> >>> referenced by PrettyStackTrace.cpp
> >>>               PrettyStackTrace.o:(.sdata+0x0) in archive
> /usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/clang/libllvmminimal/libllvmminimal.a
> >>> referenced by Signals.cpp
> >>>               Signals.o:(.sdata+0x8) in archive
> /usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/clang/libllvmminimal/libllvmminimal.a
> >>> referenced by Timer.cpp
> >>>               Timer.o:(.sdata+0x28) in archive
> /usr/obj/usr/src/head/riscv.riscv64/tmp/obj-tools/lib/clang/libllvmminimal/libllvmminimal.a
> c++: 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/head/usr.bin/clang/clang-tblgen
> 1 error
>
> make[3]: stopped in /usr/src/head/usr.bin/clang/clang-tblgen
> --- _bootstrap-tools-usr.bin/clang/llvm-tblgen ---
>
>
> any thoughts ?
>
> this is inside a very stable qemu instance.
>
>
> --
> Dennis Clarke
> RISC-V/SPARC/PPC/ARM/CISC
> UNIX and Linux spoken
> GreyBeard and suspenders optional
> _______________________________________________
> freebsd-riscv@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-riscv
> To unsubscribe, send any mail to "freebsd-riscv-unsubscribe@freebsd.org"
> _______________________________________________
> freebsd-riscv@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-riscv
> To unsubscribe, send any mail to "freebsd-riscv-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CADeAsy2cj4-XZdh-oLbaWaeWZ1hc6QgvtD1Ks-w%2BAS78JV-5vw>