Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Dec 2016 14:13:38 -0800
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-mips@freebsd.org
Subject:   External toolchain friendliness and /usr/lib32 for mips64
Message-ID:  <2978934.3KKo4yUUSV@ralph.baldwin.cx>

next in thread | raw e-mail | index | archive | help
I have a set of patches (currently tied together, but could be split
into two chunks) for MIPS builds that do two things:

1) Be more external toolchain-friendly by explicitly specifying the
   desired endianness and ABI both to the compiler and the linker.
   This means we don't depend on the default target of a toolchain
   matching the desired target arch.  Previously, I had to explicitly
   specify a TARGET_CPUTYPE for 32-bit mips when using
   mips-xtoolchain-gcc, but with the ABI set explicitly simply
   'TARGET_ARCH=mips' is sufficient.  This also means that you can
   now use 'mips-xtoolchain-gcc' to build mips64 (without
   requiring the separate mips64-xtoolchain-gcc), and you can
   build mipsn32 with gcc from ports (we don't have a binutils or
   gcc port for mips that defaults to mipsn32 currently).

2) Add build glue for /usr/lib32 on mips64.  This builds and installs
   an o32 set of libraries and rtld (of matching endianness) in
   /usr/lib32.

I have tested the latter with the MALTA64 kernel config (just adding
COMPAT_FREEBSD32) under qemu and am able to run 32-bit binaries just
fine.

Note that for 1), there is still the case that if we build a compiler
via the base/ ports, we want the default output to match the host,
so we would need a mips64-specific base/gcc separate from the mips
one (and we need a mipsn32 set of packages).

One annoyance is in the sys/boot/beri ldscripts.  In-tree binutils
uses 'elf64-trad*mips' for its ABIs on FreeBSD while upstream
biutils uses 'elf64-trad*mips-freebsd'.  However, the ldscripts are
already being linked with a linker that is using 64-bit MIPS (and
are only built for "mips64"), so the OUTPUT_FORMAT() isn't really
needed and can just be removed.  I'd probably want to also remove
OUTPUT_ARCH() as well as I think that would be most consistent.

The patches are at:

https://github.com/freebsd/freebsd/compare/master...bsdjhb:mips_lib32

-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2978934.3KKo4yUUSV>