TODO:
- Fix cmpshlib not to require #filelist and #init's to be checked in the spec
  file.
- Added something that allows a non-existant -arch not to fail hard (NRW group
  request for libsys 1.0 and 2.0 compatiblity).

Changes for the 5.17 release (the cctools-533 release):
- Changed host_byte_sex in cmpshlib.c to not be declared static to match the
  header file mkshlib.h .
- Changed mkshlib.c to initialize the variable progname and declare
  it to be a __private_extern__ to avoid having a common private extern be
  created when built with gcc-3.5.

Changes for the 5.16 release (the cctools-526 release):
- Fixed warnings for the changes in mach-o headers for types changing from
  unsigned long to uint32_t and from long to int32_t.  Radar bug #3744082.
  - Changed a uses of "%lu" to "%u" in cmpshlib.c .

Changes for the 5.12 release (the cctools-466 release):
- Fixed the incorrect casts on the comparison of the nlist struct's n_strx field
  where the value being compared to was casted to a long.  The correct fix was
  to cast n_strx to an unsigned long.

Changes for the 5.12 release (the cctools-464 release):
- Made changes to build cleanly with gcc3.3
  - Removed -Wno-precomp from the Makefile and added RC_OS = macos
  - Fixed warnings for "comparison between signed and unsigned" in host.c,
    parse_spec.c, cmpshlib.c and hack_libgcc.c .

