[TUHS] History of symbol preemption

Paul Winalski paul.winalski at gmail.com
Tue Jan 14 07:42:24 AEST 2020


On 1/13/20, Clem Cole <clemc at 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.


More information about the TUHS mailing list