Subject: Re: ELF ABI support for sparcV9 binaries.
To: Eduardo Horvath <eeh@turbolinux.com>
From: Todd Vierling <tv@pobox.com>
List: tech-toolchain
Date: 07/10/2000 12:03:10
On Mon, 10 Jul 2000, Eduardo Horvath wrote:
: Apparently we need to add the following routines to the dynamic linker:
: __align_copy1
Dynamic linker? If these are generated by the compiler, they need to be in
libc--think static binaries. Remember that all but a very small number of
binaries on Solaris are dynamic (and thus will always have these available),
even those in /sbin and /bin. So if these are needed for runtime support,
keep our static binaries in mind.
: However, the ABI also appears to specify in section 6.1 that libraries
: need to go into the /usr/lib/sparcV9/ directory.
:
: How much damage will it do to the toolchain to move 64-bit libraries
: there? It would certainly help if we didn't require a full 32-bit
: installation in /emul/netbsd32.
The location /usr/lib/sparcV9 is more-or-less arbitrary, and from what I can
tell, chosen by Sun because "Solaris does it" and "SUNWspro uses it". This
is fine and dandy, but it implies that /usr/lib contains 32-bit
binaries--which, for a 64-bit-only "native" system, would not necessarily be
true.
My personal _opinion_ is that /usr/lib should contain the "native" platform
libraries. If the default of the sparc64 compiler is 64-bit binaries, then
/usr/lib should contain 64-bit libraries, and you can fetch 32-bit
counterparts from /emul/netbsd32/usr/lib. Note I didn't say that
/emul/netbsd32 needs a full distribution--just the libraries.
*****
This boils down to _why_ the libraries for the "native" 64-bit system should
be in a directory other than /usr/lib, which for sparc64 is "so that the
compiler can generate both 32-bit or 64-bit executables". That's an issue
completely orthogonal to the location of the libraries.
I could, in fact, make the now-ELF i386 platform capable of creating Linux,
FreeBSD, and BSD/OS binaries simply by changing the crt0 start files,
library paths, and include path, without changing the toolchain itself--only
compiler and linker options. Same goes for building little-endian MIPS
binaries on a big-endian system. However, I don't have Linux libraries in
/usr/lib/linux--they're under an /emul tree, as they are not "native"
libraries.
*****
Compromise proposal: If we *really* want the 64-bit libraries visible
through /usr/lib/sparcV9, create a symlink that points to `.' at that
location, and keep the 32-bit libraries where they belong--in emulation.
This way we don't add Linuxlike complication to our clean, _uniform_
cross-platform path structure.
IMHO, the ELF spec should have no authority to determine library locations,
just the binary file formats they use. (Should we put ld.elf_so instead in
/usr/lib/ld.so.1, just to do the same thing Solaris does?)
--
-- Todd Vierling (tv@pobox.com)