To Do:
- Add the -prebind_allow_overlap and  -prebind_all_two_level_modules to libtool
  see Radar bug 3417137.
- Change to Doug's approach to relayout, namely something like reserving the
  last 10% of the load region for new dylibs and then evenly spacing the
  existing dylibs in the other 90% (for split libs).  See email of 11/6/2000.
- Have cmpdylib check Objc info Tracker bug #78124.
- Fix a bug in strip on line 1105 where it uses missing_reloc_symbols when it
  could have been set otherwise and does not print the next line.
- Maybe add fat support for segedit(1)

Changes for the 5.33 release (the cctools-845 release):
- Changed strip(1) to use libc++ instead of libstdc++ .  Radar bug #13470497.

Changes for the 5.33 release (the cctools-842 release):
- Changed lipo(1) to use a temporary file for its output and do a final
  rename(2) to make it atomically create the output file.  The changes were
  in create_fat() in lipo.c . Radar bug #13045167.
- Fixed a bug in install_name_tool(1) when more than one -add_rpath options are
  used.  Radar bug #13012481.
- Changed lipo(1) so it uses 16k pages for ARM binaries.  Radar bug #13080176.

Changes for the 5.33 release (the cctools-840 release):
- Added support for new archs: armv6m / armv7m / armv7em and updated lipo.c .
  Radar bug #11314463.
- Tried to changed to use libc++ instead of libstdc++ but libprunetrie.a needs
  to be changed first.  For now this is line in the Makefile:
	#CXXLIB = -stdlib=libc++
  is commented out which is the needed change.  Radar bug #12624622.

Changes for the 5.33 release (the cctools-839 release):
- Changed the Makefile so that strip(1)'s use of <mach-o/prune_trie.h> and
  libprunetrie.a so that it comes from DT_TOOLCHAIN_DIR.  Radar bug #12296255.

Changes for the 5.32 release (the cctools-835 release):
- Fixed a bug in strip(1) when the input was a .o file containg
  LC_FUNCTION_STARTS load command. The code in get_starting_syminfo_offset() in
  strip.c did not look for the load command which can be the start of the
  symbolic offset in the file.  Radar bug #11913911.

Changes for the 5.32 release (the cctools-833 release):
- Changed strip(1) to always use ld -r on ARM .o files to rename thumb symbols
  so they don't get stripped.  Radar bug #11795809.

Changes for the 5.32 release (the cctools-830 release):
- Fixed a bug in nmedit(1) when the input was a .o file containg a
  LC_DATA_IN_CODE load command. The code in get_starting_syminfo_offset() in
  strip.c did not look for the load command which can be the start of the
  symbolic offset in the file.  Radar bug #11554503.
- Fixed a bug in libtool(1) when run as ranlib(1) to not update the table of
  contents if the input archive's table of content's member name is not using
  the extended long name format and we create an table of contents with a 
  extended long name format (or vice a versa).  Radar bug #10399314.

Changes for the 5.31 release (the cctools-827 release):
- Added #ifdef guards for LTO_SUPPORT in lipo.c . Radar bug #11296366.

Changes for the 5.31 release (the cctools-825 release):
- Fixed the full strip case with -no_uuid that was not stripping the LC_UUID
  load command.  A call to strip_LC_UUID_commands() was added to strip_object()
  in strip.c for the full strip case.  Radar bug #11136733.

Changes for the 5.31 release (the cctools-824 release):
- Removed the creation of the link to /usr/local/bin/nmedit from
  $(DSTROOT)$(LOCBINDIR)/nmedit in the Makefile.  Radar bug #10688477.
- Fixed a bunch of places in libtool(1) that was using 32-bit variables to hold
  offsets and sizes.  Radar bug #10645295.

Changes for the 5.30 release (the cctools-822 release):
- The "low risk fix to strip(1)" below in cctools-821 for Radar bug #10718585
  breaks striping .o files with dwarf debug info.  Because the input file has
  an "ld -r" run on it so it is not the original input file.  That change has
  been backed out.
- The correct fix for strip(1) in dealing with code signed binaries is to
  added up the sizes of the output and input parts in the right order.  So the
  code in strip_object() has been updated to do this.  Radar bug #10709632.

