diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 12d78619a6..85fba7bedd 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,41 @@ +Tue Oct 1 15:00:59 1996 Ian Lance Taylor + + * version.c (print_version): New function. + * bucomm.h (print_version): Declare. + * ar.c (program_version): Don't declare. + (do_show_version): Remove. + (usage): Add help parameter. Print bug report address. + (main): Set is_ranlib at start. Check for --help and --version. + Call print_version, not do_show_version. + * nlmconv.c (program_version): Don't declare. + (main): Call print_version. + (show_usage): Print bug report address. + * nm.c (program_version, print_version): Don't declare. + (usage): Print bug report address. + (main): Call print_version. + * objcopy.c (program_version): Don't declare. + (copy_usage): Print bug report address. + (strip_usage): Likewise. + (strip_main): Call print_version. + (copy_main): Likewise. + * objdump.c (program_version): Don't declare. + (usage): Print bug report address. + (main): Call print_version. + * size.c (program_version): Don't declare. + (usage): Print bug report address. + (main): Call print_version. + * strings.c (program_version): Don't declare. + (main): Call print_version. + (usage): Print bug report address. + * Makefile.in: Update dependencies. + +Thu Sep 19 14:53:15 1996 Ian Lance Taylor + + * ieee.c: Revert Monday's reflocalp patch, and apply this patch + instead: + (write_ieee_debugging_info): Write a dummy type at the end of the + global type block. + Mon Sep 16 15:30:54 1996 Ian Lance Taylor * ieee.c (struct ieee_write_type): Add reflocalp field. diff --git a/binutils/Makefile.in b/binutils/Makefile.in index 2c25944a41..b9936ef70c 100644 --- a/binutils/Makefile.in +++ b/binutils/Makefile.in @@ -25,12 +25,12 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ exec_prefix = @exec_prefix@ -bindir = $(exec_prefix)/bin -libdir = $(exec_prefix)/lib +bindir = @bindir@ +libdir = @libdir@ tooldir = $(exec_prefix)/$(target_alias) -datadir = $(prefix)/lib -mandir = $(prefix)/man +datadir = @datadir@ +mandir = @mandir@ man1dir = $(mandir)/man1 man2dir = $(mandir)/man2 man3dir = $(mandir)/man3 @@ -40,15 +40,14 @@ man6dir = $(mandir)/man6 man7dir = $(mandir)/man7 man8dir = $(mandir)/man8 man9dir = $(mandir)/man9 -infodir = $(prefix)/info -includedir = $(prefix)/include -docdir = $(datadir)/doc +infodir = @infodir@ +includedir = @includedir@ SHELL = /bin/sh INSTALL = `cd $(srcdir)/..;pwd`/install.sh -c -INSTALL_PROGRAM = $(INSTALL) -INSTALL_DATA = $(INSTALL) -m 644 +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ INSTALL_XFORM = $(INSTALL) -t='$(program_transform_name)' INSTALL_XFORM1 = $(INSTALL_XFORM) -b=.1 -m 644 @@ -58,6 +57,7 @@ CC = @CC@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ HLDFLAGS = @HLDFLAGS@ +HLDENV = @HLDENV@ RPATH_ENVVAR = @RPATH_ENVVAR@ MAKEINFO = makeinfo TEXI2DVI = texi2dvi @@ -76,15 +76,13 @@ LEX_OPTIONS = -I -Cem LEX = `if [ -f ../flex/flex ] ; then echo ../flex/flex ; else echo flex ; fi` # Distribution version -VERSION=cygnus-2.6 +VERSION=cygnus-2.7.1 # Distribution name DIST_NAME=binutils-${VERSION} # Where to find texinfo.tex to format docn with TeX TEXIDIR = $(srcdir)/../texinfo -#CC=gcc -Wall -CC=cc # these two are almost the same program AR_PROG=ar RANLIB_PROG=ranlib @@ -116,7 +114,8 @@ STAGESTUFF = $(PROGS) *.o # Files that can be generated, but should be in the distribution. # Don't build $(DEMANGLER_PROG).1, since its name may vary with the # configuration. -DISTSTUFF=arparse.c arparse.h arlex.c nlmheader.c sysinfo.c sysinfo.h syslex.c +DISTSTUFF=arparse.c arparse.h arlex.c nlmheader.c sysinfo.c sysinfo.h \ + syslex.c deflex.c # Stuff that goes in tooldir/ if appropriate TOOL_PROGS = nm.new strip.new ar ranlib $(DLLTOOL_PROG) @@ -247,25 +246,25 @@ info: binutils.info dvi: binutils.dvi $(SIZE_PROG): $(ADDL_DEPS) size.o - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(SIZE_PROG) size.o $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(SIZE_PROG) size.o $(ADDL_LIBS) $(EXTRALIBS) $(OBJCOPY_PROG): $(ADDL_DEPS) objcopy.o not-strip.o $(WRITE_DEBUG_OBJS) - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(OBJCOPY_PROG) objcopy.o not-strip.o $(WRITE_DEBUG_OBJS) $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(OBJCOPY_PROG) objcopy.o not-strip.o $(WRITE_DEBUG_OBJS) $(ADDL_LIBS) $(EXTRALIBS) $(STRINGS_PROG): $(ADDL_DEPS) strings.o - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(STRINGS_PROG) strings.o $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(STRINGS_PROG) strings.o $(ADDL_LIBS) $(EXTRALIBS) $(STRIP_PROG): $(ADDL_DEPS) objcopy.o is-strip.o $(WRITE_DEBUG_OBJS) - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(STRIP_PROG) objcopy.o is-strip.o $(WRITE_DEBUG_OBJS) $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(STRIP_PROG) objcopy.o is-strip.o $(WRITE_DEBUG_OBJS) $(ADDL_LIBS) $(EXTRALIBS) $(NM_PROG): $(ADDL_DEPS) nm.o - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(NM_PROG) nm.o $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(NM_PROG) nm.o $(ADDL_LIBS) $(EXTRALIBS) #libbfd is searched twice here ($(BFDLIB) and $(ADDL_LIBS)) because when a #shared libbfd is built with --enable-commonbfdlib, all of libopcodes is #available in libbfd.so and we don't want to link anything from libopcodes.a $(OBJDUMP_PROG): $(ADDL_DEPS) objdump.o prdbg.o $(DEBUG_OBJS) $(OPCODES_DEP) - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(OBJDUMP_PROG) objdump.o prdbg.o $(DEBUG_OBJS) $(BFDLIB) $(OPCODES) $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(OBJDUMP_PROG) objdump.o prdbg.o $(DEBUG_OBJS) $(BFDLIB) $(OPCODES) $(ADDL_LIBS) $(EXTRALIBS) underscore.c: stamp-under ; @true @@ -282,7 +281,7 @@ cplus-dem.o: $(BASEDIR)/libiberty/cplus-dem.c $(INCDIR)/getopt.h $(CC) -c -DMAIN -DVERSION='"$(VERSION)"' $(ALL_CFLAGS) $(BASEDIR)/libiberty/cplus-dem.c $(DEMANGLER_PROG): cplus-dem.o $(LIBIBERTY) underscore.o $(DEMANGLER_PROG).1 - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(DEMANGLER_PROG) cplus-dem.o $(LIBIBERTY) $(EXTRALIBS) underscore.o + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(DEMANGLER_PROG) cplus-dem.o $(LIBIBERTY) $(EXTRALIBS) underscore.o arparse.c: arparse.y $(BISON) $(BISONFLAGS) $(srcdir)/arparse.y @@ -298,10 +297,10 @@ arlex.c: arlex.l mv lex.yy.c arlex.c $(AR_PROG): $(ADDL_DEPS) ar.o arparse.o arlex.o not-ranlib.o arsup.o - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(AR_PROG) ar.o arparse.o arlex.o arsup.o not-ranlib.o $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(AR_PROG) ar.o arparse.o arlex.o arsup.o not-ranlib.o $(ADDL_LIBS) $(EXTRALIBS) $(RANLIB_PROG): $(ADDL_DEPS) ar.o is-ranlib.o arparse.o arlex.o arsup.o - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(RANLIB_PROG) ar.o arparse.o arlex.o arsup.o is-ranlib.o $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(RANLIB_PROG) ar.o arparse.o arlex.o arsup.o is-ranlib.o $(ADDL_LIBS) $(EXTRALIBS) # This rule creates a single binary that switches between ar and ranlib # by looking at argv[0]. Use this kludge to save some disk space. @@ -311,14 +310,14 @@ $(RANLIB_PROG): $(ADDL_DEPS) ar.o is-ranlib.o arparse.o arlex.o arsup.o # Alternatively, you can install ranlib.sh as ranlib. ar_with_ranlib: $(ADDL_DEPS) ar.o maybe-ranlib.o - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(AR_PROG) ar.o maybe-ranlib.o $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(AR_PROG) ar.o maybe-ranlib.o $(ADDL_LIBS) $(EXTRALIBS) -rm -f $(RANLIB_PROG) -ln $(AR_PROG) $(RANLIB_PROG) # objcopy and strip in one binary that uses argv[0] to decide its action. objcopy_with_strip: $(ADDL_DEPS) objcopy.o maybe-strip.o - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(OBJCOPY_PROG) objcopy.o maybe-strip.o $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $(OBJCOPY_PROG) objcopy.o maybe-strip.o $(ADDL_LIBS) $(EXTRALIBS) -rm -f $(STRIP_PROG) -ln $(OBJCOPY_PROG) $(STRIP_PROG) @@ -364,10 +363,10 @@ sysinfo.o: sysinfo.c fi srconv: srconv.o coffgrok.o $(ADDL_DEPS) - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ srconv.o coffgrok.o $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ srconv.o coffgrok.o $(ADDL_LIBS) $(EXTRALIBS) dlltool: dlltool.o defparse.o deflex.o cplus-dem.o $(ADDL_DEPS) - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ dlltool.o defparse.o deflex.o $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ dlltool.o defparse.o deflex.o $(ADDL_LIBS) $(EXTRALIBS) defparse.c:defparse.y $(BISON) $(BISONFLAGS) $(srcdir)/defparse.y @@ -384,10 +383,10 @@ dlltool.o:dlltool.c $(CC) -c @DLLTOOL_DEFS@ $(ALL_CFLAGS) $(srcdir)/dlltool.c coffdump: coffdump.o coffgrok.o $(ADDL_DEPS) - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ coffdump.o coffgrok.o $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ coffdump.o coffgrok.o $(ADDL_LIBS) $(EXTRALIBS) sysdump: sysdump.o $(ADDL_DEPS) - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ sysdump.o $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ sysdump.o $(ADDL_LIBS) $(EXTRALIBS) # Depend upon sysinfo.c to avoid building both nlmheader.c and sysinfo.c # simultaneously. @@ -403,7 +402,7 @@ nlmconv.o: nlmconv.c $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h $(CC) -c -DLD_NAME="\"$${ldname}\"" @NLMCONV_DEFS@ $(ALL_CFLAGS) $(srcdir)/nlmconv.c $(NLMCONV_PROG): nlmconv.o nlmheader.o $(ADDL_DEPS) - $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ nlmconv.o nlmheader.o $(ADDL_LIBS) $(EXTRALIBS) + $(HLDENV) $(CC) $(HLDFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ nlmconv.o nlmheader.o $(ADDL_LIBS) $(EXTRALIBS) # Targets to rebuild dependencies in this Makefile. # Have to get rid of .dep1 here so that "$?" later includes all of $(CFILES). @@ -422,6 +421,7 @@ $(NLMCONV_PROG): nlmconv.o nlmheader.o $(ADDL_DEPS) dep.sed: dep-in.sed config.status sed <$(srcdir)/dep-in.sed >dep.sed \ -e 's!@INCDIR@!$(INCDIR)!' \ + -e 's!@BFDDIR@!$(BFDDIR)!' \ -e 's!@SRCDIR@!$(srcdir)!' dep: .dep @@ -546,18 +546,17 @@ install: all if [ x$(DEMANGLER_PROG) != x ]; then \ $(INSTALL_XFORM1) $(DEMANGLER_PROG).1 $(man1dir)/$(DEMANGLER_PROG).1; \ fi - -if [ -d $(tooldir) ]; then \ - if [ -d $(tooldir)/bin ]; then true; else mkdir $(tooldir)/bin; fi; \ - for i in $(TOOL_PROGS) ; do \ - if [ -f $$i ]; then \ - j=`echo $$i | sed -e 's/.new//'`; \ - rm -f $(tooldir)/bin/$$j; \ - k=`echo $$j | sed '$(program_transform_name)'`; \ - ln $(bindir)/$$k $(tooldir)/bin/$$j >/dev/null 2>/dev/null \ + test -d $(tooldir) || mkdir $(tooldir) + test -d $(tooldir)/bin || mkdir $(tooldir)/bin + for i in $(TOOL_PROGS) ; do \ + if [ -f $$i ]; then \ + j=`echo $$i | sed -e 's/.new//'`; \ + rm -f $(tooldir)/bin/$$j; \ + k=`echo $$j | sed '$(program_transform_name)'`; \ + ln $(bindir)/$$k $(tooldir)/bin/$$j >/dev/null 2>/dev/null \ || $(INSTALL_PROGRAM) $$i $(tooldir)/bin/$$j; \ - fi; \ - done; \ - else true; fi + fi; \ + done # This little path search is required because in the FSF net releases, # the info files are included in the source tree, and that may not be @@ -653,7 +652,7 @@ config.status: configure $(srcdir)/../bfd/configure.host $(srcdir)/../bfd/config ar.o: ar.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/obstack.h \ $(INCDIR)/libiberty.h $(INCDIR)/progress.h bucomm.h \ config.h $(INCDIR)/fopen-same.h $(INCDIR)/aout/ar.h \ - ../bfd/libbfd.h arsup.h + $(BFDDIR)/libbfd.h arsup.h arsup.o: arsup.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ $(INCDIR)/obstack.h arsup.h $(INCDIR)/libiberty.h bucomm.h \ config.h $(INCDIR)/fopen-same.h @@ -663,7 +662,7 @@ bucomm.o: bucomm.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ coffdump.o: coffdump.c coffgrok.h bucomm.h config.h \ $(INCDIR)/fopen-same.h coffgrok.o: coffgrok.c bucomm.h config.h $(INCDIR)/fopen-same.h \ - $(INCDIR)/coff/internal.h ../bfd/libcoff.h $(INCDIR)/bfdlink.h \ + $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \ coffgrok.h debug.o: debug.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ $(INCDIR)/obstack.h bucomm.h config.h $(INCDIR)/fopen-same.h \ @@ -683,8 +682,9 @@ maybe-ranlib.o: maybe-ranlib.c maybe-strip.o: maybe-strip.c nlmconv.o: nlmconv.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ $(INCDIR)/obstack.h $(INCDIR)/libiberty.h bucomm.h \ - config.h $(INCDIR)/fopen-same.h ../bfd/libnlm.h $(INCDIR)/nlm/common.h \ - $(INCDIR)/nlm/internal.h $(INCDIR)/nlm/external.h nlmconv.h + config.h $(INCDIR)/fopen-same.h $(BFDDIR)/libnlm.h \ + $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h $(INCDIR)/nlm/external.h \ + nlmconv.h nm.o: nm.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/obstack.h \ $(INCDIR)/progress.h bucomm.h config.h $(INCDIR)/fopen-same.h \ $(INCDIR)/getopt.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ @@ -705,7 +705,7 @@ prdbg.o: prdbg.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ rdcoff.o: rdcoff.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ $(INCDIR)/obstack.h $(INCDIR)/coff/internal.h bucomm.h \ config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \ - $(INCDIR)/demangle.h debug.h budbg.h ../bfd/libcoff.h \ + $(INCDIR)/demangle.h debug.h budbg.h $(BFDDIR)/libcoff.h \ $(INCDIR)/bfdlink.h rddbg.o: rddbg.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ $(INCDIR)/obstack.h bucomm.h config.h $(INCDIR)/fopen-same.h \ @@ -714,7 +714,7 @@ size.o: size.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/obstack.h \ $(INCDIR)/getopt.h bucomm.h config.h $(INCDIR)/fopen-same.h \ $(INCDIR)/libiberty.h srconv.o: srconv.c bucomm.h config.h $(INCDIR)/fopen-same.h \ - sysroff.h coffgrok.h $(INCDIR)/coff/internal.h ../bfd/libcoff.h \ + sysroff.h coffgrok.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \ $(INCDIR)/bfdlink.h sysroff.c stabs.o: stabs.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ $(INCDIR)/obstack.h bucomm.h config.h $(INCDIR)/fopen-same.h \ @@ -727,7 +727,8 @@ strings.o: strings.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ sysdump.o: sysdump.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ $(INCDIR)/obstack.h bucomm.h config.h $(INCDIR)/fopen-same.h \ sysroff.h sysroff.c -version.o: version.c +version.o: version.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/obstack.h bucomm.h config.h $(INCDIR)/fopen-same.h wrstabs.o: wrstabs.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \ $(INCDIR)/obstack.h bucomm.h config.h $(INCDIR)/fopen-same.h \ $(INCDIR)/libiberty.h debug.h budbg.h $(INCDIR)/aout/aout64.h \ diff --git a/binutils/ar.c b/binutils/ar.c index eb98ab395c..7d431c4627 100644 --- a/binutils/ar.c +++ b/binutils/ar.c @@ -1,5 +1,5 @@ /* ar.c - Archive modify and extract. - Copyright 1991, 92, 93, 94 Free Software Foundation, Inc. + Copyright 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -15,7 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Bugs: should use getopt the way tar does (complete w/optional -) and @@ -25,28 +25,21 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ more consistant. */ #include "bfd.h" -#include "sysdep.h" #include "libiberty.h" #include "progress.h" #include "bucomm.h" #include "aout/ar.h" #include "libbfd.h" #include "arsup.h" -#include -#ifdef POSIX_UTIME +#include + +#ifdef HAVE_GOOD_UTIME_H #include -#else /* ! POSIX_UTIME */ -#ifdef USE_UTIME -#include -#else /* ! USE_UTIME */ +#else /* ! HAVE_GOOD_UTIME_H */ +#ifdef HAVE_UTIMES #include -#endif /* ! USE_UTIME */ -#endif /* ! POSIX_UTIME */ -#include -#ifndef errno -extern int errno; -#endif -#define BUFSIZE 8192 +#endif /* HAVE_UTIMES */ +#endif /* ! HAVE_GOOD_UTIME_H */ #ifdef __GO32___ #define EXT_NAME_LEN 3 /* bufflen of addition to name if it's MS-DOS */ @@ -54,6 +47,8 @@ extern int errno; #define EXT_NAME_LEN 6 /* ditto for *NIX */ #endif +#define BUFSIZE 8192 + /* Kludge declaration from BFD! This is ugly! FIXME! XXX */ struct ar_hdr * @@ -76,15 +71,17 @@ print_contents PARAMS ((bfd * member)); static void delete_members PARAMS ((bfd *, char **files_to_delete)); +#if 0 static void do_quick_append PARAMS ((const char *archive_filename, char **files_to_append)); +#endif static void move_members PARAMS ((bfd *, char **files_to_move)); static void -replace_members PARAMS ((bfd *, char **files_to_replace)); +replace_members PARAMS ((bfd *, char **files_to_replace, boolean quick)); static void print_descr PARAMS ((bfd * abfd)); @@ -210,28 +207,28 @@ map_over_members (arch, function, files, count) boolean operation_alters_arch = false; -extern char *program_version; - void -do_show_version () +usage (help) + int help; { - printf ("GNU %s version %s\n", program_name, program_version); - xexit (0); -} + FILE *s; -void -usage () -{ - if (is_ranlib == 0) - fprintf (stderr, "\ + s = help ? stdout : stderr; + if (! is_ranlib) + fprintf (s, "\ Usage: %s [-]{dmpqrtx}[abcilosuvV] [member-name] archive-file file...\n\ %s -M [= 6 + && strcmp (temp + strlen (temp) - 6, "ranlib") == 0) + is_ranlib = 1; + else + is_ranlib = 0; + } + + if (argc > 1 && argv[1][0] == '-') + { + if (strcmp (argv[1], "--help") == 0) + usage (1); + else if (strcmp (argv[1], "--version") == 0) + { + if (is_ranlib) + print_version ("ranlib"); + else + print_version ("ar"); + } + } + START_PROGRESS (program_name, 0); bfd_init (); @@ -316,22 +341,16 @@ main (argc, argv) xatexit (remove_output); - temp = strrchr (program_name, '/'); - if (temp == (char *) NULL) - temp = program_name; /* shouldn't happen, but... */ - else - ++temp; - if (is_ranlib > 0 || (is_ranlib < 0 && strcmp (temp, "ranlib") == 0)) + if (is_ranlib) { boolean touch = false; - is_ranlib = 1; - if (argc < 2) + if (argc < 2 || strcmp (argv[1], "--help") == 0) usage (); if (strcmp (argv[1], "-V") == 0 || strcmp (argv[1], "-v") == 0 || strncmp (argv[1], "--v", 3) == 0) - do_show_version (); + print_version ("ranlib"); arg_index = 1; if (strcmp (argv[1], "-t") == 0) { @@ -348,8 +367,6 @@ main (argc, argv) } xexit (0); } - else - is_ranlib = 0; if (argc == 2 && strcmp (argv[1], "-M") == 0) { @@ -448,7 +465,7 @@ main (argc, argv) } if (show_version) - do_show_version (); + print_version ("ar"); if (argc < 3) usage (); @@ -488,6 +505,11 @@ main (argc, argv) files = arg_index < argc ? argv + arg_index : NULL; +#if 0 + /* We don't use do_quick_append any more. Too many systems + expect ar to always rebuild the symbol table even when q is + used. */ + /* We can't do a quick append if we need to construct an extended name table, because do_quick_append won't be able to rebuild the name table. Unfortunately, at this point we @@ -514,8 +536,10 @@ main (argc, argv) do_quick_append (inarch_filename, files); xexit (0); } +#endif - arch = open_inarch (inarch_filename); + arch = open_inarch (inarch_filename, + files == NULL ? (char *) NULL : files[0]); switch (operation) { @@ -542,8 +566,9 @@ main (argc, argv) break; case replace: + case quick_append: if (files != NULL || write_armap > 0) - replace_members (arch, files); + replace_members (arch, files, operation == quick_append); break; /* Shouldn't happen! */ @@ -561,18 +586,24 @@ main (argc, argv) } bfd * -open_inarch (archive_filename) +open_inarch (archive_filename, file) const char *archive_filename; + const char *file; { + const char *target; bfd **last_one; bfd *next_one; struct stat sbuf; bfd *arch; + char **matching; bfd_set_error (bfd_error_no_error); + target = NULL; + if (stat (archive_filename, &sbuf) != 0) { + bfd *obj; #ifndef __GO32__ @@ -592,20 +623,42 @@ open_inarch (archive_filename) return NULL; } - /* This routine is one way to forcibly create the archive. */ + /* Try to figure out the target to use for the archive from the + first object on the list. */ + obj = bfd_openr (file, NULL); + if (obj != NULL) + { + if (bfd_check_format (obj, bfd_object)) + target = bfd_get_target (obj); + (void) bfd_close (obj); + } - do_quick_append (archive_filename, 0); + /* Create an empty archive. */ + arch = bfd_openw (archive_filename, target); + if (arch == NULL + || ! bfd_set_format (arch, bfd_archive) + || ! bfd_close (arch)) + bfd_fatal (archive_filename); } - arch = bfd_openr (archive_filename, NULL); + arch = bfd_openr (archive_filename, target); if (arch == NULL) { bloser: bfd_fatal (archive_filename); } - if (bfd_check_format (arch, bfd_archive) != true) - fatal ("%s is not an archive", archive_filename); + if (! bfd_check_format_matches (arch, bfd_archive, &matching)) + { + bfd_nonfatal (archive_filename); + if (bfd_get_error () == bfd_error_file_ambiguously_recognized) + { + list_matching_formats (matching); + free (matching); + } + xexit (1); + } + last_one = &(arch->next); /* Read all the contents right away, regardless. */ for (next_one = bfd_openr_next_archived_file (arch, NULL); @@ -742,30 +795,35 @@ extract_file (abfd) if (preserve_dates) { -#ifdef POSIX_UTIME +#ifdef HAVE_GOOD_UTIME_H struct utimbuf tb; tb.actime = buf.st_mtime; tb.modtime = buf.st_mtime; utime (bfd_get_filename (abfd), &tb); /* FIXME check result */ -#else /* ! POSIX_UTIME */ -#ifdef USE_UTIME +#else /* ! HAVE_GOOD_UTIME_H */ +#ifndef HAVE_UTIMES long tb[2]; tb[0] = buf.st_mtime; tb[1] = buf.st_mtime; utime (bfd_get_filename (abfd), tb); /* FIXME check result */ -#else /* ! USE_UTIME */ +#else /* HAVE_UTIMES */ struct timeval tv[2]; tv[0].tv_sec = buf.st_mtime; tv[0].tv_usec = 0; tv[1].tv_sec = buf.st_mtime; tv[1].tv_usec = 0; utimes (bfd_get_filename (abfd), tv); /* FIXME check result */ -#endif /* ! USE_UTIME */ -#endif /* ! POSIX_UTIME */ +#endif /* HAVE_UTIMES */ +#endif /* ! HAVE_GOOD_UTIME_H */ } free (cbuf); } +#if 0 + +/* We don't use this anymore. Too many systems expect ar to rebuild + the symbol table even when q is used. */ + /* Just do it quickly; don't worry about dups, armap, or anything like that */ static void @@ -873,6 +931,7 @@ do_quick_append (archive_filename, files_to_append) free (buf); } +#endif /* 0 */ static void write_archive (iarch) @@ -1063,10 +1122,12 @@ move_members (arch, files_to_move) /* Ought to default to replacing in place, but this is existing practice! */ static void -replace_members (arch, files_to_move) +replace_members (arch, files_to_move, quick) bfd *arch; char **files_to_move; + boolean quick; { + boolean changed = false; bfd **after_bfd; /* New entries go after this one */ bfd *current; bfd **current_ptr; @@ -1074,63 +1135,62 @@ replace_members (arch, files_to_move) while (files_to_move && *files_to_move) { - current_ptr = &arch->next; - while (*current_ptr) + if (! quick) { - current = *current_ptr; - - if (!strcmp (normalize (*files_to_move, arch), - normalize (current->filename, arch))) + current_ptr = &arch->next; + while (*current_ptr) { - if (newer_only) - { - struct stat fsbuf, asbuf; + current = *current_ptr; - if (current->arelt_data == NULL) + /* For compatibility with existing ar programs, we + permit the same file to be added multiple times. */ + if (strcmp (normalize (*files_to_move, arch), + normalize (current->filename, arch)) == 0 + && current->arelt_data != NULL) + { + if (newer_only) { - /* This can only happen if you specify a file on the - command line more than once. */ - fprintf (stderr, - "%s: duplicate file specified: %s -- skipping\n", - program_name, *files_to_move); - goto next_file; + struct stat fsbuf, asbuf; + + if (stat (*files_to_move, &fsbuf) != 0) + { + if (errno != ENOENT) + bfd_fatal (*files_to_move); + goto next_file; + } + if (bfd_stat_arch_elt (current, &asbuf) != 0) + fatal ("internal stat error on %s", current->filename); + + if (fsbuf.st_mtime <= asbuf.st_mtime) + goto next_file; } - if (stat (*files_to_move, &fsbuf) != 0) + /* snip out this entry from the chain */ + *current_ptr = current->next; + + after_bfd = get_pos_bfd (&arch->next, pos_end); + temp = *after_bfd; + *after_bfd = bfd_openr (*files_to_move, NULL); + if (*after_bfd == (bfd *) NULL) { - if (errno != ENOENT) - bfd_fatal (*files_to_move); - goto next_file; + bfd_fatal (*files_to_move); } - if (bfd_stat_arch_elt (current, &asbuf) != 0) - fatal ("internal stat error on %s", current->filename); + (*after_bfd)->next = temp; - if (fsbuf.st_mtime <= asbuf.st_mtime) - goto next_file; + if (verbose) + { + printf ("r - %s\n", *files_to_move); + } + + changed = true; + + goto next_file; } - - /* snip out this entry from the chain */ - *current_ptr = current->next; - - after_bfd = get_pos_bfd (&arch->next, pos_end); - temp = *after_bfd; - *after_bfd = bfd_openr (*files_to_move, NULL); - if (*after_bfd == (bfd *) NULL) - { - bfd_fatal (*files_to_move); - } - (*after_bfd)->next = temp; - - if (verbose) - { - printf ("r - %s\n", *files_to_move); - } - goto next_file; + current_ptr = &(current->next); } - current_ptr = &(current->next); } - /* It isn't in there, so add to end */ + /* Add to the end of the archive. */ after_bfd = get_pos_bfd (&arch->next, pos_end); temp = *after_bfd; @@ -1146,12 +1206,15 @@ replace_members (arch, files_to_move) (*after_bfd)->next = temp; + changed = true; + next_file:; files_to_move++; } - write_archive (arch); + if (changed) + write_archive (arch); } static void @@ -1161,7 +1224,7 @@ ranlib_only (archname) bfd *arch; write_armap = 1; - arch = open_inarch (archname); + arch = open_inarch (archname, (char *) NULL); if (arch == NULL) xexit (1); write_archive (arch); @@ -1179,6 +1242,7 @@ ranlib_touch (archname) #else int f; bfd *arch; + char **matching; f = open (archname, O_RDWR, 0); if (f < 0) @@ -1188,9 +1252,18 @@ ranlib_touch (archname) } arch = bfd_fdopenr (archname, (const char *) NULL, f); - if (arch == NULL - || ! bfd_check_format (arch, bfd_archive)) + if (arch == NULL) bfd_fatal (archname); + if (! bfd_check_format_matches (arch, bfd_archive, &matching)) + { + bfd_nonfatal (archname); + if (bfd_get_error () == bfd_error_file_ambiguously_recognized) + { + list_matching_formats (matching); + free (matching); + } + xexit (1); + } if (! bfd_has_map (arch)) fatal ("%s: no archive map to update", archname); diff --git a/binutils/objdump.c b/binutils/objdump.c index 74d8f4b8be..08b15cdb68 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -44,8 +44,6 @@ extern int fprintf PARAMS ((FILE *, const char *, ...)); static char *default_target = NULL; /* default at runtime */ -extern char *program_version; - static int show_version = 0; /* show the version number */ static int dump_section_contents; /* -s */ static int dump_section_headers; /* -h */ @@ -154,6 +152,8 @@ Usage: %s [-ahifdDprRtTxsSlw] [-b bfdname] [-m machine] [-j section-name]\n\ [--show-raw-insn] [-EB|-EL] [--endian={big|little}] objfile...\n\ at least one option besides -l (--line-numbers) must be given\n"); list_supported_targets (program_name, stream); + if (status == 0) + fprintf (stream, "Report bugs to bug-gnu-utils@prep.ai.mit.edu\n"); exit (status); } @@ -974,6 +974,7 @@ disassemble_data (abfd) exit (1); } + disasm_info.flavour = bfd_get_flavour (abfd); disasm_info.arch = bfd_get_arch (abfd); disasm_info.mach = bfd_get_mach (abfd); if (bfd_big_endian (abfd)) @@ -1879,10 +1880,6 @@ dump_reloc_set (abfd, sec, relpp, relcount) /* The length of the longest architecture name + 1. */ #define LONGEST_ARCH sizeof("rs6000:6000") -#ifndef L_tmpnam -#define L_tmpnam 25 -#endif - static const char * endian_string (endian) enum bfd_endian endian; @@ -1901,13 +1898,11 @@ endian_string (endian) static void display_target_list () { - extern char *tmpnam (); extern bfd_target *bfd_target_vector[]; - char tmparg[L_tmpnam]; char *dummy_name; int t; - dummy_name = tmpnam (tmparg); + dummy_name = choose_temp_base (); for (t = 0; bfd_target_vector[t]; t++) { bfd_target *p = bfd_target_vector[t]; @@ -1937,6 +1932,7 @@ display_target_list () bfd_printable_arch_mach ((enum bfd_architecture) a, 0)); } unlink (dummy_name); + free (dummy_name); } /* Print a table showing which architectures are supported for entries @@ -1949,8 +1945,6 @@ display_info_table (first, last) int last; { extern bfd_target *bfd_target_vector[]; - extern char *tmpnam (); - char tmparg[L_tmpnam]; int t, a; char *dummy_name; @@ -1960,7 +1954,7 @@ display_info_table (first, last) printf ("%s ", bfd_target_vector[t]->name); putchar ('\n'); - dummy_name = tmpnam (tmparg); + dummy_name = choose_temp_base (); for (a = (int) bfd_arch_obscure + 1; a < (int) bfd_arch_last; a++) if (strcmp (bfd_printable_arch_mach (a, 0), "UNKNOWN!") != 0) { @@ -2007,6 +2001,7 @@ display_info_table (first, last) putchar ('\n'); } unlink (dummy_name); + free (dummy_name); } /* Print tables of all the target-architecture combinations that @@ -2185,10 +2180,7 @@ main (argc, argv) } if (show_version) - { - printf ("GNU %s version %s\n", program_name, program_version); - exit (0); - } + print_version ("objdump"); if (seenflag == false) usage (stderr, 1);