Changes for the 5.11 release (the cctools-440 release):
- Fixed the warnings about extra tokens at end of #endif directive in
  cmpshlib.c, host.c and parse_spec.c (Radar bug #3072042).

Changes for the 5.10 release (the cctools-400 release):
- Changed the Makefile back to again use the -dependency-file with gcc.
- Changed hack_gcc.c to add the new throttle parameter to writeout().

Changes for the 5.10 release (the cctools-396 release):
- Changed the Makefile to not use the -dependency-file with gcc as well as
  mwccppc.

Changes for the 5.10 release (the cctools-391 release):
- Changed the call to ofile_process() in host.c to pass FALSE for the
  new use_member_syntax parameter.  Radar bug #2730127.

Changes for the 5.10 release (the cctools-386 release):
- Changed the breakout() calls in hack_gcc.c pass FALSE as the value for the
  new calculate_input_prebind_cksum parameter.

Changes for the 5.9 release (the cctools-359 release):
- Added -Wno-long-double to shutup the compiler for
  <architecture/m88k/fp_regs.h>.

Changes the 5.3 release (the cctools-292 release):
- Added the int type to max_slotnum_seen in parse_spec.c to remove a warning
  from the egcs compiler.
- Changed the return type of main() in mkshlib.c, cmpshlib.c and hack_libgcc.c
  from void to int to remove a warning from the egcs compiler.  Also changed
  the exit()'s to return()'s.

Changes for the 5.3 release, MacOS X bring up (the cctools-282 release):
- Made the variable errors in errors.c a private extern so to allow it to
  prebind with the MacOS X System framework which also defines errors.
- Changed task_self() to mach_task_self() for MacOS X in host.c.  Also
  included "stuff/openstep_mach.h" for macros to allow it to still build on
  Openstep.  Also changed ifdef's __SLICK__ to __OPENSTEP__.
- Added #include "stuff/bytesex.h" to error.c, parse_spec.c and hack_spec.c so
  they would compile with the MetroWerks compiler.

Changes for the 5.1 release (the cctools-260 release):
- Added -c to all the install commands in the Makefile.

Changes for the 5.1 release (the cctools-247 release):
- Added MKDIRS if code to the Makefile to build native on Rhapsody.
- Changed the Makefile to use gnutar instead of tar because it works on Rhapsody
  where tar does not.
- Changed the code ifdef __TEFLON__ to ifndef __SLICK__ (where __TEFLON__ will
  nolonger be defined for Rhapsody builds) so the default builds will be native
  Rhapsody builds.  The changes were to mkshlib.c .

Changes for the 5.0 release (the cctools-224 release):
- Changed including <ranlib.h> to <mach-o/ranlib.h> which uses unsigned long
  instead of off_t (64 bits on Teflon).

Changes for the 5.o release (cctools-210 release):
- Changed m98k to ppc.

Changes for the 4.2 release (cctools-209 release):
- Added the -p option to command hack_libgcc to set the private extern bit on
  defined libgcc symbols.  Fully tested this tool with this release and it is
  ready to go.

Changes for the 4.2 release (cctools-208 release):
- Wrote the command hack_libgcc to deal with the new and old libgcc needing
  to be in libsys.  The version in cctools-208 compiled, links and has only
  been lightly tested.

Changes for the 4.0 release (cctools-179 release):
- Fixed a bug in host.c where if an object file had a zero sized string table
  then the first byte of the string table was not allocated (bug #59051).

Changes for the 4.0 release (cctools-175 release):
- Changed the Makefile to ld -r builds because private externs were causing
  prebinding to fail because of overlap.

Changes for the 4.0 release (the cctools-148 release):
- Added the #filelist directive.  It is allowed in only when #objects is in
  effect.  The syntax is "#filelist listfile [dirname]".  If a file name in
  list file as already been seen in the spec file it is ignored.  The optional
  dirname is prepended, as well as a '/' if needed, to each file name listed
  in list file.  The filenames in list file are one to a line with all other
  white space as part of the file name.

Changes for the 4.0 release (the cctools-138 release):
- Picked up a change from sparc group for cmpshlib.

Changes for the 4.0 release (the cctools-135 release):
- Fixed a bug in cmpshlib when the branch target had an old_name specification
  and there was more than one symbol at the branch table target.  This happens
  in libMedia with:
    ## These two guys are indirect symbols for MxMultiply() and MxInvert(),
    ## respectively:
	_N3DMultiplyMatrix		192	old_name _MxMultiply
	_N3DInvertMatrix		193	old_name _MxInvert
  because of the indirect symbols.  The fix was in check_newtarget() to detect
  when more than one symbol is at the branch table target and then using the
  on that matches the spec file's for that slot (bug #45204).

Changes for the 4.0 release (the cctools-134 release):
- Picked up sparc fixes to target.c which has the correct branch and branch
  slot size.
- Fixed a typo in cmpshlib.c for sparc mask 0xffc00000 was 0xffc000000.

Changes for the 4.0 release (the cctools-133 release):
- Picked up sparc changes to target.c which has the branch and trap instructions
  implemented for sparc.
- Picked up sparc changes to cmpshlib.c which implements get_target_addr() for
  sparc branch table targets.

Changes for the 3.3 release (the cctools-122 release):
- Fixed a bug in cmpshlib that had hard coded numbers for the text section and
  data section nsect numbers.  Made open_target() return these to values.

Changes for the 3.3 release (the cctools-119 release):
- Picked up the changes for cmpshlib with respect to the sparc target.

Changes for the 3.3 release (the cctools-110 release):
- Removed a fatal() call in scan_objects_processor() in host.c that was checking
  for a symtab_command.  With the new assembler in cctools-110 this was causing
  problems with valid "empty" object files.

Changes for the 3.3 release (the cctools-107 release):
- Fixed a problem with the true Mach-O assembler not padding the text section
  of the branch object by forcing the padding into the assembly source of the
  branch object in target.c.

Changes for the 3.3 release (the cctools-102 release):
- Integrated in the hppa support.
different mkshlib/cmpshlib.c (integrated for cctools-102)
     Using cctoolshppa-37. Has hppa branch target stuff in it.
different mkshlib/target.c (integrated for cctools-102)
     Using cctoolshppa-37. Has hppa branch target stuff in it.

Changes for the 3.1 release (the cctools-16 release):
- Fixed the cleanup of mkshlib so that fatal errors would do the cleanup.
- Fixed a bug relating to the bug below where the subtypes of the shlibs should
  not have been checked.

Changes for the 3.1 release (the cctools-15 release):
- Fixed a bug where the -arch of a family for cmpshlib(l) would fail to pick
  a specific arch (bug #30835).

Changes for the 3.1 release (the cctools-13 release):
- Added the m98k (PowerPC) architecture.

Changes for the 3.1 release (the cctools-10 release):
- Fixed a bug in mkshlib(l) where because of striping the target shlib the value
  of the vmsize of the __LINKEDIT segment in the host libraries __.FVMLIB file
  could report an overlap when it does not exist.  Since this can't be checked
  accurately at link time this feild is set to zero for the __LINKEDIT segment
  and it is left to be checked at runtime only.  The change is in
  write_lib_obj() in host.c

Changes for the 3.1 release (the cctools-4 release):
- Changed the trap instruction for the i386 to 0xf4 a "hlt" instruction and
  changed it to 5 bytes instead of 6 bytes to match the "jmp" instruction size.
- Added support in cmpshlib(l) to check the m88k and i386 architectures branch
  instructions.
- Added fat file support.  Switch over to error functions in libstuff and
  routines in there.

Changes for the 3.0 release (the -55 compiler release):
- Fixed a bug that caused looping if an #alias was seen before either the
  #private_externs or #nobranch_text.  The problem was that in new_state()
  in parse_spec.c the oddball data structure was not set up for the #alias
  directive and caused a memory smasher.

Changes for the 3.0 release (the -51 compiler release):
- Changed mkshlib to treat all errors as fatal and exit non-zero and without
  creating any files (two line change in main() in mkshlib.c). (bug #17054)
- Added the optional "old_name <old_funcname>" syntax to mkshlib(l) and
  cmpshlib(l) to allow cmpshlib to check an old name for compatiblity.
  (bug #17054)

Changes for the 3.0 release (the -49 compiler release):
- Changed the Makefile to meet the RC api.

Changes for the 3.0 release (the -44 compiler release):
- Switch over to the new header file organization.

Changes for the 3.0 release (the -43 compiler release):
- Added code in target.c to handle i386 shlibs.
- Fixed warnings from new compiler about printf strings.

Changes for the 3.0 release (the -36 compiler release):
- Added code in target.c to handle both 68k and 88k shlibs.

Changes for the 3.0 release (the -34 compiler release):
- Added the -image_version argument like the -minor_version argument to mkshlib
  which if specified is used to set the minor version of the target shlib.
- Added installsrc, installIBMsrc and installGNUsrc targets to the Makefile.

Changes for the Warp ?? release (the -26 compiler release):
- Fixed bugs where the a file was to be created and the create failed because
  the file was read-only.  The fix was to unlink all files before creating
  them.

Changes for the Warp ?? release (the -25 compiler release):
- Added the -s spec_file option to cmpshlib so it can check the #nobranch_text
  (global const) symbols that are not #private_externs. Also data symbols that
  are #private_externs are not reported.
- Changed mkshlib to leave around the the branch object and source when it works
  successfully.

Changes for the Warp ?? release (the -24 compiler release):
- Added two prints to cmpshlib to say what it is checking.
- Added all approprate ld flags to mkshlib.
- Changed to always use branch.o and branch.s so scattered loading will have
  a constant object file name to use.
- Changed to use one array for all ld flags.
- Removed the prototype for map_fd from cmpshlib.c .

Changes for the 2.0 impulse X.X release (the -23 compiler release):
- Added an fsync() call right before the host file is written ifdef'ed OS_BUG
  to work around the kernel not flushing the modification time correctly.

Changes for the 2.0 impulse X.X release (the -22 compiler release):
- Added the -segaddr option to mkshlib(l).

Changes for the 2.0 impulse X.X release (the -21 compiler release):
- Changed the name of the shared library full reference symbol from
  .shared_library_reference<target base name> to the target base name
  up to (but not including) the first '.' .  This is so the name for
  "/usr/shlib/libsys_s.A.shlib" will be "libsys_s" etc.

Changes for the 2.0 impulse X.X release (the -20 compiler release):
- Fixed a bug where the rounded area of a host shared library object was not
  zeroed and then ld(1) would complain that the string table did not end in a
  '\0'.
- Changed the file definition symbol names to include the base name of the
  target shared library.  This caused a bug where libNeXT and libsys both had
  a file named pointers.o in them and the -20 version of the link editor would
  treat this as a multiply defined symbol.

Changes for the 2.0 impulse X.X release (the -19 compiler release):
- Added the -segprot option to mkshlib to pass through to ld(1).
- Changed -segcreate to -sectcreate but still recognized -segcreate.
- Added code in target.c to check for the existence of all objects before
  running ld(1).
- Updated for the changes to CPU_TYPE and CPU_SUBTYPE with the changes to
  <sys/machine.h>
- Added an object to the host shared library that a defined symbol in it will
  reference all objects in the library.

Changes for the 2.0 impulse 0.01 release (the -17 compiler release):
- Changed #alias from using the -a option of the 1.0 link editor to using the
  -i option of the new link editor.  This involved causing the original name
  to become a private extern automaticly and to be seen in the target file.
- Changed to using a section for initialization to match the removal of loader
  defined symbols in the new link editor.  To do this without a .section
  directive in the assembler required writing the entire object file so while
  I was at it I made it write the entire host shared library archive which makes
  it much faster.  Also added a library identification object in the target
  shared library to propagate the LC_IDFVMLIB load command for use with the new
  link editor.  Also bought the code up to ANSI C (both the mkshlib and cmpshlib
  code) with respect to prototypes, header files and the library functions they
  use.  Removed all a.out style shlib related code from both programs.
- Added the -minor_version argument to mkshlib.

Changes for the 0.96 release (the -16 compiler release)
- Added the -f option to not write out the host library.

Changes for the 0.91 release (the -10 compiler release)
- Added allowing the '-' character in object file base names.
- Fixed the data_size in the shared library struct to reflect the size of
  all other segments besides the text (a kluge but will get the correct
  overlap checking).  Also added a S_FVMLIB marked segment to the __.FVMLIB
  object for all segments of the shared library.

Changes for the 0.83 release (only a binary of cmpshlib was released)
- Fixed cmpshlib to handle Mach-O symbols.

Changes for the 0.83 release (the -9 compiler release):
- Added the #undefined directive which passes -U <symbol name> to ld for each
  symbol listed.  And removed the -u option (it now prints a warning).

Changes for the 0.82 release (the -8 compiler release):
- Fixed a bug that didn't get the cross references for undefined private
  externs between library members.
- Added -segcreate options to be passed through to ld.
- Fixed a bug in two error() messages that were missing an argument and caused
  a core dump.  This happened when a private_extern was also in the branch
  table or nobranch_text (parse_spec.c line 231 and 237)
- Changed the Makefile to install in /usr/local/bin.  This directory gets
  cleaned before release.

Changes for the 0.82 release (the -7 compiler release):
- Removed bsearch.c and linking with it.  (This must link with the ANSI C libc
  release 0.81 or better or bsearch will be undefined).
- Change from using strtol() to strtoul() when parsing #address.  (This must
  link with the ANSI C libc release 0.81 or better or this will be undefined).
- Changed the default object file format produced by mkshlib to mach
  relocatable (setting of the -M flag).
- Added header_addr to fvmlib id command and filled it in.

Changes for the 0.81 release (the -6 compiler release):
- Updated the mkshlib to take in and produce mach-O relocatable objects (with
  the -M flag for now).

Changes for the 0.8 release:
- Fixed the problem of a symbol that is both a private_externs and the alias
  of an aliased symbol (-aoriginal:alias) which did not get removed from
  objects that referenced them.