Changes for the 5.30 release (the cctools-821 release):
- Made a low risk fix to strip(1) to fix bugs when stripping objects with
  code signature data.  The problem is that the code in strip_object() that is
  calculating object->input_sym_info_size is incorrect as it is not adding the
  elements up in their order and rounding the size for elements that are aligned
  like the code signature info. So as a low risk fix code was added in
  dyld_order() in checkout.c in libstuff that records the size of the symbolic
  information. Then in strip_object() it simply overwrites the previously
  incorrectly calculated value for object->input_sym_info_size with that.
  Radar bug #10718585.
- Fixed a bug in codesign_allocate(1) that was incorrectly using the value of
  sizeof(struct mach_header) for a 64-bit binary when testing if there was 
  enough room to add the load command.  Radar bug #10652697.
- Updated the code in pagestuff(1) to have parts for the dyld info and correctly
  handle dylib stubs who's section contents do not appear in the binary.

Changes for the 5.30 release (the cctools-820 release):
- Removed the use of vers_string(1) from the Makefile. Radar bug #10596469.
  - Updated libtool.c to print "Apple Inc." not "Apple Computer, Inc." and the
    comment where apple_version[] comes from.
  - Added a reference to apple_version[] in checksyms.c, cmpdylib.c, lipo.c,
    size.c, strings.c, nm.c, redo_prebinding.c, seg_addr_table.c, check_dylib.c 
    codesign_allocate.c, ctf_insert.c, seg_hack.c, install_name_tool.c, indr.c,
    strip.c and pagestuff.c.

Changes for the 5.30 release (the cctools-818 release):
- Fixed strip(1) to account for the size of the function starts data when the
  binary does not have a dynamic symbol table command.  It should have
  conditionalized on having a dynamic symbol table command but just the load
  command that has the data.  Radar bug #10506809.

Changes for the 5.30 release (the cctools-816 release):
- Changed ctf_insert(1) to allow a static binary with a dynamic symbol table
  load command that has local relocation entries.  Radar bug #10405248.

Changes for the 5.30 release (the cctools-815 release):
- Added the os_tools_install target in the Makefile that only builds lipo(1)
  and strings(1).  Radar bug #10391158.

Changes for the 5.30 release (the cctools-814 release):
- Changed strip(1) to use "ld -r" on 32-bit objects now that the blocking
  bug in ld(1) is fixed.  Radar bug #7076828.
- Added support for new load commands LC_MAIN, LC_DATA_IN_CODE,
  LC_SOURCE_VERSION and LC_DYLIB_CODE_SIGN_DRS.
  - Updated install_name_tool.c, pagestuff.c, redo_prebinding.c, strip.c,
    codesign_allocate.c, ctf_insert.c, indr.c and inout.c .
  Radar bug #10290817.
- Fixed ctf_insert(1) to correctly handle the LC_FUNCTION_STARTS load command
  and update it and move its data.  Radar bug #10171548.

Changes for the 5.30 release (the cctools-811 release):
- Changed the Makefile setting CXX to use c++ not g++.  Radar bug #10057952.

Changes for the 5.30 release (the cctools-809 release):
- Changed lipo(1) to determine the architecture of bitcode files, including
  as archive members.  Radar bug #9087924.

Changes for the 5.30 release (the cctools-808 release):
- Fixed a bug in create_library() in the loop that adjusted the ranlib structs
  ran_off was using the incorrect index value for:
    archs[0].toc_ranlibs[i].ran_off = archs[0].members[i].input_member_offset;
  which should have been:
    archs[0].toc_ranlibs[i].ran_off = archs[0].members[j].input_member_offset;
  Radar bug #9830754.

Changes for the 5.29 release (the cctools-805 release):
- Changed create_library() in libtool.c to check the new ofile bad_toc field
  and cause it to create a new library when this happens.  Radar bug #9475790.

