Fundamental design decision:

- the sizes of external and internal types are assumed to be the same.
  This leaves byte ordering aside.  While assuming this the code can be
  greatly simplified and speed increases.  Since no change violating this
  assumption is in sight this is believed to be a worthwhile optimization.

- the ABI of the backend modules is not guaranteed.  Really, no guarantee
  whatsoever.  We are enforcing this in the code.  The modules and their
  users must match.  No third-party EBL module are supported or allowed.
  The only reason there are separate modules is to not have the code for
  all architectures in all the binaries.

- although the public libraries (libasm, libdw) have a stable API and are
  backwards ABI compatible they, and the elfutils tools, do depend on each
  others internals, and on internals of libelf to provide their interfaces.
  So they should always be upgraded in lockstep when packaging the tools
  and libraries separately. For one example of how to do that, see the
  config/elfutils.spec.

Some notes:

- old GNU ld's behavior wrt DSOs seems to be severely broken.

     y.o reference foo()
     y1.o defines foo(), references bar()
     y2.o defines bar()
     libbar.so defines bar()

  Running

     gcc -o y y.o -lbar y1.o y2.o

  uses the bar() definition from libbar.so and does not mention the definition
  in y2.o at all (no duplicate symbol message).  Correct is to use the
  definition in y2.o.


     y.o reference foo()
     y1.o defines foo(), references bar()
     y2.o in liby2.a defines bar()
     libbar.so defines bar()

  Running

     gcc -o y y.o -lbar y1.o -ly3

  has to use the definition in -lbar and not pull the definition from liby3.a.


- the old linker follows DT_NEEDED entries and adds the objects referenced
  this way which define a symbol which is needed as a DT_NEEDED to the
  generated binary.  This is wrong since the DT_NEEDED changes the search
  path in the object (which is breadth first).


- the old linker supported extern "C++", extern "java" in version scripts.
  I believe this implementation is severely broken and needs a redesign
  (how do wildcards work with these languages*?).  Therefore it is left
  out for now.


- what should happen if two sections in different files with the same
  name have different types and/or the flags are different


- section names in input files are mostly irrelevant.  Exceptions:

  .comment/SHT_PROGBITS		in strip, ld

  .debug		\
  .line			|
  .debug_srcinfo	|
  .debug_sfnames	|
  .debug_aranges	|
  .debug_pubnames	|
  .debug_info		|
  .debug_abbrev		|
  .debug_line		|
  .debug_abbrev		 >	DWARF sections in ld
  .debug_line		|
  .debug_frame		|
  .debug_str		|
  .debug_loc		|
  .debug_macinfo	|
  .debug_weaknames	|
  .debug_funcnames	|
  .debug_typenames	|
  .debug_varnames	/

  Sections created in output files follow the naming of special section
  from the gABI.

  In no place is a section solely identified by its name.  Internal
  references always use the section index.
