Date: Mon, 30 Dec 2019 09:33:56 -0800 From: Mark Millard <marklmi@yahoo.com> To: FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>, FreeBSD Toolchain <freebsd-toolchain@freebsd.org> Subject: Building head -r356187 for powerpc64 via devel/freebsd-gcc9 fails: powerpc64-unknown-freebsd13.0-ld: over 480 cpu minutes on ThreadRipper 1950X Message-ID: <7CAD1629-A16F-4D7E-898A-5C06CAC4E0AF@yahoo.com> References: <7CAD1629-A16F-4D7E-898A-5C06CAC4E0AF.ref@yahoo.com>
next in thread | previous in thread | raw e-mail | index | archive | help
There are two nearly 100% cpu usage instances of powerpc64-unknown-freebsd13.0-ld , each with over 480 cpu minutes, one for clang.full and one for lld.full . (amd64->powerpc64 cross build.) The below shows the file system view of the status after all that time: 0 size .full files. # ls -ldTt = /usr/obj/powerpc64vtsc_xtoolchain-gcc/powerpc.powerpc64/usr/src/powerpc.po= werpc64/usr.bin/clang/clang/clang.full* | head -rw-r--r-- 1 root wheel 3071 Dec 30 00:30:02 2019 = /usr/obj/powerpc64vtsc_xtoolchain-gcc/powerpc.powerpc64/usr/src/powerpc.po= werpc64/usr.bin/clang/clang/clang.full.meta -rw-r--r-- 1 root wheel 0 Dec 30 00:29:32 2019 = /usr/obj/powerpc64vtsc_xtoolchain-gcc/powerpc.powerpc64/usr/src/powerpc.po= werpc64/usr.bin/clang/clang/clang.full # ls -ldTt = /usr/obj/powerpc64vtsc_xtoolchain-gcc/powerpc.powerpc64/usr/src/powerpc.po= werpc64/usr.bin/clang/clang/clang.full* | head -rw-r--r-- 1 root wheel 3071 Dec 30 00:30:02 2019 = /usr/obj/powerpc64vtsc_xtoolchain-gcc/powerpc.powerpc64/usr/src/powerpc.po= werpc64/usr.bin/clang/clang/clang.full.meta -rw-r--r-- 1 root wheel 0 Dec 30 00:29:32 2019 = /usr/obj/powerpc64vtsc_xtoolchain-gcc/powerpc.powerpc64/usr/src/powerpc.po= werpc64/usr.bin/clang/clang/clang.full Attaching to one of them with gdb shows (I build ports optimized but with symbols generally): (gdb) bt #0 0x000000000035431d in ppc64_elf_inline_plt (info=3D<optimized out>) = at elf64-ppc.c:7473 #1 0x000000000032acb0 in ppc_before_allocation () at = eelf64ppc_fbsd.c:370 #2 0x0000000000319651 in lang_process () at ldlang.c:7678 #3 0x00000000003208d8 in main (argc=3D<optimized out>, argv=3D<optimized = out>) at ./ldmain.c:441 ppc64_elf_inline_plt does not return (finish does not stop on its own). Using step shows: (gdb) step 7471 in elf64-ppc.c (gdb)=20 7473 in elf64-ppc.c (gdb)=20 7471 in elf64-ppc.c (gdb)=20 7473 in elf64-ppc.c . . . Looking at the instruction level: (gdb) display/i $pc 1: x/i $pc =3D> 0x35431d <ppc64_elf_inline_plt+557>: jne 0x354310 = <ppc64_elf_inline_plt+544> (gdb) nexti 7471 in elf64-ppc.c 1: x/i $pc =3D> 0x354310 <ppc64_elf_inline_plt+544>: mov 0x8(%r13),%r12 (gdb)=20 7473 in elf64-ppc.c 1: x/i $pc =3D> 0x354314 <ppc64_elf_inline_plt+548>: mov %r12d,%eax (gdb)=20 0x0000000000354317 7473 in elf64-ppc.c 1: x/i $pc =3D> 0x354317 <ppc64_elf_inline_plt+551>: or $0x2,%eax (gdb)=20 0x000000000035431a 7473 in elf64-ppc.c 1: x/i $pc =3D> 0x35431a <ppc64_elf_inline_plt+554>: cmp $0x7a,%eax (gdb)=20 0x000000000035431d 7473 in elf64-ppc.c 1: x/i $pc =3D> 0x35431d <ppc64_elf_inline_plt+557>: jne 0x354310 = <ppc64_elf_inline_plt+544> (gdb)=20 7471 in elf64-ppc.c 1: x/i $pc =3D> 0x354310 <ppc64_elf_inline_plt+544>: mov 0x8(%r13),%r12 (gdb)=20 7473 in elf64-ppc.c 1: x/i $pc =3D> 0x354314 <ppc64_elf_inline_plt+548>: mov %r12d,%eax (gdb)=20 0x0000000000354317 7473 in elf64-ppc.c 1: x/i $pc =3D> 0x354317 <ppc64_elf_inline_plt+551>: or $0x2,%eax (gdb)=20 0x000000000035431a 7473 in elf64-ppc.c 1: x/i $pc =3D> 0x35431a <ppc64_elf_inline_plt+554>: cmp $0x7a,%eax (gdb)=20 0x000000000035431d 7473 in elf64-ppc.c 1: x/i $pc =3D> 0x35431d <ppc64_elf_inline_plt+557>: jne 0x354310 = <ppc64_elf_inline_plt+544> . . . To do the experiment I built devel/freebsd-gcc9 based on: ( ports at -r520539 ) # svnlite diff /usr/ports/devel/freebsd-gcc9/ Index: /usr/ports/devel/freebsd-gcc9/Makefile =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- /usr/ports/devel/freebsd-gcc9/Makefile (revision 520539) +++ /usr/ports/devel/freebsd-gcc9/Makefile (working copy) @@ -53,6 +53,10 @@ --with-as=3D${LOCALBASE}/bin/${BU_PREFIX}-as \ --with-ld=3D${LOCALBASE}/bin/${BU_PREFIX}-ld =20 +.if ${TARGETARCH} =3D=3D powerpc64 +CONFIGURE_ARGS+=3D --with-abi=3Delfv2 +.endif + ALL_TARGET=3D all-gcc INSTALL_TARGET=3D install-gcc =20 (So I forced elfv2 for powerpc64.) I'm also using WITHOUT_LIB32 to avoid the the forced bss-plt that ends up involved: It stops the build: # svnlite diff /usr/src/share/mk/bsd.cpu.mk=20 Index: /usr/src/share/mk/bsd.cpu.mk =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- /usr/src/share/mk/bsd.cpu.mk (revision 356187) +++ /usr/src/share/mk/bsd.cpu.mk (working copy) @@ -421,7 +421,7 @@ # normal builds works when CROSS_BINUTILS_PREFIX and could be removed # when LLD PowerPC 32 bit support is completed .if defined(CROSS_BINUTILS_PREFIX) -LD_BFD=3D${LOCALBASE}/bin/${CROSS_BINUTILS_PREFIX}-ld.bfd +LD_BFD=3D${CROSS_BINUTILS_PREFIX}ld.bfd .else LD_BFD=3D${OBJTOP}/tmp/usr/bin/ld.bfd .endif (The above change used a working file path.) I used: # more ~/src.configs/src.conf.powerpc64-xtoolchain-gcc.amd64-host=20 GCCVERSION=3D9 TO_TYPE=3Dpowerpc64 TOOLS_TO_TYPE=3D${TO_TYPE} VERSION_CONTEXT=3D13.0 # KERNCONF=3DGENERIC64vtsc-NODBG TARGET=3Dpowerpc .if ${.MAKE.LEVEL} =3D=3D 0 TARGET_ARCH=3D${TO_TYPE} .export TARGET_ARCH .endif # WITHOUT_CROSS_COMPILER=3D WITHOUT_SYSTEM_COMPILER=3D WITHOUT_SYSTEM_LINKER=3D # WITH_LLVM_LIBUNWIND=3D WITH_LIBCPLUSPLUS=3D WITHOUT_LLD_BOOTSTRAP=3D WITHOUT_BINUTILS_BOOTSTRAP=3D WITHOUT_ELFTOOLCHAIN_BOOTSTRAP=3D WITHOUT_LLVM_TARGET_ALL=3D WITHOUT_CLANG_BOOTSTRAP=3D WITH_CLANG=3D WITH_CLANG_IS_CC=3D WITH_CLANG_FULL=3D WITH_CLANG_EXTRAS=3D WITH_LLD=3D WITH_LLD_IS_LD=3D WITHOUT_BINUTILS=3D #WITH_PORT_BASE_BINUTILS=3D # Note: LLDB fails to build (link). WITHOUT_LLDB=3D # WITH_BOOT=3D # # Fails to build because of forced bss-plt use. WITHOUT_LIB32=3D # LOADER_DEFAULT_INTERP=3D4th # WITHOUT_GCC_BOOTSTRAP=3D WITHOUT_GCC=3D WITHOUT_GCC_IS_CC=3D WITHOUT_GNUCXX=3D # NO_WERROR=3D # #WERROR=3D MALLOC_PRODUCTION=3D # # Avoid stripping but do not control host -g status as well: DEBUG_FLAGS+=3D # WITH_REPRODUCIBLE_BUILD=3D WITH_DEBUG_FILES=3D # #XCFLAGS+=3D -gdwarf-2 # # For TO (so-called "cross") stages . . . # So-called-cross via freebsd-gcc${GCCVERSION}@${TO_TYPE} # TOOLS_TO_TYPE based on freebsd-gcc${GCCVERSION}@${TO_TYPE} related = binutils. . . # CROSS_TOOLCHAIN=3D${TO_TYPE}-gcc${GCCVERSION} X_COMPILER_TYPE=3Dgcc = CROSS_BINUTILS_PREFIX=3D/usr/local/${TOOLS_TO_TYPE}-unknown-freebsd${VERSI= ON_CONTEXT}/bin/ .if ${.MAKE.LEVEL} =3D=3D 0 = XCC=3D/usr/local/bin/${TOOLS_TO_TYPE}-unknown-freebsd${VERSION_CONTEXT}-gc= c${GCCVERSION} = XCXX=3D/usr/local/bin/${TOOLS_TO_TYPE}-unknown-freebsd${VERSION_CONTEXT}-g= ++${GCCVERSION} = XCPP=3D/usr/local/bin/${TOOLS_TO_TYPE}-unknown-freebsd${VERSION_CONTEXT}-c= pp${GCCVERSION} .export XCC .export XCXX .export XCPP XAS=3D/usr/local/${TOOLS_TO_TYPE}-unknown-freebsd${VERSION_CONTEXT}/bin/as= XAR=3D/usr/local/${TOOLS_TO_TYPE}-unknown-freebsd${VERSION_CONTEXT}/bin/ar= XLD=3D/usr/local/${TOOLS_TO_TYPE}-unknown-freebsd${VERSION_CONTEXT}/bin/ld= XNM=3D/usr/local/${TOOLS_TO_TYPE}-unknown-freebsd${VERSION_CONTEXT}/bin/nm= = XOBJCOPY=3D/usr/local/${TOOLS_TO_TYPE}-unknown-freebsd${VERSION_CONTEXT}/b= in/objcopy = XOBJDUMP=3D/usr/local/${TOOLS_TO_TYPE}-unknown-freebsd${VERSION_CONTEXT}/b= in/objdump = XRANLIB=3D/usr/local/${TOOLS_TO_TYPE}-unknown-freebsd${VERSION_CONTEXT}/bi= n/ranlib = XSIZE=3D/usr/local/${TOOLS_TO_TYPE}-unknown-freebsd${VERSION_CONTEXT}/bin/= size #NO-SUCH: = XSTRINGS=3D/usr/local/${TOOLS_TO_TYPE}-unknown-freebsd${VERSION_CONTEXT}/b= in/strings = XSTRINGS=3D/usr/local/bin/${TOOLS_TO_TYPE}-unknown-freebsd${VERSION_CONTEX= T}-strings .export XAS .export XAR .export XLD .export XNM .export XOBJCOPY .export XOBJDUMP .export XRANLIB .export XSIZE .export XSTRINGS .endif # # # =46rom based on clang (via system). . . # .if ${.MAKE.LEVEL} =3D=3D 0 CC=3D/usr/bin/clang CXX=3D/usr/bin/clang++ CPP=3D/usr/bin/clang-cpp .export CC .export CXX .export CPP .endif By contrast, cross-building powerpc64 using system-clang and devel/binutils@powerpc64 ran to completion, as did the default system-clang/lld use. Using ELFv2 for devel/freebsd-gcc9 did avoid the internal plt template error report that I got earlier when targeting a ELFv1 context. 32-bit powerpc side note: For 32-bit powerpc, the only combination to complete buildworld buildkernel was system-clang with devel/binutils@powerpc . The default system linker failed with acl_nfs4.kld(.text+0x234): R_PPC_PLTREL24=20 reloc against local symbol. Using devel/freebsd-gcc9@powerpc with devel/binutils@powerpc resulted in forced bss-plt use stopping the build. =3D=3D=3D Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?7CAD1629-A16F-4D7E-898A-5C06CAC4E0AF>