Fri Sep  7 02:20:38 1990  W. Wilson Ho  (how at sundrops)

	* finish dld.texinfo.

Fri Aug 24 02:01:08 1990  W. Wilson Ho  (how at iris)

	* update the manpages to reflect the changes of function names.

	* add new function dld_get_bare_symbol() -- same as dld_get_symbol
	except that no underscore (_) is prepended.

Thu Aug 23 00:41:44 1990  W. Wilson Ho  (how at sundrops)

	* put in changes to optimize the memory overhead:
	  * the nlist array is freed after the required entries (external
	    symbol definitions or references) have been inserted into the
	    symtab.
	  * relocation of local symbol references is done only once.
	    Afterwards, only the relocation info of external references
	    are saved and the rest is discarded.
	  * new structure "dld_reloc_info" is defined.  "file_entry" uses this.
	  * loading of text and data segments is moved up frond and done
	    in read_file_symbols ().  New function read_text_and_data() is
	    added.
	  * relocate_entry_symbols () now takes care of relocating local
	    references also.  A call to relocate_local_refs() is added.
	  * New function: relocate_local_refs().
	    Read in the relocation info, perform the relocation by calling
	    do_local_relocation(), which also recorded the relocation
	    entry for external references.  When these are done, free the
	    nlist array.
	  * perform_relocation() now works only on the new dld_reloc_info
	    structure. 

Wed Aug 22 00:11:08 1990  W. Wilson Ho  (how at sundrops)

	* remove the field "refs" from defintion of symbol.
	  remove the function digest, change enter_global_ref() and
	  relocate_symbol_address() so that they modify sp->value directly.

	* version 3.2

	* rename which() to dld_which().

	* rename all extern function to begin with "dld_"

	* in dld_init, leave the value of {text,data,bss}_start_address of
	the root module as zero, so that if the root module is unlinked,
	kill_entry will not attempt to free these (invalid) addresses.

	* include error handling in dld_init(). (setjmp and clean_up).

Tue Aug 21 17:16:08 1990  W. Wilson Ho  (how at sundrops)

	* add the already_unlink flag to struct file_entry so that no
	  module can be (soft) unlinked twice.

	* fix bug in relocate_symbol_address():
	  while reading the text and data segments in core, only read in
	  a_text+a_data bytes, do not count the a_bss.
	  The object file does *not* contain the bss segment, only the
	  executing process does.

Mon Jun 11 14:24:57 1990  W. Wilson Ho  (how at snowball)

	* version 3.1.1.

	* rename dld() to dlink()

Thu May  3 11:17:53 1990  W. Wilson Ho  (how at iris)

	* relocate_symbol_address(): zero the bss segment read in from the
	  object files.

Tue May  1 20:56:20 1990  W. Wilson Ho  (how at snowball)

	* modify get_symbol(), get_func(), unlink_by_symbol() and
	  function_executable_p() so tha a '_' is always prepended to the
	  given named before lookup.

	* modify the test programs to accomodate the above changes.

Tue Apr 24 13:25:21 1990  W. Wilson Ho  (how at snowball)

	* dld susccessfully ported to sunOS4.0.  However, programs using
	  dld cannot be linked with the system's shared library.

	* update test/read-a.out.c to take care of sparc's data structure
	  of relocation info.

	* merge in the relocation function for sparc, only
	  perform_relocation needs to be modified.  Also add in the
	  RELOC_* macros.

	* attempt to port to Sun OS 4.0.  Differences of the two systems
	  includes:

	  <sys/exec.h>:	 OS4.0 has two more fields (a_dynamic and
			 a_toolversion), both of them can be safely
			 ignored.

	  <sys/nlist.h>: same

	  <sys/a.out.h>: Compatible between Sun3's running OS3.4 and
			 OS4.0.  struct relocation_info is renamed to
			 reloc_info_68k in OS4.0, and the unused bits of
			 the structure in OS3.4 is now used.  This has no
			 effect on dld.

			 For sparc, structure of reloc_info_sparc is
			 different, so is the way that addresses should be
			 relocated.  This is not compatible with the
			 Sun3's.

	* History:

	  * in this version, add new function function_executable_p() which
	    returns true if the given function can be safely executed.

