* 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.
This commit is contained in:
Ian Lance Taylor 1996-10-01 19:10:40 +00:00
parent 0b810a6ee0
commit 7f924d5516
4 changed files with 273 additions and 169 deletions

View File

@ -1,3 +1,41 @@
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.

View File

@ -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 \

View File

@ -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 <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 */
@ -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 [<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
@ -303,12 +300,40 @@ main (argc, argv)
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 ();
@ -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);

View File

@ -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);