From owner-freebsd-ppc@freebsd.org Wed Jan 11 09:15:41 2017 Return-Path: Delivered-To: freebsd-ppc@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DC555CAA4AC for ; Wed, 11 Jan 2017 09:15:41 +0000 (UTC) (envelope-from markmi@dsl-only.net) Received: from asp.reflexion.net (outbound-mail-210-10.reflexion.net [208.70.210.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A1FE416F1 for ; Wed, 11 Jan 2017 09:15:41 +0000 (UTC) (envelope-from markmi@dsl-only.net) Received: (qmail 22976 invoked from network); 11 Jan 2017 09:15:39 -0000 Received: from unknown (HELO mail-cs-02.app.dca.reflexion.local) (10.81.19.2) by 0 (rfx-qmail) with SMTP; 11 Jan 2017 09:15:39 -0000 Received: by mail-cs-02.app.dca.reflexion.local (Reflexion email security v8.20.1) with SMTP; Wed, 11 Jan 2017 04:15:39 -0500 (EST) Received: (qmail 7246 invoked from network); 11 Jan 2017 09:15:39 -0000 Received: from unknown (HELO iron2.pdx.net) (69.64.224.71) by 0 (rfx-qmail) with (AES256-SHA encrypted) SMTP; 11 Jan 2017 09:15:39 -0000 Received: from [192.168.1.111] (c-67-170-167-181.hsd1.or.comcast.net [67.170.167.181]) by iron2.pdx.net (Postfix) with ESMTPSA id EFFF2EC8FBA; Wed, 11 Jan 2017 01:15:38 -0800 (PST) From: Mark Millard Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 10.2 \(3259\)) Subject: /usr/bin/ld.lld on powerpc64: produces a.out for which: ld-elf.so.1: assert failed: /usr/src/libexec/rtld-elf/powerpc64/reloc.c:374 Message-Id: <7139F615-8F18-4EDC-9051-5FFEC0C4057F@dsl-only.net> Date: Wed, 11 Jan 2017 01:15:38 -0800 Cc: FreeBSD PowerPC ML , FreeBSD Toolchain To: Roman Divacky X-Mailer: Apple Mail (2.3259) X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 Jan 2017 09:15:42 -0000 [Note that the /usr/bin/ld.lld here was built via buildworld on the powerpc64 machine: native build, not a cross build.] Roman Divacky had suggested: From: Roman Divacky Date: January 8, 2017 at 6:41:33 AM PST > Would you be interested in trying lld? It has some support for = ppc/ppc64, which > is probably quite incomplete but it would be nice to know what exactly = is > missing. Here it goes for using lld to link a trivial program on a powerpc64 machine targeting a powerpc64 machine. . . # uname -apKU FreeBSD FBSDG5L 12.0-CURRENT FreeBSD 12.0-CURRENT #0 r311147M: Tue Jan = 10 19:58:19 PST 2017 = root@FBSDG5L:/usr/obj/powerpc64vtsc_clang_altbinutils_kernel/powerpc.power= pc64/usr/src/sys/GENERIC64vtsc-NODBG powerpc powerpc64 1200019 1200019 (System built using WITH_LLD=3D but WITHOUT_LLD_AS_LD=3D ) (System built using devel/powerpc64-binutils , not the bootstrap system binutils. Could have been devel/binutils since it was on powerpc64 for the build.) (The system ld fails for as.full linking during buildworld.) # more main.c int main () { return 0; } # clang -v -fuse-ld=3Dlld main.c FreeBSD clang version 3.9.1 (tags/RELEASE_391/final 289601) (based on = LLVM 3.9.1) Target: powerpc64-unknown-freebsd12.0 Thread model: posix InstalledDir: /usr/bin "/usr/bin/clang" -cc1 -triple powerpc64-unknown-freebsd12.0 -emit-obj = -mrelax-all -disable-free -main-file-name main.c -mrelocation-model = static -mthread-model posix -mdisable-fp-elim -masm-verbose = -mconstructor-aliases -target-cpu ppc64 -mfloat-abi hard -v -v -v = -dwarf-column-info -debugger-tuning=3Dgdb -resource-dir = /usr/bin/../lib/clang/3.9.1 -fdebug-compilation-dir /root/c_tests = -ferror-limit 19 -fmessage-length 200 -fno-signed-char = -fobjc-runtime=3Dgnustep -fdiagnostics-show-option -fcolor-diagnostics = -o /tmp/main-0d483e.o -x c main.c clang -cc1 version 3.9.1 based upon LLVM 3.9.1 default target = powerpc64-unknown-freebsd12.0 #include "..." search starts here: #include <...> search starts here: /usr/bin/../lib/clang/3.9.1/include /usr/include End of search list. "/usr/bin/ld.lld" --eh-frame-hdr -dynamic-linker /libexec/ld-elf.so.1 = --enable-new-dtags -o a.out /usr/lib/crt1.o /usr/lib/crti.o = /usr/lib/crtbegin.o -L/usr/lib /tmp/main-0d483e.o -lgcc --as-needed = -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed = /usr/lib/crtend.o /usr/lib/crtn.o # ./a.out ld-elf.so.1: assert failed: = /usr/src/libexec/rtld-elf/powerpc64/reloc.c:374 Abort trap (core dumped) It stopped at the assert in: int reloc_plt(Obj_Entry *obj) { const Elf_Rela *relalim; const Elf_Rela *rela; if (obj->pltrelasize !=3D 0) { relalim =3D (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize); for (rela =3D obj->pltrela; rela < relalim; rela++) { assert(ELF_R_TYPE(rela->r_info) =3D=3D = R_PPC_JMP_SLOT); =20 if (reloc_plt_object(obj, rela) < 0) { return (-1); } } } return (0); } By contrast: # clang -v main.c FreeBSD clang version 3.9.1 (tags/RELEASE_391/final 289601) (based on = LLVM 3.9.1) Target: powerpc64-unknown-freebsd12.0 Thread model: posix InstalledDir: /usr/bin "/usr/bin/clang" -cc1 -triple powerpc64-unknown-freebsd12.0 -emit-obj = -mrelax-all -disable-free -main-file-name main.c -mrelocation-model = static -mthread-model posix -mdisable-fp-elim -masm-verbose = -mconstructor-aliases -target-cpu ppc64 -mfloat-abi hard -v = -dwarf-column-info -debugger-tuning=3Dgdb -resource-dir = /usr/bin/../lib/clang/3.9.1 -fdebug-compilation-dir /root/c_tests = -ferror-limit 19 -fmessage-length 200 -fno-signed-char = -fobjc-runtime=3Dgnustep -fdiagnostics-show-option -fcolor-diagnostics = -o /tmp/main-895416.o -x c main.c clang -cc1 version 3.9.1 based upon LLVM 3.9.1 default target = powerpc64-unknown-freebsd12.0 #include "..." search starts here: #include <...> search starts here: /usr/bin/../lib/clang/3.9.1/include /usr/include End of search list. "/usr/bin/ld" --eh-frame-hdr -dynamic-linker /libexec/ld-elf.so.1 = --enable-new-dtags -o a.out /usr/lib/crt1.o /usr/lib/crti.o = /usr/lib/crtbegin.o -L/usr/lib /tmp/main-895416.o -lgcc --as-needed = -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed = /usr/lib/crtend.o /usr/lib/crtn.o # ./a.out (No failure.) =46rom what I've seen on the lists it appears that powerpc64's lld effort may well have not even started yet so getting even this far might be good news. I'm not sure it is considered far enough along to classify this as an error yet: it may be as expected. As for the ordering: tier-1 and near tier-1 that is modern (armv6, possibly arm64?) likely comes before tier-2. I've no clue for mips family vs. powerpc family. =3D=3D=3D Mark Millard markmi at dsl-only.net