* 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.
+Tue Oct 1 15:00:59 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * 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 <ian@cygnus.com>
+
+ * 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 <ian@cygnus.com>
* ieee.c (struct ieee_write_type): Add reflocalp field.
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
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
CFLAGS = @CFLAGS@
LDFLAGS = @LDFLAGS@
HLDFLAGS = @HLDFLAGS@
+HLDENV = @HLDENV@
RPATH_ENVVAR = @RPATH_ENVVAR@
MAKEINFO = makeinfo
TEXI2DVI = texi2dvi
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
# 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)
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
$(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
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.
# 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)
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
$(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.
$(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).
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
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
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
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 \
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 \
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 \
$(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 \
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 \
/* 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.
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. */
\f
/*
Bugs: should use getopt the way tar does (complete w/optional -) and
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 <stdio.h>
-#ifdef POSIX_UTIME
+#include <sys/stat.h>
+
+#ifdef HAVE_GOOD_UTIME_H
#include <utime.h>
-#else /* ! POSIX_UTIME */
-#ifdef USE_UTIME
-#include <time.h>
-#else /* ! USE_UTIME */
+#else /* ! HAVE_GOOD_UTIME_H */
+#ifdef HAVE_UTIMES
#include <sys/time.h>
-#endif /* ! USE_UTIME */
-#endif /* ! POSIX_UTIME */
-#include <errno.h>
-#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 */
#define EXT_NAME_LEN 6 /* ditto for *NIX */
#endif
+#define BUFSIZE 8192
+
/* Kludge declaration from BFD! This is ugly! FIXME! XXX */
struct ar_hdr *
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));
\f
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 [<mri-script]\n",
program_name, program_name);
else
- fprintf (stderr, "\
+ fprintf (s, "\
Usage: %s [-vV] archive\n", program_name);
+
list_supported_targets (program_name, stderr);
- xexit (1);
+
+ if (help)
+ fprintf (s, "Report bugs to bug-gnu-utils@prep.ai.mit.edu\n");
+
+ xexit (help ? 0 : 1);
}
/* Normalize a file name specified on the command line into a file
int arg_index;
char **files;
char *inarch_filename;
- char *temp;
int show_version;
program_name = argv[0];
xmalloc_set_program_name (program_name);
+ if (is_ranlib < 0)
+ {
+ char *temp;
+
+ temp = strrchr (program_name, '/');
+ if (temp == NULL)
+ temp = program_name;
+ else
+ ++temp;
+ if (strlen (temp) >= 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 ();
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)
{
}
xexit (0);
}
- else
- is_ranlib = 0;
if (argc == 2 && strcmp (argv[1], "-M") == 0)
{
}
if (show_version)
- do_show_version ();
+ print_version ("ar");
if (argc < 3)
usage ();
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
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)
{
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! */
}
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__
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);
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
free (buf);
}
+#endif /* 0 */
static void
write_archive (iarch)
/* 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;
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);
-
- if (fsbuf.st_mtime <= asbuf.st_mtime)
- goto next_file;
- }
+ (*after_bfd)->next = temp;
- /* snip out this entry from the chain */
- *current_ptr = current->next;
+ if (verbose)
+ {
+ printf ("r - %s\n", *files_to_move);
+ }
- 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;
+ changed = true;
- if (verbose)
- {
- printf ("r - %s\n", *files_to_move);
+ goto next_file;
}
- 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;
(*after_bfd)->next = temp;
+ changed = true;
+
next_file:;
files_to_move++;
}
- write_archive (arch);
+ if (changed)
+ write_archive (arch);
}
static void
bfd *arch;
write_armap = 1;
- arch = open_inarch (archname);
+ arch = open_inarch (archname, (char *) NULL);
if (arch == NULL)
xexit (1);
write_archive (arch);
#else
int f;
bfd *arch;
+ char **matching;
f = open (archname, O_RDWR, 0);
if (f < 0)
}
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);
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 */
[--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);
}
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))
/* 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;
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];
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
int last;
{
extern bfd_target *bfd_target_vector[];
- extern char *tmpnam ();
- char tmparg[L_tmpnam];
int t, a;
char *dummy_name;
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)
{
putchar ('\n');
}
unlink (dummy_name);
+ free (dummy_name);
}
/* Print tables of all the target-architecture combinations that
}
if (show_version)
- {
- printf ("GNU %s version %s\n", program_name, program_version);
- exit (0);
- }
+ print_version ("objdump");
if (seenflag == false)
usage (stderr, 1);