-Only in misc/: CVS
-diff -rub misc/Makefile misc/Makefile
---- misc/Makefile Tue Jan 14 23:35:29 2003
-+++ misc/Makefile Sat Sep 6 20:17:36 2003
-@@ -2,11 +2,11 @@
- OFLAG = -O
- RC_OS = macos
- ifeq "macos" "$(RC_OS)"
-- X_CFLAGS := $(shell if [ "$(RC_RELEASE)" != "Beaker" ] && \
-+ X_CFLAGS := $(shell if [ `uname` != "Linux" ] && [ "$(RC_RELEASE)" != "Beaker" ] && \
- [ "$(RC_RELEASE)" != "Bunsen" ] && \
- [ "$(RC_RELEASE)" != "Gonzo" ] && \
- [ "$(RC_RELEASE)" != "Kodiak" ]; then \
-- echo -Wno-long-double -no-cpp-precomp; \
-+ echo -Wno-long-double -no-cpp-precomp ; \
- fi; )
- endif
-
-@@ -14,11 +14,16 @@
- CFLAGS = $(OFLAG) -g \
- -I$(SRCROOT) -I$(SRCROOT)/../include -I$(OFILE_DIR)
- else
-- CFLAGS = $(OFLAG) -g -Wall -Wno-precomp $(X_CFLAGS) \
-+ ifeq "Linux" "$(shell uname)"
-+ CFLAGS = $(OFLAG) -g -Wall $(X_CFLAGS) \
-+ -I$(SRCROOT) -I$(SRCROOT)/../include -I$(OFILE_DIR) -D__LITTLE_ENDIAN__ -U__BIG_ENDIAN__ -D__ppc__ -I/usr/include -I../../macosx-include
-+ else
-+ CFLAGS = $(OFLAG) -g -Wall $(X_CFLAGS) \
- -I$(SRCROOT) -I$(SRCROOT)/../include -I$(OFILE_DIR)
-+ endif
- endif
-
--USE_DEPENDENCY_FILE := $(shell if [ "$(notdir $(CC))" != "mwccppc" ]; then \
-+USE_DEPENDENCY_FILE := $(shell if [ `uname` != "Linux" ] && [ "$(notdir $(CC))" != "mwccppc" ]; then \
- echo YES ; else echo NO ; \
- fi; )
-
-@@ -44,10 +49,7 @@
- LOCLIBDIR = /usr/local/lib
-
- CFILES1 = libtool.c
--CFILES2 = main.c lipo.c size.c strings.c nm.c checksyms.c inout.c \
-- indr.c strip.c atom.c segedit.c kern_tool.c cmpdylib.c \
-- dylib_pcsampler.c pagestuff.c redo_prebinding.c seg_addr_table.c \
-- check_dylib.c seg_hack.c check_hints.c install_name_tool.c
-+CFILES2 = seg_hack.c strip.c
- ifeq "nextstep" "$(RC_OS)"
- CFILES3 = file.c ar.c
- endif
-@@ -56,11 +58,7 @@
- notes
-
-
--PROGS = lipo.NEW size.NEW strings.NEW nm.NEW \
-- libtool.NEW checksyms.NEW indr.NEW strip.NEW nmedit.NEW \
-- segedit.NEW kern_tool.NEW cmpdylib.NEW \
-- dylib_pcsampler.NEW pagestuff.NEW redo_prebinding.NEW \
-- seg_addr_table.NEW check_dylib.NEW seg_hack.NEW install_name_tool.NEW
-+PROGS = seg_hack.NEW strip.NEW
-
- teflon_all macos_all: $(PROGS)
-
-@@ -71,7 +69,7 @@
- lib_ofiles: $(OFILE_DIR) $(SYMROOT) libredo_prebinding.a
-
- vers.c:
-- vers_string -c $(VERS_STRING_FLAGS) cctools_misc > $(OFILE_DIR)/$@
-+ ./vers_string -c $(VERS_STRING_FLAGS) cctools_misc > $(OFILE_DIR)/$@
-
- ifeq "NO" "$(USE_DEPENDENCY_FILE)"
- .c.o:
-@@ -222,6 +220,7 @@
- $(OFILE_DIR)/seg_hack.o $(OFILE_DIR)/vers.o $(LIBSTUFF)
- $(CC) $(CFLAGS) $(RC_CFLAGS) -o $(SYMROOT)/seg_hack.NEW \
- $(OFILE_DIR)/seg_hack.private.o
-+ cp $(SYMROOT)/seg_hack.NEW $(SYMROOT)/seg_hack
-
- install_name_tool.NEW: install_name_tool.o vers.o
- $(CC) $(CFLAGS) $(RC_CFLAGS) -nostdlib -r \
-@@ -331,7 +330,8 @@
- $(SYMROOT)/redo_prebinding.NEW \
- $(SYMROOT)/libredo_prebinding.a \
- $(SYMROOT)/kern_tool.NEW \
-- $(SYMROOT)/cmpdylib.NEW
-+ $(SYMROOT)/cmpdylib.NEW \
-+ $(SYMROOT)/seg_hack
-
- shlib_clean:
- -rm -f \
-Only in misc/: ar.c
-Only in misc/: atom.c
-Only in misc/: check_dylib.c
-Only in misc/: check_hints.c
-Only in misc/: checksyms.c
-Only in misc/: cmpdylib.c
-Only in misc/: dylib_pcsampler.c
-Only in misc/: file.c
-Only in misc/: indr.c
-Only in misc/: inout.c
-Only in misc/: install_name_tool.c
-Only in misc/: kern_tool.c
-Only in misc/: libtool.c
-Only in misc/: lipo.c
-Only in misc/: main.c
-Only in misc/: nm.c
-diff -rub misc/notes misc/notes
---- misc/notes Tue Jan 14 23:35:29 2003
-+++ misc/notes Mon Aug 25 12:12:34 2003
-@@ -7,6 +7,148 @@
- could have been set otherwise and does not print the next line.
- - Maybe add fat support for segedit(1)
-
-+Changes for the 5.12 release (the cctools-474 release):
-+- Fixed a bug in redo_prebinding that was leaking memory if the
-+ allow_missing_architectures parameter was used and the fat file did not
-+ contain an architecture. The fix was in load_library() in 4 places it
-+ checks to see if the missing architecure is allowed to be missing and it now
-+ unmap's the ofile before returning. Radar bug #3144803.
-+
-+Changes for the 5.12 release (the cctools-472 release):
-+- Fixed a bug in seg_addr_table(1) when run with -relayout the <<< Next split
-+ address to assign >>> isn't getting set properly. The fix in in main() to add
-+ relayout == FALSE to the if() condition for the code that loops and updates
-+ the NEXT_SPLIT_ADDRESS_TO_ASSIGN. Radar bug #3245958.
-+
-+Changes for the 5.12 release (the cctools-470 release):
-+- Added the -c option to strip(1) to strip the section contents of a dynamic
-+ shared library and create a stub library. Radar bug #3235093.
-+- Changed install_name_tool(1) to not change MH_DYLIB_STUB filetypes.
-+ Radar bug #3235093.
-+- Added the flag -search_paths_first to cause -lx flags to search each path
-+ for .dylib then .a before searching next path to libtool(1). Radar bug
-+ #3176974.
-+ - Added the enum bool variable search_paths_first to the cmd_flags struct and
-+ code to parse out the option, set variable and add it to the ldflags[] in
-+ main() .
-+ - The new static routines search_paths_for_lname() and search_path_for_lname()
-+ were added.
-+ - In file_name_from_l_flag() a test of the new search_paths_first variable is
-+ done and if TRUE then search_paths_for_lname() is called.
-+
-+Changes for the 5.12 release (the cctools-469 release):
-+- Added support for the -weak-lx, -weak_library and -weak_framework flags to
-+ libtool(1). Radar bug #3069758.
-+- Fixed a bug seg_addr_table(1) in next_flat_seg1addr() where the variable i
-+ was previously changed to unsigned. The second loop uses this varaiable as
-+ signed and thus this change was causing the loop to never terminate. Radar
-+ bug 3225931.
-+
-+Changes for the 5.12 release (the cctools-466 release):
-+- Fixed a bug in libtool(1) for the -static option that caused it to crash if
-+ the objects contained no symbols to put in the table of contents. Radar bug
-+ #3217471.
-+- 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.
-+- Changed print_mach_symbols() in nm.c to print "(dynamically looked up)" for
-+ the library ordinal DYNAMIC_LOOKUP_ORDINAL which are looked up dynamically
-+ with flat namespace semantics in two-level namespace images. Radar bug
-+ #3210803.
-+- Changed get_primary_lib() in redo_prebinding.c to check for the library
-+ ordinal DYNAMIC_LOOKUP_ORDINAL and return NULL. Radar bug #3210803.
-+
-+Changes for the 5.12 release (the cctools-464 release):
-+- Made changes to build cleanly with gcc3.3
-+ - Removed -Wno-precomp from the Makefile
-+ - Fixed warnings for "comparison between signed and unsigned" in lipo.c,
-+ size.c, strings.c, nm.c, libtool.c, checksyms.c, indr.c, strip.c, segedit.c,
-+ kern_tool.c, cmpdylib.c, dylib_pcsampler.c, pagestuff.c, redo_prebinding.c,
-+ seg_addr_table.c, check_dylib.c, seg_hack.c and install_name_tool.c.
-+
-+Changes for the 5.12 release (the cctools-463 release):
-+- Added support for MH_DYLIB_STUB libraries. Radar bug #3193744.
-+ - Added the testing for MH_DYLIB_STUB along with MH_DYLIB in add_member()
-+ in libtool.c .
-+ - Added the testing for MH_DYLIB_STUB along with MH_DYLIB in
-+ translate_object() in indr.c in the error check.
-+ - Added a case for MH_DYLIB_STUB in type_buf() in file.c (note this is the
-+ old file(1) command and is no longer used).
-+ - Added the testing for MH_DYLIB_STUB along with MH_DYLIB in check_dylib()
-+ in cmpdylib.c in 2 places.
-+ - Added the testing for MH_DYLIB_STUB along with MH_DYLIB in checksyms() and
-+ in check_dynamic_binary() in checksyms.c in 3 places in all.
-+ - Added the testing for MH_DYLIB_STUB along with MH_DYLIB in check_hints.c .
-+
-+Changes for the 5.12 release (the cctools-461 release):
-+- Fixed a bug in install_name_tool(1) that caused it to crash when the new
-+ load commands were smaller than the old load commands. Radar bug #3161586.
-+
-+Changes for the 5.12 release (the cctools-456 release):
-+- Fixed a bug in the redo_prebinding code when the allow_missing_architectures
-+ parameter to the redo_prebinding() API is non-zero. In the routine
-+ load_library() an extra check is needed to not cause an error if we are
-+ allowing missing architectures. The case where this happens is when there
-+ is a fat file that the architecture we don't care about depends on a library
-+ in another fat file but the time stamps for the libraries don't match.
-+ Radar bug #3144552.
-+
-+Changes for the 5.12 release (the cctools-455 release):
-+- Fixed a bug in the redo_prebinding code in the routine link_library_module()
-+ in redo_prebinding.c. The problem was that when a reference to a private
-+ extern was found only the module containing it was marked linked. A call
-+ to link_library_module() for that module was needed to pull in its
-+ dependencies and get those modules marked as LINKED. Radar bug #3126383.
-+
-+Changes for the 5.12 release (the cctools-454 release):
-+- Fixed a bug where seg_addr_table doesn't catch when an address is assigned in
-+ the "alternate" area. seg_addr_table(1) was using the wrong constant to
-+ check the validity of newly assigned addresses, the fix is to use the correct
-+ constant. Radar bug #3138181.
-+
-+Changes for the 5.12 release (the cctools-452 release):
-+- Fixed the bug fix done for Radar bug #3124262 below in the redo_prebinding
-+ code. The copied code from the above loop was wrong as it changed this:
-+ if(libs[i].module_states[j] == LINKED)
-+ to this:
-+ if(libs[j].module_states[k] == LINKED ||
-+ (prebind_all_twolevel_modules == TRUE &&
-+ (libs[j].ofile->mh->flags & MH_TWOLEVEL) ==
-+ MH_TWOLEVEL))
-+ which should have been this:
-+ if(libs[i].module_states[j] == LINKED ||
-+ (prebind_all_twolevel_modules == TRUE &&
-+ (libs[i].ofile->mh->flags & MH_TWOLEVEL) ==
-+ MH_TWOLEVEL))
-+ which used the correct index variables. Radar bug #3133589.
-+
-+Changes for the 5.12 release (the cctools-451 release):
-+- Fixed a bug in the redo_prebinding code that did not set the all the bits
-+ in the linked_modules bit vector for any new LC_PREBOUND_DYLIB load commands
-+ when prebind_all_twolevel_modules was TRUE. Radar bug #3124262.
-+
-+Changes for the 5.12 release (the cctools-448 release):
-+- Added an entry stabnames[] array in nm.c for N_OPT that is emitted with
-+ gcc2_compiled and in gcc source. Radar bug #3104328.
-+
-+Changes for the 5.12 release (the cctools-447 release):
-+- Fixed a bug in add_member() in libtool.c when get_arch_family_from_cputype()
-+ returns NULL.
-+
-+Changes for the 5.11 release (the cctools-446 release):
-+- Added passing -x from libtool to ld. Radar bug #3088301.
-+
-+Changes for the 5.11 release (the cctools-444 release):
-+- Added passing -exported_symbols_list & -unexported_symbols_list from libtool
-+ to ld. Radar bug #3083844.
-+- Factored out some of the symbol list stuff out of strip.c into libstuff so
-+ ld(1)'s -exported_symbols_list and -unexported_symbols_list options can use
-+ it. Radar bug #3083844.
-+
-+Changes for the 5.11 release (the cctools-443 release):
-+- Added passing -single_module & -multi_module from libtool to ld. Also added
-+ passing -u flags. Radar #3080780.
-+
- Changes for the 5.11 release (the cctools-440 release):
- - Fixed the warnings about extra tokens at end of #endif directive in
- check_hints.c, strip.c and make_defs.h (Radar bug #3072042).
-Only in misc/: pagestuff.c
-Only in misc/: redo_prebinding.c
-Only in misc/: seg_addr_table.c
-Only in misc/: seg_hack
-Only in misc/: seg_hack.NEW
-diff -rub misc/seg_hack.c misc/seg_hack.c
---- misc/seg_hack.c Fri Sep 6 18:28:06 2002
-+++ misc/seg_hack.c Mon Aug 25 12:12:34 2003
-@@ -58,7 +58,7 @@
- char **argv,
- char **envp)
- {
-- unsigned long i;
-+ int i;
- char *input, *output;
- struct arch *archs;
- unsigned long narchs;
-Only in misc/: seg_hack.o
-Only in misc/: seg_hack.private.o
-Only in misc/: segedit.c
-Only in misc/: size.c
-Only in misc/: strings.c
-Only in misc/: strip.NEW
-diff -rub misc/strip.c misc/strip.c
---- misc/strip.c Tue Jan 14 23:35:30 2003
-+++ misc/strip.c Mon Aug 25 22:02:32 2003
-@@ -38,11 +38,13 @@
- #include <mach-o/reloc.h>
- #include <mach-o/nlist.h>
- #include <mach-o/stab.h>
--#include <stuff/breakout.h>
--#include <stuff/allocate.h>
--#include <stuff/errors.h>
--#include <stuff/round.h>
-+#include "stuff/breakout.h"
-+#include "stuff/allocate.h"
-+#include "stuff/errors.h"
-+#include "stuff/round.h"
- #include "stuff/reloc.h"
-+#include "stuff/reloc.h"
-+#include "stuff/symbol_list.h"
-
- /* These are set from the command line arguments */
- char *progname; /* name of the program for error messages (argv[0]) */
-@@ -62,6 +64,8 @@
- static long Sflag; /* -S strip only debugger symbols N_STAB */
- static long xflag; /* -x strip non-globals */
- static long Xflag; /* -X strip local symbols with 'L' names */
-+static long cflag; /* -c strip section contents from dynamic libraries
-+ files to create stub libraries */
- static long strip_all = 1;
- /*
- * This is set on an object by object basis if the strip_all flag is still set
-@@ -76,11 +80,6 @@
- * save_symbols is the names of the symbols from the -s <file> argument.
- * remove_symbols is the names of the symbols from the -R <file> argument.
- */
--struct symbol_list {
-- char *name; /* name of the global symbol */
-- struct nlist *sym; /* pointer to the nlist structure for this symbol */
-- enum bool seen; /* set if the symbol is seen in the input file */
--};
- static struct symbol_list *save_symbols = NULL;
- static unsigned long nsave_symbols = 0;
- static struct symbol_list *remove_symbols = NULL;
-@@ -106,12 +105,12 @@
- * and the new counts of local, defined external and undefined symbols.
- */
- static struct nlist *new_symbols = NULL;
--static long new_nsyms = 0;
-+static unsigned long new_nsyms = 0;
- static char *new_strings = NULL;
--static long new_strsize = 0;
--static long new_nlocalsym = 0;
--static long new_nextdefsym = 0;
--static long new_nundefsym = 0;
-+static unsigned long new_strsize = 0;
-+static unsigned long new_nlocalsym = 0;
-+static unsigned long new_nextdefsym = 0;
-+static unsigned long new_nundefsym = 0;
-
- /*
- * These hold the new table of contents, reference table and module table for
-@@ -169,9 +168,9 @@
- struct member *member,
- struct object *object,
- struct nlist *symbols,
-- long nsyms,
-+ unsigned long nsyms,
- char *strings,
-- long strsize,
-+ unsigned long strsize,
- struct dylib_table_of_contents *tocs,
- unsigned long ntoc,
- struct dylib_module *mods,
-@@ -202,9 +201,9 @@
- struct member *member,
- struct object *object,
- struct nlist *symbols,
-- long nsyms,
-+ unsigned long nsyms,
- char *strings,
-- long strsize,
-+ unsigned long strsize,
- struct dylib_table_of_contents *tocs,
- unsigned long ntoc,
- struct dylib_module *mods,
-@@ -213,19 +212,6 @@
- unsigned long nextrefsyms);
- #endif /* NMEDIT */
-
--static void setup_symbol_list(
-- char *file,
-- struct symbol_list **list,
-- unsigned long *size);
--
--static int cmp_qsort_name(
-- const struct symbol_list *sym1,
-- const struct symbol_list *sym2);
--
--static int cmp_bsearch(
-- const char *name,
-- const struct symbol_list *sym);
--
- #ifndef NMEDIT
- static void setup_debug_filenames(
- char *dfile);
-@@ -260,7 +246,8 @@
- char *argv[],
- char *envp[])
- {
-- unsigned long i, j, args_left, files_specified;
-+ int i;
-+ unsigned long j, args_left, files_specified;
- struct arch_flag *arch_flags;
- unsigned long narch_flags;
- enum bool all_archs;
-@@ -388,6 +375,12 @@
- strip_all = 0;
- #endif /* !defined(NMEDIT) */
- break;
-+#ifndef NMEDIT
-+ case 'c':
-+ cflag = 1;
-+ strip_all = 0;
-+ break;
-+#endif /* NMEDIT */
- default:
- error("unrecognized option: %s", argv[i]);
- usage();
-@@ -421,16 +414,16 @@
- if(Rfile){
- setup_symbol_list(Rfile, &remove_symbols, &nremove_symbols);
- if(sfile){
-- for(i = 0; i < nremove_symbols ; i++){
-- sp = bsearch(remove_symbols[i].name,
-+ for(j = 0; j < nremove_symbols ; j++){
-+ sp = bsearch(remove_symbols[j].name,
- save_symbols, nsave_symbols,
- sizeof(struct symbol_list),
- (int (*)(const void *, const void *))
-- cmp_bsearch);
-+ symbol_list_bsearch);
- if(sp != NULL){
- error("symbol name: %s is listed in both -s %s and -R "
- "%s files (can't be both saved and removed)",
-- remove_symbols[i].name, sfile, Rfile);
-+ remove_symbols[j].name, sfile, Rfile);
- }
- }
- if(errors)
-@@ -635,7 +628,7 @@
-
- /*
- * Now this arch[i] has been selected to be processed so process it
-- * according to it's type.
-+ * according to its type.
- */
- if(archs[i].type == OFILE_ARCHIVE){
- for(j = 0; j < archs[i].nmembers; j++){
-@@ -753,7 +746,7 @@
- unsigned long nextrefsyms;
- unsigned long *indirectsyms;
- unsigned long nindirectsyms;
-- long i, j, k;
-+ unsigned long i, j, k;
- struct load_command *lc;
- struct segment_command *sg;
- struct section *s;
-@@ -780,6 +773,15 @@
- strings = object->object_addr + object->st->stroff;
- strsize = object->st->strsize;
-
-+#ifndef NMEDIT
-+ if(object->mh->filetype != MH_DYLIB && cflag)
-+ fatal_arch(arch, member, "-c can't be used on non-dynamic "
-+ "library: ");
-+#endif /* !(NMEDIT) */
-+ if(object->mh->filetype == MH_DYLIB_STUB)
-+ fatal_arch(arch, member, "dynamic stub library can't be changed "
-+ "once created: ");
-+
- if(object->mh->filetype == MH_DYLIB){
- tocs = (struct dylib_table_of_contents *)
- (object->object_addr + object->dyst->tocoff);
-@@ -795,6 +797,71 @@
- swap_dylib_module(mods, nmodtab, host_byte_sex);
- swap_dylib_reference(refs, nextrefsyms, host_byte_sex);
- }
-+#ifndef NMEDIT
-+ /*
-+ * In the -c flag is specified then strip the section contents of
-+ * this dynamic library and change it into a stub library. When
-+ * creating a stub library the timestamp is not changed.
-+ */
-+ if(cflag){
-+ object->mh->filetype = MH_DYLIB_STUB;
-+ arch->dont_update_LC_ID_DYLIB_timestamp = TRUE;
-+
-+ lc = object->load_commands;
-+ for(i = 0; i < object->mh->ncmds; i++){
-+ if(lc->cmd == LC_SEGMENT){
-+ sg = (struct segment_command *)lc;
-+ if(strcmp(sg->segname, SEG_LINKEDIT) != 0){
-+ /*
-+ * Zero out the section offset, reloff, and size
-+ * fields as the section contents are being removed.
-+ */
-+ s = (struct section *)&sg[1];
-+ for(j = 0; j < sg->nsects; j++){
-+ /*
-+ * For section types with indirect tables we
-+ * do not zero out the section size in a stub
-+ * library. As the section size is needed to
-+ * know now many indirect table entries the
-+ * section has. This is a bit odd but programs
-+ * dealing with MH_DYLIB_STUB filetypes special
-+ * case this.
-+ */
-+ section_type = s[j].flags & SECTION_TYPE;
-+ if(section_type != S_SYMBOL_STUBS &&
-+ section_type != S_LAZY_SYMBOL_POINTERS &&
-+ section_type != S_NON_LAZY_SYMBOL_POINTERS){
-+ s[j].size = 0;
-+ }
-+ s[j].addr = 0;
-+ s[j].offset = 0;
-+ s[j].reloff = 0;
-+ }
-+ /* zero out file offset and size in the segment */
-+ sg->fileoff = 0;
-+ sg->filesize = 0;
-+ }
-+ }
-+ lc = (struct load_command *)((char *)lc + lc->cmdsize);
-+ }
-+ /*
-+ * To get the right amount of the file copied out by writeout()
-+ * for the case when we are stripping out the section contents
-+ * we reduce the object size by the size of the section contents
-+ * including the padding after the load commands. Then this
-+ * size minus the size of the input symbolic information is
-+ * copied out.
-+ */
-+ object->object_size -= (object->seg_linkedit->fileoff -
-+ (sizeof(struct mach_header) + object->mh->sizeofcmds));
-+ /*
-+ * Set the file offset to the link edit information to be right
-+ * after the load commands.
-+ */
-+ object->seg_linkedit->fileoff =
-+ sizeof(struct mach_header) + object->mh->sizeofcmds;
-+ }
-+#endif /* !(NMEDIT) */
- }
- else{
- tocs = NULL;
-@@ -877,7 +944,12 @@
-
- }
-
-- if(object->mh->filetype == MH_DYLIB){
-+ /*
-+ * If the -c option is specified the object's filetype will
-+ * have been changed from MH_DYLIB to MH_DYLIB_STUB above.
-+ */
-+ if(object->mh->filetype == MH_DYLIB ||
-+ object->mh->filetype == MH_DYLIB_STUB){
- object->output_tocs = new_tocs;
- object->output_ntoc = new_ntoc;
- #ifdef NMEDIT
-@@ -910,9 +982,20 @@
- object->dyst->ntoc * sizeof(struct dylib_table_of_contents)+
- object->dyst->nmodtab * sizeof(struct dylib_module) +
- object->dyst->nextrefsyms * sizeof(struct dylib_reference);
-+#ifndef NMEDIT
-+ /*
-+ * When stripping out the section contents to create a
-+ * dynamic library stub the relocation info also gets
-+ * stripped.
-+ */
-+ if(!cflag)
-+#endif /* !(NMEDIT) */
-+ {
- object->output_sym_info_size +=
- object->dyst->nlocrel * sizeof(struct relocation_info) +
-- object->dyst->nextrel * sizeof(struct relocation_info) +
-+ object->dyst->nextrel * sizeof(struct relocation_info);
-+ }
-+ object->output_sym_info_size +=
- object->dyst->nindirectsyms * sizeof(unsigned long) +
- new_ntoc * sizeof(struct dylib_table_of_contents)+
- object->dyst->nmodtab * sizeof(struct dylib_module) +
-@@ -961,10 +1044,24 @@
- if(object->dyst->nlocrel != 0){
- object->output_loc_relocs = (struct relocation_info *)
- (object->object_addr + object->dyst->locreloff);
-+#ifndef NMEDIT
-+ /*
-+ * When stripping out the section contents to create a
-+ * dynamic library stub the relocation info also gets
-+ * stripped.
-+ */
-+ if(cflag){
-+ object->dyst->nlocrel = 0;
-+ object->dyst->locreloff = 0;
-+ }
-+ else
-+#endif /* defined(NMEDIT) */
-+ {
- object->dyst->locreloff = offset;
- offset += object->dyst->nlocrel *
- sizeof(struct relocation_info);
- }
-+ }
- else
- object->dyst->locreloff = 0;
-
-@@ -990,10 +1087,24 @@
- if(object->dyst->nextrel != 0){
- object->output_ext_relocs = (struct relocation_info *)
- (object->object_addr + object->dyst->extreloff);
-+#ifndef NMEDIT
-+ /*
-+ * When stripping out the section contents to create a
-+ * dynamic library stub the relocation info also gets
-+ * stripped.
-+ */
-+ if(cflag){
-+ object->dyst->nextrel = 0;
-+ object->dyst->extreloff = 0;
-+ }
-+ else
-+#endif /* defined(NMEDIT) */
-+ {
- object->dyst->extreloff = offset;
- offset += object->dyst->nextrel *
- sizeof(struct relocation_info);
- }
-+ }
- else
- object->dyst->extreloff = 0;
-
-@@ -1014,6 +1125,24 @@
- object->dyst->tocoff = 0;
-
- if(object->dyst->nmodtab != 0){
-+#ifndef NMEDIT
-+ /*
-+ * When stripping out the section contents to create a
-+ * dynamic library stub zero out the fields in the module
-+ * table for the sections and relocation information.
-+ */
-+ if(cflag){
-+ /* Clear Objective-C address and size from modules. */
-+ for(k = 0; k < object->dyst->nmodtab; k++){
-+ mods[k].iinit_iterm = 0;
-+ mods[k].ninit_nterm = 0;
-+ mods[k].iextrel = 0;
-+ mods[k].nextrel = 0;
-+ mods[k].objc_module_info_addr = 0;
-+ mods[k].objc_module_info_size = 0;
-+ }
-+ }
-+#endif /* !(NMEDIT) */
- object->dyst->modtaboff = offset;
- offset += object->dyst->nmodtab *
- sizeof(struct dylib_module);
-@@ -1423,120 +1552,6 @@
- }
- }
-
--/*
-- * This is called to setup a symbol list from a file. It reads the file with
-- * the strings in it and places them in an array of symbol_list structures and
-- * then sorts them by name.
-- *
-- * The file that contains the symbol names must have symbol names one per line,
-- * leading and trailing white space is removed and lines starting with a '#'
-- * and lines with only white space are ignored.
-- */
--static
--void
--setup_symbol_list(
--char *file,
--struct symbol_list **list,
--unsigned long *size)
--{
-- int fd, i, j, len, strings_size;
-- struct stat stat_buf;
-- char *strings, *p, *line;
--
-- if((fd = open(file, O_RDONLY)) < 0){
-- system_error("can't open: %s", file);
-- return;
-- }
-- if(fstat(fd, &stat_buf) == -1){
-- system_error("can't stat: %s", file);
-- close(fd);
-- return;
-- }
-- strings_size = stat_buf.st_size;
-- strings = (char *)allocate(strings_size + 2);
-- strings[strings_size] = '\n';
-- strings[strings_size + 1] = '\0';
-- if(read(fd, strings, strings_size) != strings_size){
-- system_error("can't read: %s", file);
-- close(fd);
-- return;
-- }
-- /*
-- * Change the newlines to '\0' and count the number of lines with
-- * symbol names. Lines starting with '#' are comments and lines
-- * contain all space characters do not contain symbol names.
-- */
-- p = strings;
-- line = p;
-- for(i = 0; i < strings_size + 1; i++){
-- if(*p == '\n' || *p == '\r'){
-- *p = '\0';
-- if(*line != '#'){
-- while(*line != '\0' && isspace(*line))
-- line++;
-- if(*line != '\0')
-- (*size)++;
-- }
-- p++;
-- line = p;
-- }
-- else{
-- p++;
-- }
-- }
-- *list = (struct symbol_list *)
-- allocate((*size) * sizeof(struct symbol_list));
--
-- /*
-- * Place the strings in the list trimming leading and trailing spaces
-- * from the lines with symbol names.
-- */
-- p = strings;
-- line = p;
-- for(i = 0; i < (*size); ){
-- p += strlen(p) + 1;
-- if(*line != '#' && *line != '\0'){
-- while(*line != '\0' && isspace(*line))
-- line++;
-- if(*line != '\0'){
-- (*list)[i].name = line;
-- (*list)[i].seen = FALSE;
-- i++;
-- len = strlen(line);
-- j = len - 1;
-- while(j > 0 && isspace(line[j])){
-- j--;
-- }
-- if(j > 0 && j + 1 < len && isspace(line[j+1]))
-- line[j+1] = '\0';
-- }
-- }
-- line = p;
-- }
--
-- qsort(*list, *size, sizeof(struct symbol_list),
-- (int (*)(const void *, const void *))cmp_qsort_name);
--
-- /* remove duplicates on the list */
-- for(i = 0; i < (*size); i++){
-- if(i + 1 < (*size)){
-- if(strcmp((*list)[i].name, (*list)[i+1].name) == 0){
-- for(j = 1; j < ((*size) - i - 1); j++){
-- (*list)[i + j].name = (*list)[i + j + 1].name;
-- }
-- *size = *size - 1;
-- }
-- }
-- }
--
--#ifdef DEBUG
-- printf("symbol list:\n");
-- for(i = 0; i < (*size); i++){
-- printf("0x%x name = %s\n", &((*list)[i]),(*list)[i].name);
-- }
--#endif /* DEBUG */
--}
--
- #ifndef NMEDIT
- /*
- * This is called if there is a -d option specified. It reads the file with
-@@ -1609,9 +1624,9 @@
- struct member *member,
- struct object *object,
- struct nlist *symbols,
--long nsyms,
-+unsigned long nsyms,
- char *strings,
--long strsize,
-+unsigned long strsize,
- struct dylib_table_of_contents *tocs,
- unsigned long ntoc,
- struct dylib_module *mods,
-@@ -1621,7 +1636,8 @@
- unsigned long *indirectsyms,
- unsigned long nindirectsyms)
- {
-- long i, j, k, n, inew_syms, save_debug, missing_syms, missing_symbols;
-+ unsigned long i, j, k, n, inew_syms, save_debug, missing_syms;
-+ unsigned long missing_symbols;
- char *p, *q, **pp, *basename;
- struct symbol_list *sp;
- unsigned long new_ext_strsize, len, *changes, inew_undefsyms;
-@@ -1686,7 +1702,7 @@
- for(i = 0; i < nsyms; i++){
- if(symbols[i].n_un.n_strx != 0){
- if(symbols[i].n_un.n_strx < 0 ||
-- symbols[i].n_un.n_strx > strsize){
-+ (unsigned long)symbols[i].n_un.n_strx > strsize){
- error_arch(arch, member, "bad string index for symbol "
- "table entry %ld in: ", i);
- return(FALSE);
-@@ -1838,7 +1854,7 @@
- save_symbols, nsave_symbols,
- sizeof(struct symbol_list),
- (int (*)(const void *, const void *))
-- cmp_bsearch);
-+ symbol_list_bsearch);
- if(sp != NULL){
- if(sp->sym == NULL){
- sp->sym = &(symbols[i]);
-@@ -1885,7 +1901,7 @@
- remove_symbols, nremove_symbols,
- sizeof(struct symbol_list),
- (int (*)(const void *, const void *))
-- cmp_bsearch);
-+ symbol_list_bsearch);
- if(sp != NULL){
- if((symbols[i].n_type & N_TYPE) == N_UNDF ||
- (symbols[i].n_type & N_TYPE) == N_PBUD){
-@@ -1960,7 +1976,7 @@
- save_symbols, nsave_symbols,
- sizeof(struct symbol_list),
- (int (*)(const void *, const void *))
-- cmp_bsearch);
-+ symbol_list_bsearch);
- if(sp != NULL){
- if(sp->sym != NULL &&
- (sp->sym->n_type & N_PEXT) != N_PEXT){
-@@ -2467,30 +2483,6 @@
- }
- #endif /* !defined(NMEDIT) */
-
--/*
-- * Function for qsort for comparing symbol list names.
-- */
--static
--int
--cmp_qsort_name(
--const struct symbol_list *sym1,
--const struct symbol_list *sym2)
--{
-- return(strcmp(sym1->name, sym2->name));
--}
--
--/*
-- * Function for bsearch for finding a symbol.
-- */
--static
--int
--cmp_bsearch(
--const char *name,
--const struct symbol_list *sym)
--{
-- return(strcmp(name, sym->name));
--}
--
- #ifndef NMEDIT
- /*
- * Function for qsort for comparing object names.
-@@ -2525,9 +2517,9 @@
- struct member *member,
- struct object *object,
- struct nlist *symbols,
--long nsyms,
-+unsigned long nsyms,
- char *strings,
--long strsize,
-+unsigned long strsize,
- struct dylib_table_of_contents *tocs,
- unsigned long ntoc,
- struct dylib_module *mods,
-@@ -2667,7 +2659,7 @@
- len = 0;
- if(symbols[i].n_un.n_strx != 0){
- if(symbols[i].n_un.n_strx < 0 ||
-- symbols[i].n_un.n_strx > strsize){
-+ (unsigned long)symbols[i].n_un.n_strx > strsize){
- error_arch(arch, member, "bad string index for symbol "
- "table entry %lu in: ", i);
- return(FALSE);
-@@ -2695,7 +2687,7 @@
- remove_symbols, nremove_symbols,
- sizeof(struct symbol_list),
- (int (*)(const void *, const void *))
-- cmp_bsearch);
-+ symbol_list_bsearch);
- if(sp != NULL){
- if(sp->sym != NULL){
- error_arch(arch, member, "more than one "
-@@ -2719,7 +2711,7 @@
- save_symbols, nsave_symbols,
- sizeof(struct symbol_list),
- (int (*)(const void *, const void *))
-- cmp_bsearch);
-+ symbol_list_bsearch);
- if(sp != NULL){
- if(sp->sym != NULL){
- error_arch(arch, member, "more than one "
-@@ -2738,7 +2730,7 @@
- remove_symbols, nremove_symbols,
- sizeof(struct symbol_list),
- (int (*)(const void *, const void *))
-- cmp_bsearch);
-+ symbol_list_bsearch);
- if(sp != NULL){
- if(sp->sym != NULL){
- error_arch(arch, member, "more than one symbol "
-@@ -2777,7 +2769,7 @@
- save_symbols, nsave_symbols,
- sizeof(struct symbol_list),
- (int (*)(const void *, const void *))
-- cmp_bsearch);
-+ symbol_list_bsearch);
- if(sp != NULL){
- if(sp->sym != NULL){
- error_arch(arch, member, "more than one symbol "
-@@ -2910,19 +2902,19 @@
- if((global_name[0] == '+' || global_name[0] == '-') &&
- global_name[1] == '['){
- j = 2;
-- while(j + symbols[i].n_un.n_strx < strsize &&
-+ while(j + (unsigned long)symbols[i].n_un.n_strx < strsize &&
- global_name[j] != ']')
- j++;
-- if(j + symbols[i].n_un.n_strx < strsize &&
-+ if(j + (unsigned long)symbols[i].n_un.n_strx < strsize &&
- global_name[j] == ']')
- j++;
- }
- else
- j = 0;
-- while(j + symbols[i].n_un.n_strx < strsize &&
-+ while(j + (unsigned long)symbols[i].n_un.n_strx < strsize &&
- global_name[j] != ':')
- j++;
-- if(j + symbols[i].n_un.n_strx >= strsize){
-+ if(j + (unsigned long)symbols[i].n_un.n_strx >= strsize){
- error_arch(arch, member, "bad N_STAB symbol name for entry "
- "%lu (does not contain ':' separating name from type) "
- "in: ", i);
-@@ -2945,7 +2937,8 @@
- symbols[i].n_sect = (*global_symbol)->n_sect;
- symbols[i].n_value = (*global_symbol)->n_value;
- symbols[i].n_desc = (*global_symbol)->n_desc;
-- if(j + 1 + symbols[i].n_un.n_strx >= strsize ||
-+ if(j + 1 + (unsigned long)symbols[i].n_un.n_strx >=
-+ strsize ||
- global_name[j+1] != 'G'){
- error_arch(arch, member, "bad N_GSYM symbol name "
- "for entry %lu (does not have type 'G' after "
-@@ -2955,7 +2948,8 @@
- global_name[j+1] = 'S';
- }
- else{ /* symbols[i].n_type == N_FUN */
-- if(j + 1 + symbols[i].n_un.n_strx >= strsize ||
-+ if(j + 1 + (unsigned long)symbols[i].n_un.n_strx >=
-+ strsize ||
- global_name[j+1] == 'F'){
- global_name[j+1] = 'f';
- }
-Only in misc/: strip.o
-Only in misc/: strip.private.o
-Only in misc/: vers.c
-Only in misc/: vers.o
-Only in misc/: vers_string