I built a powerpc64 head -r339076 via devel/powerpc64-gcc and the like that built clang as cc as well (and WITHOUT_LIB32). This included use of base/binutils to the the powerpc64 set up. The system and kernel are non-debug builds (but with symbols). [system-clang is not used for buildworld buildkernel because of known issues (last I tried).]
booting, buildworld, buildkernel, poudriere building what totaled to be somewhat under 400 ports all seem to work. But . . . It been a long time since I've done something analogous and a significant item in the result is different than in the past once I started testing the throwing of C++ exceptions in code produced by system-clang or by devel/powerpc64-gcc : Such code ends up stuck using around 100% of a CPU. An example is the program: # more exception_test.cpp #include <exception> int main(void) { try { throw std::exception(); } catch (std::exception& e) {} return 0; } For system-clang it ended up with: # ldd a.out a.out: libc++.so.1 => /usr/lib/libc++.so.1 (0x81006d000) libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x810184000) libm.so.5 => /lib/libm.so.5 (0x8101ab000) libc.so.7 => /lib/libc.so.7 (0x8101eb000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x810554000) That program goes into an possibly unbounded execution. (Historically when this program had problems it would stop and produce a core file.) When compiled by devel/powerpc64-gcc the a.out that results does the same thing. ( /usr/local/bin/powerpc64-unknown-freebsd12.0-c++ as the compiler path ) So this is not really clang specific in any way. This ended up with: # ldd a.out a.out: libc++.so.1 => /usr/lib/libc++.so.1 (0x81006d000) libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x810184000) libm.so.5 => /lib/libm.so.5 (0x8101ab000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x8101eb000) libc.so.7 => /lib/libc.so.7 (0x810211000) (That should not have involved clang or llvm at all.) But compiled by lang/gcc8's g++8 the a.out that results works fine. This ends up with: # ldd a.out a.out: libstdc++.so.6 => /usr/local/lib/gcc8/libstdc++.so.6 (0x81006e000) libm.so.5 => /lib/libm.so.5 (0x8102c7000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x810307000) libc.so.7 => /lib/libc.so.7 (0x81032d000) It is not clear if using base/gcc as system cc would do any better than using system-clang does or than devel/powerpc64-gcc does: it is sort of a variant of devel/powerpc64-gcc . It will probably be some time before I figure out much about what is going on. Two things common to the problem cases are: libc++.so.1 => /usr/lib/libc++.so.1 (0x81006d000) libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x810184000) lang/gcc8 avoids those being involved. Notes: Some time ago I'd used system-clang to build such programs in an environment built via devel/powerpc64-gcc and devel/powerpc64-binutils and the programs worked. The same for devel/powerpc64-gcc use: the code it produced for the programs also worked. At this point I've no clue what changed or when. WITHOUT_LIB32= is because, for every post-gcc 4.2.1 that I've tried, the lib32 produced misuses R30 in crtbeginS code (vs. the ABI for FreeBSD) and 32-bit code just produces core files from the bad so-called address dereference that results. I'd rather have throwing C++ exceptions working and lack of lib32 than have lib32 but not have throwing C++ exceptions working. But at the moment how to have such is not obvious when fairly modern compilers and toolchains are involved. === Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar) _______________________________________________ freebsd-toolchain@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"