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 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.