On 1/13/20, Clem Cole <clemc(a)ccc.com> wrote:
As a result, CMU's MachO was about to become the default
format (OSF and Apple were already using it for that reason), and Unix
International stepped in and convinced AT&T to released the ELF documents
(I was on the UI technical board at that point). I'm not sure how/why OSF
decided to back off, maybe because after ELF became public it got supported
by GCC.
Mach-O was decidedly a step up from a.out in terms of flexibility and
extensibility, but it is inferior to both COFF and ELF, IMO. Mach-O
(at least the Apple OS X implementation) handles global symbols and
relocations in a clumsy and baroque way. Of the three
object/executable formats, ELF is by far the cleanest and most
flexible, and that's possibly why OSF went to it once it became
available.
Microsoft went with COFF, sort-of, in Windows. But PECOFF (Portable
and Extensible Common Object File Format) is different enough from
vanilla COFF that when I implemented support for it in GEM I found to
better to write an entire new module for PECOFF rather than put
conditional code in the existing COFF-handling code. I think this was
another of MS's "embrace and extend" gambits to keep control over
their development environment.
Now my memory is a little hazy... I think OSF/1-386
used MachO originally,
but I've forgotten. Switching the kernel to use ELF was one of the
differences between OSF1 and Tru64 IIRC.
GEM never had to support Mach-O on any of its target platforms. DEC's
Unix on MIPS used COFF. Tru64 used ELF exclusively. I don't know
what Apple used for object files before OS X. IIRC NeXT was based on
the CMU MACH microkernel and hence used Mach-O. OS X is
FreeBSD-based, but it uses Mach-O.
Tru64 has symbol preemption. The Tru64 C/C++ compiler by default
turns off symbol preemption by using PROTECTED visibility for global
symbols, but it does have a --preempt_symbol option. Using that
option can have disastrous effects on optimization.
Was symbol visibility (default/protected/internal) part of the
original ELF spec from the 1990s, or was it added later?
-Paul W.