Index: share/mk/bsd.compat.mk =================================================================== --- share/mk/bsd.compat.mk +++ share/mk/bsd.compat.mk @@ -47,11 +47,21 @@ .else LIB32CPUFLAGS= -mcpu=${COMPAT_CPUTYPE} .endif + +.if (defined(WANT_COMPILER_TYPE) && ${WANT_COMPILER_TYPE} == gcc) || \ + (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) LIB32CPUFLAGS+= -m32 +.else +LIB32CPUFLAGS+= -target powerpc-unknown-freebsd13.0 + +# Use BFD to workaround ld.lld issues on PowerPC 32 bit +LIB32CPUFLAGS+= -fuse-ld=${LD_BFD} +.endif + LIB32_MACHINE= powerpc LIB32_MACHINE_ARCH= powerpc LIB32WMAKEFLAGS= \ - LD="${XLD} -m elf32ppc_fbsd" + LD="${LD_BFD} -m elf32ppc_fbsd" .elif ${COMPAT_ARCH:Mmips64*} != "" HAS_COMPAT=32 Index: share/mk/bsd.cpu.mk =================================================================== --- share/mk/bsd.cpu.mk +++ share/mk/bsd.cpu.mk @@ -412,3 +412,11 @@ # These come from make.conf or the command line or the environment. CFLAGS += ${CFLAGS.${MACHINE_ARCH}} CXXFLAGS += ${CXXFLAGS.${MACHINE_ARCH}} + + +# Define ld.bfd as alternative linker to workaround ld.lld bugs +.if defined(CROSS_BINUTILS_PREFIX) +LD_BFD=${LOCALBASE}/bin/${CROSS_BINUTILS_PREFIX}-ld.bfd +.else +LD_BFD=${OBJTOP}/tmp/usr/bin/ld.bfd +.endif Index: stand/defs.mk =================================================================== --- stand/defs.mk +++ stand/defs.mk @@ -99,6 +99,10 @@ # or powerpc64. .if ${MACHINE_ARCH} == "powerpc64" CFLAGS+= -m32 -mcpu=powerpc +# Use ld.bfd to workaround ld.lld issues on PowerPC 32 bit +.if "${COMPILER_TYPE}" == "clang" && "${LINKER_TYPE}" == "lld" +CFLAGS+= -fuse-ld=${LD_BFD} +.endif .endif # For amd64, there's a bit of mixed bag. Some of the tree (i386, lib*32) is