Changes for the 5.29 release (the cctools-803 release):
- Changed libtool.c when running as ranlib(1) to attempt to update the table
  of contents in place for the common case for thin archives.  And removed the
  the time stamp checking for the "nop" ranlib case, which now ends up with just
  "touching" the file and adjusting the timestamps.  Radar bug #9354605.
  - Factored out existing code into new routines get_target_byte_sex() and
    put_toc_member().
  - Changed process() and removed the time stamp checking for the "nop" ranlib
    case.
  - Added the input_member_offset field to the struct member and added code to
    set its value in add_member().
  - Changed create_library() to take an ofile which is non-NULL if run as
    ranlib(1) and a thin archive.
  - Added code in create_library() to update the table of contents in place.
    And code to only "touch", write the SARMAG, if the table of contents is
    the same.  This code has to use the input_member_offset in cases that the
    thin input archive would not be same as produced by libtool(1) but still
    has member offsets at acceptable alignments.

Changes for the 5.29 release (the cctools-802 release):
- Fixed a problem with the change to libtool(1) for Radar bug #9354501.  It was
  not setting toc_uptodate to TRUE and was not doing this only when
  cmd_flags.ranlib == TRUE.  Radar bug #9418154.

Changes for the 5.29 release (the cctools-801 release):
- Changed process() in libtool.c to check that the table of contents was up to
  date based on the file's time stamp and the table of contents time stamp for
  archive files.  Then if it ranlib(1) being run do nothing if it is up to date.
  Radar bug #9354501.
- Fixed a bug in the error handling of pagestuff(1) when used with the -arch
  argument but missing an argument for which page.  Radar bug #8979851.

Changes for the 5.29 release (the cctools-800.3 release):
- Added support for armv7[fsk] to print_arch() in lipo.c .  Radar bug #8987684.

Changes for the 5.28 release (the cctools-798 release):
- Added this line to the Makefile:
    CXX = $(shell xcrun -find -sdk $(SDKROOT) g++)
  so that it uses the appropriate tool to link device-side code.  Radar bug
  #8684965.

Changes for the 5.28 release (the cctools-797 release):
- Added support for LC_DYLD_ENVIRONMENT in segedit.c .  Radar bug #8653976.

Changes for the 5.28 release (the cctools-796 release):
- Added checks in strings(1) to better protect against crashes if it is handed
  a malformed file.  Radar bug #8599283.
- Added the -arch option to pagestuff(1).  Radar bug #8379048.

Changes for the 5.28 release (the cctools-795 release):
- Changed ctf_insert(1) to allow the LC_FUNCTION_STARTS load command.  The
  change was in ctf_insert() in ctf_insert.c to remove the test for
  object->func_starts_info_cmd != NULL .  Radar bug #8490836.

Changes for the 5.28 release (the cctools-793 release):
- Fixed a problem in nm(1) not checking that a symbol is not undefined before
  checking that is a [symbol resolver] symbol.  Radar bug #8429570.

Changes for the 5.28 release (the cctools-792 release):
- Fixed more problems with incorrect support for LC_FUNCTION_STARTS.  There were
  missing output_func_start_info_data and output_func_start_info_data_size
  fields in the struct object that should have been used.  Updated the code in
  codesign_allocate.c, indr.c, inout.c, install_name_tool.c, redo_prebinding.c
  and strip.c which was incorrectly using output_split_info_data and
  output_split_info_data_size two use the new fields.  Radar bug #8401082. 

Changes for the 5.28 release (the cctools-790 release):
- Fixed problems with the incorrect support for LC_FUNCTION_STARTS.  Radar bug
  #8274584.
  - Updated setup_code_signature() and setup_code_signature() in
    codesign_allocate.c .
  - Updated ctf_insert() in ctf_insert.c to treat objects with function starts
    info as an error and not allowed for static binaries.
  - Updated translate_dylib() in indr.c .
  - Updated setup_object_symbolic_info() in inout.c .
  - Updated setup_object_symbolic_info() and update_load_commands() in
    install_name_tool.c .
  - Updated build_new_symbol_table() in and update_load_commands() in
    redo_prebinding.c .
  - Updated strip_object(), strip_LC_UUID_commands() and
    strip_LC_CODE_SIGNATURE_commands() in strip.c

