On Mon, Jan 13, 2020 at 1:04 PM Clem Cole <clemc@ccc.com> wrote:
@ Rico I'm failing sure ELF came from AT&T Summit, not Sun. 
yes, but unless my memory is playing tricks, SunOS a.out had this feature.
 
@ Steve Johnson were you the manager when was created or were you folks still using COFF?

Anyway... There were issues with COFF WRT being architecture-independent and supporting dynamic loading well.  Steve Rago would also be a good person to ask if you want some of the details.  At one point there was a COFF2 document, but it may have been System Vx licenses only.   Also, one of the issues was that AT&T had officially tied up COFF as a proprietary format -- all part of the 'consider it standard' trying to force their lunch down all the other UNIX systems throat which was not having it.   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.

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.

On Mon, Jan 13, 2020 at 3:47 PM Rico Pajarola <rp@servium.ch> wrote:
This seems to have originated with SunOS 4. I believe a good proxy for finding anything that inherited from or was inspired by this is a linker that recognizes LD_PRELOAD. I wonder if there are other independent implementations in the Unix space.


On Mon, Jan 13, 2020 at 11:59 AM Paul Winalski <paul.winalski@gmail.com> wrote:
The Executable and Linkable Format (ELF) is the modern standard for
object files in Unix and Unix-like OSes (e.g., Linux), and even for
OpenVMS.  LInux, AIX and probably other implementations of ELF have a
feature in the runtime loader called symbol preemption.  When loading
a shared library, the runtime loader examines the library's symbol
table.  If there is a global symbol with default visibility, and a
value for that symbol has already been loaded, all references to the
symbol in the library being loaded are rebound to the existing
definition.  The existing value thus preempts the definition in the
library.

I'm curious about the history of symbol preemption.  It does not exist
in other implementations of shared libraries, such as IBM OS/370 and
its descendants, OpenVMS, and Microsoft Windows NT.  ELF apparently
was designed in the mid-1990s.  I have found a copy of the System V
Application Binary Interface from April 2001 that describes symbol
preemption in the section on the ELF symbol table.

When was symbol preemption when loading shared objects first
implemented in Unix?  Are there versions of Unix that don't do symbol
preemption?

-Paul W.