These are some scratch notes of mine of different combinations of toolchains and MIPS ABIs. All of these tests are done via the [[https://github.com/freebsd/freebsd/compare/master...bsdjhb:mips_xbuild|mips_xbuild]] branch at github/bsdjhb/freebsd.git. The current status below assumes a tree that contains all commits listed in the third table. Additional patches may also be required as noted in the comments. | ABI | toolchain | build world | build kernel | run world | run kernel | notes | | O32 | gcc 4.2 | ✔ | ✔ | ✔ | ✔ | | | N32 | gcc 4.2 | ✔ | ✔ | ✔ | ✔ | | | N64 | gcc 4.2 | ✔ | ✔ | ✔ | ✔ | | | O32 | gcc 6.4 | ✔ | ✔ | ✔ | ✔ | | | N32 | gcc 6.4 | ✔ | ✔ | ✔ | ✔ | | | N64 | gcc 6.4 | ✔ | ✔ | ✔ | ✔ | | | O32 | clang 6.0.0 | ✔ | ✔ | ✘ | ✔ | Requires unmerged changes in ''%%mips_clang%%'' branch. Use of thread-local-storage crashes (e.g. libxo in ps(1%%))%% | | N32 | clang 6.0.0 | ✘ | | | | clang doesn't pass through N32 ABI to assembler, see discussion [[https://reviews.llvm.org/D31557|here]] | | N64 | clang 6.0.0 | ✔ | ✔ | ✔ | ✔ | Requires unmerged changes in ''%%mips_clang%%'' branch. Any use of NFS triggers kernel stack overflow. | | toolchain | build args | notes | | gcc 4.2 | make TARGET_ARCH=%%<%%abi> | | | gcc 6.4 | make TARGET_ARCH=%%<%%abi> CROSS_TOOLCHAIN=mips-gcc | Requires mips-xtoolchain-gcc package | | clang 6.0.0 | make TARGET_ARCH=%%<%%abi> WITH_CLANG=yes WITH_CLANG_IS_CC=yes WITH_CLANG_BOOTSTRAP=yes WITHOUT_GCC_BOOTSTRAP=yes WITHOUT_GCC=yes WITHOUT_GNUCXX=yes CROSS_BINUTILS_PREFIX=/usr/local/mips-freebsd/bin/ WITHOUT_SYSTEM_COMPILER=yes | Requires mips-binutils package | ==== Changes in FreeBSD ==== | Review | Commit | Description | | | [[https://svnweb.freebsd.org/base?view=revision&revision=322915|r322915]] | Fix recursion for some builtins with n32 | | | [[https://svnweb.freebsd.org/base?view=revision&revision=322772|r322772]] | Fix compile of FP exception handlers with clang | | | [[https://svnweb.freebsd.org/base?view=revision&revision=322767|r322767]] | Fix compile of top with clang | | | [[https://svnweb.freebsd.org/base?view=revision&revision=322766|r322766]] | Fix missing division builtins used by clang | | | [[https://svnweb.freebsd.org/base?view=revision&revision=322765|r322765]] | Fix build of dtrace header with clang on o32 | | [[https://reviews.freebsd.org/D10085|D10085]] | [[https://svnweb.freebsd.org/base?view=revision&revision=316620|r316620]] [[https://svnweb.freebsd.org/base?view=revision&revision=316621|r316621]] [[https://svnweb.freebsd.org/base?view=revision&revision=316622|r316622]] | Pass -mabi=XX to compiler driver instead of depending on default | | [[https://reviews.freebsd.org/D10085|D10085]] | [[https://svnweb.freebsd.org/base?view=revision&revision=316512|r316512]] [[https://svnweb.freebsd.org/base?view=revision&revision=316513|r316513]] [[https://svnweb.freebsd.org/base?view=revision&revision=316514|r316514]] [[https://svnweb.freebsd.org/base?view=revision&revision=316537|r316537]] | Pass linker emulation to linker instead of depending on default | | [[https://reviews.freebsd.org/D10086|D10086]] | [[https://svnweb.freebsd.org/base?view=revision&revision=316511|r316511]] | Export an ''%%__ffssi2()%%'' symbol | | [[https://reviews.freebsd.org/D9707|D9707]] | [[https://svnweb.freebsd.org/base?view=revision&revision=314114|r314114]] | Use LDFLAGS instead of _LDFLAGS for beri boot binaries | | [[https://reviews.freebsd.org/D9708|D9708]] | [[https://svnweb.freebsd.org/base?view=revision&revision=314115|r314115]] | Fix rtld to handle GOT[1] for modern toolchains | | [[https://reviews.freebsd.org/D15543|D15543]] | [[https://svnweb.freebsd.org/ports?view=revision&revision=472011|r472011]] | Fix GCC ports to use default MIPS arch of MIPSIII for O32 | ==== Changes in LLVM ==== | Review | Commit | Merged to %%FreeBSD%% | Description | | [[https://reviews.llvm.org/D42972|D42972]] | [[http://llvm.org/viewvc/llvm-project?view=revision&revision=324948|324948]] | | Look for 32-bit libraries in /usr/lib32 for MIPS O32 on %%FreeBSD%%. | | [[https://reviews.llvm.org/D47938|D47938]] | [[http://llvm.org/viewvc/llvm-project?view=revision&revision=334419|334419]] | | [mips] Fix spill slot for mips3, n64 abi | | [[https://reviews.llvm.org/D31557|D31557]] / [[https://reviews.llvm.org/D48515|D48515]] | [[http://llvm.org/viewvc/llvm-project?view=revision&revision=335434|335434]] [[http://llvm.org/viewvc/llvm-project?view=revision&revision=336004|336004]] | | Enable IAS by default for N64 | | [[https://reviews.llvm.org/D48499|D48499]] | [[http://llvm.org/viewvc/llvm-project?view=revision&revision=335653|335653]] | | Use more conservative default CPUs (mips2 and mips3) | | [[https://reviews.llvm.org/D48507|D48507]] | [[http://llvm.org/viewvc/llvm-project?view=revision&revision=335691|335691]] / [[http://llvm.org/viewvc/llvm-project?view=revision&revision=335702|335702]] | | Pass the linker emulation (-m foo) explicitly to ld | | | | | Clang always uses dynamic TLS | | [[https://reviews.llvm.org/D49939|D49939]] | [[http://llvm.org/viewvc/llvm-project?view=revision&revision=338650|338650]] | | [ASAN] Use the correct shadow offset for ASAN on %%FreeBSD%%/mips64. |