Changes for the 5.28 release (the cctools-787 release):
- Changed libtool(1) and added testing the environment variable ZERO_AR_DATE to
  set the ar date to zero to allow testing and comparing things for exact binary
  equality.  Radar bug #7919021.
- Changed lipo(1) to attempt to stop a crash if the file can't be paged in after
  it has been successfully mapped.  Added a second fstat(2) call in 
  process_input_file(1) just before the first bytes of the mapped file are
  referenced, and then checked that it has the same size and mod time of the
  first stat.  Radar bug #8087586.
- Added support in nm(1) for symbols marked with N_SYMBOL_RESOLVER so that they
  are printed with [symbol resolver].  This change is in print_mach_symbols()
  in nm.c .  Radar bug #7901954.

Changes for the 5.28 release (the cctools-784 release):
- Fixed the -arch_only flag in libtool(1) for arm so that each subtype is
  treated as separate architecture. Radar bug #7864127.

Changes for the 5.28 release (the cctools-782 release):
- Added the -U option to nm(1) to not print undefined symbols. Radar bug
  #7761111.
- Changed nm(1)'s -m printing to support 'weak symbol automatically hidden' in
  print_mach_symbols() in nm.c.  Radar bug #5021217.

Changes for the 5.28 release (the cctools-781 release):
- Changed codesign_allocate(1) to allow it to be used on any Mach-O file.
  Radar bug #7689781.
- Added the program ctf_insert(1) to add a (__CTF,__ctf) section to a statically
  linked Mach-O file.  Radar bug #7016839.
- Added support for LC_LOAD_UPWARD_DYLIB in update_load_commands() in
  install_name_tool.c, in nm() in nm.c and in replace_sections() in segedit.c .
  Radar bug #7659206.

Changes for the 5.28 release (the cctools-780 release):
- Changed trunc() to trnc() in libtool.c and removed -fno-builtin-trunc from the
  Makefile.
- Improved the error checking in the redo_prebinding code so that
  contents_pointer_for_vmaddr() checks to make sure the pointer is not in the
  object's headers or link edit information.  Radar bug #6081358.

Changes for the 5.28 release (the cctools-779 release):
- Fixed bugs in install_name_tool.c in parsing -change and -rpath. Radar bug
  #7477104.

Changes for the 5.28 release (the cctools-777 release):
- Changed round() to rnd() and stuff/round.h to stuff/rnd.h in all files and
  removed -fno-builtin-round from the Makefile.  Radar bug #7475139.
- Changed the Makefile to use -Os for OFLAG.  Radar bug #7475093.
- Change contents_pointer_for_vmaddr() in redo_prebinding.c to ignore segments
  with a zero vmaddr since these are unmapped segments.  Radar bug #7467115.

Changes for the 5.28 release (the cctools-776 release):
- Improved the error checking in the redo_prebinding code so that
  contents_pointer_for_vmaddr() checks to make sure the pointer is in the
  section's contents of the segment.  Checks also added to libstuff's
  check_Mach_O() in ofile.c to make sure that sections are contained in
  their segments.  Radar bug #6081358.

Changes for the 5.27 release (the cctools-773 release):
- Fixed a typo in two lipo(1) error messages where "it's" should have been
  "its".  Radar bug 7362293.

Changes for the 5.27 release (the cctools-772 release):
- Fixed a bug in lipo(1) with the -extract option in main() in the loop that
  was removing those thin files not marked for extraction where the inner loop
  was looping once to many times.  Radar bug #7255585.

Changes for the 5.27 release (the cctools-768 release):
- Fixed a bug in checksyms() that was not verifying read-only-relocs in 64-bit
  binaries.  The routine check_dynamic_binary() had a typo where LC_SEGMENT
  should have been LC_SEGMENT_64.  Also changed checksyms() to not call
  check_dynamic_binary() if the filetype is MH_KEXT_BUNDLE.  Radar bug #7236271.

Changes for the 5.27 release (the cctools-762 release):
- Changed the Makefile to set CC when when SDKROOT is set.  Radar bug #7078805.

Changes for the 5.27 release (the cctools-760 release):
- Changed the lipo(1) so the the armv7 stuff is a no longer
