diff options
41 files changed, 1937 insertions, 17575 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 47beabf7a3..53aeb365f2 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,30 @@ +2001-06-19 Nick Clifton <nickc@cambridge.redhat.com> + + * readelf.c: Restore formatting. + +2001-06-18 H.J. Lu <hjl@gnu.org> & Nick Clifton <nickc@redhat.com> + + * Makefile.am: Move documentation into doc subdirectory. + * Makefile.in: Regenerated. + * binutils.texi: Move into doc subdirectory. + * addr2line.1: Removed. + * ar.1: Likewise. + * dlltool.1: Likewise. + * nlmconv.1: Likewise. + * nm.1: Likewise. + * objcopy.1: Likewise. + * objdump.1: Likewise. + * ranlib.1: Likewise. + * readelf.1: Likewise. + * size.1: Likewise. + * strings.1: Likewise. + * strip.1: Likewise. + * windres.1: Likewise. + * cxxfilt.man: Likewise. + * doc: New Directory. + * doc/Makefile.am: New file. + * doc/Makefile.in: Generate. + 2001-06-09 Alan Modra <amodra@bigpond.net.au> * NEWS: Fix a typo. Mention hppa64-elf. Add binutils-2.11 marker. diff --git a/binutils/Makefile.am b/binutils/Makefile.am index ebe32f460f..27a70a801e 100644 --- a/binutils/Makefile.am +++ b/binutils/Makefile.am @@ -5,7 +5,7 @@ INTLLIBS = @INTLLIBS@ AUTOMAKE_OPTIONS = cygnus dejagnu -SUBDIRS = po +SUBDIRS = doc po tooldir = $(exec_prefix)/$(target_alias) @@ -52,29 +52,6 @@ DLLWRAP_PROG=dllwrap SRCONV_PROG=srconv$(EXEEXT) sysdump$(EXEEXT) coffdump$(EXEEXT) -MANCONF = -Dman - -TEXI2POD = perl $(srcdir)/../etc/texi2pod.pl - -POD2MAN = pod2man --center="GNU" --release="binutils-$(VERSION)" --section=1 - -# List of man pages generated from binutils.texi -man_MANS = \ - addr2line.1 \ - ar.1 \ - dlltool.1 \ - nlmconv.1 \ - nm.1 \ - objcopy.1 \ - objdump.1 \ - ranlib.1 \ - readelf.1 \ - size.1 \ - strings.1 \ - strip.1 \ - windres.1 \ - $(DEMANGLER_NAME).1 - PROGS = $(SIZE_PROG) $(OBJDUMP_PROG) $(NM_PROG) $(AR_PROG) $(STRINGS_PROG) $(STRIP_PROG) $(RANLIB_PROG) $(DEMANGLER_PROG) $(OBJCOPY_PROG) @BUILD_NLMCONV@ @BUILD_SRCONV@ @BUILD_DLLTOOL@ @BUILD_WINDRES@ $(ADDR2LINE_PROG) $(READELF_PROG) @BUILD_DLLWRAP@ @BUILD_MISC@ bin_PROGRAMS = $(SIZE_PROG) $(OBJDUMP_PROG) $(AR_PROG) $(STRINGS_PROG) $(RANLIB_PROG) $(OBJCOPY_PROG) @BUILD_NLMCONV@ @BUILD_SRCONV@ @BUILD_DLLTOOL@ @BUILD_WINDRES@ $(ADDR2LINE_PROG) $(READELF_PROG) @BUILD_DLLWRAP@ @BUILD_MISC@ @@ -171,8 +148,6 @@ check-DEJAGNU: site.exp installcheck: /bin/sh $(srcdir)/sanity.sh $(bindir) -info_TEXINFOS = binutils.texi - LDADD = $(BFDLIB) $(LIBIBERTY) $(INTLLIBS) size_SOURCES = size.c $(BULIBS) @@ -297,10 +272,10 @@ dllwrap_SOURCES = dllwrap.c version.c dllwrap_LDADD = $(LIBIBERTY) $(INTLLIBS) -DISTSTUFF = arparse.c arparse.h arlex.c nlmheader.c sysinfo.c sysinfo.h \ +EXTRA_DIST = arparse.c arparse.h arlex.c nlmheader.c sysinfo.c sysinfo.h \ syslex.c deflex.c defparse.h defparse.c rclex.c rcparse.h rcparse.c -diststuff: $(DISTSTUFF) info +diststuff: $(EXTRA_DIST) info DISTCLEANFILES = stamp-under sysinfo underscore.c sysroff.c sysroff.h \ site.exp site.bak @@ -350,122 +325,8 @@ dep-am: DEP .PHONY: dep dep-in dep-am ### -# DOCUMENTATION TARGETS -config.texi: Makefile - rm -f config.texi - echo '@set VERSION $(VERSION)' > config.texi - -binutils.dvi: $(srcdir)/binutils.texi config.texi - -binutils.info: $(srcdir)/binutils.texi config.texi - -# Man page generation from texinfo -$(srcdir)/addr2line.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Daddr2line < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/ar.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dar < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/dlltool.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Ddlltool < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/nlmconv.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dnlmconv < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/nm.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dnm < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/objcopy.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dobjcopy < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/objdump.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dobjdump < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/ranlib.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dranlib < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/readelf.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dreadelf < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/size.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dsize < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/strings.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dstrings < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/strip.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dstrip < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/windres.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dwindres < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/cxxfilt.man: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dcxxfilt < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -MAINTAINERCLEANFILES = config.texi - -$(DEMANGLER_NAME).1: cxxfilt.man Makefile - sed -e 's/@PROGRAM@/$(DEMANGLER_NAME)/' < $(srcdir)/cxxfilt.man \ - > $(DEMANGLER_NAME).1 - -MOSTLYCLEANFILES = sysinfo $(DEMANGLER_NAME).1 binutils.log binutils.sum \ - abcdefgh* + +MOSTLYCLEANFILES = sysinfo binutils.log binutils.sum abcdefgh* mostlyclean-local: -rm -rf tmpdir diff --git a/binutils/Makefile.in b/binutils/Makefile.in index a61e1c45b5..df7ddddaba 100644 --- a/binutils/Makefile.in +++ b/binutils/Makefile.in @@ -117,7 +117,7 @@ INTLLIBS = @INTLLIBS@ AUTOMAKE_OPTIONS = cygnus dejagnu -SUBDIRS = po +SUBDIRS = doc po tooldir = $(exec_prefix)/$(target_alias) @@ -161,16 +161,6 @@ DLLWRAP_PROG = dllwrap SRCONV_PROG = srconv$(EXEEXT) sysdump$(EXEEXT) coffdump$(EXEEXT) -MANCONF = -Dman - -TEXI2POD = perl $(srcdir)/../etc/texi2pod.pl - -POD2MAN = pod2man --center="GNU" --release="binutils-$(VERSION)" --section=1 - -# List of man pages generated from binutils.texi -man_MANS = addr2line.1 ar.1 dlltool.1 nlmconv.1 nm.1 objcopy.1 objdump.1 ranlib.1 readelf.1 size.1 strings.1 strip.1 windres.1 $(DEMANGLER_NAME).1 - - PROGS = $(SIZE_PROG) $(OBJDUMP_PROG) $(NM_PROG) $(AR_PROG) $(STRINGS_PROG) $(STRIP_PROG) $(RANLIB_PROG) $(DEMANGLER_PROG) $(OBJCOPY_PROG) @BUILD_NLMCONV@ @BUILD_SRCONV@ @BUILD_DLLTOOL@ @BUILD_WINDRES@ $(ADDR2LINE_PROG) $(READELF_PROG) @BUILD_DLLWRAP@ @BUILD_MISC@ bin_PROGRAMS = $(SIZE_PROG) $(OBJDUMP_PROG) $(AR_PROG) $(STRINGS_PROG) $(RANLIB_PROG) $(OBJCOPY_PROG) @BUILD_NLMCONV@ @BUILD_SRCONV@ @BUILD_DLLTOOL@ @BUILD_WINDRES@ $(ADDR2LINE_PROG) $(READELF_PROG) @BUILD_DLLWRAP@ @BUILD_MISC@ @@ -190,15 +180,24 @@ MKDEP = gcc -MM INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) @HDEFINES@ -I$(srcdir)/../intl -I../intl -DLOCALEDIR="\"$(prefix)/share/locale\"" -HFILES = arsup.h bucomm.h budbg.h coffgrok.h debug.h nlmconv.h dlltool.h windres.h winduni.h +HFILES = arsup.h bucomm.h budbg.h coffgrok.h debug.h nlmconv.h dlltool.h \ + windres.h winduni.h GENERATED_HFILES = arparse.h sysroff.h sysinfo.h defparse.h rcparse.h -CFILES = addr2line.c ar.c arsup.c bucomm.c coffdump.c coffgrok.c debug.c dlltool.c filemode.c ieee.c is-ranlib.c is-strip.c maybe-ranlib.c maybe-strip.c nlmconv.c nm.c not-ranlib.c not-strip.c objcopy.c objdump.c prdbg.c rdcoff.c rddbg.c size.c srconv.c stabs.c strings.c sysdump.c version.c wrstabs.c windres.c resrc.c rescoff.c resbin.c winduni.c readelf.c resres.c dllwrap.c rename.c +CFILES = addr2line.c ar.c arsup.c bucomm.c coffdump.c coffgrok.c debug.c \ + dlltool.c filemode.c ieee.c is-ranlib.c is-strip.c maybe-ranlib.c \ + maybe-strip.c nlmconv.c nm.c not-ranlib.c not-strip.c \ + objcopy.c objdump.c prdbg.c rdcoff.c rddbg.c size.c srconv.c \ + stabs.c strings.c sysdump.c version.c wrstabs.c \ + windres.c resrc.c rescoff.c resbin.c winduni.c readelf.c \ + resres.c dllwrap.c rename.c -GENERATED_CFILES = underscore.c arparse.c arlex.c sysroff.c sysinfo.c syslex.c defparse.c deflex.c nlmheader.c rcparse.c rclex.c +GENERATED_CFILES = \ + underscore.c arparse.c arlex.c sysroff.c sysinfo.c syslex.c \ + defparse.c deflex.c nlmheader.c rcparse.c rclex.c DEBUG_SRCS = rddbg.c debug.c stabs.c ieee.c rdcoff.c @@ -215,15 +214,30 @@ LIBIBERTY = ../libiberty/libiberty.a POTFILES = $(CFILES) $(DEBUG_SRCS) $(HFILES) -EXPECT = `if [ -f $$r/../expect/expect ] ; then echo $$r/../expect/expect ; else echo expect ; fi` - -RUNTEST = `if [ -f ${srcdir}/../dejagnu/runtest ] ; then echo ${srcdir}/../dejagnu/runtest ; else echo runtest ; fi` +EXPECT = `if [ -f $$r/../expect/expect ] ; then \ + echo $$r/../expect/expect ; \ + else echo expect ; fi` +RUNTEST = `if [ -f ${srcdir}/../dejagnu/runtest ] ; then \ + echo ${srcdir}/../dejagnu/runtest ; \ + else echo runtest ; fi` -CC_FOR_TARGET = ` if [ -f $$r/../gcc/xgcc ] ; then if [ -f $$r/../newlib/Makefile ] ; then echo $$r/../gcc/xgcc -B$$r/../gcc/ -idirafter $$r/../newlib/targ-include -idirafter $${srcroot}/../newlib/libc/include -nostdinc; else echo $$r/../gcc/xgcc -B$$r/../gcc/; fi; else if [ "@host@" = "@target@" ] ; then echo $(CC); else echo gcc | sed '$(transform)'; fi; fi` +CC_FOR_TARGET = ` \ + if [ -f $$r/../gcc/xgcc ] ; then \ + if [ -f $$r/../newlib/Makefile ] ; then \ + echo $$r/../gcc/xgcc -B$$r/../gcc/ -idirafter $$r/../newlib/targ-include -idirafter $${srcroot}/../newlib/libc/include -nostdinc; \ + else \ + echo $$r/../gcc/xgcc -B$$r/../gcc/; \ + fi; \ + else \ + if [ "@host@" = "@target@" ] ; then \ + echo $(CC); \ + else \ + echo gcc | sed '$(transform)'; \ + fi; \ + fi` -info_TEXINFOS = binutils.texi LDADD = $(BFDLIB) $(LIBIBERTY) $(INTLLIBS) @@ -265,23 +279,25 @@ sysdump_SOURCES = sysdump.c $(BULIBS) nlmconv_SOURCES = nlmconv.c nlmheader.y $(BULIBS) -windres_SOURCES = windres.c resrc.c rescoff.c resbin.c rcparse.y rclex.l winduni.c resres.c $(BULIBS) +windres_SOURCES = windres.c resrc.c rescoff.c resbin.c rcparse.y rclex.l \ + winduni.c resres.c $(BULIBS) windres_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS) dllwrap_SOURCES = dllwrap.c version.c dllwrap_LDADD = $(LIBIBERTY) $(INTLLIBS) -DISTSTUFF = arparse.c arparse.h arlex.c nlmheader.c sysinfo.c sysinfo.h syslex.c deflex.c defparse.h defparse.c rclex.c rcparse.h rcparse.c +EXTRA_DIST = arparse.c arparse.h arlex.c nlmheader.c sysinfo.c sysinfo.h \ + syslex.c deflex.c defparse.h defparse.c rclex.c rcparse.h rcparse.c -DISTCLEANFILES = stamp-under sysinfo underscore.c sysroff.c sysroff.h site.exp site.bak +DISTCLEANFILES = stamp-under sysinfo underscore.c sysroff.c sysroff.h \ + site.exp site.bak -MAINTAINERCLEANFILES = config.texi - -MOSTLYCLEANFILES = sysinfo $(DEMANGLER_NAME).1 binutils.log binutils.sum abcdefgh* +### +MOSTLYCLEANFILES = sysinfo binutils.log binutils.sum abcdefgh* CLEANFILES = dep.sed DEP DEPA DEP1 DEP2 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -398,15 +414,6 @@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CF LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ -TEXI2DVI = `if test -f $(top_srcdir)/../texinfo/util/texi2dvi; then echo $(top_srcdir)/../texinfo/util/texi2dvi; else echo texi2dvi; fi` -TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex -INFO_DEPS = binutils.info -DVIS = binutils.dvi -TEXINFOS = binutils.texi -man1dir = $(mandir)/man1 -MANS = $(man_MANS) - -NROFF = nroff DIST_COMMON = README ./stamp-h.in ChangeLog Makefile.am Makefile.in \ NEWS acinclude.m4 aclocal.m4 arlex.c arparse.c config.in configure \ configure.in deflex.c defparse.c nlmheader.c rclex.c rcparse.c @@ -421,7 +428,7 @@ OBJECTS = $(nlmconv_OBJECTS) $(srconv_OBJECTS) $(sysdump_OBJECTS) $(coffdump_OBJ all: all-redirect .SUFFIXES: -.SUFFIXES: .S .c .dvi .info .l .lo .o .obj .ps .s .texi .texinfo .txi .y +.SUFFIXES: .S .c .l .lo .o .obj .s .y $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile @@ -624,158 +631,6 @@ nlmheader.h: nlmheader.c rcparse.h: rcparse.c -binutils.info: binutils.texi -binutils.dvi: binutils.texi - - -DVIPS = dvips - -.texi.info: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.texi.dvi: - TEXINPUTS=$(top_srcdir)/../texinfo/texinfo.tex:$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< - -.texi: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.texinfo.info: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.texinfo: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.texinfo.dvi: - TEXINPUTS=$(top_srcdir)/../texinfo/texinfo.tex:$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< - -.txi.info: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.txi.dvi: - TEXINPUTS=$(top_srcdir)/../texinfo/texinfo.tex:$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< - -.txi: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< -.dvi.ps: - $(DVIPS) $< -o $@ - -install-info-am: $(INFO_DEPS) - @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(infodir) - @list='$(INFO_DEPS)'; \ - for file in $$list; do \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ - for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \ - if test -f $$d/$$ifile; then \ - echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; \ - $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; \ - else : ; fi; \ - done; \ - done - @$(POST_INSTALL) - @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\ - install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\ - done; \ - else : ; fi - -uninstall-info: - $(PRE_UNINSTALL) - @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ - ii=yes; \ - else ii=; fi; \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - test -z "$ii" \ - || install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \ - done - @$(NORMAL_UNINSTALL) - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - (cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \ - done - -dist-info: $(INFO_DEPS) - list='$(INFO_DEPS)'; \ - for base in $$list; do \ - if test -f $$base; then d=.; else d=$(srcdir); fi; \ - for file in `cd $$d && eval echo $$base*`; do \ - test -f $(distdir)/$$file \ - || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ - || cp -p $$d/$$file $(distdir)/$$file; \ - done; \ - done - -mostlyclean-aminfo: - -rm -f binutils.aux binutils.cp binutils.cps binutils.dvi binutils.fn \ - binutils.fns binutils.ky binutils.kys binutils.ps \ - binutils.log binutils.pg binutils.toc binutils.tp \ - binutils.tps binutils.vr binutils.vrs binutils.op binutils.tr \ - binutils.cv binutils.cn - -clean-aminfo: - -distclean-aminfo: - -maintainer-clean-aminfo: - for i in $(INFO_DEPS); do \ - rm -f $$i; \ - if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \ - rm -f $$i-[0-9]*; \ - fi; \ - done -clean-info: mostlyclean-aminfo - -install-man1: - $(mkinstalldirs) $(DESTDIR)$(man1dir) - @list='$(man1_MANS)'; \ - l2='$(man_MANS)'; for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ - else file=$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ - $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ - done - -uninstall-man1: - @list='$(man1_MANS)'; \ - l2='$(man_MANS)'; for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ - rm -f $(DESTDIR)$(man1dir)/$$inst; \ - done -install-man: $(MANS) - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) install-man1 -uninstall-man: - @$(NORMAL_UNINSTALL) - $(MAKE) $(AM_MAKEFLAGS) uninstall-man1 - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -923,7 +778,6 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done - $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info RUNTESTFLAGS = @@ -949,9 +803,9 @@ site.exp: Makefile @test ! -f site.exp || sed '1,/^## All variables above are.*##/ d' site.exp >> $@-t @test ! -f site.exp || mv site.exp site.bak @mv $@-t site.exp -info-am: $(INFO_DEPS) +info-am: info: info-recursive -dvi-am: $(DVIS) +dvi-am: dvi: dvi-recursive check-am: $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU @@ -966,21 +820,21 @@ all-recursive-am: config.h install-exec-am: install-binPROGRAMS install-exec-local install-exec: install-exec-recursive -install-data-am: install-man +install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive -uninstall-am: uninstall-binPROGRAMS uninstall-man +uninstall-am: uninstall-binPROGRAMS uninstall: uninstall-recursive -all-am: Makefile $(PROGRAMS) $(MANS) config.h +all-am: Makefile $(PROGRAMS) config.h all-redirect: all-recursive-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: - $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man1 + $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: @@ -995,24 +849,24 @@ distclean-generic: -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: - -test -z "arlexldeflexlrclexlarparseharparsecdefparsehdefparsecnlmheaderhnlmheadercrcparsehrcparsec$(MAINTAINERCLEANFILES)" || rm -f arlexl deflexl rclexl arparseh arparsec defparseh defparsec nlmheaderh nlmheaderc rcparseh rcparsec $(MAINTAINERCLEANFILES) + -test -z "arlexldeflexlrclexlarparseharparsecdefparsehdefparsecnlmheaderhnlmheadercrcparsehrcparsec" || rm -f arlexl deflexl rclexl arparseh arparsec defparseh defparsec nlmheaderh nlmheaderc rcparseh rcparsec mostlyclean-am: mostlyclean-hdr mostlyclean-binPROGRAMS \ mostlyclean-noinstPROGRAMS mostlyclean-compile \ - mostlyclean-libtool mostlyclean-aminfo mostlyclean-tags \ + mostlyclean-libtool mostlyclean-tags \ mostlyclean-generic mostlyclean-local mostlyclean: mostlyclean-recursive clean-am: clean-hdr clean-binPROGRAMS clean-noinstPROGRAMS \ - clean-compile clean-libtool clean-aminfo clean-tags \ - clean-generic mostlyclean-am + clean-compile clean-libtool clean-tags clean-generic \ + mostlyclean-am clean: clean-recursive distclean-am: distclean-hdr distclean-binPROGRAMS \ distclean-noinstPROGRAMS distclean-compile \ - distclean-libtool distclean-aminfo distclean-tags \ - distclean-generic clean-am + distclean-libtool distclean-tags distclean-generic \ + clean-am -rm -f libtool distclean: distclean-recursive @@ -1021,8 +875,8 @@ distclean: distclean-recursive maintainer-clean-am: maintainer-clean-hdr maintainer-clean-binPROGRAMS \ maintainer-clean-noinstPROGRAMS \ maintainer-clean-compile maintainer-clean-libtool \ - maintainer-clean-aminfo maintainer-clean-tags \ - maintainer-clean-generic distclean-am + maintainer-clean-tags maintainer-clean-generic \ + distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." @@ -1036,14 +890,11 @@ mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \ clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ -clean-libtool maintainer-clean-libtool install-info-am uninstall-info \ -mostlyclean-aminfo distclean-aminfo clean-aminfo \ -maintainer-clean-aminfo install-man1 uninstall-man1 install-man \ -uninstall-man install-data-recursive uninstall-data-recursive \ -install-exec-recursive uninstall-exec-recursive installdirs-recursive \ -uninstalldirs-recursive all-recursive check-recursive \ -installcheck-recursive info-recursive dvi-recursive \ -mostlyclean-recursive distclean-recursive clean-recursive \ +clean-libtool maintainer-clean-libtool install-data-recursive \ +uninstall-data-recursive install-exec-recursive \ +uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ +all-recursive check-recursive installcheck-recursive info-recursive \ +dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir check-DEJAGNU \ info-am info dvi-am dvi check check-am installcheck-am installcheck \ @@ -1152,7 +1003,7 @@ nlmconv.o: nlmconv.c $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h ldname=`echo ld | sed '$(transform)'`; \ $(COMPILE) -c -DLD_NAME="\"$${ldname}\"" @NLMCONV_DEFS@ $(srcdir)/nlmconv.c -diststuff: $(DISTSTUFF) info +diststuff: $(EXTRA_DIST) info # Targets to rebuild dependencies in this Makefile. # Have to get rid of DEP1 here so that "$?" later includes all of $(CFILES). @@ -1197,119 +1048,6 @@ dep-am: DEP $(SHELL) $(srcdir)/../move-if-change tmp-Makefile.am $(srcdir)/Makefile.am .PHONY: dep dep-in dep-am - -### -# DOCUMENTATION TARGETS -config.texi: Makefile - rm -f config.texi - echo '@set VERSION $(VERSION)' > config.texi - -binutils.dvi: $(srcdir)/binutils.texi config.texi - -binutils.info: $(srcdir)/binutils.texi config.texi - -# Man page generation from texinfo -$(srcdir)/addr2line.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Daddr2line < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/ar.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dar < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/dlltool.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Ddlltool < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/nlmconv.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dnlmconv < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/nm.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dnm < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/objcopy.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dobjcopy < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/objdump.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dobjdump < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/ranlib.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dranlib < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/readelf.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dreadelf < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/size.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dsize < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/strings.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dstrings < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/strip.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dstrip < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/windres.1: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dwindres < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(srcdir)/cxxfilt.man: $(srcdir)/binutils.texi - touch $@ - -$(TEXI2POD) $(MANCONF) -Dcxxfilt < $< > $@.pod - -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ - mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) - rm -f $@.pod - -$(DEMANGLER_NAME).1: cxxfilt.man Makefile - sed -e 's/@PROGRAM@/$(DEMANGLER_NAME)/' < $(srcdir)/cxxfilt.man \ - > $(DEMANGLER_NAME).1 mostlyclean-local: -rm -rf tmpdir diff --git a/binutils/addr2line.1 b/binutils/addr2line.1 deleted file mode 100644 index 4ab0d94532..0000000000 --- a/binutils/addr2line.1 +++ /dev/null @@ -1,229 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:26 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "ADDR2LINE.1 1" -.TH ADDR2LINE.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -addr2line \- convert addresses into file names and line numbers. -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -addr2line [ \-b \fIbfdname\fR | \-\-target=\fIbfdname\fR ] - [ \-C | \-\-demangle[=\fIstyle\fR ] - [ \-e \fIfilename\fR | \-\-exe=\fIfilename\fR ] - [ \-f | \-\-functions ] [ \-s | \-\-basename ] - [ \-H | \-\-help ] [ \-V | \-\-version ] - [ addr addr ... ] -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -\&\f(CW\*(C`addr2line\*(C'\fR translates program addresses into file names and line -numbers. Given an address and an executable, it uses the debugging -information in the executable to figure out which file name and line -number are associated with a given address. -.PP -The executable to use is specified with the \f(CW\*(C`\-e\*(C'\fR option. The -default is the file \fIa.out\fR. -.PP -\&\f(CW\*(C`addr2line\*(C'\fR has two modes of operation. -.PP -In the first, hexadecimal addresses are specified on the command line, -and \f(CW\*(C`addr2line\*(C'\fR displays the file name and line number for each -address. -.PP -In the second, \f(CW\*(C`addr2line\*(C'\fR reads hexadecimal addresses from -standard input, and prints the file name and line number for each -address on standard output. In this mode, \f(CW\*(C`addr2line\*(C'\fR may be used -in a pipe to convert dynamically chosen addresses. -.PP -The format of the output is \fB\s-1FILENAME:LINENO\s0\fR. The file name and -line number for each address is printed on a separate line. If the -\&\f(CW\*(C`\-f\*(C'\fR option is used, then each \fB\s-1FILENAME:LINENO\s0\fR line is -preceded by a \fB\s-1FUNCTIONNAME\s0\fR line which is the name of the function -containing the address. -.PP -If the file name or function name can not be determined, -\&\f(CW\*(C`addr2line\*(C'\fR will print two question marks in their place. If the -line number can not be determined, \f(CW\*(C`addr2line\*(C'\fR will print 0. -.SH "OPTIONS" -.IX Header "OPTIONS" -The long and short forms of options, shown here as alternatives, are -equivalent. -.Ip "\f(CW\*(C`\-b \f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "-b bfdname" -.Ip "\f(CW\*(C`\-\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--target=bfdname" -Specify that the object-code format for the object files is -\&\fIbfdname\fR. -.Ip "\f(CW\*(C`\-C\*(C'\fR" 4 -.IX Item "-C" -.Ip "\f(CW\*(C`\-\-demangle[=\f(CIstyle\f(CW]\*(C'\fR" 4 -.IX Item "--demangle[=style]" -Decode (\fIdemangle\fR) low-level symbol names into user-level names. -Besides removing any initial underscore prepended by the system, this -makes \*(C+ function names readable. Different compilers have different -mangling styles. The optional demangling style argument can be used to -choose an appropriate demangling style for your compiler. -.Ip "\f(CW\*(C`\-e \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "-e filename" -.Ip "\f(CW\*(C`\-\-exe=\f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--exe=filename" -Specify the name of the executable for which addresses should be -translated. The default file is \fIa.out\fR. -.Ip "\f(CW\*(C`\-f\*(C'\fR" 4 -.IX Item "-f" -.Ip "\f(CW\*(C`\-\-functions\*(C'\fR" 4 -.IX Item "--functions" -Display function names as well as file and line number information. -.Ip "\f(CW\*(C`\-s\*(C'\fR" 4 -.IX Item "-s" -.Ip "\f(CW\*(C`\-\-basenames\*(C'\fR" 4 -.IX Item "--basenames" -Display only the base of each file name. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/ar.1 b/binutils/ar.1 deleted file mode 100644 index a1cf6e612c..0000000000 --- a/binutils/ar.1 +++ /dev/null @@ -1,386 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:26 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "AR.1 1" -.TH AR.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -ar \- create, modify, and extract from archives -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -ar [\-X32_64] [\-]\fIp\fR[\fImod\fR [\fIrelpos\fR] [\fIcount\fR]] \fIarchive\fR [\fImember\fR...] -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -The \s-1GNU\s0 \f(CW\*(C`ar\*(C'\fR program creates, modifies, and extracts from -archives. An \fIarchive\fR is a single file holding a collection of -other files in a structure that makes it possible to retrieve -the original individual files (called \fImembers\fR of the archive). -.PP -The original files' contents, mode (permissions), timestamp, owner, and -group are preserved in the archive, and can be restored on -extraction. -.PP -\&\s-1GNU\s0 \f(CW\*(C`ar\*(C'\fR can maintain archives whose members have names of any -length; however, depending on how \f(CW\*(C`ar\*(C'\fR is configured on your -system, a limit on member-name length may be imposed for compatibility -with archive formats maintained with other tools. If it exists, the -limit is often 15 characters (typical of formats related to a.out) or 16 -characters (typical of formats related to coff). -.PP -\&\f(CW\*(C`ar\*(C'\fR is considered a binary utility because archives of this sort -are most often used as \fIlibraries\fR holding commonly needed -subroutines. -.PP -\&\f(CW\*(C`ar\*(C'\fR creates an index to the symbols defined in relocatable -object modules in the archive when you specify the modifier \fBs\fR. -Once created, this index is updated in the archive whenever \f(CW\*(C`ar\*(C'\fR -makes a change to its contents (save for the \fBq\fR update operation). -An archive with such an index speeds up linking to the library, and -allows routines in the library to call each other without regard to -their placement in the archive. -.PP -You may use \fBnm \-s\fR or \fBnm \-\-print-armap\fR to list this index -table. If an archive lacks the table, another form of \f(CW\*(C`ar\*(C'\fR called -\&\f(CW\*(C`ranlib\*(C'\fR can be used to add just the table. -.PP -\&\s-1GNU\s0 \f(CW\*(C`ar\*(C'\fR is designed to be compatible with two different -facilities. You can control its activity using command-line options, -like the different varieties of \f(CW\*(C`ar\*(C'\fR on Unix systems; or, if you -specify the single command-line option \fB\-M\fR, you can control it -with a script supplied via standard input, like the \s-1MRI\s0 ``librarian'' -program. -.SH "OPTIONS" -.IX Header "OPTIONS" -\&\s-1GNU\s0 \f(CW\*(C`ar\*(C'\fR allows you to mix the operation code \fIp\fR and modifier -flags \fImod\fR in any order, within the first command-line argument. -.PP -If you wish, you may begin the first command-line argument with a -dash. -.PP -The \fIp\fR keyletter specifies what operation to execute; it may be -any of the following, but you must specify only one of them: -.Ip "\f(CW\*(C`d\*(C'\fR" 4 -.IX Item "d" -\&\fIDelete\fR modules from the archive. Specify the names of modules to -be deleted as \fImember\fR...; the archive is untouched if you -specify no files to delete. -.Sp -If you specify the \fBv\fR modifier, \f(CW\*(C`ar\*(C'\fR lists each module -as it is deleted. -.Ip "\f(CW\*(C`m\*(C'\fR" 4 -.IX Item "m" -Use this operation to \fImove\fR members in an archive. -.Sp -The ordering of members in an archive can make a difference in how -programs are linked using the library, if a symbol is defined in more -than one member. -.Sp -If no modifiers are used with \f(CW\*(C`m\*(C'\fR, any members you name in the -\&\fImember\fR arguments are moved to the \fIend\fR of the archive; -you can use the \fBa\fR, \fBb\fR, or \fBi\fR modifiers to move them to a -specified place instead. -.Ip "\f(CW\*(C`p\*(C'\fR" 4 -.IX Item "p" -\&\fIPrint\fR the specified members of the archive, to the standard -output file. If the \fBv\fR modifier is specified, show the member -name before copying its contents to standard output. -.Sp -If you specify no \fImember\fR arguments, all the files in the archive are -printed. -.Ip "\f(CW\*(C`q\*(C'\fR" 4 -.IX Item "q" -\&\fIQuick append\fR; Historically, add the files \fImember\fR... to the end of -\&\fIarchive\fR, without checking for replacement. -.Sp -The modifiers \fBa\fR, \fBb\fR, and \fBi\fR do \fInot\fR affect this -operation; new members are always placed at the end of the archive. -.Sp -The modifier \fBv\fR makes \f(CW\*(C`ar\*(C'\fR list each file as it is appended. -.Sp -Since the point of this operation is speed, the archive's symbol table -index is not updated, even if it already existed; you can use \fBar s\fR or -\&\f(CW\*(C`ranlib\*(C'\fR explicitly to update the symbol table index. -.Sp -However, too many different systems assume quick append rebuilds the -index, so \s-1GNU\s0 ar implements \f(CW\*(C`q\*(C'\fR as a synonym for \f(CW\*(C`r\*(C'\fR. -.Ip "\f(CW\*(C`r\*(C'\fR" 4 -.IX Item "r" -Insert the files \fImember\fR... into \fIarchive\fR (with -\&\fIreplacement\fR). This operation differs from \fBq\fR in that any -previously existing members are deleted if their names match those being -added. -.Sp -If one of the files named in \fImember\fR... does not exist, \f(CW\*(C`ar\*(C'\fR -displays an error message, and leaves undisturbed any existing members -of the archive matching that name. -.Sp -By default, new members are added at the end of the file; but you may -use one of the modifiers \fBa\fR, \fBb\fR, or \fBi\fR to request -placement relative to some existing member. -.Sp -The modifier \fBv\fR used with this operation elicits a line of -output for each file inserted, along with one of the letters \fBa\fR or -\&\fBr\fR to indicate whether the file was appended (no old member -deleted) or replaced. -.Ip "\f(CW\*(C`t\*(C'\fR" 4 -.IX Item "t" -Display a \fItable\fR listing the contents of \fIarchive\fR, or those -of the files listed in \fImember\fR... that are present in the -archive. Normally only the member name is shown; if you also want to -see the modes (permissions), timestamp, owner, group, and size, you can -request that by also specifying the \fBv\fR modifier. -.Sp -If you do not specify a \fImember\fR, all files in the archive -are listed. -.Sp -If there is more than one file with the same name (say, \fBfie\fR) in -an archive (say \fBb.a\fR), \fBar t b.a fie\fR lists only the -first instance; to see them all, you must ask for a complete -listing\-\-\-in our example, \fBar t b.a\fR. -.Ip "\f(CW\*(C`x\*(C'\fR" 4 -.IX Item "x" -\&\fIExtract\fR members (named \fImember\fR) from the archive. You can -use the \fBv\fR modifier with this operation, to request that -\&\f(CW\*(C`ar\*(C'\fR list each name as it extracts it. -.Sp -If you do not specify a \fImember\fR, all files in the archive -are extracted. -.PP -A number of modifiers (\fImod\fR) may immediately follow the \fIp\fR -keyletter, to specify variations on an operation's behavior: -.Ip "\f(CW\*(C`a\*(C'\fR" 4 -.IX Item "a" -Add new files \fIafter\fR an existing member of the -archive. If you use the modifier \fBa\fR, the name of an existing archive -member must be present as the \fIrelpos\fR argument, before the -\&\fIarchive\fR specification. -.Ip "\f(CW\*(C`b\*(C'\fR" 4 -.IX Item "b" -Add new files \fIbefore\fR an existing member of the -archive. If you use the modifier \fBb\fR, the name of an existing archive -member must be present as the \fIrelpos\fR argument, before the -\&\fIarchive\fR specification. (same as \fBi\fR). -.Ip "\f(CW\*(C`c\*(C'\fR" 4 -.IX Item "c" -\&\fICreate\fR the archive. The specified \fIarchive\fR is always -created if it did not exist, when you request an update. But a warning is -issued unless you specify in advance that you expect to create it, by -using this modifier. -.Ip "\f(CW\*(C`f\*(C'\fR" 4 -.IX Item "f" -Truncate names in the archive. \s-1GNU\s0 \f(CW\*(C`ar\*(C'\fR will normally permit file -names of any length. This will cause it to create archives which are -not compatible with the native \f(CW\*(C`ar\*(C'\fR program on some systems. If -this is a concern, the \fBf\fR modifier may be used to truncate file -names when putting them in the archive. -.Ip "\f(CW\*(C`i\*(C'\fR" 4 -.IX Item "i" -Insert new files \fIbefore\fR an existing member of the -archive. If you use the modifier \fBi\fR, the name of an existing archive -member must be present as the \fIrelpos\fR argument, before the -\&\fIarchive\fR specification. (same as \fBb\fR). -.Ip "\f(CW\*(C`l\*(C'\fR" 4 -.IX Item "l" -This modifier is accepted but not used. -.Ip "\f(CW\*(C`N\*(C'\fR" 4 -.IX Item "N" -Uses the \fIcount\fR parameter. This is used if there are multiple -entries in the archive with the same name. Extract or delete instance -\&\fIcount\fR of the given name from the archive. -.Ip "\f(CW\*(C`o\*(C'\fR" 4 -.IX Item "o" -Preserve the \fIoriginal\fR dates of members when extracting them. If -you do not specify this modifier, files extracted from the archive -are stamped with the time of extraction. -.Ip "\f(CW\*(C`P\*(C'\fR" 4 -.IX Item "P" -Use the full path name when matching names in the archive. \s-1GNU\s0 -\&\f(CW\*(C`ar\*(C'\fR can not create an archive with a full path name (such archives -are not \s-1POSIX\s0 complaint), but other archive creators can. This option -will cause \s-1GNU\s0 \f(CW\*(C`ar\*(C'\fR to match file names using a complete path -name, which can be convenient when extracting a single file from an -archive created by another tool. -.Ip "\f(CW\*(C`s\*(C'\fR" 4 -.IX Item "s" -Write an object-file index into the archive, or update an existing one, -even if no other change is made to the archive. You may use this modifier -flag either with any operation, or alone. Running \fBar s\fR on an -archive is equivalent to running \fBranlib\fR on it. -.Ip "\f(CW\*(C`S\*(C'\fR" 4 -.IX Item "S" -Do not generate an archive symbol table. This can speed up building a -large library in several steps. The resulting archive can not be used -with the linker. In order to build a symbol table, you must omit the -\&\fBS\fR modifier on the last execution of \fBar\fR, or you must run -\&\fBranlib\fR on the archive. -.Ip "\f(CW\*(C`u\*(C'\fR" 4 -.IX Item "u" -Normally, \fBar r\fR... inserts all files -listed into the archive. If you would like to insert \fIonly\fR those -of the files you list that are newer than existing members of the same -names, use this modifier. The \fBu\fR modifier is allowed only for the -operation \fBr\fR (replace). In particular, the combination \fBqu\fR is -not allowed, since checking the timestamps would lose any speed -advantage from the operation \fBq\fR. -.Ip "\f(CW\*(C`v\*(C'\fR" 4 -.IX Item "v" -This modifier requests the \fIverbose\fR version of an operation. Many -operations display additional information, such as filenames processed, -when the modifier \fBv\fR is appended. -.Ip "\f(CW\*(C`V\*(C'\fR" 4 -.IX Item "V" -This modifier shows the version number of \f(CW\*(C`ar\*(C'\fR. -.PP -\&\f(CW\*(C`ar\*(C'\fR ignores an initial option spelt \f(CW\*(C`\-X32_64\*(C'\fR, for -compatibility with \s-1AIX\s0. The behaviour produced by this option is the -default for \s-1GNU\s0 \f(CW\*(C`ar\*(C'\fR. \f(CW\*(C`ar\*(C'\fR does not support any of the other -\&\f(CW\*(C`\-X\*(C'\fR options; in particular, it does not support \f(CW\*(C`\-X32\*(C'\fR -which is the default for \s-1AIX\s0 \f(CW\*(C`ar\*(C'\fR. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -\&\fInm\fR\|(1), \fIranlib\fR\|(1), and the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/configure b/binutils/configure index 2726d8cb2f..bb04e3ca71 100755 --- a/binutils/configure +++ b/binutils/configure @@ -5605,7 +5605,7 @@ done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" -trap 'rm -fr `echo "Makefile po/Makefile.in:po/Make-in config.h:config.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +trap 'rm -fr `echo "Makefile doc/Makefile po/Makefile.in:po/Make-in config.h:config.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <<EOF @@ -5756,7 +5756,7 @@ EOF cat >> $CONFIG_STATUS <<EOF -CONFIG_FILES=\${CONFIG_FILES-"Makefile po/Makefile.in:po/Make-in"} +CONFIG_FILES=\${CONFIG_FILES-"Makefile doc/Makefile po/Makefile.in:po/Make-in"} EOF cat >> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then diff --git a/binutils/configure.in b/binutils/configure.in index e2fed827d2..303a7da2a2 100644 --- a/binutils/configure.in +++ b/binutils/configure.in @@ -287,7 +287,7 @@ else fi AC_SUBST(UNDERSCORE) -AC_OUTPUT(Makefile po/Makefile.in:po/Make-in, +AC_OUTPUT(Makefile doc/Makefile po/Makefile.in:po/Make-in, [ case "x$CONFIG_FILES" in *) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;; diff --git a/binutils/cxxfilt.man b/binutils/cxxfilt.man deleted file mode 100644 index 6cb20b1160..0000000000 --- a/binutils/cxxfilt.man +++ /dev/null @@ -1,249 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:30 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "CXXFILT.MAN 1" -.TH CXXFILT.MAN 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -cxxfilt \- Demangle \*(C+ and Java symbols. -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -c++filt [ \-_ | \-\-strip-underscores ] - [ \-j | \-\-java ] - [ \-n | \-\-no-strip-underscores ] - [ \-s \fIformat\fR | \-\-format=\fIformat\fR ] - [ \-\-help ] [ \-\-version ] [ \fIsymbol\fR... ] -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -The \*(C+ and Java languages provides function overloading, which means -that you can write many functions with the same name (providing each -takes parameters of different types). All \*(C+ and Java function names -are encoded into a low-level assembly label (this process is known as -\&\fImangling\fR). The \f(CW\*(C`c++filt\*(C'\fR -[1] -program does the inverse mapping: it decodes (\fIdemangles\fR) low-level -names into user-level names so that the linker can keep these overloaded -functions from clashing. -.PP -Every alphanumeric word (consisting of letters, digits, underscores, -dollars, or periods) seen in the input is a potential label. If the -label decodes into a \*(C+ name, the \*(C+ name replaces the low-level -name in the output. -.PP -You can use \f(CW\*(C`c++filt\*(C'\fR to decipher individual symbols: -.PP -.Vb 1 -\& c++filt I<symbol> -.Ve -If no \fIsymbol\fR arguments are given, \f(CW\*(C`c++filt\*(C'\fR reads symbol -names from the standard input and writes the demangled names to the -standard output. All results are printed on the standard output. -.SH "OPTIONS" -.IX Header "OPTIONS" -.Ip "\f(CW\*(C`\-_\*(C'\fR" 4 -.IX Item "-_" -.Ip "\f(CW\*(C`\-\-strip\-underscores\*(C'\fR" 4 -.IX Item "--strip-underscores" -On some systems, both the C and \*(C+ compilers put an underscore in front -of every name. For example, the C name \f(CW\*(C`foo\*(C'\fR gets the low-level -name \f(CW\*(C`_foo\*(C'\fR. This option removes the initial underscore. Whether -\&\f(CW\*(C`c++filt\*(C'\fR removes the underscore by default is target dependent. -.Ip "\f(CW\*(C`\-j\*(C'\fR" 4 -.IX Item "-j" -.Ip "\f(CW\*(C`\-\-java\*(C'\fR" 4 -.IX Item "--java" -Prints demangled names using Java syntax. The default is to use \*(C+ -syntax. -.Ip "\f(CW\*(C`\-n\*(C'\fR" 4 -.IX Item "-n" -.Ip "\f(CW\*(C`\-\-no\-strip\-underscores\*(C'\fR" 4 -.IX Item "--no-strip-underscores" -Do not remove the initial underscore. -.Ip "\f(CW\*(C`\-s \f(CIformat\f(CW\*(C'\fR" 4 -.IX Item "-s format" -.Ip "\f(CW\*(C`\-\-format=\f(CIformat\f(CW\*(C'\fR" 4 -.IX Item "--format=format" -\&\s-1GNU\s0 \f(CW\*(C`nm\*(C'\fR can decode three different methods of mangling, used by -different \*(C+ compilers. The argument to this option selects which -method it uses: -.RS 4 -.Ip "\f(CW\*(C`gnu\*(C'\fR" 4 -.IX Item "gnu" -the one used by the \s-1GNU\s0 compiler (the default method) -.Ip "\f(CW\*(C`lucid\*(C'\fR" 4 -.IX Item "lucid" -the one used by the Lucid compiler -.Ip "\f(CW\*(C`arm\*(C'\fR" 4 -.IX Item "arm" -the one specified by the \*(C+ Annotated Reference Manual -.Ip "\f(CW\*(C`hp\*(C'\fR" 4 -.IX Item "hp" -the one used by the \s-1HP\s0 compiler -.Ip "\f(CW\*(C`edg\*(C'\fR" 4 -.IX Item "edg" -the one used by the \s-1EDG\s0 compiler -.Ip "\f(CW\*(C`gnu\-new\-abi\*(C'\fR" 4 -.IX Item "gnu-new-abi" -the one used by the \s-1GNU\s0 compiler with the new \s-1ABI\s0. -.RE -.RS 4 -.RE -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Print a summary of the options to \f(CW\*(C`c++filt\*(C'\fR and exit. -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Print the version number of \f(CW\*(C`c++filt\*(C'\fR and exit. -.SH "FOOTNOTES" -.IX Header "FOOTNOTES" -.Ip "1." 4 -\&\s-1MS-DOS\s0 does not allow \f(CW\*(C`+\*(C'\fR characters in file names, so on -\&\s-1MS-DOS\s0 this program is named \f(CW\*(C`cxxfilt\*(C'\fR. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/dlltool.1 b/binutils/dlltool.1 deleted file mode 100644 index 01e1ac4d10..0000000000 --- a/binutils/dlltool.1 +++ /dev/null @@ -1,402 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:27 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "DLLTOOL.1 1" -.TH DLLTOOL.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -dlltool \- Create files needed to build and use DLLs. -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -dlltool [\-d|\-\-input-def \fIdef-file-name\fR] - [\-b|\-\-base-file \fIbase-file-name\fR] - [\-e|\-\-output-exp \fIexports-file-name\fR] - [\-z|\-\-output-def \fIdef-file-name\fR] - [\-l|\-\-output-lib \fIlibrary-file-name\fR] - [\-\-export-all-symbols] [\-\-no-export-all-symbols] - [\-\-exclude-symbols \fIlist\fR] - [\-\-no-default-excludes] - [\-S|\-\-as \fIpath-to-assembler\fR] [\-f|\-\-as-flags \fIoptions\fR] - [\-D|\-\-dllname \fIname\fR] [\-m|\-\-machine \fImachine\fR] - [\-a|\-\-add-indirect] [\-U|\-\-add-underscore] [\-k|\-\-kill-at] - [\-A|\-\-add-stdcall-alias] - [\-x|\-\-no-idata4] [\-c|\-\-no-idata5] [\-i|\-\-interwork] - [\-n|\-\-nodelete] [\-v|\-\-verbose] [\-h|\-\-help] [\-V|\-\-version] - [object-file ...] -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -\&\f(CW\*(C`dlltool\*(C'\fR reads its inputs, which can come from the \fB\-d\fR and -\&\fB\-b\fR options as well as object files specified on the command -line. It then processes these inputs and if the \fB\-e\fR option has -been specified it creates a exports file. If the \fB\-l\fR option -has been specified it creates a library file and if the \fB\-z\fR option -has been specified it creates a def file. Any or all of the \-e, \-l -and \-z options can be present in one invocation of dlltool. -.PP -When creating a \s-1DLL\s0, along with the source for the \s-1DLL\s0, it is necessary -to have three other files. \f(CW\*(C`dlltool\*(C'\fR can help with the creation of -these files. -.PP -The first file is a \fB.def\fR file which specifies which functions are -exported from the \s-1DLL\s0, which functions the \s-1DLL\s0 imports, and so on. This -is a text file and can be created by hand, or \f(CW\*(C`dlltool\*(C'\fR can be used -to create it using the \fB\-z\fR option. In this case \f(CW\*(C`dlltool\*(C'\fR -will scan the object files specified on its command line looking for -those functions which have been specially marked as being exported and -put entries for them in the .def file it creates. -.PP -In order to mark a function as being exported from a \s-1DLL\s0, it needs to -have an \fB\-export:<name_of_function>\fR entry in the \fB.drectve\fR -section of the object file. This can be done in C by using the -\&\fIasm()\fR operator: -.PP -.Vb 2 -\& asm (".section .drectve"); -\& asm (".ascii \e"-export:my_func\e""); -.Ve -.Vb 1 -\& int my_func (void) { ... } -.Ve -The second file needed for \s-1DLL\s0 creation is an exports file. This file -is linked with the object files that make up the body of the \s-1DLL\s0 and it -handles the interface between the \s-1DLL\s0 and the outside world. This is a -binary file and it can be created by giving the \fB\-e\fR option to -\&\f(CW\*(C`dlltool\*(C'\fR when it is creating or reading in a .def file. -.PP -The third file needed for \s-1DLL\s0 creation is the library file that programs -will link with in order to access the functions in the \s-1DLL\s0. This file -can be created by giving the \fB\-l\fR option to dlltool when it -is creating or reading in a .def file. -.PP -\&\f(CW\*(C`dlltool\*(C'\fR builds the library file by hand, but it builds the -exports file by creating temporary files containing assembler statements -and then assembling these. The \fB\-S\fR command line option can be -used to specify the path to the assembler that dlltool will use, -and the \fB\-f\fR option can be used to pass specific flags to that -assembler. The \fB\-n\fR can be used to prevent dlltool from deleting -these temporary assembler files when it is done, and if \fB\-n\fR is -specified twice then this will prevent dlltool from deleting the -temporary object files it used to build the library. -.PP -Here is an example of creating a \s-1DLL\s0 from a source file \fBdll.c\fR and -also creating a program (from an object file called \fBprogram.o\fR) -that uses that \s-1DLL:\s0 -.PP -.Vb 4 -\& gcc -c dll.c -\& dlltool -e exports.o -l dll.lib dll.o -\& gcc dll.o exports.o -o dll.dll -\& gcc program.o dll.lib -o program -.Ve -.SH "OPTIONS" -.IX Header "OPTIONS" -The command line options have the following meanings: -.Ip "\f(CW\*(C`\-d \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "-d filename" -.Ip "\f(CW\*(C`\-\-input\-def \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--input-def filename" -Specifies the name of a .def file to be read in and processed. -.Ip "\f(CW\*(C`\-b \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "-b filename" -.Ip "\f(CW\*(C`\-\-base\-file \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--base-file filename" -Specifies the name of a base file to be read in and processed. The -contents of this file will be added to the relocation section in the -exports file generated by dlltool. -.Ip "\f(CW\*(C`\-e \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "-e filename" -.Ip "\f(CW\*(C`\-\-output\-exp \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--output-exp filename" -Specifies the name of the export file to be created by dlltool. -.Ip "\f(CW\*(C`\-z \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "-z filename" -.Ip "\f(CW\*(C`\-\-output\-def \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--output-def filename" -Specifies the name of the .def file to be created by dlltool. -.Ip "\f(CW\*(C`\-l \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "-l filename" -.Ip "\f(CW\*(C`\-\-output\-lib \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--output-lib filename" -Specifies the name of the library file to be created by dlltool. -.Ip "\f(CW\*(C`\-\-export\-all\-symbols\*(C'\fR" 4 -.IX Item "--export-all-symbols" -Treat all global and weak defined symbols found in the input object -files as symbols to be exported. There is a small list of symbols which -are not exported by default; see the \f(CW\*(C`\-\-no\-default\-excludes\*(C'\fR -option. You may add to the list of symbols to not export by using the -\&\f(CW\*(C`\-\-exclude\-symbols\*(C'\fR option. -.Ip "\f(CW\*(C`\-\-no\-export\-all\-symbols\*(C'\fR" 4 -.IX Item "--no-export-all-symbols" -Only export symbols explicitly listed in an input .def file or in -\&\fB.drectve\fR sections in the input object files. This is the default -behaviour. The \fB.drectve\fR sections are created by \fBdllexport\fR -attributes in the source code. -.Ip "\f(CW\*(C`\-\-exclude\-symbols \f(CIlist\f(CW\*(C'\fR" 4 -.IX Item "--exclude-symbols list" -Do not export the symbols in \fIlist\fR. This is a list of symbol names -separated by comma or colon characters. The symbol names should not -contain a leading underscore. This is only meaningful when -\&\f(CW\*(C`\-\-export\-all\-symbols\*(C'\fR is used. -.Ip "\f(CW\*(C`\-\-no\-default\-excludes\*(C'\fR" 4 -.IX Item "--no-default-excludes" -When \f(CW\*(C`\-\-export\-all\-symbols\*(C'\fR is used, it will by default avoid -exporting certain special symbols. The current list of symbols to avoid -exporting is \fBDllMain@12\fR, \fBDllEntryPoint@0\fR, -\&\fBimpure_ptr\fR. You may use the \f(CW\*(C`\-\-no\-default\-excludes\*(C'\fR option -to go ahead and export these special symbols. This is only meaningful -when \f(CW\*(C`\-\-export\-all\-symbols\*(C'\fR is used. -.Ip "\f(CW\*(C`\-S \f(CIpath\f(CW\*(C'\fR" 4 -.IX Item "-S path" -.Ip "\f(CW\*(C`\-\-as \f(CIpath\f(CW\*(C'\fR" 4 -.IX Item "--as path" -Specifies the path, including the filename, of the assembler to be used -to create the exports file. -.Ip "\f(CW\*(C`\-f \f(CIswitches\f(CW\*(C'\fR" 4 -.IX Item "-f switches" -.Ip "\f(CW\*(C`\-\-as\-flags \f(CIswitches\f(CW\*(C'\fR" 4 -.IX Item "--as-flags switches" -Specifies any specific command line switches to be passed to the -assembler when building the exports file. This option will work even if -the \fB\-S\fR option is not used. This option only takes one argument, -and if it occurs more than once on the command line, then later -occurrences will override earlier occurrences. So if it is necessary to -pass multiple switches to the assembler they should be enclosed in -double quotes. -.Ip "\f(CW\*(C`\-D \f(CIname\f(CW\*(C'\fR" 4 -.IX Item "-D name" -.Ip "\f(CW\*(C`\-\-dll\-name \f(CIname\f(CW\*(C'\fR" 4 -.IX Item "--dll-name name" -Specifies the name to be stored in the .def file as the name of the \s-1DLL\s0 -when the \fB\-e\fR option is used. If this option is not present, then -the filename given to the \fB\-e\fR option will be used as the name of -the \s-1DLL\s0. -.Ip "\f(CW\*(C`\-m \f(CImachine\f(CW\*(C'\fR" 4 -.IX Item "-m machine" -.Ip "\f(CW\*(C`\-machine \f(CImachine\f(CW\*(C'\fR" 4 -.IX Item "-machine machine" -Specifies the type of machine for which the library file should be -built. \f(CW\*(C`dlltool\*(C'\fR has a built in default type, depending upon how -it was created, but this option can be used to override that. This is -normally only useful when creating DLLs for an \s-1ARM\s0 processor, when the -contents of the \s-1DLL\s0 are actually encode using \s-1THUMB\s0 instructions. -.Ip "\f(CW\*(C`\-a\*(C'\fR" 4 -.IX Item "-a" -.Ip "\f(CW\*(C`\-\-add\-indirect\*(C'\fR" 4 -.IX Item "--add-indirect" -Specifies that when \f(CW\*(C`dlltool\*(C'\fR is creating the exports file it -should add a section which allows the exported functions to be -referenced without using the import library. Whatever the hell that -means! -.Ip "\f(CW\*(C`\-U\*(C'\fR" 4 -.IX Item "-U" -.Ip "\f(CW\*(C`\-\-add\-underscore\*(C'\fR" 4 -.IX Item "--add-underscore" -Specifies that when \f(CW\*(C`dlltool\*(C'\fR is creating the exports file it -should prepend an underscore to the names of the exported functions. -.Ip "\f(CW\*(C`\-k\*(C'\fR" 4 -.IX Item "-k" -.Ip "\f(CW\*(C`\-\-kill\-at\*(C'\fR" 4 -.IX Item "--kill-at" -Specifies that when \f(CW\*(C`dlltool\*(C'\fR is creating the exports file it -should not append the string \fB@ <number>\fR. These numbers are -called ordinal numbers and they represent another way of accessing the -function in a \s-1DLL\s0, other than by name. -.Ip "\f(CW\*(C`\-A\*(C'\fR" 4 -.IX Item "-A" -.Ip "\f(CW\*(C`\-\-add\-stdcall\-alias\*(C'\fR" 4 -.IX Item "--add-stdcall-alias" -Specifies that when \f(CW\*(C`dlltool\*(C'\fR is creating the exports file it -should add aliases for stdcall symbols without \fB@ <number>\fR -in addition to the symbols with \fB@ <number>\fR. -.Ip "\f(CW\*(C`\-x\*(C'\fR" 4 -.IX Item "-x" -.Ip "\f(CW\*(C`\-\-no\-idata4\*(C'\fR" 4 -.IX Item "--no-idata4" -Specifies that when \f(CW\*(C`dlltool\*(C'\fR is creating the exports and library -files it should omit the .idata4 section. This is for compatibility -with certain operating systems. -.Ip "\f(CW\*(C`\-c\*(C'\fR" 4 -.IX Item "-c" -.Ip "\f(CW\*(C`\-\-no\-idata5\*(C'\fR" 4 -.IX Item "--no-idata5" -Specifies that when \f(CW\*(C`dlltool\*(C'\fR is creating the exports and library -files it should omit the .idata5 section. This is for compatibility -with certain operating systems. -.Ip "\f(CW\*(C`\-i\*(C'\fR" 4 -.IX Item "-i" -.Ip "\f(CW\*(C`\-\-interwork\*(C'\fR" 4 -.IX Item "--interwork" -Specifies that \f(CW\*(C`dlltool\*(C'\fR should mark the objects in the library -file and exports file that it produces as supporting interworking -between \s-1ARM\s0 and \s-1THUMB\s0 code. -.Ip "\f(CW\*(C`\-n\*(C'\fR" 4 -.IX Item "-n" -.Ip "\f(CW\*(C`\-\-nodelete\*(C'\fR" 4 -.IX Item "--nodelete" -Makes \f(CW\*(C`dlltool\*(C'\fR preserve the temporary assembler files it used to -create the exports file. If this option is repeated then dlltool will -also preserve the temporary object files it uses to create the library -file. -.Ip "\f(CW\*(C`\-v\*(C'\fR" 4 -.IX Item "-v" -.Ip "\f(CW\*(C`\-\-verbose\*(C'\fR" 4 -.IX Item "--verbose" -Make dlltool describe what it is doing. -.Ip "\f(CW\*(C`\-h\*(C'\fR" 4 -.IX Item "-h" -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Displays a list of command line options and then exits. -.Ip "\f(CW\*(C`\-V\*(C'\fR" 4 -.IX Item "-V" -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Displays dlltool's version number and then exits. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/Makefile.am b/binutils/doc/Makefile.am new file mode 100644 index 0000000000..aee1079d80 --- /dev/null +++ b/binutils/doc/Makefile.am @@ -0,0 +1,166 @@ +## Process this file with automake to generate Makefile.in + +AUTOMAKE_OPTIONS = cygnus + +# What version of the manual you want; "all" includes everything +CONFIG=all + +# Options to extract the man page from as.texinfo +MANCONF = -Dman + +TEXI2POD = perl $(top_srcdir)/../etc/texi2pod.pl + +POD2MAN = pod2man --center="GNU" --release="binutils-$(VERSION)" --section=1 + +# List of man pages generated from binutils.texi +man_MANS = \ + addr2line.1 \ + ar.1 \ + dlltool.1 \ + nlmconv.1 \ + nm.1 \ + objcopy.1 \ + objdump.1 \ + ranlib.1 \ + readelf.1 \ + size.1 \ + strings.1 \ + strip.1 \ + windres.1 \ + $(DEMANGLER_NAME).1 + +info_TEXINFOS = binutils.texi + +config.texi: Makefile + rm -f config.texi + echo '@set VERSION $(VERSION)' > config.texi + +binutils_TEXI = $(srcdir)/binutils.texi + +binutils.dvi: $(binutils_TEXI) config.texi + +binutils.info: $(binutils_TEXI) config.texi + +# Man page generation from texinfo +addr2line.1: $(binutils_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Daddr2line < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +ar.1: $(binutils_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dar < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +dlltool.1: $(binutils_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Ddlltool < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +nlmconv.1: $(binutils_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dnlmconv < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +nm.1: $(binutils_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dnm < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +objcopy.1: $(binutils_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dobjcopy < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +objdump.1: $(binutils_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dobjdump < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +ranlib.1: $(binutils_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dranlib < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +readelf.1: $(binutils_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dreadelf < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +size.1: $(binutils_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dsize < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +strings.1: $(binutils_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dstrings < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +strip.1: $(binutils_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dstrip < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +windres.1: $(binutils_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dwindres < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +cxxfilt.man: $(binutils_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dcxxfilt < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +MAINTAINERCLEANFILES = config.texi +DISTCLEANFILES = config.texi +MOSTLYCLEANFILES = $(DEMANGLER_NAME).1 + +$(DEMANGLER_NAME).1: cxxfilt.man Makefile + sed -e 's/@PROGRAM@/$(DEMANGLER_NAME)/' < cxxfilt.man \ + > $(DEMANGLER_NAME).1 + +# Maintenance + +# We need it for the taz target in ../../Makefile.in. +info: $(MANS) + +# Build the man page from the texinfo file +# The sed command removes the no-adjust Nroff command so that +# the man output looks standard. +as.1: $(srcdir)/as.texinfo + touch $@ + -$(TEXI2POD) $(MANCONF) < $(srcdir)/as.texinfo > as.pod + -($(POD2MAN) as.pod | \ + sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || \ + (rm -f $@.T$$$$ && exit 1) + rm -f as.pod diff --git a/binutils/doc/Makefile.in b/binutils/doc/Makefile.in new file mode 100644 index 0000000000..1029427dfe --- /dev/null +++ b/binutils/doc/Makefile.in @@ -0,0 +1,544 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_alias = @build_alias@ +build_triplet = @build@ +host_alias = @host_alias@ +host_triplet = @host@ +target_alias = @target_alias@ +target_triplet = @target@ +CC = @CC@ +EXEEXT = @EXEEXT@ +LIBTOOL = @LIBTOOL@ +RANLIB = @RANLIB@ + +AUTOMAKE_OPTIONS = cygnus + +# What version of the manual you want; "all" includes everything +CONFIG = all + +# Options to extract the man page from as.texinfo +MANCONF = -Dman + +TEXI2POD = perl $(top_srcdir)/../etc/texi2pod.pl + +POD2MAN = pod2man --center="GNU" --release="binutils-$(VERSION)" --section=1 + +# List of man pages generated from binutils.texi +man_MANS = \ + addr2line.1 \ + ar.1 \ + dlltool.1 \ + nlmconv.1 \ + nm.1 \ + objcopy.1 \ + objdump.1 \ + ranlib.1 \ + readelf.1 \ + size.1 \ + strings.1 \ + strip.1 \ + windres.1 \ + $(DEMANGLER_NAME).1 + + +info_TEXINFOS = binutils.texi + +BINUTILS_TEXI = $(srcdir)/binutils.texi + +MAINTAINERCLEANFILES = config.texi +DISTCLEANFILES = config.texi +MOSTLYCLEANFILES = $(DEMANGLER_NAME).1 +mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_CLEAN_FILES = +MAKEINFO = `if test -f $(top_builddir)/../texinfo/makeinfo/makeinfo; then echo $(top_builddir)/../texinfo/makeinfo/makeinfo; else echo makeinfo; fi` +TEXI2DVI = `if test -f $(top_srcdir)/../texinfo/util/texi2dvi; then echo $(top_srcdir)/../texinfo/util/texi2dvi; else echo texi2dvi; fi` +TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex +INFO_DEPS = binutils.info +DVIS = binutils.dvi +TEXINFOS = binutils.texi +man1dir = $(mandir)/man1 +MANS = $(man_MANS) + +NROFF = nroff +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +.SUFFIXES: .dvi .info .ps .texi .texinfo .txi +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --cygnus doc/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +binutils.info: binutils.texi +binutils.dvi: binutils.texi + + +DVIPS = dvips + +.texi.info: + @rm -f $@ $@-[0-9] $@-[0-9][0-9] + $(MAKEINFO) -I $(srcdir) $< + +.texi.dvi: + TEXINPUTS=$(top_srcdir)/../texinfo/texinfo.tex:$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + +.texi: + @rm -f $@ $@-[0-9] $@-[0-9][0-9] + $(MAKEINFO) -I $(srcdir) $< + +.texinfo.info: + @rm -f $@ $@-[0-9] $@-[0-9][0-9] + $(MAKEINFO) -I $(srcdir) $< + +.texinfo: + @rm -f $@ $@-[0-9] $@-[0-9][0-9] + $(MAKEINFO) -I $(srcdir) $< + +.texinfo.dvi: + TEXINPUTS=$(top_srcdir)/../texinfo/texinfo.tex:$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + +.txi.info: + @rm -f $@ $@-[0-9] $@-[0-9][0-9] + $(MAKEINFO) -I $(srcdir) $< + +.txi.dvi: + TEXINPUTS=$(top_srcdir)/../texinfo/texinfo.tex:$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + +.txi: + @rm -f $@ $@-[0-9] $@-[0-9][0-9] + $(MAKEINFO) -I $(srcdir) $< +.dvi.ps: + $(DVIPS) $< -o $@ + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(infodir) + @list='$(INFO_DEPS)'; \ + for file in $$list; do \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \ + if test -f $$d/$$ifile; then \ + echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; \ + $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; \ + else : ; fi; \ + done; \ + done + @$(POST_INSTALL) + @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\ + install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\ + done; \ + else : ; fi + +uninstall-info: + $(PRE_UNINSTALL) + @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ + ii=yes; \ + else ii=; fi; \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + test -z "$ii" \ + || install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \ + done + @$(NORMAL_UNINSTALL) + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + (cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \ + done + +dist-info: $(INFO_DEPS) + list='$(INFO_DEPS)'; \ + for base in $$list; do \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ + for file in `cd $$d && eval echo $$base*`; do \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done; \ + done + +mostlyclean-aminfo: + -rm -f binutils.aux binutils.cp binutils.cps binutils.dvi binutils.fn \ + binutils.fns binutils.ky binutils.kys binutils.ps \ + binutils.log binutils.pg binutils.toc binutils.tp \ + binutils.tps binutils.vr binutils.vrs binutils.op binutils.tr \ + binutils.cv binutils.cn + +clean-aminfo: + +distclean-aminfo: + +maintainer-clean-aminfo: + for i in $(INFO_DEPS); do \ + rm -f $$i; \ + if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \ + rm -f $$i-[0-9]*; \ + fi; \ + done +clean-info: mostlyclean-aminfo + +install-man1: + $(mkinstalldirs) $(DESTDIR)$(man1dir) + @list='$(man1_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ + done + +uninstall-man1: + @list='$(man1_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ + rm -f $(DESTDIR)$(man1dir)/$$inst; \ + done +install-man: $(MANS) + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-man1 +uninstall-man: + @$(NORMAL_UNINSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-man1 +tags: TAGS +TAGS: + + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = doc + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + -rm -rf $(distdir) + GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --srcdir=.. --prefix=$$dc_install_base \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) dist + -rm -rf $(distdir) + @banner="$(distdir).tar.gz is ready for distribution"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + @for file in $(DISTFILES); do \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info +info-am: $(INFO_DEPS) +info: info-am +dvi-am: $(DVIS) +dvi: dvi-am +check-am: +check: check-am +installcheck-am: +installcheck: installcheck-am +install-info-am: +install-info: install-info-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: install-man +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-man +uninstall: uninstall-am +all-am: Makefile $(MANS) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(mandir)/man1 + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +mostlyclean-am: mostlyclean-aminfo mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-aminfo clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-aminfo distclean-generic clean-am + -rm -f libtool + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-aminfo maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: install-info-am uninstall-info mostlyclean-aminfo \ +distclean-aminfo clean-aminfo maintainer-clean-aminfo install-man1 \ +uninstall-man1 install-man uninstall-man tags distdir info-am info \ +dvi-am dvi check check-am installcheck-am installcheck install-info-am \ +install-info install-exec-am install-exec install-data-am install-data \ +install-am install uninstall-am uninstall all-redirect all-am all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +config.texi: Makefile + rm -f config.texi + echo '@set VERSION $(VERSION)' > config.texi + +binutils.dvi: $(BINUTILS_TEXI) config.texi + +binutils.info: $(BINUTILS_TEXI) config.texi + +# Man page generation from texinfo +addr2line.1: $(BINUTILS_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Daddr2line < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +ar.1: $(BINUTILS_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dar < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +dlltool.1: $(BINUTILS_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Ddlltool < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +nlmconv.1: $(BINUTILS_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dnlmconv < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +nm.1: $(BINUTILS_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dnm < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +objcopy.1: $(BINUTILS_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dobjcopy < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +objdump.1: $(BINUTILS_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dobjdump < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +ranlib.1: $(BINUTILS_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dranlib < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +readelf.1: $(BINUTILS_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dreadelf < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +size.1: $(BINUTILS_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dsize < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +strings.1: $(BINUTILS_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dstrings < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +strip.1: $(BINUTILS_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dstrip < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +windres.1: $(BINUTILS_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dwindres < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +cxxfilt.man: $(BINUTILS_TEXI) + touch $@ + -$(TEXI2POD) $(MANCONF) -Dcxxfilt < $< > $@.pod + -($(POD2MAN) $@.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1) + rm -f $@.pod + +$(DEMANGLER_NAME).1: cxxfilt.man Makefile + sed -e 's/@PROGRAM@/$(DEMANGLER_NAME)/' < cxxfilt.man \ + > $(DEMANGLER_NAME).1 + +# Maintenance + +# We need it for the taz target in ../../Makefile.in. +info: $(MANS) + +# Build the man page from the texinfo file +# The sed command removes the no-adjust Nroff command so that +# the man output looks standard. +as.1: $(srcdir)/as.texinfo + touch $@ + -$(TEXI2POD) $(MANCONF) < $(srcdir)/as.texinfo > as.pod + -($(POD2MAN) as.pod | \ + sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || \ + (rm -f $@.T$$$$ && exit 1) + rm -f as.pod + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/binutils/binutils.texi b/binutils/doc/binutils.texi index 0011b117e5..0011b117e5 100644 --- a/binutils/binutils.texi +++ b/binutils/doc/binutils.texi diff --git a/binutils/nlmconv.1 b/binutils/nlmconv.1 deleted file mode 100644 index ecd8bfef0b..0000000000 --- a/binutils/nlmconv.1 +++ /dev/null @@ -1,225 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:27 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "NLMCONV.1 1" -.TH NLMCONV.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -nlmconv \- converts object code into an \s-1NLM\s0. -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -nlmconv [ \-I \fIbfdname\fR | \-\-input-target=\fIbfdname\fR ] - [ \-O \fIbfdname\fR | \-\-output-target=\fIbfdname\fR ] - [ \-T \fIheaderfile\fR | \-\-header-file=\fIheaderfile\fR ] - [ \-d | \-\-debug] [ \-l \fIlinker\fR | \-\-linker=\fIlinker\fR ] - [ \-h | \-\-help ] [ \-V | \-\-version ] - \fIinfile\fR \fIoutfile\fR -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -\&\f(CW\*(C`nlmconv\*(C'\fR converts the relocatable \fBi386\fR object file -\&\fIinfile\fR into the NetWare Loadable Module \fIoutfile\fR, optionally -reading \fIheaderfile\fR for \s-1NLM\s0 header information. For instructions -on writing the \s-1NLM\s0 command file language used in header files, see the -\&\fBlinkers\fR section, \fB\s-1NLMLINK\s0\fR in particular, of the \fI\s-1NLM\s0 -Development and Tools Overview\fR, which is part of the \s-1NLM\s0 Software -Developer's Kit (``\s-1NLM\s0 \s-1SDK\s0''), available from Novell, Inc. -\&\f(CW\*(C`nlmconv\*(C'\fR uses the \s-1GNU\s0 Binary File Descriptor library to read -\&\fIinfile\fR; -.PP -\&\f(CW\*(C`nlmconv\*(C'\fR can perform a link step. In other words, you can list -more than one object file for input if you list them in the definitions -file (rather than simply specifying one input file on the command line). -In this case, \f(CW\*(C`nlmconv\*(C'\fR calls the linker for you. -.SH "OPTIONS" -.IX Header "OPTIONS" -.Ip "\f(CW\*(C`\-I \f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "-I bfdname" -.Ip "\f(CW\*(C`\-\-input\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--input-target=bfdname" -Object format of the input file. \f(CW\*(C`nlmconv\*(C'\fR can usually determine -the format of a given file (so no default is necessary). -.Ip "\f(CW\*(C`\-O \f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "-O bfdname" -.Ip "\f(CW\*(C`\-\-output\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--output-target=bfdname" -Object format of the output file. \f(CW\*(C`nlmconv\*(C'\fR infers the output -format based on the input format, e.g. for a \fBi386\fR input file the -output format is \fBnlm32\-i386\fR. -.Ip "\f(CW\*(C`\-T \f(CIheaderfile\f(CW\*(C'\fR" 4 -.IX Item "-T headerfile" -.Ip "\f(CW\*(C`\-\-header\-file=\f(CIheaderfile\f(CW\*(C'\fR" 4 -.IX Item "--header-file=headerfile" -Reads \fIheaderfile\fR for \s-1NLM\s0 header information. For instructions on -writing the \s-1NLM\s0 command file language used in header files, see see the -\&\fBlinkers\fR section, of the \fI\s-1NLM\s0 Development and Tools -Overview\fR, which is part of the \s-1NLM\s0 Software Developer's Kit, available -from Novell, Inc. -.Ip "\f(CW\*(C`\-d\*(C'\fR" 4 -.IX Item "-d" -.Ip "\f(CW\*(C`\-\-debug\*(C'\fR" 4 -.IX Item "--debug" -Displays (on standard error) the linker command line used by \f(CW\*(C`nlmconv\*(C'\fR. -.Ip "\f(CW\*(C`\-l \f(CIlinker\f(CW\*(C'\fR" 4 -.IX Item "-l linker" -.Ip "\f(CW\*(C`\-\-linker=\f(CIlinker\f(CW\*(C'\fR" 4 -.IX Item "--linker=linker" -Use \fIlinker\fR for any linking. \fIlinker\fR can be an absolute or a -relative pathname. -.Ip "\f(CW\*(C`\-h\*(C'\fR" 4 -.IX Item "-h" -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Prints a usage summary. -.Ip "\f(CW\*(C`\-V\*(C'\fR" 4 -.IX Item "-V" -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Prints the version number for \f(CW\*(C`nlmconv\*(C'\fR. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/nm.1 b/binutils/nm.1 deleted file mode 100644 index 4a6494fc8e..0000000000 --- a/binutils/nm.1 +++ /dev/null @@ -1,382 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:27 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "NM.1 1" -.TH NM.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -nm \- list symbols from object files -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -nm [ \-a | \-\-debug-syms ] [ \-g | \-\-extern-only ] - [ \-B ] [ \-C | \-\-demangle[=\fIstyle\fR] ] [ \-D | \-\-dynamic ] - [ \-s | \-\-print-armap ] [ \-A | \-o | \-\-print-file-name ] - [ \-n | \-v | \-\-numeric-sort ] [ \-p | \-\-no-sort ] - [ \-r | \-\-reverse-sort ] [ \-\-size-sort ] [ \-u | \-\-undefined-only ] - [ \-t \fIradix\fR | \-\-radix=\fIradix\fR ] [ \-P | \-\-portability ] - [ \-\-target=\fIbfdname\fR ] [ \-f \fIformat\fR | \-\-format=\fIformat\fR ] - [ \-\-defined-only ] [\-l | \-\-line-numbers ] [ \-\-no-demangle ] - [ \-V | \-\-version ] [ \-X 32_64 ] [ \-\-help ] [ \fIobjfile\fR... ] -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -\&\s-1GNU\s0 \f(CW\*(C`nm\*(C'\fR lists the symbols from object files \fIobjfile\fR.... -If no object files are listed as arguments, \f(CW\*(C`nm\*(C'\fR assumes the file -\&\fIa.out\fR. -.PP -For each symbol, \f(CW\*(C`nm\*(C'\fR shows: -.Ip "\(bu" 4 -The symbol value, in the radix selected by options (see below), or -hexadecimal by default. -.Ip "\(bu" 4 -The symbol type. At least the following types are used; others are, as -well, depending on the object file format. If lowercase, the symbol is -local; if uppercase, the symbol is global (external). -.RS 4 -.Ip "\f(CW\*(C`A\*(C'\fR" 4 -.IX Item "A" -The symbol's value is absolute, and will not be changed by further -linking. -.Ip "\f(CW\*(C`B\*(C'\fR" 4 -.IX Item "B" -The symbol is in the uninitialized data section (known as \s-1BSS\s0). -.Ip "\f(CW\*(C`C\*(C'\fR" 4 -.IX Item "C" -The symbol is common. Common symbols are uninitialized data. When -linking, multiple common symbols may appear with the same name. If the -symbol is defined anywhere, the common symbols are treated as undefined -references. -.Ip "\f(CW\*(C`D\*(C'\fR" 4 -.IX Item "D" -The symbol is in the initialized data section. -.Ip "\f(CW\*(C`G\*(C'\fR" 4 -.IX Item "G" -The symbol is in an initialized data section for small objects. Some -object file formats permit more efficient access to small data objects, -such as a global int variable as opposed to a large global array. -.Ip "\f(CW\*(C`I\*(C'\fR" 4 -.IX Item "I" -The symbol is an indirect reference to another symbol. This is a \s-1GNU\s0 -extension to the a.out object file format which is rarely used. -.Ip "\f(CW\*(C`N\*(C'\fR" 4 -.IX Item "N" -The symbol is a debugging symbol. -.Ip "\f(CW\*(C`R\*(C'\fR" 4 -.IX Item "R" -The symbol is in a read only data section. -.Ip "\f(CW\*(C`S\*(C'\fR" 4 -.IX Item "S" -The symbol is in an uninitialized data section for small objects. -.Ip "\f(CW\*(C`T\*(C'\fR" 4 -.IX Item "T" -The symbol is in the text (code) section. -.Ip "\f(CW\*(C`U\*(C'\fR" 4 -.IX Item "U" -The symbol is undefined. -.Ip "\f(CW\*(C`V\*(C'\fR" 4 -.IX Item "V" -The symbol is a weak object. When a weak defined symbol is linked with -a normal defined symbol, the normal defined symbol is used with no error. -When a weak undefined symbol is linked and the symbol is not defined, -the value of the weak symbol becomes zero with no error. -.Ip "\f(CW\*(C`W\*(C'\fR" 4 -.IX Item "W" -The symbol is a weak symbol that has not been specifically tagged as a -weak object symbol. When a weak defined symbol is linked with a normal -defined symbol, the normal defined symbol is used with no error. -When a weak undefined symbol is linked and the symbol is not defined, -the value of the weak symbol becomes zero with no error. -.Ip "\f(CW\*(C`\-\*(C'\fR" 4 -.IX Item "-" -The symbol is a stabs symbol in an a.out object file. In this case, the -next values printed are the stabs other field, the stabs desc field, and -the stab type. Stabs symbols are used to hold debugging information; -for more information, see \f(CW@ref\fR{Top,Stabs,Stabs Overview,stabs.info, The -``stabs'' debug format}. -.Ip "\f(CW\*(C`?\*(C'\fR" 4 -.IX Item "?" -The symbol type is unknown, or object file format specific. -.RE -.RS 4 -.RE -.Ip "\(bu" 4 -The symbol name. -.SH "OPTIONS" -.IX Header "OPTIONS" -The long and short forms of options, shown here as alternatives, are -equivalent. -.Ip "\f(CW\*(C`\-A\*(C'\fR" 4 -.IX Item "-A" -.Ip "\f(CW\*(C`\-o\*(C'\fR" 4 -.IX Item "-o" -.Ip "\f(CW\*(C`\-\-print\-file\-name \*(C'\fR" 4 -.IX Item "--print-file-name " -Precede each symbol by the name of the input file (or archive member) -in which it was found, rather than identifying the input file once only, -before all of its symbols. -.Ip "\f(CW\*(C`\-a\*(C'\fR" 4 -.IX Item "-a" -.Ip "\f(CW\*(C`\-\-debug\-syms \*(C'\fR" 4 -.IX Item "--debug-syms " -Display all symbols, even debugger-only symbols; normally these are not -listed. -.Ip "\f(CW\*(C`\-B\*(C'\fR" 4 -.IX Item "-B" -The same as \fB\*(--format=bsd\fR (for compatibility with the \s-1MIPS\s0 \f(CW\*(C`nm\*(C'\fR). -.Ip "\f(CW\*(C`\-C\*(C'\fR" 4 -.IX Item "-C" -.Ip "\f(CW\*(C`\-\-demangle[=\f(CIstyle\f(CW]\*(C'\fR" 4 -.IX Item "--demangle[=style]" -Decode (\fIdemangle\fR) low-level symbol names into user-level names. -Besides removing any initial underscore prepended by the system, this -makes \*(C+ function names readable. Different compilers have different -mangling styles. The optional demangling style argument can be used to -choose an appropriate demangling style for your compiler. -.Ip "\f(CW\*(C`\-\-no\-demangle\*(C'\fR" 4 -.IX Item "--no-demangle" -Do not demangle low-level symbol names. This is the default. -.Ip "\f(CW\*(C`\-D\*(C'\fR" 4 -.IX Item "-D" -.Ip "\f(CW\*(C`\-\-dynamic\*(C'\fR" 4 -.IX Item "--dynamic" -Display the dynamic symbols rather than the normal symbols. This is -only meaningful for dynamic objects, such as certain types of shared -libraries. -.Ip "\f(CW\*(C`\-f \f(CIformat\f(CW\*(C'\fR" 4 -.IX Item "-f format" -.Ip "\f(CW\*(C`\-\-format=\f(CIformat\f(CW\*(C'\fR" 4 -.IX Item "--format=format" -Use the output format \fIformat\fR, which can be \f(CW\*(C`bsd\*(C'\fR, -\&\f(CW\*(C`sysv\*(C'\fR, or \f(CW\*(C`posix\*(C'\fR. The default is \f(CW\*(C`bsd\*(C'\fR. -Only the first character of \fIformat\fR is significant; it can be -either upper or lower case. -.Ip "\f(CW\*(C`\-g\*(C'\fR" 4 -.IX Item "-g" -.Ip "\f(CW\*(C`\-\-extern\-only \*(C'\fR" 4 -.IX Item "--extern-only " -Display only external symbols. -.Ip "\f(CW\*(C`\-l\*(C'\fR" 4 -.IX Item "-l" -.Ip "\f(CW\*(C`\-\-line\-numbers\*(C'\fR" 4 -.IX Item "--line-numbers" -For each symbol, use debugging information to try to find a filename and -line number. For a defined symbol, look for the line number of the -address of the symbol. For an undefined symbol, look for the line -number of a relocation entry which refers to the symbol. If line number -information can be found, print it after the other symbol information. -.Ip "\f(CW\*(C`\-n\*(C'\fR" 4 -.IX Item "-n" -.Ip "\f(CW\*(C`\-v\*(C'\fR" 4 -.IX Item "-v" -.Ip "\f(CW\*(C`\-\-numeric\-sort \*(C'\fR" 4 -.IX Item "--numeric-sort " -Sort symbols numerically by their addresses, rather than alphabetically -by their names. -.Ip "\f(CW\*(C`\-p\*(C'\fR" 4 -.IX Item "-p" -.Ip "\f(CW\*(C`\-\-no\-sort \*(C'\fR" 4 -.IX Item "--no-sort " -Do not bother to sort the symbols in any order; print them in the order -encountered. -.Ip "\f(CW\*(C`\-P\*(C'\fR" 4 -.IX Item "-P" -.Ip "\f(CW\*(C`\-\-portability\*(C'\fR" 4 -.IX Item "--portability" -Use the \s-1POSIX\s0.2 standard output format instead of the default format. -Equivalent to \fB\-f posix\fR. -.Ip "\f(CW\*(C`\-s\*(C'\fR" 4 -.IX Item "-s" -.Ip "\f(CW\*(C`\-\-print\-armap\*(C'\fR" 4 -.IX Item "--print-armap" -When listing symbols from archive members, include the index: a mapping -(stored in the archive by \f(CW\*(C`ar\*(C'\fR or \f(CW\*(C`ranlib\*(C'\fR) of which modules -contain definitions for which names. -.Ip "\f(CW\*(C`\-r\*(C'\fR" 4 -.IX Item "-r" -.Ip "\f(CW\*(C`\-\-reverse\-sort \*(C'\fR" 4 -.IX Item "--reverse-sort " -Reverse the order of the sort (whether numeric or alphabetic); let the -last come first. -.Ip "\f(CW\*(C`\-\-size\-sort\*(C'\fR" 4 -.IX Item "--size-sort" -Sort symbols by size. The size is computed as the difference between -the value of the symbol and the value of the symbol with the next higher -value. The size of the symbol is printed, rather than the value. -.Ip "\f(CW\*(C`\-t \f(CIradix\f(CW\*(C'\fR" 4 -.IX Item "-t radix" -.Ip "\f(CW\*(C`\-\-radix=\f(CIradix\f(CW\*(C'\fR" 4 -.IX Item "--radix=radix" -Use \fIradix\fR as the radix for printing the symbol values. It must be -\&\fBd\fR for decimal, \fBo\fR for octal, or \fBx\fR for hexadecimal. -.Ip "\f(CW\*(C`\-\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--target=bfdname" -Specify an object code format other than your system's default format. -.Ip "\f(CW\*(C`\-u\*(C'\fR" 4 -.IX Item "-u" -.Ip "\f(CW\*(C`\-\-undefined\-only \*(C'\fR" 4 -.IX Item "--undefined-only " -Display only undefined symbols (those external to each object file). -.Ip "\f(CW\*(C`\-\-defined\-only\*(C'\fR" 4 -.IX Item "--defined-only" -Display only defined symbols for each object file. -.Ip "\f(CW\*(C`\-V\*(C'\fR" 4 -.IX Item "-V" -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Show the version number of \f(CW\*(C`nm\*(C'\fR and exit. -.Ip "\f(CW\*(C`\-X\*(C'\fR" 4 -.IX Item "-X" -This option is ignored for compatibility with the \s-1AIX\s0 version of -\&\f(CW\*(C`nm\*(C'\fR. It takes one parameter which must be the string -\&\f(CW\*(C`32_64\*(C'\fR. The default mode of \s-1AIX\s0 \f(CW\*(C`nm\*(C'\fR corresponds -to \f(CW\*(C`\-X 32\*(C'\fR, which is not supported by \s-1GNU\s0 \f(CW\*(C`nm\*(C'\fR. -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Show a summary of the options to \f(CW\*(C`nm\*(C'\fR and exit. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -\&\fIar\fR\|(1), \fIobjdump\fR\|(1), \fIranlib\fR\|(1), and the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/objcopy.1 b/binutils/objcopy.1 deleted file mode 100644 index a6aa1815fa..0000000000 --- a/binutils/objcopy.1 +++ /dev/null @@ -1,548 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:28 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "OBJCOPY.1 1" -.TH OBJCOPY.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -objcopy \- copy and translate object files -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -objcopy [ \-F \fIbfdname\fR | \-\-target=\fIbfdname\fR ] - [ \-I \fIbfdname\fR | \-\-input-target=\fIbfdname\fR ] - [ \-O \fIbfdname\fR | \-\-output-target=\fIbfdname\fR ] - [ \-B \fIbfdarch\fR | \-\-binary-architecture=\fIbfdarch\fR ] - [ \-S | \-\-strip-all ] [ \-g | \-\-strip-debug ] - [ \-K \fIsymbolname\fR | \-\-keep-symbol=\fIsymbolname\fR ] - [ \-N \fIsymbolname\fR | \-\-strip-symbol=\fIsymbolname\fR ] - [ \-G \fIsymbolname\fR | \-\-keep-global-symbol=\fIsymbolname\fR] - [ \-L \fIsymbolname\fR | \-\-localize-symbol=\fIsymbolname\fR ] - [ \-W \fIsymbolname\fR | \-\-weaken-symbol=\fIsymbolname\fR ] - [ \-x | \-\-discard-all ] [ \-X | \-\-discard-locals ] - [ \-b \fIbyte\fR | \-\-byte=\fIbyte\fR ] - [ \-i \fIinterleave\fR | \-\-interleave=\fIinterleave\fR ] - [ \-j \fIsectionname\fR | \-\-only-section=\fIsectionname\fR ] - [ \-R \fIsectionname\fR | \-\-remove-section=\fIsectionname\fR ] - [ \-p | \-\-preserve-dates ] [ \-\-debugging ] - [ \-\-gap-fill=\fIval\fR ] [ \-\-pad-to=\fIaddress\fR ] - [ \-\-set-start=\fIval\fR ] [ \-\-adjust-start=\fIincr\fR ] - [ \-\-change-addresses=\fIincr\fR ] - [ \-\-change-section-address \fIsection\fR{=,+,\-}\fIval\fR ] - [ \-\-change-section-lma \fIsection\fR{=,+,\-}\fIval\fR ] - [ \-\-change-section-vma \fIsection\fR{=,+,\-}\fIval\fR ] - [ \-\-change-warnings ] [ \-\-no-change-warnings ] - [ \-\-set-section-flags \fIsection\fR=\fIflags\fR ] - [ \-\-add-section \fIsectionname\fR=\fIfilename\fR ] - [ \-\-change-leading-char ] [ \-\-remove-leading-char ] - [ \-\-srec-len=\fIival\fR ] [ \-\-srec-forceS3 ] - [ \-\-redefine-sym \fIold\fR=\fInew\fR ] [ \-\-weaken ] - [ \-\-keep-symbols=\fIfilename\fR ] - [ \-\-strip-symbols=\fIfilename\fR ] - [ \-\-keep-global-symbols=\fIfilename\fR ] - [ \-\-localize-symbols=\fIfilename\fR ] - [ \-\-weaken-symbols=\fIfilename\fR ] - [ \-v | \-\-verbose ] [ \-V | \-\-version ] [ \-\-help ] - \fIinfile\fR [\fIoutfile\fR] -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -The \s-1GNU\s0 \f(CW\*(C`objcopy\*(C'\fR utility copies the contents of an object -file to another. \f(CW\*(C`objcopy\*(C'\fR uses the \s-1GNU\s0 \s-1BFD\s0 Library to -read and write the object files. It can write the destination object -file in a format different from that of the source object file. The -exact behavior of \f(CW\*(C`objcopy\*(C'\fR is controlled by command-line options. -Note that \f(CW\*(C`objcopy\*(C'\fR should be able to copy a fully linked file -between any two formats. However, copying a relocatable object file -between any two formats may not work as expected. -.PP -\&\f(CW\*(C`objcopy\*(C'\fR creates temporary files to do its translations and -deletes them afterward. \f(CW\*(C`objcopy\*(C'\fR uses \s-1BFD\s0 to do all its -translation work; it has access to all the formats described in \s-1BFD\s0 -and thus is able to recognize most formats without being told -explicitly. -.PP -\&\f(CW\*(C`objcopy\*(C'\fR can be used to generate S-records by using an output -target of \fBsrec\fR (e.g., use \fB\-O srec\fR). -.PP -\&\f(CW\*(C`objcopy\*(C'\fR can be used to generate a raw binary file by using an -output target of \fBbinary\fR (e.g., use \fB\-O binary\fR). When -\&\f(CW\*(C`objcopy\*(C'\fR generates a raw binary file, it will essentially produce -a memory dump of the contents of the input object file. All symbols and -relocation information will be discarded. The memory dump will start at -the load address of the lowest section copied into the output file. -.PP -When generating an S-record or a raw binary file, it may be helpful to -use \fB\-S\fR to remove sections containing debugging information. In -some cases \fB\-R\fR will be useful to remove sections which contain -information that is not needed by the binary file. -.PP -Note \- \f(CW\*(C`objcopy\*(C'\fR is not able to change the endianness of its input -files. If the input format has an endianness, (some formats do not), -\&\f(CW\*(C`objcopy\*(C'\fR can only copy the inputs into file formats that have the -same endianness or which have no endianness (eg \fBsrec\fR). -.SH "OPTIONS" -.IX Header "OPTIONS" -.Ip "\f(CW\*(C`\f(CIinfile\f(CW\*(C'\fR" 4 -.IX Item "infile" -.Ip "\f(CW\*(C`\f(CIoutfile\f(CW\*(C'\fR" 4 -.IX Item "outfile" -The input and output files, respectively. -If you do not specify \fIoutfile\fR, \f(CW\*(C`objcopy\*(C'\fR creates a -temporary file and destructively renames the result with -the name of \fIinfile\fR. -.Ip "\f(CW\*(C`\-I \f(CIbfdname\f(CW \*(C'\fR" 4 -.IX Item "-I bfdname " -.Ip "\f(CW\*(C`\-\-input\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--input-target=bfdname" -Consider the source file's object format to be \fIbfdname\fR, rather than -attempting to deduce it. -.Ip "\f(CW\*(C`\-O \f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "-O bfdname" -.Ip "\f(CW\*(C`\-\-output\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--output-target=bfdname" -Write the output file using the object format \fIbfdname\fR. -.Ip "\f(CW\*(C`\-F \f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "-F bfdname" -.Ip "\f(CW\*(C`\-\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--target=bfdname" -Use \fIbfdname\fR as the object format for both the input and the output -file; i.e., simply transfer data from source to destination with no -translation. -.Ip "\f(CW\*(C`\-B \f(CIbfdarch\f(CW\*(C'\fR" 4 -.IX Item "-B bfdarch" -.Ip "\f(CW\*(C`\-\-binary\-architecture=\f(CIbfdarch\f(CW\*(C'\fR" 4 -.IX Item "--binary-architecture=bfdarch" -Useful when transforming a raw binary input file into an object file. -In this case the output architecture can be set to \fIbfdarch\fR. This -option will be ignored if the input file has a known \fIbfdarch\fR. You -can access this binary data inside a program by referencing the special -symbols that are created by the conversion process. These symbols are -called _binary_\fIobjfile\fR_start, _binary_\fIobjfile\fR_end and -_binary_\fIobjfile\fR_size. e.g. you can transform a picture file into -an object file and then access it in your code using these symbols. -.Ip "\f(CW\*(C`\-j \f(CIsectionname\f(CW\*(C'\fR" 4 -.IX Item "-j sectionname" -.Ip "\f(CW\*(C`\-\-only\-section=\f(CIsectionname\f(CW\*(C'\fR" 4 -.IX Item "--only-section=sectionname" -Copy only the named section from the input file to the output file. -This option may be given more than once. Note that using this option -inappropriately may make the output file unusable. -.Ip "\f(CW\*(C`\-R \f(CIsectionname\f(CW\*(C'\fR" 4 -.IX Item "-R sectionname" -.Ip "\f(CW\*(C`\-\-remove\-section=\f(CIsectionname\f(CW\*(C'\fR" 4 -.IX Item "--remove-section=sectionname" -Remove any section named \fIsectionname\fR from the output file. This -option may be given more than once. Note that using this option -inappropriately may make the output file unusable. -.Ip "\f(CW\*(C`\-S\*(C'\fR" 4 -.IX Item "-S" -.Ip "\f(CW\*(C`\-\-strip\-all\*(C'\fR" 4 -.IX Item "--strip-all" -Do not copy relocation and symbol information from the source file. -.Ip "\f(CW\*(C`\-g\*(C'\fR" 4 -.IX Item "-g" -.Ip "\f(CW\*(C`\-\-strip\-debug\*(C'\fR" 4 -.IX Item "--strip-debug" -Do not copy debugging symbols from the source file. -.Ip "\f(CW\*(C`\-\-strip\-unneeded\*(C'\fR" 4 -.IX Item "--strip-unneeded" -Strip all symbols that are not needed for relocation processing. -.Ip "\f(CW\*(C`\-K \f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "-K symbolname" -.Ip "\f(CW\*(C`\-\-keep\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "--keep-symbol=symbolname" -Copy only symbol \fIsymbolname\fR from the source file. This option may -be given more than once. -.Ip "\f(CW\*(C`\-N \f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "-N symbolname" -.Ip "\f(CW\*(C`\-\-strip\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "--strip-symbol=symbolname" -Do not copy symbol \fIsymbolname\fR from the source file. This option -may be given more than once. -.Ip "\f(CW\*(C`\-G \f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "-G symbolname" -.Ip "\f(CW\*(C`\-\-keep\-global\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "--keep-global-symbol=symbolname" -Keep only symbol \fIsymbolname\fR global. Make all other symbols local -to the file, so that they are not visible externally. This option may -be given more than once. -.Ip "\f(CW\*(C`\-L \f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "-L symbolname" -.Ip "\f(CW\*(C`\-\-localize\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "--localize-symbol=symbolname" -Make symbol \fIsymbolname\fR local to the file, so that it is not -visible externally. This option may be given more than once. -.Ip "\f(CW\*(C`\-W \f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "-W symbolname" -.Ip "\f(CW\*(C`\-\-weaken\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "--weaken-symbol=symbolname" -Make symbol \fIsymbolname\fR weak. This option may be given more than once. -.Ip "\f(CW\*(C`\-x\*(C'\fR" 4 -.IX Item "-x" -.Ip "\f(CW\*(C`\-\-discard\-all\*(C'\fR" 4 -.IX Item "--discard-all" -Do not copy non-global symbols from the source file. -.Ip "\f(CW\*(C`\-X\*(C'\fR" 4 -.IX Item "-X" -.Ip "\f(CW\*(C`\-\-discard\-locals\*(C'\fR" 4 -.IX Item "--discard-locals" -Do not copy compiler-generated local symbols. -(These usually start with \fBL\fR or \fB.\fR.) -.Ip "\f(CW\*(C`\-b \f(CIbyte\f(CW\*(C'\fR" 4 -.IX Item "-b byte" -.Ip "\f(CW\*(C`\-\-byte=\f(CIbyte\f(CW\*(C'\fR" 4 -.IX Item "--byte=byte" -Keep only every \fIbyte\fRth byte of the input file (header data is not -affected). \fIbyte\fR can be in the range from 0 to \fIinterleave\fR\-1, -where \fIinterleave\fR is given by the \fB\-i\fR or \fB\*(--interleave\fR -option, or the default of 4. This option is useful for creating files -to program \s-1ROM\s0. It is typically used with an \f(CW\*(C`srec\*(C'\fR output -target. -.Ip "\f(CW\*(C`\-i \f(CIinterleave\f(CW\*(C'\fR" 4 -.IX Item "-i interleave" -.Ip "\f(CW\*(C`\-\-interleave=\f(CIinterleave\f(CW\*(C'\fR" 4 -.IX Item "--interleave=interleave" -Only copy one out of every \fIinterleave\fR bytes. Select which byte to -copy with the \fI\-b\fR or \fB\*(--byte\fR option. The default is 4. -\&\f(CW\*(C`objcopy\*(C'\fR ignores this option if you do not specify either \fB\-b\fR or -\&\fB\*(--byte\fR. -.Ip "\f(CW\*(C`\-p\*(C'\fR" 4 -.IX Item "-p" -.Ip "\f(CW\*(C`\-\-preserve\-dates\*(C'\fR" 4 -.IX Item "--preserve-dates" -Set the access and modification dates of the output file to be the same -as those of the input file. -.Ip "\f(CW\*(C`\-\-debugging\*(C'\fR" 4 -.IX Item "--debugging" -Convert debugging information, if possible. This is not the default -because only certain debugging formats are supported, and the -conversion process can be time consuming. -.Ip "\f(CW\*(C`\-\-gap\-fill \f(CIval\f(CW\*(C'\fR" 4 -.IX Item "--gap-fill val" -Fill gaps between sections with \fIval\fR. This operation applies to -the \fIload address\fR (\s-1LMA\s0) of the sections. It is done by increasing -the size of the section with the lower address, and filling in the extra -space created with \fIval\fR. -.Ip "\f(CW\*(C`\-\-pad\-to \f(CIaddress\f(CW\*(C'\fR" 4 -.IX Item "--pad-to address" -Pad the output file up to the load address \fIaddress\fR. This is -done by increasing the size of the last section. The extra space is -filled in with the value specified by \fB\*(--gap-fill\fR (default zero). -.Ip "\f(CW\*(C`\-\-set\-start \f(CIval\f(CW\*(C'\fR" 4 -.IX Item "--set-start val" -Set the start address of the new file to \fIval\fR. Not all object file -formats support setting the start address. -.Ip "\f(CW\*(C`\-\-change\-start \f(CIincr\f(CW\*(C'\fR" 4 -.IX Item "--change-start incr" -.Ip "\f(CW\*(C`\-\-adjust\-start \f(CIincr\f(CW\*(C'\fR" 4 -.IX Item "--adjust-start incr" -Change the start address by adding \fIincr\fR. Not all object file -formats support setting the start address. -.Ip "\f(CW\*(C`\-\-change\-addresses \f(CIincr\f(CW\*(C'\fR" 4 -.IX Item "--change-addresses incr" -.Ip "\f(CW\*(C`\-\-adjust\-vma \f(CIincr\f(CW\*(C'\fR" 4 -.IX Item "--adjust-vma incr" -Change the \s-1VMA\s0 and \s-1LMA\s0 addresses of all sections, as well as the start -address, by adding \fIincr\fR. Some object file formats do not permit -section addresses to be changed arbitrarily. Note that this does not -relocate the sections; if the program expects sections to be loaded at a -certain address, and this option is used to change the sections such -that they are loaded at a different address, the program may fail. -.Ip "\f(CW\*(C`\-\-change\-section\-address \f(CIsection\f(CW{=,+,\-}\f(CIval\f(CW\*(C'\fR" 4 -.IX Item "--change-section-address section{=,+,-}val" -.Ip "\f(CW\*(C`\-\-adjust\-section\-vma \f(CIsection\f(CW{=,+,\-}\f(CIval\f(CW\*(C'\fR" 4 -.IX Item "--adjust-section-vma section{=,+,-}val" -Set or change both the \s-1VMA\s0 address and the \s-1LMA\s0 address of the named -\&\fIsection\fR. If \fB=\fR is used, the section address is set to -\&\fIval\fR. Otherwise, \fIval\fR is added to or subtracted from the -section address. See the comments under \fB\*(--change-addresses\fR, -above. If \fIsection\fR does not exist in the input file, a warning will -be issued, unless \fB\*(--no-change-warnings\fR is used. -.Ip "\f(CW\*(C`\-\-change\-section\-lma \f(CIsection\f(CW{=,+,\-}\f(CIval\f(CW\*(C'\fR" 4 -.IX Item "--change-section-lma section{=,+,-}val" -Set or change the \s-1LMA\s0 address of the named \fIsection\fR. The \s-1LMA\s0 -address is the address where the section will be loaded into memory at -program load time. Normally this is the same as the \s-1VMA\s0 address, which -is the address of the section at program run time, but on some systems, -especially those where a program is held in \s-1ROM\s0, the two can be -different. If \fB=\fR is used, the section address is set to -\&\fIval\fR. Otherwise, \fIval\fR is added to or subtracted from the -section address. See the comments under \fB\*(--change-addresses\fR, -above. If \fIsection\fR does not exist in the input file, a warning -will be issued, unless \fB\*(--no-change-warnings\fR is used. -.Ip "\f(CW\*(C`\-\-change\-section\-vma \f(CIsection\f(CW{=,+,\-}\f(CIval\f(CW\*(C'\fR" 4 -.IX Item "--change-section-vma section{=,+,-}val" -Set or change the \s-1VMA\s0 address of the named \fIsection\fR. The \s-1VMA\s0 -address is the address where the section will be located once the -program has started executing. Normally this is the same as the \s-1LMA\s0 -address, which is the address where the section will be loaded into -memory, but on some systems, especially those where a program is held in -\&\s-1ROM\s0, the two can be different. If \fB=\fR is used, the section address -is set to \fIval\fR. Otherwise, \fIval\fR is added to or subtracted -from the section address. See the comments under -\&\fB\*(--change-addresses\fR, above. If \fIsection\fR does not exist in -the input file, a warning will be issued, unless -\&\fB\*(--no-change-warnings\fR is used. -.Ip "\f(CW\*(C`\-\-change\-warnings\*(C'\fR" 4 -.IX Item "--change-warnings" -.Ip "\f(CW\*(C`\-\-adjust\-warnings\*(C'\fR" 4 -.IX Item "--adjust-warnings" -If \fB\*(--change-section-address\fR or \fB\*(--change-section-lma\fR or -\&\fB\*(--change-section-vma\fR is used, and the named section does not -exist, issue a warning. This is the default. -.Ip "\f(CW\*(C`\-\-no\-change\-warnings\*(C'\fR" 4 -.IX Item "--no-change-warnings" -.Ip "\f(CW\*(C`\-\-no\-adjust\-warnings\*(C'\fR" 4 -.IX Item "--no-adjust-warnings" -Do not issue a warning if \fB\*(--change-section-address\fR or -\&\fB\*(--adjust-section-lma\fR or \fB\*(--adjust-section-vma\fR is used, even -if the named section does not exist. -.Ip "\f(CW\*(C`\-\-set\-section\-flags \f(CIsection\f(CW=\f(CIflags\f(CW\*(C'\fR" 4 -.IX Item "--set-section-flags section=flags" -Set the flags for the named section. The \fIflags\fR argument is a -comma separated string of flag names. The recognized names are -\&\fBalloc\fR, \fBcontents\fR, \fBload\fR, \fBnoload\fR, -\&\fBreadonly\fR, \fBcode\fR, \fBdata\fR, \fBrom\fR, \fBshare\fR, and -\&\fBdebug\fR. You can set the \fBcontents\fR flag for a section which -does not have contents, but it is not meaningful to clear the -\&\fBcontents\fR flag of a section which does have contents\*(--just remove -the section instead. Not all flags are meaningful for all object file -formats. -.Ip "\f(CW\*(C`\-\-add\-section \f(CIsectionname\f(CW=\f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--add-section sectionname=filename" -Add a new section named \fIsectionname\fR while copying the file. The -contents of the new section are taken from the file \fIfilename\fR. The -size of the section will be the size of the file. This option only -works on file formats which can support sections with arbitrary names. -.Ip "\f(CW\*(C`\-\-change\-leading\-char\*(C'\fR" 4 -.IX Item "--change-leading-char" -Some object file formats use special characters at the start of -symbols. The most common such character is underscore, which compilers -often add before every symbol. This option tells \f(CW\*(C`objcopy\*(C'\fR to -change the leading character of every symbol when it converts between -object file formats. If the object file formats use the same leading -character, this option has no effect. Otherwise, it will add a -character, or remove a character, or change a character, as -appropriate. -.Ip "\f(CW\*(C`\-\-remove\-leading\-char\*(C'\fR" 4 -.IX Item "--remove-leading-char" -If the first character of a global symbol is a special symbol leading -character used by the object file format, remove the character. The -most common symbol leading character is underscore. This option will -remove a leading underscore from all global symbols. This can be useful -if you want to link together objects of different file formats with -different conventions for symbol names. This is different from -\&\f(CW\*(C`\-\-change\-leading\-char\*(C'\fR because it always changes the symbol name -when appropriate, regardless of the object file format of the output -file. -.Ip "\f(CW\*(C`\-\-srec\-len=\f(CIival\f(CW\*(C'\fR" 4 -.IX Item "--srec-len=ival" -Meaningful only for srec output. Set the maximum length of the Srecords -being produced to \fIival\fR. This length covers both address, data and -crc fields. -.Ip "\f(CW\*(C`\-\-srec\-forceS3\*(C'\fR" 4 -.IX Item "--srec-forceS3" -Meaningful only for srec output. Avoid generation of S1/S2 records, -creating S3\-only record format. -.Ip "\f(CW\*(C`\-\-redefine\-sym \f(CIold\f(CW=\f(CInew\f(CW\*(C'\fR" 4 -.IX Item "--redefine-sym old=new" -Change the name of a symbol \fIold\fR, to \fInew\fR. This can be useful -when one is trying link two things together for which you have no -source, and there are name collisions. -.Ip "\f(CW\*(C`\-\-weaken\*(C'\fR" 4 -.IX Item "--weaken" -Change all global symbols in the file to be weak. This can be useful -when building an object which will be linked against other objects using -the \f(CW\*(C`\-R\*(C'\fR option to the linker. This option is only effective when -using an object file format which supports weak symbols. -.Ip "\f(CW\*(C`\-\-keep\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--keep-symbols=filename" -Apply \fB\*(--keep-symbol\fR option to each symbol listed in the file -\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol -name per line. Line comments may be introduced by the hash character. -This option may be given more than once. -.Ip "\f(CW\*(C`\-\-strip\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--strip-symbols=filename" -Apply \fB\*(--strip-symbol\fR option to each symbol listed in the file -\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol -name per line. Line comments may be introduced by the hash character. -This option may be given more than once. -.Ip "\f(CW\*(C`\-\-keep\-global\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--keep-global-symbols=filename" -Apply \fB\*(--keep-global-symbol\fR option to each symbol listed in the -file \fIfilename\fR. \fIfilename\fR is simply a flat file, with one -symbol name per line. Line comments may be introduced by the hash -character. This option may be given more than once. -.Ip "\f(CW\*(C`\-\-localize\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--localize-symbols=filename" -Apply \fB\*(--localize-symbol\fR option to each symbol listed in the file -\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol -name per line. Line comments may be introduced by the hash character. -This option may be given more than once. -.Ip "\f(CW\*(C`\-\-weaken\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--weaken-symbols=filename" -Apply \fB\*(--weaken-symbol\fR option to each symbol listed in the file -\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol -name per line. Line comments may be introduced by the hash character. -This option may be given more than once. -.Ip "\f(CW\*(C`\-V\*(C'\fR" 4 -.IX Item "-V" -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Show the version number of \f(CW\*(C`objcopy\*(C'\fR. -.Ip "\f(CW\*(C`\-v\*(C'\fR" 4 -.IX Item "-v" -.Ip "\f(CW\*(C`\-\-verbose\*(C'\fR" 4 -.IX Item "--verbose" -Verbose output: list all object files modified. In the case of -archives, \fBobjcopy \-V\fR lists all members of the archive. -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Show a summary of the options to \f(CW\*(C`objcopy\*(C'\fR. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -\&\fIld\fR\|(1), \fIobjdump\fR\|(1), and the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/objdump.1 b/binutils/objdump.1 deleted file mode 100644 index 9c51441c70..0000000000 --- a/binutils/objdump.1 +++ /dev/null @@ -1,459 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:28 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "OBJDUMP.1 1" -.TH OBJDUMP.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -objdump \- display information from object files. -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -objdump [ \-a | \-\-archive-headers ] - [ \-b \fIbfdname\fR | \-\-target=\fIbfdname\fR ] - [ \-C | \-\-demangle[=\fIstyle\fR] ] - [ \-d | \-\-disassemble ] - [ \-D | \-\-disassemble-all ] - [ \-z | \-\-disassemble-zeroes ] - [ \-EB | \-EL | \-\-endian={big | little } ] - [ \-f | \-\-file-headers ] - [ \-\-file-start-context ] - [ \-g | \-\-debugging ] - [ \-h | \-\-section-headers | \-\-headers ] - [ \-i | \-\-info ] - [ \-j \fIsection\fR | \-\-section=\fIsection\fR ] - [ \-l | \-\-line-numbers ] - [ \-S | \-\-source ] - [ \-m \fImachine\fR | \-\-architecture=\fImachine\fR ] - [ \-M \fIoptions\fR | \-\-disassembler-options=\fIoptions\fR] - [ \-p | \-\-private-headers ] - [ \-r | \-\-reloc ] - [ \-R | \-\-dynamic-reloc ] - [ \-s | \-\-full-contents ] - [ \-G | \-\-stabs ] - [ \-t | \-\-syms ] - [ \-T | \-\-dynamic-syms ] - [ \-x | \-\-all-headers ] - [ \-w | \-\-wide ] - [ \-\-start-address=\fIaddress\fR ] - [ \-\-stop-address=\fIaddress\fR ] - [ \-\-prefix-addresses] - [ \-\-[no-]show-raw-insn ] - [ \-\-adjust-vma=\fIoffset\fR ] - [ \-V | \-\-version ] - [ \-H | \-\-help ] - \fIobjfile\fR... -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -\&\f(CW\*(C`objdump\*(C'\fR displays information about one or more object files. -The options control what particular information to display. This -information is mostly useful to programmers who are working on the -compilation tools, as opposed to programmers who just want their -program to compile and work. -.PP -\&\fIobjfile\fR... are the object files to be examined. When you -specify archives, \f(CW\*(C`objdump\*(C'\fR shows information on each of the member -object files. -.SH "OPTIONS" -.IX Header "OPTIONS" -The long and short forms of options, shown here as alternatives, are -equivalent. At least one option from the list -\&\fB\-a,\-d,\-D,\-f,\-g,\-G,\-h,\-H,\-p,\-r,\-R,\-S,\-t,\-T,\-V,\-x\fR must be given. -.Ip "\f(CW\*(C`\-a\*(C'\fR" 4 -.IX Item "-a" -.Ip "\f(CW\*(C`\-\-archive\-header\*(C'\fR" 4 -.IX Item "--archive-header" -If any of the \fIobjfile\fR files are archives, display the archive -header information (in a format similar to \fBls \-l\fR). Besides the -information you could list with \fBar tv\fR, \fBobjdump \-a\fR shows -the object file format of each archive member. -.Ip "\f(CW\*(C`\-\-adjust\-vma=\f(CIoffset\f(CW\*(C'\fR" 4 -.IX Item "--adjust-vma=offset" -When dumping information, first add \fIoffset\fR to all the section -addresses. This is useful if the section addresses do not correspond to -the symbol table, which can happen when putting sections at particular -addresses when using a format which can not represent section addresses, -such as a.out. -.Ip "\f(CW\*(C`\-b \f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "-b bfdname" -.Ip "\f(CW\*(C`\-\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--target=bfdname" -Specify that the object-code format for the object files is -\&\fIbfdname\fR. This option may not be necessary; \fIobjdump\fR can -automatically recognize many formats. -.Sp -For example, -.Sp -.Vb 1 -\& objdump -b oasys -m vax -h fu.o -.Ve -displays summary information from the section headers (\fB\-h\fR) of -\&\fIfu.o\fR, which is explicitly identified (\fB\-m\fR) as a \s-1VAX\s0 object -file in the format produced by Oasys compilers. You can list the -formats available with the \fB\-i\fR option. -.Ip "\f(CW\*(C`\-C\*(C'\fR" 4 -.IX Item "-C" -.Ip "\f(CW\*(C`\-\-demangle[=\f(CIstyle\f(CW]\*(C'\fR" 4 -.IX Item "--demangle[=style]" -Decode (\fIdemangle\fR) low-level symbol names into user-level names. -Besides removing any initial underscore prepended by the system, this -makes \*(C+ function names readable. Different compilers have different -mangling styles. The optional demangling style argument can be used to -choose an appropriate demangling style for your compiler. -.Ip "\f(CW\*(C`\-G\*(C'\fR" 4 -.IX Item "-G" -.Ip "\f(CW\*(C`\-\-debugging\*(C'\fR" 4 -.IX Item "--debugging" -Display debugging information. This attempts to parse debugging -information stored in the file and print it out using a C like syntax. -Only certain types of debugging information have been implemented. -.Ip "\f(CW\*(C`\-d\*(C'\fR" 4 -.IX Item "-d" -.Ip "\f(CW\*(C`\-\-disassemble\*(C'\fR" 4 -.IX Item "--disassemble" -Display the assembler mnemonics for the machine instructions from -\&\fIobjfile\fR. This option only disassembles those sections which are -expected to contain instructions. -.Ip "\f(CW\*(C`\-D\*(C'\fR" 4 -.IX Item "-D" -.Ip "\f(CW\*(C`\-\-disassemble\-all\*(C'\fR" 4 -.IX Item "--disassemble-all" -Like \fB\-d\fR, but disassemble the contents of all sections, not just -those expected to contain instructions. -.Ip "\f(CW\*(C`\-\-prefix\-addresses\*(C'\fR" 4 -.IX Item "--prefix-addresses" -When disassembling, print the complete address on each line. This is -the older disassembly format. -.Ip "\f(CW\*(C`\-\-disassemble\-zeroes\*(C'\fR" 4 -.IX Item "--disassemble-zeroes" -Normally the disassembly output will skip blocks of zeroes. This -option directs the disassembler to disassemble those blocks, just like -any other data. -.Ip "\f(CW\*(C`\-EB\*(C'\fR" 4 -.IX Item "-EB" -.Ip "\f(CW\*(C`\-EL\*(C'\fR" 4 -.IX Item "-EL" -.Ip "\f(CW\*(C`\-\-endian={big|little}\*(C'\fR" 4 -.IX Item "--endian={big|little}" -Specify the endianness of the object files. This only affects -disassembly. This can be useful when disassembling a file format which -does not describe endianness information, such as S-records. -.Ip "\f(CW\*(C`\-f\*(C'\fR" 4 -.IX Item "-f" -.Ip "\f(CW\*(C`\-\-file\-header\*(C'\fR" 4 -.IX Item "--file-header" -Display summary information from the overall header of -each of the \fIobjfile\fR files. -.Ip "\f(CW\*(C`\-\-file\-start\-context\*(C'\fR" 4 -.IX Item "--file-start-context" -Specify that when displaying interlisted source code/disassembly -(assumes '\-S') from a file that has not yet been displayed, extend the -context to the start of the file. -.Ip "\f(CW\*(C`\-h\*(C'\fR" 4 -.IX Item "-h" -.Ip "\f(CW\*(C`\-\-section\-header\*(C'\fR" 4 -.IX Item "--section-header" -.Ip "\f(CW\*(C`\-\-header\*(C'\fR" 4 -.IX Item "--header" -Display summary information from the section headers of the -object file. -.Sp -File segments may be relocated to nonstandard addresses, for example by -using the \fB\-Ttext\fR, \fB\-Tdata\fR, or \fB\-Tbss\fR options to -\&\f(CW\*(C`ld\*(C'\fR. However, some object file formats, such as a.out, do not -store the starting address of the file segments. In those situations, -although \f(CW\*(C`ld\*(C'\fR relocates the sections correctly, using \fBobjdump -\&\-h\fR to list the file section headers cannot show the correct addresses. -Instead, it shows the usual addresses, which are implicit for the -target. -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Print a summary of the options to \f(CW\*(C`objdump\*(C'\fR and exit. -.Ip "\f(CW\*(C`\-i\*(C'\fR" 4 -.IX Item "-i" -.Ip "\f(CW\*(C`\-\-info\*(C'\fR" 4 -.IX Item "--info" -Display a list showing all architectures and object formats available -for specification with \fB\-b\fR or \fB\-m\fR. -.Ip "\f(CW\*(C`\-j \f(CIname\f(CW\*(C'\fR" 4 -.IX Item "-j name" -.Ip "\f(CW\*(C`\-\-section=\f(CIname\f(CW\*(C'\fR" 4 -.IX Item "--section=name" -Display information only for section \fIname\fR. -.Ip "\f(CW\*(C`\-l\*(C'\fR" 4 -.IX Item "-l" -.Ip "\f(CW\*(C`\-\-line\-numbers\*(C'\fR" 4 -.IX Item "--line-numbers" -Label the display (using debugging information) with the filename and -source line numbers corresponding to the object code or relocs shown. -Only useful with \fB\-d\fR, \fB\-D\fR, or \fB\-r\fR. -.Ip "\f(CW\*(C`\-m \f(CImachine\f(CW\*(C'\fR" 4 -.IX Item "-m machine" -.Ip "\f(CW\*(C`\-\-architecture=\f(CImachine\f(CW\*(C'\fR" 4 -.IX Item "--architecture=machine" -Specify the architecture to use when disassembling object files. This -can be useful when disassembling object files which do not describe -architecture information, such as S-records. You can list the available -architectures with the \fB\-i\fR option. -.Ip "\f(CW\*(C`\-M \f(CIoptions\f(CW\*(C'\fR" 4 -.IX Item "-M options" -.Ip "\f(CW\*(C`\-\-disassembler\-options=\f(CIoptions\f(CW\*(C'\fR" 4 -.IX Item "--disassembler-options=options" -Pass target specific information to the disassembler. Only supported on -some targets. -.Sp -If the target is an \s-1ARM\s0 architecture then this switch can be used to -select which register name set is used during disassembler. Specifying -\&\fB\-M reg-name-std\fR (the default) will select the register names as -used in \s-1ARM\s0's instruction set documentation, but with register 13 called -\&'sp', register 14 called 'lr' and register 15 called 'pc'. Specifying -\&\fB\-M reg-names-apcs\fR will select the name set used by the \s-1ARM\s0 -Procedure Call Standard, whilst specifying \fB\-M reg-names-raw\fR will -just use \fBr\fR followed by the register number. -.Sp -There are also two variants on the \s-1APCS\s0 register naming scheme enabled -by \fB\-M reg-names-atpcs\fR and \fB\-M reg-names-special-atpcs\fR which -use the ARM/Thumb Procedure Call Standard naming conventions. (Eiuther -with the normal register name sor the special register names). -.Sp -This option can also be used for \s-1ARM\s0 architectures to force the -disassembler to interpret all instructions as \s-1THUMB\s0 instructions by -using the switch \fB\*(--disassembler-options=force-thumb\fR. This can be -useful when attempting to disassemble thumb code produced by other -compilers. -.Ip "\f(CW\*(C`\-p\*(C'\fR" 4 -.IX Item "-p" -.Ip "\f(CW\*(C`\-\-private\-headers\*(C'\fR" 4 -.IX Item "--private-headers" -Print information that is specific to the object file format. The exact -information printed depends upon the object file format. For some -object file formats, no additional information is printed. -.Ip "\f(CW\*(C`\-r\*(C'\fR" 4 -.IX Item "-r" -.Ip "\f(CW\*(C`\-\-reloc\*(C'\fR" 4 -.IX Item "--reloc" -Print the relocation entries of the file. If used with \fB\-d\fR or -\&\fB\-D\fR, the relocations are printed interspersed with the -disassembly. -.Ip "\f(CW\*(C`\-R\*(C'\fR" 4 -.IX Item "-R" -.Ip "\f(CW\*(C`\-\-dynamic\-reloc\*(C'\fR" 4 -.IX Item "--dynamic-reloc" -Print the dynamic relocation entries of the file. This is only -meaningful for dynamic objects, such as certain types of shared -libraries. -.Ip "\f(CW\*(C`\-s\*(C'\fR" 4 -.IX Item "-s" -.Ip "\f(CW\*(C`\-\-full\-contents\*(C'\fR" 4 -.IX Item "--full-contents" -Display the full contents of any sections requested. -.Ip "\f(CW\*(C`\-S\*(C'\fR" 4 -.IX Item "-S" -.Ip "\f(CW\*(C`\-\-source\*(C'\fR" 4 -.IX Item "--source" -Display source code intermixed with disassembly, if possible. Implies -\&\fB\-d\fR. -.Ip "\f(CW\*(C`\-\-show\-raw\-insn\*(C'\fR" 4 -.IX Item "--show-raw-insn" -When disassembling instructions, print the instruction in hex as well as -in symbolic form. This is the default except when -\&\f(CW\*(C`\-\-prefix\-addresses\*(C'\fR is used. -.Ip "\f(CW\*(C`\-\-no\-show\-raw\-insn\*(C'\fR" 4 -.IX Item "--no-show-raw-insn" -When disassembling instructions, do not print the instruction bytes. -This is the default when \f(CW\*(C`\-\-prefix\-addresses\*(C'\fR is used. -.Ip "\f(CW\*(C`\-G\*(C'\fR" 4 -.IX Item "-G" -.Ip "\f(CW\*(C`\-\-stabs\*(C'\fR" 4 -.IX Item "--stabs" -Display the full contents of any sections requested. Display the -contents of the .stab and .stab.index and .stab.excl sections from an -\&\s-1ELF\s0 file. This is only useful on systems (such as Solaris 2.0) in which -\&\f(CW\*(C`.stab\*(C'\fR debugging symbol-table entries are carried in an \s-1ELF\s0 -section. In most other file formats, debugging symbol-table entries are -interleaved with linkage symbols, and are visible in the \fB\*(--syms\fR -output. -.Ip "\f(CW\*(C`\-\-start\-address=\f(CIaddress\f(CW\*(C'\fR" 4 -.IX Item "--start-address=address" -Start displaying data at the specified address. This affects the output -of the \f(CW\*(C`\-d\*(C'\fR, \f(CW\*(C`\-r\*(C'\fR and \f(CW\*(C`\-s\*(C'\fR options. -.Ip "\f(CW\*(C`\-\-stop\-address=\f(CIaddress\f(CW\*(C'\fR" 4 -.IX Item "--stop-address=address" -Stop displaying data at the specified address. This affects the output -of the \f(CW\*(C`\-d\*(C'\fR, \f(CW\*(C`\-r\*(C'\fR and \f(CW\*(C`\-s\*(C'\fR options. -.Ip "\f(CW\*(C`\-t\*(C'\fR" 4 -.IX Item "-t" -.Ip "\f(CW\*(C`\-\-syms\*(C'\fR" 4 -.IX Item "--syms" -Print the symbol table entries of the file. -This is similar to the information provided by the \fBnm\fR program. -.Ip "\f(CW\*(C`\-T\*(C'\fR" 4 -.IX Item "-T" -.Ip "\f(CW\*(C`\-\-dynamic\-syms\*(C'\fR" 4 -.IX Item "--dynamic-syms" -Print the dynamic symbol table entries of the file. This is only -meaningful for dynamic objects, such as certain types of shared -libraries. This is similar to the information provided by the \fBnm\fR -program when given the \fB\-D\fR (\fB\*(--dynamic\fR) option. -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Print the version number of \f(CW\*(C`objdump\*(C'\fR and exit. -.Ip "\f(CW\*(C`\-x\*(C'\fR" 4 -.IX Item "-x" -.Ip "\f(CW\*(C`\-\-all\-header\*(C'\fR" 4 -.IX Item "--all-header" -Display all available header information, including the symbol table and -relocation entries. Using \fB\-x\fR is equivalent to specifying all of -\&\fB\-a \-f \-h \-r \-t\fR. -.Ip "\f(CW\*(C`\-w\*(C'\fR" 4 -.IX Item "-w" -.Ip "\f(CW\*(C`\-\-wide\*(C'\fR" 4 -.IX Item "--wide" -Format some lines for output devices that have more than 80 columns. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -\&\fInm\fR\|(1), \fIreadelf\fR\|(1), and the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/po/binutils.pot b/binutils/po/binutils.pot index 9acd344e52..bb6f8ff403 100644 --- a/binutils/po/binutils.pot +++ b/binutils/po/binutils.pot @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2001-05-30 12:04+0100\n" +"POT-Creation-Date: 2001-06-13 12:52+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -185,7 +185,7 @@ msgstr "" msgid "internal error -- this option not implemented" msgstr "" -#: ar.c:824 ar.c:876 ar.c:1322 objcopy.c:1266 +#: ar.c:824 ar.c:876 ar.c:1322 objcopy.c:1282 #, c-format msgid "internal stat error on %s" msgstr "" @@ -1616,167 +1616,172 @@ msgstr "" msgid "supported flags: %s" msgstr "" -#: objcopy.c:556 objcopy.c:2082 +#: objcopy.c:558 objcopy.c:2098 #, c-format msgid "cannot stat: %s: %s" msgstr "" -#: objcopy.c:563 objcopy.c:2100 +#: objcopy.c:565 objcopy.c:2116 #, c-format msgid "cannot open: %s: %s" msgstr "" -#: objcopy.c:566 objcopy.c:2104 +#: objcopy.c:568 objcopy.c:2120 #, c-format msgid "%s: fread failed" msgstr "" -#: objcopy.c:846 +#: objcopy.c:641 +#, c-format +msgid "Ignoring rubbish found on line %d of %s" +msgstr "" + +#: objcopy.c:862 #, c-format msgid "%s: Multiple redefinition of symbol \"%s\"" msgstr "" -#: objcopy.c:853 +#: objcopy.c:869 #, c-format msgid "%s: Symbol \"%s\" is target of more than one redefinition" msgstr "" -#: objcopy.c:906 +#: objcopy.c:922 msgid "Unable to change endianness of input file(s)" msgstr "" -#: objcopy.c:914 +#: objcopy.c:930 #, c-format msgid "copy from %s(%s) to %s(%s)\n" msgstr "" -#: objcopy.c:933 +#: objcopy.c:949 #, c-format msgid "Warning: Output file cannot represent architecture %s" msgstr "" -#: objcopy.c:960 +#: objcopy.c:976 #, c-format msgid "can't create section `%s': %s" msgstr "" -#: objcopy.c:1046 +#: objcopy.c:1062 #, c-format msgid "Can't fill gap after %s: %s" msgstr "" -#: objcopy.c:1071 +#: objcopy.c:1087 #, c-format msgid "Can't add padding to %s: %s" msgstr "" -#: objcopy.c:1210 +#: objcopy.c:1226 #, c-format msgid "%s: error copying private BFD data: %s" msgstr "" -#: objcopy.c:1244 +#: objcopy.c:1260 #, c-format msgid "cannot mkdir %s for archive copying (error: %s)" msgstr "" -#: objcopy.c:1433 +#: objcopy.c:1449 msgid "making" msgstr "" -#: objcopy.c:1442 +#: objcopy.c:1458 msgid "size" msgstr "" -#: objcopy.c:1456 +#: objcopy.c:1472 msgid "vma" msgstr "" -#: objcopy.c:1482 +#: objcopy.c:1498 msgid "alignment" msgstr "" -#: objcopy.c:1491 +#: objcopy.c:1507 msgid "flags" msgstr "" -#: objcopy.c:1505 +#: objcopy.c:1521 msgid "private data" msgstr "" -#: objcopy.c:1513 +#: objcopy.c:1529 #, c-format msgid "%s: section `%s': error in %s: %s" msgstr "" -#: objcopy.c:1787 +#: objcopy.c:1803 #, c-format msgid "%s: can't create debugging section: %s" msgstr "" -#: objcopy.c:1802 +#: objcopy.c:1818 #, c-format msgid "%s: can't set debugging section contents: %s" msgstr "" -#: objcopy.c:1811 +#: objcopy.c:1827 #, c-format msgid "%s: don't know how to write debugging information for %s" msgstr "" -#: objcopy.c:1917 +#: objcopy.c:1933 #, c-format msgid "%s: cannot stat: %s" msgstr "" -#: objcopy.c:1968 +#: objcopy.c:1984 msgid "byte number must be non-negative" msgstr "" -#: objcopy.c:1978 +#: objcopy.c:1994 msgid "interleave must be positive" msgstr "" -#: objcopy.c:1998 objcopy.c:2006 +#: objcopy.c:2014 objcopy.c:2022 #, c-format msgid "%s both copied and removed" msgstr "" -#: objcopy.c:2079 objcopy.c:2149 objcopy.c:2250 objcopy.c:2278 +#: objcopy.c:2095 objcopy.c:2165 objcopy.c:2266 objcopy.c:2294 #, c-format msgid "bad format for %s" msgstr "" -#: objcopy.c:2218 +#: objcopy.c:2234 #, c-format msgid "Warning: truncating gap-fill from 0x%s to 0x%x" msgstr "" -#: objcopy.c:2340 +#: objcopy.c:2356 msgid "byte number must be less than interleave" msgstr "" -#: objcopy.c:2367 +#: objcopy.c:2383 #, c-format msgid "architecture %s unknown" msgstr "" -#: objcopy.c:2371 +#: objcopy.c:2387 msgid "" "Warning: input target 'binary' required for binary architecture parameter." msgstr "" -#: objcopy.c:2372 +#: objcopy.c:2388 #, c-format msgid " Argument %s ignored" msgstr "" -#: objcopy.c:2378 +#: objcopy.c:2394 #, c-format msgid "Cannot stat: %s: %s" msgstr "" -#: objcopy.c:2417 objcopy.c:2431 +#: objcopy.c:2433 objcopy.c:2447 #, c-format msgid "%s %s%c0x%s never used" msgstr "" diff --git a/binutils/ranlib.1 b/binutils/ranlib.1 deleted file mode 100644 index 93fbd30de4..0000000000 --- a/binutils/ranlib.1 +++ /dev/null @@ -1,182 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:28 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "RANLIB.1 1" -.TH RANLIB.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -ranlib \- generate index to archive. -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -ranlib [\-vV] \fIarchive\fR -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -\&\f(CW\*(C`ranlib\*(C'\fR generates an index to the contents of an archive and -stores it in the archive. The index lists each symbol defined by a -member of an archive that is a relocatable object file. -.PP -You may use \fBnm \-s\fR or \fBnm \-\-print-armap\fR to list this index. -.PP -An archive with such an index speeds up linking to the library and -allows routines in the library to call each other without regard to -their placement in the archive. -.PP -The \s-1GNU\s0 \f(CW\*(C`ranlib\*(C'\fR program is another form of \s-1GNU\s0 \f(CW\*(C`ar\*(C'\fR; running -\&\f(CW\*(C`ranlib\*(C'\fR is completely equivalent to executing \fBar \-s\fR. -.SH "OPTIONS" -.IX Header "OPTIONS" -.Ip "\f(CW\*(C`\-v\*(C'\fR" 4 -.IX Item "-v" -.Ip "\f(CW\*(C`\-V\*(C'\fR" 4 -.IX Item "-V" -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Show the version number of \f(CW\*(C`ranlib\*(C'\fR. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -\&\fIar\fR\|(1), \fInm\fR\|(1), and the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/readelf.1 b/binutils/readelf.1 deleted file mode 100644 index bcef9862ba..0000000000 --- a/binutils/readelf.1 +++ /dev/null @@ -1,291 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:29 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "READELF.1 1" -.TH READELF.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -readelf \- Displays information about \s-1ELF\s0 files. -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -readelf [ \-a | \-\-all ] - [ \-h | \-\-file-header] - [ \-l | \-\-program-headers | \-\-segments] - [ \-S | \-\-section-headers | \-\-sections] - [ \-e | \-\-headers] - [ \-s | \-\-syms | \-\-symbols] - [ \-n | \-\-notes] - [ \-r | \-\-relocs] - [ \-u | \-\-unwind] - [ \-d | \-\-dynamic] - [ \-V | \-\-version-info] - [ \-D | \-\-use-dynamic] - [ \-x <number> | \-\-hex-dump=<number>] - [ \-w[liaprf] | \-\-debug-dump[=info,=line,=abbrev,=pubnames,=ranges,=frames]] - [ \-\-histogram] - [ \-v | \-\-version] - [ \-H | \-\-help] - \fIelffile\fR... -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -\&\f(CW\*(C`readelf\*(C'\fR displays information about one or more \s-1ELF\s0 format object -files. The options control what particular information to display. -.PP -\&\fIelffile\fR... are the object files to be examined. At the -moment, \f(CW\*(C`readelf\*(C'\fR does not support examining archives, nor does it -support examing 64 bit \s-1ELF\s0 files. -.SH "OPTIONS" -.IX Header "OPTIONS" -The long and short forms of options, shown here as alternatives, are -equivalent. At least one option besides \fB\-v\fR or \fB\-H\fR must be -given. -.Ip "\f(CW\*(C`\-a\*(C'\fR" 4 -.IX Item "-a" -.Ip "\f(CW\*(C`\-\-all\*(C'\fR" 4 -.IX Item "--all" -Equivalent to specifiying \fB\*(--file-header\fR, -\&\fB\*(--program-headers\fR, \fB\*(--sections\fR, \fB\*(--symbols\fR, -\&\fB\*(--relocs\fR, \fB\*(--dynamic\fR, \fB\*(--notes\fR and -\&\fB\*(--version-info\fR. -.Ip "\f(CW\*(C`\-h\*(C'\fR" 4 -.IX Item "-h" -.Ip "\f(CW\*(C`\-\-file\-header\*(C'\fR" 4 -.IX Item "--file-header" -Displays the information contained in the \s-1ELF\s0 header at the start of the -file. -.Ip "\f(CW\*(C`\-l\*(C'\fR" 4 -.IX Item "-l" -.Ip "\f(CW\*(C`\-\-program\-headers\*(C'\fR" 4 -.IX Item "--program-headers" -.Ip "\f(CW\*(C`\-\-segments\*(C'\fR" 4 -.IX Item "--segments" -Displays the information contained in the file's segment headers, if it -has any. -.Ip "\f(CW\*(C`\-S\*(C'\fR" 4 -.IX Item "-S" -.Ip "\f(CW\*(C`\-\-sections\*(C'\fR" 4 -.IX Item "--sections" -.Ip "\f(CW\*(C`\-\-section\-headers\*(C'\fR" 4 -.IX Item "--section-headers" -Displays the information contained in the file's section headers, if it -has any. -.Ip "\f(CW\*(C`\-s\*(C'\fR" 4 -.IX Item "-s" -.Ip "\f(CW\*(C`\-\-symbols\*(C'\fR" 4 -.IX Item "--symbols" -.Ip "\f(CW\*(C`\-\-syms\*(C'\fR" 4 -.IX Item "--syms" -Displays the entries in symbol table section of the file, if it has one. -.Ip "\f(CW\*(C`\-e\*(C'\fR" 4 -.IX Item "-e" -.Ip "\f(CW\*(C`\-\-headers\*(C'\fR" 4 -.IX Item "--headers" -Display all the headers in the file. Equivalent to \fB\-h \-l \-S\fR. -.Ip "\f(CW\*(C`\-n\*(C'\fR" 4 -.IX Item "-n" -.Ip "\f(CW\*(C`\-\-notes\*(C'\fR" 4 -.IX Item "--notes" -Displays the contents of the \s-1NOTE\s0 segment, if it exists. -.Ip "\f(CW\*(C`\-r\*(C'\fR" 4 -.IX Item "-r" -.Ip "\f(CW\*(C`\-\-relocs\*(C'\fR" 4 -.IX Item "--relocs" -Displays the contents of the file's relocation section, if it has one. -.Ip "\f(CW\*(C`\-u\*(C'\fR" 4 -.IX Item "-u" -.Ip "\f(CW\*(C`\-\-unwind\*(C'\fR" 4 -.IX Item "--unwind" -Displays the contents of the file's unwind section, if it has one. Only -the unwind sections for \s-1IA64\s0 \s-1ELF\s0 files are currently supported. -.Ip "\f(CW\*(C`\-d\*(C'\fR" 4 -.IX Item "-d" -.Ip "\f(CW\*(C`\-\-dynamic\*(C'\fR" 4 -.IX Item "--dynamic" -Displays the contents of the file's dynamic section, if it has one. -.Ip "\f(CW\*(C`\-V\*(C'\fR" 4 -.IX Item "-V" -.Ip "\f(CW\*(C`\-\-version\-info\*(C'\fR" 4 -.IX Item "--version-info" -Displays the contents of the version sections in the file, it they -exist. -.Ip "\f(CW\*(C`\-D\*(C'\fR" 4 -.IX Item "-D" -.Ip "\f(CW\*(C`\-\-use\-dynamic\*(C'\fR" 4 -.IX Item "--use-dynamic" -When displaying symbols, this option makes \f(CW\*(C`readelf\*(C'\fR use the -symbol table in the file's dynamic section, rather than the one in the -symbols section. -.Ip "\f(CW\*(C`\-x <number>\*(C'\fR" 4 -.IX Item "-x <number>" -.Ip "\f(CW\*(C`\-\-hex\-dump=<number>\*(C'\fR" 4 -.IX Item "--hex-dump=<number>" -Displays the contents of the indicated section as a hexadecimal dump. -.Ip "\f(CW\*(C`\-w[liaprf]\*(C'\fR" 4 -.IX Item "-w[liaprf]" -.Ip "\f(CW\*(C`\-\-debug\-dump[=line,=info,=abbrev,=pubnames,=ranges,=frames]\*(C'\fR" 4 -.IX Item "--debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=frames]" -Displays the contents of the debug sections in the file, if any are -present. If one of the optional letters or words follows the switch -then only data found in those specific sections will be dumped. -.Ip "\f(CW\*(C`\-\-histogram\*(C'\fR" 4 -.IX Item "--histogram" -Display a histogram of bucket list lengths when displaying the contents -of the symbol tables. -.Ip "\f(CW\*(C`\-v\*(C'\fR" 4 -.IX Item "-v" -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Display the version number of readelf. -.Ip "\f(CW\*(C`\-H\*(C'\fR" 4 -.IX Item "-H" -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Display the command line options understood by \f(CW\*(C`readelf\*(C'\fR. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -\&\fIobjdump\fR\|(1), and the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/readelf.c b/binutils/readelf.c index 60e7eea8fc..39e90d142c 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -79,23 +79,23 @@ #include "bucomm.h" #include "getopt.h" -char * program_name = "readelf"; -unsigned int dynamic_addr; +char * program_name = "readelf"; +unsigned int dynamic_addr; bfd_size_type dynamic_size; -unsigned int rela_addr; -unsigned int rela_size; -char * dynamic_strings; +unsigned int rela_addr; +unsigned int rela_size; +char * dynamic_strings; char * string_table; unsigned long string_table_length; unsigned long num_dynamic_syms; Elf_Internal_Sym * dynamic_symbols; Elf_Internal_Syminfo * dynamic_syminfo; -unsigned long dynamic_syminfo_offset; +unsigned long dynamic_syminfo_offset; unsigned int dynamic_syminfo_nent; -char program_interpreter [64]; -int dynamic_info[DT_JMPREL + 1]; -int version_info[16]; -int loadaddr = 0; +char program_interpreter [64]; +int dynamic_info[DT_JMPREL + 1]; +int version_info[16]; +int loadaddr = 0; Elf_Internal_Ehdr elf_header; Elf_Internal_Shdr * section_headers; Elf_Internal_Dyn * dynamic_segment; @@ -1259,32 +1259,32 @@ get_machine_name (e_machine) switch (e_machine) { - case EM_NONE: return _("None"); - case EM_M32: return "WE32100"; - case EM_SPARC: return "Sparc"; - case EM_386: return "Intel 80386"; - case EM_68K: return "MC68000"; - case EM_88K: return "MC88000"; - case EM_486: return "Intel 80486"; - case EM_860: return "Intel 80860"; - case EM_MIPS: return "MIPS R3000"; - case EM_S370: return "IBM System/370"; + case EM_NONE: return _("None"); + case EM_M32: return "WE32100"; + case EM_SPARC: return "Sparc"; + case EM_386: return "Intel 80386"; + case EM_68K: return "MC68000"; + case EM_88K: return "MC88000"; + case EM_486: return "Intel 80486"; + case EM_860: return "Intel 80860"; + case EM_MIPS: return "MIPS R3000"; + case EM_S370: return "IBM System/370"; case EM_MIPS_RS3_LE: return "MIPS R4000 big-endian"; case EM_OLD_SPARCV9: return "Sparc v9 (old)"; - case EM_PARISC: return "HPPA"; + case EM_PARISC: return "HPPA"; case EM_PPC_OLD: return "Power PC (old)"; case EM_SPARC32PLUS: return "Sparc v8+" ; - case EM_960: return "Intel 90860"; - case EM_PPC: return "PowerPC"; - case EM_V800: return "NEC V800"; - case EM_FR20: return "Fujitsu FR20"; - case EM_RH32: return "TRW RH32"; + case EM_960: return "Intel 90860"; + case EM_PPC: return "PowerPC"; + case EM_V800: return "NEC V800"; + case EM_FR20: return "Fujitsu FR20"; + case EM_RH32: return "TRW RH32"; case EM_MCORE: return "MCORE"; case EM_ARM: return "ARM"; case EM_OLD_ALPHA: return "Digital Alpha (old)"; case EM_SH: return "Hitachi SH"; - case EM_SPARCV9: return "Sparc v9"; - case EM_TRICORE: return "Siemens Tricore"; + case EM_SPARCV9: return "Sparc v9"; + case EM_TRICORE: return "Siemens Tricore"; case EM_ARC: return "ARC"; case EM_H8_300: return "Hitachi H8/300"; case EM_H8_300H: return "Hitachi H8/300H"; @@ -1294,7 +1294,7 @@ get_machine_name (e_machine) case EM_MIPS_X: return "Stanford MIPS-X"; case EM_COLDFIRE: return "Motorola Coldfire"; case EM_68HC12: return "Motorola M68HC12"; - case EM_ALPHA: return "Alpha"; + case EM_ALPHA: return "Alpha"; case EM_CYGNUS_D10V: return "d10v"; case EM_CYGNUS_D30V: return "d30v"; case EM_CYGNUS_ARC: return "ARC"; @@ -1324,12 +1324,12 @@ get_machine_name (e_machine) case EM_VAX: return "Digital VAX"; case EM_AVR: return "Atmel AVR 8-bit microcontroller"; case EM_CRIS: return "Axis Communications 32-bit embedded processor"; - case EM_JAVELIN: return "Infineon Technologies 32-bit embedded cpu"; - case EM_FIREPATH: return "Element 14 64-bit DSP processor"; - case EM_ZSP: return "LSI Logic's 16-bit DSP processor"; + case EM_JAVELIN: return "Infineon Technologies 32-bit embedded cpu"; + case EM_FIREPATH: return "Element 14 64-bit DSP processor"; + case EM_ZSP: return "LSI Logic's 16-bit DSP processor"; case EM_MMIX: return "Donald Knuth's educational 64-bit processor"; - case EM_HUANY: return "Harvard Universitys's machine-independent object format"; - case EM_PRISM: return "SiTera Prism"; + case EM_HUANY: return "Harvard Universitys's machine-independent object format"; + case EM_PRISM: return "SiTera Prism"; case EM_X86_64: return "Advanced Micro Devices X86-64"; case EM_S390_OLD: case EM_S390: return "IBM S/390"; diff --git a/binutils/size.1 b/binutils/size.1 deleted file mode 100644 index a8a30b0deb..0000000000 --- a/binutils/size.1 +++ /dev/null @@ -1,242 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:29 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "SIZE.1 1" -.TH SIZE.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -size \- list section sizes and total size. -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -size [ \-A | \-B | \-\-format=\fIcompatibility\fR ] - [ \-\-help ] [ \-d | \-o | \-x | \-\-radix=\fInumber\fR ] - [ \-\-target=\fIbfdname\fR ] [ \-V | \-\-version ] - [ \fIobjfile\fR... ] -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -The \s-1GNU\s0 \f(CW\*(C`size\*(C'\fR utility lists the section sizes\-\-\-and the total -size\-\-\-for each of the object or archive files \fIobjfile\fR in its -argument list. By default, one line of output is generated for each -object file or each module in an archive. -.PP -\&\fIobjfile\fR... are the object files to be examined. -If none are specified, the file \f(CW\*(C`a.out\*(C'\fR will be used. -.SH "OPTIONS" -.IX Header "OPTIONS" -The command line options have the following meanings: -.Ip "\f(CW\*(C`\-A\*(C'\fR" 4 -.IX Item "-A" -.Ip "\f(CW\*(C`\-B\*(C'\fR" 4 -.IX Item "-B" -.Ip "\f(CW\*(C`\-\-format=\f(CIcompatibility\f(CW\*(C'\fR" 4 -.IX Item "--format=compatibility" -Using one of these options, you can choose whether the output from \s-1GNU\s0 -\&\f(CW\*(C`size\*(C'\fR resembles output from System V \f(CW\*(C`size\*(C'\fR (using \fB\-A\fR, -or \fB\*(--format=sysv\fR), or Berkeley \f(CW\*(C`size\*(C'\fR (using \fB\-B\fR, or -\&\fB\*(--format=berkeley\fR). The default is the one-line format similar to -Berkeley's. -.Sp -Here is an example of the Berkeley (default) format of output from -\&\f(CW\*(C`size\*(C'\fR: -.Sp -.Vb 4 -\& $ size --format=Berkeley ranlib size -\& text data bss dec hex filename -\& 294880 81920 11592 388392 5ed28 ranlib -\& 294880 81920 11888 388688 5ee50 size -.Ve -This is the same data, but displayed closer to System V conventions: -.Sp -.Vb 7 -\& $ size --format=SysV ranlib size -\& ranlib : -\& section size addr -\& .text 294880 8192 -\& .data 81920 303104 -\& .bss 11592 385024 -\& Total 388392 -.Ve -.Vb 6 -\& size : -\& section size addr -\& .text 294880 8192 -\& .data 81920 303104 -\& .bss 11888 385024 -\& Total 388688 -.Ve -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Show a summary of acceptable arguments and options. -.Ip "\f(CW\*(C`\-d\*(C'\fR" 4 -.IX Item "-d" -.Ip "\f(CW\*(C`\-o\*(C'\fR" 4 -.IX Item "-o" -.Ip "\f(CW\*(C`\-x\*(C'\fR" 4 -.IX Item "-x" -.Ip "\f(CW\*(C`\-\-radix=\f(CInumber\f(CW\*(C'\fR" 4 -.IX Item "--radix=number" -Using one of these options, you can control whether the size of each -section is given in decimal (\fB\-d\fR, or \fB\*(--radix=10\fR); octal -(\fB\-o\fR, or \fB\*(--radix=8\fR); or hexadecimal (\fB\-x\fR, or -\&\fB\*(--radix=16\fR). In \fB\*(--radix=\fR\fInumber\fR, only the three -values (8, 10, 16) are supported. The total size is always given in two -radices; decimal and hexadecimal for \fB\-d\fR or \fB\-x\fR output, or -octal and hexadecimal if you're using \fB\-o\fR. -.Ip "\f(CW\*(C`\-\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--target=bfdname" -Specify that the object-code format for \fIobjfile\fR is -\&\fIbfdname\fR. This option may not be necessary; \f(CW\*(C`size\*(C'\fR can -automatically recognize many formats. -.Ip "\f(CW\*(C`\-V\*(C'\fR" 4 -.IX Item "-V" -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Display the version number of \f(CW\*(C`size\*(C'\fR. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -\&\fIar\fR\|(1), \fIobjdump\fR\|(1), \fIreadelf\fR\|(1), and the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/strings.1 b/binutils/strings.1 deleted file mode 100644 index 8fccf6544c..0000000000 --- a/binutils/strings.1 +++ /dev/null @@ -1,220 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:29 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "STRINGS.1 1" -.TH STRINGS.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -strings \- print the strings of printable characters in files. -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -strings [\-afov] [-\fImin-len\fR] [\-n \fImin-len\fR] [\-t \fIradix\fR] [\-] - [\-\-all] [\-\-print-file-name] [\-\-bytes=\fImin-len\fR] - [\-\-radix=\fIradix\fR] [\-\-target=\fIbfdname\fR] - [\-\-help] [\-\-version] \fIfile\fR... -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -For each \fIfile\fR given, \s-1GNU\s0 \f(CW\*(C`strings\*(C'\fR prints the printable -character sequences that are at least 4 characters long (or the number -given with the options below) and are followed by an unprintable -character. By default, it only prints the strings from the initialized -and loaded sections of object files; for other types of files, it prints -the strings from the whole file. -.PP -\&\f(CW\*(C`strings\*(C'\fR is mainly useful for determining the contents of non-text -files. -.SH "OPTIONS" -.IX Header "OPTIONS" -.Ip "\f(CW\*(C`\-a\*(C'\fR" 4 -.IX Item "-a" -.Ip "\f(CW\*(C`\-\-all\*(C'\fR" 4 -.IX Item "--all" -.Ip "\f(CW\*(C`\-\*(C'\fR" 4 -.IX Item "-" -Do not scan only the initialized and loaded sections of object files; -scan the whole files. -.Ip "\f(CW\*(C`\-f\*(C'\fR" 4 -.IX Item "-f" -.Ip "\f(CW\*(C`\-\-print\-file\-name\*(C'\fR" 4 -.IX Item "--print-file-name" -Print the name of the file before each string. -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Print a summary of the program usage on the standard output and exit. -.Ip "\f(CW\*(C`\-\f(CImin\-len\f(CW\*(C'\fR" 4 -.IX Item "-min-len" -.Ip "\f(CW\*(C`\-n \f(CImin\-len\f(CW\*(C'\fR" 4 -.IX Item "-n min-len" -.Ip "\f(CW\*(C`\-\-bytes=\f(CImin\-len\f(CW\*(C'\fR" 4 -.IX Item "--bytes=min-len" -Print sequences of characters that are at least \fImin-len\fR characters -long, instead of the default 4. -.Ip "\f(CW\*(C`\-o\*(C'\fR" 4 -.IX Item "-o" -Like \fB\-t o\fR. Some other versions of \f(CW\*(C`strings\*(C'\fR have \fB\-o\fR -act like \fB\-t d\fR instead. Since we can not be compatible with both -ways, we simply chose one. -.Ip "\f(CW\*(C`\-t \f(CIradix\f(CW\*(C'\fR" 4 -.IX Item "-t radix" -.Ip "\f(CW\*(C`\-\-radix=\f(CIradix\f(CW\*(C'\fR" 4 -.IX Item "--radix=radix" -Print the offset within the file before each string. The single -character argument specifies the radix of the offset\-\--\fBo\fR for -octal, \fBx\fR for hexadecimal, or \fBd\fR for decimal. -.Ip "\f(CW\*(C`\-\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--target=bfdname" -Specify an object code format other than your system's default format. -.Ip "\f(CW\*(C`\-v\*(C'\fR" 4 -.IX Item "-v" -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Print the program version number on the standard output and exit. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -\&\fIar\fR\|(1), \fInm\fR\|(1), \fIobjdump\fR\|(1), \fIranlib\fR\|(1), \fIreadelf\fR\|(1) -and the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/strip.1 b/binutils/strip.1 deleted file mode 100644 index b43db6273d..0000000000 --- a/binutils/strip.1 +++ /dev/null @@ -1,266 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:29 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "STRIP.1 1" -.TH STRIP.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -strip \- Discard symbols from object files. -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -strip [ \-F \fIbfdname\fR | \-\-target=\fIbfdname\fR ] - [ \-I \fIbfdname\fR | \-\-input-target=\fIbfdname\fR ] - [ \-O \fIbfdname\fR | \-\-output-target=\fIbfdname\fR ] - [ \-s | \-\-strip-all ] [ \-S | \-g | \-\-strip-debug ] - [ \-K \fIsymbolname\fR | \-\-keep-symbol=\fIsymbolname\fR ] - [ \-N \fIsymbolname\fR | \-\-strip-symbol=\fIsymbolname\fR ] - [ \-x | \-\-discard-all ] [ \-X | \-\-discard-locals ] - [ \-R \fIsectionname\fR | \-\-remove-section=\fIsectionname\fR ] - [ \-o \fIfile\fR ] [ \-p | \-\-preserve-dates ] - [ \-v | \-\-verbose ] [ \-V | \-\-version ] [ \-\-help ] - \fIobjfile\fR... -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -\&\s-1GNU\s0 \f(CW\*(C`strip\*(C'\fR discards all symbols from object files -\&\fIobjfile\fR. The list of object files may include archives. -At least one object file must be given. -.PP -\&\f(CW\*(C`strip\*(C'\fR modifies the files named in its argument, -rather than writing modified copies under different names. -.SH "OPTIONS" -.IX Header "OPTIONS" -.Ip "\f(CW\*(C`\-F \f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "-F bfdname" -.Ip "\f(CW\*(C`\-\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--target=bfdname" -Treat the original \fIobjfile\fR as a file with the object -code format \fIbfdname\fR, and rewrite it in the same format. -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Show a summary of the options to \f(CW\*(C`strip\*(C'\fR and exit. -.Ip "\f(CW\*(C`\-I \f(CIbfdname\f(CW \*(C'\fR" 4 -.IX Item "-I bfdname " -.Ip "\f(CW\*(C`\-\-input\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--input-target=bfdname" -Treat the original \fIobjfile\fR as a file with the object -code format \fIbfdname\fR. -.Ip "\f(CW\*(C`\-O \f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "-O bfdname" -.Ip "\f(CW\*(C`\-\-output\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--output-target=bfdname" -Replace \fIobjfile\fR with a file in the output format \fIbfdname\fR. -.Ip "\f(CW\*(C`\-R \f(CIsectionname\f(CW\*(C'\fR" 4 -.IX Item "-R sectionname" -.Ip "\f(CW\*(C`\-\-remove\-section=\f(CIsectionname\f(CW\*(C'\fR" 4 -.IX Item "--remove-section=sectionname" -Remove any section named \fIsectionname\fR from the output file. This -option may be given more than once. Note that using this option -inappropriately may make the output file unusable. -.Ip "\f(CW\*(C`\-s\*(C'\fR" 4 -.IX Item "-s" -.Ip "\f(CW\*(C`\-\-strip\-all\*(C'\fR" 4 -.IX Item "--strip-all" -Remove all symbols. -.Ip "\f(CW\*(C`\-g\*(C'\fR" 4 -.IX Item "-g" -.Ip "\f(CW\*(C`\-S\*(C'\fR" 4 -.IX Item "-S" -.Ip "\f(CW\*(C`\-\-strip\-debug\*(C'\fR" 4 -.IX Item "--strip-debug" -Remove debugging symbols only. -.Ip "\f(CW\*(C`\-\-strip\-unneeded\*(C'\fR" 4 -.IX Item "--strip-unneeded" -Remove all symbols that are not needed for relocation processing. -.Ip "\f(CW\*(C`\-K \f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "-K symbolname" -.Ip "\f(CW\*(C`\-\-keep\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "--keep-symbol=symbolname" -Keep only symbol \fIsymbolname\fR from the source file. This option may -be given more than once. -.Ip "\f(CW\*(C`\-N \f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "-N symbolname" -.Ip "\f(CW\*(C`\-\-strip\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "--strip-symbol=symbolname" -Remove symbol \fIsymbolname\fR from the source file. This option may be -given more than once, and may be combined with strip options other than -\&\f(CW\*(C`\-K\*(C'\fR. -.Ip "\f(CW\*(C`\-o \f(CIfile\f(CW\*(C'\fR" 4 -.IX Item "-o file" -Put the stripped output in \fIfile\fR, rather than replacing the -existing file. When this argument is used, only one \fIobjfile\fR -argument may be specified. -.Ip "\f(CW\*(C`\-p\*(C'\fR" 4 -.IX Item "-p" -.Ip "\f(CW\*(C`\-\-preserve\-dates\*(C'\fR" 4 -.IX Item "--preserve-dates" -Preserve the access and modification dates of the file. -.Ip "\f(CW\*(C`\-x\*(C'\fR" 4 -.IX Item "-x" -.Ip "\f(CW\*(C`\-\-discard\-all\*(C'\fR" 4 -.IX Item "--discard-all" -Remove non-global symbols. -.Ip "\f(CW\*(C`\-X\*(C'\fR" 4 -.IX Item "-X" -.Ip "\f(CW\*(C`\-\-discard\-locals\*(C'\fR" 4 -.IX Item "--discard-locals" -Remove compiler-generated local symbols. -(These usually start with \fBL\fR or \fB.\fR.) -.Ip "\f(CW\*(C`\-V\*(C'\fR" 4 -.IX Item "-V" -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Show the version number for \f(CW\*(C`strip\*(C'\fR. -.Ip "\f(CW\*(C`\-v\*(C'\fR" 4 -.IX Item "-v" -.Ip "\f(CW\*(C`\-\-verbose\*(C'\fR" 4 -.IX Item "--verbose" -Verbose output: list all object files modified. In the case of -archives, \fBstrip \-v\fR lists all members of the archive. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/windres.1 b/binutils/windres.1 deleted file mode 100644 index ac0366ae81..0000000000 --- a/binutils/windres.1 +++ /dev/null @@ -1,291 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:30 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "WINDRES.1 1" -.TH WINDRES.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -windres \- manipulate Windows resources. -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -windres [options] [input-file] [output-file] -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -\&\f(CW\*(C`windres\*(C'\fR reads resources from an input file and copies them into -an output file. Either file may be in one of three formats: -.Ip "\f(CW\*(C`rc\*(C'\fR" 4 -.IX Item "rc" -A text format read by the Resource Compiler. -.Ip "\f(CW\*(C`res\*(C'\fR" 4 -.IX Item "res" -A binary format generated by the Resource Compiler. -.Ip "\f(CW\*(C`coff\*(C'\fR" 4 -.IX Item "coff" -A \s-1COFF\s0 object or executable. -.PP -The exact description of these different formats is available in -documentation from Microsoft. -.PP -When \f(CW\*(C`windres\*(C'\fR converts from the \f(CW\*(C`rc\*(C'\fR format to the \f(CW\*(C`res\*(C'\fR -format, it is acting like the Windows Resource Compiler. When -\&\f(CW\*(C`windres\*(C'\fR converts from the \f(CW\*(C`res\*(C'\fR format to the \f(CW\*(C`coff\*(C'\fR -format, it is acting like the Windows \f(CW\*(C`CVTRES\*(C'\fR program. -.PP -When \f(CW\*(C`windres\*(C'\fR generates an \f(CW\*(C`rc\*(C'\fR file, the output is similar -but not identical to the format expected for the input. When an input -\&\f(CW\*(C`rc\*(C'\fR file refers to an external filename, an output \f(CW\*(C`rc\*(C'\fR file -will instead include the file contents. -.PP -If the input or output format is not specified, \f(CW\*(C`windres\*(C'\fR will -guess based on the file name, or, for the input file, the file contents. -A file with an extension of \fI.rc\fR will be treated as an \f(CW\*(C`rc\*(C'\fR -file, a file with an extension of \fI.res\fR will be treated as a -\&\f(CW\*(C`res\*(C'\fR file, and a file with an extension of \fI.o\fR or -\&\fI.exe\fR will be treated as a \f(CW\*(C`coff\*(C'\fR file. -.PP -If no output file is specified, \f(CW\*(C`windres\*(C'\fR will print the resources -in \f(CW\*(C`rc\*(C'\fR format to standard output. -.PP -The normal use is for you to write an \f(CW\*(C`rc\*(C'\fR file, use \f(CW\*(C`windres\*(C'\fR -to convert it to a \s-1COFF\s0 object file, and then link the \s-1COFF\s0 file into -your application. This will make the resources described in the -\&\f(CW\*(C`rc\*(C'\fR file available to Windows. -.SH "OPTIONS" -.IX Header "OPTIONS" -.Ip "\f(CW\*(C`\-i \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "-i filename" -.Ip "\f(CW\*(C`\-\-input \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--input filename" -The name of the input file. If this option is not used, then -\&\f(CW\*(C`windres\*(C'\fR will use the first non-option argument as the input file -name. If there are no non-option arguments, then \f(CW\*(C`windres\*(C'\fR will -read from standard input. \f(CW\*(C`windres\*(C'\fR can not read a \s-1COFF\s0 file from -standard input. -.Ip "\f(CW\*(C`\-o \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "-o filename" -.Ip "\f(CW\*(C`\-\-output \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--output filename" -The name of the output file. If this option is not used, then -\&\f(CW\*(C`windres\*(C'\fR will use the first non-option argument, after any used -for the input file name, as the output file name. If there is no -non-option argument, then \f(CW\*(C`windres\*(C'\fR will write to standard output. -\&\f(CW\*(C`windres\*(C'\fR can not write a \s-1COFF\s0 file to standard output. -.Ip "\f(CW\*(C`\-I \f(CIformat\f(CW\*(C'\fR" 4 -.IX Item "-I format" -.Ip "\f(CW\*(C`\-\-input\-format \f(CIformat\f(CW\*(C'\fR" 4 -.IX Item "--input-format format" -The input format to read. \fIformat\fR may be \fBres\fR, \fBrc\fR, or -\&\fBcoff\fR. If no input format is specified, \f(CW\*(C`windres\*(C'\fR will -guess, as described above. -.Ip "\f(CW\*(C`\-O \f(CIformat\f(CW\*(C'\fR" 4 -.IX Item "-O format" -.Ip "\f(CW\*(C`\-\-output\-format \f(CIformat\f(CW\*(C'\fR" 4 -.IX Item "--output-format format" -The output format to generate. \fIformat\fR may be \fBres\fR, -\&\fBrc\fR, or \fBcoff\fR. If no output format is specified, -\&\f(CW\*(C`windres\*(C'\fR will guess, as described above. -.Ip "\f(CW\*(C`\-F \f(CItarget\f(CW\*(C'\fR" 4 -.IX Item "-F target" -.Ip "\f(CW\*(C`\-\-target \f(CItarget\f(CW\*(C'\fR" 4 -.IX Item "--target target" -Specify the \s-1BFD\s0 format to use for a \s-1COFF\s0 file as input or output. This -is a \s-1BFD\s0 target name; you can use the \f(CW\*(C`\-\-help\*(C'\fR option to see a list -of supported targets. Normally \f(CW\*(C`windres\*(C'\fR will use the default -format, which is the first one listed by the \f(CW\*(C`\-\-help\*(C'\fR option. -\&\f(CW@ref\fR{Target Selection}. -.Ip "\f(CW\*(C`\-\-preprocessor \f(CIprogram\f(CW\*(C'\fR" 4 -.IX Item "--preprocessor program" -When \f(CW\*(C`windres\*(C'\fR reads an \f(CW\*(C`rc\*(C'\fR file, it runs it through the C -preprocessor first. This option may be used to specify the preprocessor -to use, including any leading arguments. The default preprocessor -argument is \f(CW\*(C`gcc \-E \-xc\-header \-DRC_INVOKED\*(C'\fR. -.Ip "\f(CW\*(C`\-\-include\-dir \f(CIdirectory\f(CW\*(C'\fR" 4 -.IX Item "--include-dir directory" -Specify an include directory to use when reading an \f(CW\*(C`rc\*(C'\fR file. -\&\f(CW\*(C`windres\*(C'\fR will pass this to the preprocessor as an \f(CW\*(C`\-I\*(C'\fR -option. \f(CW\*(C`windres\*(C'\fR will also search this directory when looking for -files named in the \f(CW\*(C`rc\*(C'\fR file. -.Ip "\f(CW\*(C`\-D \f(CItarget\f(CW\*(C'\fR" 4 -.IX Item "-D target" -.Ip "\f(CW\*(C`\-\-define \f(CIsym\f(CW[=\f(CIval\f(CW]\*(C'\fR" 4 -.IX Item "--define sym[=val]" -Specify a \f(CW\*(C`\-D\*(C'\fR option to pass to the preprocessor when reading an -\&\f(CW\*(C`rc\*(C'\fR file. -.Ip "\f(CW\*(C`\-v\*(C'\fR" 4 -.IX Item "-v" -Enable verbose mode. This tells you what the preprocessor is if you -didn't specify one. -.Ip "\f(CW\*(C`\-\-language \f(CIval\f(CW\*(C'\fR" 4 -.IX Item "--language val" -Specify the default language to use when reading an \f(CW\*(C`rc\*(C'\fR file. -\&\fIval\fR should be a hexadecimal language code. The low eight bits are -the language, and the high eight bits are the sublanguage. -.Ip "\f(CW\*(C`\-\-use\-temp\-file\*(C'\fR" 4 -.IX Item "--use-temp-file" -Use a temporary file to instead of using popen to read the output of -the preprocessor. Use this option if the popen implementation is buggy -on the host (eg., certain non-English language versions of Windows 95 and -Windows 98 are known to have buggy popen where the output will instead -go the console). -.Ip "\f(CW\*(C`\-\-no\-use\-temp\-file\*(C'\fR" 4 -.IX Item "--no-use-temp-file" -Use popen, not a temporary file, to read the output of the preprocessor. -This is the default behaviour. -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Prints a usage summary. -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Prints the version number for \f(CW\*(C`windres\*(C'\fR. -.Ip "\f(CW\*(C`\-\-yydebug\*(C'\fR" 4 -.IX Item "--yydebug" -If \f(CW\*(C`windres\*(C'\fR is compiled with \f(CW\*(C`YYDEBUG\*(C'\fR defined as \f(CW\*(C`1\*(C'\fR, -this will turn on parser debugging. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/gas/ChangeLog b/gas/ChangeLog index f7365a852d..a9a0332b94 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2001-06-18 H.J. Lu <hjl@gnu.org> + + * doc/Makefile.am (info): Depend on $(MANS). + (as.1): Remove the prefix `$(srcdir)/'. + * doc/Makefile.in: Regenerated. + + * as.1: Removed. + 2001-06-18 Philip Blundell <philb@gnu.org> * config/tc-arm.c (do_msr): Remove restriction on usage of diff --git a/gas/Makefile.am b/gas/Makefile.am index 52a19a687b..499e9efcef 100644 --- a/gas/Makefile.am +++ b/gas/Makefile.am @@ -435,10 +435,8 @@ stamp-mk.com: vmsconf.sh Makefile $(SHELL) $(srcdir)/../move-if-change new-make.com $(srcdir)/make-gas.com touch stamp-mk.com -EXTRA_DIST = make-gas.com - -DISTSTUFF = make-gas.com m68k-parse.c itbl-parse.c itbl-parse.h itbl-lex.c -diststuff: $(DISTSTUFF) info +EXTRA_DIST = make-gas.com m68k-parse.c itbl-parse.c itbl-parse.h itbl-lex.c +diststuff: $(EXTRA_DIST) info DISTCLEANFILES = targ-cpu.h obj-format.h targ-env.h itbl-cpu.h cgen-desc.h diff --git a/gas/Makefile.in b/gas/Makefile.in index 1de6c50c32..bcce02fe72 100644 --- a/gas/Makefile.in +++ b/gas/Makefile.in @@ -552,9 +552,7 @@ noinst_PROGRAMS = as-new gasp-new noinst_SCRIPTS = $(GDBINIT) EXTRA_SCRIPTS = .gdbinit -EXTRA_DIST = make-gas.com - -DISTSTUFF = make-gas.com m68k-parse.c itbl-parse.c itbl-parse.h itbl-lex.c +EXTRA_DIST = make-gas.com m68k-parse.c itbl-parse.c itbl-parse.h itbl-lex.c DISTCLEANFILES = targ-cpu.h obj-format.h targ-env.h itbl-cpu.h cgen-desc.h @@ -2008,7 +2006,7 @@ configure configure.in gdbinit.in itbl-lex.c itbl-parse.c DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) -TAR = tar +TAR = gtar GZIP_ENV = --best SOURCES = $(itbl_test_SOURCES) $(as_new_SOURCES) $(EXTRA_as_new_SOURCES) $(gasp_new_SOURCES) OBJECTS = $(itbl_test_OBJECTS) $(as_new_OBJECTS) $(gasp_new_OBJECTS) @@ -2407,7 +2405,7 @@ stamp-mk.com: vmsconf.sh Makefile sh $(srcdir)/vmsconf.sh $(GENERIC_OBJS) > new-make.com $(SHELL) $(srcdir)/../move-if-change new-make.com $(srcdir)/make-gas.com touch stamp-mk.com -diststuff: $(DISTSTUFF) info +diststuff: $(EXTRA_DIST) info $(OBJS): @ALL_OBJ_DEPS@ diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c deleted file mode 100644 index 99aff8ef31..0000000000 --- a/gas/config/tc-arm.c +++ /dev/null @@ -1,8897 +0,0 @@ -/* tc-arm.c -- Assemble for the ARM - Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 - Free Software Foundation, Inc. - Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org) - Modified by David Taylor (dtaylor@armltd.co.uk) - - This file is part of GAS, the GNU Assembler. - - GAS is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GAS is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GAS; see the file COPYING. If not, write to the Free - Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ - -#include <ctype.h> -#include <string.h> -#define NO_RELOC 0 -#include "as.h" - -/* Need TARGET_CPU. */ -#include "config.h" -#include "subsegs.h" -#include "obstack.h" -#include "symbols.h" -#include "listing.h" - -#ifdef OBJ_ELF -#include "elf/arm.h" -#include "dwarf2dbg.h" -#endif - -/* Types of processor to assemble for. */ -#define ARM_1 0x00000001 -#define ARM_2 0x00000002 -#define ARM_3 0x00000004 -#define ARM_250 ARM_3 -#define ARM_6 0x00000008 -#define ARM_7 ARM_6 /* Same core instruction set. */ -#define ARM_8 ARM_6 /* Same core instruction set. */ -#define ARM_9 ARM_6 /* Same core instruction set. */ -#define ARM_CPU_MASK 0x0000000f - -/* The following bitmasks control CPU extensions (ARM7 onwards): */ -#define ARM_EXT_LONGMUL 0x00000010 /* Allow long multiplies. */ -#define ARM_EXT_HALFWORD 0x00000020 /* Allow half word loads. */ -#define ARM_EXT_THUMB 0x00000040 /* Allow BX instruction. */ -#define ARM_EXT_V5 0x00000080 /* Allow CLZ, etc. */ -#define ARM_EXT_V5E 0x00000100 /* "El Segundo". */ -#define ARM_EXT_XSCALE 0x00000200 /* Allow MIA etc. */ - -/* Architectures are the sum of the base and extensions. */ -#define ARM_ARCH_V3M ARM_EXT_LONGMUL -#define ARM_ARCH_V4 (ARM_ARCH_V3M | ARM_EXT_HALFWORD) -#define ARM_ARCH_V4T (ARM_ARCH_V4 | ARM_EXT_THUMB) -#define ARM_ARCH_V5 (ARM_ARCH_V4 | ARM_EXT_V5) -#define ARM_ARCH_V5T (ARM_ARCH_V5 | ARM_EXT_THUMB) -#define ARM_ARCH_V5TE (ARM_ARCH_V5T | ARM_EXT_V5E) -#define ARM_ARCH_XSCALE (ARM_ARCH_V5TE | ARM_EXT_XSCALE) - -/* Some useful combinations: */ -#define ARM_ANY 0x00ffffff -#define ARM_2UP (ARM_ANY - ARM_1) -#define ARM_ALL ARM_2UP /* Not arm1 only. */ -#define ARM_3UP 0x00fffffc -#define ARM_6UP 0x00fffff8 /* Includes ARM7. */ - -#define FPU_CORE 0x80000000 -#define FPU_FPA10 0x40000000 -#define FPU_FPA11 0x40000000 -#define FPU_NONE 0 - -/* Some useful combinations. */ -#define FPU_ALL 0xff000000 /* Note this is ~ARM_ANY. */ -#define FPU_MEMMULTI 0x7f000000 /* Not fpu_core. */ - -#ifndef CPU_DEFAULT -#if defined __XSCALE__ -#define CPU_DEFAULT (ARM_9 | ARM_ARCH_XSCALE) -#else -#if defined __thumb__ -#define CPU_DEFAULT (ARM_7 | ARM_ARCH_V4T) -#else -#define CPU_DEFAULT ARM_ALL -#endif -#endif -#endif - -#ifndef FPU_DEFAULT -#define FPU_DEFAULT FPU_ALL -#endif - -#define streq(a, b) (strcmp (a, b) == 0) -#define skip_whitespace(str) while (*(str) == ' ') ++(str) - -static unsigned long cpu_variant = CPU_DEFAULT | FPU_DEFAULT; -static int target_oabi = 0; - -#if defined OBJ_COFF || defined OBJ_ELF -/* Flags stored in private area of BFD structure. */ -static boolean uses_apcs_26 = false; -static boolean atpcs = false; -static boolean support_interwork = false; -static boolean uses_apcs_float = false; -static boolean pic_code = false; -#endif - -/* This array holds the chars that always start a comment. If the - pre-processor is disabled, these aren't very useful. */ -CONST char comment_chars[] = "@"; - -/* This array holds the chars that only start a comment at the beginning of - a line. If the line seems to have the form '# 123 filename' - .line and .file directives will appear in the pre-processed output. */ -/* Note that input_file.c hand checks for '#' at the beginning of the - first line of the input file. This is because the compiler outputs - #NO_APP at the beginning of its output. */ -/* Also note that comments like this one will always work. */ -CONST char line_comment_chars[] = "#"; - -CONST char line_separator_chars[] = ";"; - -/* Chars that can be used to separate mant - from exp in floating point numbers. */ -CONST char EXP_CHARS[] = "eE"; - -/* Chars that mean this number is a floating point constant. */ -/* As in 0f12.456 */ -/* or 0d1.2345e12 */ - -CONST char FLT_CHARS[] = "rRsSfFdDxXeEpP"; - -/* Prefix characters that indicate the start of an immediate - value. */ -#define is_immediate_prefix(C) ((C) == '#' || (C) == '$') - -#ifdef OBJ_ELF -/* Pre-defined "_GLOBAL_OFFSET_TABLE_" */ -symbolS * GOT_symbol; -#endif - -/* Size of relocation record. */ -CONST int md_reloc_size = 8; - -/* 0: assemble for ARM, - 1: assemble for Thumb, - 2: assemble for Thumb even though target CPU does not support thumb - instructions. */ -static int thumb_mode = 0; - -typedef struct arm_fix -{ - int thumb_mode; -} arm_fix_data; - -struct arm_it -{ - CONST char * error; - unsigned long instruction; - int suffix; - int size; - struct - { - bfd_reloc_code_real_type type; - expressionS exp; - int pc_rel; - } reloc; -}; - -struct arm_it inst; - -enum asm_shift_index -{ - SHIFT_LSL = 0, - SHIFT_LSR, - SHIFT_ASR, - SHIFT_ROR, - SHIFT_RRX -}; - -struct asm_shift_properties -{ - enum asm_shift_index index; - unsigned long bit_field; - unsigned int allows_0 : 1; - unsigned int allows_32 : 1; -}; - -static const struct asm_shift_properties shift_properties [] = -{ - { SHIFT_LSL, 0, 1, 0}, - { SHIFT_LSR, 0x20, 0, 1}, - { SHIFT_ASR, 0x40, 0, 1}, - { SHIFT_ROR, 0x60, 0, 0}, - { SHIFT_RRX, 0x60, 0, 0} -}; - -struct asm_shift_name -{ - const char * name; - const struct asm_shift_properties * properties; -}; - -static const struct asm_shift_name shift_names [] = -{ - { "asl", shift_properties + SHIFT_LSL }, - { "lsl", shift_properties + SHIFT_LSL }, - { "lsr", shift_properties + SHIFT_LSR }, - { "asr", shift_properties + SHIFT_ASR }, - { "ror", shift_properties + SHIFT_ROR }, - { "rrx", shift_properties + SHIFT_RRX }, - { "ASL", shift_properties + SHIFT_LSL }, - { "LSL", shift_properties + SHIFT_LSL }, - { "LSR", shift_properties + SHIFT_LSR }, - { "ASR", shift_properties + SHIFT_ASR }, - { "ROR", shift_properties + SHIFT_ROR }, - { "RRX", shift_properties + SHIFT_RRX } -}; - -#define NO_SHIFT_RESTRICT 1 -#define SHIFT_RESTRICT 0 - -#define NUM_FLOAT_VALS 8 - -CONST char * fp_const[] = -{ - "0.0", "1.0", "2.0", "3.0", "4.0", "5.0", "0.5", "10.0", 0 -}; - -/* Number of littlenums required to hold an extended precision number. */ -#define MAX_LITTLENUMS 6 - -LITTLENUM_TYPE fp_values[NUM_FLOAT_VALS][MAX_LITTLENUMS]; - -#define FAIL (-1) -#define SUCCESS (0) - -#define SUFF_S 1 -#define SUFF_D 2 -#define SUFF_E 3 -#define SUFF_P 4 - -#define CP_T_X 0x00008000 -#define CP_T_Y 0x00400000 -#define CP_T_Pre 0x01000000 -#define CP_T_UD 0x00800000 -#define CP_T_WB 0x00200000 - -#define CONDS_BIT 0x00100000 -#define LOAD_BIT 0x00100000 -#define TRANS_BIT 0x00200000 - -#define DOUBLE_LOAD_FLAG 0x00000001 - -struct asm_cond -{ - CONST char * template; - unsigned long value; -}; - -/* This is to save a hash look-up in the common case. */ -#define COND_ALWAYS 0xe0000000 - -static CONST struct asm_cond conds[] = -{ - {"eq", 0x00000000}, - {"ne", 0x10000000}, - {"cs", 0x20000000}, {"hs", 0x20000000}, - {"cc", 0x30000000}, {"ul", 0x30000000}, {"lo", 0x30000000}, - {"mi", 0x40000000}, - {"pl", 0x50000000}, - {"vs", 0x60000000}, - {"vc", 0x70000000}, - {"hi", 0x80000000}, - {"ls", 0x90000000}, - {"ge", 0xa0000000}, - {"lt", 0xb0000000}, - {"gt", 0xc0000000}, - {"le", 0xd0000000}, - {"al", 0xe0000000}, - {"nv", 0xf0000000} -}; - -/* Warning: If the top bit of the set_bits is set, then the standard - instruction bitmask is ignored, and the new bitmask is taken from - the set_bits: */ -struct asm_flg -{ - CONST char * template; /* Basic flag string. */ - unsigned long set_bits; /* Bits to set. */ -}; - -static CONST struct asm_flg s_flag[] = -{ - {"s", CONDS_BIT}, - {NULL, 0} -}; - -static CONST struct asm_flg ldr_flags[] = -{ - {"d", DOUBLE_LOAD_FLAG}, - {"b", 0x00400000}, - {"t", TRANS_BIT}, - {"bt", 0x00400000 | TRANS_BIT}, - {"h", 0x801000b0}, - {"sh", 0x801000f0}, - {"sb", 0x801000d0}, - {NULL, 0} -}; - -static CONST struct asm_flg str_flags[] = -{ - {"d", DOUBLE_LOAD_FLAG}, - {"b", 0x00400000}, - {"t", TRANS_BIT}, - {"bt", 0x00400000 | TRANS_BIT}, - {"h", 0x800000b0}, - {NULL, 0} -}; - -static CONST struct asm_flg byte_flag[] = -{ - {"b", 0x00400000}, - {NULL, 0} -}; - -static CONST struct asm_flg cmp_flags[] = -{ - {"s", CONDS_BIT}, - {"p", 0x0010f000}, - {NULL, 0} -}; - -static CONST struct asm_flg ldm_flags[] = -{ - {"ed", 0x01800000}, - {"fd", 0x00800000}, - {"ea", 0x01000000}, - {"fa", 0x00000000}, - {"ib", 0x01800000}, - {"ia", 0x00800000}, - {"db", 0x01000000}, - {"da", 0x00000000}, - {NULL, 0} -}; - -static CONST struct asm_flg stm_flags[] = -{ - {"ed", 0x00000000}, - {"fd", 0x01000000}, - {"ea", 0x00800000}, - {"fa", 0x01800000}, - {"ib", 0x01800000}, - {"ia", 0x00800000}, - {"db", 0x01000000}, - {"da", 0x00000000}, - {NULL, 0} -}; - -static CONST struct asm_flg lfm_flags[] = -{ - {"fd", 0x00800000}, - {"ea", 0x01000000}, - {NULL, 0} -}; - -static CONST struct asm_flg sfm_flags[] = -{ - {"fd", 0x01000000}, - {"ea", 0x00800000}, - {NULL, 0} -}; - -static CONST struct asm_flg round_flags[] = -{ - {"p", 0x00000020}, - {"m", 0x00000040}, - {"z", 0x00000060}, - {NULL, 0} -}; - -/* The implementation of the FIX instruction is broken on some assemblers, - in that it accepts a precision specifier as well as a rounding specifier, - despite the fact that this is meaningless. To be more compatible, we - accept it as well, though of course it does not set any bits. */ -static CONST struct asm_flg fix_flags[] = -{ - {"p", 0x00000020}, - {"m", 0x00000040}, - {"z", 0x00000060}, - {"sp", 0x00000020}, - {"sm", 0x00000040}, - {"sz", 0x00000060}, - {"dp", 0x00000020}, - {"dm", 0x00000040}, - {"dz", 0x00000060}, - {"ep", 0x00000020}, - {"em", 0x00000040}, - {"ez", 0x00000060}, - {NULL, 0} -}; - -static CONST struct asm_flg except_flag[] = -{ - {"e", 0x00400000}, - {NULL, 0} -}; - -static CONST struct asm_flg cplong_flag[] = -{ - {"l", 0x00400000}, - {NULL, 0} -}; - -struct asm_psr -{ - CONST char * template; - boolean cpsr; - unsigned long field; -}; - -/* The bit that distnguishes CPSR and SPSR. */ -#define SPSR_BIT (1 << 22) - -/* How many bits to shift the PSR_xxx bits up by. */ -#define PSR_SHIFT 16 - -#define PSR_c (1 << 0) -#define PSR_x (1 << 1) -#define PSR_s (1 << 2) -#define PSR_f (1 << 3) - -static CONST struct asm_psr psrs[] = -{ - {"CPSR", true, PSR_c | PSR_f}, - {"CPSR_all", true, PSR_c | PSR_f}, - {"SPSR", false, PSR_c | PSR_f}, - {"SPSR_all", false, PSR_c | PSR_f}, - {"CPSR_flg", true, PSR_f}, - {"CPSR_f", true, PSR_f}, - {"SPSR_flg", false, PSR_f}, - {"SPSR_f", false, PSR_f}, - {"CPSR_c", true, PSR_c}, - {"CPSR_ctl", true, PSR_c}, - {"SPSR_c", false, PSR_c}, - {"SPSR_ctl", false, PSR_c}, - {"CPSR_x", true, PSR_x}, - {"CPSR_s", true, PSR_s}, - {"SPSR_x", false, PSR_x}, - {"SPSR_s", false, PSR_s}, - /* Combinations of flags. */ - {"CPSR_fs", true, PSR_f | PSR_s}, - {"CPSR_fx", true, PSR_f | PSR_x}, - {"CPSR_fc", true, PSR_f | PSR_c}, - {"CPSR_sf", true, PSR_s | PSR_f}, - {"CPSR_sx", true, PSR_s | PSR_x}, - {"CPSR_sc", true, PSR_s | PSR_c}, - {"CPSR_xf", true, PSR_x | PSR_f}, - {"CPSR_xs", true, PSR_x | PSR_s}, - {"CPSR_xc", true, PSR_x | PSR_c}, - {"CPSR_cf", true, PSR_c | PSR_f}, - {"CPSR_cs", true, PSR_c | PSR_s}, - {"CPSR_cx", true, PSR_c | PSR_x}, - {"CPSR_fsx", true, PSR_f | PSR_s | PSR_x}, - {"CPSR_fsc", true, PSR_f | PSR_s | PSR_c}, - {"CPSR_fxs", true, PSR_f | PSR_x | PSR_s}, - {"CPSR_fxc", true, PSR_f | PSR_x | PSR_c}, - {"CPSR_fcs", true, PSR_f | PSR_c | PSR_s}, - {"CPSR_fcx", true, PSR_f | PSR_c | PSR_x}, - {"CPSR_sfx", true, PSR_s | PSR_f | PSR_x}, - {"CPSR_sfc", true, PSR_s | PSR_f | PSR_c}, - {"CPSR_sxf", true, PSR_s | PSR_x | PSR_f}, - {"CPSR_sxc", true, PSR_s | PSR_x | PSR_c}, - {"CPSR_scf", true, PSR_s | PSR_c | PSR_f}, - {"CPSR_scx", true, PSR_s | PSR_c | PSR_x}, - {"CPSR_xfs", true, PSR_x | PSR_f | PSR_s}, - {"CPSR_xfc", true, PSR_x | PSR_f | PSR_c}, - {"CPSR_xsf", true, PSR_x | PSR_s | PSR_f}, - {"CPSR_xsc", true, PSR_x | PSR_s | PSR_c}, - {"CPSR_xcf", true, PSR_x | PSR_c | PSR_f}, - {"CPSR_xcs", true, PSR_x | PSR_c | PSR_s}, - {"CPSR_cfs", true, PSR_c | PSR_f | PSR_s}, - {"CPSR_cfx", true, PSR_c | PSR_f | PSR_x}, - {"CPSR_csf", true, PSR_c | PSR_s | PSR_f}, - {"CPSR_csx", true, PSR_c | PSR_s | PSR_x}, - {"CPSR_cxf", true, PSR_c | PSR_x | PSR_f}, - {"CPSR_cxs", true, PSR_c | PSR_x | PSR_s}, - {"CPSR_fsxc", true, PSR_f | PSR_s | PSR_x | PSR_c}, - {"CPSR_fscx", true, PSR_f | PSR_s | PSR_c | PSR_x}, - {"CPSR_fxsc", true, PSR_f | PSR_x | PSR_s | PSR_c}, - {"CPSR_fxcs", true, PSR_f | PSR_x | PSR_c | PSR_s}, - {"CPSR_fcsx", true, PSR_f | PSR_c | PSR_s | PSR_x}, - {"CPSR_fcxs", true, PSR_f | PSR_c | PSR_x | PSR_s}, - {"CPSR_sfxc", true, PSR_s | PSR_f | PSR_x | PSR_c}, - {"CPSR_sfcx", true, PSR_s | PSR_f | PSR_c | PSR_x}, - {"CPSR_sxfc", true, PSR_s | PSR_x | PSR_f | PSR_c}, - {"CPSR_sxcf", true, PSR_s | PSR_x | PSR_c | PSR_f}, - {"CPSR_scfx", true, PSR_s | PSR_c | PSR_f | PSR_x}, - {"CPSR_scxf", true, PSR_s | PSR_c | PSR_x | PSR_f}, - {"CPSR_xfsc", true, PSR_x | PSR_f | PSR_s | PSR_c}, - {"CPSR_xfcs", true, PSR_x | PSR_f | PSR_c | PSR_s}, - {"CPSR_xsfc", true, PSR_x | PSR_s | PSR_f | PSR_c}, - {"CPSR_xscf", true, PSR_x | PSR_s | PSR_c | PSR_f}, - {"CPSR_xcfs", true, PSR_x | PSR_c | PSR_f | PSR_s}, - {"CPSR_xcsf", true, PSR_x | PSR_c | PSR_s | PSR_f}, - {"CPSR_cfsx", true, PSR_c | PSR_f | PSR_s | PSR_x}, - {"CPSR_cfxs", true, PSR_c | PSR_f | PSR_x | PSR_s}, - {"CPSR_csfx", true, PSR_c | PSR_s | PSR_f | PSR_x}, - {"CPSR_csxf", true, PSR_c | PSR_s | PSR_x | PSR_f}, - {"CPSR_cxfs", true, PSR_c | PSR_x | PSR_f | PSR_s}, - {"CPSR_cxsf", true, PSR_c | PSR_x | PSR_s | PSR_f}, - {"SPSR_fs", false, PSR_f | PSR_s}, - {"SPSR_fx", false, PSR_f | PSR_x}, - {"SPSR_fc", false, PSR_f | PSR_c}, - {"SPSR_sf", false, PSR_s | PSR_f}, - {"SPSR_sx", false, PSR_s | PSR_x}, - {"SPSR_sc", false, PSR_s | PSR_c}, - {"SPSR_xf", false, PSR_x | PSR_f}, - {"SPSR_xs", false, PSR_x | PSR_s}, - {"SPSR_xc", false, PSR_x | PSR_c}, - {"SPSR_cf", false, PSR_c | PSR_f}, - {"SPSR_cs", false, PSR_c | PSR_s}, - {"SPSR_cx", false, PSR_c | PSR_x}, - {"SPSR_fsx", false, PSR_f | PSR_s | PSR_x}, - {"SPSR_fsc", false, PSR_f | PSR_s | PSR_c}, - {"SPSR_fxs", false, PSR_f | PSR_x | PSR_s}, - {"SPSR_fxc", false, PSR_f | PSR_x | PSR_c}, - {"SPSR_fcs", false, PSR_f | PSR_c | PSR_s}, - {"SPSR_fcx", false, PSR_f | PSR_c | PSR_x}, - {"SPSR_sfx", false, PSR_s | PSR_f | PSR_x}, - {"SPSR_sfc", false, PSR_s | PSR_f | PSR_c}, - {"SPSR_sxf", false, PSR_s | PSR_x | PSR_f}, - {"SPSR_sxc", false, PSR_s | PSR_x | PSR_c}, - {"SPSR_scf", false, PSR_s | PSR_c | PSR_f}, - {"SPSR_scx", false, PSR_s | PSR_c | PSR_x}, - {"SPSR_xfs", false, PSR_x | PSR_f | PSR_s}, - {"SPSR_xfc", false, PSR_x | PSR_f | PSR_c}, - {"SPSR_xsf", false, PSR_x | PSR_s | PSR_f}, - {"SPSR_xsc", false, PSR_x | PSR_s | PSR_c}, - {"SPSR_xcf", false, PSR_x | PSR_c | PSR_f}, - {"SPSR_xcs", false, PSR_x | PSR_c | PSR_s}, - {"SPSR_cfs", false, PSR_c | PSR_f | PSR_s}, - {"SPSR_cfx", false, PSR_c | PSR_f | PSR_x}, - {"SPSR_csf", false, PSR_c | PSR_s | PSR_f}, - {"SPSR_csx", false, PSR_c | PSR_s | PSR_x}, - {"SPSR_cxf", false, PSR_c | PSR_x | PSR_f}, - {"SPSR_cxs", false, PSR_c | PSR_x | PSR_s}, - {"SPSR_fsxc", false, PSR_f | PSR_s | PSR_x | PSR_c}, - {"SPSR_fscx", false, PSR_f | PSR_s | PSR_c | PSR_x}, - {"SPSR_fxsc", false, PSR_f | PSR_x | PSR_s | PSR_c}, - {"SPSR_fxcs", false, PSR_f | PSR_x | PSR_c | PSR_s}, - {"SPSR_fcsx", false, PSR_f | PSR_c | PSR_s | PSR_x}, - {"SPSR_fcxs", false, PSR_f | PSR_c | PSR_x | PSR_s}, - {"SPSR_sfxc", false, PSR_s | PSR_f | PSR_x | PSR_c}, - {"SPSR_sfcx", false, PSR_s | PSR_f | PSR_c | PSR_x}, - {"SPSR_sxfc", false, PSR_s | PSR_x | PSR_f | PSR_c}, - {"SPSR_sxcf", false, PSR_s | PSR_x | PSR_c | PSR_f}, - {"SPSR_scfx", false, PSR_s | PSR_c | PSR_f | PSR_x}, - {"SPSR_scxf", false, PSR_s | PSR_c | PSR_x | PSR_f}, - {"SPSR_xfsc", false, PSR_x | PSR_f | PSR_s | PSR_c}, - {"SPSR_xfcs", false, PSR_x | PSR_f | PSR_c | PSR_s}, - {"SPSR_xsfc", false, PSR_x | PSR_s | PSR_f | PSR_c}, - {"SPSR_xscf", false, PSR_x | PSR_s | PSR_c | PSR_f}, - {"SPSR_xcfs", false, PSR_x | PSR_c | PSR_f | PSR_s}, - {"SPSR_xcsf", false, PSR_x | PSR_c | PSR_s | PSR_f}, - {"SPSR_cfsx", false, PSR_c | PSR_f | PSR_s | PSR_x}, - {"SPSR_cfxs", false, PSR_c | PSR_f | PSR_x | PSR_s}, - {"SPSR_csfx", false, PSR_c | PSR_s | PSR_f | PSR_x}, - {"SPSR_csxf", false, PSR_c | PSR_s | PSR_x | PSR_f}, - {"SPSR_cxfs", false, PSR_c | PSR_x | PSR_f | PSR_s}, - {"SPSR_cxsf", false, PSR_c | PSR_x | PSR_s | PSR_f}, -}; - -/* Functions called by parser. */ -/* ARM instructions. */ -static void do_arit PARAMS ((char *, unsigned long)); -static void do_cmp PARAMS ((char *, unsigned long)); -static void do_mov PARAMS ((char *, unsigned long)); -static void do_ldst PARAMS ((char *, unsigned long)); -static void do_ldmstm PARAMS ((char *, unsigned long)); -static void do_branch PARAMS ((char *, unsigned long)); -static void do_swi PARAMS ((char *, unsigned long)); -/* Pseudo Op codes. */ -static void do_adr PARAMS ((char *, unsigned long)); -static void do_adrl PARAMS ((char *, unsigned long)); -static void do_nop PARAMS ((char *, unsigned long)); -/* ARM 2. */ -static void do_mul PARAMS ((char *, unsigned long)); -static void do_mla PARAMS ((char *, unsigned long)); -/* ARM 3. */ -static void do_swap PARAMS ((char *, unsigned long)); -/* ARM 6. */ -static void do_msr PARAMS ((char *, unsigned long)); -static void do_mrs PARAMS ((char *, unsigned long)); -/* ARM 7M. */ -static void do_mull PARAMS ((char *, unsigned long)); -/* ARM THUMB. */ -static void do_bx PARAMS ((char *, unsigned long)); - -/* ARM_EXT_XScale. */ -static void do_mia PARAMS ((char *, unsigned long)); -static void do_mar PARAMS ((char *, unsigned long)); -static void do_mra PARAMS ((char *, unsigned long)); -static void do_pld PARAMS ((char *, unsigned long)); -static void do_ldrd PARAMS ((char *, unsigned long)); - -/* ARM_EXT_V5. */ -static void do_blx PARAMS ((char *, unsigned long)); -static void do_bkpt PARAMS ((char *, unsigned long)); -static void do_clz PARAMS ((char *, unsigned long)); -static void do_lstc2 PARAMS ((char *, unsigned long)); -static void do_cdp2 PARAMS ((char *, unsigned long)); -static void do_co_reg2 PARAMS ((char *, unsigned long)); - -static void do_t_blx PARAMS ((char *)); -static void do_t_bkpt PARAMS ((char *)); - -/* ARM_EXT_V5E. */ -static void do_smla PARAMS ((char *, unsigned long)); -static void do_smlal PARAMS ((char *, unsigned long)); -static void do_smul PARAMS ((char *, unsigned long)); -static void do_qadd PARAMS ((char *, unsigned long)); -static void do_co_reg2c PARAMS ((char *, unsigned long)); - -/* Coprocessor Instructions. */ -static void do_cdp PARAMS ((char *, unsigned long)); -static void do_lstc PARAMS ((char *, unsigned long)); -static void do_co_reg PARAMS ((char *, unsigned long)); -static void do_fp_ctrl PARAMS ((char *, unsigned long)); -static void do_fp_ldst PARAMS ((char *, unsigned long)); -static void do_fp_ldmstm PARAMS ((char *, unsigned long)); -static void do_fp_dyadic PARAMS ((char *, unsigned long)); -static void do_fp_monadic PARAMS ((char *, unsigned long)); -static void do_fp_cmp PARAMS ((char *, unsigned long)); -static void do_fp_from_reg PARAMS ((char *, unsigned long)); -static void do_fp_to_reg PARAMS ((char *, unsigned long)); - -static void fix_new_arm PARAMS ((fragS *, int, short, expressionS *, int, int)); -static int arm_reg_parse PARAMS ((char **)); -static CONST struct asm_psr * arm_psr_parse PARAMS ((char **)); -static void symbol_locate PARAMS ((symbolS *, CONST char *, segT, valueT, fragS *)); -static int add_to_lit_pool PARAMS ((void)); -static unsigned validate_immediate PARAMS ((unsigned)); -static unsigned validate_immediate_twopart PARAMS ((unsigned int, unsigned int *)); -static int validate_offset_imm PARAMS ((unsigned int, int)); -static void opcode_select PARAMS ((int)); -static void end_of_line PARAMS ((char *)); -static int reg_required_here PARAMS ((char **, int)); -static int psr_required_here PARAMS ((char **)); -static int co_proc_number PARAMS ((char **)); -static int cp_opc_expr PARAMS ((char **, int, int)); -static int cp_reg_required_here PARAMS ((char **, int)); -static int fp_reg_required_here PARAMS ((char **, int)); -static int cp_address_offset PARAMS ((char **)); -static int cp_address_required_here PARAMS ((char **)); -static int my_get_float_expression PARAMS ((char **)); -static int skip_past_comma PARAMS ((char **)); -static int walk_no_bignums PARAMS ((symbolS *)); -static int negate_data_op PARAMS ((unsigned long *, unsigned long)); -static int data_op2 PARAMS ((char **)); -static int fp_op2 PARAMS ((char **)); -static long reg_list PARAMS ((char **)); -static void thumb_load_store PARAMS ((char *, int, int)); -static int decode_shift PARAMS ((char **, int)); -static int ldst_extend PARAMS ((char **, int)); -static void thumb_add_sub PARAMS ((char *, int)); -static void insert_reg PARAMS ((int)); -static void thumb_shift PARAMS ((char *, int)); -static void thumb_mov_compare PARAMS ((char *, int)); -static void set_constant_flonums PARAMS ((void)); -static valueT md_chars_to_number PARAMS ((char *, int)); -static void insert_reg_alias PARAMS ((char *, int)); -static void output_inst PARAMS ((void)); -#ifdef OBJ_ELF -static bfd_reloc_code_real_type arm_parse_reloc PARAMS ((void)); -#endif - -/* ARM instructions take 4bytes in the object file, Thumb instructions - take 2: */ -#define INSN_SIZE 4 - -/* LONGEST_INST is the longest basic instruction name without - conditions or flags. ARM7M has 4 of length 5. El Segundo - has one basic instruction name of length 7 (SMLALxy). */ -#define LONGEST_INST 7 - -struct asm_opcode -{ - /* Basic string to match. */ - CONST char * template; - - /* Basic instruction code. */ - unsigned long value; - - /* Compulsory suffix that must follow conds. If "", then the - instruction is not conditional and must have no suffix. */ - CONST char * comp_suffix; - - /* Bits to toggle if flag 'n' set. */ - CONST struct asm_flg * flags; - - /* Which CPU variants this exists for. */ - unsigned long variants; - - /* Function to call to parse args. */ - void (* parms) PARAMS ((char *, unsigned long)); -}; - -static CONST struct asm_opcode insns[] = -{ -/* Intel XScale extensions to ARM V5 ISA. */ - {"mia", 0x0e200010, NULL, NULL, ARM_EXT_XSCALE, do_mia}, - {"miaph", 0x0e280010, NULL, NULL, ARM_EXT_XSCALE, do_mia}, - {"miabb", 0x0e2c0010, NULL, NULL, ARM_EXT_XSCALE, do_mia}, - {"miabt", 0x0e2d0010, NULL, NULL, ARM_EXT_XSCALE, do_mia}, - {"miatb", 0x0e2e0010, NULL, NULL, ARM_EXT_XSCALE, do_mia}, - {"miatt", 0x0e2f0010, NULL, NULL, ARM_EXT_XSCALE, do_mia}, - {"mar", 0x0c400000, NULL, NULL, ARM_EXT_XSCALE, do_mar}, - {"mra", 0x0c500000, NULL, NULL, ARM_EXT_XSCALE, do_mra}, - {"pld", 0xf450f000, "", NULL, ARM_EXT_XSCALE, do_pld}, - {"ldr", 0x000000d0, NULL, ldr_flags, ARM_ANY, do_ldrd}, - {"str", 0x000000f0, NULL, str_flags, ARM_ANY, do_ldrd}, - -/* ARM Instructions. */ - {"and", 0x00000000, NULL, s_flag, ARM_ANY, do_arit}, - {"eor", 0x00200000, NULL, s_flag, ARM_ANY, do_arit}, - {"sub", 0x00400000, NULL, s_flag, ARM_ANY, do_arit}, - {"rsb", 0x00600000, NULL, s_flag, ARM_ANY, do_arit}, - {"add", 0x00800000, NULL, s_flag, ARM_ANY, do_arit}, - {"adc", 0x00a00000, NULL, s_flag, ARM_ANY, do_arit}, - {"sbc", 0x00c00000, NULL, s_flag, ARM_ANY, do_arit}, - {"rsc", 0x00e00000, NULL, s_flag, ARM_ANY, do_arit}, - {"orr", 0x01800000, NULL, s_flag, ARM_ANY, do_arit}, - {"bic", 0x01c00000, NULL, s_flag, ARM_ANY, do_arit}, - {"tst", 0x01000000, NULL, cmp_flags, ARM_ANY, do_cmp}, - {"teq", 0x01200000, NULL, cmp_flags, ARM_ANY, do_cmp}, - {"cmp", 0x01400000, NULL, cmp_flags, ARM_ANY, do_cmp}, - {"cmn", 0x01600000, NULL, cmp_flags, ARM_ANY, do_cmp}, - {"mov", 0x01a00000, NULL, s_flag, ARM_ANY, do_mov}, - {"mvn", 0x01e00000, NULL, s_flag, ARM_ANY, do_mov}, - {"str", 0x04000000, NULL, str_flags, ARM_ANY, do_ldst}, - {"ldr", 0x04100000, NULL, ldr_flags, ARM_ANY, do_ldst}, - {"stm", 0x08000000, NULL, stm_flags, ARM_ANY, do_ldmstm}, - {"ldm", 0x08100000, NULL, ldm_flags, ARM_ANY, do_ldmstm}, - {"swi", 0x0f000000, NULL, NULL, ARM_ANY, do_swi}, -#ifdef TE_WINCE - {"bl", 0x0b000000, NULL, NULL, ARM_ANY, do_branch}, - {"b", 0x0a000000, NULL, NULL, ARM_ANY, do_branch}, -#else - {"bl", 0x0bfffffe, NULL, NULL, ARM_ANY, do_branch}, - {"b", 0x0afffffe, NULL, NULL, ARM_ANY, do_branch}, -#endif - -/* Pseudo ops. */ - {"adr", 0x028f0000, NULL, NULL, ARM_ANY, do_adr}, - {"adrl", 0x028f0000, NULL, NULL, ARM_ANY, do_adrl}, - {"nop", 0x01a00000, NULL, NULL, ARM_ANY, do_nop}, - -/* ARM 2 multiplies. */ - {"mul", 0x00000090, NULL, s_flag, ARM_2UP, do_mul}, - {"mla", 0x00200090, NULL, s_flag, ARM_2UP, do_mla}, - -/* ARM 3 - swp instructions. */ - {"swp", 0x01000090, NULL, byte_flag, ARM_3UP, do_swap}, - -/* ARM 6 Coprocessor instructions. */ - {"mrs", 0x010f0000, NULL, NULL, ARM_6UP, do_mrs}, - {"msr", 0x0120f000, NULL, NULL, ARM_6UP, do_msr}, -/* ScottB: our code uses 0x0128f000 for msr. - NickC: but this is wrong because the bits 16 through 19 are - handled by the PSR_xxx defines above. */ - -/* ARM 7M long multiplies - need signed/unsigned flags! */ - {"smull", 0x00c00090, NULL, s_flag, ARM_EXT_LONGMUL, do_mull}, - {"umull", 0x00800090, NULL, s_flag, ARM_EXT_LONGMUL, do_mull}, - {"smlal", 0x00e00090, NULL, s_flag, ARM_EXT_LONGMUL, do_mull}, - {"umlal", 0x00a00090, NULL, s_flag, ARM_EXT_LONGMUL, do_mull}, - -/* ARM THUMB interworking. */ - {"bx", 0x012fff10, NULL, NULL, ARM_EXT_THUMB, do_bx}, - -/* Floating point instructions. */ - {"wfs", 0x0e200110, NULL, NULL, FPU_ALL, do_fp_ctrl}, - {"rfs", 0x0e300110, NULL, NULL, FPU_ALL, do_fp_ctrl}, - {"wfc", 0x0e400110, NULL, NULL, FPU_ALL, do_fp_ctrl}, - {"rfc", 0x0e500110, NULL, NULL, FPU_ALL, do_fp_ctrl}, - {"ldf", 0x0c100100, "sdep", NULL, FPU_ALL, do_fp_ldst}, - {"stf", 0x0c000100, "sdep", NULL, FPU_ALL, do_fp_ldst}, - {"lfm", 0x0c100200, NULL, lfm_flags, FPU_MEMMULTI, do_fp_ldmstm}, - {"sfm", 0x0c000200, NULL, sfm_flags, FPU_MEMMULTI, do_fp_ldmstm}, - {"mvf", 0x0e008100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"mnf", 0x0e108100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"abs", 0x0e208100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"rnd", 0x0e308100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"sqt", 0x0e408100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"log", 0x0e508100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"lgn", 0x0e608100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"exp", 0x0e708100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"sin", 0x0e808100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"cos", 0x0e908100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"tan", 0x0ea08100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"asn", 0x0eb08100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"acs", 0x0ec08100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"atn", 0x0ed08100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"urd", 0x0ee08100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"nrm", 0x0ef08100, "sde", round_flags, FPU_ALL, do_fp_monadic}, - {"adf", 0x0e000100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, - {"suf", 0x0e200100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, - {"rsf", 0x0e300100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, - {"muf", 0x0e100100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, - {"dvf", 0x0e400100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, - {"rdf", 0x0e500100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, - {"pow", 0x0e600100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, - {"rpw", 0x0e700100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, - {"rmf", 0x0e800100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, - {"fml", 0x0e900100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, - {"fdv", 0x0ea00100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, - {"frd", 0x0eb00100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, - {"pol", 0x0ec00100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, - {"cmf", 0x0e90f110, NULL, except_flag, FPU_ALL, do_fp_cmp}, - {"cnf", 0x0eb0f110, NULL, except_flag, FPU_ALL, do_fp_cmp}, -/* The FPA10 data sheet suggests that the 'E' of cmfe/cnfe should not - be an optional suffix, but part of the instruction. To be compatible, - we accept either. */ - {"cmfe", 0x0ed0f110, NULL, NULL, FPU_ALL, do_fp_cmp}, - {"cnfe", 0x0ef0f110, NULL, NULL, FPU_ALL, do_fp_cmp}, - {"flt", 0x0e000110, "sde", round_flags, FPU_ALL, do_fp_from_reg}, - {"fix", 0x0e100110, NULL, fix_flags, FPU_ALL, do_fp_to_reg}, - -/* Generic copressor instructions. */ - {"cdp", 0x0e000000, NULL, NULL, ARM_2UP, do_cdp}, - {"ldc", 0x0c100000, NULL, cplong_flag, ARM_2UP, do_lstc}, - {"stc", 0x0c000000, NULL, cplong_flag, ARM_2UP, do_lstc}, - {"mcr", 0x0e000010, NULL, NULL, ARM_2UP, do_co_reg}, - {"mrc", 0x0e100010, NULL, NULL, ARM_2UP, do_co_reg}, - -/* ARM ISA extension 5. */ -/* Note: blx is actually 2 opcodes, so the .value is set dynamically. - And it's sometimes conditional and sometimes not. */ - {"blx", 0, NULL, NULL, ARM_EXT_V5, do_blx}, - {"clz", 0x016f0f10, NULL, NULL, ARM_EXT_V5, do_clz}, - {"bkpt", 0xe1200070, "", NULL, ARM_EXT_V5, do_bkpt}, - {"ldc2", 0xfc100000, "", cplong_flag, ARM_EXT_V5, do_lstc2}, - {"stc2", 0xfc000000, "", cplong_flag, ARM_EXT_V5, do_lstc2}, - {"cdp2", 0xfe000000, "", NULL, ARM_EXT_V5, do_cdp2}, - {"mcr2", 0xfe000010, "", NULL, ARM_EXT_V5, do_co_reg2}, - {"mrc2", 0xfe100010, "", NULL, ARM_EXT_V5, do_co_reg2}, - -/* ARM ISA extension 5E, El Segundo. */ - {"smlabb", 0x01000080, NULL, NULL, ARM_EXT_V5E, do_smla}, - {"smlatb", 0x010000a0, NULL, NULL, ARM_EXT_V5E, do_smla}, - {"smlabt", 0x010000c0, NULL, NULL, ARM_EXT_V5E, do_smla}, - {"smlatt", 0x010000e0, NULL, NULL, ARM_EXT_V5E, do_smla}, - - {"smlawb", 0x01200080, NULL, NULL, ARM_EXT_V5E, do_smla}, - {"smlawt", 0x012000c0, NULL, NULL, ARM_EXT_V5E, do_smla}, - - {"smlalbb",0x01400080, NULL, NULL, ARM_EXT_V5E, do_smlal}, - {"smlaltb",0x014000a0, NULL, NULL, ARM_EXT_V5E, do_smlal}, - {"smlalbt",0x014000c0, NULL, NULL, ARM_EXT_V5E, do_smlal}, - {"smlaltt",0x014000e0, NULL, NULL, ARM_EXT_V5E, do_smlal}, - - {"smulbb", 0x01600080, NULL, NULL, ARM_EXT_V5E, do_smul}, - {"smultb", 0x016000a0, NULL, NULL, ARM_EXT_V5E, do_smul}, - {"smulbt", 0x016000c0, NULL, NULL, ARM_EXT_V5E, do_smul}, - {"smultt", 0x016000e0, NULL, NULL, ARM_EXT_V5E, do_smul}, - - {"smulwb", 0x012000a0, NULL, NULL, ARM_EXT_V5E, do_smul}, - {"smulwt", 0x012000e0, NULL, NULL, ARM_EXT_V5E, do_smul}, - - {"qadd", 0x01000050, NULL, NULL, ARM_EXT_V5E, do_qadd}, - {"qdadd", 0x01400050, NULL, NULL, ARM_EXT_V5E, do_qadd}, - {"qsub", 0x01200050, NULL, NULL, ARM_EXT_V5E, do_qadd}, - {"qdsub", 0x01600050, NULL, NULL, ARM_EXT_V5E, do_qadd}, - - {"mcrr", 0x0c400000, NULL, NULL, ARM_EXT_V5E, do_co_reg2c}, - {"mrrc", 0x0c500000, NULL, NULL, ARM_EXT_V5E, do_co_reg2c}, -}; - -/* Defines for various bits that we will want to toggle. */ -#define INST_IMMEDIATE 0x02000000 -#define OFFSET_REG 0x02000000 -#define HWOFFSET_IMM 0x00400000 -#define SHIFT_BY_REG 0x00000010 -#define PRE_INDEX 0x01000000 -#define INDEX_UP 0x00800000 -#define WRITE_BACK 0x00200000 -#define LDM_TYPE_2_OR_3 0x00400000 - -#define LITERAL_MASK 0xf000f000 -#define COND_MASK 0xf0000000 -#define OPCODE_MASK 0xfe1fffff -#define DATA_OP_SHIFT 21 - -/* Codes to distinguish the arithmetic instructions. */ -#define OPCODE_AND 0 -#define OPCODE_EOR 1 -#define OPCODE_SUB 2 -#define OPCODE_RSB 3 -#define OPCODE_ADD 4 -#define OPCODE_ADC 5 -#define OPCODE_SBC 6 -#define OPCODE_RSC 7 -#define OPCODE_TST 8 -#define OPCODE_TEQ 9 -#define OPCODE_CMP 10 -#define OPCODE_CMN 11 -#define OPCODE_ORR 12 -#define OPCODE_MOV 13 -#define OPCODE_BIC 14 -#define OPCODE_MVN 15 - -static void do_t_nop PARAMS ((char *)); -static void do_t_arit PARAMS ((char *)); -static void do_t_add PARAMS ((char *)); -static void do_t_asr PARAMS ((char *)); -static void do_t_branch9 PARAMS ((char *)); -static void do_t_branch12 PARAMS ((char *)); -static void do_t_branch23 PARAMS ((char *)); -static void do_t_bx PARAMS ((char *)); -static void do_t_compare PARAMS ((char *)); -static void do_t_ldmstm PARAMS ((char *)); -static void do_t_ldr PARAMS ((char *)); -static void do_t_ldrb PARAMS ((char *)); -static void do_t_ldrh PARAMS ((char *)); -static void do_t_lds PARAMS ((char *)); -static void do_t_lsl PARAMS ((char *)); -static void do_t_lsr PARAMS ((char *)); -static void do_t_mov PARAMS ((char *)); -static void do_t_push_pop PARAMS ((char *)); -static void do_t_str PARAMS ((char *)); -static void do_t_strb PARAMS ((char *)); -static void do_t_strh PARAMS ((char *)); -static void do_t_sub PARAMS ((char *)); -static void do_t_swi PARAMS ((char *)); -static void do_t_adr PARAMS ((char *)); - -#define T_OPCODE_MUL 0x4340 -#define T_OPCODE_TST 0x4200 -#define T_OPCODE_CMN 0x42c0 -#define T_OPCODE_NEG 0x4240 -#define T_OPCODE_MVN 0x43c0 - -#define T_OPCODE_ADD_R3 0x1800 -#define T_OPCODE_SUB_R3 0x1a00 -#define T_OPCODE_ADD_HI 0x4400 -#define T_OPCODE_ADD_ST 0xb000 -#define T_OPCODE_SUB_ST 0xb080 -#define T_OPCODE_ADD_SP 0xa800 -#define T_OPCODE_ADD_PC 0xa000 -#define T_OPCODE_ADD_I8 0x3000 -#define T_OPCODE_SUB_I8 0x3800 -#define T_OPCODE_ADD_I3 0x1c00 -#define T_OPCODE_SUB_I3 0x1e00 - -#define T_OPCODE_ASR_R 0x4100 -#define T_OPCODE_LSL_R 0x4080 -#define T_OPCODE_LSR_R 0x40c0 -#define T_OPCODE_ASR_I 0x1000 -#define T_OPCODE_LSL_I 0x0000 -#define T_OPCODE_LSR_I 0x0800 - -#define T_OPCODE_MOV_I8 0x2000 -#define T_OPCODE_CMP_I8 0x2800 -#define T_OPCODE_CMP_LR 0x4280 -#define T_OPCODE_MOV_HR 0x4600 -#define T_OPCODE_CMP_HR 0x4500 - -#define T_OPCODE_LDR_PC 0x4800 -#define T_OPCODE_LDR_SP 0x9800 -#define T_OPCODE_STR_SP 0x9000 -#define T_OPCODE_LDR_IW 0x6800 -#define T_OPCODE_STR_IW 0x6000 -#define T_OPCODE_LDR_IH 0x8800 -#define T_OPCODE_STR_IH 0x8000 -#define T_OPCODE_LDR_IB 0x7800 -#define T_OPCODE_STR_IB 0x7000 -#define T_OPCODE_LDR_RW 0x5800 -#define T_OPCODE_STR_RW 0x5000 -#define T_OPCODE_LDR_RH 0x5a00 -#define T_OPCODE_STR_RH 0x5200 -#define T_OPCODE_LDR_RB 0x5c00 -#define T_OPCODE_STR_RB 0x5400 - -#define T_OPCODE_PUSH 0xb400 -#define T_OPCODE_POP 0xbc00 - -#define T_OPCODE_BRANCH 0xe7fe - -static int thumb_reg PARAMS ((char ** str, int hi_lo)); - -#define THUMB_SIZE 2 /* Size of thumb instruction. */ -#define THUMB_REG_LO 0x1 -#define THUMB_REG_HI 0x2 -#define THUMB_REG_ANY 0x3 - -#define THUMB_H1 0x0080 -#define THUMB_H2 0x0040 - -#define THUMB_ASR 0 -#define THUMB_LSL 1 -#define THUMB_LSR 2 - -#define THUMB_MOVE 0 -#define THUMB_COMPARE 1 - -#define THUMB_LOAD 0 -#define THUMB_STORE 1 - -#define THUMB_PP_PC_LR 0x0100 - -/* These three are used for immediate shifts, do not alter. */ -#define THUMB_WORD 2 -#define THUMB_HALFWORD 1 -#define THUMB_BYTE 0 - -struct thumb_opcode -{ - /* Basic string to match. */ - CONST char * template; - - /* Basic instruction code. */ - unsigned long value; - - int size; - - /* Which CPU variants this exists for. */ - unsigned long variants; - - /* Function to call to parse args. */ - void (* parms) PARAMS ((char *)); -}; - -static CONST struct thumb_opcode tinsns[] = -{ - {"adc", 0x4140, 2, ARM_EXT_THUMB, do_t_arit}, - {"add", 0x0000, 2, ARM_EXT_THUMB, do_t_add}, - {"and", 0x4000, 2, ARM_EXT_THUMB, do_t_arit}, - {"asr", 0x0000, 2, ARM_EXT_THUMB, do_t_asr}, - {"b", T_OPCODE_BRANCH, 2, ARM_EXT_THUMB, do_t_branch12}, - {"beq", 0xd0fe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bne", 0xd1fe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bcs", 0xd2fe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bhs", 0xd2fe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bcc", 0xd3fe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bul", 0xd3fe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"blo", 0xd3fe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bmi", 0xd4fe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bpl", 0xd5fe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bvs", 0xd6fe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bvc", 0xd7fe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bhi", 0xd8fe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bls", 0xd9fe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bge", 0xdafe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"blt", 0xdbfe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bgt", 0xdcfe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"ble", 0xddfe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bal", 0xdefe, 2, ARM_EXT_THUMB, do_t_branch9}, - {"bic", 0x4380, 2, ARM_EXT_THUMB, do_t_arit}, - {"bl", 0xf7fffffe, 4, ARM_EXT_THUMB, do_t_branch23}, - {"blx", 0, 0, ARM_EXT_V5, do_t_blx}, - {"bkpt", 0xbe00, 2, ARM_EXT_V5, do_t_bkpt}, - {"bx", 0x4700, 2, ARM_EXT_THUMB, do_t_bx}, - {"cmn", T_OPCODE_CMN, 2, ARM_EXT_THUMB, do_t_arit}, - {"cmp", 0x0000, 2, ARM_EXT_THUMB, do_t_compare}, - {"eor", 0x4040, 2, ARM_EXT_THUMB, do_t_arit}, - {"ldmia", 0xc800, 2, ARM_EXT_THUMB, do_t_ldmstm}, - {"ldr", 0x0000, 2, ARM_EXT_THUMB, do_t_ldr}, - {"ldrb", 0x0000, 2, ARM_EXT_THUMB, do_t_ldrb}, - {"ldrh", 0x0000, 2, ARM_EXT_THUMB, do_t_ldrh}, - {"ldrsb", 0x5600, 2, ARM_EXT_THUMB, do_t_lds}, - {"ldrsh", 0x5e00, 2, ARM_EXT_THUMB, do_t_lds}, - {"ldsb", 0x5600, 2, ARM_EXT_THUMB, do_t_lds}, - {"ldsh", 0x5e00, 2, ARM_EXT_THUMB, do_t_lds}, - {"lsl", 0x0000, 2, ARM_EXT_THUMB, do_t_lsl}, - {"lsr", 0x0000, 2, ARM_EXT_THUMB, do_t_lsr}, - {"mov", 0x0000, 2, ARM_EXT_THUMB, do_t_mov}, - {"mul", T_OPCODE_MUL, 2, ARM_EXT_THUMB, do_t_arit}, - {"mvn", T_OPCODE_MVN, 2, ARM_EXT_THUMB, do_t_arit}, - {"neg", T_OPCODE_NEG, 2, ARM_EXT_THUMB, do_t_arit}, - {"orr", 0x4300, 2, ARM_EXT_THUMB, do_t_arit}, - {"pop", 0xbc00, 2, ARM_EXT_THUMB, do_t_push_pop}, - {"push", 0xb400, 2, ARM_EXT_THUMB, do_t_push_pop}, - {"ror", 0x41c0, 2, ARM_EXT_THUMB, do_t_arit}, - {"sbc", 0x4180, 2, ARM_EXT_THUMB, do_t_arit}, - {"stmia", 0xc000, 2, ARM_EXT_THUMB, do_t_ldmstm}, - {"str", 0x0000, 2, ARM_EXT_THUMB, do_t_str}, - {"strb", 0x0000, 2, ARM_EXT_THUMB, do_t_strb}, - {"strh", 0x0000, 2, ARM_EXT_THUMB, do_t_strh}, - {"swi", 0xdf00, 2, ARM_EXT_THUMB, do_t_swi}, - {"sub", 0x0000, 2, ARM_EXT_THUMB, do_t_sub}, - {"tst", T_OPCODE_TST, 2, ARM_EXT_THUMB, do_t_arit}, - /* Pseudo ops: */ - {"adr", 0x0000, 2, ARM_EXT_THUMB, do_t_adr}, - {"nop", 0x46C0, 2, ARM_EXT_THUMB, do_t_nop}, /* mov r8,r8 */ -}; - -struct reg_entry -{ - CONST char * name; - int number; -}; - -#define int_register(reg) ((reg) >= 0 && (reg) <= 15) -#define cp_register(reg) ((reg) >= 32 && (reg) <= 47) -#define fp_register(reg) ((reg) >= 16 && (reg) <= 23) - -#define REG_PC 15 -#define REG_LR 14 -#define REG_SP 13 - -/* These are the standard names. Users can add aliases with .req. */ -static CONST struct reg_entry reg_table[] = -{ - /* Processor Register Numbers. */ - {"r0", 0}, {"r1", 1}, {"r2", 2}, {"r3", 3}, - {"r4", 4}, {"r5", 5}, {"r6", 6}, {"r7", 7}, - {"r8", 8}, {"r9", 9}, {"r10", 10}, {"r11", 11}, - {"r12", 12}, {"r13", REG_SP},{"r14", REG_LR},{"r15", REG_PC}, - /* APCS conventions. */ - {"a1", 0}, {"a2", 1}, {"a3", 2}, {"a4", 3}, - {"v1", 4}, {"v2", 5}, {"v3", 6}, {"v4", 7}, {"v5", 8}, - {"v6", 9}, {"sb", 9}, {"v7", 10}, {"sl", 10}, - {"fp", 11}, {"ip", 12}, {"sp", REG_SP},{"lr", REG_LR},{"pc", REG_PC}, - /* ATPCS additions to APCS conventions. */ - {"wr", 7}, {"v8", 11}, - /* FP Registers. */ - {"f0", 16}, {"f1", 17}, {"f2", 18}, {"f3", 19}, - {"f4", 20}, {"f5", 21}, {"f6", 22}, {"f7", 23}, - {"c0", 32}, {"c1", 33}, {"c2", 34}, {"c3", 35}, - {"c4", 36}, {"c5", 37}, {"c6", 38}, {"c7", 39}, - {"c8", 40}, {"c9", 41}, {"c10", 42}, {"c11", 43}, - {"c12", 44}, {"c13", 45}, {"c14", 46}, {"c15", 47}, - {"cr0", 32}, {"cr1", 33}, {"cr2", 34}, {"cr3", 35}, - {"cr4", 36}, {"cr5", 37}, {"cr6", 38}, {"cr7", 39}, - {"cr8", 40}, {"cr9", 41}, {"cr10", 42}, {"cr11", 43}, - {"cr12", 44}, {"cr13", 45}, {"cr14", 46}, {"cr15", 47}, - /* ATPCS additions to float register names. */ - {"s0",16}, {"s1",17}, {"s2",18}, {"s3",19}, - {"s4",20}, {"s5",21}, {"s6",22}, {"s7",23}, - {"d0",16}, {"d1",17}, {"d2",18}, {"d3",19}, - {"d4",20}, {"d5",21}, {"d6",22}, {"d7",23}, - /* FIXME: At some point we need to add VFP register names. */ - /* Array terminator. */ - {NULL, 0} -}; - -#define BAD_ARGS _("Bad arguments to instruction") -#define BAD_PC _("r15 not allowed here") -#define BAD_FLAGS _("Instruction should not have flags") -#define BAD_COND _("Instruction is not conditional") -#define ERR_NO_ACCUM _("acc0 expected") - -static struct hash_control * arm_ops_hsh = NULL; -static struct hash_control * arm_tops_hsh = NULL; -static struct hash_control * arm_cond_hsh = NULL; -static struct hash_control * arm_shift_hsh = NULL; -static struct hash_control * arm_reg_hsh = NULL; -static struct hash_control * arm_psr_hsh = NULL; - -/* This table describes all the machine specific pseudo-ops the assembler - has to support. The fields are: - pseudo-op name without dot - function to call to execute this pseudo-op - Integer arg to pass to the function. */ - -static void s_req PARAMS ((int)); -static void s_align PARAMS ((int)); -static void s_bss PARAMS ((int)); -static void s_even PARAMS ((int)); -static void s_ltorg PARAMS ((int)); -static void s_arm PARAMS ((int)); -static void s_thumb PARAMS ((int)); -static void s_code PARAMS ((int)); -static void s_force_thumb PARAMS ((int)); -static void s_thumb_func PARAMS ((int)); -static void s_thumb_set PARAMS ((int)); -static void arm_s_text PARAMS ((int)); -static void arm_s_data PARAMS ((int)); -#ifdef OBJ_ELF -static void arm_s_section PARAMS ((int)); -static void s_arm_elf_cons PARAMS ((int)); -#endif - -static int my_get_expression PARAMS ((expressionS *, char **)); - -CONST pseudo_typeS md_pseudo_table[] = -{ - /* Never called becasue '.req' does not start line. */ - { "req", s_req, 0 }, - { "bss", s_bss, 0 }, - { "align", s_align, 0 }, - { "arm", s_arm, 0 }, - { "thumb", s_thumb, 0 }, - { "code", s_code, 0 }, - { "force_thumb", s_force_thumb, 0 }, - { "thumb_func", s_thumb_func, 0 }, - { "thumb_set", s_thumb_set, 0 }, - { "even", s_even, 0 }, - { "ltorg", s_ltorg, 0 }, - { "pool", s_ltorg, 0 }, - /* Allow for the effect of section changes. */ - { "text", arm_s_text, 0 }, - { "data", arm_s_data, 0 }, -#ifdef OBJ_ELF - { "section", arm_s_section, 0 }, - { "section.s", arm_s_section, 0 }, - { "sect", arm_s_section, 0 }, - { "sect.s", arm_s_section, 0 }, - { "word", s_arm_elf_cons, 4 }, - { "long", s_arm_elf_cons, 4 }, - { "file", dwarf2_directive_file, 0 }, - { "loc", dwarf2_directive_loc, 0 }, -#else - { "word", cons, 4}, -#endif - { "extend", float_cons, 'x' }, - { "ldouble", float_cons, 'x' }, - { "packed", float_cons, 'p' }, - { 0, 0, 0 } -}; - -/* Stuff needed to resolve the label ambiguity - As: - ... - label: <insn> - may differ from: - ... - label: - <insn> -*/ - -symbolS * last_label_seen; -static int label_is_thumb_function_name = false; - -/* Literal stuff. */ - -#define MAX_LITERAL_POOL_SIZE 1024 - -typedef struct literalS -{ - struct expressionS exp; - struct arm_it * inst; -} literalT; - -literalT literals[MAX_LITERAL_POOL_SIZE]; - -/* Next free entry in the pool. */ -int next_literal_pool_place = 0; - -/* Next literal pool number. */ -int lit_pool_num = 1; - -symbolS * current_poolP = NULL; - -static int -add_to_lit_pool () -{ - int lit_count = 0; - - if (current_poolP == NULL) - current_poolP = symbol_create (FAKE_LABEL_NAME, undefined_section, - (valueT) 0, &zero_address_frag); - - /* Check if this literal value is already in the pool: */ - while (lit_count < next_literal_pool_place) - { - if (literals[lit_count].exp.X_op == inst.reloc.exp.X_op - && inst.reloc.exp.X_op == O_constant - && (literals[lit_count].exp.X_add_number - == inst.reloc.exp.X_add_number) - && literals[lit_count].exp.X_unsigned == inst.reloc.exp.X_unsigned) - break; - - if (literals[lit_count].exp.X_op == inst.reloc.exp.X_op - && inst.reloc.exp.X_op == O_symbol - && (literals[lit_count].exp.X_add_number - == inst.reloc.exp.X_add_number) - && (literals[lit_count].exp.X_add_symbol - == inst.reloc.exp.X_add_symbol) - && (literals[lit_count].exp.X_op_symbol - == inst.reloc.exp.X_op_symbol)) - break; - - lit_count++; - } - - if (lit_count == next_literal_pool_place) /* New entry. */ - { - if (next_literal_pool_place >= MAX_LITERAL_POOL_SIZE) - { - inst.error = _("Literal Pool Overflow"); - return FAIL; - } - - literals[next_literal_pool_place].exp = inst.reloc.exp; - lit_count = next_literal_pool_place++; - } - - inst.reloc.exp.X_op = O_symbol; - inst.reloc.exp.X_add_number = (lit_count) * 4 - 8; - inst.reloc.exp.X_add_symbol = current_poolP; - - return SUCCESS; -} - -/* Can't use symbol_new here, so have to create a symbol and then at - a later date assign it a value. Thats what these functions do. */ - -static void -symbol_locate (symbolP, name, segment, valu, frag) - symbolS * symbolP; - CONST char * name; /* It is copied, the caller can modify. */ - segT segment; /* Segment identifier (SEG_<something>). */ - valueT valu; /* Symbol value. */ - fragS * frag; /* Associated fragment. */ -{ - unsigned int name_length; - char * preserved_copy_of_name; - - name_length = strlen (name) + 1; /* +1 for \0. */ - obstack_grow (¬es, name, name_length); - preserved_copy_of_name = obstack_finish (¬es); -#ifdef STRIP_UNDERSCORE - if (preserved_copy_of_name[0] == '_') - preserved_copy_of_name++; -#endif - -#ifdef tc_canonicalize_symbol_name - preserved_copy_of_name = - tc_canonicalize_symbol_name (preserved_copy_of_name); -#endif - - S_SET_NAME (symbolP, preserved_copy_of_name); - - S_SET_SEGMENT (symbolP, segment); - S_SET_VALUE (symbolP, valu); - symbol_clear_list_pointers(symbolP); - - symbol_set_frag (symbolP, frag); - - /* Link to end of symbol chain. */ - { - extern int symbol_table_frozen; - if (symbol_table_frozen) - abort (); - } - - symbol_append (symbolP, symbol_lastP, & symbol_rootP, & symbol_lastP); - - obj_symbol_new_hook (symbolP); - -#ifdef tc_symbol_new_hook - tc_symbol_new_hook (symbolP); -#endif - -#ifdef DEBUG_SYMS - verify_symbol_chain (symbol_rootP, symbol_lastP); -#endif /* DEBUG_SYMS */ -} - -/* Check that an immediate is valid. - If so, convert it to the right format. */ - -static unsigned int -validate_immediate (val) - unsigned int val; -{ - unsigned int a; - unsigned int i; - -#define rotate_left(v, n) (v << n | v >> (32 - n)) - - for (i = 0; i < 32; i += 2) - if ((a = rotate_left (val, i)) <= 0xff) - return a | (i << 7); /* 12-bit pack: [shift-cnt,const]. */ - - return FAIL; -} - -/* Check to see if an immediate can be computed as two seperate immediate - values, added together. We already know that this value cannot be - computed by just one ARM instruction. */ - -static unsigned int -validate_immediate_twopart (val, highpart) - unsigned int val; - unsigned int * highpart; -{ - unsigned int a; - unsigned int i; - - for (i = 0; i < 32; i += 2) - if (((a = rotate_left (val, i)) & 0xff) != 0) - { - if (a & 0xff00) - { - if (a & ~ 0xffff) - continue; - * highpart = (a >> 8) | ((i + 24) << 7); - } - else if (a & 0xff0000) - { - if (a & 0xff000000) - continue; - * highpart = (a >> 16) | ((i + 16) << 7); - } - else - { - assert (a & 0xff000000); - * highpart = (a >> 24) | ((i + 8) << 7); - } - - return (a & 0xff) | (i << 7); - } - - return FAIL; -} - -static int -validate_offset_imm (val, hwse) - unsigned int val; - int hwse; -{ - if ((hwse && val > 255) || val > 4095) - return FAIL; - return val; -} - -static void -s_req (a) - int a ATTRIBUTE_UNUSED; -{ - as_bad (_("Invalid syntax for .req directive.")); -} - -static void -s_bss (ignore) - int ignore ATTRIBUTE_UNUSED; -{ - /* We don't support putting frags in the BSS segment, we fake it by - marking in_bss, then looking at s_skip for clues. */ - subseg_set (bss_section, 0); - demand_empty_rest_of_line (); -} - -static void -s_even (ignore) - int ignore ATTRIBUTE_UNUSED; -{ - /* Never make frag if expect extra pass. */ - if (!need_pass_2) - frag_align (1, 0, 0); - - record_alignment (now_seg, 1); - - demand_empty_rest_of_line (); -} - -static void -s_ltorg (ignored) - int ignored ATTRIBUTE_UNUSED; -{ - int lit_count = 0; - char sym_name[20]; - - if (current_poolP == NULL) - return; - - /* Align pool as you have word accesses. - Only make a frag if we have to. */ - if (!need_pass_2) - frag_align (2, 0, 0); - - record_alignment (now_seg, 2); - - sprintf (sym_name, "$$lit_\002%x", lit_pool_num++); - - symbol_locate (current_poolP, sym_name, now_seg, - (valueT) frag_now_fix (), frag_now); - symbol_table_insert (current_poolP); - - ARM_SET_THUMB (current_poolP, thumb_mode); - -#if defined OBJ_COFF || defined OBJ_ELF - ARM_SET_INTERWORK (current_poolP, support_interwork); -#endif - - while (lit_count < next_literal_pool_place) - /* First output the expression in the instruction to the pool. */ - emit_expr (&(literals[lit_count++].exp), 4); /* .word */ - - next_literal_pool_place = 0; - current_poolP = NULL; -} - -/* Same as s_align_ptwo but align 0 => align 2. */ - -static void -s_align (unused) - int unused ATTRIBUTE_UNUSED; -{ - register int temp; - register long temp_fill; - long max_alignment = 15; - - temp = get_absolute_expression (); - if (temp > max_alignment) - as_bad (_("Alignment too large: %d. assumed."), temp = max_alignment); - else if (temp < 0) - { - as_bad (_("Alignment negative. 0 assumed.")); - temp = 0; - } - - if (*input_line_pointer == ',') - { - input_line_pointer++; - temp_fill = get_absolute_expression (); - } - else - temp_fill = 0; - - if (!temp) - temp = 2; - - /* Only make a frag if we HAVE to. */ - if (temp && !need_pass_2) - frag_align (temp, (int) temp_fill, 0); - demand_empty_rest_of_line (); - - record_alignment (now_seg, temp); -} - -static void -s_force_thumb (ignore) - int ignore ATTRIBUTE_UNUSED; -{ - /* If we are not already in thumb mode go into it, EVEN if - the target processor does not support thumb instructions. - This is used by gcc/config/arm/lib1funcs.asm for example - to compile interworking support functions even if the - target processor should not support interworking. */ - if (! thumb_mode) - { - thumb_mode = 2; - - record_alignment (now_seg, 1); - } - - demand_empty_rest_of_line (); -} - -static void -s_thumb_func (ignore) - int ignore ATTRIBUTE_UNUSED; -{ - if (! thumb_mode) - opcode_select (16); - - /* The following label is the name/address of the start of a Thumb function. - We need to know this for the interworking support. */ - label_is_thumb_function_name = true; - - demand_empty_rest_of_line (); -} - -/* Perform a .set directive, but also mark the alias as - being a thumb function. */ - -static void -s_thumb_set (equiv) - int equiv; -{ - /* XXX the following is a duplicate of the code for s_set() in read.c - We cannot just call that code as we need to get at the symbol that - is created. */ - register char * name; - register char delim; - register char * end_name; - register symbolS * symbolP; - - /* Especial apologies for the random logic: - This just grew, and could be parsed much more simply! - Dean - in haste. */ - name = input_line_pointer; - delim = get_symbol_end (); - end_name = input_line_pointer; - *end_name = delim; - - SKIP_WHITESPACE (); - - if (*input_line_pointer != ',') - { - *end_name = 0; - as_bad (_("Expected comma after name \"%s\""), name); - *end_name = delim; - ignore_rest_of_line (); - return; - } - - input_line_pointer++; - *end_name = 0; - - if (name[0] == '.' && name[1] == '\0') - { - /* XXX - this should not happen to .thumb_set. */ - abort (); - } - - if ((symbolP = symbol_find (name)) == NULL - && (symbolP = md_undefined_symbol (name)) == NULL) - { -#ifndef NO_LISTING - /* When doing symbol listings, play games with dummy fragments living - outside the normal fragment chain to record the file and line info - for this symbol. */ - if (listing & LISTING_SYMBOLS) - { - extern struct list_info_struct * listing_tail; - fragS * dummy_frag = (fragS *) xmalloc (sizeof (fragS)); - - memset (dummy_frag, 0, sizeof (fragS)); - dummy_frag->fr_type = rs_fill; - dummy_frag->line = listing_tail; - symbolP = symbol_new (name, undefined_section, 0, dummy_frag); - dummy_frag->fr_symbol = symbolP; - } - else -#endif - symbolP = symbol_new (name, undefined_section, 0, &zero_address_frag); - -#ifdef OBJ_COFF - /* "set" symbols are local unless otherwise specified. */ - SF_SET_LOCAL (symbolP); -#endif /* OBJ_COFF */ - } /* Make a new symbol. */ - - symbol_table_insert (symbolP); - - * end_name = delim; - - if (equiv - && S_IS_DEFINED (symbolP) - && S_GET_SEGMENT (symbolP) != reg_section) - as_bad (_("symbol `%s' already defined"), S_GET_NAME (symbolP)); - - pseudo_set (symbolP); - - demand_empty_rest_of_line (); - - /* XXX Now we come to the Thumb specific bit of code. */ - - THUMB_SET_FUNC (symbolP, 1); - ARM_SET_THUMB (symbolP, 1); -#if defined OBJ_ELF || defined OBJ_COFF - ARM_SET_INTERWORK (symbolP, support_interwork); -#endif -} - -/* If we change section we must dump the literal pool first. */ - -static void -arm_s_text (ignore) - int ignore; -{ - if (now_seg != text_section) - s_ltorg (0); - -#ifdef OBJ_ELF - obj_elf_text (ignore); -#else - s_text (ignore); -#endif -} - -static void -arm_s_data (ignore) - int ignore; -{ - if (flag_readonly_data_in_text) - { - if (now_seg != text_section) - s_ltorg (0); - } - else if (now_seg != data_section) - s_ltorg (0); - -#ifdef OBJ_ELF - obj_elf_data (ignore); -#else - s_data (ignore); -#endif -} - -#ifdef OBJ_ELF -static void -arm_s_section (ignore) - int ignore; -{ - s_ltorg (0); - - obj_elf_section (ignore); -} -#endif - -static void -opcode_select (width) - int width; -{ - switch (width) - { - case 16: - if (! thumb_mode) - { - if (! (cpu_variant & ARM_EXT_THUMB)) - as_bad (_("selected processor does not support THUMB opcodes")); - - thumb_mode = 1; - /* No need to force the alignment, since we will have been - coming from ARM mode, which is word-aligned. */ - record_alignment (now_seg, 1); - } - break; - - case 32: - if (thumb_mode) - { - if ((cpu_variant & ARM_ANY) == ARM_EXT_THUMB) - as_bad (_("selected processor does not support ARM opcodes")); - - thumb_mode = 0; - - if (!need_pass_2) - frag_align (2, 0, 0); - - record_alignment (now_seg, 1); - } - break; - - default: - as_bad (_("invalid instruction size selected (%d)"), width); - } -} - -static void -s_arm (ignore) - int ignore ATTRIBUTE_UNUSED; -{ - opcode_select (32); - demand_empty_rest_of_line (); -} - -static void -s_thumb (ignore) - int ignore ATTRIBUTE_UNUSED; -{ - opcode_select (16); - demand_empty_rest_of_line (); -} - -static void -s_code (unused) - int unused ATTRIBUTE_UNUSED; -{ - register int temp; - - temp = get_absolute_expression (); - switch (temp) - { - case 16: - case 32: - opcode_select (temp); - break; - - default: - as_bad (_("invalid operand to .code directive (%d) (expecting 16 or 32)"), temp); - } -} - -static void -end_of_line (str) - char * str; -{ - skip_whitespace (str); - - if (* str != '\0') - inst.error = _("Garbage following instruction"); -} - -static int -skip_past_comma (str) - char ** str; -{ - char * p = * str, c; - int comma = 0; - - while ((c = *p) == ' ' || c == ',') - { - p++; - if (c == ',' && comma++) - return FAIL; - } - - if (c == '\0') - return FAIL; - - *str = p; - return comma ? SUCCESS : FAIL; -} - -/* A standard register must be given at this point. - SHIFT is the place to put it in inst.instruction. - Restores input start point on error. - Returns the reg#, or FAIL. */ - -static int -reg_required_here (str, shift) - char ** str; - int shift; -{ - static char buff [128]; /* XXX */ - int reg; - char * start = * str; - - if ((reg = arm_reg_parse (str)) != FAIL && int_register (reg)) - { - if (shift >= 0) - inst.instruction |= reg << shift; - return reg; - } - - /* Restore the start point, we may have got a reg of the wrong class. */ - *str = start; - - /* In the few cases where we might be able to accept something else - this error can be overridden. */ - sprintf (buff, _("Register expected, not '%.100s'"), start); - inst.error = buff; - - return FAIL; -} - -static CONST struct asm_psr * -arm_psr_parse (ccp) - register char ** ccp; -{ - char * start = * ccp; - char c; - char * p; - CONST struct asm_psr * psr; - - p = start; - - /* Skip to the end of the next word in the input stream. */ - do - { - c = *p++; - } - while (isalpha (c) || c == '_'); - - /* Terminate the word. */ - *--p = 0; - - /* CPSR's and SPSR's can now be lowercase. This is just a convenience - feature for ease of use and backwards compatibility. */ - if (!strncmp (start, "cpsr", 4)) - strncpy (start, "CPSR", 4); - else if (!strncmp (start, "spsr", 4)) - strncpy (start, "SPSR", 4); - - /* Now locate the word in the psr hash table. */ - psr = (CONST struct asm_psr *) hash_find (arm_psr_hsh, start); - - /* Restore the input stream. */ - *p = c; - - /* If we found a valid match, advance the - stream pointer past the end of the word. */ - *ccp = p; - - return psr; -} - -/* Parse the input looking for a PSR flag. */ - -static int -psr_required_here (str) - char ** str; -{ - char * start = * str; - CONST struct asm_psr * psr; - - psr = arm_psr_parse (str); - - if (psr) - { - /* If this is the SPSR that is being modified, set the R bit. */ - if (! psr->cpsr) - inst.instruction |= SPSR_BIT; - - /* Set the psr flags in the MSR instruction. */ - inst.instruction |= psr->field << PSR_SHIFT; - - return SUCCESS; - } - - /* In the few cases where we might be able to accept - something else this error can be overridden. */ - inst.error = _("flag for {c}psr instruction expected"); - - /* Restore the start point. */ - *str = start; - return FAIL; -} - -static int -co_proc_number (str) - char ** str; -{ - int processor, pchar; - - skip_whitespace (* str); - - /* The data sheet seems to imply that just a number on its own is valid - here, but the RISC iX assembler seems to accept a prefix 'p'. We will - accept either. */ - if (**str == 'p' || **str == 'P') - (*str)++; - - pchar = *(*str)++; - if (pchar >= '0' && pchar <= '9') - { - processor = pchar - '0'; - if (**str >= '0' && **str <= '9') - { - processor = processor * 10 + *(*str)++ - '0'; - if (processor > 15) - { - inst.error = _("Illegal co-processor number"); - return FAIL; - } - } - } - else - { - inst.error = _("Bad or missing co-processor number"); - return FAIL; - } - - inst.instruction |= processor << 8; - return SUCCESS; -} - -static int -cp_opc_expr (str, where, length) - char ** str; - int where; - int length; -{ - expressionS expr; - - skip_whitespace (* str); - - memset (&expr, '\0', sizeof (expr)); - - if (my_get_expression (&expr, str)) - return FAIL; - if (expr.X_op != O_constant) - { - inst.error = _("bad or missing expression"); - return FAIL; - } - - if ((expr.X_add_number & ((1 << length) - 1)) != expr.X_add_number) - { - inst.error = _("immediate co-processor expression too large"); - return FAIL; - } - - inst.instruction |= expr.X_add_number << where; - return SUCCESS; -} - -static int -cp_reg_required_here (str, where) - char ** str; - int where; -{ - int reg; - char * start = *str; - - if ((reg = arm_reg_parse (str)) != FAIL && cp_register (reg)) - { - reg &= 15; - inst.instruction |= reg << where; - return reg; - } - - /* In the few cases where we might be able to accept something else - this error can be overridden. */ - inst.error = _("Co-processor register expected"); - - /* Restore the start point. */ - *str = start; - return FAIL; -} - -static int -fp_reg_required_here (str, where) - char ** str; - int where; -{ - int reg; - char * start = * str; - - if ((reg = arm_reg_parse (str)) != FAIL && fp_register (reg)) - { - reg &= 7; - inst.instruction |= reg << where; - return reg; - } - - /* In the few cases where we might be able to accept something else - this error can be overridden. */ - inst.error = _("Floating point register expected"); - - /* Restore the start point. */ - *str = start; - return FAIL; -} - -static int -cp_address_offset (str) - char ** str; -{ - int offset; - - skip_whitespace (* str); - - if (! is_immediate_prefix (**str)) - { - inst.error = _("immediate expression expected"); - return FAIL; - } - - (*str)++; - - if (my_get_expression (& inst.reloc.exp, str)) - return FAIL; - - if (inst.reloc.exp.X_op == O_constant) - { - offset = inst.reloc.exp.X_add_number; - - if (offset & 3) - { - inst.error = _("co-processor address must be word aligned"); - return FAIL; - } - - if (offset > 1023 || offset < -1023) - { - inst.error = _("offset too large"); - return FAIL; - } - - if (offset >= 0) - inst.instruction |= INDEX_UP; - else - offset = -offset; - - inst.instruction |= offset >> 2; - } - else - inst.reloc.type = BFD_RELOC_ARM_CP_OFF_IMM; - - return SUCCESS; -} - -static int -cp_address_required_here (str) - char ** str; -{ - char * p = * str; - int pre_inc = 0; - int write_back = 0; - - if (*p == '[') - { - int reg; - - p++; - skip_whitespace (p); - - if ((reg = reg_required_here (& p, 16)) == FAIL) - return FAIL; - - skip_whitespace (p); - - if (*p == ']') - { - p++; - - if (skip_past_comma (& p) == SUCCESS) - { - /* [Rn], #expr */ - write_back = WRITE_BACK; - - if (reg == REG_PC) - { - inst.error = _("pc may not be used in post-increment"); - return FAIL; - } - - if (cp_address_offset (& p) == FAIL) - return FAIL; - } - else - pre_inc = PRE_INDEX | INDEX_UP; - } - else - { - /* '['Rn, #expr']'[!] */ - - if (skip_past_comma (& p) == FAIL) - { - inst.error = _("pre-indexed expression expected"); - return FAIL; - } - - pre_inc = PRE_INDEX; - - if (cp_address_offset (& p) == FAIL) - return FAIL; - - skip_whitespace (p); - - if (*p++ != ']') - { - inst.error = _("missing ]"); - return FAIL; - } - - skip_whitespace (p); - - if (*p == '!') - { - if (reg == REG_PC) - { - inst.error = _("pc may not be used with write-back"); - return FAIL; - } - - p++; - write_back = WRITE_BACK; - } - } - } - else - { - if (my_get_expression (&inst.reloc.exp, &p)) - return FAIL; - - inst.reloc.type = BFD_RELOC_ARM_CP_OFF_IMM; - inst.reloc.exp.X_add_number -= 8; /* PC rel adjust. */ - inst.reloc.pc_rel = 1; - inst.instruction |= (REG_PC << 16); - pre_inc = PRE_INDEX; - } - - inst.instruction |= write_back | pre_inc; - *str = p; - return SUCCESS; -} - -static void -do_nop (str, flags) - char * str; - unsigned long flags; -{ - /* Do nothing really. */ - inst.instruction |= flags; /* This is pointless. */ - end_of_line (str); - return; -} - -static void -do_mrs (str, flags) - char *str; - unsigned long flags; -{ - int skip = 0; - - /* Only one syntax. */ - skip_whitespace (str); - - if (reg_required_here (&str, 12) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL) - { - inst.error = _("comma expected after register name"); - return; - } - - skip_whitespace (str); - - if ( strcmp (str, "CPSR") == 0 - || strcmp (str, "SPSR") == 0 - /* Lower case versions for backwards compatability. */ - || strcmp (str, "cpsr") == 0 - || strcmp (str, "spsr") == 0) - skip = 4; - - /* This is for backwards compatability with older toolchains. */ - else if ( strcmp (str, "cpsr_all") == 0 - || strcmp (str, "spsr_all") == 0) - skip = 8; - else - { - inst.error = _("{C|S}PSR expected"); - return; - } - - if (* str == 's' || * str == 'S') - inst.instruction |= SPSR_BIT; - str += skip; - - inst.instruction |= flags; - end_of_line (str); -} - -/* Two possible forms: - "{C|S}PSR_<field>, Rm", - "{C|S}PSR_f, #expression". */ - -static void -do_msr (str, flags) - char * str; - unsigned long flags; -{ - skip_whitespace (str); - - if (psr_required_here (& str) == FAIL) - return; - - if (skip_past_comma (& str) == FAIL) - { - inst.error = _("comma missing after psr flags"); - return; - } - - skip_whitespace (str); - - if (reg_required_here (& str, 0) != FAIL) - { - inst.error = NULL; - inst.instruction |= flags; - end_of_line (str); - return; - } - - if (! is_immediate_prefix (* str)) - { - inst.error = - _("only a register or immediate value can follow a psr flag"); - return; - } - - str ++; - inst.error = NULL; - - if (my_get_expression (& inst.reloc.exp, & str)) - { - inst.error = - _("only a register or immediate value can follow a psr flag"); - return; - } - -#if 0 /* The first edition of the ARM architecture manual stated that - writing anything other than the flags with an immediate operation - had UNPREDICTABLE effects. This constraint was removed in the - second edition of the specification. */ - if ((cpu_variant & ARM_EXT_V5) != ARM_EXT_V5 - && inst.instruction & ((PSR_c | PSR_x | PSR_s) << PSR_SHIFT)) - { - inst.error = _("immediate value cannot be used to set this field"); - return; - } -#endif - - flags |= INST_IMMEDIATE; - - if (inst.reloc.exp.X_add_symbol) - { - inst.reloc.type = BFD_RELOC_ARM_IMMEDIATE; - inst.reloc.pc_rel = 0; - } - else - { - unsigned value = validate_immediate (inst.reloc.exp.X_add_number); - - if (value == (unsigned) FAIL) - { - inst.error = _("Invalid constant"); - return; - } - - inst.instruction |= value; - } - - inst.error = NULL; - inst.instruction |= flags; - end_of_line (str); -} - -/* Long Multiply Parser - UMULL RdLo, RdHi, Rm, Rs - SMULL RdLo, RdHi, Rm, Rs - UMLAL RdLo, RdHi, Rm, Rs - SMLAL RdLo, RdHi, Rm, Rs. */ - -static void -do_mull (str, flags) - char * str; - unsigned long flags; -{ - int rdlo, rdhi, rm, rs; - - /* Only one format "rdlo, rdhi, rm, rs". */ - skip_whitespace (str); - - if ((rdlo = reg_required_here (&str, 12)) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || (rdhi = reg_required_here (&str, 16)) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || (rm = reg_required_here (&str, 0)) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - /* rdhi, rdlo and rm must all be different. */ - if (rdlo == rdhi || rdlo == rm || rdhi == rm) - as_tsktsk (_("rdhi, rdlo and rm must all be different")); - - if (skip_past_comma (&str) == FAIL - || (rs = reg_required_here (&str, 8)) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - if (rdhi == REG_PC || rdhi == REG_PC || rdhi == REG_PC || rdhi == REG_PC) - { - inst.error = BAD_PC; - return; - } - - inst.instruction |= flags; - end_of_line (str); - return; -} - -static void -do_mul (str, flags) - char * str; - unsigned long flags; -{ - int rd, rm; - - /* Only one format "rd, rm, rs". */ - skip_whitespace (str); - - if ((rd = reg_required_here (&str, 16)) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - if (rd == REG_PC) - { - inst.error = BAD_PC; - return; - } - - if (skip_past_comma (&str) == FAIL - || (rm = reg_required_here (&str, 0)) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - if (rm == REG_PC) - { - inst.error = BAD_PC; - return; - } - - if (rm == rd) - as_tsktsk (_("rd and rm should be different in mul")); - - if (skip_past_comma (&str) == FAIL - || (rm = reg_required_here (&str, 8)) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - if (rm == REG_PC) - { - inst.error = BAD_PC; - return; - } - - inst.instruction |= flags; - end_of_line (str); - return; -} - -static void -do_mla (str, flags) - char * str; - unsigned long flags; -{ - int rd, rm; - - /* Only one format "rd, rm, rs, rn". */ - skip_whitespace (str); - - if ((rd = reg_required_here (&str, 16)) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - if (rd == REG_PC) - { - inst.error = BAD_PC; - return; - } - - if (skip_past_comma (&str) == FAIL - || (rm = reg_required_here (&str, 0)) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - if (rm == REG_PC) - { - inst.error = BAD_PC; - return; - } - - if (rm == rd) - as_tsktsk (_("rd and rm should be different in mla")); - - if (skip_past_comma (&str) == FAIL - || (rd = reg_required_here (&str, 8)) == FAIL - || skip_past_comma (&str) == FAIL - || (rm = reg_required_here (&str, 12)) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - if (rd == REG_PC || rm == REG_PC) - { - inst.error = BAD_PC; - return; - } - - inst.instruction |= flags; - end_of_line (str); - return; -} - -/* Expects *str -> the characters "acc0", possibly with leading blanks. - Advances *str to the next non-alphanumeric. - Returns 0, or else FAIL (in which case sets inst.error). - - (In a future XScale, there may be accumulators other than zero. - At that time this routine and its callers can be upgraded to suit.) */ - -static int -accum0_required_here (str) - char ** str; -{ - static char buff [128]; /* Note the address is taken. Hence, static. */ - char * p = * str; - char c; - int result = 0; /* The accum number. */ - - skip_whitespace (p); - - *str = p; /* Advance caller's string pointer too. */ - c = *p++; - while (isalnum (c)) - c = *p++; - - *--p = 0; /* Aap nul into input buffer at non-alnum. */ - - if (! ( streq (*str, "acc0") || streq (*str, "ACC0"))) - { - sprintf (buff, _("acc0 expected, not '%.100s'"), *str); - inst.error = buff; - result = FAIL; - } - - *p = c; /* Unzap. */ - *str = p; /* Caller's string pointer to after match. */ - return result; -} - -/* Expects **str -> after a comma. May be leading blanks. - Advances *str, recognizing a load mode, and setting inst.instruction. - Returns rn, or else FAIL (in which case may set inst.error - and not advance str) - - Note: doesn't know Rd, so no err checks that require such knowledge. */ - -static int -ld_mode_required_here (string) - char ** string; -{ - char * str = * string; - int rn; - int pre_inc = 0; - - skip_whitespace (str); - - if (* str == '[') - { - str++; - - skip_whitespace (str); - - if ((rn = reg_required_here (& str, 16)) == FAIL) - return FAIL; - - skip_whitespace (str); - - if (* str == ']') - { - str ++; - - if (skip_past_comma (& str) == SUCCESS) - { - /* [Rn],... (post inc) */ - if (ldst_extend (& str, 1) == FAIL) - return FAIL; - } - else /* [Rn] */ - { - skip_whitespace (str); - - if (* str == '!') - { - str ++; - inst.instruction |= WRITE_BACK; - } - - inst.instruction |= INDEX_UP | HWOFFSET_IMM; - pre_inc = 1; - } - } - else /* [Rn,...] */ - { - if (skip_past_comma (& str) == FAIL) - { - inst.error = _("pre-indexed expression expected"); - return FAIL; - } - - pre_inc = 1; - - if (ldst_extend (& str, 1) == FAIL) - return FAIL; - - skip_whitespace (str); - - if (* str ++ != ']') - { - inst.error = _("missing ]"); - return FAIL; - } - - skip_whitespace (str); - - if (* str == '!') - { - str ++; - inst.instruction |= WRITE_BACK; - } - } - } - else if (* str == '=') /* ldr's "r,=label" syntax */ - /* We should never reach here, because <text> = <expression> is - caught gas/read.c read_a_source_file() as a .set operation. */ - return FAIL; - else /* PC +- 8 bit immediate offset. */ - { - if (my_get_expression (& inst.reloc.exp, & str)) - return FAIL; - - inst.instruction |= HWOFFSET_IMM; /* The I bit. */ - inst.reloc.type = BFD_RELOC_ARM_OFFSET_IMM8; - inst.reloc.exp.X_add_number -= 8; /* PC rel adjust. */ - inst.reloc.pc_rel = 1; - inst.instruction |= (REG_PC << 16); - - rn = REG_PC; - pre_inc = 1; - } - - inst.instruction |= (pre_inc ? PRE_INDEX : 0); - * string = str; - - return rn; -} - -/* ARM V5E (El Segundo) signed-multiply-accumulate (argument parse) - SMLAxy{cond} Rd,Rm,Rs,Rn - SMLAWy{cond} Rd,Rm,Rs,Rn - Error if any register is R15. */ - -static void -do_smla (str, flags) - char * str; - unsigned long flags; -{ - int rd, rm, rs, rn; - - skip_whitespace (str); - - if ((rd = reg_required_here (& str, 16)) == FAIL - || skip_past_comma (& str) == FAIL - || (rm = reg_required_here (& str, 0)) == FAIL - || skip_past_comma (& str) == FAIL - || (rs = reg_required_here (& str, 8)) == FAIL - || skip_past_comma (& str) == FAIL - || (rn = reg_required_here (& str, 12)) == FAIL) - inst.error = BAD_ARGS; - - else if (rd == REG_PC || rm == REG_PC || rs == REG_PC || rn == REG_PC) - inst.error = BAD_PC; - - else if (flags) - inst.error = BAD_FLAGS; - - else - end_of_line (str); -} - -/* ARM V5E (El Segundo) signed-multiply-accumulate-long (argument parse) - SMLALxy{cond} Rdlo,Rdhi,Rm,Rs - Error if any register is R15. - Warning if Rdlo == Rdhi. */ - -static void -do_smlal (str, flags) - char * str; - unsigned long flags; -{ - int rdlo, rdhi, rm, rs; - - skip_whitespace (str); - - if ((rdlo = reg_required_here (& str, 12)) == FAIL - || skip_past_comma (& str) == FAIL - || (rdhi = reg_required_here (& str, 16)) == FAIL - || skip_past_comma (& str) == FAIL - || (rm = reg_required_here (& str, 0)) == FAIL - || skip_past_comma (& str) == FAIL - || (rs = reg_required_here (& str, 8)) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - if (rdlo == REG_PC || rdhi == REG_PC || rm == REG_PC || rs == REG_PC) - { - inst.error = BAD_PC; - return; - } - - if (rdlo == rdhi) - as_tsktsk (_("rdhi and rdlo must be different")); - - if (flags) - inst.error = BAD_FLAGS; - else - end_of_line (str); -} - -/* ARM V5E (El Segundo) signed-multiply (argument parse) - SMULxy{cond} Rd,Rm,Rs - Error if any register is R15. */ - -static void -do_smul (str, flags) - char * str; - unsigned long flags; -{ - int rd, rm, rs; - - skip_whitespace (str); - - if ((rd = reg_required_here (& str, 16)) == FAIL - || skip_past_comma (& str) == FAIL - || (rm = reg_required_here (& str, 0)) == FAIL - || skip_past_comma (& str) == FAIL - || (rs = reg_required_here (& str, 8)) == FAIL) - inst.error = BAD_ARGS; - - else if (rd == REG_PC || rm == REG_PC || rs == REG_PC) - inst.error = BAD_PC; - - else if (flags) - inst.error = BAD_FLAGS; - - else - end_of_line (str); -} - -/* ARM V5E (El Segundo) saturating-add/subtract (argument parse) - Q[D]{ADD,SUB}{cond} Rd,Rm,Rn - Error if any register is R15. */ - -static void -do_qadd (str, flags) - char * str; - unsigned long flags; -{ - int rd, rm, rn; - - skip_whitespace (str); - - if ((rd = reg_required_here (& str, 12)) == FAIL - || skip_past_comma (& str) == FAIL - || (rm = reg_required_here (& str, 0)) == FAIL - || skip_past_comma (& str) == FAIL - || (rn = reg_required_here (& str, 16)) == FAIL) - inst.error = BAD_ARGS; - - else if (rd == REG_PC || rm == REG_PC || rn == REG_PC) - inst.error = BAD_PC; - - else if (flags) - inst.error = BAD_FLAGS; - - else - end_of_line (str); -} - -/* ARM V5E (el Segundo) - MCRRcc <coproc>, <opcode>, <Rd>, <Rn>, <CRm>. - MRRCcc <coproc>, <opcode>, <Rd>, <Rn>, <CRm>. - - These are equivalent to the XScale instructions MAR and MRA, - respectively, when coproc == 0, opcode == 0, and CRm == 0. - - Result unpredicatable if Rd or Rn is R15. */ - -static void -do_co_reg2c (str, flags) - char * str; - unsigned long flags; -{ - int rd, rn; - - skip_whitespace (str); - - if (co_proc_number (& str) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == FAIL - || cp_opc_expr (& str, 4, 4) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == FAIL - || (rd = reg_required_here (& str, 12)) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == FAIL - || (rn = reg_required_here (& str, 16)) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - /* Unpredictable result if rd or rn is R15. */ - if (rd == REG_PC || rn == REG_PC) - as_tsktsk - (_("Warning: Instruction unpredictable when using r15")); - - if (skip_past_comma (& str) == FAIL - || cp_reg_required_here (& str, 0) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (flags) - inst.error = BAD_COND; - - end_of_line (str); -} - -/* ARM V5 count-leading-zeroes instruction (argument parse) - CLZ{<cond>} <Rd>, <Rm> - Condition defaults to COND_ALWAYS. - Error if Rd or Rm are R15. */ - -static void -do_clz (str, flags) - char * str; - unsigned long flags; -{ - int rd, rm; - - if (flags) - { - as_bad (BAD_FLAGS); - return; - } - - skip_whitespace (str); - - if (((rd = reg_required_here (& str, 12)) == FAIL) - || (skip_past_comma (& str) == FAIL) - || ((rm = reg_required_here (& str, 0)) == FAIL)) - inst.error = BAD_ARGS; - - else if (rd == REG_PC || rm == REG_PC ) - inst.error = BAD_PC; - - else - end_of_line (str); -} - -/* ARM V5 (argument parse) - LDC2{L} <coproc>, <CRd>, <addressing mode> - STC2{L} <coproc>, <CRd>, <addressing mode> - Instruction is not conditional, and has 0xf in the codition field. - Otherwise, it's the same as LDC/STC. */ - -static void -do_lstc2 (str, flags) - char * str; - unsigned long flags; -{ - if (flags) - inst.error = BAD_COND; - - skip_whitespace (str); - - if (co_proc_number (& str) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - } - else if (skip_past_comma (& str) == FAIL - || cp_reg_required_here (& str, 12) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - } - else if (skip_past_comma (& str) == FAIL - || cp_address_required_here (& str) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - } - else - end_of_line (str); -} - -/* ARM V5 (argument parse) - CDP2 <coproc>, <opcode_1>, <CRd>, <CRn>, <CRm>, <opcode_2> - Instruction is not conditional, and has 0xf in the condition field. - Otherwise, it's the same as CDP. */ - -static void -do_cdp2 (str, flags) - char * str; - unsigned long flags; -{ - skip_whitespace (str); - - if (co_proc_number (& str) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == FAIL - || cp_opc_expr (& str, 20,4) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == FAIL - || cp_reg_required_here (& str, 12) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == FAIL - || cp_reg_required_here (& str, 16) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == FAIL - || cp_reg_required_here (& str, 0) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == SUCCESS) - { - if (cp_opc_expr (& str, 5, 3) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - } - - if (flags) - inst.error = BAD_FLAGS; - - end_of_line (str); -} - -/* ARM V5 (argument parse) - MCR2 <coproc>, <opcode_1>, <Rd>, <CRn>, <CRm>, <opcode_2> - MRC2 <coproc>, <opcode_1>, <Rd>, <CRn>, <CRm>, <opcode_2> - Instruction is not conditional, and has 0xf in the condition field. - Otherwise, it's the same as MCR/MRC. */ - -static void -do_co_reg2 (str, flags) - char * str; - unsigned long flags; -{ - skip_whitespace (str); - - if (co_proc_number (& str) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == FAIL - || cp_opc_expr (& str, 21, 3) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == FAIL - || reg_required_here (& str, 12) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == FAIL - || cp_reg_required_here (& str, 16) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == FAIL - || cp_reg_required_here (& str, 0) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == SUCCESS) - { - if (cp_opc_expr (& str, 5, 3) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - } - - if (flags) - inst.error = BAD_COND; - - end_of_line (str); -} - -/* THUMB V5 breakpoint instruction (argument parse) - BKPT <immed_8>. */ - -static void -do_t_bkpt (str) - char * str; -{ - expressionS expr; - unsigned long number; - - skip_whitespace (str); - - /* Allow optional leading '#'. */ - if (is_immediate_prefix (*str)) - str ++; - - memset (& expr, '\0', sizeof (expr)); - if (my_get_expression (& expr, & str) || (expr.X_op != O_constant)) - { - inst.error = _("bad or missing expression"); - return; - } - - number = expr.X_add_number; - - /* Check it fits an 8 bit unsigned. */ - if (number != (number & 0xff)) - { - inst.error = _("immediate value out of range"); - return; - } - - inst.instruction |= number; - - end_of_line (str); -} - -/* ARM V5 branch-link-exchange (argument parse) for BLX(1) only. - Expects inst.instruction is set for BLX(1). - Note: this is cloned from do_branch, and the reloc changed to be a - new one that can cope with setting one extra bit (the H bit). */ - -static void -do_branch25 (str, flags) - char * str; - unsigned long flags ATTRIBUTE_UNUSED; -{ - if (my_get_expression (& inst.reloc.exp, & str)) - return; - -#ifdef OBJ_ELF - { - char * save_in; - - /* ScottB: February 5, 1998 */ - /* Check to see of PLT32 reloc required for the instruction. */ - - /* arm_parse_reloc() works on input_line_pointer. - We actually want to parse the operands to the branch instruction - passed in 'str'. Save the input pointer and restore it later. */ - save_in = input_line_pointer; - input_line_pointer = str; - - if (inst.reloc.exp.X_op == O_symbol - && *str == '(' - && arm_parse_reloc () == BFD_RELOC_ARM_PLT32) - { - inst.reloc.type = BFD_RELOC_ARM_PLT32; - inst.reloc.pc_rel = 0; - /* Modify str to point to after parsed operands, otherwise - end_of_line() will complain about the (PLT) left in str. */ - str = input_line_pointer; - } - else - { - inst.reloc.type = BFD_RELOC_ARM_PCREL_BLX; - inst.reloc.pc_rel = 1; - } - - input_line_pointer = save_in; - } -#else - inst.reloc.type = BFD_RELOC_ARM_PCREL_BLX; - inst.reloc.pc_rel = 1; -#endif /* OBJ_ELF */ - - end_of_line (str); -} - -/* ARM V5 branch-link-exchange instruction (argument parse) - BLX <target_addr> ie BLX(1) - BLX{<condition>} <Rm> ie BLX(2) - Unfortunately, there are two different opcodes for this mnemonic. - So, the insns[].value is not used, and the code here zaps values - into inst.instruction. - Also, the <target_addr> can be 25 bits, hence has its own reloc. */ - -static void -do_blx (str, flags) - char * str; - unsigned long flags; -{ - char * mystr = str; - int rm; - - if (flags) - { - as_bad (BAD_FLAGS); - return; - } - - skip_whitespace (mystr); - rm = reg_required_here (& mystr, 0); - - /* The above may set inst.error. Ignore his opinion. */ - inst.error = 0; - - if (rm != FAIL) - { - /* Arg is a register. - Use the condition code our caller put in inst.instruction. - Pass ourselves off as a BX with a funny opcode. */ - inst.instruction |= 0x012fff30; - do_bx (str, flags); - } - else - { - /* This must be is BLX <target address>, no condition allowed. */ - if (inst.instruction != COND_ALWAYS) - { - inst.error = BAD_COND; - return; - } - - inst.instruction = 0xfafffffe; - - /* Process like a B/BL, but with a different reloc. - Note that B/BL expecte fffffe, not 0, offset in the opcode table. */ - do_branch25 (str, flags); - } -} - -/* ARM V5 Thumb BLX (argument parse) - BLX <target_addr> which is BLX(1) - BLX <Rm> which is BLX(2) - Unfortunately, there are two different opcodes for this mnemonic. - So, the tinsns[].value is not used, and the code here zaps values - into inst.instruction. */ - -static void -do_t_blx (str) - char * str; -{ - char * mystr = str; - int rm; - - skip_whitespace (mystr); - inst.instruction = 0x4780; - - /* Note that this call is to the ARM register recognizer. BLX(2) - uses the ARM register space, not the Thumb one, so a call to - thumb_reg() would be wrong. */ - rm = reg_required_here (& mystr, 3); - inst.error = 0; - - if (rm != FAIL) - { - /* It's BLX(2). The .instruction was zapped with rm & is final. */ - inst.size = 2; - } - else - { - /* No ARM register. This must be BLX(1). Change the .instruction. */ - inst.instruction = 0xf7ffeffe; - inst.size = 4; - - if (my_get_expression (& inst.reloc.exp, & mystr)) - return; - - inst.reloc.type = BFD_RELOC_THUMB_PCREL_BLX; - inst.reloc.pc_rel = 1; - } - - end_of_line (mystr); -} - -/* ARM V5 breakpoint instruction (argument parse) - BKPT <16 bit unsigned immediate> - Instruction is not conditional. - The bit pattern given in insns[] has the COND_ALWAYS condition, - and it is an error if the caller tried to override that. - Note "flags" is nonzero if a flag was supplied (which is an error). */ - -static void -do_bkpt (str, flags) - char * str; - unsigned long flags; -{ - expressionS expr; - unsigned long number; - - skip_whitespace (str); - - /* Allow optional leading '#'. */ - if (is_immediate_prefix (* str)) - str++; - - memset (& expr, '\0', sizeof (expr)); - - if (my_get_expression (& expr, & str) || (expr.X_op != O_constant)) - { - inst.error = _("bad or missing expression"); - return; - } - - number = expr.X_add_number; - - /* Check it fits a 16 bit unsigned. */ - if (number != (number & 0xffff)) - { - inst.error = _("immediate value out of range"); - return; - } - - /* Top 12 of 16 bits to bits 19:8. */ - inst.instruction |= (number & 0xfff0) << 4; - - /* Bottom 4 of 16 bits to bits 3:0. */ - inst.instruction |= number & 0xf; - - end_of_line (str); - - if (flags) - inst.error = BAD_FLAGS; -} - -/* Xscale multiply-accumulate (argument parse) - MIAcc acc0,Rm,Rs - MIAPHcc acc0,Rm,Rs - MIAxycc acc0,Rm,Rs. */ - -static void -do_mia (str, flags) - char * str; - unsigned long flags; -{ - int rs; - int rm; - - if (flags) - as_bad (BAD_FLAGS); - - else if (accum0_required_here (& str) == FAIL) - inst.error = ERR_NO_ACCUM; - - else if (skip_past_comma (& str) == FAIL - || (rm = reg_required_here (& str, 0)) == FAIL) - inst.error = BAD_ARGS; - - else if (skip_past_comma (& str) == FAIL - || (rs = reg_required_here (& str, 12)) == FAIL) - inst.error = BAD_ARGS; - - /* inst.instruction has now been zapped with both rm and rs. */ - else if (rm == REG_PC || rs == REG_PC) - inst.error = BAD_PC; /* Undefined result if rm or rs is R15. */ - - else - end_of_line (str); -} - -/* Xscale move-accumulator-register (argument parse) - - MARcc acc0,RdLo,RdHi. */ - -static void -do_mar (str, flags) - char * str; - unsigned long flags; -{ - int rdlo, rdhi; - - if (flags) - as_bad (BAD_FLAGS); - - else if (accum0_required_here (& str) == FAIL) - inst.error = ERR_NO_ACCUM; - - else if (skip_past_comma (& str) == FAIL - || (rdlo = reg_required_here (& str, 12)) == FAIL) - inst.error = BAD_ARGS; - - else if (skip_past_comma (& str) == FAIL - || (rdhi = reg_required_here (& str, 16)) == FAIL) - inst.error = BAD_ARGS; - - /* inst.instruction has now been zapped with both rdlo and rdhi. */ - else if (rdlo == REG_PC || rdhi == REG_PC) - inst.error = BAD_PC; /* Undefined result if rdlo or rdhi is R15. */ - - else - end_of_line (str); -} - -/* Xscale move-register-accumulator (argument parse) - - MRAcc RdLo,RdHi,acc0. */ - -static void -do_mra (str, flags) - char * str; - unsigned long flags; -{ - int rdlo; - int rdhi; - - if (flags) - { - as_bad (BAD_FLAGS); - return; - } - - skip_whitespace (str); - - if ((rdlo = reg_required_here (& str, 12)) == FAIL) - inst.error = BAD_ARGS; - - else if (skip_past_comma (& str) == FAIL - || (rdhi = reg_required_here (& str, 16)) == FAIL) - inst.error = BAD_ARGS; - - else if (skip_past_comma (& str) == FAIL - || accum0_required_here (& str) == FAIL) - inst.error = ERR_NO_ACCUM; - - /* inst.instruction has now been zapped with both rdlo and rdhi. */ - else if (rdlo == rdhi) - inst.error = BAD_ARGS; /* Undefined result if 2 writes to same reg. */ - - else if (rdlo == REG_PC || rdhi == REG_PC) - inst.error = BAD_PC; /* Undefined result if rdlo or rdhi is R15. */ - else - end_of_line (str); -} - -/* Xscale: Preload-Cache - - PLD <addr_mode> - - Syntactically, like LDR with B=1, W=0, L=1. */ - -static void -do_pld (str, flags) - char * str; - unsigned long flags; -{ - int rd; - - if (flags) - { - as_bad (BAD_FLAGS); - return; - } - - skip_whitespace (str); - - if (* str != '[') - { - inst.error = _("'[' expected after PLD mnemonic"); - return; - } - - ++ str; - skip_whitespace (str); - - if ((rd = reg_required_here (& str, 16)) == FAIL) - return; - - skip_whitespace (str); - - if (* str == ']') - { - /* [Rn], ... ? */ - ++ str; - skip_whitespace (str); - - if (skip_past_comma (& str) == SUCCESS) - { - if (ldst_extend (& str, 0) == FAIL) - return; - } - else if (* str == '!') /* [Rn]! */ - { - inst.error = _("writeback used in preload instruction"); - ++ str; - } - else /* [Rn] */ - inst.instruction |= INDEX_UP | PRE_INDEX; - } - else /* [Rn, ...] */ - { - if (skip_past_comma (& str) == FAIL) - { - inst.error = _("pre-indexed expression expected"); - return; - } - - if (ldst_extend (& str, 0) == FAIL) - return; - - skip_whitespace (str); - - if (* str != ']') - { - inst.error = _("missing ]"); - return; - } - - ++ str; - skip_whitespace (str); - - if (* str == '!') /* [Rn]! */ - { - inst.error = _("writeback used in preload instruction"); - ++ str; - } - - inst.instruction |= PRE_INDEX; - } - - end_of_line (str); -} - -/* Xscale load-consecutive (argument parse) - Mode is like LDRH. - - LDRccD R, mode - STRccD R, mode. */ - -static void -do_ldrd (str, flags) - char * str; - unsigned long flags; -{ - int rd; - int rn; - - if (flags != DOUBLE_LOAD_FLAG) - { - /* Change instruction pattern to normal ldr/str. */ - if (inst.instruction & 0x20) - inst.instruction = (inst.instruction & COND_MASK) | 0x04000000; /* str */ - else - inst.instruction = (inst.instruction & COND_MASK) | 0x04100000; /* ldr */ - - /* Perform a normal load/store instruction parse. */ - do_ldst (str, flags); - - return; - } - - if ((cpu_variant & ARM_EXT_XSCALE) != ARM_EXT_XSCALE) - { - static char buff[128]; - - --str; - while (isspace (*str)) - --str; - str -= 4; - - /* Deny all knowledge. */ - sprintf (buff, _("bad instruction '%.100s'"), str); - inst.error = buff; - return; - } - - skip_whitespace (str); - - if ((rd = reg_required_here (& str, 12)) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == FAIL - || (rn = ld_mode_required_here (& str)) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - /* inst.instruction has now been zapped with Rd and the addressing mode. */ - if (rd & 1) /* Unpredictable result if Rd is odd. */ - { - inst.error = _("Destination register must be even"); - return; - } - - if (rd == REG_LR || rd == 12) - { - inst.error = _("r12 or r14 not allowed here"); - return; - } - - if (((rd == rn) || (rd + 1 == rn)) - && - ((inst.instruction & WRITE_BACK) - || (!(inst.instruction & PRE_INDEX)))) - as_warn (_("pre/post-indexing used when modified address register is destination")); - - end_of_line (str); -} - -/* Returns the index into fp_values of a floating point number, - or -1 if not in the table. */ - -static int -my_get_float_expression (str) - char ** str; -{ - LITTLENUM_TYPE words[MAX_LITTLENUMS]; - char * save_in; - expressionS exp; - int i; - int j; - - memset (words, 0, MAX_LITTLENUMS * sizeof (LITTLENUM_TYPE)); - - /* Look for a raw floating point number. */ - if ((save_in = atof_ieee (*str, 'x', words)) != NULL - && is_end_of_line[(unsigned char) *save_in]) - { - for (i = 0; i < NUM_FLOAT_VALS; i++) - { - for (j = 0; j < MAX_LITTLENUMS; j++) - { - if (words[j] != fp_values[i][j]) - break; - } - - if (j == MAX_LITTLENUMS) - { - *str = save_in; - return i; - } - } - } - - /* Try and parse a more complex expression, this will probably fail - unless the code uses a floating point prefix (eg "0f"). */ - save_in = input_line_pointer; - input_line_pointer = *str; - if (expression (&exp) == absolute_section - && exp.X_op == O_big - && exp.X_add_number < 0) - { - /* FIXME: 5 = X_PRECISION, should be #define'd where we can use it. - Ditto for 15. */ - if (gen_to_words (words, 5, (long) 15) == 0) - { - for (i = 0; i < NUM_FLOAT_VALS; i++) - { - for (j = 0; j < MAX_LITTLENUMS; j++) - { - if (words[j] != fp_values[i][j]) - break; - } - - if (j == MAX_LITTLENUMS) - { - *str = input_line_pointer; - input_line_pointer = save_in; - return i; - } - } - } - } - - *str = input_line_pointer; - input_line_pointer = save_in; - return -1; -} - -/* Return true if anything in the expression is a bignum. */ - -static int -walk_no_bignums (sp) - symbolS * sp; -{ - if (symbol_get_value_expression (sp)->X_op == O_big) - return 1; - - if (symbol_get_value_expression (sp)->X_add_symbol) - { - return (walk_no_bignums (symbol_get_value_expression (sp)->X_add_symbol) - || (symbol_get_value_expression (sp)->X_op_symbol - && walk_no_bignums (symbol_get_value_expression (sp)->X_op_symbol))); - } - - return 0; -} - -static int -my_get_expression (ep, str) - expressionS * ep; - char ** str; -{ - char * save_in; - segT seg; - - save_in = input_line_pointer; - input_line_pointer = *str; - seg = expression (ep); - -#ifdef OBJ_AOUT - if (seg != absolute_section - && seg != text_section - && seg != data_section - && seg != bss_section - && seg != undefined_section) - { - inst.error = _("bad_segment"); - *str = input_line_pointer; - input_line_pointer = save_in; - return 1; - } -#endif - - /* Get rid of any bignums now, so that we don't generate an error for which - we can't establish a line number later on. Big numbers are never valid - in instructions, which is where this routine is always called. */ - if (ep->X_op == O_big - || (ep->X_add_symbol - && (walk_no_bignums (ep->X_add_symbol) - || (ep->X_op_symbol - && walk_no_bignums (ep->X_op_symbol))))) - { - inst.error = _("Invalid constant"); - *str = input_line_pointer; - input_line_pointer = save_in; - return 1; - } - - *str = input_line_pointer; - input_line_pointer = save_in; - return 0; -} - -/* UNRESTRICT should be one if <shift> <register> is permitted for this - instruction. */ - -static int -decode_shift (str, unrestrict) - char ** str; - int unrestrict; -{ - const struct asm_shift_name * shift; - char * p; - char c; - - skip_whitespace (* str); - - for (p = * str; isalpha (* p); p ++) - ; - - if (p == * str) - { - inst.error = _("Shift expression expected"); - return FAIL; - } - - c = * p; - * p = '\0'; - shift = (const struct asm_shift_name *) hash_find (arm_shift_hsh, * str); - * p = c; - - if (shift == NULL) - { - inst.error = _("Shift expression expected"); - return FAIL; - } - - assert (shift->properties->index == shift_properties[shift->properties->index].index); - - if (shift->properties->index == SHIFT_RRX) - { - * str = p; - inst.instruction |= shift->properties->bit_field; - return SUCCESS; - } - - skip_whitespace (p); - - if (unrestrict && reg_required_here (& p, 8) != FAIL) - { - inst.instruction |= shift->properties->bit_field | SHIFT_BY_REG; - * str = p; - return SUCCESS; - } - else if (! is_immediate_prefix (* p)) - { - inst.error = (unrestrict - ? _("shift requires register or #expression") - : _("shift requires #expression")); - * str = p; - return FAIL; - } - - inst.error = NULL; - p ++; - - if (my_get_expression (& inst.reloc.exp, & p)) - return FAIL; - - /* Validate some simple #expressions. */ - if (inst.reloc.exp.X_op == O_constant) - { - unsigned num = inst.reloc.exp.X_add_number; - - /* Reject operations greater than 32. */ - if (num > 32 - /* Reject a shift of 0 unless the mode allows it. */ - || (num == 0 && shift->properties->allows_0 == 0) - /* Reject a shift of 32 unless the mode allows it. */ - || (num == 32 && shift->properties->allows_32 == 0) - ) - { - /* As a special case we allow a shift of zero for - modes that do not support it to be recoded as an - logical shift left of zero (ie nothing). We warn - about this though. */ - if (num == 0) - { - as_warn (_("Shift of 0 ignored.")); - shift = & shift_names[0]; - assert (shift->properties->index == SHIFT_LSL); - } - else - { - inst.error = _("Invalid immediate shift"); - return FAIL; - } - } - - /* Shifts of 32 are encoded as 0, for those shifts that - support it. */ - if (num == 32) - num = 0; - - inst.instruction |= (num << 7) | shift->properties->bit_field; - } - else - { - inst.reloc.type = BFD_RELOC_ARM_SHIFT_IMM; - inst.reloc.pc_rel = 0; - inst.instruction |= shift->properties->bit_field; - } - - * str = p; - return SUCCESS; -} - -/* Do those data_ops which can take a negative immediate constant - by altering the instuction. A bit of a hack really. - MOV <-> MVN - AND <-> BIC - ADC <-> SBC - by inverting the second operand, and - ADD <-> SUB - CMP <-> CMN - by negating the second operand. */ - -static int -negate_data_op (instruction, value) - unsigned long * instruction; - unsigned long value; -{ - int op, new_inst; - unsigned long negated, inverted; - - negated = validate_immediate (-value); - inverted = validate_immediate (~value); - - op = (*instruction >> DATA_OP_SHIFT) & 0xf; - switch (op) - { - /* First negates. */ - case OPCODE_SUB: /* ADD <-> SUB */ - new_inst = OPCODE_ADD; - value = negated; - break; - - case OPCODE_ADD: - new_inst = OPCODE_SUB; - value = negated; - break; - - case OPCODE_CMP: /* CMP <-> CMN */ - new_inst = OPCODE_CMN; - value = negated; - break; - - case OPCODE_CMN: - new_inst = OPCODE_CMP; - value = negated; - break; - - /* Now Inverted ops. */ - case OPCODE_MOV: /* MOV <-> MVN */ - new_inst = OPCODE_MVN; - value = inverted; - break; - - case OPCODE_MVN: - new_inst = OPCODE_MOV; - value = inverted; - break; - - case OPCODE_AND: /* AND <-> BIC */ - new_inst = OPCODE_BIC; - value = inverted; - break; - - case OPCODE_BIC: - new_inst = OPCODE_AND; - value = inverted; - break; - - case OPCODE_ADC: /* ADC <-> SBC */ - new_inst = OPCODE_SBC; - value = inverted; - break; - - case OPCODE_SBC: - new_inst = OPCODE_ADC; - value = inverted; - break; - - /* We cannot do anything. */ - default: - return FAIL; - } - - if (value == (unsigned) FAIL) - return FAIL; - - *instruction &= OPCODE_MASK; - *instruction |= new_inst << DATA_OP_SHIFT; - return value; -} - -static int -data_op2 (str) - char ** str; -{ - int value; - expressionS expr; - - skip_whitespace (* str); - - if (reg_required_here (str, 0) != FAIL) - { - if (skip_past_comma (str) == SUCCESS) - /* Shift operation on register. */ - return decode_shift (str, NO_SHIFT_RESTRICT); - - return SUCCESS; - } - else - { - /* Immediate expression. */ - if (is_immediate_prefix (**str)) - { - (*str)++; - inst.error = NULL; - - if (my_get_expression (&inst.reloc.exp, str)) - return FAIL; - - if (inst.reloc.exp.X_add_symbol) - { - inst.reloc.type = BFD_RELOC_ARM_IMMEDIATE; - inst.reloc.pc_rel = 0; - } - else - { - if (skip_past_comma (str) == SUCCESS) - { - /* #x, y -- ie explicit rotation by Y. */ - if (my_get_expression (&expr, str)) - return FAIL; - - if (expr.X_op != O_constant) - { - inst.error = _("Constant expression expected"); - return FAIL; - } - - /* Rotate must be a multiple of 2. */ - if (((unsigned) expr.X_add_number) > 30 - || (expr.X_add_number & 1) != 0 - || ((unsigned) inst.reloc.exp.X_add_number) > 255) - { - inst.error = _("Invalid constant"); - return FAIL; - } - inst.instruction |= INST_IMMEDIATE; - inst.instruction |= inst.reloc.exp.X_add_number; - inst.instruction |= expr.X_add_number << 7; - return SUCCESS; - } - - /* Implicit rotation, select a suitable one. */ - value = validate_immediate (inst.reloc.exp.X_add_number); - - if (value == FAIL) - { - /* Can't be done. Perhaps the code reads something like - "add Rd, Rn, #-n", where "sub Rd, Rn, #n" would be OK. */ - if ((value = negate_data_op (&inst.instruction, - inst.reloc.exp.X_add_number)) - == FAIL) - { - inst.error = _("Invalid constant"); - return FAIL; - } - } - - inst.instruction |= value; - } - - inst.instruction |= INST_IMMEDIATE; - return SUCCESS; - } - - (*str)++; - inst.error = _("Register or shift expression expected"); - return FAIL; - } -} - -static int -fp_op2 (str) - char ** str; -{ - skip_whitespace (* str); - - if (fp_reg_required_here (str, 0) != FAIL) - return SUCCESS; - else - { - /* Immediate expression. */ - if (*((*str)++) == '#') - { - int i; - - inst.error = NULL; - - skip_whitespace (* str); - - /* First try and match exact strings, this is to guarantee - that some formats will work even for cross assembly. */ - - for (i = 0; fp_const[i]; i++) - { - if (strncmp (*str, fp_const[i], strlen (fp_const[i])) == 0) - { - char *start = *str; - - *str += strlen (fp_const[i]); - if (is_end_of_line[(unsigned char) **str]) - { - inst.instruction |= i + 8; - return SUCCESS; - } - *str = start; - } - } - - /* Just because we didn't get a match doesn't mean that the - constant isn't valid, just that it is in a format that we - don't automatically recognize. Try parsing it with - the standard expression routines. */ - if ((i = my_get_float_expression (str)) >= 0) - { - inst.instruction |= i + 8; - return SUCCESS; - } - - inst.error = _("Invalid floating point immediate expression"); - return FAIL; - } - inst.error = - _("Floating point register or immediate expression expected"); - return FAIL; - } -} - -static void -do_arit (str, flags) - char * str; - unsigned long flags; -{ - skip_whitespace (str); - - if (reg_required_here (&str, 12) == FAIL - || skip_past_comma (&str) == FAIL - || reg_required_here (&str, 16) == FAIL - || skip_past_comma (&str) == FAIL - || data_op2 (&str) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - inst.instruction |= flags; - end_of_line (str); - return; -} - -static void -do_adr (str, flags) - char * str; - unsigned long flags; -{ - /* This is a pseudo-op of the form "adr rd, label" to be converted - into a relative address of the form "add rd, pc, #label-.-8". */ - skip_whitespace (str); - - if (reg_required_here (&str, 12) == FAIL - || skip_past_comma (&str) == FAIL - || my_get_expression (&inst.reloc.exp, &str)) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - /* Frag hacking will turn this into a sub instruction if the offset turns - out to be negative. */ - inst.reloc.type = BFD_RELOC_ARM_IMMEDIATE; - inst.reloc.exp.X_add_number -= 8; /* PC relative adjust. */ - inst.reloc.pc_rel = 1; - inst.instruction |= flags; - - end_of_line (str); -} - -static void -do_adrl (str, flags) - char * str; - unsigned long flags; -{ - /* This is a pseudo-op of the form "adrl rd, label" to be converted - into a relative address of the form: - add rd, pc, #low(label-.-8)" - add rd, rd, #high(label-.-8)" */ - - skip_whitespace (str); - - if (reg_required_here (& str, 12) == FAIL - || skip_past_comma (& str) == FAIL - || my_get_expression (& inst.reloc.exp, & str)) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - end_of_line (str); - - /* Frag hacking will turn this into a sub instruction if the offset turns - out to be negative. */ - inst.reloc.type = BFD_RELOC_ARM_ADRL_IMMEDIATE; - inst.reloc.exp.X_add_number -= 8; /* PC relative adjust */ - inst.reloc.pc_rel = 1; - inst.instruction |= flags; - inst.size = INSN_SIZE * 2; - - return; -} - -static void -do_cmp (str, flags) - char * str; - unsigned long flags; -{ - skip_whitespace (str); - - if (reg_required_here (&str, 16) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || data_op2 (&str) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - inst.instruction |= flags; - if ((flags & 0x0000f000) == 0) - inst.instruction |= CONDS_BIT; - - end_of_line (str); - return; -} - -static void -do_mov (str, flags) - char * str; - unsigned long flags; -{ - skip_whitespace (str); - - if (reg_required_here (&str, 12) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || data_op2 (&str) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - inst.instruction |= flags; - end_of_line (str); - return; -} - -static int -ldst_extend (str, hwse) - char ** str; - int hwse; -{ - int add = INDEX_UP; - - switch (**str) - { - case '#': - case '$': - (*str)++; - if (my_get_expression (& inst.reloc.exp, str)) - return FAIL; - - if (inst.reloc.exp.X_op == O_constant) - { - int value = inst.reloc.exp.X_add_number; - - if ((hwse && (value < -255 || value > 255)) - || (value < -4095 || value > 4095)) - { - inst.error = _("address offset too large"); - return FAIL; - } - - if (value < 0) - { - value = -value; - add = 0; - } - - /* Halfword and signextension instructions have the - immediate value split across bits 11..8 and bits 3..0. */ - if (hwse) - inst.instruction |= (add | HWOFFSET_IMM - | ((value >> 4) << 8) | (value & 0xF)); - else - inst.instruction |= add | value; - } - else - { - if (hwse) - { - inst.instruction |= HWOFFSET_IMM; - inst.reloc.type = BFD_RELOC_ARM_OFFSET_IMM8; - } - else - inst.reloc.type = BFD_RELOC_ARM_OFFSET_IMM; - inst.reloc.pc_rel = 0; - } - return SUCCESS; - - case '-': - add = 0; - /* Fall through. */ - - case '+': - (*str)++; - /* Fall through. */ - - default: - if (reg_required_here (str, 0) == FAIL) - return FAIL; - - if (hwse) - inst.instruction |= add; - else - { - inst.instruction |= add | OFFSET_REG; - if (skip_past_comma (str) == SUCCESS) - return decode_shift (str, SHIFT_RESTRICT); - } - - return SUCCESS; - } -} - -static void -do_ldst (str, flags) - char * str; - unsigned long flags; -{ - int halfword = 0; - int pre_inc = 0; - int conflict_reg; - int value; - - /* This is not ideal, but it is the simplest way of dealing with the - ARM7T halfword instructions (since they use a different - encoding, but the same mnemonic): */ - halfword = (flags & 0x80000000) != 0; - if (halfword) - { - /* This is actually a load/store of a halfword, or a - signed-extension load. */ - if ((cpu_variant & ARM_EXT_HALFWORD) == 0) - { - inst.error - = _("Processor does not support halfwords or signed bytes"); - return; - } - - inst.instruction = ((inst.instruction & COND_MASK) - | (flags & ~COND_MASK)); - - flags = 0; - } - - skip_whitespace (str); - - if ((conflict_reg = reg_required_here (& str, 12)) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (& str) == FAIL) - { - inst.error = _("Address expected"); - return; - } - - if (*str == '[') - { - int reg; - - str++; - - skip_whitespace (str); - - if ((reg = reg_required_here (&str, 16)) == FAIL) - return; - - /* Conflicts can occur on stores as well as loads. */ - conflict_reg = (conflict_reg == reg); - - skip_whitespace (str); - - if (*str == ']') - { - str ++; - - if (skip_past_comma (&str) == SUCCESS) - { - /* [Rn],... (post inc) */ - if (ldst_extend (&str, halfword) == FAIL) - return; - if (conflict_reg) - { - if (flags & TRANS_BIT) - as_warn (_("Rn and Rd must be different in %s"), - ((inst.instruction & LOAD_BIT) - ? "LDRT" : "STRT")); - else - as_warn (_("%s register same as write-back base"), - ((inst.instruction & LOAD_BIT) - ? _("destination") : _("source"))); - } - } - else - { - /* [Rn] */ - if (halfword) - inst.instruction |= HWOFFSET_IMM; - - skip_whitespace (str); - - if (*str == '!') - { - if (conflict_reg) - as_warn (_("%s register same as write-back base"), - ((inst.instruction & LOAD_BIT) - ? _("destination") : _("source"))); - str++; - inst.instruction |= WRITE_BACK; - } - - flags |= INDEX_UP; - if (flags & TRANS_BIT) - { - if (conflict_reg) - as_warn (_("Rn and Rd must be different in %s"), - ((inst.instruction & LOAD_BIT) - ? "LDRT" : "STRT")); - } - else - pre_inc = 1; - } - } - else - { - /* [Rn,...] */ - if (skip_past_comma (&str) == FAIL) - { - inst.error = _("pre-indexed expression expected"); - return; - } - - pre_inc = 1; - if (ldst_extend (&str, halfword) == FAIL) - return; - - skip_whitespace (str); - - if (*str++ != ']') - { - inst.error = _("missing ]"); - return; - } - - skip_whitespace (str); - - if (*str == '!') - { - if (conflict_reg) - as_warn (_("%s register same as write-back base"), - ((inst.instruction & LOAD_BIT) - ? _("destination") : _("source"))); - str++; - inst.instruction |= WRITE_BACK; - } - } - } - else if (*str == '=') - { - /* Parse an "ldr Rd, =expr" instruction; this is another pseudo op. */ - str++; - - skip_whitespace (str); - - if (my_get_expression (&inst.reloc.exp, &str)) - return; - - if (inst.reloc.exp.X_op != O_constant - && inst.reloc.exp.X_op != O_symbol) - { - inst.error = _("Constant expression expected"); - return; - } - - if (inst.reloc.exp.X_op == O_constant - && (value = validate_immediate (inst.reloc.exp.X_add_number)) != FAIL) - { - /* This can be done with a mov instruction. */ - inst.instruction &= LITERAL_MASK; - inst.instruction |= INST_IMMEDIATE | (OPCODE_MOV << DATA_OP_SHIFT); - inst.instruction |= (flags & COND_MASK) | (value & 0xfff); - end_of_line (str); - return; - } - else - { - /* Insert into literal pool. */ - if (add_to_lit_pool () == FAIL) - { - if (!inst.error) - inst.error = _("literal pool insertion failed"); - return; - } - - /* Change the instruction exp to point to the pool. */ - if (halfword) - { - inst.instruction |= HWOFFSET_IMM; - inst.reloc.type = BFD_RELOC_ARM_HWLITERAL; - } - else - inst.reloc.type = BFD_RELOC_ARM_LITERAL; - inst.reloc.pc_rel = 1; - inst.instruction |= (REG_PC << 16); - pre_inc = 1; - } - } - else - { - if (my_get_expression (&inst.reloc.exp, &str)) - return; - - if (halfword) - { - inst.instruction |= HWOFFSET_IMM; - inst.reloc.type = BFD_RELOC_ARM_OFFSET_IMM8; - } - else - inst.reloc.type = BFD_RELOC_ARM_OFFSET_IMM; -#ifndef TE_WINCE - /* PC rel adjust. */ - inst.reloc.exp.X_add_number -= 8; -#endif - inst.reloc.pc_rel = 1; - inst.instruction |= (REG_PC << 16); - pre_inc = 1; - } - - if (pre_inc && (flags & TRANS_BIT)) - inst.error = _("Pre-increment instruction with translate"); - - inst.instruction |= flags | (pre_inc ? PRE_INDEX : 0); - end_of_line (str); - return; -} - -static long -reg_list (strp) - char ** strp; -{ - char * str = * strp; - long range = 0; - int another_range; - - /* We come back here if we get ranges concatenated by '+' or '|'. */ - do - { - another_range = 0; - - if (*str == '{') - { - int in_range = 0; - int cur_reg = -1; - - str++; - do - { - int reg; - - skip_whitespace (str); - - if ((reg = reg_required_here (& str, -1)) == FAIL) - return FAIL; - - if (in_range) - { - int i; - - if (reg <= cur_reg) - { - inst.error = _("Bad range in register list"); - return FAIL; - } - - for (i = cur_reg + 1; i < reg; i++) - { - if (range & (1 << i)) - as_tsktsk - (_("Warning: Duplicated register (r%d) in register list"), - i); - else - range |= 1 << i; - } - in_range = 0; - } - - if (range & (1 << reg)) - as_tsktsk (_("Warning: Duplicated register (r%d) in register list"), - reg); - else if (reg <= cur_reg) - as_tsktsk (_("Warning: Register range not in ascending order")); - - range |= 1 << reg; - cur_reg = reg; - } - while (skip_past_comma (&str) != FAIL - || (in_range = 1, *str++ == '-')); - str--; - skip_whitespace (str); - - if (*str++ != '}') - { - inst.error = _("Missing `}'"); - return FAIL; - } - } - else - { - expressionS expr; - - if (my_get_expression (&expr, &str)) - return FAIL; - - if (expr.X_op == O_constant) - { - if (expr.X_add_number - != (expr.X_add_number & 0x0000ffff)) - { - inst.error = _("invalid register mask"); - return FAIL; - } - - if ((range & expr.X_add_number) != 0) - { - int regno = range & expr.X_add_number; - - regno &= -regno; - regno = (1 << regno) - 1; - as_tsktsk - (_("Warning: Duplicated register (r%d) in register list"), - regno); - } - - range |= expr.X_add_number; - } - else - { - if (inst.reloc.type != 0) - { - inst.error = _("expression too complex"); - return FAIL; - } - - memcpy (&inst.reloc.exp, &expr, sizeof (expressionS)); - inst.reloc.type = BFD_RELOC_ARM_MULTI; - inst.reloc.pc_rel = 0; - } - } - - skip_whitespace (str); - - if (*str == '|' || *str == '+') - { - str++; - another_range = 1; - } - } - while (another_range); - - *strp = str; - return range; -} - -static void -do_ldmstm (str, flags) - char * str; - unsigned long flags; -{ - int base_reg; - long range; - - skip_whitespace (str); - - if ((base_reg = reg_required_here (&str, 16)) == FAIL) - return; - - if (base_reg == REG_PC) - { - inst.error = _("r15 not allowed as base register"); - return; - } - - skip_whitespace (str); - - if (*str == '!') - { - flags |= WRITE_BACK; - str++; - } - - if (skip_past_comma (&str) == FAIL - || (range = reg_list (&str)) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - if (*str == '^') - { - str++; - flags |= LDM_TYPE_2_OR_3; - } - - inst.instruction |= flags | range; - end_of_line (str); - return; -} - -static void -do_swi (str, flags) - char * str; - unsigned long flags; -{ - skip_whitespace (str); - - /* Allow optional leading '#'. */ - if (is_immediate_prefix (*str)) - str++; - - if (my_get_expression (& inst.reloc.exp, & str)) - return; - - inst.reloc.type = BFD_RELOC_ARM_SWI; - inst.reloc.pc_rel = 0; - inst.instruction |= flags; - - end_of_line (str); - - return; -} - -static void -do_swap (str, flags) - char * str; - unsigned long flags; -{ - int reg; - - skip_whitespace (str); - - if ((reg = reg_required_here (&str, 12)) == FAIL) - return; - - if (reg == REG_PC) - { - inst.error = _("r15 not allowed in swap"); - return; - } - - if (skip_past_comma (&str) == FAIL - || (reg = reg_required_here (&str, 0)) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (reg == REG_PC) - { - inst.error = _("r15 not allowed in swap"); - return; - } - - if (skip_past_comma (&str) == FAIL - || *str++ != '[') - { - inst.error = BAD_ARGS; - return; - } - - skip_whitespace (str); - - if ((reg = reg_required_here (&str, 16)) == FAIL) - return; - - if (reg == REG_PC) - { - inst.error = BAD_PC; - return; - } - - skip_whitespace (str); - - if (*str++ != ']') - { - inst.error = _("missing ]"); - return; - } - - inst.instruction |= flags; - end_of_line (str); - return; -} - -static void -do_branch (str, flags) - char * str; - unsigned long flags ATTRIBUTE_UNUSED; -{ - if (my_get_expression (&inst.reloc.exp, &str)) - return; - -#ifdef OBJ_ELF - { - char * save_in; - - /* ScottB: February 5, 1998 - Check to see of PLT32 reloc - required for the instruction. */ - - /* arm_parse_reloc () works on input_line_pointer. - We actually want to parse the operands to the branch instruction - passed in 'str'. Save the input pointer and restore it later. */ - save_in = input_line_pointer; - input_line_pointer = str; - if (inst.reloc.exp.X_op == O_symbol - && *str == '(' - && arm_parse_reloc () == BFD_RELOC_ARM_PLT32) - { - inst.reloc.type = BFD_RELOC_ARM_PLT32; - inst.reloc.pc_rel = 0; - /* Modify str to point to after parsed operands, otherwise - end_of_line() will complain about the (PLT) left in str. */ - str = input_line_pointer; - } - else - { - inst.reloc.type = BFD_RELOC_ARM_PCREL_BRANCH; - inst.reloc.pc_rel = 1; - } - input_line_pointer = save_in; - } -#else - inst.reloc.type = BFD_RELOC_ARM_PCREL_BRANCH; - inst.reloc.pc_rel = 1; -#endif /* OBJ_ELF */ - - end_of_line (str); - return; -} - -static void -do_bx (str, flags) - char * str; - unsigned long flags ATTRIBUTE_UNUSED; -{ - int reg; - - skip_whitespace (str); - - if ((reg = reg_required_here (&str, 0)) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - /* Note - it is not illegal to do a "bx pc". Useless, but not illegal. */ - if (reg == REG_PC) - as_tsktsk (_("Use of r15 in bx in ARM mode is not really useful")); - - end_of_line (str); -} - -static void -do_cdp (str, flags) - char * str; - unsigned long flags ATTRIBUTE_UNUSED; -{ - /* Co-processor data operation. - Format: CDP{cond} CP#,<expr>,CRd,CRn,CRm{,<expr>} */ - skip_whitespace (str); - - if (co_proc_number (&str) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || cp_opc_expr (&str, 20,4) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || cp_reg_required_here (&str, 12) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || cp_reg_required_here (&str, 16) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || cp_reg_required_here (&str, 0) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == SUCCESS) - { - if (cp_opc_expr (&str, 5, 3) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - } - - end_of_line (str); - return; -} - -static void -do_lstc (str, flags) - char * str; - unsigned long flags; -{ - /* Co-processor register load/store. - Format: <LDC|STC{cond}[L] CP#,CRd,<address> */ - - skip_whitespace (str); - - if (co_proc_number (&str) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || cp_reg_required_here (&str, 12) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || cp_address_required_here (&str) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - inst.instruction |= flags; - end_of_line (str); - return; -} - -static void -do_co_reg (str, flags) - char * str; - unsigned long flags; -{ - /* Co-processor register transfer. - Format: <MCR|MRC>{cond} CP#,<expr1>,Rd,CRn,CRm{,<expr2>} */ - - skip_whitespace (str); - - if (co_proc_number (&str) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || cp_opc_expr (&str, 21, 3) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || reg_required_here (&str, 12) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || cp_reg_required_here (&str, 16) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || cp_reg_required_here (&str, 0) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == SUCCESS) - { - if (cp_opc_expr (&str, 5, 3) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - } - if (flags) - { - inst.error = BAD_COND; - } - - end_of_line (str); - return; -} - -static void -do_fp_ctrl (str, flags) - char * str; - unsigned long flags ATTRIBUTE_UNUSED; -{ - /* FP control registers. - Format: <WFS|RFS|WFC|RFC>{cond} Rn */ - - skip_whitespace (str); - - if (reg_required_here (&str, 12) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - end_of_line (str); - return; -} - -static void -do_fp_ldst (str, flags) - char * str; - unsigned long flags ATTRIBUTE_UNUSED; -{ - skip_whitespace (str); - - switch (inst.suffix) - { - case SUFF_S: - break; - case SUFF_D: - inst.instruction |= CP_T_X; - break; - case SUFF_E: - inst.instruction |= CP_T_Y; - break; - case SUFF_P: - inst.instruction |= CP_T_X | CP_T_Y; - break; - default: - abort (); - } - - if (fp_reg_required_here (&str, 12) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || cp_address_required_here (&str) == FAIL) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - end_of_line (str); -} - -static void -do_fp_ldmstm (str, flags) - char * str; - unsigned long flags; -{ - int num_regs; - - skip_whitespace (str); - - if (fp_reg_required_here (&str, 12) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - /* Get Number of registers to transfer. */ - if (skip_past_comma (&str) == FAIL - || my_get_expression (&inst.reloc.exp, &str)) - { - if (! inst.error) - inst.error = _("constant expression expected"); - return; - } - - if (inst.reloc.exp.X_op != O_constant) - { - inst.error = _("Constant value required for number of registers"); - return; - } - - num_regs = inst.reloc.exp.X_add_number; - - if (num_regs < 1 || num_regs > 4) - { - inst.error = _("number of registers must be in the range [1:4]"); - return; - } - - switch (num_regs) - { - case 1: - inst.instruction |= CP_T_X; - break; - case 2: - inst.instruction |= CP_T_Y; - break; - case 3: - inst.instruction |= CP_T_Y | CP_T_X; - break; - case 4: - break; - default: - abort (); - } - - if (flags) - { - int reg; - int write_back; - int offset; - - /* The instruction specified "ea" or "fd", so we can only accept - [Rn]{!}. The instruction does not really support stacking or - unstacking, so we have to emulate these by setting appropriate - bits and offsets. */ - if (skip_past_comma (&str) == FAIL - || *str != '[') - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - str++; - skip_whitespace (str); - - if ((reg = reg_required_here (&str, 16)) == FAIL) - return; - - skip_whitespace (str); - - if (*str != ']') - { - inst.error = BAD_ARGS; - return; - } - - str++; - if (*str == '!') - { - write_back = 1; - str++; - if (reg == REG_PC) - { - inst.error = - _("R15 not allowed as base register with write-back"); - return; - } - } - else - write_back = 0; - - if (flags & CP_T_Pre) - { - /* Pre-decrement. */ - offset = 3 * num_regs; - if (write_back) - flags |= CP_T_WB; - } - else - { - /* Post-increment. */ - if (write_back) - { - flags |= CP_T_WB; - offset = 3 * num_regs; - } - else - { - /* No write-back, so convert this into a standard pre-increment - instruction -- aesthetically more pleasing. */ - flags = CP_T_Pre | CP_T_UD; - offset = 0; - } - } - - inst.instruction |= flags | offset; - } - else if (skip_past_comma (&str) == FAIL - || cp_address_required_here (&str) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - end_of_line (str); -} - -static void -do_fp_dyadic (str, flags) - char * str; - unsigned long flags; -{ - skip_whitespace (str); - - switch (inst.suffix) - { - case SUFF_S: - break; - case SUFF_D: - inst.instruction |= 0x00000080; - break; - case SUFF_E: - inst.instruction |= 0x00080000; - break; - default: - abort (); - } - - if (fp_reg_required_here (&str, 12) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || fp_reg_required_here (&str, 16) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || fp_op2 (&str) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - inst.instruction |= flags; - end_of_line (str); - return; -} - -static void -do_fp_monadic (str, flags) - char * str; - unsigned long flags; -{ - skip_whitespace (str); - - switch (inst.suffix) - { - case SUFF_S: - break; - case SUFF_D: - inst.instruction |= 0x00000080; - break; - case SUFF_E: - inst.instruction |= 0x00080000; - break; - default: - abort (); - } - - if (fp_reg_required_here (&str, 12) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || fp_op2 (&str) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - inst.instruction |= flags; - end_of_line (str); - return; -} - -static void -do_fp_cmp (str, flags) - char * str; - unsigned long flags; -{ - skip_whitespace (str); - - if (fp_reg_required_here (&str, 16) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || fp_op2 (&str) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - inst.instruction |= flags; - end_of_line (str); - return; -} - -static void -do_fp_from_reg (str, flags) - char * str; - unsigned long flags; -{ - skip_whitespace (str); - - switch (inst.suffix) - { - case SUFF_S: - break; - case SUFF_D: - inst.instruction |= 0x00000080; - break; - case SUFF_E: - inst.instruction |= 0x00080000; - break; - default: - abort (); - } - - if (fp_reg_required_here (&str, 16) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) == FAIL - || reg_required_here (&str, 12) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - inst.instruction |= flags; - end_of_line (str); - return; -} - -static void -do_fp_to_reg (str, flags) - char * str; - unsigned long flags; -{ - skip_whitespace (str); - - if (reg_required_here (&str, 12) == FAIL) - return; - - if (skip_past_comma (&str) == FAIL - || fp_reg_required_here (&str, 0) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - inst.instruction |= flags; - end_of_line (str); - return; -} - -/* Thumb specific routines. */ - -/* Parse and validate that a register is of the right form, this saves - repeated checking of this information in many similar cases. - Unlike the 32-bit case we do not insert the register into the opcode - here, since the position is often unknown until the full instruction - has been parsed. */ - -static int -thumb_reg (strp, hi_lo) - char ** strp; - int hi_lo; -{ - int reg; - - if ((reg = reg_required_here (strp, -1)) == FAIL) - return FAIL; - - switch (hi_lo) - { - case THUMB_REG_LO: - if (reg > 7) - { - inst.error = _("lo register required"); - return FAIL; - } - break; - - case THUMB_REG_HI: - if (reg < 8) - { - inst.error = _("hi register required"); - return FAIL; - } - break; - - default: - break; - } - - return reg; -} - -/* Parse an add or subtract instruction, SUBTRACT is non-zero if the opcode - was SUB. */ - -static void -thumb_add_sub (str, subtract) - char * str; - int subtract; -{ - int Rd, Rs, Rn = FAIL; - - skip_whitespace (str); - - if ((Rd = thumb_reg (&str, THUMB_REG_ANY)) == FAIL - || skip_past_comma (&str) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - if (is_immediate_prefix (*str)) - { - Rs = Rd; - str++; - if (my_get_expression (&inst.reloc.exp, &str)) - return; - } - else - { - if ((Rs = thumb_reg (&str, THUMB_REG_ANY)) == FAIL) - return; - - if (skip_past_comma (&str) == FAIL) - { - /* Two operand format, shuffle the registers - and pretend there are 3. */ - Rn = Rs; - Rs = Rd; - } - else if (is_immediate_prefix (*str)) - { - str++; - if (my_get_expression (&inst.reloc.exp, &str)) - return; - } - else if ((Rn = thumb_reg (&str, THUMB_REG_ANY)) == FAIL) - return; - } - - /* We now have Rd and Rs set to registers, and Rn set to a register or FAIL; - for the latter case, EXPR contains the immediate that was found. */ - if (Rn != FAIL) - { - /* All register format. */ - if (Rd > 7 || Rs > 7 || Rn > 7) - { - if (Rs != Rd) - { - inst.error = _("dest and source1 must be the same register"); - return; - } - - /* Can't do this for SUB. */ - if (subtract) - { - inst.error = _("subtract valid only on lo regs"); - return; - } - - inst.instruction = (T_OPCODE_ADD_HI - | (Rd > 7 ? THUMB_H1 : 0) - | (Rn > 7 ? THUMB_H2 : 0)); - inst.instruction |= (Rd & 7) | ((Rn & 7) << 3); - } - else - { - inst.instruction = subtract ? T_OPCODE_SUB_R3 : T_OPCODE_ADD_R3; - inst.instruction |= Rd | (Rs << 3) | (Rn << 6); - } - } - else - { - /* Immediate expression, now things start to get nasty. */ - - /* First deal with HI regs, only very restricted cases allowed: - Adjusting SP, and using PC or SP to get an address. */ - if ((Rd > 7 && (Rd != REG_SP || Rs != REG_SP)) - || (Rs > 7 && Rs != REG_SP && Rs != REG_PC)) - { - inst.error = _("invalid Hi register with immediate"); - return; - } - - if (inst.reloc.exp.X_op != O_constant) - { - /* Value isn't known yet, all we can do is store all the fragments - we know about in the instruction and let the reloc hacking - work it all out. */ - inst.instruction = (subtract ? 0x8000 : 0) | (Rd << 4) | Rs; - inst.reloc.type = BFD_RELOC_ARM_THUMB_ADD; - } - else - { - int offset = inst.reloc.exp.X_add_number; - - if (subtract) - offset = -offset; - - if (offset < 0) - { - offset = -offset; - subtract = 1; - - /* Quick check, in case offset is MIN_INT. */ - if (offset < 0) - { - inst.error = _("immediate value out of range"); - return; - } - } - else - subtract = 0; - - if (Rd == REG_SP) - { - if (offset & ~0x1fc) - { - inst.error = _("invalid immediate value for stack adjust"); - return; - } - inst.instruction = subtract ? T_OPCODE_SUB_ST : T_OPCODE_ADD_ST; - inst.instruction |= offset >> 2; - } - else if (Rs == REG_PC || Rs == REG_SP) - { - if (subtract - || (offset & ~0x3fc)) - { - inst.error = _("invalid immediate for address calculation"); - return; - } - inst.instruction = (Rs == REG_PC ? T_OPCODE_ADD_PC - : T_OPCODE_ADD_SP); - inst.instruction |= (Rd << 8) | (offset >> 2); - } - else if (Rs == Rd) - { - if (offset & ~0xff) - { - inst.error = _("immediate value out of range"); - return; - } - inst.instruction = subtract ? T_OPCODE_SUB_I8 : T_OPCODE_ADD_I8; - inst.instruction |= (Rd << 8) | offset; - } - else - { - if (offset & ~0x7) - { - inst.error = _("immediate value out of range"); - return; - } - inst.instruction = subtract ? T_OPCODE_SUB_I3 : T_OPCODE_ADD_I3; - inst.instruction |= Rd | (Rs << 3) | (offset << 6); - } - } - } - - end_of_line (str); -} - -static void -thumb_shift (str, shift) - char * str; - int shift; -{ - int Rd, Rs, Rn = FAIL; - - skip_whitespace (str); - - if ((Rd = thumb_reg (&str, THUMB_REG_LO)) == FAIL - || skip_past_comma (&str) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - if (is_immediate_prefix (*str)) - { - /* Two operand immediate format, set Rs to Rd. */ - Rs = Rd; - str ++; - if (my_get_expression (&inst.reloc.exp, &str)) - return; - } - else - { - if ((Rs = thumb_reg (&str, THUMB_REG_LO)) == FAIL) - return; - - if (skip_past_comma (&str) == FAIL) - { - /* Two operand format, shuffle the registers - and pretend there are 3. */ - Rn = Rs; - Rs = Rd; - } - else if (is_immediate_prefix (*str)) - { - str++; - if (my_get_expression (&inst.reloc.exp, &str)) - return; - } - else if ((Rn = thumb_reg (&str, THUMB_REG_LO)) == FAIL) - return; - } - - /* We now have Rd and Rs set to registers, and Rn set to a register or FAIL; - for the latter case, EXPR contains the immediate that was found. */ - - if (Rn != FAIL) - { - if (Rs != Rd) - { - inst.error = _("source1 and dest must be same register"); - return; - } - - switch (shift) - { - case THUMB_ASR: inst.instruction = T_OPCODE_ASR_R; break; - case THUMB_LSL: inst.instruction = T_OPCODE_LSL_R; break; - case THUMB_LSR: inst.instruction = T_OPCODE_LSR_R; break; - } - - inst.instruction |= Rd | (Rn << 3); - } - else - { - switch (shift) - { - case THUMB_ASR: inst.instruction = T_OPCODE_ASR_I; break; - case THUMB_LSL: inst.instruction = T_OPCODE_LSL_I; break; - case THUMB_LSR: inst.instruction = T_OPCODE_LSR_I; break; - } - - if (inst.reloc.exp.X_op != O_constant) - { - /* Value isn't known yet, create a dummy reloc and let reloc - hacking fix it up. */ - inst.reloc.type = BFD_RELOC_ARM_THUMB_SHIFT; - } - else - { - unsigned shift_value = inst.reloc.exp.X_add_number; - - if (shift_value > 32 || (shift_value == 32 && shift == THUMB_LSL)) - { - inst.error = _("Invalid immediate for shift"); - return; - } - - /* Shifts of zero are handled by converting to LSL. */ - if (shift_value == 0) - inst.instruction = T_OPCODE_LSL_I; - - /* Shifts of 32 are encoded as a shift of zero. */ - if (shift_value == 32) - shift_value = 0; - - inst.instruction |= shift_value << 6; - } - - inst.instruction |= Rd | (Rs << 3); - } - - end_of_line (str); -} - -static void -thumb_mov_compare (str, move) - char * str; - int move; -{ - int Rd, Rs = FAIL; - - skip_whitespace (str); - - if ((Rd = thumb_reg (&str, THUMB_REG_ANY)) == FAIL - || skip_past_comma (&str) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - if (is_immediate_prefix (*str)) - { - str++; - if (my_get_expression (&inst.reloc.exp, &str)) - return; - } - else if ((Rs = thumb_reg (&str, THUMB_REG_ANY)) == FAIL) - return; - - if (Rs != FAIL) - { - if (Rs < 8 && Rd < 8) - { - if (move == THUMB_MOVE) - /* A move of two lowregs is encoded as ADD Rd, Rs, #0 - since a MOV instruction produces unpredictable results. */ - inst.instruction = T_OPCODE_ADD_I3; - else - inst.instruction = T_OPCODE_CMP_LR; - inst.instruction |= Rd | (Rs << 3); - } - else - { - if (move == THUMB_MOVE) - inst.instruction = T_OPCODE_MOV_HR; - else - inst.instruction = T_OPCODE_CMP_HR; - - if (Rd > 7) - inst.instruction |= THUMB_H1; - - if (Rs > 7) - inst.instruction |= THUMB_H2; - - inst.instruction |= (Rd & 7) | ((Rs & 7) << 3); - } - } - else - { - if (Rd > 7) - { - inst.error = _("only lo regs allowed with immediate"); - return; - } - - if (move == THUMB_MOVE) - inst.instruction = T_OPCODE_MOV_I8; - else - inst.instruction = T_OPCODE_CMP_I8; - - inst.instruction |= Rd << 8; - - if (inst.reloc.exp.X_op != O_constant) - inst.reloc.type = BFD_RELOC_ARM_THUMB_IMM; - else - { - unsigned value = inst.reloc.exp.X_add_number; - - if (value > 255) - { - inst.error = _("invalid immediate"); - return; - } - - inst.instruction |= value; - } - } - - end_of_line (str); -} - -static void -thumb_load_store (str, load_store, size) - char * str; - int load_store; - int size; -{ - int Rd, Rb, Ro = FAIL; - - skip_whitespace (str); - - if ((Rd = thumb_reg (&str, THUMB_REG_LO)) == FAIL - || skip_past_comma (&str) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - if (*str == '[') - { - str++; - if ((Rb = thumb_reg (&str, THUMB_REG_ANY)) == FAIL) - return; - - if (skip_past_comma (&str) != FAIL) - { - if (is_immediate_prefix (*str)) - { - str++; - if (my_get_expression (&inst.reloc.exp, &str)) - return; - } - else if ((Ro = thumb_reg (&str, THUMB_REG_LO)) == FAIL) - return; - } - else - { - inst.reloc.exp.X_op = O_constant; - inst.reloc.exp.X_add_number = 0; - } - - if (*str != ']') - { - inst.error = _("expected ']'"); - return; - } - str++; - } - else if (*str == '=') - { - /* Parse an "ldr Rd, =expr" instruction; this is another pseudo op. */ - str++; - - skip_whitespace (str); - - if (my_get_expression (& inst.reloc.exp, & str)) - return; - - end_of_line (str); - - if ( inst.reloc.exp.X_op != O_constant - && inst.reloc.exp.X_op != O_symbol) - { - inst.error = "Constant expression expected"; - return; - } - - if (inst.reloc.exp.X_op == O_constant - && ((inst.reloc.exp.X_add_number & ~0xFF) == 0)) - { - /* This can be done with a mov instruction. */ - - inst.instruction = T_OPCODE_MOV_I8 | (Rd << 8); - inst.instruction |= inst.reloc.exp.X_add_number; - return; - } - - /* Insert into literal pool. */ - if (add_to_lit_pool () == FAIL) - { - if (!inst.error) - inst.error = "literal pool insertion failed"; - return; - } - - inst.reloc.type = BFD_RELOC_ARM_THUMB_OFFSET; - inst.reloc.pc_rel = 1; - inst.instruction = T_OPCODE_LDR_PC | (Rd << 8); - /* Adjust ARM pipeline offset to Thumb. */ - inst.reloc.exp.X_add_number += 4; - - return; - } - else - { - if (my_get_expression (&inst.reloc.exp, &str)) - return; - - inst.instruction = T_OPCODE_LDR_PC | (Rd << 8); - inst.reloc.pc_rel = 1; - inst.reloc.exp.X_add_number -= 4; /* Pipeline offset. */ - inst.reloc.type = BFD_RELOC_ARM_THUMB_OFFSET; - end_of_line (str); - return; - } - - if (Rb == REG_PC || Rb == REG_SP) - { - if (size != THUMB_WORD) - { - inst.error = _("byte or halfword not valid for base register"); - return; - } - else if (Rb == REG_PC && load_store != THUMB_LOAD) - { - inst.error = _("R15 based store not allowed"); - return; - } - else if (Ro != FAIL) - { - inst.error = _("Invalid base register for register offset"); - return; - } - - if (Rb == REG_PC) - inst.instruction = T_OPCODE_LDR_PC; - else if (load_store == THUMB_LOAD) - inst.instruction = T_OPCODE_LDR_SP; - else - inst.instruction = T_OPCODE_STR_SP; - - inst.instruction |= Rd << 8; - if (inst.reloc.exp.X_op == O_constant) - { - unsigned offset = inst.reloc.exp.X_add_number; - - if (offset & ~0x3fc) - { - inst.error = _("invalid offset"); - return; - } - - inst.instruction |= offset >> 2; - } - else - inst.reloc.type = BFD_RELOC_ARM_THUMB_OFFSET; - } - else if (Rb > 7) - { - inst.error = _("invalid base register in load/store"); - return; - } - else if (Ro == FAIL) - { - /* Immediate offset. */ - if (size == THUMB_WORD) - inst.instruction = (load_store == THUMB_LOAD - ? T_OPCODE_LDR_IW : T_OPCODE_STR_IW); - else if (size == THUMB_HALFWORD) - inst.instruction = (load_store == THUMB_LOAD - ? T_OPCODE_LDR_IH : T_OPCODE_STR_IH); - else - inst.instruction = (load_store == THUMB_LOAD - ? T_OPCODE_LDR_IB : T_OPCODE_STR_IB); - - inst.instruction |= Rd | (Rb << 3); - - if (inst.reloc.exp.X_op == O_constant) - { - unsigned offset = inst.reloc.exp.X_add_number; - - if (offset & ~(0x1f << size)) - { - inst.error = _("Invalid offset"); - return; - } - inst.instruction |= (offset >> size) << 6; - } - else - inst.reloc.type = BFD_RELOC_ARM_THUMB_OFFSET; - } - else - { - /* Register offset. */ - if (size == THUMB_WORD) - inst.instruction = (load_store == THUMB_LOAD - ? T_OPCODE_LDR_RW : T_OPCODE_STR_RW); - else if (size == THUMB_HALFWORD) - inst.instruction = (load_store == THUMB_LOAD - ? T_OPCODE_LDR_RH : T_OPCODE_STR_RH); - else - inst.instruction = (load_store == THUMB_LOAD - ? T_OPCODE_LDR_RB : T_OPCODE_STR_RB); - - inst.instruction |= Rd | (Rb << 3) | (Ro << 6); - } - - end_of_line (str); -} - -static void -do_t_nop (str) - char * str; -{ - /* Do nothing. */ - end_of_line (str); - return; -} - -/* Handle the Format 4 instructions that do not have equivalents in other - formats. That is, ADC, AND, EOR, SBC, ROR, TST, NEG, CMN, ORR, MUL, - BIC and MVN. */ - -static void -do_t_arit (str) - char * str; -{ - int Rd, Rs, Rn; - - skip_whitespace (str); - - if ((Rd = thumb_reg (&str, THUMB_REG_LO)) == FAIL - || skip_past_comma (&str) == FAIL - || (Rs = thumb_reg (&str, THUMB_REG_LO)) == FAIL) - { - inst.error = BAD_ARGS; - return; - } - - if (skip_past_comma (&str) != FAIL) - { - /* Three operand format not allowed for TST, CMN, NEG and MVN. - (It isn't allowed for CMP either, but that isn't handled by this - function.) */ - if (inst.instruction == T_OPCODE_TST - || inst.instruction == T_OPCODE_CMN - || inst.instruction == T_OPCODE_NEG - || inst.instruction == T_OPCODE_MVN) - { - inst.error = BAD_ARGS; - return; - } - - if ((Rn = thumb_reg (&str, THUMB_REG_LO)) == FAIL) - return; - - if (Rs != Rd) - { - inst.error = _("dest and source1 must be the same register"); - return; - } - Rs = Rn; - } - - if (inst.instruction == T_OPCODE_MUL - && Rs == Rd) - as_tsktsk (_("Rs and Rd must be different in MUL")); - - inst.instruction |= Rd | (Rs << 3); - end_of_line (str); -} - -static void -do_t_add (str) - char * str; -{ - thumb_add_sub (str, 0); -} - -static void -do_t_asr (str) - char * str; -{ - thumb_shift (str, THUMB_ASR); -} - -static void -do_t_branch9 (str) - char * str; -{ - if (my_get_expression (&inst.reloc.exp, &str)) - return; - inst.reloc.type = BFD_RELOC_THUMB_PCREL_BRANCH9; - inst.reloc.pc_rel = 1; - end_of_line (str); -} - -static void -do_t_branch12 (str) - char * str; -{ - if (my_get_expression (&inst.reloc.exp, &str)) - return; - inst.reloc.type = BFD_RELOC_THUMB_PCREL_BRANCH12; - inst.reloc.pc_rel = 1; - end_of_line (str); -} - -/* Find the real, Thumb encoded start of a Thumb function. */ - -static symbolS * -find_real_start (symbolP) - symbolS * symbolP; -{ - char * real_start; - const char * name = S_GET_NAME (symbolP); - symbolS * new_target; - - /* This definiton must agree with the one in gcc/config/arm/thumb.c. */ -#define STUB_NAME ".real_start_of" - - if (name == NULL) - abort (); - - /* Names that start with '.' are local labels, not function entry points. - The compiler may generate BL instructions to these labels because it - needs to perform a branch to a far away location. */ - if (name[0] == '.') - return symbolP; - - real_start = malloc (strlen (name) + strlen (STUB_NAME) + 1); - sprintf (real_start, "%s%s", STUB_NAME, name); - - new_target = symbol_find (real_start); - - if (new_target == NULL) - { - as_warn ("Failed to find real start of function: %s\n", name); - new_target = symbolP; - } - - free (real_start); - - return new_target; -} - -static void -do_t_branch23 (str) - char * str; -{ - if (my_get_expression (& inst.reloc.exp, & str)) - return; - - inst.reloc.type = BFD_RELOC_THUMB_PCREL_BRANCH23; - inst.reloc.pc_rel = 1; - end_of_line (str); - - /* If the destination of the branch is a defined symbol which does not have - the THUMB_FUNC attribute, then we must be calling a function which has - the (interfacearm) attribute. We look for the Thumb entry point to that - function and change the branch to refer to that function instead. */ - if ( inst.reloc.exp.X_op == O_symbol - && inst.reloc.exp.X_add_symbol != NULL - && S_IS_DEFINED (inst.reloc.exp.X_add_symbol) - && ! THUMB_IS_FUNC (inst.reloc.exp.X_add_symbol)) - inst.reloc.exp.X_add_symbol = - find_real_start (inst.reloc.exp.X_add_symbol); -} - -static void -do_t_bx (str) - char * str; -{ - int reg; - - skip_whitespace (str); - - if ((reg = thumb_reg (&str, THUMB_REG_ANY)) == FAIL) - return; - - /* This sets THUMB_H2 from the top bit of reg. */ - inst.instruction |= reg << 3; - - /* ??? FIXME: Should add a hacky reloc here if reg is REG_PC. The reloc - should cause the alignment to be checked once it is known. This is - because BX PC only works if the instruction is word aligned. */ - - end_of_line (str); -} - -static void -do_t_compare (str) - char * str; -{ - thumb_mov_compare (str, THUMB_COMPARE); -} - -static void -do_t_ldmstm (str) - char * str; -{ - int Rb; - long range; - - skip_whitespace (str); - - if ((Rb = thumb_reg (&str, THUMB_REG_LO)) == FAIL) - return; - - if (*str != '!') - as_warn (_("Inserted missing '!': load/store multiple always writes back base register")); - else - str++; - - if (skip_past_comma (&str) == FAIL - || (range = reg_list (&str)) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - if (inst.reloc.type != BFD_RELOC_NONE) - { - /* This really doesn't seem worth it. */ - inst.reloc.type = BFD_RELOC_NONE; - inst.error = _("Expression too complex"); - return; - } - - if (range & ~0xff) - { - inst.error = _("only lo-regs valid in load/store multiple"); - return; - } - - inst.instruction |= (Rb << 8) | range; - end_of_line (str); -} - -static void -do_t_ldr (str) - char * str; -{ - thumb_load_store (str, THUMB_LOAD, THUMB_WORD); -} - -static void -do_t_ldrb (str) - char * str; -{ - thumb_load_store (str, THUMB_LOAD, THUMB_BYTE); -} - -static void -do_t_ldrh (str) - char * str; -{ - thumb_load_store (str, THUMB_LOAD, THUMB_HALFWORD); -} - -static void -do_t_lds (str) - char * str; -{ - int Rd, Rb, Ro; - - skip_whitespace (str); - - if ((Rd = thumb_reg (&str, THUMB_REG_LO)) == FAIL - || skip_past_comma (&str) == FAIL - || *str++ != '[' - || (Rb = thumb_reg (&str, THUMB_REG_LO)) == FAIL - || skip_past_comma (&str) == FAIL - || (Ro = thumb_reg (&str, THUMB_REG_LO)) == FAIL - || *str++ != ']') - { - if (! inst.error) - inst.error = _("Syntax: ldrs[b] Rd, [Rb, Ro]"); - return; - } - - inst.instruction |= Rd | (Rb << 3) | (Ro << 6); - end_of_line (str); -} - -static void -do_t_lsl (str) - char * str; -{ - thumb_shift (str, THUMB_LSL); -} - -static void -do_t_lsr (str) - char * str; -{ - thumb_shift (str, THUMB_LSR); -} - -static void -do_t_mov (str) - char * str; -{ - thumb_mov_compare (str, THUMB_MOVE); -} - -static void -do_t_push_pop (str) - char * str; -{ - long range; - - skip_whitespace (str); - - if ((range = reg_list (&str)) == FAIL) - { - if (! inst.error) - inst.error = BAD_ARGS; - return; - } - - if (inst.reloc.type != BFD_RELOC_NONE) - { - /* This really doesn't seem worth it. */ - inst.reloc.type = BFD_RELOC_NONE; - inst.error = _("Expression too complex"); - return; - } - - if (range & ~0xff) - { - if ((inst.instruction == T_OPCODE_PUSH - && (range & ~0xff) == 1 << REG_LR) - || (inst.instruction == T_OPCODE_POP - && (range & ~0xff) == 1 << REG_PC)) - { - inst.instruction |= THUMB_PP_PC_LR; - range &= 0xff; - } - else - { - inst.error = _("invalid register list to push/pop instruction"); - return; - } - } - - inst.instruction |= range; - end_of_line (str); -} - -static void -do_t_str (str) - char * str; -{ - thumb_load_store (str, THUMB_STORE, THUMB_WORD); -} - -static void -do_t_strb (str) - char * str; -{ - thumb_load_store (str, THUMB_STORE, THUMB_BYTE); -} - -static void -do_t_strh (str) - char * str; -{ - thumb_load_store (str, THUMB_STORE, THUMB_HALFWORD); -} - -static void -do_t_sub (str) - char * str; -{ - thumb_add_sub (str, 1); -} - -static void -do_t_swi (str) - char * str; -{ - skip_whitespace (str); - - if (my_get_expression (&inst.reloc.exp, &str)) - return; - - inst.reloc.type = BFD_RELOC_ARM_SWI; - end_of_line (str); - return; -} - -static void -do_t_adr (str) - char * str; -{ - int reg; - - /* This is a pseudo-op of the form "adr rd, label" to be converted - into a relative address of the form "add rd, pc, #label-.-4". */ - skip_whitespace (str); - - /* Store Rd in temporary location inside instruction. */ - if ((reg = reg_required_here (&str, 4)) == FAIL - || (reg > 7) /* For Thumb reg must be r0..r7. */ - || skip_past_comma (&str) == FAIL - || my_get_expression (&inst.reloc.exp, &str)) - { - if (!inst.error) - inst.error = BAD_ARGS; - return; - } - - inst.reloc.type = BFD_RELOC_ARM_THUMB_ADD; - inst.reloc.exp.X_add_number -= 4; /* PC relative adjust. */ - inst.reloc.pc_rel = 1; - inst.instruction |= REG_PC; /* Rd is already placed into the instruction. */ - - end_of_line (str); -} - -static void -insert_reg (entry) - int entry; -{ - int len = strlen (reg_table[entry].name) + 2; - char * buf = (char *) xmalloc (len); - char * buf2 = (char *) xmalloc (len); - int i = 0; - -#ifdef REGISTER_PREFIX - buf[i++] = REGISTER_PREFIX; -#endif - - strcpy (buf + i, reg_table[entry].name); - - for (i = 0; buf[i]; i++) - buf2[i] = islower (buf[i]) ? toupper (buf[i]) : buf[i]; - - buf2[i] = '\0'; - - hash_insert (arm_reg_hsh, buf, (PTR) & reg_table[entry]); - hash_insert (arm_reg_hsh, buf2, (PTR) & reg_table[entry]); -} - -static void -insert_reg_alias (str, regnum) - char *str; - int regnum; -{ - struct reg_entry *new = - (struct reg_entry *) xmalloc (sizeof (struct reg_entry)); - char *name = xmalloc (strlen (str) + 1); - strcpy (name, str); - - new->name = name; - new->number = regnum; - - hash_insert (arm_reg_hsh, name, (PTR) new); -} - -static void -set_constant_flonums () -{ - int i; - - for (i = 0; i < NUM_FLOAT_VALS; i++) - if (atof_ieee ((char *) fp_const[i], 'x', fp_values[i]) == NULL) - abort (); -} - -void -md_begin () -{ - unsigned mach; - unsigned int i; - - if ( (arm_ops_hsh = hash_new ()) == NULL - || (arm_tops_hsh = hash_new ()) == NULL - || (arm_cond_hsh = hash_new ()) == NULL - || (arm_shift_hsh = hash_new ()) == NULL - || (arm_reg_hsh = hash_new ()) == NULL - || (arm_psr_hsh = hash_new ()) == NULL) - as_fatal (_("Virtual memory exhausted")); - - for (i = 0; i < sizeof (insns) / sizeof (struct asm_opcode); i++) - hash_insert (arm_ops_hsh, insns[i].template, (PTR) (insns + i)); - for (i = 0; i < sizeof (tinsns) / sizeof (struct thumb_opcode); i++) - hash_insert (arm_tops_hsh, tinsns[i].template, (PTR) (tinsns + i)); - for (i = 0; i < sizeof (conds) / sizeof (struct asm_cond); i++) - hash_insert (arm_cond_hsh, conds[i].template, (PTR) (conds + i)); - for (i = 0; i < sizeof (shift_names) / sizeof (struct asm_shift_name); i++) - hash_insert (arm_shift_hsh, shift_names[i].name, (PTR) (shift_names + i)); - for (i = 0; i < sizeof (psrs) / sizeof (struct asm_psr); i++) - hash_insert (arm_psr_hsh, psrs[i].template, (PTR) (psrs + i)); - - for (i = 0; reg_table[i].name; i++) - insert_reg (i); - - set_constant_flonums (); - -#if defined OBJ_COFF || defined OBJ_ELF - { - unsigned int flags = 0; - - /* Set the flags in the private structure. */ - if (uses_apcs_26) flags |= F_APCS26; - if (support_interwork) flags |= F_INTERWORK; - if (uses_apcs_float) flags |= F_APCS_FLOAT; - if (pic_code) flags |= F_PIC; - if ((cpu_variant & FPU_ALL) == FPU_NONE) flags |= F_SOFT_FLOAT; - - bfd_set_private_flags (stdoutput, flags); - - /* We have run out flags in the COFF header to encode the - status of ATPCS support, so instead we create a dummy, - empty, debug section called .arm.atpcs. */ - if (atpcs) - { - asection * sec; - - sec = bfd_make_section (stdoutput, ".arm.atpcs"); - - if (sec != NULL) - { - bfd_set_section_flags - (stdoutput, sec, SEC_READONLY | SEC_DEBUGGING /* | SEC_HAS_CONTENTS */); - bfd_set_section_size (stdoutput, sec, 0); - bfd_set_section_contents (stdoutput, sec, NULL, 0, 0); - } - } - } -#endif - - /* Record the CPU type as well. */ - switch (cpu_variant & ARM_CPU_MASK) - { - case ARM_2: - mach = bfd_mach_arm_2; - break; - - case ARM_3: /* Also ARM_250. */ - mach = bfd_mach_arm_2a; - break; - - default: - case ARM_6 | ARM_3 | ARM_2: /* Actually no CPU type defined. */ - mach = bfd_mach_arm_4; - break; - - case ARM_7: /* Also ARM_6. */ - mach = bfd_mach_arm_3; - break; - } - - /* Catch special cases. */ - if (cpu_variant & ARM_EXT_XSCALE) - mach = bfd_mach_arm_XScale; - else if (cpu_variant & ARM_EXT_V5E) - mach = bfd_mach_arm_5TE; - else if (cpu_variant & ARM_EXT_V5) - { - if (cpu_variant & ARM_EXT_THUMB) - mach = bfd_mach_arm_5T; - else - mach = bfd_mach_arm_5; - } - else if (cpu_variant & ARM_EXT_HALFWORD) - { - if (cpu_variant & ARM_EXT_THUMB) - mach = bfd_mach_arm_4T; - else - mach = bfd_mach_arm_4; - } - else if (cpu_variant & ARM_EXT_LONGMUL) - mach = bfd_mach_arm_3M; - - bfd_set_arch_mach (stdoutput, TARGET_ARCH, mach); -} - -/* Turn an integer of n bytes (in val) into a stream of bytes appropriate - for use in the a.out file, and stores them in the array pointed to by buf. - This knows about the endian-ness of the target machine and does - THE RIGHT THING, whatever it is. Possible values for n are 1 (byte) - 2 (short) and 4 (long) Floating numbers are put out as a series of - LITTLENUMS (shorts, here at least). */ - -void -md_number_to_chars (buf, val, n) - char * buf; - valueT val; - int n; -{ - if (target_big_endian) - number_to_chars_bigendian (buf, val, n); - else - number_to_chars_littleendian (buf, val, n); -} - -static valueT -md_chars_to_number (buf, n) - char * buf; - int n; -{ - valueT result = 0; - unsigned char * where = (unsigned char *) buf; - - if (target_big_endian) - { - while (n--) - { - result <<= 8; - result |= (*where++ & 255); - } - } - else - { - while (n--) - { - result <<= 8; - result |= (where[n] & 255); - } - } - - return result; -} - -/* Turn a string in input_line_pointer into a floating point constant - of type TYPE, and store the appropriate bytes in *LITP. The number - of LITTLENUMS emitted is stored in *SIZEP. An error message is - returned, or NULL on OK. - - Note that fp constants aren't represent in the normal way on the ARM. - In big endian mode, things are as expected. However, in little endian - mode fp constants are big-endian word-wise, and little-endian byte-wise - within the words. For example, (double) 1.1 in big endian mode is - the byte sequence 3f f1 99 99 99 99 99 9a, and in little endian mode is - the byte sequence 99 99 f1 3f 9a 99 99 99. - - ??? The format of 12 byte floats is uncertain according to gcc's arm.h. */ - -char * -md_atof (type, litP, sizeP) - char type; - char * litP; - int * sizeP; -{ - int prec; - LITTLENUM_TYPE words[MAX_LITTLENUMS]; - char *t; - int i; - - switch (type) - { - case 'f': - case 'F': - case 's': - case 'S': - prec = 2; - break; - - case 'd': - case 'D': - case 'r': - case 'R': - prec = 4; - break; - - case 'x': - case 'X': - prec = 6; - break; - - case 'p': - case 'P': - prec = 6; - break; - - default: - *sizeP = 0; - return _("Bad call to MD_ATOF()"); - } - - t = atof_ieee (input_line_pointer, type, words); - if (t) - input_line_pointer = t; - *sizeP = prec * 2; - - if (target_big_endian) - { - for (i = 0; i < prec; i++) - { - md_number_to_chars (litP, (valueT) words[i], 2); - litP += 2; - } - } - else - { - /* For a 4 byte float the order of elements in `words' is 1 0. For an - 8 byte float the order is 1 0 3 2. */ - for (i = 0; i < prec; i += 2) - { - md_number_to_chars (litP, (valueT) words[i + 1], 2); - md_number_to_chars (litP + 2, (valueT) words[i], 2); - litP += 4; - } - } - - return 0; -} - -/* The knowledge of the PC's pipeline offset is built into the insns - themselves. */ - -long -md_pcrel_from (fixP) - fixS * fixP; -{ - if (fixP->fx_addsy - && S_GET_SEGMENT (fixP->fx_addsy) == undefined_section - && fixP->fx_subsy == NULL) - return 0; - - if (fixP->fx_pcrel && (fixP->fx_r_type == BFD_RELOC_ARM_THUMB_ADD)) - { - /* PC relative addressing on the Thumb is slightly odd - as the bottom two bits of the PC are forced to zero - for the calculation. */ - return (fixP->fx_where + fixP->fx_frag->fr_address) & ~3; - } - -#ifdef TE_WINCE - /* The pattern was adjusted to accomodate CE's off-by-one fixups, - so we un-adjust here to compensate for the accomodation. */ - return fixP->fx_where + fixP->fx_frag->fr_address + 8; -#else - return fixP->fx_where + fixP->fx_frag->fr_address; -#endif -} - -/* Round up a section size to the appropriate boundary. */ - -valueT -md_section_align (segment, size) - segT segment ATTRIBUTE_UNUSED; - valueT size; -{ -#ifdef OBJ_ELF - return size; -#else - /* Round all sects to multiple of 4. */ - return (size + 3) & ~3; -#endif -} - -/* Under ELF we need to default _GLOBAL_OFFSET_TABLE. - Otherwise we have no need to default values of symbols. */ - -symbolS * -md_undefined_symbol (name) - char * name ATTRIBUTE_UNUSED; -{ -#ifdef OBJ_ELF - if (name[0] == '_' && name[1] == 'G' - && streq (name, GLOBAL_OFFSET_TABLE_NAME)) - { - if (!GOT_symbol) - { - if (symbol_find (name)) - as_bad ("GOT already in the symbol table"); - - GOT_symbol = symbol_new (name, undefined_section, - (valueT) 0, & zero_address_frag); - } - - return GOT_symbol; - } -#endif - - return 0; -} - -/* arm_reg_parse () := if it looks like a register, return its token and - advance the pointer. */ - -static int -arm_reg_parse (ccp) - register char ** ccp; -{ - char * start = * ccp; - char c; - char * p; - struct reg_entry * reg; - -#ifdef REGISTER_PREFIX - if (*start != REGISTER_PREFIX) - return FAIL; - p = start + 1; -#else - p = start; -#ifdef OPTIONAL_REGISTER_PREFIX - if (*p == OPTIONAL_REGISTER_PREFIX) - p++, start++; -#endif -#endif - if (!isalpha (*p) || !is_name_beginner (*p)) - return FAIL; - - c = *p++; - while (isalpha (c) || isdigit (c) || c == '_') - c = *p++; - - *--p = 0; - reg = (struct reg_entry *) hash_find (arm_reg_hsh, start); - *p = c; - - if (reg) - { - *ccp = p; - return reg->number; - } - - return FAIL; -} - -int -md_apply_fix3 (fixP, val, seg) - fixS * fixP; - valueT * val; - segT seg; -{ - offsetT value = * val; - offsetT newval; - unsigned int newimm; - unsigned long temp; - int sign; - char * buf = fixP->fx_where + fixP->fx_frag->fr_literal; - arm_fix_data * arm_data = (arm_fix_data *) fixP->tc_fix_data; - - assert (fixP->fx_r_type < BFD_RELOC_UNUSED); - - /* Note whether this will delete the relocation. */ -#if 0 - /* Patch from REarnshaw to JDavis (disabled for the moment, since it - doesn't work fully.) */ - if ((fixP->fx_addsy == 0 || symbol_constant_p (fixP->fx_addsy)) - && !fixP->fx_pcrel) -#else - if (fixP->fx_addsy == 0 && !fixP->fx_pcrel) -#endif - fixP->fx_done = 1; - - /* If this symbol is in a different section then we need to leave it for - the linker to deal with. Unfortunately, md_pcrel_from can't tell, - so we have to undo it's effects here. */ - if (fixP->fx_pcrel) - { - if (fixP->fx_addsy != NULL - && S_IS_DEFINED (fixP->fx_addsy) - && S_GET_SEGMENT (fixP->fx_addsy) != seg) - { - if (target_oabi - && (fixP->fx_r_type == BFD_RELOC_ARM_PCREL_BRANCH - || fixP->fx_r_type == BFD_RELOC_ARM_PCREL_BLX - )) - value = 0; - else - value += md_pcrel_from (fixP); - } - } - - /* Remember value for emit_reloc. */ - fixP->fx_addnumber = value; - - switch (fixP->fx_r_type) - { - case BFD_RELOC_ARM_IMMEDIATE: - newimm = validate_immediate (value); - temp = md_chars_to_number (buf, INSN_SIZE); - - /* If the instruction will fail, see if we can fix things up by - changing the opcode. */ - if (newimm == (unsigned int) FAIL - && (newimm = negate_data_op (&temp, value)) == (unsigned int) FAIL) - { - as_bad_where (fixP->fx_file, fixP->fx_line, - _("invalid constant (%lx) after fixup"), - (unsigned long) value); - break; - } - - newimm |= (temp & 0xfffff000); - md_number_to_chars (buf, (valueT) newimm, INSN_SIZE); - break; - - case BFD_RELOC_ARM_ADRL_IMMEDIATE: - { - unsigned int highpart = 0; - unsigned int newinsn = 0xe1a00000; /* nop. */ - newimm = validate_immediate (value); - temp = md_chars_to_number (buf, INSN_SIZE); - - /* If the instruction will fail, see if we can fix things up by - changing the opcode. */ - if (newimm == (unsigned int) FAIL - && (newimm = negate_data_op (& temp, value)) == (unsigned int) FAIL) - { - /* No ? OK - try using two ADD instructions to generate - the value. */ - newimm = validate_immediate_twopart (value, & highpart); - - /* Yes - then make sure that the second instruction is - also an add. */ - if (newimm != (unsigned int) FAIL) - newinsn = temp; - /* Still No ? Try using a negated value. */ - else if ((newimm = validate_immediate_twopart (- value, & highpart)) != (unsigned int) FAIL) - temp = newinsn = (temp & OPCODE_MASK) | OPCODE_SUB << DATA_OP_SHIFT; - /* Otherwise - give up. */ - else - { - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Unable to compute ADRL instructions for PC offset of 0x%lx"), - value); - break; - } - - /* Replace the first operand in the 2nd instruction (which - is the PC) with the destination register. We have - already added in the PC in the first instruction and we - do not want to do it again. */ - newinsn &= ~ 0xf0000; - newinsn |= ((newinsn & 0x0f000) << 4); - } - - newimm |= (temp & 0xfffff000); - md_number_to_chars (buf, (valueT) newimm, INSN_SIZE); - - highpart |= (newinsn & 0xfffff000); - md_number_to_chars (buf + INSN_SIZE, (valueT) highpart, INSN_SIZE); - } - break; - - case BFD_RELOC_ARM_OFFSET_IMM: - sign = value >= 0; - - if (value < 0) - value = - value; - - if (validate_offset_imm (value, 0) == FAIL) - { - as_bad_where (fixP->fx_file, fixP->fx_line, - _("bad immediate value for offset (%ld)"), - (long) value); - break; - } - - newval = md_chars_to_number (buf, INSN_SIZE); - newval &= 0xff7ff000; - newval |= value | (sign ? INDEX_UP : 0); - md_number_to_chars (buf, newval, INSN_SIZE); - break; - - case BFD_RELOC_ARM_OFFSET_IMM8: - case BFD_RELOC_ARM_HWLITERAL: - sign = value >= 0; - - if (value < 0) - value = - value; - - if (validate_offset_imm (value, 1) == FAIL) - { - if (fixP->fx_r_type == BFD_RELOC_ARM_HWLITERAL) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("invalid literal constant: pool needs to be closer")); - else - as_bad (_("bad immediate value for half-word offset (%ld)"), - (long) value); - break; - } - - newval = md_chars_to_number (buf, INSN_SIZE); - newval &= 0xff7ff0f0; - newval |= ((value >> 4) << 8) | (value & 0xf) | (sign ? INDEX_UP : 0); - md_number_to_chars (buf, newval, INSN_SIZE); - break; - - case BFD_RELOC_ARM_LITERAL: - sign = value >= 0; - - if (value < 0) - value = - value; - - if (validate_offset_imm (value, 0) == FAIL) - { - as_bad_where (fixP->fx_file, fixP->fx_line, - _("invalid literal constant: pool needs to be closer")); - break; - } - - newval = md_chars_to_number (buf, INSN_SIZE); - newval &= 0xff7ff000; - newval |= value | (sign ? INDEX_UP : 0); - md_number_to_chars (buf, newval, INSN_SIZE); - break; - - case BFD_RELOC_ARM_SHIFT_IMM: - newval = md_chars_to_number (buf, INSN_SIZE); - if (((unsigned long) value) > 32 - || (value == 32 - && (((newval & 0x60) == 0) || (newval & 0x60) == 0x60))) - { - as_bad_where (fixP->fx_file, fixP->fx_line, - _("shift expression is too large")); - break; - } - - if (value == 0) - /* Shifts of zero must be done as lsl. */ - newval &= ~0x60; - else if (value == 32) - value = 0; - newval &= 0xfffff07f; - newval |= (value & 0x1f) << 7; - md_number_to_chars (buf, newval, INSN_SIZE); - break; - - case BFD_RELOC_ARM_SWI: - if (arm_data->thumb_mode) - { - if (((unsigned long) value) > 0xff) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Invalid swi expression")); - newval = md_chars_to_number (buf, THUMB_SIZE) & 0xff00; - newval |= value; - md_number_to_chars (buf, newval, THUMB_SIZE); - } - else - { - if (((unsigned long) value) > 0x00ffffff) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Invalid swi expression")); - newval = md_chars_to_number (buf, INSN_SIZE) & 0xff000000; - newval |= value; - md_number_to_chars (buf, newval, INSN_SIZE); - } - break; - - case BFD_RELOC_ARM_MULTI: - if (((unsigned long) value) > 0xffff) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Invalid expression in load/store multiple")); - newval = value | md_chars_to_number (buf, INSN_SIZE); - md_number_to_chars (buf, newval, INSN_SIZE); - break; - - case BFD_RELOC_ARM_PCREL_BRANCH: - newval = md_chars_to_number (buf, INSN_SIZE); - - /* Sign-extend a 24-bit number. */ -#define SEXT24(x) ((((x) & 0xffffff) ^ (~ 0x7fffff)) + 0x800000) - -#ifdef OBJ_ELF - if (! target_oabi) - value = fixP->fx_offset; -#endif - - /* We are going to store value (shifted right by two) in the - instruction, in a 24 bit, signed field. Thus we need to check - that none of the top 8 bits of the shifted value (top 7 bits of - the unshifted, unsigned value) are set, or that they are all set. */ - if ((value & ~ ((offsetT) 0x1ffffff)) != 0 - && ((value & ~ ((offsetT) 0x1ffffff)) != ~ ((offsetT) 0x1ffffff))) - { -#ifdef OBJ_ELF - /* Normally we would be stuck at this point, since we cannot store - the absolute address that is the destination of the branch in the - 24 bits of the branch instruction. If however, we happen to know - that the destination of the branch is in the same section as the - branch instruciton itself, then we can compute the relocation for - ourselves and not have to bother the linker with it. - - FIXME: The tests for OBJ_ELF and ! target_oabi are only here - because I have not worked out how to do this for OBJ_COFF or - target_oabi. */ - if (! target_oabi - && fixP->fx_addsy != NULL - && S_IS_DEFINED (fixP->fx_addsy) - && S_GET_SEGMENT (fixP->fx_addsy) == seg) - { - /* Get pc relative value to go into the branch. */ - value = * val; - - /* Permit a backward branch provided that enough bits - are set. Allow a forwards branch, provided that - enough bits are clear. */ - if ( (value & ~ ((offsetT) 0x1ffffff)) == ~ ((offsetT) 0x1ffffff) - || (value & ~ ((offsetT) 0x1ffffff)) == 0) - fixP->fx_done = 1; - } - - if (! fixP->fx_done) -#endif - as_bad_where (fixP->fx_file, fixP->fx_line, - _("gas can't handle same-section branch dest >= 0x04000000")); - } - - value >>= 2; - value += SEXT24 (newval); - - if ( (value & ~ ((offsetT) 0xffffff)) != 0 - && ((value & ~ ((offsetT) 0xffffff)) != ~ ((offsetT) 0xffffff))) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("out of range branch")); - - newval = (value & 0x00ffffff) | (newval & 0xff000000); - md_number_to_chars (buf, newval, INSN_SIZE); - break; - - case BFD_RELOC_ARM_PCREL_BLX: - { - offsetT hbit; - newval = md_chars_to_number (buf, INSN_SIZE); - -#ifdef OBJ_ELF - if (! target_oabi) - value = fixP->fx_offset; -#endif - hbit = (value >> 1) & 1; - value = (value >> 2) & 0x00ffffff; - value = (value + (newval & 0x00ffffff)) & 0x00ffffff; - newval = value | (newval & 0xfe000000) | (hbit << 24); - md_number_to_chars (buf, newval, INSN_SIZE); - } - break; - - case BFD_RELOC_THUMB_PCREL_BRANCH9: /* Conditional branch. */ - newval = md_chars_to_number (buf, THUMB_SIZE); - { - addressT diff = (newval & 0xff) << 1; - if (diff & 0x100) - diff |= ~0xff; - - value += diff; - if ((value & ~0xff) && ((value & ~0xff) != ~0xff)) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Branch out of range")); - newval = (newval & 0xff00) | ((value & 0x1ff) >> 1); - } - md_number_to_chars (buf, newval, THUMB_SIZE); - break; - - case BFD_RELOC_THUMB_PCREL_BRANCH12: /* Unconditional branch. */ - newval = md_chars_to_number (buf, THUMB_SIZE); - { - addressT diff = (newval & 0x7ff) << 1; - if (diff & 0x800) - diff |= ~0x7ff; - - value += diff; - if ((value & ~0x7ff) && ((value & ~0x7ff) != ~0x7ff)) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Branch out of range")); - newval = (newval & 0xf800) | ((value & 0xfff) >> 1); - } - md_number_to_chars (buf, newval, THUMB_SIZE); - break; - - case BFD_RELOC_THUMB_PCREL_BLX: - case BFD_RELOC_THUMB_PCREL_BRANCH23: - { - offsetT newval2; - addressT diff; - - newval = md_chars_to_number (buf, THUMB_SIZE); - newval2 = md_chars_to_number (buf + THUMB_SIZE, THUMB_SIZE); - diff = ((newval & 0x7ff) << 12) | ((newval2 & 0x7ff) << 1); - if (diff & 0x400000) - diff |= ~0x3fffff; -#ifdef OBJ_ELF - value = fixP->fx_offset; -#endif - value += diff; - if ((value & ~0x3fffff) && ((value & ~0x3fffff) != ~0x3fffff)) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Branch with link out of range")); - - newval = (newval & 0xf800) | ((value & 0x7fffff) >> 12); - newval2 = (newval2 & 0xf800) | ((value & 0xfff) >> 1); - if (fixP->fx_r_type == BFD_RELOC_THUMB_PCREL_BLX) - /* Remove bit zero of the adjusted offset. Bit zero can only be - set if the upper insn is at a half-word boundary, since the - destination address, an ARM instruction, must always be on a - word boundary. The semantics of the BLX (1) instruction, however, - are that bit zero in the offset must always be zero, and the - corresponding bit one in the target address will be set from bit - one of the source address. */ - newval2 &= ~1; - md_number_to_chars (buf, newval, THUMB_SIZE); - md_number_to_chars (buf + THUMB_SIZE, newval2, THUMB_SIZE); - } - break; - - case BFD_RELOC_8: - if (fixP->fx_done || fixP->fx_pcrel) - md_number_to_chars (buf, value, 1); -#ifdef OBJ_ELF - else if (!target_oabi) - { - value = fixP->fx_offset; - md_number_to_chars (buf, value, 1); - } -#endif - break; - - case BFD_RELOC_16: - if (fixP->fx_done || fixP->fx_pcrel) - md_number_to_chars (buf, value, 2); -#ifdef OBJ_ELF - else if (!target_oabi) - { - value = fixP->fx_offset; - md_number_to_chars (buf, value, 2); - } -#endif - break; - -#ifdef OBJ_ELF - case BFD_RELOC_ARM_GOT32: - case BFD_RELOC_ARM_GOTOFF: - md_number_to_chars (buf, 0, 4); - break; -#endif - - case BFD_RELOC_RVA: - case BFD_RELOC_32: - if (fixP->fx_done || fixP->fx_pcrel) - md_number_to_chars (buf, value, 4); -#ifdef OBJ_ELF - else if (!target_oabi) - { - value = fixP->fx_offset; - md_number_to_chars (buf, value, 4); - } -#endif - break; - -#ifdef OBJ_ELF - case BFD_RELOC_ARM_PLT32: - /* It appears the instruction is fully prepared at this point. */ - break; -#endif - - case BFD_RELOC_ARM_GOTPC: - md_number_to_chars (buf, value, 4); - break; - - case BFD_RELOC_ARM_CP_OFF_IMM: - sign = value >= 0; - if (value < -1023 || value > 1023 || (value & 3)) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Illegal value for co-processor offset")); - if (value < 0) - value = -value; - newval = md_chars_to_number (buf, INSN_SIZE) & 0xff7fff00; - newval |= (value >> 2) | (sign ? INDEX_UP : 0); - md_number_to_chars (buf, newval, INSN_SIZE); - break; - - case BFD_RELOC_ARM_THUMB_OFFSET: - newval = md_chars_to_number (buf, THUMB_SIZE); - /* Exactly what ranges, and where the offset is inserted depends - on the type of instruction, we can establish this from the - top 4 bits. */ - switch (newval >> 12) - { - case 4: /* PC load. */ - /* Thumb PC loads are somewhat odd, bit 1 of the PC is - forced to zero for these loads, so we will need to round - up the offset if the instruction address is not word - aligned (since the final address produced must be, and - we can only describe word-aligned immediate offsets). */ - - if ((fixP->fx_frag->fr_address + fixP->fx_where + value) & 3) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Invalid offset, target not word aligned (0x%08X)"), - (unsigned int) (fixP->fx_frag->fr_address - + fixP->fx_where + value)); - - if ((value + 2) & ~0x3fe) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Invalid offset, value too big (0x%08lX)"), value); - - /* Round up, since pc will be rounded down. */ - newval |= (value + 2) >> 2; - break; - - case 9: /* SP load/store. */ - if (value & ~0x3fc) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Invalid offset, value too big (0x%08lX)"), value); - newval |= value >> 2; - break; - - case 6: /* Word load/store. */ - if (value & ~0x7c) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Invalid offset, value too big (0x%08lX)"), value); - newval |= value << 4; /* 6 - 2. */ - break; - - case 7: /* Byte load/store. */ - if (value & ~0x1f) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Invalid offset, value too big (0x%08lX)"), value); - newval |= value << 6; - break; - - case 8: /* Halfword load/store. */ - if (value & ~0x3e) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Invalid offset, value too big (0x%08lX)"), value); - newval |= value << 5; /* 6 - 1. */ - break; - - default: - as_bad_where (fixP->fx_file, fixP->fx_line, - "Unable to process relocation for thumb opcode: %lx", - (unsigned long) newval); - break; - } - md_number_to_chars (buf, newval, THUMB_SIZE); - break; - - case BFD_RELOC_ARM_THUMB_ADD: - /* This is a complicated relocation, since we use it for all of - the following immediate relocations: - - 3bit ADD/SUB - 8bit ADD/SUB - 9bit ADD/SUB SP word-aligned - 10bit ADD PC/SP word-aligned - - The type of instruction being processed is encoded in the - instruction field: - - 0x8000 SUB - 0x00F0 Rd - 0x000F Rs - */ - newval = md_chars_to_number (buf, THUMB_SIZE); - { - int rd = (newval >> 4) & 0xf; - int rs = newval & 0xf; - int subtract = newval & 0x8000; - - if (rd == REG_SP) - { - if (value & ~0x1fc) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Invalid immediate for stack address calculation")); - newval = subtract ? T_OPCODE_SUB_ST : T_OPCODE_ADD_ST; - newval |= value >> 2; - } - else if (rs == REG_PC || rs == REG_SP) - { - if (subtract || - value & ~0x3fc) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Invalid immediate for address calculation (value = 0x%08lX)"), - (unsigned long) value); - newval = (rs == REG_PC ? T_OPCODE_ADD_PC : T_OPCODE_ADD_SP); - newval |= rd << 8; - newval |= value >> 2; - } - else if (rs == rd) - { - if (value & ~0xff) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Invalid 8bit immediate")); - newval = subtract ? T_OPCODE_SUB_I8 : T_OPCODE_ADD_I8; - newval |= (rd << 8) | value; - } - else - { - if (value & ~0x7) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Invalid 3bit immediate")); - newval = subtract ? T_OPCODE_SUB_I3 : T_OPCODE_ADD_I3; - newval |= rd | (rs << 3) | (value << 6); - } - } - md_number_to_chars (buf, newval, THUMB_SIZE); - break; - - case BFD_RELOC_ARM_THUMB_IMM: - newval = md_chars_to_number (buf, THUMB_SIZE); - switch (newval >> 11) - { - case 0x04: /* 8bit immediate MOV. */ - case 0x05: /* 8bit immediate CMP. */ - if (value < 0 || value > 255) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Invalid immediate: %ld is too large"), - (long) value); - newval |= value; - break; - - default: - abort (); - } - md_number_to_chars (buf, newval, THUMB_SIZE); - break; - - case BFD_RELOC_ARM_THUMB_SHIFT: - /* 5bit shift value (0..31). */ - if (value < 0 || value > 31) - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Illegal Thumb shift value: %ld"), (long) value); - newval = md_chars_to_number (buf, THUMB_SIZE) & 0xf03f; - newval |= value << 6; - md_number_to_chars (buf, newval, THUMB_SIZE); - break; - - case BFD_RELOC_VTABLE_INHERIT: - case BFD_RELOC_VTABLE_ENTRY: - fixP->fx_done = 0; - return 1; - - case BFD_RELOC_NONE: - default: - as_bad_where (fixP->fx_file, fixP->fx_line, - _("Bad relocation fixup type (%d)"), fixP->fx_r_type); - } - - return 1; -} - -/* Translate internal representation of relocation info to BFD target - format. */ - -arelent * -tc_gen_reloc (section, fixp) - asection * section ATTRIBUTE_UNUSED; - fixS * fixp; -{ - arelent * reloc; - bfd_reloc_code_real_type code; - - reloc = (arelent *) xmalloc (sizeof (arelent)); - - reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); - *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); - reloc->address = fixp->fx_frag->fr_address + fixp->fx_where; - - /* @@ Why fx_addnumber sometimes and fx_offset other times? */ -#ifndef OBJ_ELF - if (fixp->fx_pcrel == 0) - reloc->addend = fixp->fx_offset; - else - reloc->addend = fixp->fx_offset = reloc->address; -#else /* OBJ_ELF */ - reloc->addend = fixp->fx_offset; -#endif - - switch (fixp->fx_r_type) - { - case BFD_RELOC_8: - if (fixp->fx_pcrel) - { - code = BFD_RELOC_8_PCREL; - break; - } - - case BFD_RELOC_16: - if (fixp->fx_pcrel) - { - code = BFD_RELOC_16_PCREL; - break; - } - - case BFD_RELOC_32: - if (fixp->fx_pcrel) - { - code = BFD_RELOC_32_PCREL; - break; - } - - case BFD_RELOC_ARM_PCREL_BRANCH: - case BFD_RELOC_ARM_PCREL_BLX: - case BFD_RELOC_RVA: - case BFD_RELOC_THUMB_PCREL_BRANCH9: - case BFD_RELOC_THUMB_PCREL_BRANCH12: - case BFD_RELOC_THUMB_PCREL_BRANCH23: - case BFD_RELOC_THUMB_PCREL_BLX: - case BFD_RELOC_VTABLE_ENTRY: - case BFD_RELOC_VTABLE_INHERIT: - code = fixp->fx_r_type; - break; - - case BFD_RELOC_ARM_LITERAL: - case BFD_RELOC_ARM_HWLITERAL: - /* If this is called then the a literal has been referenced across - a section boundary - possibly due to an implicit dump. */ - as_bad_where (fixp->fx_file, fixp->fx_line, - _("Literal referenced across section boundary (Implicit dump?)")); - return NULL; - -#ifdef OBJ_ELF - case BFD_RELOC_ARM_GOT32: - case BFD_RELOC_ARM_GOTOFF: - case BFD_RELOC_ARM_PLT32: - code = fixp->fx_r_type; - break; -#endif - - case BFD_RELOC_ARM_IMMEDIATE: - as_bad_where (fixp->fx_file, fixp->fx_line, - _("Internal_relocation (type %d) not fixed up (IMMEDIATE)"), - fixp->fx_r_type); - return NULL; - - case BFD_RELOC_ARM_ADRL_IMMEDIATE: - as_bad_where (fixp->fx_file, fixp->fx_line, - _("ADRL used for a symbol not defined in the same file")); - return NULL; - - case BFD_RELOC_ARM_OFFSET_IMM: - as_bad_where (fixp->fx_file, fixp->fx_line, - _("Internal_relocation (type %d) not fixed up (OFFSET_IMM)"), - fixp->fx_r_type); - return NULL; - - default: - { - char * type; - - switch (fixp->fx_r_type) - { - case BFD_RELOC_ARM_IMMEDIATE: type = "IMMEDIATE"; break; - case BFD_RELOC_ARM_OFFSET_IMM: type = "OFFSET_IMM"; break; - case BFD_RELOC_ARM_OFFSET_IMM8: type = "OFFSET_IMM8"; break; - case BFD_RELOC_ARM_SHIFT_IMM: type = "SHIFT_IMM"; break; - case BFD_RELOC_ARM_SWI: type = "SWI"; break; - case BFD_RELOC_ARM_MULTI: type = "MULTI"; break; - case BFD_RELOC_ARM_CP_OFF_IMM: type = "CP_OFF_IMM"; break; - case BFD_RELOC_ARM_THUMB_ADD: type = "THUMB_ADD"; break; - case BFD_RELOC_ARM_THUMB_SHIFT: type = "THUMB_SHIFT"; break; - case BFD_RELOC_ARM_THUMB_IMM: type = "THUMB_IMM"; break; - case BFD_RELOC_ARM_THUMB_OFFSET: type = "THUMB_OFFSET"; break; - default: type = _("<unknown>"); break; - } - as_bad_where (fixp->fx_file, fixp->fx_line, - _("Cannot represent %s relocation in this object file format"), - type); - return NULL; - } - } - -#ifdef OBJ_ELF - if (code == BFD_RELOC_32_PCREL - && GOT_symbol - && fixp->fx_addsy == GOT_symbol) - { - code = BFD_RELOC_ARM_GOTPC; - reloc->addend = fixp->fx_offset = reloc->address; - } -#endif - - reloc->howto = bfd_reloc_type_lookup (stdoutput, code); - - if (reloc->howto == NULL) - { - as_bad_where (fixp->fx_file, fixp->fx_line, - _("Can not represent %s relocation in this object file format"), - bfd_get_reloc_code_name (code)); - return NULL; - } - - /* HACK: Since arm ELF uses Rel instead of Rela, encode the - vtable entry to be used in the relocation's section offset. */ - if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY) - reloc->address = fixp->fx_offset; - - return reloc; -} - -int -md_estimate_size_before_relax (fragP, segtype) - fragS * fragP ATTRIBUTE_UNUSED; - segT segtype ATTRIBUTE_UNUSED; -{ - as_fatal (_("md_estimate_size_before_relax\n")); - return 1; -} - -static void -output_inst PARAMS ((void)) -{ - char * to = NULL; - - if (inst.error) - { - as_bad (inst.error); - return; - } - - to = frag_more (inst.size); - - if (thumb_mode && (inst.size > THUMB_SIZE)) - { - assert (inst.size == (2 * THUMB_SIZE)); - md_number_to_chars (to, inst.instruction >> 16, THUMB_SIZE); - md_number_to_chars (to + THUMB_SIZE, inst.instruction, THUMB_SIZE); - } - else if (inst.size > INSN_SIZE) - { - assert (inst.size == (2 * INSN_SIZE)); - md_number_to_chars (to, inst.instruction, INSN_SIZE); - md_number_to_chars (to + INSN_SIZE, inst.instruction, INSN_SIZE); - } - else - md_number_to_chars (to, inst.instruction, inst.size); - - if (inst.reloc.type != BFD_RELOC_NONE) - fix_new_arm (frag_now, to - frag_now->fr_literal, - inst.size, & inst.reloc.exp, inst.reloc.pc_rel, - inst.reloc.type); - -#ifdef OBJ_ELF - dwarf2_emit_insn (inst.size); -#endif -} - -void -md_assemble (str) - char * str; -{ - char c; - char * p; - char * q; - char * start; - - /* Align the instruction. - This may not be the right thing to do but ... */ -#if 0 - arm_align (2, 0); -#endif - listing_prev_line (); /* Defined in listing.h. */ - - /* Align the previous label if needed. */ - if (last_label_seen != NULL) - { - symbol_set_frag (last_label_seen, frag_now); - S_SET_VALUE (last_label_seen, (valueT) frag_now_fix ()); - S_SET_SEGMENT (last_label_seen, now_seg); - } - - memset (&inst, '\0', sizeof (inst)); - inst.reloc.type = BFD_RELOC_NONE; - - skip_whitespace (str); - - /* Scan up to the end of the op-code, which must end in white space or - end of string. */ - for (start = p = str; *p != '\0'; p++) - if (*p == ' ') - break; - - if (p == str) - { - as_bad (_("No operator -- statement `%s'\n"), str); - return; - } - - if (thumb_mode) - { - CONST struct thumb_opcode * opcode; - - c = *p; - *p = '\0'; - opcode = (CONST struct thumb_opcode *) hash_find (arm_tops_hsh, str); - *p = c; - - if (opcode) - { - /* Check that this instruction is supported for this CPU. */ - if (thumb_mode == 1 && (opcode->variants & cpu_variant) == 0) - { - as_bad (_("selected processor does not support this opcode")); - return; - } - - inst.instruction = opcode->value; - inst.size = opcode->size; - (*opcode->parms) (p); - output_inst (); - return; - } - } - else - { - CONST struct asm_opcode * opcode; - unsigned long cond_code; - - inst.size = INSN_SIZE; - /* P now points to the end of the opcode, probably white space, but we - have to break the opcode up in case it contains condionals and flags; - keep trying with progressively smaller basic instructions until one - matches, or we run out of opcode. */ - q = (p - str > LONGEST_INST) ? str + LONGEST_INST : p; - - for (; q != str; q--) - { - c = *q; - *q = '\0'; - - opcode = (CONST struct asm_opcode *) hash_find (arm_ops_hsh, str); - *q = c; - - if (opcode && opcode->template) - { - unsigned long flag_bits = 0; - char * r; - - /* Check that this instruction is supported for this CPU. */ - if ((opcode->variants & cpu_variant) == 0) - goto try_shorter; - - inst.instruction = opcode->value; - if (q == p) /* Just a simple opcode. */ - { - if (opcode->comp_suffix) - { - if (*opcode->comp_suffix != '\0') - as_bad (_("Opcode `%s' must have suffix from list: <%s>"), - str, opcode->comp_suffix); - else - /* Not a conditional instruction. */ - (*opcode->parms) (q, 0); - } - else - { - /* A conditional instruction with default condition. */ - inst.instruction |= COND_ALWAYS; - (*opcode->parms) (q, 0); - } - output_inst (); - return; - } - - /* Not just a simple opcode. Check if extra is a - conditional. */ - r = q; - if (p - r >= 2) - { - CONST struct asm_cond *cond; - char d = *(r + 2); - - *(r + 2) = '\0'; - cond = (CONST struct asm_cond *) hash_find (arm_cond_hsh, r); - *(r + 2) = d; - if (cond) - { - if (cond->value == 0xf0000000) - as_tsktsk ( -_("Warning: Use of the 'nv' conditional is deprecated\n")); - - cond_code = cond->value; - r += 2; - } - else - cond_code = COND_ALWAYS; - } - else - cond_code = COND_ALWAYS; - - /* Apply the conditional, or complain it's not allowed. */ - if (opcode->comp_suffix && *opcode->comp_suffix == '\0') - { - /* Instruction isn't conditional. */ - if (cond_code != COND_ALWAYS) - { - as_bad (_("Opcode `%s' is unconditional\n"), str); - return; - } - } - else - /* Instruction is conditional: set the condition into it. */ - inst.instruction |= cond_code; - - /* If there is a compulsory suffix, it should come here - before any optional flags. */ - if (opcode->comp_suffix && *opcode->comp_suffix != '\0') - { - CONST char *s = opcode->comp_suffix; - - while (*s) - { - inst.suffix++; - if (*r == *s) - break; - s++; - } - - if (*s == '\0') - { - as_bad (_("Opcode `%s' must have suffix from <%s>\n"), - str, opcode->comp_suffix); - return; - } - - r++; - } - - /* The remainder, if any should now be flags for the instruction; - Scan these checking each one found with the opcode. */ - if (r != p) - { - char d; - CONST struct asm_flg *flag = opcode->flags; - - if (flag) - { - int flagno; - - d = *p; - *p = '\0'; - - for (flagno = 0; flag[flagno].template; flagno++) - { - if (streq (r, flag[flagno].template)) - { - flag_bits |= flag[flagno].set_bits; - break; - } - } - - *p = d; - if (! flag[flagno].template) - goto try_shorter; - } - else - goto try_shorter; - } - - (*opcode->parms) (p, flag_bits); - output_inst (); - return; - } - - try_shorter: - ; - } - } - - /* It wasn't an instruction, but it might be a register alias of the form - alias .req reg. */ - q = p; - skip_whitespace (q); - - c = *p; - *p = '\0'; - - if (*q && !strncmp (q, ".req ", 4)) - { - int reg; - char * copy_of_str; - char * r; - -#ifdef IGNORE_OPCODE_CASE - str = original_case_string; -#endif - copy_of_str = str; - - q += 4; - skip_whitespace (q); - - for (r = q; *r != '\0'; r++) - if (*r == ' ') - break; - - if (r != q) - { - int regnum; - char d = *r; - - *r = '\0'; - regnum = arm_reg_parse (& q); - *r = d; - - reg = arm_reg_parse (& str); - - if (reg == FAIL) - { - if (regnum != FAIL) - insert_reg_alias (str, regnum); - else - as_warn (_("register '%s' does not exist\n"), q); - } - else if (regnum != FAIL) - { - if (reg != regnum) - as_warn (_("ignoring redefinition of register alias '%s'"), - copy_of_str); - - /* Do not warn about redefinitions to the same alias. */ - } - else - as_warn (_("ignoring redefinition of register alias '%s' to non-existant register '%s'"), - copy_of_str, q); - } - else - as_warn (_("ignoring incomplete .req pseuso op")); - - *p = c; - return; - } - - *p = c; - as_bad (_("bad instruction `%s'"), start); -} - -/* md_parse_option - Invocation line includes a switch not recognized by the base assembler. - See if it's a processor-specific option. These are: - Cpu variants, the arm part is optional: - -m[arm]1 Currently not supported. - -m[arm]2, -m[arm]250 Arm 2 and Arm 250 processor - -m[arm]3 Arm 3 processor - -m[arm]6[xx], Arm 6 processors - -m[arm]7[xx][t][[d]m] Arm 7 processors - -m[arm]8[10] Arm 8 processors - -m[arm]9[20][tdmi] Arm 9 processors - -mstrongarm[110[0]] StrongARM processors - -mxscale XScale processors - -m[arm]v[2345[t[e]]] Arm architectures - -mall All (except the ARM1) - FP variants: - -mfpa10, -mfpa11 FPA10 and 11 co-processor instructions - -mfpe-old (No float load/store multiples) - -mno-fpu Disable all floating point instructions - Run-time endian selection: - -EB big endian cpu - -EL little endian cpu - ARM Procedure Calling Standard: - -mapcs-32 32 bit APCS - -mapcs-26 26 bit APCS - -mapcs-float Pass floats in float regs - -mapcs-reentrant Position independent code - -mthumb-interwork Code supports Arm/Thumb interworking - -matpcs ARM/Thumb Procedure Call Standard - -moabi Old ELF ABI */ - -CONST char * md_shortopts = "m:k"; - -struct option md_longopts[] = -{ -#ifdef ARM_BI_ENDIAN -#define OPTION_EB (OPTION_MD_BASE + 0) - {"EB", no_argument, NULL, OPTION_EB}, -#define OPTION_EL (OPTION_MD_BASE + 1) - {"EL", no_argument, NULL, OPTION_EL}, -#ifdef OBJ_ELF -#define OPTION_OABI (OPTION_MD_BASE +2) - {"oabi", no_argument, NULL, OPTION_OABI}, -#endif -#endif - {NULL, no_argument, NULL, 0} -}; - -size_t md_longopts_size = sizeof (md_longopts); - -int -md_parse_option (c, arg) - int c; - char * arg; -{ - char * str = arg; - - switch (c) - { -#ifdef ARM_BI_ENDIAN - case OPTION_EB: - target_big_endian = 1; - break; - case OPTION_EL: - target_big_endian = 0; - break; -#endif - - case 'm': - switch (*str) - { - case 'f': - if (streq (str, "fpa10")) - cpu_variant = (cpu_variant & ~FPU_ALL) | FPU_FPA10; - else if (streq (str, "fpa11")) - cpu_variant = (cpu_variant & ~FPU_ALL) | FPU_FPA11; - else if (streq (str, "fpe-old")) - cpu_variant = (cpu_variant & ~FPU_ALL) | FPU_CORE; - else - goto bad; - break; - - case 'n': - if (streq (str, "no-fpu")) - cpu_variant &= ~FPU_ALL; - break; - -#ifdef OBJ_ELF - case 'o': - if (streq (str, "oabi")) - target_oabi = true; - break; -#endif - - case 't': - /* Limit assembler to generating only Thumb instructions: */ - if (streq (str, "thumb")) - { - cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_EXT_THUMB; - cpu_variant = (cpu_variant & ~FPU_ALL) | FPU_NONE; - thumb_mode = 1; - } - else if (streq (str, "thumb-interwork")) - { - if ((cpu_variant & ARM_EXT_THUMB) == 0) - cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_ARCH_V4T; -#if defined OBJ_COFF || defined OBJ_ELF - support_interwork = true; -#endif - } - else - goto bad; - break; - - default: - if (streq (str, "all")) - { - cpu_variant = ARM_ALL | FPU_ALL; - return 1; - } -#if defined OBJ_COFF || defined OBJ_ELF - if (! strncmp (str, "apcs-", 5)) - { - /* GCC passes on all command line options starting "-mapcs-..." - to us, so we must parse them here. */ - - str += 5; - - if (streq (str, "32")) - { - uses_apcs_26 = false; - return 1; - } - else if (streq (str, "26")) - { - uses_apcs_26 = true; - return 1; - } - else if (streq (str, "frame")) - { - /* Stack frames are being generated - does not affect - linkage of code. */ - return 1; - } - else if (streq (str, "stack-check")) - { - /* Stack checking is being performed - does not affect - linkage, but does require that the functions - __rt_stkovf_split_small and __rt_stkovf_split_big be - present in the final link. */ - - return 1; - } - else if (streq (str, "float")) - { - /* Floating point arguments are being passed in the floating - point registers. This does affect linking, since this - version of the APCS is incompatible with the version that - passes floating points in the integer registers. */ - - uses_apcs_float = true; - return 1; - } - else if (streq (str, "reentrant")) - { - /* Reentrant code has been generated. This does affect - linking, since there is no point in linking reentrant/ - position independent code with absolute position code. */ - pic_code = true; - return 1; - } - - as_bad (_("Unrecognised APCS switch -m%s"), arg); - return 0; - } - - if (! strcmp (str, "atpcs")) - { - atpcs = true; - return 1; - } -#endif - /* Strip off optional "arm". */ - if (! strncmp (str, "arm", 3)) - str += 3; - - switch (*str) - { - case '1': - if (streq (str, "1")) - cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_1; - else - goto bad; - break; - - case '2': - if (streq (str, "2")) - cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_2; - else if (streq (str, "250")) - cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_250; - else - goto bad; - break; - - case '3': - if (streq (str, "3")) - cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_3; - else - goto bad; - break; - - case '6': - switch (strtol (str, NULL, 10)) - { - case 6: - case 60: - case 600: - case 610: - case 620: - cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_6; - break; - default: - goto bad; - } - break; - - case '7': - /* Eat the processor name. */ - switch (strtol (str, & str, 10)) - { - case 7: - case 70: - case 700: - case 710: - case 720: - case 7100: - case 7500: - break; - default: - goto bad; - } - cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_7; - for (; *str; str++) - { - switch (*str) - { - case 't': - cpu_variant |= ARM_ARCH_V4T; - break; - - case 'm': - cpu_variant |= ARM_EXT_LONGMUL; - break; - - case 'f': /* fe => fp enabled cpu. */ - if (str[1] == 'e') - ++ str; - else - goto bad; - - case 'c': /* Left over from 710c processor name. */ - case 'd': /* Debug. */ - case 'i': /* Embedded ICE. */ - /* Included for completeness in ARM processor naming. */ - break; - - default: - goto bad; - } - } - break; - - case '8': - if (streq (str, "8") || streq (str, "810")) - cpu_variant = (cpu_variant & ~ARM_ANY) - | ARM_8 | ARM_ARCH_V4; - else - goto bad; - break; - - case '9': - if (streq (str, "9")) - cpu_variant = (cpu_variant & ~ARM_ANY) - | ARM_9 | ARM_ARCH_V4T; - else if (streq (str, "920")) - cpu_variant = (cpu_variant & ~ARM_ANY) - | ARM_9 | ARM_ARCH_V4; - else if (streq (str, "920t")) - cpu_variant = (cpu_variant & ~ARM_ANY) - | ARM_9 | ARM_ARCH_V4T; - else if (streq (str, "9tdmi")) - cpu_variant = (cpu_variant & ~ARM_ANY) - | ARM_9 | ARM_ARCH_V4T; - else - goto bad; - break; - - case 's': - if (streq (str, "strongarm") - || streq (str, "strongarm110") - || streq (str, "strongarm1100")) - cpu_variant = (cpu_variant & ~ARM_ANY) - | ARM_8 | ARM_ARCH_V4; - else - goto bad; - break; - - case 'x': - if (streq (str, "xscale")) - cpu_variant = ARM_9 | ARM_ARCH_XSCALE; - else - goto bad; - break; - - case 'v': - /* Select variant based on architecture rather than - processor. */ - switch (*++str) - { - case '2': - switch (*++str) - { - case 'a': - cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_3; - break; - case 0: - cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_2; - break; - default: - as_bad (_("Invalid architecture variant -m%s"), arg); - break; - } - break; - - case '3': - cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_7; - - switch (*++str) - { - case 'm': cpu_variant |= ARM_EXT_LONGMUL; break; - case 0: break; - default: - as_bad (_("Invalid architecture variant -m%s"), arg); - break; - } - break; - - case '4': - cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_7 | ARM_ARCH_V4; - - switch (*++str) - { - case 't': cpu_variant |= ARM_EXT_THUMB; break; - case 0: break; - default: - as_bad (_("Invalid architecture variant -m%s"), arg); - break; - } - break; - - case '5': - cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_9 | ARM_ARCH_V5; - switch (*++str) - { - case 't': cpu_variant |= ARM_EXT_THUMB; break; - case 'e': cpu_variant |= ARM_EXT_V5E; break; - case 0: break; - default: - as_bad (_("Invalid architecture variant -m%s"), arg); - break; - } - break; - - default: - as_bad (_("Invalid architecture variant -m%s"), arg); - break; - } - break; - - default: - bad: - as_bad (_("Invalid processor variant -m%s"), arg); - return 0; - } - } - break; - -#if defined OBJ_ELF || defined OBJ_COFF - case 'k': - pic_code = 1; - break; -#endif - - default: - return 0; - } - - return 1; -} - -void -md_show_usage (fp) - FILE * fp; -{ - fprintf (fp, _("\ - ARM Specific Assembler Options:\n\ - -m[arm][<processor name>] select processor variant\n\ - -m[arm]v[2|2a|3|3m|4|4t|5[t][e]] select architecture variant\n\ - -mthumb only allow Thumb instructions\n\ - -mthumb-interwork mark the assembled code as supporting interworking\n\ - -mall allow any instruction\n\ - -mfpa10, -mfpa11 select floating point architecture\n\ - -mfpe-old don't allow floating-point multiple instructions\n\ - -mno-fpu don't allow any floating-point instructions.\n\ - -k generate PIC code.\n")); -#if defined OBJ_COFF || defined OBJ_ELF - fprintf (fp, _("\ - -mapcs-32, -mapcs-26 specify which ARM Procedure Calling Standard to use\n\ - -matpcs use ARM/Thumb Procedure Calling Standard\n\ - -mapcs-float floating point args are passed in FP regs\n\ - -mapcs-reentrant the code is position independent/reentrant\n")); -#endif -#ifdef OBJ_ELF - fprintf (fp, _("\ - -moabi support the old ELF ABI\n")); -#endif -#ifdef ARM_BI_ENDIAN - fprintf (fp, _("\ - -EB assemble code for a big endian cpu\n\ - -EL assemble code for a little endian cpu\n")); -#endif -} - -/* We need to be able to fix up arbitrary expressions in some statements. - This is so that we can handle symbols that are an arbitrary distance from - the pc. The most common cases are of the form ((+/-sym -/+ . - 8) & mask), - which returns part of an address in a form which will be valid for - a data instruction. We do this by pushing the expression into a symbol - in the expr_section, and creating a fix for that. */ - -static void -fix_new_arm (frag, where, size, exp, pc_rel, reloc) - fragS * frag; - int where; - short int size; - expressionS * exp; - int pc_rel; - int reloc; -{ - fixS * new_fix; - arm_fix_data * arm_data; - - switch (exp->X_op) - { - case O_constant: - case O_symbol: - case O_add: - case O_subtract: - new_fix = fix_new_exp (frag, where, size, exp, pc_rel, reloc); - break; - - default: - new_fix = fix_new (frag, where, size, make_expr_symbol (exp), 0, - pc_rel, reloc); - break; - } - - /* Mark whether the fix is to a THUMB instruction, or an ARM - instruction. */ - arm_data = (arm_fix_data *) obstack_alloc (& notes, sizeof (arm_fix_data)); - new_fix->tc_fix_data = (PTR) arm_data; - arm_data->thumb_mode = thumb_mode; - - return; -} - -/* This fix_new is called by cons via TC_CONS_FIX_NEW. */ - -void -cons_fix_new_arm (frag, where, size, exp) - fragS * frag; - int where; - int size; - expressionS * exp; -{ - bfd_reloc_code_real_type type; - int pcrel = 0; - - /* Pick a reloc. - FIXME: @@ Should look at CPU word size. */ - switch (size) - { - case 1: - type = BFD_RELOC_8; - break; - case 2: - type = BFD_RELOC_16; - break; - case 4: - default: - type = BFD_RELOC_32; - break; - case 8: - type = BFD_RELOC_64; - break; - } - - fix_new_exp (frag, where, (int) size, exp, pcrel, type); -} - -/* A good place to do this, although this was probably not intended - for this kind of use. We need to dump the literal pool before - references are made to a null symbol pointer. */ - -void -arm_cleanup () -{ - if (current_poolP == NULL) - return; - - /* Put it at the end of text section. */ - subseg_set (text_section, 0); - s_ltorg (0); - listing_prev_line (); -} - -void -arm_start_line_hook () -{ - last_label_seen = NULL; -} - -void -arm_frob_label (sym) - symbolS * sym; -{ - last_label_seen = sym; - - ARM_SET_THUMB (sym, thumb_mode); - -#if defined OBJ_COFF || defined OBJ_ELF - ARM_SET_INTERWORK (sym, support_interwork); -#endif - - /* Note - do not allow local symbols (.Lxxx) to be labeled - as Thumb functions. This is because these labels, whilst - they exist inside Thumb code, are not the entry points for - possible ARM->Thumb calls. Also, these labels can be used - as part of a computed goto or switch statement. eg gcc - can generate code that looks like this: - - ldr r2, [pc, .Laaa] - lsl r3, r3, #2 - ldr r2, [r3, r2] - mov pc, r2 - - .Lbbb: .word .Lxxx - .Lccc: .word .Lyyy - ..etc... - .Laaa: .word Lbbb - - The first instruction loads the address of the jump table. - The second instruction converts a table index into a byte offset. - The third instruction gets the jump address out of the table. - The fourth instruction performs the jump. - - If the address stored at .Laaa is that of a symbol which has the - Thumb_Func bit set, then the linker will arrange for this address - to have the bottom bit set, which in turn would mean that the - address computation performed by the third instruction would end - up with the bottom bit set. Since the ARM is capable of unaligned - word loads, the instruction would then load the incorrect address - out of the jump table, and chaos would ensue. */ - if (label_is_thumb_function_name - && (S_GET_NAME (sym)[0] != '.' || S_GET_NAME (sym)[1] != 'L') - && (bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) != 0) - { - /* When the address of a Thumb function is taken the bottom - bit of that address should be set. This will allow - interworking between Arm and Thumb functions to work - correctly. */ - - THUMB_SET_FUNC (sym, 1); - - label_is_thumb_function_name = false; - } -} - -/* Adjust the symbol table. This marks Thumb symbols as distinct from - ARM ones. */ - -void -arm_adjust_symtab () -{ -#ifdef OBJ_COFF - symbolS * sym; - - for (sym = symbol_rootP; sym != NULL; sym = symbol_next (sym)) - { - if (ARM_IS_THUMB (sym)) - { - if (THUMB_IS_FUNC (sym)) - { - /* Mark the symbol as a Thumb function. */ - if ( S_GET_STORAGE_CLASS (sym) == C_STAT - || S_GET_STORAGE_CLASS (sym) == C_LABEL) /* This can happen! */ - S_SET_STORAGE_CLASS (sym, C_THUMBSTATFUNC); - - else if (S_GET_STORAGE_CLASS (sym) == C_EXT) - S_SET_STORAGE_CLASS (sym, C_THUMBEXTFUNC); - else - as_bad (_("%s: unexpected function type: %d"), - S_GET_NAME (sym), S_GET_STORAGE_CLASS (sym)); - } - else switch (S_GET_STORAGE_CLASS (sym)) - { - case C_EXT: - S_SET_STORAGE_CLASS (sym, C_THUMBEXT); - break; - case C_STAT: - S_SET_STORAGE_CLASS (sym, C_THUMBSTAT); - break; - case C_LABEL: - S_SET_STORAGE_CLASS (sym, C_THUMBLABEL); - break; - default: - /* Do nothing. */ - break; - } - } - - if (ARM_IS_INTERWORK (sym)) - coffsymbol (symbol_get_bfdsym (sym))->native->u.syment.n_flags = 0xFF; - } -#endif -#ifdef OBJ_ELF - symbolS * sym; - char bind; - - for (sym = symbol_rootP; sym != NULL; sym = symbol_next (sym)) - { - if (ARM_IS_THUMB (sym)) - { - elf_symbol_type * elf_sym; - - elf_sym = elf_symbol (symbol_get_bfdsym (sym)); - bind = ELF_ST_BIND (elf_sym); - - /* If it's a .thumb_func, declare it as so, - otherwise tag label as .code 16. */ - if (THUMB_IS_FUNC (sym)) - elf_sym->internal_elf_sym.st_info = - ELF_ST_INFO (bind, STT_ARM_TFUNC); - else - elf_sym->internal_elf_sym.st_info = - ELF_ST_INFO (bind, STT_ARM_16BIT); - } - } -#endif -} - -int -arm_data_in_code () -{ - if (thumb_mode && ! strncmp (input_line_pointer + 1, "data:", 5)) - { - *input_line_pointer = '/'; - input_line_pointer += 5; - *input_line_pointer = 0; - return 1; - } - - return 0; -} - -char * -arm_canonicalize_symbol_name (name) - char * name; -{ - int len; - - if (thumb_mode && (len = strlen (name)) > 5 - && streq (name + len - 5, "/data")) - *(name + len - 5) = 0; - - return name; -} - -boolean -arm_validate_fix (fixP) - fixS * fixP; -{ - /* If the destination of the branch is a defined symbol which does not have - the THUMB_FUNC attribute, then we must be calling a function which has - the (interfacearm) attribute. We look for the Thumb entry point to that - function and change the branch to refer to that function instead. */ - if (fixP->fx_r_type == BFD_RELOC_THUMB_PCREL_BRANCH23 - && fixP->fx_addsy != NULL - && S_IS_DEFINED (fixP->fx_addsy) - && ! THUMB_IS_FUNC (fixP->fx_addsy)) - { - fixP->fx_addsy = find_real_start (fixP->fx_addsy); - return true; - } - - return false; -} - -#ifdef OBJ_COFF -/* This is a little hack to help the gas/arm/adrl.s test. It prevents - local labels from being added to the output symbol table when they - are used with the ADRL pseudo op. The ADRL relocation should always - be resolved before the binbary is emitted, so it is safe to say that - it is adjustable. */ - -boolean -arm_fix_adjustable (fixP) - fixS * fixP; -{ - if (fixP->fx_r_type == BFD_RELOC_ARM_ADRL_IMMEDIATE) - return 1; - return 0; -} -#endif -#ifdef OBJ_ELF -/* Relocations against Thumb function names must be left unadjusted, - so that the linker can use this information to correctly set the - bottom bit of their addresses. The MIPS version of this function - also prevents relocations that are mips-16 specific, but I do not - know why it does this. - - FIXME: - There is one other problem that ought to be addressed here, but - which currently is not: Taking the address of a label (rather - than a function) and then later jumping to that address. Such - addresses also ought to have their bottom bit set (assuming that - they reside in Thumb code), but at the moment they will not. */ - -boolean -arm_fix_adjustable (fixP) - fixS * fixP; -{ - if (fixP->fx_addsy == NULL) - return 1; - - /* Prevent all adjustments to global symbols. */ - if (S_IS_EXTERN (fixP->fx_addsy)) - return 0; - - if (S_IS_WEAK (fixP->fx_addsy)) - return 0; - - if (THUMB_IS_FUNC (fixP->fx_addsy) - && fixP->fx_subsy == NULL) - return 0; - - /* We need the symbol name for the VTABLE entries. */ - if ( fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT - || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY) - return 0; - - return 1; -} - -const char * -elf32_arm_target_format () -{ - if (target_big_endian) - { - if (target_oabi) - return "elf32-bigarm-oabi"; - else - return "elf32-bigarm"; - } - else - { - if (target_oabi) - return "elf32-littlearm-oabi"; - else - return "elf32-littlearm"; - } -} - -void -armelf_frob_symbol (symp, puntp) - symbolS * symp; - int * puntp; -{ - elf_frob_symbol (symp, puntp); -} - -int -arm_force_relocation (fixp) - struct fix * fixp; -{ - if ( fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT - || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY - || fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BRANCH - || fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BLX - || fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BLX - || fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BRANCH23) - return 1; - - return 0; -} - -static bfd_reloc_code_real_type -arm_parse_reloc () -{ - char id [16]; - char * ip; - unsigned int i; - static struct - { - char * str; - int len; - bfd_reloc_code_real_type reloc; - } - reloc_map[] = - { -#define MAP(str,reloc) { str, sizeof (str) - 1, reloc } - MAP ("(got)", BFD_RELOC_ARM_GOT32), - MAP ("(gotoff)", BFD_RELOC_ARM_GOTOFF), - /* ScottB: Jan 30, 1998 - Added support for parsing "var(PLT)" - branch instructions generated by GCC for PLT relocs. */ - MAP ("(plt)", BFD_RELOC_ARM_PLT32), - { NULL, 0, BFD_RELOC_UNUSED } -#undef MAP - }; - - for (i = 0, ip = input_line_pointer; - i < sizeof (id) && (isalnum (*ip) || ispunct (*ip)); - i++, ip++) - id[i] = tolower (*ip); - - for (i = 0; reloc_map[i].str; i++) - if (strncmp (id, reloc_map[i].str, reloc_map[i].len) == 0) - break; - - input_line_pointer += reloc_map[i].len; - - return reloc_map[i].reloc; -} - -static void -s_arm_elf_cons (nbytes) - int nbytes; -{ - expressionS exp; - -#ifdef md_flush_pending_output - md_flush_pending_output (); -#endif - - if (is_it_end_of_statement ()) - { - demand_empty_rest_of_line (); - return; - } - -#ifdef md_cons_align - md_cons_align (nbytes); -#endif - - do - { - bfd_reloc_code_real_type reloc; - - expression (& exp); - - if (exp.X_op == O_symbol - && * input_line_pointer == '(' - && (reloc = arm_parse_reloc ()) != BFD_RELOC_UNUSED) - { - reloc_howto_type *howto = bfd_reloc_type_lookup (stdoutput, reloc); - int size = bfd_get_reloc_size (howto); - - if (size > nbytes) - as_bad ("%s relocations do not fit in %d bytes", - howto->name, nbytes); - else - { - register char *p = frag_more ((int) nbytes); - int offset = nbytes - size; - - fix_new_exp (frag_now, p - frag_now->fr_literal + offset, size, - &exp, 0, reloc); - } - } - else - emit_expr (&exp, (unsigned int) nbytes); - } - while (*input_line_pointer++ == ','); - - /* Put terminator back into stream. */ - input_line_pointer --; - demand_empty_rest_of_line (); -} - -#endif /* OBJ_ELF */ - -/* This is called from HANDLE_ALIGN in write.c. Fill in the contents - of an rs_align_code fragment. */ - -void -arm_handle_align (fragP) - fragS *fragP; -{ - static char const arm_noop[4] = { 0x00, 0x00, 0xa0, 0xe1 }; - static char const thumb_noop[2] = { 0xc0, 0x46 }; - static char const arm_bigend_noop[4] = { 0xe1, 0xa0, 0x00, 0x00 }; - static char const thumb_bigend_noop[2] = { 0x46, 0xc0 }; - - int bytes, fix, noop_size; - char * p; - const char * noop; - - if (fragP->fr_type != rs_align_code) - return; - - bytes = fragP->fr_next->fr_address - fragP->fr_address - fragP->fr_fix; - p = fragP->fr_literal + fragP->fr_fix; - fix = 0; - - if (bytes > MAX_MEM_FOR_RS_ALIGN_CODE) - bytes &= MAX_MEM_FOR_RS_ALIGN_CODE; - - if (fragP->tc_frag_data) - { - if (target_big_endian) - noop = thumb_bigend_noop; - else - noop = thumb_noop; - noop_size = sizeof (thumb_noop); - } - else - { - if (target_big_endian) - noop = arm_bigend_noop; - else - noop = arm_noop; - noop_size = sizeof (arm_noop); - } - - if (bytes & (noop_size - 1)) - { - fix = bytes & (noop_size - 1); - memset (p, 0, fix); - p += fix; - bytes -= fix; - } - - while (bytes >= noop_size) - { - memcpy (p, noop, noop_size); - p += noop_size; - bytes -= noop_size; - fix += noop_size; - } - - fragP->fr_fix += fix; - fragP->fr_var = noop_size; -} - -/* Called from md_do_align. Used to create an alignment - frag in a code section. */ - -void -arm_frag_align_code (n, max) - int n; - int max; -{ - char * p; - - /* We assume that there will never be a requirment - to support alignments greater than 32 bytes. */ - if (max > MAX_MEM_FOR_RS_ALIGN_CODE) - as_fatal (_("alignments greater than 32 bytes not supported in .text sections.")); - - p = frag_var (rs_align_code, - MAX_MEM_FOR_RS_ALIGN_CODE, - 1, - (relax_substateT) max, - (symbolS *) NULL, - (offsetT) n, - (char *) NULL); - *p = 0; - -} - -/* Perform target specific initialisation of a frag. */ - -void -arm_init_frag (fragP) - fragS *fragP; -{ - /* Record whether this frag is in an ARM or a THUMB area. */ - fragP->tc_frag_data = thumb_mode; -} diff --git a/gas/doc/Makefile.am b/gas/doc/Makefile.am index 5cd20f8668..4d85018d24 100644 --- a/gas/doc/Makefile.am +++ b/gas/doc/Makefile.am @@ -65,14 +65,17 @@ MAINTAINERCLEANFILES = gasver.texi # Maintenance +# We need it for the taz target in ../../Makefile.in. +info: $(MANS) + # Build the man page from the texinfo file # The sed command removes the no-adjust Nroff command so that # the man output looks standard. -$(srcdir)/as.1: $(srcdir)/as.texinfo - touch $(srcdir)/as.1 +as.1: $(srcdir)/as.texinfo + touch $@ -$(TEXI2POD) $(MANCONF) < $(srcdir)/as.texinfo > as.pod -($(POD2MAN) as.pod | \ - sed -e '/^.if n .na/d' > $(srcdir)/as.1.T$$$$ && \ - mv -f $(srcdir)/as.1.T$$$$ $(srcdir)/as.1) || \ - (rm -f $(srcdir)/as.1.T$$$$ && exit 1) - + sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || \ + (rm -f $@.T$$$$ && exit 1) + rm -f as.pod diff --git a/gas/doc/Makefile.in b/gas/doc/Makefile.in index 674e17fc03..90ebe51e78 100644 --- a/gas/doc/Makefile.in +++ b/gas/doc/Makefile.in @@ -183,7 +183,7 @@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) -TAR = tar +TAR = gtar GZIP_ENV = --best all: all-redirect .SUFFIXES: @@ -457,16 +457,20 @@ as.dvi: $(srcdir)/as.texinfo asconfig.texi gasver.texi $(CPU_DOCS) # Maintenance +# We need it for the taz target in ../../Makefile.in. +info: $(MANS) + # Build the man page from the texinfo file # The sed command removes the no-adjust Nroff command so that # the man output looks standard. -$(srcdir)/as.1: $(srcdir)/as.texinfo - touch $(srcdir)/as.1 +as.1: $(srcdir)/as.texinfo + touch $@ -$(TEXI2POD) $(MANCONF) < $(srcdir)/as.texinfo > as.pod -($(POD2MAN) as.pod | \ - sed -e '/^.if n .na/d' > $(srcdir)/as.1.T$$$$ && \ - mv -f $(srcdir)/as.1.T$$$$ $(srcdir)/as.1) || \ - (rm -f $(srcdir)/as.1.T$$$$ && exit 1) + sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || \ + (rm -f $@.T$$$$ && exit 1) + rm -f as.pod # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/gas/doc/as.1 b/gas/doc/as.1 deleted file mode 100644 index 28ba51f28e..0000000000 --- a/gas/doc/as.1 +++ /dev/null @@ -1,724 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Tue Jun 12 18:27:35 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "AS 1" -.TH AS 1 "binutils-2.11.90" "2001-06-12" "GNU" -.UC -.SH "NAME" -\&\s-1AS\s0 \- the portable \s-1GNU\s0 assembler. -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -as [ \-a[cdhlns][=file] ] [ \-D ] [ \-\-defsym \fIsym\fR=\fIval\fR ] - [ \-f ] [ \-\-gstabs ] [ \-\-gdwarf2 ] [ \-\-help ] [ \-I \fIdir\fR ] - [ \-J ] [ \-K ] [ \-L ] - [ \-\-listing\*(--lhs-width=NUM ][ \-\-listing-lhs-width2=NUM ] - [ \-\-listing-rhs-width=NUM ][ \-\-listing-cont-lines=NUM ] - [ \-\-keep-locals ] [ \-o \fIobjfile\fR ] [ \-R ] [ \-\-statistics ] [ \-v ] - [ \-version ] [ \-\-version ] [ \-W ] [ \-\-warn ] [ \-\-fatal-warnings ] - [ \-w ] [ \-x ] [ \-Z ] [ \-\-target-help ] - [ \-marc[5|6|7|8] ] - [ \-EB | \-EL ] - [ \-m[arm]1 | \-m[arm]2 | \-m[arm]250 | \-m[arm]3 | - \-m[arm]6 | \-m[arm]60 | \-m[arm]600 | \-m[arm]610 | - \-m[arm]620 | \-m[arm]7[t][[d]m[i]][fe] | \-m[arm]70 | - \-m[arm]700 | \-m[arm]710[c] | \-m[arm]7100 | - \-m[arm]7500 | \-m[arm]8 | \-m[arm]810 | \-m[arm]9 | - \-m[arm]920 | \-m[arm]920t | \-m[arm]9tdmi | - \-mstrongarm | \-mstrongarm110 | \-mstrongarm1100 ] - [ \-m[arm]v2 | \-m[arm]v2a | \-m[arm]v3 | \-m[arm]v3m | - \-m[arm]v4 | \-m[arm]v4t | \-m[arm]v5 | \-[arm]v5t | - \-[arm]v5te ] - [ \-mthumb | \-mall ] - [ \-mfpa10 | \-mfpa11 | \-mfpe-old | \-mno-fpu ] - [ \-EB | \-EL ] - [ \-mapcs-32 | \-mapcs-26 | \-mapcs-float | - \-mapcs-reentrant ] - [ \-mthumb-interwork ] [ \-moabi ] [ \-k ] - [ \-O ] - [ \-O | \-n | \-N ] - [ \-mb | \-me ] - [ \-Av6 | \-Av7 | \-Av8 | \-Asparclet | \-Asparclite - \-Av8plus | \-Av8plusa | \-Av9 | \-Av9a ] - [ \-xarch=v8plus | \-xarch=v8plusa ] [ \-bump ] - [ \-32 | \-64 ] - [ \-ACA | \-ACA_A | \-ACB | \-ACC | \-AKA | \-AKB | - \-AKC | \-AMC ] - [ \-b ] [ \-no-relax ] - [ \-\-m32rx | \-\-[no-]warn-explicit-parallel-conflicts | - \-\-W[n]p ] - [ \-l ] [ \-m68000 | \-m68010 | \-m68020 | ... ] - [ \-jsri2bsr ] [ \-sifilter ] [ \-relax ] - [ \-mcpu=[210|340] ] - [ \-m68hc11 | \-m68hc12 ] - [ \-\-force-long-branchs ] [ \-\-short-branchs ] - [ \-\-strict-direct-mode ] [ \-\-print-insn-syntax ] - [ \-\-print-opcodes ] [ \-\-generate-example ] - [ \-nocpp ] [ \-EL ] [ \-EB ] [ \-G \fInum\fR ] [ \-mcpu=\fI\s-1CPU\s0\fR ] - [ \-mips1 ] [ \-mips2 ] [ \-mips3 ] [ \-mips4 ] [ \-mips5 ] - [ \-mips32 ] [ \-mips64 ] - [ \-m4650 ] [ \-no-m4650 ] - [ \-\-trap ] [ \-\-break ] [ \-n ] - [ \-\-emulation=\fIname\fR ] - [ \*(-- | \fIfiles\fR ... ] -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -\&\s-1GNU\s0 \f(CW\*(C`as\*(C'\fR is really a family of assemblers. -If you use (or have used) the \s-1GNU\s0 assembler on one architecture, you -should find a fairly similar environment when you use it on another -architecture. Each version has much in common with the others, -including object file formats, most assembler directives (often called -\&\fIpseudo-ops\fR) and assembler syntax. -.PP -\&\f(CW\*(C`as\*(C'\fR is primarily intended to assemble the output of the -\&\s-1GNU\s0 C compiler for use by the linker -\&. Nevertheless, we've tried to make \f(CW\*(C`as\*(C'\fR -assemble correctly everything that other assemblers for the same -machine would assemble. -Any exceptions are documented explicitly. -This doesn't mean \f(CW\*(C`as\*(C'\fR always uses the same syntax as another -assembler for the same architecture; for example, we know of several -incompatible versions of 680x0 assembly language syntax. -.PP -Each time you run \f(CW\*(C`as\*(C'\fR it assembles exactly one source -program. The source program is made up of one or more files. -(The standard input is also a file.) -.PP -You give \f(CW\*(C`as\*(C'\fR a command line that has zero or more input file -names. The input files are read (from left file name to right). A -command line argument (in any position) that has no special meaning -is taken to be an input file name. -.PP -If you give \f(CW\*(C`as\*(C'\fR no file names it attempts to read one input file -from the \f(CW\*(C`as\*(C'\fR standard input, which is normally your terminal. You -may have to type \fBctl-D\fR to tell \f(CW\*(C`as\*(C'\fR there is no more program -to assemble. -.PP -Use \fB\--\fR if you need to explicitly name the standard input file -in your command line. -.PP -If the source is empty, \f(CW\*(C`as\*(C'\fR produces a small, empty object -file. -.PP -\&\f(CW\*(C`as\*(C'\fR may write warnings and error messages to the standard error -file (usually your terminal). This should not happen when a compiler -runs \f(CW\*(C`as\*(C'\fR automatically. Warnings report an assumption made so -that \f(CW\*(C`as\*(C'\fR could keep assembling a flawed program; errors report a -grave problem that stops the assembly. -.PP -If you are invoking \f(CW\*(C`as\*(C'\fR via the \s-1GNU\s0 C compiler (version 2), -you can use the \fB\-Wa\fR option to pass arguments through to the assembler. -The assembler arguments must be separated from each other (and the \fB\-Wa\fR) -by commas. For example: -.PP -.Vb 1 -\& gcc -c -g -O -Wa,-alh,-L file.c -.Ve -This passes two options to the assembler: \fB\-alh\fR (emit a listing to -standard output with with high-level and assembly source) and \fB\-L\fR (retain -local symbols in the symbol table). -.PP -Usually you do not need to use this \fB\-Wa\fR mechanism, since many compiler -command-line options are automatically passed to the assembler by the compiler. -(You can call the \s-1GNU\s0 compiler driver with the \fB\-v\fR option to see -precisely what options it passes to each compilation pass, including the -assembler.) -.SH "OPTIONS" -.IX Header "OPTIONS" -.Ip "\f(CW\*(C`\-a[cdhlmns]\*(C'\fR" 4 -.IX Item "-a[cdhlmns]" -Turn on listings, in any of a variety of ways: -.RS 4 -.Ip "\f(CW\*(C`\-ac\*(C'\fR" 4 -.IX Item "-ac" -omit false conditionals -.Ip "\f(CW\*(C`\-ad\*(C'\fR" 4 -.IX Item "-ad" -omit debugging directives -.Ip "\f(CW\*(C`\-ah\*(C'\fR" 4 -.IX Item "-ah" -include high-level source -.Ip "\f(CW\*(C`\-al\*(C'\fR" 4 -.IX Item "-al" -include assembly -.Ip "\f(CW\*(C`\-am\*(C'\fR" 4 -.IX Item "-am" -include macro expansions -.Ip "\f(CW\*(C`\-an\*(C'\fR" 4 -.IX Item "-an" -omit forms processing -.Ip "\f(CW\*(C`\-as\*(C'\fR" 4 -.IX Item "-as" -include symbols -.Ip "\f(CW\*(C`=file\*(C'\fR" 4 -.IX Item "=file" -set the name of the listing file -.RE -.RS 4 -.Sp -You may combine these options; for example, use \fB\-aln\fR for assembly -listing without forms processing. The \fB=file\fR option, if used, must be -the last one. By itself, \fB\-a\fR defaults to \fB\-ahls\fR. -.RE -.Ip "\f(CW\*(C`\-D\*(C'\fR" 4 -.IX Item "-D" -Ignored. This option is accepted for script compatibility with calls to -other assemblers. -.Ip "\f(CW\*(C`\-\-defsym \f(CIsym\f(CW=\f(CIvalue\f(CW\*(C'\fR" 4 -.IX Item "--defsym sym=value" -Define the symbol \fIsym\fR to be \fIvalue\fR before assembling the input file. -\&\fIvalue\fR must be an integer constant. As in C, a leading \fB0x\fR -indicates a hexadecimal value, and a leading \fB0\fR indicates an octal value. -.Ip "\f(CW\*(C`\-f\*(C'\fR" 4 -.IX Item "-f" -``fast''\-\-\-skip whitespace and comment preprocessing (assume source is -compiler output). -.Ip "\f(CW\*(C`\-\-gstabs\*(C'\fR" 4 -.IX Item "--gstabs" -Generate stabs debugging information for each assembler line. This -may help debugging assembler code, if the debugger can handle it. -.Ip "\f(CW\*(C`\-\-gdwarf2\*(C'\fR" 4 -.IX Item "--gdwarf2" -Generate \s-1DWARF2\s0 debugging information for each assembler line. This -may help debugging assembler code, if the debugger can handle it. Note \- this -option is only supported by some targets, not all of them. -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Print a summary of the command line options and exit. -.Ip "\f(CW\*(C`\-\-target\-help\*(C'\fR" 4 -.IX Item "--target-help" -Print a summary of all target specific options and exit. -.Ip "\f(CW\*(C`\-I \f(CIdir\f(CW\*(C'\fR" 4 -.IX Item "-I dir" -Add directory \fIdir\fR to the search list for \f(CW\*(C`.include\*(C'\fR directives. -.Ip "\f(CW\*(C`\-J\*(C'\fR" 4 -.IX Item "-J" -Don't warn about signed overflow. -.Ip "\f(CW\*(C`\-K\*(C'\fR" 4 -.IX Item "-K" -This option is accepted but has no effect on the \s-1TARGET\s0 family. -.Ip "\f(CW\*(C`\-L\*(C'\fR" 4 -.IX Item "-L" -.Ip "\f(CW\*(C`\-\-keep\-locals\*(C'\fR" 4 -.IX Item "--keep-locals" -Keep (in the symbol table) local symbols. On traditional a.out systems -these start with \fBL\fR, but different systems have different local -label prefixes. -.Ip "\f(CW\*(C`\-\-listing\-lhs\-width=\f(CInumber\f(CW\*(C'\fR" 4 -.IX Item "--listing-lhs-width=number" -Set the maximum width, in words, of the output data column for an assembler -listing to \fInumber\fR. -.Ip "\f(CW\*(C`\-\-listing\-lhs\-width2=\f(CInumber\f(CW\*(C'\fR" 4 -.IX Item "--listing-lhs-width2=number" -Set the maximum width, in words, of the output data column for continuation -lines in an assembler listing to \fInumber\fR. -.Ip "\f(CW\*(C`\-\-listing\-rhs\-width=\f(CInumber\f(CW\*(C'\fR" 4 -.IX Item "--listing-rhs-width=number" -Set the maximum width of an input source line, as displayed in a listing, to -\&\fInumber\fR bytes. -.Ip "\f(CW\*(C`\-\-listing\-cont\-lines=\f(CInumber\f(CW\*(C'\fR" 4 -.IX Item "--listing-cont-lines=number" -Set the maximum number of lines printed in a listing for a single line of input -to \fInumber\fR + 1. -.Ip "\f(CW\*(C`\-o \f(CIobjfile\f(CW\*(C'\fR" 4 -.IX Item "-o objfile" -Name the object-file output from \f(CW\*(C`as\*(C'\fR \fIobjfile\fR. -.Ip "\f(CW\*(C`\-R\*(C'\fR" 4 -.IX Item "-R" -Fold the data section into the text section. -.Ip "\f(CW\*(C`\-\-statistics\*(C'\fR" 4 -.IX Item "--statistics" -Print the maximum space (in bytes) and total time (in seconds) used by -assembly. -.Ip "\f(CW\*(C`\-\-strip\-local\-absolute\*(C'\fR" 4 -.IX Item "--strip-local-absolute" -Remove local absolute symbols from the outgoing symbol table. -.Ip "\f(CW\*(C`\-v\*(C'\fR" 4 -.IX Item "-v" -.Ip "\f(CW\*(C`\-version\*(C'\fR" 4 -.IX Item "-version" -Print the \f(CW\*(C`as\*(C'\fR version. -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Print the \f(CW\*(C`as\*(C'\fR version and exit. -.Ip "\f(CW\*(C`\-W\*(C'\fR" 4 -.IX Item "-W" -.Ip "\f(CW\*(C`\-\-no\-warn\*(C'\fR" 4 -.IX Item "--no-warn" -Suppress warning messages. -.Ip "\f(CW\*(C`\-\-fatal\-warnings\*(C'\fR" 4 -.IX Item "--fatal-warnings" -Treat warnings as errors. -.Ip "\f(CW\*(C`\-\-warn\*(C'\fR" 4 -.IX Item "--warn" -Don't suppress warning messages or treat them as errors. -.Ip "\f(CW\*(C`\-w\*(C'\fR" 4 -.IX Item "-w" -Ignored. -.Ip "\f(CW\*(C`\-x\*(C'\fR" 4 -.IX Item "-x" -Ignored. -.Ip "\f(CW\*(C`\-Z\*(C'\fR" 4 -.IX Item "-Z" -Generate an object file even after errors. -.Ip "\f(CW\*(C`\-\- | \f(CIfiles\f(CW ...\*(C'\fR" 4 -.IX Item "-- | files ..." -Standard input, or source files to assemble. -.PP -The following options are available when as is configured for -an \s-1ARC\s0 processor. -.Ip "\f(CW\*(C`\-marc[5|6|7|8]\*(C'\fR" 4 -.IX Item "-marc[5|6|7|8]" -This option selects the core processor variant. -.Ip "\f(CW\*(C`\-EB | \-EL\*(C'\fR" 4 -.IX Item "-EB | -EL" -Select either big-endian (\-EB) or little-endian (\-EL) output. -.PP -The following options are available when as is configured for the \s-1ARM\s0 -processor family. -.Ip "\f(CW\*(C`\-m[arm][1|2|3|6|7|8|9][...] \*(C'\fR" 4 -.IX Item "-m[arm][1|2|3|6|7|8|9][...] " -Specify which \s-1ARM\s0 processor variant is the target. -.Ip "\f(CW\*(C`\-m[arm]v[2|2a|3|3m|4|4t|5|5t]\*(C'\fR" 4 -.IX Item "-m[arm]v[2|2a|3|3m|4|4t|5|5t]" -Specify which \s-1ARM\s0 architecture variant is used by the target. -.Ip "\f(CW\*(C`\-mthumb | \-mall\*(C'\fR" 4 -.IX Item "-mthumb | -mall" -Enable or disable Thumb only instruction decoding. -.Ip "\f(CW\*(C`\-mfpa10 | \-mfpa11 | \-mfpe\-old | \-mno\-fpu\*(C'\fR" 4 -.IX Item "-mfpa10 | -mfpa11 | -mfpe-old | -mno-fpu" -Select which Floating Point architecture is the target. -.Ip "\f(CW\*(C`\-mapcs\-32 | \-mapcs\-26 | \-mapcs\-float | \-mapcs\-reentrant | \-moabi\*(C'\fR" 4 -.IX Item "-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant | -moabi" -Select which procedure calling convention is in use. -.Ip "\f(CW\*(C`\-EB | \-EL\*(C'\fR" 4 -.IX Item "-EB | -EL" -Select either big-endian (\-EB) or little-endian (\-EL) output. -.Ip "\f(CW\*(C`\-mthumb\-interwork\*(C'\fR" 4 -.IX Item "-mthumb-interwork" -Specify that the code has been generated with interworking between Thumb and -\&\s-1ARM\s0 code in mind. -.Ip "\f(CW\*(C`\-k\*(C'\fR" 4 -.IX Item "-k" -Specify that \s-1PIC\s0 code has been generated. -.PP -The following options are available when as is configured for -a D10V processor. -.Ip "\f(CW\*(C`\-O\*(C'\fR" 4 -.IX Item "-O" -Optimize output by parallelizing instructions. -.PP -The following options are available when as is configured for a D30V -processor. -.Ip "\f(CW\*(C`\-O\*(C'\fR" 4 -.IX Item "-O" -Optimize output by parallelizing instructions. -.Ip "\f(CW\*(C`\-n\*(C'\fR" 4 -.IX Item "-n" -Warn when nops are generated. -.Ip "\f(CW\*(C`\-N\*(C'\fR" 4 -.IX Item "-N" -Warn when a nop after a 32\-bit multiply instruction is generated. -.PP -The following options are available when as is configured for the -Intel 80960 processor. -.Ip "\f(CW\*(C`\-ACA | \-ACA_A | \-ACB | \-ACC | \-AKA | \-AKB | \-AKC | \-AMC\*(C'\fR" 4 -.IX Item "-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC" -Specify which variant of the 960 architecture is the target. -.Ip "\f(CW\*(C`\-b\*(C'\fR" 4 -.IX Item "-b" -Add code to collect statistics about branches taken. -.Ip "\f(CW\*(C`\-no\-relax\*(C'\fR" 4 -.IX Item "-no-relax" -Do not alter compare-and-branch instructions for long displacements; -error if necessary. -.PP -The following options are available when as is configured for the -Mitsubishi M32R series. -.Ip "\f(CW\*(C`\-\-m32rx\*(C'\fR" 4 -.IX Item "--m32rx" -Specify which processor in the M32R family is the target. The default -is normally the M32R, but this option changes it to the M32RX. -.Ip "\f(CW\*(C`\-\-warn\-explicit\-parallel\-conflicts or \-\-Wp\*(C'\fR" 4 -.IX Item "--warn-explicit-parallel-conflicts or --Wp" -Produce warning messages when questionable parallel constructs are -encountered. -.Ip "\f(CW\*(C`\-\-no\-warn\-explicit\-parallel\-conflicts or \-\-Wnp\*(C'\fR" 4 -.IX Item "--no-warn-explicit-parallel-conflicts or --Wnp" -Do not produce warning messages when questionable parallel constructs are -encountered. -.PP -The following options are available when as is configured for the -Motorola 68000 series. -.Ip "\f(CW\*(C`\-l\*(C'\fR" 4 -.IX Item "-l" -Shorten references to undefined symbols, to one word instead of two. -.Ip "\f(CW\*(C`\-m68000 | \-m68008 | \-m68010 | \-m68020 | \-m68030\*(C'\fR" 4 -.IX Item "-m68000 | -m68008 | -m68010 | -m68020 | -m68030" -.Ip "\f(CW\*(C`| \-m68040 | \-m68060 | \-m68302 | \-m68331 | \-m68332\*(C'\fR" 4 -.IX Item "| -m68040 | -m68060 | -m68302 | -m68331 | -m68332" -.Ip "\f(CW\*(C`| \-m68333 | \-m68340 | \-mcpu32 | \-m5200\*(C'\fR" 4 -.IX Item "| -m68333 | -m68340 | -mcpu32 | -m5200" -Specify what processor in the 68000 family is the target. The default -is normally the 68020, but this can be changed at configuration time. -.Ip "\f(CW\*(C`\-m68881 | \-m68882 | \-mno\-68881 | \-mno\-68882\*(C'\fR" 4 -.IX Item "-m68881 | -m68882 | -mno-68881 | -mno-68882" -The target machine does (or does not) have a floating-point coprocessor. -The default is to assume a coprocessor for 68020, 68030, and cpu32. Although -the basic 68000 is not compatible with the 68881, a combination of the -two can be specified, since it's possible to do emulation of the -coprocessor instructions with the main processor. -.Ip "\f(CW\*(C`\-m68851 | \-mno\-68851\*(C'\fR" 4 -.IX Item "-m68851 | -mno-68851" -The target machine does (or does not) have a memory-management -unit coprocessor. The default is to assume an \s-1MMU\s0 for 68020 and up. -.PP -For details about the \s-1PDP-11\s0 machine dependent features options, -see \f(CW@ref\fR{PDP-11\-Options}. -.Ip "\f(CW\*(C`\-mpic | \-mno\-pic\*(C'\fR" 4 -.IX Item "-mpic | -mno-pic" -Generate position-independent (or position-dependent) code. The -default is \f(CW\*(C`\-mpic\*(C'\fR. -.Ip "\f(CW\*(C`\-mall\*(C'\fR" 4 -.IX Item "-mall" -.Ip "\f(CW\*(C`\-mall\-extensions\*(C'\fR" 4 -.IX Item "-mall-extensions" -Enable all instruction set extensions. This is the default. -.Ip "\f(CW\*(C`\-mno\-extensions\*(C'\fR" 4 -.IX Item "-mno-extensions" -Disable all instruction set extensions. -.Ip "\f(CW\*(C`\-m\f(CIextension\f(CW | \-mno\-\f(CIextension\f(CW\*(C'\fR" 4 -.IX Item "-mextension | -mno-extension" -Enable (or disable) a particular instruction set extension. -.Ip "\f(CW\*(C`\-m\f(CIcpu\f(CW\*(C'\fR" 4 -.IX Item "-mcpu" -Enable the instruction set extensions supported by a particular \s-1CPU\s0, and -disable all other extensions. -.Ip "\f(CW\*(C`\-m\f(CImachine\f(CW\*(C'\fR" 4 -.IX Item "-mmachine" -Enable the instruction set extensions supported by a particular machine -model, and disable all other extensions. -.PP -The following options are available when as is configured for -a picoJava processor. -.Ip "\f(CW\*(C`\-mb\*(C'\fR" 4 -.IX Item "-mb" -Generate ``big endian'' format output. -.Ip "\f(CW\*(C`\-ml\*(C'\fR" 4 -.IX Item "-ml" -Generate ``little endian'' format output. -.PP -The following options are available when as is configured for the -Motorola 68HC11 or 68HC12 series. -.Ip "\f(CW\*(C`\-m68hc11 | \-m68hc12\*(C'\fR" 4 -.IX Item "-m68hc11 | -m68hc12" -Specify what processor is the target. The default is -defined by the configuration option when building the assembler. -.Ip "\f(CW\*(C`\-\-force\-long\-branchs\*(C'\fR" 4 -.IX Item "--force-long-branchs" -Relative branches are turned into absolute ones. This concerns -conditional branches, unconditional branches and branches to a -sub routine. -.Ip "\f(CW\*(C`\-S | \-\-short\-branchs\*(C'\fR" 4 -.IX Item "-S | --short-branchs" -Do not turn relative branchs into absolute ones -when the offset is out of range. -.Ip "\f(CW\*(C`\-\-strict\-direct\-mode\*(C'\fR" 4 -.IX Item "--strict-direct-mode" -Do not turn the direct addressing mode into extended addressing mode -when the instruction does not support direct addressing mode. -.Ip "\f(CW\*(C`\-\-print\-insn\-syntax\*(C'\fR" 4 -.IX Item "--print-insn-syntax" -Print the syntax of instruction in case of error. -.Ip "\f(CW\*(C`\-\-print\-opcodes\*(C'\fR" 4 -.IX Item "--print-opcodes" -print the list of instructions with syntax and then exit. -.Ip "\f(CW\*(C`\-\-generate\-example\*(C'\fR" 4 -.IX Item "--generate-example" -print an example of instruction for each possible instruction and then exit. -This option is only useful for testing \f(CW\*(C`as\*(C'\fR. -.PP -The following options are available when \f(CW\*(C`as\*(C'\fR is configured -for the \s-1SPARC\s0 architecture: -.Ip "\f(CW\*(C`\-Av6 | \-Av7 | \-Av8 | \-Asparclet | \-Asparclite\*(C'\fR" 4 -.IX Item "-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite" -.Ip "\f(CW\*(C`\-Av8plus | \-Av8plusa | \-Av9 | \-Av9a\*(C'\fR" 4 -.IX Item "-Av8plus | -Av8plusa | -Av9 | -Av9a" -Explicitly select a variant of the \s-1SPARC\s0 architecture. -.Sp -\&\fB\-Av8plus\fR and \fB\-Av8plusa\fR select a 32 bit environment. -\&\fB\-Av9\fR and \fB\-Av9a\fR select a 64 bit environment. -.Sp -\&\fB\-Av8plusa\fR and \fB\-Av9a\fR enable the \s-1SPARC\s0 V9 instruction set with -UltraSPARC extensions. -.Ip "\f(CW\*(C`\-xarch=v8plus | \-xarch=v8plusa\*(C'\fR" 4 -.IX Item "-xarch=v8plus | -xarch=v8plusa" -For compatibility with the Solaris v9 assembler. These options are -equivalent to \-Av8plus and \-Av8plusa, respectively. -.Ip "\f(CW\*(C`\-bump\*(C'\fR" 4 -.IX Item "-bump" -Warn when the assembler switches to another architecture. -.PP -The following options are available when as is configured for -a \s-1MIPS\s0 processor. -.Ip "\f(CW\*(C`\-G \f(CInum\f(CW\*(C'\fR" 4 -.IX Item "-G num" -This option sets the largest size of an object that can be referenced -implicitly with the \f(CW\*(C`gp\*(C'\fR register. It is only accepted for targets that -use \s-1ECOFF\s0 format, such as a DECstation running Ultrix. The default value is 8. -.Ip "\f(CW\*(C`\-EB\*(C'\fR" 4 -.IX Item "-EB" -Generate ``big endian'' format output. -.Ip "\f(CW\*(C`\-EL\*(C'\fR" 4 -.IX Item "-EL" -Generate ``little endian'' format output. -.Ip "\f(CW\*(C`\-mips1\*(C'\fR" 4 -.IX Item "-mips1" -.Ip "\f(CW\*(C`\-mips2\*(C'\fR" 4 -.IX Item "-mips2" -.Ip "\f(CW\*(C`\-mips3\*(C'\fR" 4 -.IX Item "-mips3" -.Ip "\f(CW\*(C`\-mips4\*(C'\fR" 4 -.IX Item "-mips4" -.Ip "\f(CW\*(C`\-mips32\*(C'\fR" 4 -.IX Item "-mips32" -Generate code for a particular \s-1MIPS\s0 Instruction Set Architecture level. -\&\fB\-mips1\fR corresponds to the R2000 and R3000 processors, -\&\fB\-mips2\fR to the R6000 processor, and \fB\-mips3\fR to the R4000 -processor. -\&\fB\-mips5\fR, \fB\-mips32\fR, and \fB\-mips64\fR correspond -to generic \s-1MIPS\s0 V, \s-1MIPS32\s0, and \s-1MIPS64\s0 \s-1ISA\s0 -processors, respectively. -.Ip "\f(CW\*(C`\-m4650\*(C'\fR" 4 -.IX Item "-m4650" -.Ip "\f(CW\*(C`\-no\-m4650\*(C'\fR" 4 -.IX Item "-no-m4650" -Generate code for the \s-1MIPS\s0 R4650 chip. This tells the assembler to accept -the \fBmad\fR and \fBmadu\fR instruction, and to not schedule \fBnop\fR -instructions around accesses to the \fB\s-1HI\s0\fR and \fB\s-1LO\s0\fR registers. -\&\fB\-no-m4650\fR turns off this option. -.Ip "\f(CW\*(C`\-mcpu=\f(CI\s\-1CPU\s0\f(CW\*(C'\fR" 4 -.IX Item "-mcpu=CPU" -Generate code for a particular \s-1MIPS\s0 cpu. It is exactly equivalent to -\&\fB\-m\fR\fIcpu\fR, except that there are more value of \fIcpu\fR -understood. -.Ip "\f(CW\*(C`\-\-emulation=\f(CIname\f(CW\*(C'\fR" 4 -.IX Item "--emulation=name" -This option causes \f(CW\*(C`as\*(C'\fR to emulate \f(CW\*(C`as\*(C'\fR configured -for some other target, in all respects, including output format (choosing -between \s-1ELF\s0 and \s-1ECOFF\s0 only), handling of pseudo-opcodes which may generate -debugging information or store symbol table information, and default -endianness. The available configuration names are: \fBmipsecoff\fR, -\&\fBmipself\fR, \fBmipslecoff\fR, \fBmipsbecoff\fR, \fBmipslelf\fR, -\&\fBmipsbelf\fR. The first two do not alter the default endianness from that -of the primary target for which the assembler was configured; the others change -the default to little- or big-endian as indicated by the \fBb\fR or \fBl\fR -in the name. Using \fB\-EB\fR or \fB\-EL\fR will override the endianness -selection in any case. -.Sp -This option is currently supported only when the primary target -\&\f(CW\*(C`as\*(C'\fR is configured for is a \s-1MIPS\s0 \s-1ELF\s0 or \s-1ECOFF\s0 target. -Furthermore, the primary target or others specified with -\&\fB\*(--enable-targets=...\fR at configuration time must include support for -the other format, if both are to be available. For example, the Irix 5 -configuration includes support for both. -.Sp -Eventually, this option will support more configurations, with more -fine-grained control over the assembler's behavior, and will be supported for -more processors. -.Ip "\f(CW\*(C`\-nocpp\*(C'\fR" 4 -.IX Item "-nocpp" -\&\f(CW\*(C`as\*(C'\fR ignores this option. It is accepted for compatibility with -the native tools. -.Ip "\f(CW\*(C`\-\-trap\*(C'\fR" 4 -.IX Item "--trap" -.Ip "\f(CW\*(C`\-\-no\-trap\*(C'\fR" 4 -.IX Item "--no-trap" -.Ip "\f(CW\*(C`\-\-break\*(C'\fR" 4 -.IX Item "--break" -.Ip "\f(CW\*(C`\-\-no\-break\*(C'\fR" 4 -.IX Item "--no-break" -Control how to deal with multiplication overflow and division by zero. -\&\fB\*(--trap\fR or \fB\*(--no-break\fR (which are synonyms) take a trap exception -(and only work for Instruction Set Architecture level 2 and higher); -\&\fB\*(--break\fR or \fB\*(--no-trap\fR (also synonyms, and the default) take a -break exception. -.Ip "\f(CW\*(C`\-n\*(C'\fR" 4 -.IX Item "-n" -When this option is used, \f(CW\*(C`as\*(C'\fR will issue a warning every -time it generates a nop instruction from a macro. -.PP -The following options are available when as is configured for -an MCore processor. -.Ip "\f(CW\*(C`\-jsri2bsr\*(C'\fR" 4 -.IX Item "-jsri2bsr" -.Ip "\f(CW\*(C`\-nojsri2bsr\*(C'\fR" 4 -.IX Item "-nojsri2bsr" -Enable or disable the \s-1JSRI\s0 to \s-1BSR\s0 transformation. By default this is enabled. -The command line option \fB\-nojsri2bsr\fR can be used to disable it. -.Ip "\f(CW\*(C`\-sifilter\*(C'\fR" 4 -.IX Item "-sifilter" -.Ip "\f(CW\*(C`\-nosifilter\*(C'\fR" 4 -.IX Item "-nosifilter" -Enable or disable the silicon filter behaviour. By default this is disabled. -The default can be overridden by the \fB\-sifilter\fR command line option. -.Ip "\f(CW\*(C`\-relax\*(C'\fR" 4 -.IX Item "-relax" -Alter jump instructions for long displacements. -.Ip "\f(CW\*(C`\-mcpu=[210|340]\*(C'\fR" 4 -.IX Item "-mcpu=[210|340]" -Select the cpu type on the target hardware. This controls which instructions -can be assembled. -.Ip "\f(CW\*(C`\-EB\*(C'\fR" 4 -.IX Item "-EB" -Assemble for a big endian target. -.Ip "\f(CW\*(C`\-EL\*(C'\fR" 4 -.IX Item "-EL" -Assemble for a little endian target. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -\&\fIgcc\fR\|(1), \fIld\fR\|(1), and the Info entries for \fIbinutils\fR and \fIld\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/gas/po/POTFILES.in b/gas/po/POTFILES.in index 11518edd20..d1038326e3 100644 --- a/gas/po/POTFILES.in +++ b/gas/po/POTFILES.in @@ -92,6 +92,8 @@ config/tc-mn10300.c config/tc-mn10300.h config/tc-ns32k.c config/tc-ns32k.h +config/tc-openrisc.c +config/tc-openrisc.h config/tc-pdp11.c config/tc-pdp11.h config/tc-pj.c diff --git a/gas/po/gas.pot b/gas/po/gas.pot index 14ec278eab..23b2e24d07 100644 --- a/gas/po/gas.pot +++ b/gas/po/gas.pot @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2001-04-27 15:23+0100\n" +"POT-Creation-Date: 2001-06-13 12:54+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -95,144 +95,142 @@ msgid "" " \t m include macro expansions\n" " \t n omit forms processing\n" " \t s include symbols\n" -" \t L include line debug statistics (if " -"applicable)\n" " \t =FILE list to FILE (must be last sub-option)\n" msgstr "" -#: as.c:238 +#: as.c:237 msgid " -D produce assembler debugging messages\n" msgstr "" -#: as.c:240 +#: as.c:239 msgid " --defsym SYM=VAL define symbol SYM to given value\n" msgstr "" -#: as.c:256 +#: as.c:255 #, c-format msgid " emulate output (default %s)\n" msgstr "" -#: as.c:260 +#: as.c:259 msgid " -f skip whitespace and comment preprocessing\n" msgstr "" -#: as.c:262 +#: as.c:261 msgid " --gstabs generate stabs debugging information\n" msgstr "" -#: as.c:264 +#: as.c:263 msgid " --gdwarf2 generate DWARF2 debugging information\n" msgstr "" -#: as.c:266 +#: as.c:265 msgid " --help show this message and exit\n" msgstr "" -#: as.c:268 +#: as.c:267 msgid " --target-help show target specific options\n" msgstr "" -#: as.c:270 +#: as.c:269 msgid "" " -I DIR add DIR to search list for .include directives\n" msgstr "" -#: as.c:272 +#: as.c:271 msgid " -J don't warn about signed overflow\n" msgstr "" -#: as.c:274 +#: as.c:273 msgid "" " -K warn when differences altered for long " "displacements\n" msgstr "" -#: as.c:276 +#: as.c:275 msgid " -L,--keep-locals keep local symbols (e.g. starting with `L')\n" msgstr "" -#: as.c:278 +#: as.c:277 msgid " -M,--mri assemble in MRI compatibility mode\n" msgstr "" -#: as.c:280 +#: as.c:279 msgid "" " --MD FILE write dependency information in FILE (default " "none)\n" msgstr "" -#: as.c:282 +#: as.c:281 msgid " -nocpp ignored\n" msgstr "" -#: as.c:284 +#: as.c:283 msgid "" " -o OBJFILE name the object-file output OBJFILE (default " "a.out)\n" msgstr "" -#: as.c:286 +#: as.c:285 msgid " -R fold data section into text section\n" msgstr "" -#: as.c:288 +#: as.c:287 msgid "" " --statistics print various measured statistics from execution\n" msgstr "" -#: as.c:290 +#: as.c:289 msgid " --strip-local-absolute strip local absolute symbols\n" msgstr "" -#: as.c:292 +#: as.c:291 msgid "" " --traditional-format Use same format as native assembler when possible\n" msgstr "" -#: as.c:294 +#: as.c:293 msgid " --version print assembler version number and exit\n" msgstr "" -#: as.c:296 +#: as.c:295 msgid " -W --no-warn suppress warnings\n" msgstr "" -#: as.c:298 +#: as.c:297 msgid " --warn don't suppress warnings\n" msgstr "" -#: as.c:300 +#: as.c:299 msgid " --fatal-warnings treat warnings as errors\n" msgstr "" -#: as.c:302 +#: as.c:301 msgid "" " --itbl INSTTBL extend instruction set to include instructions\n" " matching the specifications defined in file " "INSTTBL\n" msgstr "" -#: as.c:305 +#: as.c:304 msgid " -w ignored\n" msgstr "" -#: as.c:307 +#: as.c:306 msgid " -X ignored\n" msgstr "" -#: as.c:309 +#: as.c:308 msgid " -Z generate object file even after errors\n" msgstr "" -#: as.c:311 +#: as.c:310 msgid "" " --listing-lhs-width set the width in words of the output data column " "of\n" " the listing\n" msgstr "" -#: as.c:314 +#: as.c:313 msgid "" " --listing-lhs-width2 set the width in words of the continuation lines\n" " of the output data column; ignored if smaller " @@ -240,106 +238,106 @@ msgid "" " the width of the first line\n" msgstr "" -#: as.c:318 +#: as.c:317 msgid "" " --listing-rhs-width set the max width in characters of the lines from\n" " the source file\n" msgstr "" -#: as.c:321 +#: as.c:320 msgid "" " --listing-cont-lines set the maximum number of continuation lines used\n" " for the output data column of the listing\n" msgstr "" -#: as.c:328 gasp.c:3527 +#: as.c:327 gasp.c:3527 #, c-format msgid "Report bugs to %s\n" msgstr "" #. This output is intended to follow the GNU standards document. -#: as.c:528 +#: as.c:527 #, c-format msgid "GNU assembler %s\n" msgstr "" -#: as.c:529 +#: as.c:528 msgid "Copyright 2001 Free Software Foundation, Inc.\n" msgstr "" -#: as.c:530 gasp.c:3621 +#: as.c:529 gasp.c:3621 msgid "" "This program is free software; you may redistribute it under the terms of\n" "the GNU General Public License. This program has absolutely no warranty.\n" msgstr "" -#: as.c:533 +#: as.c:532 #, c-format msgid "This assembler was configured for a target of `%s'.\n" msgstr "" -#: as.c:540 +#: as.c:539 msgid "multiple emulation names specified" msgstr "" -#: as.c:542 +#: as.c:541 msgid "emulations not handled in this configuration" msgstr "" -#: as.c:547 +#: as.c:546 #, c-format msgid "alias = %s\n" msgstr "" -#: as.c:548 +#: as.c:547 #, c-format msgid "canonical = %s\n" msgstr "" -#: as.c:549 +#: as.c:548 #, c-format msgid "cpu-type = %s\n" msgstr "" -#: as.c:551 +#: as.c:550 #, c-format msgid "format = %s\n" msgstr "" -#: as.c:554 +#: as.c:553 #, c-format msgid "bfd-target = %s\n" msgstr "" -#: as.c:567 +#: as.c:566 msgid "bad defsym; format is --defsym name=value" msgstr "" -#: as.c:591 +#: as.c:590 msgid "No file name following -t option\n" msgstr "" -#: as.c:607 +#: as.c:606 #, c-format msgid "Failed to read instruction table %s\n" msgstr "" -#: as.c:724 +#: as.c:723 #, c-format msgid "invalid listing option `%c'" msgstr "" -#: as.c:923 +#: as.c:922 #, c-format msgid "%d warnings, treating warnings as errors" msgstr "" -#: as.c:954 +#: as.c:953 #, c-format msgid "%s: total time in assembly: %ld.%06ld\n" msgstr "" -#: as.c:957 +#: as.c:956 #, c-format msgid "%s: data size %ld\n" msgstr "" @@ -349,7 +347,7 @@ msgstr "" #. * This should never happen. #. #: atof-generic.c:437 config/tc-a29k.c:544 config/tc-i860.c:340 -#: config/tc-i860.c:832 config/tc-m68k.c:3190 config/tc-m68k.c:3219 +#: config/tc-i860.c:832 config/tc-m68k.c:3180 config/tc-m68k.c:3209 #: config/tc-sparc.c:2544 msgid "failed sanity check." msgstr "" @@ -428,17 +426,17 @@ msgstr "" msgid "Attempt to put an undefined symbol into set %s" msgstr "" -#: config/obj-aout.c:197 config/obj-coff.c:1247 config/obj-elf.c:1773 +#: config/obj-aout.c:197 config/obj-coff.c:1252 config/obj-elf.c:1773 #: ecoff.c:3648 #, c-format msgid "Symbol `%s' can not be both weak and common" msgstr "" -#: config/obj-aout.c:255 config/obj-coff.c:1983 +#: config/obj-aout.c:255 config/obj-coff.c:1987 msgid "unresolved relocation" msgstr "" -#: config/obj-aout.c:257 config/obj-coff.c:1985 +#: config/obj-aout.c:257 config/obj-coff.c:1989 #, c-format msgid "bad relocation: symbol `%s' not in symbol table" msgstr "" @@ -448,7 +446,7 @@ msgstr "" msgid "%s: bad type for weak symbol" msgstr "" -#: config/obj-aout.c:458 config/obj-coff.c:2914 write.c:1933 +#: config/obj-aout.c:458 config/obj-coff.c:2917 write.c:1932 #, c-format msgid "%s: global symbols not supported in common sections" msgstr "" @@ -473,170 +471,170 @@ msgid "Inserting \"%s\" into structure table failed: %s" msgstr "" #. Zero is used as an end marker in the file. -#: config/obj-coff.c:452 +#: config/obj-coff.c:456 msgid "Line numbers must be positive integers\n" msgstr "" -#: config/obj-coff.c:485 config/obj-coff.c:2329 +#: config/obj-coff.c:490 config/obj-coff.c:2332 msgid ".ln pseudo-op inside .def/.endef: ignored." msgstr "" -#: config/obj-coff.c:528 ecoff.c:3284 +#: config/obj-coff.c:533 ecoff.c:3284 msgid ".loc outside of .text" msgstr "" -#: config/obj-coff.c:535 +#: config/obj-coff.c:540 msgid ".loc pseudo-op inside .def/.endef: ignored." msgstr "" -#: config/obj-coff.c:623 config/obj-coff.c:2386 +#: config/obj-coff.c:628 config/obj-coff.c:2389 msgid ".def pseudo-op used inside of .def/.endef: ignored." msgstr "" -#: config/obj-coff.c:669 config/obj-coff.c:2438 +#: config/obj-coff.c:674 config/obj-coff.c:2441 msgid ".endef pseudo-op used outside of .def/.endef: ignored." msgstr "" -#: config/obj-coff.c:707 +#: config/obj-coff.c:712 #, c-format msgid "`%s' symbol without preceding function" msgstr "" -#: config/obj-coff.c:794 config/obj-coff.c:2513 +#: config/obj-coff.c:799 config/obj-coff.c:2516 #, c-format msgid "unexpected storage class %d" msgstr "" -#: config/obj-coff.c:907 config/obj-coff.c:2620 +#: config/obj-coff.c:912 config/obj-coff.c:2623 msgid ".dim pseudo-op used outside of .def/.endef: ignored." msgstr "" -#: config/obj-coff.c:927 config/obj-coff.c:2640 +#: config/obj-coff.c:932 config/obj-coff.c:2643 msgid "badly formed .dim directive ignored" msgstr "" -#: config/obj-coff.c:978 config/obj-coff.c:2703 +#: config/obj-coff.c:983 config/obj-coff.c:2706 msgid ".size pseudo-op used outside of .def/.endef ignored." msgstr "" -#: config/obj-coff.c:994 config/obj-coff.c:2719 +#: config/obj-coff.c:999 config/obj-coff.c:2722 msgid ".scl pseudo-op used outside of .def/.endef ignored." msgstr "" -#: config/obj-coff.c:1012 config/obj-coff.c:2737 +#: config/obj-coff.c:1017 config/obj-coff.c:2740 msgid ".tag pseudo-op used outside of .def/.endef ignored." msgstr "" -#: config/obj-coff.c:1031 config/obj-coff.c:2755 +#: config/obj-coff.c:1036 config/obj-coff.c:2758 #, c-format msgid "tag not found for .tag %s" msgstr "" -#: config/obj-coff.c:1046 config/obj-coff.c:2770 +#: config/obj-coff.c:1051 config/obj-coff.c:2773 msgid ".type pseudo-op used outside of .def/.endef ignored." msgstr "" -#: config/obj-coff.c:1068 config/obj-coff.c:2792 +#: config/obj-coff.c:1073 config/obj-coff.c:2795 msgid ".val pseudo-op used outside of .def/.endef ignored." msgstr "" -#: config/obj-coff.c:1208 config/obj-coff.c:2987 +#: config/obj-coff.c:1213 config/obj-coff.c:2990 msgid "mismatched .eb" msgstr "" -#: config/obj-coff.c:1226 config/obj-coff.c:3027 +#: config/obj-coff.c:1231 config/obj-coff.c:3030 msgid "C_EFCN symbol out of scope" msgstr "" #. STYP_INFO #. STYP_LIB #. STYP_OVER -#: config/obj-coff.c:1448 +#: config/obj-coff.c:1453 #, c-format msgid "unsupported section attribute '%c'" msgstr "" -#: config/obj-coff.c:1453 config/obj-coff.c:3728 config/tc-ppc.c:3925 +#: config/obj-coff.c:1458 config/obj-coff.c:3734 config/tc-ppc.c:3945 #, c-format msgid "unknown section attribute '%c'" msgstr "" -#: config/obj-coff.c:1483 config/tc-ppc.c:3943 read.c:2520 +#: config/obj-coff.c:1488 config/tc-ppc.c:3963 read.c:2520 #, c-format msgid "error setting flags for \"%s\": %s" msgstr "" -#: config/obj-coff.c:1494 config/obj-elf.c:727 +#: config/obj-coff.c:1499 config/obj-elf.c:727 #, c-format msgid "Ignoring changed section attributes for %s" msgstr "" -#: config/obj-coff.c:1630 +#: config/obj-coff.c:1635 #, c-format msgid "0x%lx: \"%s\" type = %ld, class = %d, segment = %d\n" msgstr "" -#: config/obj-coff.c:1810 config/obj-ieee.c:69 +#: config/obj-coff.c:1815 config/obj-ieee.c:69 msgid "Out of step\n" msgstr "" -#: config/obj-coff.c:2245 +#: config/obj-coff.c:2248 msgid "bfd_coff_swap_scnhdr_out failed" msgstr "" -#: config/obj-coff.c:2470 +#: config/obj-coff.c:2473 msgid "`.bf' symbol without preceding function\n" msgstr "" -#: config/obj-coff.c:3424 config/obj-ieee.c:507 output-file.c:52 +#: config/obj-coff.c:3427 config/obj-ieee.c:507 output-file.c:52 #: output-file.c:119 #, c-format msgid "FATAL: Can't create %s" msgstr "" -#: config/obj-coff.c:3602 +#: config/obj-coff.c:3608 #, c-format msgid "Can't close %s: %s" msgstr "" -#: config/obj-coff.c:3636 +#: config/obj-coff.c:3642 #, c-format msgid "Too many new sections; can't add \"%s\"" msgstr "" -#: config/obj-coff.c:4043 config/tc-m88k.c:1258 config/tc-sparc.c:3532 +#: config/obj-coff.c:4049 config/tc-m88k.c:1258 config/tc-sparc.c:3538 msgid "Expected comma after name" msgstr "" -#: config/obj-coff.c:4049 read.c:1956 +#: config/obj-coff.c:4055 read.c:1956 msgid "Missing size expression" msgstr "" -#: config/obj-coff.c:4055 +#: config/obj-coff.c:4061 #, c-format msgid "lcomm length (%d.) <0! Ignored." msgstr "" -#: config/obj-coff.c:4083 read.c:2190 +#: config/obj-coff.c:4089 read.c:2190 #, c-format msgid "Symbol %s already defined" msgstr "" -#: config/obj-coff.c:4178 config/tc-i960.c:3215 +#: config/obj-coff.c:4184 config/tc-i960.c:3215 #, c-format msgid "No 'bal' entry point for leafproc %s" msgstr "" -#: config/obj-coff.c:4257 write.c:2639 +#: config/obj-coff.c:4263 write.c:2648 #, c-format msgid "Negative of non-absolute symbol %s" msgstr "" -#: config/obj-coff.c:4278 write.c:2653 +#: config/obj-coff.c:4284 write.c:2662 msgid "callj to difference of 2 symbols" msgstr "" -#: config/obj-coff.c:4324 +#: config/obj-coff.c:4330 #, c-format msgid "Can't emit reloc {- %s-seg symbol \"%s\"} @ file address %ld." msgstr "" @@ -644,16 +642,16 @@ msgstr "" #. This is a COBR instruction. They have only a 13-bit #. displacement and are only to be used for local branches: #. flag as error, don't generate relocation. -#: config/obj-coff.c:4413 config/tc-i960.c:3235 write.c:2797 +#: config/obj-coff.c:4419 config/tc-i960.c:3235 write.c:2806 msgid "can't use COBR format with external label" msgstr "" -#: config/obj-coff.c:4492 +#: config/obj-coff.c:4498 #, c-format msgid "Value of %ld too large for field of %d bytes at 0x%lx" msgstr "" -#: config/obj-coff.c:4506 write.c:2887 +#: config/obj-coff.c:4512 write.c:2896 #, c-format msgid "Signed .word overflow; switch may be too large; %ld at 0x%lx" msgstr "" @@ -666,35 +664,35 @@ msgstr "" msgid "Can't set register masks" msgstr "" -#: config/obj-elf.c:308 config/tc-sparc.c:3675 config/tc-v850.c:259 +#: config/obj-elf.c:308 config/tc-sparc.c:3681 config/tc-v850.c:260 msgid "Expected comma after symbol-name" msgstr "" -#: config/obj-elf.c:315 config/tc-sparc.c:3685 +#: config/obj-elf.c:315 config/tc-sparc.c:3691 #, c-format msgid ".COMMon length (%d.) <0! Ignored." msgstr "" -#: config/obj-elf.c:325 config/tc-alpha.c:4332 config/tc-sparc.c:3695 -#: config/tc-v850.c:282 +#: config/obj-elf.c:325 config/tc-alpha.c:4332 config/tc-sparc.c:3701 +#: config/tc-v850.c:283 msgid "Ignoring attempt to re-define symbol" msgstr "" -#: config/obj-elf.c:333 config/tc-sparc.c:3703 config/tc-v850.c:292 +#: config/obj-elf.c:333 config/tc-sparc.c:3709 config/tc-v850.c:293 #, c-format msgid "Length of .comm \"%s\" is already %ld. Not changed to %d." msgstr "" -#: config/obj-elf.c:356 config/tc-v850.c:319 +#: config/obj-elf.c:356 config/tc-v850.c:320 msgid "Common alignment negative; 0 assumed" msgstr "" #: config/obj-elf.c:375 config/tc-m32r.c:1287 config/tc-ppc.c:1518 -#: config/tc-v850.c:382 +#: config/tc-v850.c:383 msgid "Common alignment not a power of 2" msgstr "" -#: config/obj-elf.c:438 config/tc-sparc.c:3827 config/tc-v850.c:564 +#: config/obj-elf.c:438 config/tc-sparc.c:3833 config/tc-v850.c:565 #, c-format msgid "bad .common segment %s" msgstr "" @@ -982,13 +980,13 @@ msgstr "" msgid "unhandled stab type %d" msgstr "" -#: config/tc-a29k.c:160 config/tc-sparc.c:3879 +#: config/tc-a29k.c:160 config/tc-sparc.c:3885 msgid "Unknown segment type" msgstr "" #. Probably a memory allocation problem? Give up now. -#: config/tc-a29k.c:330 config/tc-hppa.c:1443 config/tc-mips.c:1031 -#: config/tc-mips.c:1073 config/tc-sparc.c:847 +#: config/tc-a29k.c:330 config/tc-hppa.c:1443 config/tc-mips.c:1039 +#: config/tc-mips.c:1081 config/tc-sparc.c:847 msgid "Broken assembler. No assembly attempted." msgstr "" @@ -996,8 +994,8 @@ msgstr "" #: config/tc-d30v.c:552 config/tc-h8300.c:296 config/tc-h8500.c:284 #: config/tc-mcore.c:655 config/tc-mn10200.c:955 config/tc-mn10300.c:1337 #: config/tc-ppc.c:1974 config/tc-s390.c:1030 config/tc-sh.c:848 -#: config/tc-tic80.c:282 config/tc-v850.c:2076 config/tc-w65.c:242 -#: config/tc-z8k.c:336 +#: config/tc-tic80.c:282 config/tc-v850.c:2073 config/tc-w65.c:242 +#: config/tc-z8k.c:334 msgid "missing operand" msgstr "" @@ -1068,10 +1066,10 @@ msgstr "" msgid "syntax error" msgstr "" -#: config/tc-alpha.c:1020 config/tc-arm.c:6640 config/tc-h8300.c:1373 +#: config/tc-alpha.c:1020 config/tc-arm.c:6651 config/tc-h8300.c:1373 #: config/tc-h8500.c:1187 config/tc-hppa.c:3996 config/tc-i860.c:931 -#: config/tc-m68hc11.c:484 config/tc-m68k.c:4194 config/tc-m88k.c:1106 -#: config/tc-ns32k.c:1664 config/tc-sparc.c:2831 config/tc-z8k.c:1334 +#: config/tc-m68hc11.c:486 config/tc-m68k.c:4199 config/tc-m88k.c:1106 +#: config/tc-ns32k.c:1664 config/tc-sparc.c:2831 config/tc-z8k.c:1312 msgid "Bad call to MD_ATOF()" msgstr "" @@ -1112,7 +1110,7 @@ msgstr "" msgid "type %d reloc done?\n" msgstr "" -#: config/tc-alpha.c:1375 config/tc-alpha.c:1382 config/tc-mips.c:7373 +#: config/tc-alpha.c:1375 config/tc-alpha.c:1382 config/tc-mips.c:7399 msgid "Used $at without \".set noat\"" msgstr "" @@ -1168,8 +1166,8 @@ msgstr "" #: config/tc-alpha.c:2441 config/tc-d10v.c:622 config/tc-d30v.c:640 #: config/tc-mn10200.c:1010 config/tc-mn10300.c:1408 config/tc-ppc.c:1940 #: config/tc-ppc.c:2048 config/tc-ppc.c:2060 config/tc-s390.c:1040 -#: config/tc-s390.c:1093 config/tc-v850.c:1856 config/tc-v850.c:1879 -#: config/tc-v850.c:2099 +#: config/tc-s390.c:1093 config/tc-v850.c:1853 config/tc-v850.c:1876 +#: config/tc-v850.c:2096 msgid "too many fixups" msgstr "" @@ -1219,7 +1217,7 @@ msgstr "" msgid "bignum invalid; zero assumed" msgstr "" -#: config/tc-alpha.c:3089 expr.c:86 read.c:3174 read.c:3507 read.c:4405 +#: config/tc-alpha.c:3089 expr.c:86 read.c:3174 read.c:3507 read.c:4406 msgid "floating point number invalid; zero assumed" msgstr "" @@ -1236,13 +1234,13 @@ msgstr "" msgid "bad instruction format for lda !%s!%ld" msgstr "" -#: config/tc-alpha.c:4303 config/tc-ppc.c:1467 config/tc-ppc.c:3689 +#: config/tc-alpha.c:4303 config/tc-ppc.c:1467 config/tc-ppc.c:3709 #: read.c:1369 #, c-format msgid ".COMMon length (%ld.) <0! Ignored." msgstr "" -#: config/tc-alpha.c:4341 config/tc-alpha.c:4350 config/tc-ppc.c:3726 +#: config/tc-alpha.c:4341 config/tc-alpha.c:4350 config/tc-ppc.c:3746 #: read.c:1393 #, c-format msgid "Length of .comm \"%s\" is already %ld. Not changed to %ld." @@ -1333,7 +1331,7 @@ msgstr "" msgid "Bad .fmask directive" msgstr "" -#: config/tc-alpha.c:5237 config/tc-arm.c:1593 read.c:2150 read.c:2745 +#: config/tc-alpha.c:5237 config/tc-arm.c:1604 read.c:2150 read.c:2745 #: stabs.c:472 #, c-format msgid "Expected comma after name \"%s\"" @@ -1374,651 +1372,651 @@ msgstr "" msgid "Chose GP value of %lx\n" msgstr "" -#: config/tc-arc.c:1609 config/tc-arm.c:7552 +#: config/tc-arc.c:1615 config/tc-arm.c:7563 msgid "md_estimate_size_before_relax\n" msgstr "" -#: config/tc-arc.c:1621 +#: config/tc-arc.c:1627 msgid "md_convert_frag\n" msgstr "" -#: config/tc-arm.c:1289 +#: config/tc-arm.c:1300 msgid "Literal Pool Overflow" msgstr "" -#: config/tc-arm.c:1431 +#: config/tc-arm.c:1442 msgid "Invalid syntax for .req directive." msgstr "" -#: config/tc-arm.c:1506 config/tc-mips.c:9937 read.c:2035 +#: config/tc-arm.c:1517 config/tc-mips.c:9979 read.c:2035 #, c-format msgid "Alignment too large: %d. assumed." msgstr "" -#: config/tc-arm.c:1509 read.c:2040 +#: config/tc-arm.c:1520 read.c:2040 msgid "Alignment negative. 0 assumed." msgstr "" -#: config/tc-arm.c:1643 config/tc-m32r.c:418 read.c:2803 read.c:4872 +#: config/tc-arm.c:1654 config/tc-m32r.c:418 read.c:2803 read.c:4884 #, c-format msgid "symbol `%s' already defined" msgstr "" -#: config/tc-arm.c:1714 +#: config/tc-arm.c:1725 msgid "selected processor does not support THUMB opcodes" msgstr "" -#: config/tc-arm.c:1727 +#: config/tc-arm.c:1738 msgid "selected processor does not support ARM opcodes" msgstr "" -#: config/tc-arm.c:1739 +#: config/tc-arm.c:1750 #, c-format msgid "invalid instruction size selected (%d)" msgstr "" -#: config/tc-arm.c:1774 +#: config/tc-arm.c:1785 #, c-format msgid "invalid operand to .code directive (%d) (expecting 16 or 32)" msgstr "" -#: config/tc-arm.c:1785 +#: config/tc-arm.c:1796 msgid "Garbage following instruction" msgstr "" #. In the few cases where we might be able to accept something else #. this error can be overridden. -#: config/tc-arm.c:1835 +#: config/tc-arm.c:1846 #, c-format msgid "Register expected, not '%.100s'" msgstr "" #. In the few cases where we might be able to accept #. something else this error can be overridden. -#: config/tc-arm.c:1907 +#: config/tc-arm.c:1918 msgid "flag for {c}psr instruction expected" msgstr "" -#: config/tc-arm.c:1937 +#: config/tc-arm.c:1948 msgid "Illegal co-processor number" msgstr "" -#: config/tc-arm.c:1944 +#: config/tc-arm.c:1955 msgid "Bad or missing co-processor number" msgstr "" -#: config/tc-arm.c:1968 config/tc-arm.c:3054 config/tc-arm.c:3246 +#: config/tc-arm.c:1979 config/tc-arm.c:3065 config/tc-arm.c:3257 msgid "bad or missing expression" msgstr "" -#: config/tc-arm.c:1974 +#: config/tc-arm.c:1985 msgid "immediate co-processor expression too large" msgstr "" #. In the few cases where we might be able to accept something else #. this error can be overridden. -#: config/tc-arm.c:1999 +#: config/tc-arm.c:2010 msgid "Co-processor register expected" msgstr "" #. In the few cases where we might be able to accept something else #. this error can be overridden. -#: config/tc-arm.c:2023 +#: config/tc-arm.c:2034 msgid "Floating point register expected" msgstr "" -#: config/tc-arm.c:2040 +#: config/tc-arm.c:2051 msgid "immediate expression expected" msgstr "" -#: config/tc-arm.c:2055 +#: config/tc-arm.c:2066 msgid "co-processor address must be word aligned" msgstr "" -#: config/tc-arm.c:2061 +#: config/tc-arm.c:2072 msgid "offset too large" msgstr "" -#: config/tc-arm.c:2109 +#: config/tc-arm.c:2120 msgid "pc may not be used in post-increment" msgstr "" -#: config/tc-arm.c:2125 config/tc-arm.c:2578 config/tc-arm.c:3438 -#: config/tc-arm.c:4372 +#: config/tc-arm.c:2136 config/tc-arm.c:2589 config/tc-arm.c:3449 +#: config/tc-arm.c:4383 msgid "pre-indexed expression expected" msgstr "" -#: config/tc-arm.c:2138 config/tc-arm.c:2591 config/tc-arm.c:3449 -#: config/tc-arm.c:4384 config/tc-arm.c:4730 +#: config/tc-arm.c:2149 config/tc-arm.c:2602 config/tc-arm.c:3460 +#: config/tc-arm.c:4395 config/tc-arm.c:4741 msgid "missing ]" msgstr "" -#: config/tc-arm.c:2148 +#: config/tc-arm.c:2159 msgid "pc may not be used with write-back" msgstr "" -#: config/tc-arm.c:2203 +#: config/tc-arm.c:2214 msgid "comma expected after register name" msgstr "" -#: config/tc-arm.c:2222 +#: config/tc-arm.c:2233 msgid "{C|S}PSR expected" msgstr "" -#: config/tc-arm.c:2250 +#: config/tc-arm.c:2261 msgid "comma missing after psr flags" msgstr "" -#: config/tc-arm.c:2267 config/tc-arm.c:2277 +#: config/tc-arm.c:2278 config/tc-arm.c:2288 msgid "only a register or immediate value can follow a psr flag" msgstr "" -#: config/tc-arm.c:2284 +#: config/tc-arm.c:2295 msgid "immediate value cannot be used to set this field" msgstr "" -#: config/tc-arm.c:2301 config/tc-arm.c:3673 config/tc-arm.c:3939 -#: config/tc-arm.c:3959 +#: config/tc-arm.c:2312 config/tc-arm.c:3684 config/tc-arm.c:3950 +#: config/tc-arm.c:3970 msgid "Invalid constant" msgstr "" -#: config/tc-arm.c:2351 +#: config/tc-arm.c:2362 msgid "rdhi, rdlo and rm must all be different" msgstr "" -#: config/tc-arm.c:2407 +#: config/tc-arm.c:2418 msgid "rd and rm should be different in mul" msgstr "" -#: config/tc-arm.c:2463 +#: config/tc-arm.c:2474 msgid "rd and rm should be different in mla" msgstr "" -#: config/tc-arm.c:2512 +#: config/tc-arm.c:2523 #, c-format msgid "acc0 expected, not '%.100s'" msgstr "" -#: config/tc-arm.c:2695 +#: config/tc-arm.c:2706 msgid "rdhi and rdlo must be different" msgstr "" -#: config/tc-arm.c:2815 +#: config/tc-arm.c:2826 msgid "Warning: Instruction unpredictable when using r15" msgstr "" -#: config/tc-arm.c:3063 config/tc-arm.c:3255 config/tc-arm.c:5517 -#: config/tc-arm.c:5550 config/tc-arm.c:5560 +#: config/tc-arm.c:3074 config/tc-arm.c:3266 config/tc-arm.c:5528 +#: config/tc-arm.c:5561 config/tc-arm.c:5571 msgid "immediate value out of range" msgstr "" -#: config/tc-arm.c:3403 +#: config/tc-arm.c:3414 msgid "'[' expected after PLD mnemonic" msgstr "" -#: config/tc-arm.c:3428 config/tc-arm.c:3458 +#: config/tc-arm.c:3439 config/tc-arm.c:3469 msgid "writeback used in preload instruction" msgstr "" #. Deny all knowledge. -#: config/tc-arm.c:3506 +#: config/tc-arm.c:3517 #, c-format msgid "bad instruction '%.100s'" msgstr "" -#: config/tc-arm.c:3530 +#: config/tc-arm.c:3541 msgid "Destination register must be even" msgstr "" -#: config/tc-arm.c:3536 +#: config/tc-arm.c:3547 msgid "r12 or r14 not allowed here" msgstr "" -#: config/tc-arm.c:3544 +#: config/tc-arm.c:3555 msgid "pre/post-indexing used when modified address register is destination" msgstr "" -#: config/tc-arm.c:3657 +#: config/tc-arm.c:3668 msgid "bad_segment" msgstr "" -#: config/tc-arm.c:3703 config/tc-arm.c:3714 +#: config/tc-arm.c:3714 config/tc-arm.c:3725 msgid "Shift expression expected" msgstr "" -#: config/tc-arm.c:3738 +#: config/tc-arm.c:3749 msgid "shift requires register or #expression" msgstr "" -#: config/tc-arm.c:3739 +#: config/tc-arm.c:3750 msgid "shift requires #expression" msgstr "" -#: config/tc-arm.c:3769 +#: config/tc-arm.c:3780 msgid "Shift of 0 ignored." msgstr "" -#: config/tc-arm.c:3775 +#: config/tc-arm.c:3786 msgid "Invalid immediate shift" msgstr "" -#: config/tc-arm.c:3930 config/tc-arm.c:4414 +#: config/tc-arm.c:3941 config/tc-arm.c:4425 msgid "Constant expression expected" msgstr "" -#: config/tc-arm.c:3972 +#: config/tc-arm.c:3983 msgid "Register or shift expression expected" msgstr "" -#: config/tc-arm.c:4025 +#: config/tc-arm.c:4036 msgid "Invalid floating point immediate expression" msgstr "" -#: config/tc-arm.c:4029 +#: config/tc-arm.c:4040 msgid "Floating point register or immediate expression expected" msgstr "" -#: config/tc-arm.c:4198 +#: config/tc-arm.c:4209 msgid "address offset too large" msgstr "" -#: config/tc-arm.c:4275 +#: config/tc-arm.c:4286 msgid "Processor does not support halfwords or signed bytes" msgstr "" -#: config/tc-arm.c:4296 +#: config/tc-arm.c:4307 msgid "Address expected" msgstr "" -#: config/tc-arm.c:4328 config/tc-arm.c:4359 +#: config/tc-arm.c:4339 config/tc-arm.c:4370 #, c-format msgid "Rn and Rd must be different in %s" msgstr "" -#: config/tc-arm.c:4332 config/tc-arm.c:4348 config/tc-arm.c:4393 +#: config/tc-arm.c:4343 config/tc-arm.c:4359 config/tc-arm.c:4404 #, c-format msgid "%s register same as write-back base" msgstr "" -#: config/tc-arm.c:4334 config/tc-arm.c:4350 config/tc-arm.c:4395 +#: config/tc-arm.c:4345 config/tc-arm.c:4361 config/tc-arm.c:4406 msgid "destination" msgstr "" -#: config/tc-arm.c:4334 config/tc-arm.c:4350 config/tc-arm.c:4395 +#: config/tc-arm.c:4345 config/tc-arm.c:4361 config/tc-arm.c:4406 msgid "source" msgstr "" -#: config/tc-arm.c:4434 +#: config/tc-arm.c:4445 msgid "literal pool insertion failed" msgstr "" -#: config/tc-arm.c:4473 +#: config/tc-arm.c:4484 msgid "Pre-increment instruction with translate" msgstr "" -#: config/tc-arm.c:4514 +#: config/tc-arm.c:4525 msgid "Bad range in register list" msgstr "" -#: config/tc-arm.c:4522 config/tc-arm.c:4531 config/tc-arm.c:4573 +#: config/tc-arm.c:4533 config/tc-arm.c:4542 config/tc-arm.c:4584 #, c-format msgid "Warning: Duplicated register (r%d) in register list" msgstr "" -#: config/tc-arm.c:4534 +#: config/tc-arm.c:4545 msgid "Warning: Register range not in ascending order" msgstr "" -#: config/tc-arm.c:4546 +#: config/tc-arm.c:4557 msgid "Missing `}'" msgstr "" -#: config/tc-arm.c:4562 +#: config/tc-arm.c:4573 msgid "invalid register mask" msgstr "" -#: config/tc-arm.c:4583 config/tc-avr.c:852 config/tc-cris.c:3009 -#: config/tc-d10v.c:1561 config/tc-d30v.c:1865 config/tc-mips.c:3231 -#: config/tc-mips.c:4163 config/tc-mips.c:4964 config/tc-mips.c:5510 -#: config/tc-ppc.c:4855 config/tc-v850.c:2385 +#: config/tc-arm.c:4594 config/tc-avr.c:852 config/tc-cris.c:3009 +#: config/tc-d10v.c:1561 config/tc-d30v.c:1865 config/tc-mips.c:3247 +#: config/tc-mips.c:4183 config/tc-mips.c:4984 config/tc-mips.c:5530 +#: config/tc-ppc.c:4873 config/tc-v850.c:2377 msgid "expression too complex" msgstr "" -#: config/tc-arm.c:4622 +#: config/tc-arm.c:4633 msgid "r15 not allowed as base register" msgstr "" -#: config/tc-arm.c:4690 config/tc-arm.c:4704 +#: config/tc-arm.c:4701 config/tc-arm.c:4715 msgid "r15 not allowed in swap" msgstr "" -#: config/tc-arm.c:4802 +#: config/tc-arm.c:4813 msgid "Use of r15 in bx in ARM mode is not really useful" msgstr "" -#: config/tc-arm.c:5058 config/tc-v850.c:1959 config/tc-v850.c:1980 +#: config/tc-arm.c:5069 config/tc-v850.c:1956 config/tc-v850.c:1977 msgid "constant expression expected" msgstr "" -#: config/tc-arm.c:5064 +#: config/tc-arm.c:5075 msgid "Constant value required for number of registers" msgstr "" -#: config/tc-arm.c:5072 +#: config/tc-arm.c:5083 msgid "number of registers must be in the range [1:4]" msgstr "" -#: config/tc-arm.c:5133 +#: config/tc-arm.c:5144 msgid "R15 not allowed as base register with write-back" msgstr "" -#: config/tc-arm.c:5381 +#: config/tc-arm.c:5392 msgid "lo register required" msgstr "" -#: config/tc-arm.c:5389 +#: config/tc-arm.c:5400 msgid "hi register required" msgstr "" -#: config/tc-arm.c:5459 +#: config/tc-arm.c:5470 msgid "dest and source1 must be the same register" msgstr "" -#: config/tc-arm.c:5466 +#: config/tc-arm.c:5477 msgid "subtract valid only on lo regs" msgstr "" -#: config/tc-arm.c:5490 +#: config/tc-arm.c:5501 msgid "invalid Hi register with immediate" msgstr "" -#: config/tc-arm.c:5528 +#: config/tc-arm.c:5539 msgid "invalid immediate value for stack adjust" msgstr "" -#: config/tc-arm.c:5539 +#: config/tc-arm.c:5550 msgid "invalid immediate for address calculation" msgstr "" -#: config/tc-arm.c:5626 +#: config/tc-arm.c:5637 msgid "source1 and dest must be same register" msgstr "" -#: config/tc-arm.c:5660 +#: config/tc-arm.c:5671 msgid "Invalid immediate for shift" msgstr "" -#: config/tc-arm.c:5739 +#: config/tc-arm.c:5750 msgid "only lo regs allowed with immediate" msgstr "" -#: config/tc-arm.c:5758 +#: config/tc-arm.c:5769 msgid "invalid immediate" msgstr "" -#: config/tc-arm.c:5812 +#: config/tc-arm.c:5823 msgid "expected ']'" msgstr "" -#: config/tc-arm.c:5879 +#: config/tc-arm.c:5890 msgid "byte or halfword not valid for base register" msgstr "" -#: config/tc-arm.c:5884 +#: config/tc-arm.c:5895 msgid "R15 based store not allowed" msgstr "" -#: config/tc-arm.c:5889 +#: config/tc-arm.c:5900 msgid "Invalid base register for register offset" msgstr "" -#: config/tc-arm.c:5907 +#: config/tc-arm.c:5918 msgid "invalid offset" msgstr "" -#: config/tc-arm.c:5918 +#: config/tc-arm.c:5929 msgid "invalid base register in load/store" msgstr "" -#: config/tc-arm.c:5942 +#: config/tc-arm.c:5953 msgid "Invalid offset" msgstr "" -#: config/tc-arm.c:6017 +#: config/tc-arm.c:6028 msgid "dest and source1 one must be the same register" msgstr "" -#: config/tc-arm.c:6025 +#: config/tc-arm.c:6036 msgid "Rs and Rd must be different in MUL" msgstr "" -#: config/tc-arm.c:6169 +#: config/tc-arm.c:6180 msgid "" "Inserted missing '!': load/store multiple always writes back base register" msgstr "" -#: config/tc-arm.c:6185 config/tc-arm.c:6285 +#: config/tc-arm.c:6196 config/tc-arm.c:6296 msgid "Expression too complex" msgstr "" -#: config/tc-arm.c:6191 +#: config/tc-arm.c:6202 msgid "only lo-regs valid in load/store multiple" msgstr "" -#: config/tc-arm.c:6237 +#: config/tc-arm.c:6248 msgid "Syntax: ldrs[b] Rd, [Rb, Ro]" msgstr "" -#: config/tc-arm.c:6301 +#: config/tc-arm.c:6312 msgid "invalid register list to push/pop instruction" msgstr "" -#: config/tc-arm.c:6443 config/tc-cris.c:684 +#: config/tc-arm.c:6454 config/tc-cris.c:684 msgid "Virtual memory exhausted" msgstr "" -#: config/tc-arm.c:6846 +#: config/tc-arm.c:6857 #, c-format msgid "invalid constant (%lx) after fixup" msgstr "" -#: config/tc-arm.c:6882 +#: config/tc-arm.c:6893 #, c-format msgid "Unable to compute ADRL instructions for PC offset of 0x%lx" msgstr "" -#: config/tc-arm.c:6912 +#: config/tc-arm.c:6923 #, c-format msgid "bad immediate value for offset (%ld)" msgstr "" -#: config/tc-arm.c:6934 config/tc-arm.c:6956 +#: config/tc-arm.c:6945 config/tc-arm.c:6967 msgid "invalid literal constant: pool needs to be closer" msgstr "" -#: config/tc-arm.c:6936 +#: config/tc-arm.c:6947 #, c-format msgid "bad immediate value for half-word offset (%ld)" msgstr "" -#: config/tc-arm.c:6973 +#: config/tc-arm.c:6984 msgid "shift expression is too large" msgstr "" -#: config/tc-arm.c:6992 config/tc-arm.c:7001 +#: config/tc-arm.c:7003 config/tc-arm.c:7012 msgid "Invalid swi expression" msgstr "" -#: config/tc-arm.c:7011 +#: config/tc-arm.c:7022 msgid "Invalid expression in load/store multiple" msgstr "" -#: config/tc-arm.c:7064 +#: config/tc-arm.c:7075 msgid "gas can't handle same-section branch dest >= 0x04000000" msgstr "" -#: config/tc-arm.c:7073 +#: config/tc-arm.c:7084 msgid "out of range branch" msgstr "" -#: config/tc-arm.c:7106 config/tc-arm.c:7122 config/tc-mips.c:9764 +#: config/tc-arm.c:7117 config/tc-arm.c:7133 config/tc-mips.c:9806 msgid "Branch out of range" msgstr "" -#: config/tc-arm.c:7145 +#: config/tc-arm.c:7156 msgid "Branch with link out of range" msgstr "" -#: config/tc-arm.c:7221 +#: config/tc-arm.c:7232 msgid "Illegal value for co-processor offset" msgstr "" -#: config/tc-arm.c:7245 +#: config/tc-arm.c:7256 #, c-format msgid "Invalid offset, target not word aligned (0x%08X)" msgstr "" -#: config/tc-arm.c:7251 config/tc-arm.c:7260 config/tc-arm.c:7267 -#: config/tc-arm.c:7274 config/tc-arm.c:7281 +#: config/tc-arm.c:7262 config/tc-arm.c:7271 config/tc-arm.c:7278 +#: config/tc-arm.c:7285 config/tc-arm.c:7292 #, c-format msgid "Invalid offset, value too big (0x%08lX)" msgstr "" -#: config/tc-arm.c:7320 +#: config/tc-arm.c:7331 msgid "Invalid immediate for stack address calculation" msgstr "" -#: config/tc-arm.c:7329 +#: config/tc-arm.c:7340 #, c-format msgid "Invalid immediate for address calculation (value = 0x%08lX)" msgstr "" -#: config/tc-arm.c:7339 +#: config/tc-arm.c:7350 msgid "Invalid 8bit immediate" msgstr "" -#: config/tc-arm.c:7347 +#: config/tc-arm.c:7358 msgid "Invalid 3bit immediate" msgstr "" -#: config/tc-arm.c:7363 +#: config/tc-arm.c:7374 #, c-format msgid "Invalid immediate: %ld is too large" msgstr "" -#: config/tc-arm.c:7378 +#: config/tc-arm.c:7389 #, c-format msgid "Illegal Thumb shift value: %ld" msgstr "" -#: config/tc-arm.c:7392 config/tc-mn10300.c:1929 +#: config/tc-arm.c:7403 config/tc-mn10300.c:1972 #, c-format msgid "Bad relocation fixup type (%d)" msgstr "" -#: config/tc-arm.c:7465 +#: config/tc-arm.c:7476 msgid "Literal referenced across section boundary (Implicit dump?)" msgstr "" -#: config/tc-arm.c:7478 +#: config/tc-arm.c:7489 #, c-format msgid "Internal_relocation (type %d) not fixed up (IMMEDIATE)" msgstr "" -#: config/tc-arm.c:7484 +#: config/tc-arm.c:7495 msgid "ADRL used for a symbol not defined in the same file" msgstr "" -#: config/tc-arm.c:7489 +#: config/tc-arm.c:7500 #, c-format msgid "Internal_relocation (type %d) not fixed up (OFFSET_IMM)" msgstr "" -#: config/tc-arm.c:7510 config/tc-cris.c:2944 config/tc-mcore.c:2109 -#: config/tc-ns32k.c:2375 +#: config/tc-arm.c:7521 config/tc-cris.c:2944 config/tc-mcore.c:2104 +#: config/tc-ns32k.c:2363 msgid "<unknown>" msgstr "" -#: config/tc-arm.c:7513 +#: config/tc-arm.c:7524 #, c-format msgid "Cannot represent %s relocation in this object file format" msgstr "" -#: config/tc-arm.c:7534 config/tc-mips.c:11282 config/tc-sh.c:3196 +#: config/tc-arm.c:7545 config/tc-mips.c:11315 config/tc-sh.c:3198 #, c-format msgid "Can not represent %s relocation in this object file format" msgstr "" -#: config/tc-arm.c:7631 +#: config/tc-arm.c:7642 #, c-format msgid "No operator -- statement `%s'\n" msgstr "" -#: config/tc-arm.c:7649 +#: config/tc-arm.c:7660 msgid "selected processor does not support this opcode" msgstr "" -#: config/tc-arm.c:7695 +#: config/tc-arm.c:7706 #, c-format msgid "Opcode `%s' must have suffix from list: <%s>" msgstr "" -#: config/tc-arm.c:7726 +#: config/tc-arm.c:7737 msgid "Warning: Use of the 'nv' conditional is deprecated\n" msgstr "" -#: config/tc-arm.c:7743 +#: config/tc-arm.c:7754 #, c-format msgid "Opcode `%s' is unconditional\n" msgstr "" -#: config/tc-arm.c:7767 +#: config/tc-arm.c:7778 #, c-format msgid "Opcode `%s' must have suffix from <%s>\n" msgstr "" -#: config/tc-arm.c:7858 +#: config/tc-arm.c:7869 #, c-format msgid "register '%s' does not exist\n" msgstr "" -#: config/tc-arm.c:7863 +#: config/tc-arm.c:7874 #, c-format msgid "ignoring redefinition of register alias '%s'" msgstr "" -#: config/tc-arm.c:7869 +#: config/tc-arm.c:7880 #, c-format msgid "" "ignoring redefinition of register alias '%s' to non-existant register '%s'" msgstr "" -#: config/tc-arm.c:7873 +#: config/tc-arm.c:7884 msgid "ignoring incomplete .req pseuso op" msgstr "" -#: config/tc-arm.c:7880 +#: config/tc-arm.c:7891 #, c-format msgid "bad instruction `%s'" msgstr "" -#: config/tc-arm.c:8055 +#: config/tc-arm.c:8066 #, c-format msgid "Unrecognised APCS switch -m%s" msgstr "" -#: config/tc-arm.c:8212 config/tc-arm.c:8225 config/tc-arm.c:8238 -#: config/tc-arm.c:8251 config/tc-arm.c:8257 +#: config/tc-arm.c:8223 config/tc-arm.c:8236 config/tc-arm.c:8249 +#: config/tc-arm.c:8262 config/tc-arm.c:8268 #, c-format msgid "Invalid architecture variant -m%s" msgstr "" -#: config/tc-arm.c:8264 +#: config/tc-arm.c:8275 #, c-format msgid "Invalid processor variant -m%s" msgstr "" -#: config/tc-arm.c:8287 +#: config/tc-arm.c:8298 msgid "" " ARM Specific Assembler Options:\n" " -m[arm][<processor name>] select processor variant\n" @@ -2034,7 +2032,7 @@ msgid "" " -k generate PIC code.\n" msgstr "" -#: config/tc-arm.c:8299 +#: config/tc-arm.c:8310 msgid "" " -mapcs-32, -mapcs-26 specify which ARM Procedure Calling Standard to " "use\n" @@ -2043,23 +2041,23 @@ msgid "" " -mapcs-reentrant the code is position independent/reentrant\n" msgstr "" -#: config/tc-arm.c:8306 +#: config/tc-arm.c:8317 msgid " -moabi support the old ELF ABI\n" msgstr "" -#: config/tc-arm.c:8310 +#: config/tc-arm.c:8321 msgid "" " -EB assemble code for a big endian cpu\n" " -EL assemble code for a little endian cpu\n" msgstr "" -#: config/tc-arm.c:8494 +#: config/tc-arm.c:8505 #, c-format msgid "%s: unexpected function type: %d" msgstr "" -#: config/tc-arm.c:8857 -msgid "alignments in code section > 32 not supported." +#: config/tc-arm.c:8871 +msgid "alignments greater than 32 bytes not supported in .text sections." msgstr "" #: config/tc-avr.c:185 @@ -2099,8 +2097,8 @@ msgid "redefinition of mcu type `%s' to `%s'" msgstr "" #: config/tc-avr.c:372 config/tc-d10v.c:314 config/tc-d30v.c:366 -#: config/tc-mips.c:8806 config/tc-mn10200.c:376 config/tc-pj.c:356 -#: config/tc-ppc.c:4519 config/tc-sh.c:2068 config/tc-v850.c:1291 +#: config/tc-mips.c:8836 config/tc-mn10200.c:376 config/tc-pj.c:356 +#: config/tc-ppc.c:4538 config/tc-sh.c:2070 config/tc-v850.c:1292 msgid "bad call to md_atof" msgstr "" @@ -2194,15 +2192,15 @@ msgid "only constant expression allowed" msgstr "" #: config/tc-avr.c:1060 config/tc-d10v.c:1496 config/tc-d30v.c:1807 -#: config/tc-mn10200.c:1255 config/tc-mn10300.c:1799 config/tc-ppc.c:5162 -#: config/tc-v850.c:2301 +#: config/tc-mn10200.c:1255 config/tc-mn10300.c:1800 config/tc-ppc.c:5180 +#: config/tc-v850.c:2296 #, c-format msgid "reloc %d not supported by object file format" msgstr "" #: config/tc-avr.c:1084 config/tc-d10v.c:1103 config/tc-d10v.c:1117 #: config/tc-h8300.c:1239 config/tc-h8500.c:1088 config/tc-mcore.c:988 -#: config/tc-pj.c:265 config/tc-sh.c:1650 config/tc-z8k.c:1205 +#: config/tc-pj.c:265 config/tc-sh.c:1650 config/tc-z8k.c:1183 msgid "can't find opcode " msgstr "" @@ -2447,7 +2445,7 @@ msgstr "" #: config/tc-d10v.c:531 config/tc-d30v.c:550 config/tc-mn10200.c:952 #: config/tc-mn10300.c:1334 config/tc-ppc.c:1972 config/tc-s390.c:1028 -#: config/tc-tic80.c:278 config/tc-v850.c:2073 +#: config/tc-tic80.c:278 config/tc-v850.c:2070 msgid "illegal operand" msgstr "" @@ -2516,7 +2514,7 @@ msgstr "" msgid "bad opcode or operands" msgstr "" -#: config/tc-d10v.c:1354 config/tc-m68k.c:4301 +#: config/tc-d10v.c:1354 config/tc-m68k.c:4303 msgid "value out of range" msgstr "" @@ -2679,16 +2677,17 @@ msgstr "" msgid " FR30 specific command line options:\n" msgstr "" -#: config/tc-fr30.c:143 +#: config/tc-fr30.c:143 config/tc-openrisc.c:151 #, c-format msgid "Instruction %s not allowed in a delay slot." msgstr "" -#: config/tc-fr30.c:381 config/tc-m32r.c:1557 +#: config/tc-fr30.c:383 config/tc-m32r.c:1558 msgid "Addend to unresolved symbol not on word boundary." msgstr "" -#: config/tc-fr30.c:539 config/tc-i960.c:773 config/tc-m32r.c:1866 +#: config/tc-fr30.c:541 config/tc-i960.c:773 config/tc-m32r.c:1867 +#: config/tc-openrisc.c:469 msgid "Bad call to md_atof()" msgstr "" @@ -2764,8 +2763,8 @@ msgstr "" msgid "invalid operands" msgstr "" -#: config/tc-h8300.c:1250 config/tc-h8500.c:1094 config/tc-mips.c:8001 -#: config/tc-sh.c:1887 config/tc-w65.c:734 config/tc-z8k.c:1215 +#: config/tc-h8300.c:1250 config/tc-h8500.c:1094 config/tc-mips.c:8030 +#: config/tc-sh.c:1887 config/tc-w65.c:734 config/tc-z8k.c:1193 msgid "unknown opcode" msgstr "" @@ -2773,25 +2772,25 @@ msgstr "" msgid "mismatch between opcode size and operand size" msgstr "" -#: config/tc-h8300.c:1307 config/tc-h8500.c:1121 config/tc-sh.c:2023 -#: config/tc-w65.c:764 config/tc-z8k.c:1268 +#: config/tc-h8300.c:1307 config/tc-h8500.c:1121 config/tc-sh.c:2025 +#: config/tc-w65.c:764 config/tc-z8k.c:1246 msgid "call to tc_crawl_symbol_chain \n" msgstr "" -#: config/tc-h8300.c:1321 config/tc-h8500.c:1135 config/tc-sh.c:2030 -#: config/tc-w65.c:778 config/tc-z8k.c:1282 +#: config/tc-h8300.c:1321 config/tc-h8500.c:1135 config/tc-sh.c:2032 +#: config/tc-w65.c:778 config/tc-z8k.c:1260 msgid "call to tc_headers_hook \n" msgstr "" -#: config/tc-h8300.c:1412 config/tc-h8500.c:1225 config/tc-z8k.c:1396 +#: config/tc-h8300.c:1412 config/tc-h8500.c:1225 config/tc-z8k.c:1374 msgid "call to tc_aout_fix_to_chars \n" msgstr "" -#: config/tc-h8300.c:1422 config/tc-z8k.c:1406 +#: config/tc-h8300.c:1422 config/tc-z8k.c:1384 msgid "call to md_convert_frag \n" msgstr "" -#: config/tc-h8300.c:1467 config/tc-z8k.c:1487 +#: config/tc-h8300.c:1467 config/tc-z8k.c:1465 msgid "call tomd_estimate_size_before_relax \n" msgstr "" @@ -2857,7 +2856,7 @@ msgstr "" #: config/tc-hppa.c:1403 config/tc-hppa.c:6895 config/tc-hppa.c:6901 #: config/tc-hppa.c:6907 config/tc-hppa.c:6913 config/tc-mn10300.c:926 -#: config/tc-mn10300.c:2103 +#: config/tc-mn10300.c:2162 msgid "could not set architecture and machine" msgstr "" @@ -3105,7 +3104,7 @@ msgstr "" msgid ".REG expression must be a register" msgstr "" -#: config/tc-hppa.c:6498 read.c:4736 +#: config/tc-hppa.c:6498 read.c:4748 msgid "bad or irreducible absolute expression; zero assumed" msgstr "" @@ -3289,11 +3288,11 @@ msgstr "" msgid "no such architecture modifier: `%s'" msgstr "" -#: config/tc-i386.c:823 config/tc-i386.c:4590 +#: config/tc-i386.c:823 config/tc-i386.c:4627 msgid "Unknown architecture" msgstr "" -#: config/tc-i386.c:858 config/tc-i386.c:881 config/tc-m68k.c:3816 +#: config/tc-i386.c:858 config/tc-i386.c:881 config/tc-m68k.c:3821 #, c-format msgid "Internal Error: Can't hash %s: %s" msgstr "" @@ -3302,7 +3301,7 @@ msgstr "" msgid "There are no unsigned pc-relative relocations" msgstr "" -#: config/tc-i386.c:1141 config/tc-i386.c:4746 +#: config/tc-i386.c:1141 config/tc-i386.c:4783 #, c-format msgid "can not do %d byte pc-relative relocation" msgstr "" @@ -3312,295 +3311,300 @@ msgstr "" msgid "can not do %s %d byte relocation" msgstr "" -#: config/tc-i386.c:1269 config/tc-i386.c:1362 +#: config/tc-i386.c:1265 config/tc-i386.c:1359 #, c-format msgid "no such instruction: `%s'" msgstr "" -#: config/tc-i386.c:1278 +#: config/tc-i386.c:1275 config/tc-i386.c:1391 #, c-format msgid "invalid character %s in mnemonic" msgstr "" -#: config/tc-i386.c:1285 +#: config/tc-i386.c:1282 msgid "expecting prefix; got nothing" msgstr "" -#: config/tc-i386.c:1287 +#: config/tc-i386.c:1284 msgid "expecting mnemonic; got nothing" msgstr "" -#: config/tc-i386.c:1305 +#: config/tc-i386.c:1302 #, c-format msgid "redundant %s prefix" msgstr "" -#: config/tc-i386.c:1373 +#: config/tc-i386.c:1402 #, c-format msgid "`%s' is not supported on `%s'" msgstr "" -#: config/tc-i386.c:1378 +#: config/tc-i386.c:1407 msgid "use .code16 to ensure correct addressing mode" msgstr "" -#: config/tc-i386.c:1386 +#: config/tc-i386.c:1415 #, c-format msgid "expecting string instruction after `%s'" msgstr "" -#: config/tc-i386.c:1407 +#: config/tc-i386.c:1436 #, c-format msgid "invalid character %s before operand %d" msgstr "" -#: config/tc-i386.c:1421 +#: config/tc-i386.c:1450 #, c-format msgid "unbalanced parenthesis in operand %d." msgstr "" -#: config/tc-i386.c:1424 +#: config/tc-i386.c:1453 #, c-format msgid "unbalanced brackets in operand %d." msgstr "" -#: config/tc-i386.c:1433 +#: config/tc-i386.c:1462 #, c-format msgid "invalid character %s in operand %d" msgstr "" -#: config/tc-i386.c:1460 +#: config/tc-i386.c:1489 #, c-format msgid "spurious operands; (%d operands/instruction max)" msgstr "" -#: config/tc-i386.c:1483 +#: config/tc-i386.c:1512 msgid "expecting operand after ','; got nothing" msgstr "" -#: config/tc-i386.c:1488 +#: config/tc-i386.c:1517 msgid "expecting operand before ','; got nothing" msgstr "" #. We found no match. -#: config/tc-i386.c:1832 +#: config/tc-i386.c:1861 #, c-format msgid "suffix or operands invalid for `%s'" msgstr "" -#: config/tc-i386.c:1843 +#: config/tc-i386.c:1872 #, c-format msgid "indirect %s without `*'" msgstr "" #. Warn them that a data or address size prefix doesn't #. affect assembly of the next line of code. -#: config/tc-i386.c:1851 +#: config/tc-i386.c:1880 #, c-format msgid "stand-alone `%s' prefix" msgstr "" -#: config/tc-i386.c:1887 config/tc-i386.c:1902 +#: config/tc-i386.c:1916 config/tc-i386.c:1931 msgid "`%s' operand %d must use `%%es' segment" msgstr "" -#: config/tc-i386.c:1917 +#: config/tc-i386.c:1946 msgid "Extended register `%%%s' available only in 64bit mode." msgstr "" #. Prohibit these changes in the 64bit mode, since #. the lowering is more complicated. -#: config/tc-i386.c:1988 config/tc-i386.c:2042 config/tc-i386.c:2057 -#: config/tc-i386.c:2085 config/tc-i386.c:2113 +#: config/tc-i386.c:2017 config/tc-i386.c:2071 config/tc-i386.c:2086 +#: config/tc-i386.c:2114 config/tc-i386.c:2142 msgid "Incorrect register `%%%s' used with`%c' suffix" msgstr "" -#: config/tc-i386.c:1994 config/tc-i386.c:2047 config/tc-i386.c:2118 +#: config/tc-i386.c:2023 config/tc-i386.c:2076 config/tc-i386.c:2147 msgid "using `%%%s' instead of `%%%s' due to `%c' suffix" msgstr "" -#: config/tc-i386.c:2010 config/tc-i386.c:2028 config/tc-i386.c:2072 -#: config/tc-i386.c:2099 +#: config/tc-i386.c:2039 config/tc-i386.c:2057 config/tc-i386.c:2101 +#: config/tc-i386.c:2128 msgid "`%%%s' not allowed with `%s%c'" msgstr "" -#: config/tc-i386.c:2159 +#: config/tc-i386.c:2188 msgid "no instruction mnemonic suffix given; can't determine immediate size" msgstr "" -#: config/tc-i386.c:2185 +#: config/tc-i386.c:2214 #, c-format msgid "" "no instruction mnemonic suffix given; can't determine immediate size %x %c" msgstr "" -#: config/tc-i386.c:2210 +#: config/tc-i386.c:2239 msgid "" "no instruction mnemonic suffix given and no register operands; can't size " "instruction" msgstr "" -#: config/tc-i386.c:2258 +#: config/tc-i386.c:2287 msgid "64bit operations available only in 64bit modes." msgstr "" #. Reversed arguments on faddp, fsubp, etc. -#: config/tc-i386.c:2326 +#: config/tc-i386.c:2355 msgid "translating to `%s %%%s,%%%s'" msgstr "" #. Extraneous `l' suffix on fp insn. -#: config/tc-i386.c:2333 +#: config/tc-i386.c:2362 msgid "translating to `%s %%%s'" msgstr "" -#: config/tc-i386.c:2606 +#: config/tc-i386.c:2635 msgid "you can't `pop %%cs'" msgstr "" #. UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc. -#: config/tc-i386.c:2639 +#: config/tc-i386.c:2668 #, c-format msgid "translating to `%sp'" msgstr "" -#: config/tc-i386.c:2682 +#: config/tc-i386.c:2711 msgid "" "Can't encode registers '%%%s' in the instruction requiring REX prefix.\n" msgstr "" -#: config/tc-i386.c:2729 config/tc-i386.c:2803 config/tc-i386.c:2850 +#: config/tc-i386.c:2770 config/tc-i386.c:2850 config/tc-i386.c:2886 msgid "skipping prefixes on this instruction" msgstr "" -#: config/tc-i386.c:2871 +#: config/tc-i386.c:2906 msgid "16-bit jump out of range" msgstr "" -#: config/tc-i386.c:2880 +#: config/tc-i386.c:2915 #, c-format msgid "can't handle non absolute segment in `%s'" msgstr "" -#: config/tc-i386.c:3184 +#: config/tc-i386.c:3208 #, c-format msgid "@%s reloc is not supported in %s bit mode" msgstr "" -#: config/tc-i386.c:3260 +#: config/tc-i386.c:3284 msgid "only 1 or 2 immediate operands are allowed" msgstr "" -#: config/tc-i386.c:3283 config/tc-i386.c:3491 +#: config/tc-i386.c:3307 config/tc-i386.c:3495 #, c-format msgid "junk `%s' after expression" msgstr "" #. Missing or bad expr becomes absolute 0. -#: config/tc-i386.c:3294 +#: config/tc-i386.c:3318 #, c-format msgid "missing or invalid immediate expression `%s' taken as 0" msgstr "" -#: config/tc-i386.c:3325 config/tc-i386.c:3524 +#: config/tc-i386.c:3349 config/tc-i386.c:3556 #, c-format msgid "unimplemented segment %s in operand" msgstr "" -#: config/tc-i386.c:3327 config/tc-i386.c:3526 +#: config/tc-i386.c:3351 config/tc-i386.c:3558 #, c-format msgid "unimplemented segment type %d in operand" msgstr "" -#: config/tc-i386.c:3371 config/tc-i386.c:5505 +#: config/tc-i386.c:3395 config/tc-i386.c:5542 #, c-format msgid "expecting scale factor of 1, 2, 4, or 8: got `%s'" msgstr "" -#: config/tc-i386.c:3378 +#: config/tc-i386.c:3402 #, c-format msgid "scale factor of %d without an index register" msgstr "" +#: config/tc-i386.c:3515 +#, c-format +msgid "bad expression used with @%s" +msgstr "" + #. Missing or bad expr becomes absolute 0. -#: config/tc-i386.c:3505 +#: config/tc-i386.c:3537 #, c-format msgid "missing or invalid displacement expression `%s' taken as 0" msgstr "" -#: config/tc-i386.c:3611 +#: config/tc-i386.c:3643 #, c-format msgid "`%s' is not a valid base/index expression" msgstr "" -#: config/tc-i386.c:3615 +#: config/tc-i386.c:3647 #, c-format msgid "`%s' is not a valid %s bit base/index expression" msgstr "" -#: config/tc-i386.c:3690 +#: config/tc-i386.c:3722 #, c-format msgid "bad memory operand `%s'" msgstr "" -#: config/tc-i386.c:3705 +#: config/tc-i386.c:3737 #, c-format msgid "junk `%s' after register" msgstr "" -#: config/tc-i386.c:3714 config/tc-i386.c:3829 config/tc-i386.c:3867 +#: config/tc-i386.c:3746 config/tc-i386.c:3861 config/tc-i386.c:3899 #, c-format msgid "bad register name `%s'" msgstr "" -#: config/tc-i386.c:3722 +#: config/tc-i386.c:3754 msgid "immediate operand illegal with absolute jump" msgstr "" -#: config/tc-i386.c:3744 +#: config/tc-i386.c:3776 #, c-format msgid "too many memory references for `%s'" msgstr "" -#: config/tc-i386.c:3822 +#: config/tc-i386.c:3854 #, c-format msgid "expecting `,' or `)' after index register in `%s'" msgstr "" -#: config/tc-i386.c:3846 +#: config/tc-i386.c:3878 #, c-format msgid "expecting `)' after scale factor in `%s'" msgstr "" -#: config/tc-i386.c:3853 +#: config/tc-i386.c:3885 #, c-format msgid "expecting index register or scale factor after `,'; got '%c'" msgstr "" -#: config/tc-i386.c:3860 +#: config/tc-i386.c:3892 #, c-format msgid "expecting `,' or `)' after base register in `%s'" msgstr "" #. It's not a memory operand; argh! -#: config/tc-i386.c:3901 +#: config/tc-i386.c:3933 #, c-format msgid "invalid char %s beginning operand %d `%s'" msgstr "" -#: config/tc-i386.c:4080 +#: config/tc-i386.c:4117 msgid "long jump required" msgstr "" -#: config/tc-i386.c:4386 +#: config/tc-i386.c:4423 msgid "Bad call to md_atof ()" msgstr "" -#: config/tc-i386.c:4543 +#: config/tc-i386.c:4580 msgid "No compiled in support for x86_64" msgstr "" -#: config/tc-i386.c:4564 +#: config/tc-i386.c:4601 msgid "" " -Q ignored\n" " -V print assembler version number\n" @@ -3609,63 +3613,63 @@ msgid "" " -s ignored\n" msgstr "" -#: config/tc-i386.c:4571 +#: config/tc-i386.c:4608 msgid " -q quieten some warnings\n" msgstr "" -#: config/tc-i386.c:4630 config/tc-s390.c:1561 +#: config/tc-i386.c:4667 config/tc-s390.c:1561 msgid "GOT already in symbol table" msgstr "" -#: config/tc-i386.c:4760 +#: config/tc-i386.c:4797 #, c-format msgid "can not do %d byte relocation" msgstr "" -#: config/tc-i386.c:4811 config/tc-s390.c:1888 +#: config/tc-i386.c:4848 config/tc-s390.c:1888 #, c-format msgid "cannot represent relocation type %s" msgstr "" -#: config/tc-i386.c:5107 +#: config/tc-i386.c:5144 #, c-format msgid "too many memory references for '%s'" msgstr "" -#: config/tc-i386.c:5270 +#: config/tc-i386.c:5307 #, c-format msgid "Unknown operand modifier `%s'\n" msgstr "" -#: config/tc-i386.c:5477 +#: config/tc-i386.c:5514 #, c-format msgid "`%s' is not a valid segment register" msgstr "" -#: config/tc-i386.c:5487 config/tc-i386.c:5608 +#: config/tc-i386.c:5524 config/tc-i386.c:5645 msgid "Register scaling only allowed in memory operands." msgstr "" -#: config/tc-i386.c:5518 +#: config/tc-i386.c:5555 msgid "Too many register references in memory operand.\n" msgstr "" -#: config/tc-i386.c:5587 +#: config/tc-i386.c:5624 #, c-format msgid "Syntax error. Expecting a constant. Got `%s'.\n" msgstr "" -#: config/tc-i386.c:5657 +#: config/tc-i386.c:5694 #, c-format msgid "Unrecognized token '%s'" msgstr "" -#: config/tc-i386.c:5674 +#: config/tc-i386.c:5711 #, c-format msgid "Unexpected token `%s'\n" msgstr "" -#: config/tc-i386.c:5818 +#: config/tc-i386.c:5855 #, c-format msgid "Unrecognized token `%s'\n" msgstr "" @@ -3674,7 +3678,7 @@ msgstr "" msgid "Unknown temporary pseudo register" msgstr "" -#: config/tc-i860.c:181 config/tc-mips.c:1028 +#: config/tc-i860.c:181 config/tc-mips.c:1036 #, c-format msgid "internal error: can't hash `%s': %s\n" msgstr "" @@ -3936,95 +3940,95 @@ msgstr "" msgid "callj to difference of two symbols" msgstr "" -#: config/tc-ia64.c:998 +#: config/tc-ia64.c:1020 msgid "Unwind directive not followed by an instruction." msgstr "" -#: config/tc-ia64.c:4272 +#: config/tc-ia64.c:4297 msgid "Register name expected" msgstr "" -#: config/tc-ia64.c:4277 config/tc-ia64.c:4563 +#: config/tc-ia64.c:4302 config/tc-ia64.c:4588 msgid "Comma expected" msgstr "" -#: config/tc-ia64.c:4285 +#: config/tc-ia64.c:4310 msgid "Register value annotation ignored" msgstr "" -#: config/tc-ia64.c:4309 +#: config/tc-ia64.c:4334 msgid "Directive invalid within a bundle" msgstr "" -#: config/tc-ia64.c:4376 +#: config/tc-ia64.c:4401 msgid "Missing predicate relation type" msgstr "" -#: config/tc-ia64.c:4392 +#: config/tc-ia64.c:4417 msgid "Unrecognized predicate relation type" msgstr "" -#: config/tc-ia64.c:4412 config/tc-ia64.c:4437 +#: config/tc-ia64.c:4437 config/tc-ia64.c:4462 msgid "Predicate register expected" msgstr "" -#: config/tc-ia64.c:4424 +#: config/tc-ia64.c:4449 msgid "Duplicate predicate register ignored" msgstr "" -#: config/tc-ia64.c:4446 +#: config/tc-ia64.c:4471 msgid "Bad register range" msgstr "" -#: config/tc-ia64.c:4474 +#: config/tc-ia64.c:4499 msgid "Predicate source and target required" msgstr "" -#: config/tc-ia64.c:4476 config/tc-ia64.c:4488 +#: config/tc-ia64.c:4501 config/tc-ia64.c:4513 msgid "Use of p0 is not valid in this context" msgstr "" -#: config/tc-ia64.c:4483 +#: config/tc-ia64.c:4508 msgid "At least two PR arguments expected" msgstr "" -#: config/tc-ia64.c:4497 +#: config/tc-ia64.c:4522 msgid "At least one PR argument expected" msgstr "" -#: config/tc-ia64.c:4533 +#: config/tc-ia64.c:4558 #, c-format msgid "Inserting \"%s\" into entry hint table failed: %s" msgstr "" #. FIXME -- need 62-bit relocation type -#: config/tc-ia64.c:4990 +#: config/tc-ia64.c:5015 msgid "62-bit relocation not yet implemented" msgstr "" #. XXX technically, this is wrong: we should not be issuing warning #. messages until we're sure this instruction pattern is going to #. be used! -#: config/tc-ia64.c:5063 +#: config/tc-ia64.c:5088 msgid "lower 16 bits of mask ignored" msgstr "" -#: config/tc-ia64.c:5618 +#: config/tc-ia64.c:5643 msgid "Value truncated to 62 bits" msgstr "" -#: config/tc-ia64.c:5969 +#: config/tc-ia64.c:5994 msgid "" "Additional NOP may be necessary to workaround Itanium processor A/B step " "errata" msgstr "" -#: config/tc-ia64.c:6152 +#: config/tc-ia64.c:6177 #, c-format msgid "Unrecognized option '-x%s'" msgstr "" -#: config/tc-ia64.c:6180 +#: config/tc-ia64.c:6205 msgid "" "IA-64 options:\n" " -milp32|-milp64|-mlp64|-mp64\tselect data model (default -mlp64)\n" @@ -4034,28 +4038,28 @@ msgid "" " -xdebug\t\t debug dependency violation checker\n" msgstr "" -#: config/tc-ia64.c:6450 config/tc-mips.c:1015 +#: config/tc-ia64.c:6475 config/tc-mips.c:1023 msgid "Could not set architecture and machine" msgstr "" -#: config/tc-ia64.c:6542 +#: config/tc-ia64.c:6567 msgid "Explicit stops are ignored in auto mode" msgstr "" -#: config/tc-ia64.c:6592 +#: config/tc-ia64.c:6617 msgid "Found '{' after explicit switch to automatic mode" msgstr "" -#: config/tc-ia64.c:8305 +#: config/tc-ia64.c:8330 #, c-format msgid "Unrecognized dependency specifier %d\n" msgstr "" -#: config/tc-ia64.c:9096 +#: config/tc-ia64.c:9121 msgid "Only the first path encountering the conflict is reported" msgstr "" -#: config/tc-ia64.c:9099 +#: config/tc-ia64.c:9124 msgid "This is the location of the conflicting usage" msgstr "" @@ -4190,7 +4194,7 @@ msgid "" "is this intentional ?" msgstr "" -#: config/tc-m32r.c:1251 config/tc-ppc.c:1459 config/tc-ppc.c:3681 read.c:1358 +#: config/tc-m32r.c:1251 config/tc-ppc.c:1459 config/tc-ppc.c:3701 read.c:1358 msgid "Expected comma after symbol-name: rest of line ignored." msgstr "" @@ -4200,11 +4204,11 @@ msgid ".SCOMMon length (%ld.) <0! Ignored." msgstr "" #: config/tc-m32r.c:1275 config/tc-ppc.c:1481 config/tc-ppc.c:2392 -#: config/tc-ppc.c:3705 +#: config/tc-ppc.c:3725 msgid "ignoring bad alignment" msgstr "" -#: config/tc-m32r.c:1302 config/tc-ppc.c:1492 config/tc-ppc.c:3717 read.c:1382 +#: config/tc-m32r.c:1302 config/tc-ppc.c:1492 config/tc-ppc.c:3737 read.c:1382 #: read.c:2108 #, c-format msgid "Ignoring attempt to re-define symbol `%s'." @@ -4215,11 +4219,11 @@ msgstr "" msgid "Length of .scomm \"%s\" is already %ld. Not changed to %ld." msgstr "" -#: config/tc-m32r.c:1788 +#: config/tc-m32r.c:1789 msgid "Unmatched high/shigh reloc" msgstr "" -#: config/tc-m68hc11.c:311 +#: config/tc-m68hc11.c:313 #, c-format msgid "" "Motorola 68HC11/68HC12 options:\n" @@ -4235,55 +4239,55 @@ msgid "" " (used for testing)\n" msgstr "" -#: config/tc-m68hc11.c:352 +#: config/tc-m68hc11.c:354 #, c-format msgid "Default target `%s' is not supported." msgstr "" #. Dump the opcode statistics table. -#: config/tc-m68hc11.c:371 +#: config/tc-m68hc11.c:373 msgid "Name # Modes Min ops Max ops Modes mask # Used\n" msgstr "" -#: config/tc-m68hc11.c:421 +#: config/tc-m68hc11.c:423 #, c-format msgid "Option `%s' is not recognized." msgstr "" -#: config/tc-m68hc11.c:642 +#: config/tc-m68hc11.c:644 msgid "#<imm8>" msgstr "" -#: config/tc-m68hc11.c:651 +#: config/tc-m68hc11.c:653 msgid "#<imm16>" msgstr "" -#: config/tc-m68hc11.c:660 config/tc-m68hc11.c:669 +#: config/tc-m68hc11.c:662 config/tc-m68hc11.c:671 msgid "<imm8>,X" msgstr "" -#: config/tc-m68hc11.c:687 +#: config/tc-m68hc11.c:689 msgid "*<abs8>" msgstr "" -#: config/tc-m68hc11.c:699 +#: config/tc-m68hc11.c:701 msgid "#<mask>" msgstr "" -#: config/tc-m68hc11.c:709 +#: config/tc-m68hc11.c:711 #, c-format msgid "symbol%d" msgstr "" -#: config/tc-m68hc11.c:711 +#: config/tc-m68hc11.c:713 msgid "<abs>" msgstr "" -#: config/tc-m68hc11.c:730 +#: config/tc-m68hc11.c:732 msgid "<label>" msgstr "" -#: config/tc-m68hc11.c:746 +#: config/tc-m68hc11.c:748 #, c-format msgid "" "# Example of `%s' instructions\n" @@ -4291,243 +4295,243 @@ msgid "" "_start:\n" msgstr "" -#: config/tc-m68hc11.c:794 +#: config/tc-m68hc11.c:796 #, c-format msgid "Instruction `%s' is not recognized." msgstr "" -#: config/tc-m68hc11.c:799 +#: config/tc-m68hc11.c:801 #, c-format msgid "Instruction formats for `%s':" msgstr "" -#: config/tc-m68hc11.c:932 +#: config/tc-m68hc11.c:934 #, c-format msgid "Immediate operand is not allowed for operand %d." msgstr "" -#: config/tc-m68hc11.c:958 +#: config/tc-m68hc11.c:960 msgid "Indirect indexed addressing is not valid for 68HC11." msgstr "" -#: config/tc-m68hc11.c:978 +#: config/tc-m68hc11.c:980 msgid "Spurious `,' or bad indirect register addressing mode." msgstr "" -#: config/tc-m68hc11.c:994 +#: config/tc-m68hc11.c:996 msgid "Missing second register or offset for indexed-indirect mode." msgstr "" -#: config/tc-m68hc11.c:1004 +#: config/tc-m68hc11.c:1006 msgid "Missing second register for indexed-indirect mode." msgstr "" -#: config/tc-m68hc11.c:1020 +#: config/tc-m68hc11.c:1022 msgid "Missing `]' to close indexed-indirect mode." msgstr "" -#: config/tc-m68hc11.c:1064 +#: config/tc-m68hc11.c:1066 msgid "Illegal operand." msgstr "" -#: config/tc-m68hc11.c:1069 +#: config/tc-m68hc11.c:1071 msgid "Missing operand." msgstr "" -#: config/tc-m68hc11.c:1121 +#: config/tc-m68hc11.c:1123 msgid "Pre-increment mode is not valid for 68HC11" msgstr "" -#: config/tc-m68hc11.c:1134 +#: config/tc-m68hc11.c:1136 msgid "Wrong register in register indirect mode." msgstr "" -#: config/tc-m68hc11.c:1142 +#: config/tc-m68hc11.c:1144 msgid "Missing `]' to close register indirect operand." msgstr "" -#: config/tc-m68hc11.c:1159 +#: config/tc-m68hc11.c:1161 msgid "Post-decrement mode is not valid for 68HC11." msgstr "" -#: config/tc-m68hc11.c:1167 +#: config/tc-m68hc11.c:1169 msgid "Post-increment mode is not valid for 68HC11." msgstr "" -#: config/tc-m68hc11.c:1184 +#: config/tc-m68hc11.c:1186 msgid "Invalid indexed indirect mode." msgstr "" -#: config/tc-m68hc11.c:1278 +#: config/tc-m68hc11.c:1280 #, c-format msgid "Trap id `%ld' is out of range." msgstr "" -#: config/tc-m68hc11.c:1282 +#: config/tc-m68hc11.c:1284 msgid "Trap id must be within [0x30..0x39] or [0x40..0xff]." msgstr "" -#: config/tc-m68hc11.c:1289 +#: config/tc-m68hc11.c:1291 #, c-format msgid "Operand out of 8-bit range: `%ld'." msgstr "" -#: config/tc-m68hc11.c:1296 +#: config/tc-m68hc11.c:1298 msgid "The trap id must be a constant." msgstr "" -#: config/tc-m68hc11.c:1321 +#: config/tc-m68hc11.c:1323 #, c-format msgid "Operand `%x' not recognized in fixup8." msgstr "" -#: config/tc-m68hc11.c:1341 +#: config/tc-m68hc11.c:1343 #, c-format msgid "Operand out of 16-bit range: `%ld'." msgstr "" -#: config/tc-m68hc11.c:1362 +#: config/tc-m68hc11.c:1364 #, c-format msgid "Operand `%x' not recognized in fixup16." msgstr "" -#: config/tc-m68hc11.c:1380 +#: config/tc-m68hc11.c:1382 #, c-format msgid "Unexpected branch conversion with `%x'" msgstr "" -#: config/tc-m68hc11.c:1467 config/tc-m68hc11.c:1594 +#: config/tc-m68hc11.c:1469 config/tc-m68hc11.c:1596 #, c-format msgid "Operand out of range for a relative branch: `%ld'" msgstr "" -#: config/tc-m68hc11.c:1562 +#: config/tc-m68hc11.c:1564 msgid "Invalid register for dbcc/tbcc instruction." msgstr "" -#: config/tc-m68hc11.c:1653 +#: config/tc-m68hc11.c:1655 #, c-format msgid "Increment/decrement value is out of range: `%ld'." msgstr "" -#: config/tc-m68hc11.c:1664 +#: config/tc-m68hc11.c:1666 msgid "Expecting a register." msgstr "" -#: config/tc-m68hc11.c:1679 +#: config/tc-m68hc11.c:1681 msgid "Invalid register for post/pre increment." msgstr "" -#: config/tc-m68hc11.c:1709 +#: config/tc-m68hc11.c:1711 msgid "Invalid register." msgstr "" -#: config/tc-m68hc11.c:1716 +#: config/tc-m68hc11.c:1718 #, c-format msgid "Offset out of 16-bit range: %ld." msgstr "" -#: config/tc-m68hc11.c:1721 +#: config/tc-m68hc11.c:1723 #, c-format msgid "Offset out of 5-bit range for movw/movb insn: %ld." msgstr "" -#: config/tc-m68hc11.c:1787 +#: config/tc-m68hc11.c:1789 msgid "Expecting register D for indexed indirect mode." msgstr "" -#: config/tc-m68hc11.c:1789 +#: config/tc-m68hc11.c:1791 msgid "Indexed indirect mode is not allowed for movb/movw." msgstr "" -#: config/tc-m68hc11.c:1806 +#: config/tc-m68hc11.c:1808 msgid "Invalid accumulator register." msgstr "" -#: config/tc-m68hc11.c:1831 +#: config/tc-m68hc11.c:1833 msgid "Invalid indexed register." msgstr "" -#: config/tc-m68hc11.c:1839 +#: config/tc-m68hc11.c:1841 msgid "Addressing mode not implemented yet." msgstr "" -#: config/tc-m68hc11.c:1854 +#: config/tc-m68hc11.c:1856 msgid "Invalid source register for this instruction, use 'tfr'." msgstr "" -#: config/tc-m68hc11.c:1856 +#: config/tc-m68hc11.c:1858 msgid "Invalid source register." msgstr "" -#: config/tc-m68hc11.c:1861 +#: config/tc-m68hc11.c:1863 msgid "Invalid destination register for this instruction, use 'tfr'." msgstr "" -#: config/tc-m68hc11.c:1863 +#: config/tc-m68hc11.c:1865 msgid "Invalid destination register." msgstr "" -#: config/tc-m68hc11.c:1948 +#: config/tc-m68hc11.c:1950 msgid "Invalid indexed register, expecting register X." msgstr "" -#: config/tc-m68hc11.c:1950 +#: config/tc-m68hc11.c:1952 msgid "Invalid indexed register, expecting register Y." msgstr "" -#: config/tc-m68hc11.c:2242 +#: config/tc-m68hc11.c:2244 msgid "No instruction or missing opcode." msgstr "" -#: config/tc-m68hc11.c:2307 +#: config/tc-m68hc11.c:2309 #, c-format msgid "Opcode `%s' is not recognized." msgstr "" -#: config/tc-m68hc11.c:2329 +#: config/tc-m68hc11.c:2331 #, c-format msgid "Garbage at end of instruction: `%s'." msgstr "" -#: config/tc-m68hc11.c:2352 +#: config/tc-m68hc11.c:2354 #, c-format msgid "Invalid operand for `%s'" msgstr "" -#: config/tc-m68hc11.c:2409 +#: config/tc-m68hc11.c:2411 #, c-format msgid "Relocation %d is not supported by object file format." msgstr "" -#: config/tc-m68hc11.c:2590 +#: config/tc-m68hc11.c:2591 msgid "bra or bsr with undefined symbol." msgstr "" -#: config/tc-m68hc11.c:2701 +#: config/tc-m68hc11.c:2661 config/tc-m68hc11.c:2711 #, c-format msgid "Subtype %d is not recognized." msgstr "" -#: config/tc-m68hc11.c:2738 +#: config/tc-m68hc11.c:2748 msgid "Expression too complex." msgstr "" -#: config/tc-m68hc11.c:2767 +#: config/tc-m68hc11.c:2777 msgid "Value out of 16-bit range." msgstr "" -#: config/tc-m68hc11.c:2790 +#: config/tc-m68hc11.c:2800 #, c-format msgid "Value %ld too large for 8-bit PC-relative branch." msgstr "" -#: config/tc-m68hc11.c:2797 +#: config/tc-m68hc11.c:2807 #, c-format msgid "Auto increment/decrement offset '%ld' is out of range." msgstr "" -#: config/tc-m68hc11.c:2808 +#: config/tc-m68hc11.c:2818 #, c-format msgid "Line %d: unknown relocation type: 0x%x." msgstr "" @@ -4536,356 +4540,362 @@ msgstr "" msgid "Unknown PC relative instruction" msgstr "" -#: config/tc-m68k.c:810 +#: config/tc-m68k.c:823 #, c-format msgid "Can not do %d byte pc-relative relocation" msgstr "" -#: config/tc-m68k.c:812 +#: config/tc-m68k.c:825 #, c-format msgid "Can not do %d byte pc-relative pic relocation" msgstr "" -#: config/tc-m68k.c:817 +#: config/tc-m68k.c:830 #, c-format msgid "Can not do %d byte relocation" msgstr "" -#: config/tc-m68k.c:819 +#: config/tc-m68k.c:832 #, c-format msgid "Can not do %d byte pic relocation" msgstr "" -#: config/tc-m68k.c:889 +#: config/tc-m68k.c:903 #, c-format msgid "Unable to produce reloc against symbol '%s'" msgstr "" -#: config/tc-m68k.c:933 config/tc-mips.c:11263 +#: config/tc-m68k.c:947 config/tc-mips.c:11296 #, c-format msgid "Cannot make %s relocation PC relative" msgstr "" -#: config/tc-m68k.c:1046 config/tc-tahoe.c:1519 config/tc-vax.c:1766 +#: config/tc-m68k.c:1040 config/tc-tahoe.c:1493 config/tc-vax.c:1756 msgid "No operator" msgstr "" -#: config/tc-m68k.c:1076 config/tc-tahoe.c:1536 config/tc-vax.c:1783 +#: config/tc-m68k.c:1070 config/tc-tahoe.c:1510 config/tc-vax.c:1773 msgid "Unknown operator" msgstr "" -#: config/tc-m68k.c:1851 +#: config/tc-m68k.c:1845 msgid "invalid instruction for this architecture; needs " msgstr "" -#: config/tc-m68k.c:1856 +#: config/tc-m68k.c:1850 msgid "fpu (68040, 68060 or 68881/68882)" msgstr "" -#: config/tc-m68k.c:1859 +#: config/tc-m68k.c:1853 msgid "mmu (68030 or 68851)" msgstr "" -#: config/tc-m68k.c:1862 +#: config/tc-m68k.c:1856 msgid "68020 or higher" msgstr "" -#: config/tc-m68k.c:1865 +#: config/tc-m68k.c:1859 msgid "68000 or higher" msgstr "" -#: config/tc-m68k.c:1868 +#: config/tc-m68k.c:1862 msgid "68010 or higher" msgstr "" -#: config/tc-m68k.c:1897 +#: config/tc-m68k.c:1891 msgid "operands mismatch" msgstr "" -#: config/tc-m68k.c:1954 config/tc-m68k.c:1960 config/tc-m68k.c:1966 +#: config/tc-m68k.c:1948 config/tc-m68k.c:1954 config/tc-m68k.c:1960 msgid "operand out of range" msgstr "" -#: config/tc-m68k.c:2023 +#: config/tc-m68k.c:2017 #, c-format msgid "Bignum too big for %c format; truncated" msgstr "" -#: config/tc-m68k.c:2091 +#: config/tc-m68k.c:2085 msgid "displacement too large for this architecture; needs 68020 or higher" msgstr "" -#: config/tc-m68k.c:2201 +#: config/tc-m68k.c:2195 msgid "" "scale factor invalid on this architecture; needs cpu32 or 68020 or higher" msgstr "" -#: config/tc-m68k.c:2206 +#: config/tc-m68k.c:2200 msgid "invalid index size for coldfire" msgstr "" -#: config/tc-m68k.c:2259 +#: config/tc-m68k.c:2253 msgid "Forcing byte displacement" msgstr "" -#: config/tc-m68k.c:2261 +#: config/tc-m68k.c:2255 msgid "byte displacement out of range" msgstr "" -#: config/tc-m68k.c:2308 config/tc-m68k.c:2346 +#: config/tc-m68k.c:2302 config/tc-m68k.c:2340 msgid "invalid operand mode for this architecture; needs 68020 or higher" msgstr "" -#: config/tc-m68k.c:2332 config/tc-m68k.c:2366 +#: config/tc-m68k.c:2326 config/tc-m68k.c:2360 msgid ":b not permitted; defaulting to :w" msgstr "" -#: config/tc-m68k.c:2443 +#: config/tc-m68k.c:2437 msgid "unsupported byte value; use a different suffix" msgstr "" -#: config/tc-m68k.c:2457 +#: config/tc-m68k.c:2451 msgid "unknown/incorrect operand" msgstr "" -#: config/tc-m68k.c:2490 config/tc-m68k.c:2498 config/tc-m68k.c:2505 -#: config/tc-m68k.c:2512 +#: config/tc-m68k.c:2484 config/tc-m68k.c:2492 config/tc-m68k.c:2499 +#: config/tc-m68k.c:2506 msgid "out of range" msgstr "" -#: config/tc-m68k.c:2562 +#: config/tc-m68k.c:2552 msgid "Can't use long branches on 68000/68010/5200" msgstr "" -#: config/tc-m68k.c:2672 +#: config/tc-m68k.c:2662 msgid "Expression out of range, using 0" msgstr "" -#: config/tc-m68k.c:2784 config/tc-m68k.c:2800 +#: config/tc-m68k.c:2774 config/tc-m68k.c:2790 msgid "Floating point register in register list" msgstr "" -#: config/tc-m68k.c:2790 +#: config/tc-m68k.c:2780 msgid "Wrong register in floating-point reglist" msgstr "" -#: config/tc-m68k.c:2806 +#: config/tc-m68k.c:2796 msgid "incorrect register in reglist" msgstr "" -#: config/tc-m68k.c:2812 +#: config/tc-m68k.c:2802 msgid "wrong register in floating-point reglist" msgstr "" -#: config/tc-m68k.c:2888 +#: config/tc-m68k.c:2878 msgid "failed sanity check" msgstr "" #. ERROR -#: config/tc-m68k.c:3253 +#: config/tc-m68k.c:3243 msgid "Extra )" msgstr "" #. ERROR -#: config/tc-m68k.c:3264 +#: config/tc-m68k.c:3254 msgid "Missing )" msgstr "" -#: config/tc-m68k.c:3281 +#: config/tc-m68k.c:3271 msgid "Missing operand" msgstr "" -#: config/tc-m68k.c:3613 +#: config/tc-m68k.c:3603 #, c-format msgid "%s -- statement `%s' ignored" msgstr "" -#: config/tc-m68k.c:3657 +#: config/tc-m68k.c:3647 #, c-format msgid "Don't know how to figure width of %c in md_assemble()" msgstr "" -#: config/tc-m68k.c:3825 config/tc-m68k.c:3863 +#: config/tc-m68k.c:3830 config/tc-m68k.c:3868 #, c-format msgid "Internal Error: Can't find %s in hash table" msgstr "" -#: config/tc-m68k.c:3828 config/tc-m68k.c:3866 +#: config/tc-m68k.c:3833 config/tc-m68k.c:3871 #, c-format msgid "Internal Error: Can't hash %s: %s" msgstr "" -#: config/tc-m68k.c:3995 +#: config/tc-m68k.c:4000 #, c-format msgid "unrecognized default cpu `%s' ???" msgstr "" -#: config/tc-m68k.c:4007 +#: config/tc-m68k.c:4012 msgid "68040 and 68851 specified; mmu instructions may assemble incorrectly" msgstr "" -#: config/tc-m68k.c:4027 +#: config/tc-m68k.c:4032 msgid "options for 68881 and no-68881 both given" msgstr "" -#: config/tc-m68k.c:4029 +#: config/tc-m68k.c:4034 msgid "options for 68851 and no-68851 both given" msgstr "" -#: config/tc-m68k.c:4100 +#: config/tc-m68k.c:4105 #, c-format msgid "text label `%s' aligned to odd boundary" msgstr "" -#: config/tc-m68k.c:4317 +#: config/tc-m68k.c:4319 msgid "invalid byte branch offset" msgstr "" -#: config/tc-m68k.c:4375 +#: config/tc-m68k.c:4377 msgid "short branch with zero offset: use :w" msgstr "" -#: config/tc-m68k.c:4910 config/tc-m68k.c:4921 +#: config/tc-m68k.c:4851 config/tc-m68k.c:4862 msgid "expression out of range: defaulting to 1" msgstr "" -#: config/tc-m68k.c:4953 +#: config/tc-m68k.c:4894 msgid "expression out of range: defaulting to 0" msgstr "" -#: config/tc-m68k.c:4986 config/tc-m68k.c:4998 +#: config/tc-m68k.c:4927 config/tc-m68k.c:4939 #, c-format msgid "Can't deal with expression; defaulting to %ld" msgstr "" -#: config/tc-m68k.c:5012 +#: config/tc-m68k.c:4953 msgid "expression doesn't fit in BYTE" msgstr "" -#: config/tc-m68k.c:5016 +#: config/tc-m68k.c:4957 msgid "expression doesn't fit in WORD" msgstr "" -#: config/tc-m68k.c:5109 +#: config/tc-m68k.c:5050 #, c-format msgid "%s: unrecognized processor name" msgstr "" -#: config/tc-m68k.c:5174 +#: config/tc-m68k.c:5115 msgid "bad coprocessor id" msgstr "" -#: config/tc-m68k.c:5180 +#: config/tc-m68k.c:5121 msgid "unrecognized fopt option" msgstr "" -#: config/tc-m68k.c:5314 +#: config/tc-m68k.c:5255 #, c-format msgid "option `%s' may not be negated" msgstr "" -#: config/tc-m68k.c:5325 +#: config/tc-m68k.c:5266 #, c-format msgid "option `%s' not recognized" msgstr "" -#: config/tc-m68k.c:5358 +#: config/tc-m68k.c:5299 msgid "bad format of OPT NEST=depth" msgstr "" -#: config/tc-m68k.c:5421 +#: config/tc-m68k.c:5362 msgid "missing label" msgstr "" -#: config/tc-m68k.c:5445 config/tc-m68k.c:5474 +#: config/tc-m68k.c:5386 config/tc-m68k.c:5415 msgid "bad register list" msgstr "" -#: config/tc-m68k.c:5447 +#: config/tc-m68k.c:5388 #, c-format msgid "bad register list: %s" msgstr "" -#: config/tc-m68k.c:5545 +#: config/tc-m68k.c:5486 msgid "restore without save" msgstr "" -#: config/tc-m68k.c:5722 config/tc-m68k.c:6071 +#: config/tc-m68k.c:5663 config/tc-m68k.c:6050 msgid "syntax error in structured control directive" msgstr "" -#: config/tc-m68k.c:5773 +#: config/tc-m68k.c:5714 msgid "missing condition code in structured control directive" msgstr "" -#: config/tc-m68k.c:6105 +#: config/tc-m68k.c:5786 +#, c-format +msgid "" +"Condition <%c%c> in structured control directive can not be encoded correctly" +msgstr "" + +#: config/tc-m68k.c:6093 msgid "missing then" msgstr "" -#: config/tc-m68k.c:6187 +#: config/tc-m68k.c:6175 msgid "else without matching if" msgstr "" -#: config/tc-m68k.c:6221 +#: config/tc-m68k.c:6209 msgid "endi without matching if" msgstr "" -#: config/tc-m68k.c:6262 +#: config/tc-m68k.c:6250 msgid "break outside of structured loop" msgstr "" -#: config/tc-m68k.c:6301 +#: config/tc-m68k.c:6289 msgid "next outside of structured loop" msgstr "" -#: config/tc-m68k.c:6353 +#: config/tc-m68k.c:6341 msgid "missing =" msgstr "" -#: config/tc-m68k.c:6391 +#: config/tc-m68k.c:6379 msgid "missing to or downto" msgstr "" -#: config/tc-m68k.c:6427 config/tc-m68k.c:6461 config/tc-m68k.c:6671 +#: config/tc-m68k.c:6415 config/tc-m68k.c:6449 config/tc-m68k.c:6668 msgid "missing do" msgstr "" -#: config/tc-m68k.c:6564 +#: config/tc-m68k.c:6552 msgid "endf without for" msgstr "" -#: config/tc-m68k.c:6620 +#: config/tc-m68k.c:6608 msgid "until without repeat" msgstr "" -#: config/tc-m68k.c:6707 +#: config/tc-m68k.c:6704 msgid "endw without while" msgstr "" -#: config/tc-m68k.c:6831 +#: config/tc-m68k.c:6828 #, c-format msgid "unrecognized option `%s'" msgstr "" -#: config/tc-m68k.c:6876 +#: config/tc-m68k.c:6873 #, c-format msgid "unrecognized architecture specification `%s'" msgstr "" -#: config/tc-m68k.c:6946 +#: config/tc-m68k.c:6943 msgid "" "680X0 options:\n" "-l\t\t\tuse 1 word for refs to undefined symbols [default 2]\n" -"-m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040 | -m68060\n" -" | -m68302 | -m68331 | -m68332 | -m68333 | -m68340 | -m68360\n" -" | -mcpu32 | -m5200\n" +"-m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040 | -m68060 |\n" +"-m68302 | -m68331 | -m68332 | -m68333 | -m68340 | -m68360 | -mcpu32 |\n" +"-m5200 | -m5202 | -m5204 | -m5206 | -m5206e | -m5307 | -m5407\n" "\t\t\tspecify variant of 680X0 architecture [default 68020]\n" "-m68881 | -m68882 | -mno-68881 | -mno-68882\n" "\t\t\ttarget has/lacks floating-point coprocessor\n" "\t\t\t[default yes for 68020, 68030, and cpu32]\n" msgstr "" -#: config/tc-m68k.c:6956 +#: config/tc-m68k.c:6953 msgid "" "-m68851 | -mno-68851\n" "\t\t\ttarget has/lacks memory-management unit coprocessor\n" @@ -4898,7 +4908,7 @@ msgid "" "--bitwise-or\t\tdo not treat `|' as a comment character\n" msgstr "" -#: config/tc-m68k.c:6966 +#: config/tc-m68k.c:6963 msgid "" "--base-size-default-16\tbase reg without size is 16 bits\n" "--base-size-default-32\tbase reg without size is 32 bits (default)\n" @@ -4906,12 +4916,12 @@ msgid "" "--disp-size-default-32\tdisplacement with unknown size is 32 bits (default)\n" msgstr "" -#: config/tc-m68k.c:7001 +#: config/tc-m68k.c:6998 #, c-format msgid "Error %s in %s\n" msgstr "" -#: config/tc-m68k.c:7005 +#: config/tc-m68k.c:7002 #, c-format msgid "Opcode(%d.%s): " msgstr "" @@ -4972,7 +4982,7 @@ msgstr "" msgid "Relaxation should never occur" msgstr "" -#: config/tc-m88k.c:1265 config/tc-sparc.c:3541 read.c:1962 +#: config/tc-m88k.c:1265 config/tc-sparc.c:3547 read.c:1962 #, c-format msgid "BSS length (%d.) <0! Ignored." msgstr "" @@ -5162,356 +5172,356 @@ msgstr "" msgid "odd displacement at %x" msgstr "" -#: config/tc-mcore.c:2104 +#: config/tc-mcore.c:2099 msgid "unknown" msgstr "" -#: config/tc-mcore.c:2135 +#: config/tc-mcore.c:2130 #, c-format msgid "odd distance branch (0x%x bytes)" msgstr "" -#: config/tc-mcore.c:2139 +#: config/tc-mcore.c:2134 #, c-format msgid "pcrel for branch to %s too far (0x%x)" msgstr "" -#: config/tc-mcore.c:2158 +#: config/tc-mcore.c:2153 #, c-format msgid "pcrel for lrw/jmpi/jsri to %s too far (0x%x)" msgstr "" -#: config/tc-mcore.c:2169 +#: config/tc-mcore.c:2164 #, c-format msgid "pcrel for loopt too far (0x%x)" msgstr "" -#: config/tc-mcore.c:2402 +#: config/tc-mcore.c:2396 #, c-format msgid "Can not do %d byte %srelocation" msgstr "" -#: config/tc-mcore.c:2404 +#: config/tc-mcore.c:2398 msgid "pc-relative" msgstr "" -#: config/tc-mcore.c:2421 config/tc-pj.c:569 config/tc-sh.c:3345 +#: config/tc-mcore.c:2415 config/tc-pj.c:569 config/tc-sh.c:3347 #, c-format msgid "Cannot represent relocation type %s" msgstr "" -#: config/tc-mips.c:928 +#: config/tc-mips.c:936 msgid "-G not supported in this configuration." msgstr "" -#: config/tc-mips.c:997 +#: config/tc-mips.c:1005 msgid "trap exception not supported at ISA 1" msgstr "" -#: config/tc-mips.c:1054 +#: config/tc-mips.c:1062 #, c-format msgid "internal: can't hash `%s': %s" msgstr "" -#: config/tc-mips.c:1062 +#: config/tc-mips.c:1070 #, c-format msgid "internal error: bad mips16 opcode: %s %s\n" msgstr "" -#: config/tc-mips.c:1230 +#: config/tc-mips.c:1238 #, c-format msgid "returned from mips_ip(%s) insn_opcode = 0x%x\n" msgstr "" -#: config/tc-mips.c:1783 config/tc-mips.c:11395 +#: config/tc-mips.c:1796 config/tc-mips.c:11428 msgid "extended instruction in delay slot" msgstr "" -#: config/tc-mips.c:1805 config/tc-mips.c:1812 +#: config/tc-mips.c:1818 config/tc-mips.c:1825 #, c-format msgid "jump to misaligned address (0x%lx)" msgstr "" -#: config/tc-mips.c:2461 config/tc-mips.c:2815 +#: config/tc-mips.c:2477 config/tc-mips.c:2831 msgid "Macro instruction expanded into multiple instructions" msgstr "" -#: config/tc-mips.c:2868 +#: config/tc-mips.c:2884 msgid "unsupported large constant" msgstr "" -#: config/tc-mips.c:2870 +#: config/tc-mips.c:2886 #, c-format msgid "Instruction %s requires absolute expression" msgstr "" -#: config/tc-mips.c:3016 +#: config/tc-mips.c:3032 msgid "Number larger than 32 bits" msgstr "" -#: config/tc-mips.c:3037 +#: config/tc-mips.c:3053 msgid "Number larger than 64 bits" msgstr "" -#: config/tc-mips.c:3305 config/tc-mips.c:3377 config/tc-mips.c:5072 -#: config/tc-mips.c:5123 config/tc-mips.c:5659 config/tc-mips.c:5722 +#: config/tc-mips.c:3321 config/tc-mips.c:3393 config/tc-mips.c:5092 +#: config/tc-mips.c:5143 config/tc-mips.c:5679 config/tc-mips.c:5742 msgid "PIC code offset overflow (max 16 signed bits)" msgstr "" -#: config/tc-mips.c:3616 +#: config/tc-mips.c:3633 #, c-format msgid "Branch %s is always false (nop)" msgstr "" -#: config/tc-mips.c:3621 +#: config/tc-mips.c:3640 #, c-format msgid "Branch likely %s is always false" msgstr "" -#: config/tc-mips.c:3628 config/tc-mips.c:3702 config/tc-mips.c:3805 -#: config/tc-mips.c:3860 config/tc-mips.c:6759 config/tc-mips.c:6768 -#: config/tc-mips.c:6776 config/tc-mips.c:6885 +#: config/tc-mips.c:3648 config/tc-mips.c:3722 config/tc-mips.c:3825 +#: config/tc-mips.c:3880 config/tc-mips.c:6779 config/tc-mips.c:6788 +#: config/tc-mips.c:6796 config/tc-mips.c:6905 msgid "Unsupported large constant" msgstr "" #. result is always true -#: config/tc-mips.c:3664 +#: config/tc-mips.c:3684 #, c-format msgid "Branch %s is always true" msgstr "" -#: config/tc-mips.c:3936 config/tc-mips.c:4043 +#: config/tc-mips.c:3956 config/tc-mips.c:4063 msgid "Divide by zero." msgstr "" -#: config/tc-mips.c:4643 +#: config/tc-mips.c:4663 msgid "MIPS PIC call to register other than $25" msgstr "" -#: config/tc-mips.c:4648 config/tc-mips.c:4760 +#: config/tc-mips.c:4668 config/tc-mips.c:4780 msgid "No .cprestore pseudo-op used in PIC code" msgstr "" -#: config/tc-mips.c:4833 config/tc-mips.c:4922 config/tc-mips.c:5410 -#: config/tc-mips.c:5451 config/tc-mips.c:5469 config/tc-mips.c:6098 +#: config/tc-mips.c:4853 config/tc-mips.c:4942 config/tc-mips.c:5430 +#: config/tc-mips.c:5471 config/tc-mips.c:5489 config/tc-mips.c:6118 msgid "opcode not supported on this processor" msgstr "" -#: config/tc-mips.c:5929 config/tc-mips.c:6653 +#: config/tc-mips.c:5949 config/tc-mips.c:6673 msgid "Macro used $at after \".set noat\"" msgstr "" -#: config/tc-mips.c:6069 config/tc-mips.c:6087 +#: config/tc-mips.c:6089 config/tc-mips.c:6107 msgid "rotate count too large" msgstr "" -#: config/tc-mips.c:6138 +#: config/tc-mips.c:6158 #, c-format msgid "Instruction %s: result is always false" msgstr "" -#: config/tc-mips.c:6307 +#: config/tc-mips.c:6327 #, c-format msgid "Instruction %s: result is always true" msgstr "" -#: config/tc-mips.c:6446 config/tc-mips.c:6473 config/tc-mips.c:6545 -#: config/tc-mips.c:6570 +#: config/tc-mips.c:6466 config/tc-mips.c:6493 config/tc-mips.c:6565 +#: config/tc-mips.c:6590 msgid "operand overflow" msgstr "" #. FIXME: Check if this is one of the itbl macros, since they #. are added dynamically. -#: config/tc-mips.c:6649 +#: config/tc-mips.c:6669 #, c-format msgid "Macro %s not implemented yet" msgstr "" -#: config/tc-mips.c:6919 +#: config/tc-mips.c:6939 #, c-format msgid "internal: bad mips opcode (mask error): %s %s" msgstr "" -#: config/tc-mips.c:6975 +#: config/tc-mips.c:6995 #, c-format msgid "internal: bad mips opcode (unknown operand type `%c'): %s %s" msgstr "" -#: config/tc-mips.c:6982 +#: config/tc-mips.c:7002 #, c-format msgid "internal: bad mips opcode (bits 0x%lx undefined): %s %s" msgstr "" -#: config/tc-mips.c:7090 +#: config/tc-mips.c:7112 #, c-format msgid "opcode not supported on this processor: %s (%s)" msgstr "" -#: config/tc-mips.c:7161 +#: config/tc-mips.c:7187 #, c-format msgid "Improper shift amount (%ld)" msgstr "" -#: config/tc-mips.c:7187 config/tc-mips.c:8341 config/tc-mips.c:8456 +#: config/tc-mips.c:7213 config/tc-mips.c:8370 config/tc-mips.c:8485 #, c-format msgid "Invalid value for `%s' (%lu)" msgstr "" -#: config/tc-mips.c:7205 +#: config/tc-mips.c:7231 #, c-format msgid "Illegal break code (%ld)" msgstr "" -#: config/tc-mips.c:7219 +#: config/tc-mips.c:7245 #, c-format msgid "Illegal lower break code (%ld)" msgstr "" -#: config/tc-mips.c:7232 +#: config/tc-mips.c:7258 #, c-format msgid "Illegal 20-bit code (%ld)" msgstr "" -#: config/tc-mips.c:7244 +#: config/tc-mips.c:7270 #, c-format msgid "Coproccesor code > 25 bits (%ld)" msgstr "" -#: config/tc-mips.c:7257 +#: config/tc-mips.c:7283 #, c-format msgid "Illegal 19-bit code (%ld)" msgstr "" -#: config/tc-mips.c:7269 +#: config/tc-mips.c:7295 #, c-format msgid "Invalidate performance regster (%ld)" msgstr "" -#: config/tc-mips.c:7306 +#: config/tc-mips.c:7332 #, c-format msgid "Invalid register number (%d)" msgstr "" -#: config/tc-mips.c:7470 +#: config/tc-mips.c:7496 #, c-format msgid "Invalid float register number (%d)" msgstr "" -#: config/tc-mips.c:7480 +#: config/tc-mips.c:7506 #, c-format msgid "Float register should be even, was %d" msgstr "" -#: config/tc-mips.c:7531 +#: config/tc-mips.c:7557 msgid "absolute expression required" msgstr "" -#: config/tc-mips.c:7592 +#: config/tc-mips.c:7618 #, c-format msgid "Bad floating point constant: %s" msgstr "" -#: config/tc-mips.c:7714 +#: config/tc-mips.c:7740 msgid "Can't use floating point insn in this section" msgstr "" -#: config/tc-mips.c:7768 +#: config/tc-mips.c:7794 msgid "16 bit expression not in range 0..65535" msgstr "" -#: config/tc-mips.c:7805 +#: config/tc-mips.c:7831 msgid "16 bit expression not in range -32768..32767" msgstr "" -#: config/tc-mips.c:7876 +#: config/tc-mips.c:7902 msgid "lui expression not in range 0..65535" msgstr "" -#: config/tc-mips.c:7900 +#: config/tc-mips.c:7926 #, c-format msgid "invalid condition code register $fcc%d" msgstr "" -#: config/tc-mips.c:7925 +#: config/tc-mips.c:7951 msgid "invalid coprocessor sub-selection value (0-7)" msgstr "" -#: config/tc-mips.c:7930 +#: config/tc-mips.c:7956 #, c-format msgid "bad char = '%c'\n" msgstr "" -#: config/tc-mips.c:7943 config/tc-mips.c:8481 +#: config/tc-mips.c:7967 config/tc-mips.c:7972 config/tc-mips.c:8510 msgid "illegal operands" msgstr "" -#: config/tc-mips.c:8010 +#: config/tc-mips.c:8039 msgid "unrecognized opcode" msgstr "" -#: config/tc-mips.c:8119 +#: config/tc-mips.c:8148 #, c-format msgid "invalid register number (%d)" msgstr "" -#: config/tc-mips.c:8200 +#: config/tc-mips.c:8229 msgid "used $at without \".set noat\"" msgstr "" -#: config/tc-mips.c:8375 +#: config/tc-mips.c:8404 msgid "can't parse register list" msgstr "" -#: config/tc-mips.c:8409 config/tc-mips.c:8439 +#: config/tc-mips.c:8438 config/tc-mips.c:8468 msgid "invalid register list" msgstr "" -#: config/tc-mips.c:8607 +#: config/tc-mips.c:8636 msgid "extended operand requested but not required" msgstr "" -#: config/tc-mips.c:8609 +#: config/tc-mips.c:8638 msgid "invalid unextended operand value" msgstr "" -#: config/tc-mips.c:8637 +#: config/tc-mips.c:8666 msgid "operand value out of range for instruction" msgstr "" -#: config/tc-mips.c:9022 +#: config/tc-mips.c:9056 #, c-format msgid "invalid architecture -mcpu=%s" msgstr "" -#: config/tc-mips.c:9071 +#: config/tc-mips.c:9105 msgid "-G may not be used with embedded PIC code" msgstr "" -#: config/tc-mips.c:9084 +#: config/tc-mips.c:9118 msgid "-call_shared is supported only for ELF format" msgstr "" -#: config/tc-mips.c:9090 config/tc-mips.c:10179 config/tc-mips.c:10353 +#: config/tc-mips.c:9124 config/tc-mips.c:10221 config/tc-mips.c:10395 msgid "-G may not be used with SVR4 PIC code" msgstr "" -#: config/tc-mips.c:9099 +#: config/tc-mips.c:9133 msgid "-non_shared is supported only for ELF format" msgstr "" -#: config/tc-mips.c:9116 +#: config/tc-mips.c:9150 msgid "-G is not supported for this configuration" msgstr "" -#: config/tc-mips.c:9121 +#: config/tc-mips.c:9155 msgid "-G may not be used with SVR4 or embedded PIC code" msgstr "" -#: config/tc-mips.c:9146 +#: config/tc-mips.c:9182 msgid "No compiled in support for 64 bit object file format" msgstr "" -#: config/tc-mips.c:9239 +#: config/tc-mips.c:9275 msgid "" "MIPS options:\n" "-membedded-pic\t\tgenerate embedded position independent code\n" @@ -5522,7 +5532,7 @@ msgid "" "\t\t\timplicitly with the gp register [default 8]\n" msgstr "" -#: config/tc-mips.c:9247 +#: config/tc-mips.c:9283 msgid "" "-mips1\t\t\tgenerate MIPS ISA I instructions\n" "-mips2\t\t\tgenerate MIPS ISA II instructions\n" @@ -5534,29 +5544,30 @@ msgid "" "-mcpu=CPU\t\tgenerate code for CPU, where CPU is one of:\n" msgstr "" -#: config/tc-mips.c:9278 +#: config/tc-mips.c:9315 msgid "" "-mCPU\t\t\tequivalent to -mcpu=CPU.\n" "-no-mCPU\t\tdon't generate code specific to CPU.\n" "\t\t\tFor -mCPU and -no-mCPU, CPU must be one of:\n" msgstr "" -#: config/tc-mips.c:9291 +#: config/tc-mips.c:9328 msgid "" "-mips16\t\t\tgenerate mips16 instructions\n" "-no-mips16\t\tdo not generate mips16 instructions\n" msgstr "" -#: config/tc-mips.c:9294 +#: config/tc-mips.c:9331 msgid "" "-O0\t\t\tremove unneeded NOPs, do not swap branches\n" "-O\t\t\tremove unneeded NOPs and swap branches\n" +"-n\t\t\twarn about NOPs generated from macros\n" "--[no-]construct-floats [dis]allow floating point values to be constructed\n" "--trap, --no-break\ttrap exception on div by 0 and mult overflow\n" "--break, --no-trap\tbreak exception on div by 0 and mult overflow\n" msgstr "" -#: config/tc-mips.c:9301 +#: config/tc-mips.c:9339 msgid "" "-KPIC, -call_shared\tgenerate SVR4 position independent code\n" "-non_shared\t\tdo not generate position independent code\n" @@ -5565,170 +5576,170 @@ msgid "" "-64\t\t\tcreate 64 bit object file\n" msgstr "" -#: config/tc-mips.c:9358 +#: config/tc-mips.c:9396 #, c-format msgid "Unsupported reloc size %d" msgstr "" -#: config/tc-mips.c:9461 +#: config/tc-mips.c:9499 msgid "Unmatched %%hi reloc" msgstr "" -#: config/tc-mips.c:9584 +#: config/tc-mips.c:9626 msgid "Invalid PC relative reloc" msgstr "" -#: config/tc-mips.c:9694 config/tc-sparc.c:3102 config/tc-sparc.c:3109 -#: config/tc-sparc.c:3116 config/tc-sparc.c:3123 config/tc-sparc.c:3130 -#: config/tc-sparc.c:3139 config/tc-sparc.c:3150 config/tc-sparc.c:3176 -#: config/tc-sparc.c:3204 write.c:1025 write.c:1089 +#: config/tc-mips.c:9736 config/tc-sparc.c:3105 config/tc-sparc.c:3112 +#: config/tc-sparc.c:3119 config/tc-sparc.c:3126 config/tc-sparc.c:3133 +#: config/tc-sparc.c:3142 config/tc-sparc.c:3153 config/tc-sparc.c:3179 +#: config/tc-sparc.c:3207 write.c:1023 write.c:1087 msgid "relocation overflow" msgstr "" -#: config/tc-mips.c:9710 +#: config/tc-mips.c:9752 #, c-format msgid "Branch to odd address (%lx)" msgstr "" -#: config/tc-mips.c:9874 +#: config/tc-mips.c:9916 #, c-format msgid "%08lx UNDEFINED\n" msgstr "" -#: config/tc-mips.c:9940 +#: config/tc-mips.c:9982 msgid "Alignment negative: 0 assumed." msgstr "" -#: config/tc-mips.c:10028 +#: config/tc-mips.c:10070 msgid "No read only data section in this object file format" msgstr "" -#: config/tc-mips.c:10051 +#: config/tc-mips.c:10093 msgid "Global pointers not supported; recompile -G 0" msgstr "" -#: config/tc-mips.c:10137 +#: config/tc-mips.c:10179 #, c-format msgid "%s: no such section" msgstr "" -#: config/tc-mips.c:10174 +#: config/tc-mips.c:10216 #, c-format msgid ".option pic%d not supported" msgstr "" -#: config/tc-mips.c:10185 +#: config/tc-mips.c:10227 #, c-format msgid "Unrecognized option \"%s\"" msgstr "" -#: config/tc-mips.c:10248 +#: config/tc-mips.c:10290 msgid "`noreorder' must be set before `nomacro'" msgstr "" -#: config/tc-mips.c:10290 +#: config/tc-mips.c:10332 msgid "unknown ISA level" msgstr "" -#: config/tc-mips.c:10312 +#: config/tc-mips.c:10354 msgid ".set pop with no .set push" msgstr "" -#: config/tc-mips.c:10336 +#: config/tc-mips.c:10378 #, c-format msgid "Tried to set unrecognized symbol: %s\n" msgstr "" -#: config/tc-mips.c:10386 +#: config/tc-mips.c:10428 msgid ".cpload not in noreorder section" msgstr "" -#: config/tc-mips.c:10468 +#: config/tc-mips.c:10510 msgid "Unsupported use of .gpword" msgstr "" -#: config/tc-mips.c:10605 +#: config/tc-mips.c:10647 msgid "expected `$'" msgstr "" -#: config/tc-mips.c:10613 +#: config/tc-mips.c:10655 msgid "Bad register number" msgstr "" -#: config/tc-mips.c:10629 +#: config/tc-mips.c:10671 msgid "Unrecognized register name" msgstr "" -#: config/tc-mips.c:10828 +#: config/tc-mips.c:10852 msgid "unsupported PC relative reference to different section" msgstr "" -#: config/tc-mips.c:10937 +#: config/tc-mips.c:10965 msgid "unsupported relocation" msgstr "" -#: config/tc-mips.c:11041 +#: config/tc-mips.c:11069 msgid "AT used after \".set noat\" or macro used after \".set nomacro\"" msgstr "" -#: config/tc-mips.c:11104 +#: config/tc-mips.c:11137 msgid "Double check fx_r_type in tc-mips.c:tc_gen_reloc" msgstr "" -#: config/tc-mips.c:11617 +#: config/tc-mips.c:11650 msgid "missing `.end' at end of assembly" msgstr "" -#: config/tc-mips.c:11632 +#: config/tc-mips.c:11665 msgid "Expected simple number." msgstr "" -#: config/tc-mips.c:11658 +#: config/tc-mips.c:11691 #, c-format msgid " *input_line_pointer == '%c' 0x%02x\n" msgstr "" -#: config/tc-mips.c:11660 +#: config/tc-mips.c:11693 msgid "Invalid number" msgstr "" -#: config/tc-mips.c:11714 +#: config/tc-mips.c:11747 msgid ".end not in text section" msgstr "" -#: config/tc-mips.c:11718 +#: config/tc-mips.c:11751 msgid ".end directive without a preceding .ent directive." msgstr "" -#: config/tc-mips.c:11727 +#: config/tc-mips.c:11760 msgid ".end symbol does not match .ent symbol." msgstr "" -#: config/tc-mips.c:11730 +#: config/tc-mips.c:11763 msgid ".end directive missing or unknown symbol" msgstr "" -#: config/tc-mips.c:11805 +#: config/tc-mips.c:11838 msgid ".ent or .aent not in text section." msgstr "" -#: config/tc-mips.c:11808 +#: config/tc-mips.c:11841 msgid "missing `.end'" msgstr "" -#: config/tc-mips.c:11841 ecoff.c:3206 +#: config/tc-mips.c:11874 ecoff.c:3206 msgid ".frame outside of .ent" msgstr "" -#: config/tc-mips.c:11852 ecoff.c:3217 +#: config/tc-mips.c:11885 ecoff.c:3217 msgid "Bad .frame directive" msgstr "" -#: config/tc-mips.c:11882 +#: config/tc-mips.c:11915 msgid ".mask/.fmask outside of .ent" msgstr "" -#: config/tc-mips.c:11889 +#: config/tc-mips.c:11922 msgid "Bad .mask/.fmask directive" msgstr "" @@ -5739,19 +5750,19 @@ msgid "" msgstr "" #: config/tc-mn10200.c:808 config/tc-mn10300.c:955 config/tc-ppc.c:1736 -#: config/tc-s390.c:1262 config/tc-v850.c:1728 +#: config/tc-s390.c:1262 config/tc-v850.c:1725 #, c-format msgid "Unrecognized opcode: `%s'" msgstr "" #: config/tc-mn10200.c:1051 config/tc-mn10300.c:1478 config/tc-ppc.c:2097 -#: config/tc-s390.c:1188 config/tc-v850.c:2152 +#: config/tc-s390.c:1188 config/tc-v850.c:2149 #, c-format msgid "junk at end of line: `%s'" msgstr "" -#: config/tc-mn10200.c:1365 config/tc-mn10300.c:2015 config/tc-ppc.c:1224 -#: config/tc-v850.c:1656 +#: config/tc-mn10200.c:1365 config/tc-mn10300.c:2074 config/tc-ppc.c:1224 +#: config/tc-v850.c:1654 #, c-format msgid "operand out of range (%s not between %ld and %ld)" msgstr "" @@ -5922,18 +5933,18 @@ msgstr "" msgid "Bit field out of range" msgstr "" -#: config/tc-ns32k.c:2182 +#: config/tc-ns32k.c:2170 #, c-format msgid "invalid architecture option -m%s" msgstr "" -#: config/tc-ns32k.c:2198 +#: config/tc-ns32k.c:2186 msgid "" "NS32K options:\n" "-m32032 | -m32532\tselect variant of NS32K architecture\n" msgstr "" -#: config/tc-ns32k.c:2376 +#: config/tc-ns32k.c:2364 #, c-format msgid "Cannot find relocation type for symbol %s, code %d" msgstr "" @@ -5958,12 +5969,12 @@ msgid "" "-big\t\t\tgenerate big endian code\n" msgstr "" -#: config/tc-pj.c:458 config/tc-sh.c:2909 config/tc-sh.c:2916 -#: config/tc-sh.c:2923 config/tc-sh.c:2930 +#: config/tc-pj.c:458 config/tc-sh.c:2911 config/tc-sh.c:2918 +#: config/tc-sh.c:2925 config/tc-sh.c:2932 msgid "pcrel too far" msgstr "" -#: config/tc-pj.c:526 config/tc-sh.c:3021 +#: config/tc-pj.c:526 config/tc-sh.c:3023 msgid "offset out of range" msgstr "" @@ -6104,7 +6115,7 @@ msgstr "" msgid "missing rename string" msgstr "" -#: config/tc-ppc.c:2780 config/tc-ppc.c:3305 read.c:3000 +#: config/tc-ppc.c:2780 config/tc-ppc.c:3325 read.c:3000 msgid "missing value" msgstr "" @@ -6120,93 +6131,93 @@ msgstr "" msgid "missing type" msgstr "" -#: config/tc-ppc.c:2900 +#: config/tc-ppc.c:2920 msgid "missing symbol name" msgstr "" -#: config/tc-ppc.c:3076 +#: config/tc-ppc.c:3096 msgid "nested .bs blocks" msgstr "" -#: config/tc-ppc.c:3109 +#: config/tc-ppc.c:3129 msgid ".es without preceding .bs" msgstr "" -#: config/tc-ppc.c:3297 +#: config/tc-ppc.c:3317 msgid "non-constant byte count" msgstr "" -#: config/tc-ppc.c:3342 +#: config/tc-ppc.c:3362 msgid ".tc not in .toc section" msgstr "" -#: config/tc-ppc.c:3361 +#: config/tc-ppc.c:3381 msgid ".tc with no label" msgstr "" -#: config/tc-ppc.c:3436 +#: config/tc-ppc.c:3456 msgid "No previous section to return to. Directive ignored." msgstr "" #. Section Contents #. unknown -#: config/tc-ppc.c:3855 +#: config/tc-ppc.c:3875 msgid "Unsupported section attribute -- 'a'" msgstr "" -#: config/tc-ppc.c:4045 +#: config/tc-ppc.c:4065 msgid "bad symbol suffix" msgstr "" -#: config/tc-ppc.c:4138 +#: config/tc-ppc.c:4158 msgid "Unrecognized symbol suffix" msgstr "" -#: config/tc-ppc.c:4220 +#: config/tc-ppc.c:4240 msgid "two .function pseudo-ops with no intervening .ef" msgstr "" -#: config/tc-ppc.c:4233 +#: config/tc-ppc.c:4253 msgid ".ef with no preceding .function" msgstr "" -#: config/tc-ppc.c:4361 +#: config/tc-ppc.c:4381 #, c-format msgid "warning: symbol %s has no csect" msgstr "" -#: config/tc-ppc.c:4662 +#: config/tc-ppc.c:4681 msgid "symbol in .toc does not match any .tc" msgstr "" -#: config/tc-ppc.c:4957 config/tc-s390.c:1726 config/tc-v850.c:2431 +#: config/tc-ppc.c:4975 config/tc-s390.c:1726 config/tc-v850.c:2423 msgid "unresolved expression that must be resolved" msgstr "" -#: config/tc-ppc.c:4960 config/tc-s390.c:1729 +#: config/tc-ppc.c:4978 config/tc-s390.c:1729 msgid "unsupported relocation type" msgstr "" -#: config/tc-ppc.c:5022 +#: config/tc-ppc.c:5040 #, c-format msgid "cannot emit PC relative %s relocation against %s" msgstr "" -#: config/tc-ppc.c:5027 +#: config/tc-ppc.c:5045 #, c-format msgid "cannot emit PC relative %s relocation" msgstr "" -#: config/tc-ppc.c:5089 +#: config/tc-ppc.c:5107 msgid "must branch to an address a multiple of 4" msgstr "" -#: config/tc-ppc.c:5093 +#: config/tc-ppc.c:5111 #, c-format msgid "@local or @plt branch destination is too far away, %ld bytes" msgstr "" -#: config/tc-ppc.c:5117 +#: config/tc-ppc.c:5135 #, c-format msgid "Gas failure, reloc value %d\n" msgstr "" @@ -6386,15 +6397,15 @@ msgstr "" msgid "excess operands: '%s'" msgstr "" -#: config/tc-sh.c:2109 +#: config/tc-sh.c:2111 msgid ".uses pseudo-op seen when not relaxing" msgstr "" -#: config/tc-sh.c:2115 +#: config/tc-sh.c:2117 msgid "bad .uses format" msgstr "" -#: config/tc-sh.c:2176 +#: config/tc-sh.c:2178 msgid "" "SH options:\n" "-little\t\t\tgenerate little endian code\n" @@ -6403,61 +6414,61 @@ msgid "" "-dsp\t\t\tenable sh-dsp insns, and disable sh3e / sh4 insns.\n" msgstr "" -#: config/tc-sh.c:2187 config/tc-w65.c:856 +#: config/tc-sh.c:2189 config/tc-w65.c:856 msgid "call to tc_Nout_fix_to_chars \n" msgstr "" -#: config/tc-sh.c:2271 +#: config/tc-sh.c:2273 msgid ".uses does not refer to a local symbol in the same section" msgstr "" -#: config/tc-sh.c:2290 +#: config/tc-sh.c:2292 msgid "can't find fixup pointed to by .uses" msgstr "" -#: config/tc-sh.c:2313 +#: config/tc-sh.c:2315 msgid ".uses target does not refer to a local symbol in the same section" msgstr "" -#: config/tc-sh.c:2411 +#: config/tc-sh.c:2413 msgid "displacement overflows 12-bit field" msgstr "" -#: config/tc-sh.c:2414 +#: config/tc-sh.c:2416 #, c-format msgid "displacement to defined symbol %s overflows 12-bit field" msgstr "" -#: config/tc-sh.c:2418 +#: config/tc-sh.c:2420 #, c-format msgid "displacement to undefined symbol %s overflows 12-bit field" msgstr "" -#: config/tc-sh.c:2496 +#: config/tc-sh.c:2498 msgid "displacement overflows 8-bit field" msgstr "" -#: config/tc-sh.c:2499 +#: config/tc-sh.c:2501 #, c-format msgid "displacement to defined symbol %s overflows 8-bit field" msgstr "" -#: config/tc-sh.c:2503 +#: config/tc-sh.c:2505 #, c-format msgid "displacement to undefined symbol %s overflows 8-bit field " msgstr "" -#: config/tc-sh.c:2516 +#: config/tc-sh.c:2518 #, c-format msgid "overflow in branch to %s; converted into longer instruction sequence" msgstr "" -#: config/tc-sh.c:2591 config/tc-sh.c:2639 config/tc-sparc.c:4085 -#: config/tc-sparc.c:4110 +#: config/tc-sh.c:2593 config/tc-sh.c:2641 config/tc-sparc.c:4088 +#: config/tc-sparc.c:4113 msgid "misaligned data" msgstr "" -#: config/tc-sh.c:3013 +#: config/tc-sh.c:3015 msgid "misaligned offset" msgstr "" @@ -6737,50 +6748,50 @@ msgstr "" msgid " (Requires %s; requested architecture is %s.)" msgstr "" -#: config/tc-sparc.c:3250 +#: config/tc-sparc.c:3253 #, c-format msgid "bad or unhandled relocation type: 0x%02x" msgstr "" -#: config/tc-sparc.c:3381 +#: config/tc-sparc.c:3387 #, c-format msgid "internal error: can't export reloc type %d (`%s')" msgstr "" -#: config/tc-sparc.c:3553 +#: config/tc-sparc.c:3559 msgid "bad .reserve segment -- expected BSS segment" msgstr "" -#: config/tc-sparc.c:3570 +#: config/tc-sparc.c:3576 msgid "missing alignment" msgstr "" -#: config/tc-sparc.c:3581 config/tc-sparc.c:3731 +#: config/tc-sparc.c:3587 config/tc-sparc.c:3737 #, c-format msgid "alignment too large; assuming %d" msgstr "" -#: config/tc-sparc.c:3587 config/tc-sparc.c:3737 +#: config/tc-sparc.c:3593 config/tc-sparc.c:3743 msgid "negative alignment" msgstr "" -#: config/tc-sparc.c:3597 config/tc-sparc.c:3760 +#: config/tc-sparc.c:3603 config/tc-sparc.c:3766 msgid "alignment not a power of 2" msgstr "" -#: config/tc-sparc.c:3717 +#: config/tc-sparc.c:3723 msgid "Expected comma after common length" msgstr "" -#: config/tc-sparc.c:3952 config/tc-sparc.c:3962 +#: config/tc-sparc.c:3958 config/tc-sparc.c:3968 msgid "register syntax is .register %%g[2367],{#scratch|symbolname|#ignore}" msgstr "" -#: config/tc-sparc.c:3980 +#: config/tc-sparc.c:3986 msgid "redefinition of global register" msgstr "" -#: config/tc-sparc.c:3991 +#: config/tc-sparc.c:3997 #, c-format msgid "Register symbol %s already defined." msgstr "" @@ -6789,25 +6800,25 @@ msgstr "" msgid "The -a option doesn't exist. (Despite what the man page says!" msgstr "" -#: config/tc-tahoe.c:406 config/tc-vax.c:3132 +#: config/tc-tahoe.c:406 config/tc-vax.c:3122 #, c-format msgid "Displacement length %s ignored!" msgstr "" -#: config/tc-tahoe.c:410 config/tc-vax.c:3124 +#: config/tc-tahoe.c:410 config/tc-vax.c:3114 msgid "SYMBOL TABLE not implemented" msgstr "" -#: config/tc-tahoe.c:414 config/tc-vax.c:3128 +#: config/tc-tahoe.c:414 config/tc-vax.c:3118 msgid "TOKEN TRACE not implemented" msgstr "" -#: config/tc-tahoe.c:418 config/tc-vax.c:3136 +#: config/tc-tahoe.c:418 config/tc-vax.c:3126 #, c-format msgid "I don't need or use temp. file \"%s\"." msgstr "" -#: config/tc-tahoe.c:422 config/tc-vax.c:3140 +#: config/tc-tahoe.c:422 config/tc-vax.c:3130 msgid "I don't use an interpass file! -V ignored" msgstr "" @@ -6823,186 +6834,186 @@ msgid "" "-V\t\t\tignored\n" msgstr "" -#: config/tc-tahoe.c:1090 +#: config/tc-tahoe.c:1064 msgid "Casting a branch displacement is bad form, and is ignored." msgstr "" -#: config/tc-tahoe.c:1146 +#: config/tc-tahoe.c:1120 msgid "Couldn't parse the [index] in this operand." msgstr "" -#: config/tc-tahoe.c:1152 +#: config/tc-tahoe.c:1126 msgid "Couldn't find the opening '[' for the index of this operand." msgstr "" -#: config/tc-tahoe.c:1192 +#: config/tc-tahoe.c:1166 msgid "Couldn't find the opening '(' for the deref of this operand." msgstr "" -#: config/tc-tahoe.c:1202 +#: config/tc-tahoe.c:1176 msgid "Operand can't be both pre-inc and post-dec." msgstr "" -#: config/tc-tahoe.c:1232 +#: config/tc-tahoe.c:1206 msgid "I parsed 2 registers in this operand." msgstr "" -#: config/tc-tahoe.c:1282 +#: config/tc-tahoe.c:1256 msgid "Can't relocate expression error." msgstr "" #. This is an error. Tahoe doesn't allow any expressions #. bigger that a 32 bit long word. Any bigger has to be referenced #. by address. -#: config/tc-tahoe.c:1289 +#: config/tc-tahoe.c:1263 msgid "Expression is too large for a 32 bits." msgstr "" -#: config/tc-tahoe.c:1294 +#: config/tc-tahoe.c:1268 msgid "Junk at end of expression." msgstr "" -#: config/tc-tahoe.c:1333 +#: config/tc-tahoe.c:1307 msgid "Syntax error in direct register mode." msgstr "" -#: config/tc-tahoe.c:1335 +#: config/tc-tahoe.c:1309 msgid "You can't index a register in direct register mode." msgstr "" -#: config/tc-tahoe.c:1338 +#: config/tc-tahoe.c:1312 msgid "SP can't be the source operand with direct register addressing." msgstr "" -#: config/tc-tahoe.c:1340 +#: config/tc-tahoe.c:1314 msgid "Can't take the address of a register." msgstr "" -#: config/tc-tahoe.c:1342 +#: config/tc-tahoe.c:1316 msgid "Direct Register can't be used in a branch." msgstr "" -#: config/tc-tahoe.c:1344 +#: config/tc-tahoe.c:1318 msgid "For quad access, the register must be even and < 14." msgstr "" -#: config/tc-tahoe.c:1346 +#: config/tc-tahoe.c:1320 msgid "You can't cast a direct register." msgstr "" -#: config/tc-tahoe.c:1352 +#: config/tc-tahoe.c:1326 msgid "Using reg 14 for quadwords can tromp the FP register." msgstr "" -#: config/tc-tahoe.c:1364 +#: config/tc-tahoe.c:1338 msgid "Syntax error in auto-dec mode." msgstr "" -#: config/tc-tahoe.c:1366 +#: config/tc-tahoe.c:1340 msgid "You can't have an index auto dec mode." msgstr "" -#: config/tc-tahoe.c:1368 +#: config/tc-tahoe.c:1342 msgid "Auto dec mode cant be used for reading." msgstr "" -#: config/tc-tahoe.c:1370 +#: config/tc-tahoe.c:1344 msgid "Auto dec only works of the SP register." msgstr "" -#: config/tc-tahoe.c:1372 +#: config/tc-tahoe.c:1346 msgid "Auto dec can't be used in a branch." msgstr "" -#: config/tc-tahoe.c:1374 +#: config/tc-tahoe.c:1348 msgid "Auto dec won't work with quadwords." msgstr "" -#: config/tc-tahoe.c:1381 +#: config/tc-tahoe.c:1355 msgid "Syntax error in one of the auto-inc modes." msgstr "" -#: config/tc-tahoe.c:1387 +#: config/tc-tahoe.c:1361 msgid "Auto inc deferred only works of the SP register." msgstr "" -#: config/tc-tahoe.c:1389 +#: config/tc-tahoe.c:1363 msgid "You can't have an index auto inc deferred mode." msgstr "" -#: config/tc-tahoe.c:1391 config/tc-tahoe.c:1402 +#: config/tc-tahoe.c:1365 config/tc-tahoe.c:1376 msgid "Auto inc can't be used in a branch." msgstr "" -#: config/tc-tahoe.c:1398 +#: config/tc-tahoe.c:1372 msgid "You can't write to an auto inc register." msgstr "" -#: config/tc-tahoe.c:1400 +#: config/tc-tahoe.c:1374 msgid "Auto inc only works of the SP register." msgstr "" -#: config/tc-tahoe.c:1404 +#: config/tc-tahoe.c:1378 msgid "Auto inc won't work with quadwords." msgstr "" -#: config/tc-tahoe.c:1406 +#: config/tc-tahoe.c:1380 msgid "You can't have an index in auto inc mode." msgstr "" -#: config/tc-tahoe.c:1414 +#: config/tc-tahoe.c:1388 msgid "You can't index the sp register." msgstr "" -#: config/tc-tahoe.c:1420 +#: config/tc-tahoe.c:1394 msgid "Syntax error in register displaced mode." msgstr "" -#: config/tc-tahoe.c:1439 +#: config/tc-tahoe.c:1413 msgid "An offest is needed for this operand." msgstr "" -#: config/tc-tahoe.c:1451 +#: config/tc-tahoe.c:1425 msgid "You can't index a register in immediate mode." msgstr "" -#: config/tc-tahoe.c:1453 +#: config/tc-tahoe.c:1427 msgid "Immediate access can't be used as an address." msgstr "" -#: config/tc-tahoe.c:1564 +#: config/tc-tahoe.c:1538 #, c-format msgid "Compiler bug: ODD number of bytes in arg structure %s." msgstr "" -#: config/tc-tahoe.c:1591 config/tc-vax.c:1839 +#: config/tc-tahoe.c:1565 config/tc-vax.c:1829 msgid "Not enough operands" msgstr "" -#: config/tc-tahoe.c:1601 config/tc-vax.c:1846 +#: config/tc-tahoe.c:1575 config/tc-vax.c:1836 msgid "Too many operands" msgstr "" -#: config/tc-tahoe.c:1652 config/tc-vax.c:364 +#: config/tc-tahoe.c:1626 config/tc-vax.c:372 #, c-format msgid "Ignoring statement due to \"%s\"" msgstr "" -#: config/tc-tahoe.c:1747 +#: config/tc-tahoe.c:1721 #, c-format msgid "Compliler bug: Got a case (%d) I wasn't expecting." msgstr "" -#: config/tc-tahoe.c:1841 +#: config/tc-tahoe.c:1815 msgid "Real branch displacements must be expressions." msgstr "" -#: config/tc-tahoe.c:1844 +#: config/tc-tahoe.c:1818 #, c-format msgid "Complier error: I got an unknown synthetic branch :%c" msgstr "" -#: config/tc-tahoe.c:1985 +#: config/tc-tahoe.c:1959 #, c-format msgid "Barf, bad mode %x\n" msgstr "" @@ -7519,335 +7530,335 @@ msgstr "" msgid "md_convert_frag() not implemented yet" msgstr "" -#: config/tc-v850.c:270 +#: config/tc-v850.c:271 #, c-format msgid ".COMMon length (%d.) < 0! Ignored." msgstr "" -#: config/tc-v850.c:1013 +#: config/tc-v850.c:1014 #, c-format msgid "unknown operand shift: %x\n" msgstr "" -#: config/tc-v850.c:1014 +#: config/tc-v850.c:1015 msgid "internal failure in parse_register_list" msgstr "" -#: config/tc-v850.c:1031 +#: config/tc-v850.c:1032 msgid "constant expression or register list expected" msgstr "" -#: config/tc-v850.c:1036 config/tc-v850.c:1049 config/tc-v850.c:1068 +#: config/tc-v850.c:1037 config/tc-v850.c:1050 config/tc-v850.c:1069 msgid "high bits set in register list expression" msgstr "" -#: config/tc-v850.c:1108 config/tc-v850.c:1172 +#: config/tc-v850.c:1109 config/tc-v850.c:1173 msgid "illegal register included in list" msgstr "" -#: config/tc-v850.c:1115 +#: config/tc-v850.c:1116 msgid "system registers cannot be included in list" msgstr "" -#: config/tc-v850.c:1120 +#: config/tc-v850.c:1121 msgid "PSW cannot be included in list" msgstr "" -#: config/tc-v850.c:1127 +#: config/tc-v850.c:1128 msgid "High value system registers cannot be included in list" msgstr "" -#: config/tc-v850.c:1151 +#: config/tc-v850.c:1152 msgid "second register should follow dash in register list" msgstr "" -#: config/tc-v850.c:1198 +#: config/tc-v850.c:1199 msgid " V850 options:\n" msgstr "" -#: config/tc-v850.c:1199 +#: config/tc-v850.c:1200 msgid " -mwarn-signed-overflow Warn if signed immediate values overflow\n" msgstr "" -#: config/tc-v850.c:1200 +#: config/tc-v850.c:1201 msgid "" " -mwarn-unsigned-overflow Warn if unsigned immediate values overflow\n" msgstr "" -#: config/tc-v850.c:1201 +#: config/tc-v850.c:1202 msgid " -mv850 The code is targeted at the v850\n" msgstr "" -#: config/tc-v850.c:1202 +#: config/tc-v850.c:1203 msgid " -mv850e The code is targeted at the v850e\n" msgstr "" -#: config/tc-v850.c:1203 +#: config/tc-v850.c:1204 msgid " -mv850ea The code is targeted at the v850ea\n" msgstr "" -#: config/tc-v850.c:1204 +#: config/tc-v850.c:1205 msgid "" " -mv850any The code is generic, despite any processor " "specific instructions\n" msgstr "" -#: config/tc-v850.c:1216 config/tc-v850.c:1254 +#: config/tc-v850.c:1217 config/tc-v850.c:1255 #, c-format msgid "unknown command line option: -%c%s\n" msgstr "" -#: config/tc-v850.c:1407 +#: config/tc-v850.c:1405 #, c-format msgid "Unable to determine default target processor from string: %s" msgstr "" -#: config/tc-v850.c:1455 +#: config/tc-v850.c:1453 msgid "ctoff() relocation used on an instruction which does not support it" msgstr "" -#: config/tc-v850.c:1477 +#: config/tc-v850.c:1475 msgid "sdaoff() relocation used on an instruction which does not support it" msgstr "" -#: config/tc-v850.c:1499 +#: config/tc-v850.c:1497 msgid "zdaoff() relocation used on an instruction which does not support it" msgstr "" -#: config/tc-v850.c:1532 +#: config/tc-v850.c:1530 msgid "tdaoff() relocation used on an instruction which does not support it" msgstr "" -#: config/tc-v850.c:1749 +#: config/tc-v850.c:1746 msgid "Target processor does not support this instruction." msgstr "" -#: config/tc-v850.c:1839 config/tc-v850.c:1869 config/tc-v850.c:2057 +#: config/tc-v850.c:1836 config/tc-v850.c:1866 config/tc-v850.c:2054 msgid "immediate operand is too large" msgstr "" -#: config/tc-v850.c:1851 +#: config/tc-v850.c:1848 msgid "AAARG -> unhandled constant reloc" msgstr "" -#: config/tc-v850.c:1895 +#: config/tc-v850.c:1892 msgid "invalid register name" msgstr "" -#: config/tc-v850.c:1900 +#: config/tc-v850.c:1897 msgid "register r0 cannot be used here" msgstr "" -#: config/tc-v850.c:1912 +#: config/tc-v850.c:1909 msgid "invalid system register name" msgstr "" -#: config/tc-v850.c:1925 +#: config/tc-v850.c:1922 msgid "expected EP register" msgstr "" -#: config/tc-v850.c:1942 +#: config/tc-v850.c:1939 msgid "invalid condition code name" msgstr "" -#: config/tc-v850.c:1963 config/tc-v850.c:1967 +#: config/tc-v850.c:1960 config/tc-v850.c:1964 msgid "constant too big to fit into instruction" msgstr "" -#: config/tc-v850.c:2020 +#: config/tc-v850.c:2017 msgid "syntax error: value is missing before the register name" msgstr "" -#: config/tc-v850.c:2022 +#: config/tc-v850.c:2019 msgid "syntax error: register not expected" msgstr "" -#: config/tc-v850.c:2036 +#: config/tc-v850.c:2033 msgid "syntax error: system register not expected" msgstr "" -#: config/tc-v850.c:2041 +#: config/tc-v850.c:2038 msgid "syntax error: condition code not expected" msgstr "" -#: config/tc-v850.c:2082 +#: config/tc-v850.c:2079 msgid "invalid operand" msgstr "" -#: config/tc-vax.c:259 +#: config/tc-vax.c:267 #, c-format msgid "VIP_BEGIN error:%s" msgstr "" -#: config/tc-vax.c:383 +#: config/tc-vax.c:391 #, c-format msgid "Ignoring statement because \"%s\"" msgstr "" -#: config/tc-vax.c:430 +#: config/tc-vax.c:438 msgid "Can't relocate expression" msgstr "" -#: config/tc-vax.c:533 +#: config/tc-vax.c:541 msgid "Bignum not permitted in short literal. Immediate mode assumed." msgstr "" -#: config/tc-vax.c:542 +#: config/tc-vax.c:550 msgid "Can't do flonum short literal: immediate mode used." msgstr "" -#: config/tc-vax.c:587 +#: config/tc-vax.c:595 #, c-format msgid "A bignum/flonum may not be a displacement: 0x%lx used" msgstr "" -#: config/tc-vax.c:908 +#: config/tc-vax.c:916 #, c-format msgid "Short literal overflow(%ld.), immediate mode assumed." msgstr "" -#: config/tc-vax.c:917 +#: config/tc-vax.c:925 #, c-format msgid "Forced short literal to immediate mode. now_seg=%s to_seg=%s" msgstr "" -#: config/tc-vax.c:976 +#: config/tc-vax.c:984 msgid "Length specification ignored. Address mode 9F used" msgstr "" -#: config/tc-vax.c:1025 +#: config/tc-vax.c:1033 msgid "Invalid operand: immediate value used as base address." msgstr "" -#: config/tc-vax.c:1027 +#: config/tc-vax.c:1035 msgid "Invalid operand: immediate value used as address." msgstr "" -#: config/tc-vax.c:1818 +#: config/tc-vax.c:1808 msgid "odd number of bytes in operand description" msgstr "" -#: config/tc-vax.c:1834 +#: config/tc-vax.c:1824 msgid "Bad operand" msgstr "" -#: config/tc-vax.c:2390 +#: config/tc-vax.c:2380 msgid "no '[' to match ']'" msgstr "" -#: config/tc-vax.c:2408 +#: config/tc-vax.c:2398 msgid "bad register in []" msgstr "" -#: config/tc-vax.c:2410 +#: config/tc-vax.c:2400 msgid "[PC] index banned" msgstr "" -#: config/tc-vax.c:2445 +#: config/tc-vax.c:2435 msgid "no '(' to match ')'" msgstr "" -#: config/tc-vax.c:2580 +#: config/tc-vax.c:2570 msgid "invalid branch operand" msgstr "" -#: config/tc-vax.c:2609 +#: config/tc-vax.c:2599 msgid "address prohibits @" msgstr "" -#: config/tc-vax.c:2611 +#: config/tc-vax.c:2601 msgid "address prohibits #" msgstr "" -#: config/tc-vax.c:2615 +#: config/tc-vax.c:2605 msgid "address prohibits -()" msgstr "" -#: config/tc-vax.c:2617 +#: config/tc-vax.c:2607 msgid "address prohibits ()+" msgstr "" -#: config/tc-vax.c:2620 +#: config/tc-vax.c:2610 msgid "address prohibits ()" msgstr "" -#: config/tc-vax.c:2622 +#: config/tc-vax.c:2612 msgid "address prohibits []" msgstr "" -#: config/tc-vax.c:2624 +#: config/tc-vax.c:2614 msgid "address prohibits register" msgstr "" -#: config/tc-vax.c:2626 +#: config/tc-vax.c:2616 msgid "address prohibits displacement length specifier" msgstr "" -#: config/tc-vax.c:2656 +#: config/tc-vax.c:2646 msgid "invalid operand of S^#" msgstr "" -#: config/tc-vax.c:2673 +#: config/tc-vax.c:2663 msgid "S^# needs expression" msgstr "" -#: config/tc-vax.c:2680 +#: config/tc-vax.c:2670 msgid "S^# may only read-access" msgstr "" -#: config/tc-vax.c:2705 +#: config/tc-vax.c:2695 msgid "invalid operand of -()" msgstr "" -#: config/tc-vax.c:2711 +#: config/tc-vax.c:2701 msgid "-(PC) unpredictable" msgstr "" -#: config/tc-vax.c:2713 +#: config/tc-vax.c:2703 msgid "[]index same as -()register: unpredictable" msgstr "" -#: config/tc-vax.c:2749 +#: config/tc-vax.c:2739 msgid "invalid operand of ()+" msgstr "" -#: config/tc-vax.c:2755 +#: config/tc-vax.c:2745 msgid "(PC)+ unpredictable" msgstr "" -#: config/tc-vax.c:2757 +#: config/tc-vax.c:2747 msgid "[]index same as ()+register: unpredictable" msgstr "" -#: config/tc-vax.c:2782 +#: config/tc-vax.c:2772 msgid "# conflicts length" msgstr "" -#: config/tc-vax.c:2784 +#: config/tc-vax.c:2774 msgid "# bars register" msgstr "" -#: config/tc-vax.c:2806 +#: config/tc-vax.c:2796 msgid "writing or modifying # is unpredictable" msgstr "" -#: config/tc-vax.c:2836 +#: config/tc-vax.c:2826 msgid "length not needed" msgstr "" -#: config/tc-vax.c:2843 +#: config/tc-vax.c:2833 msgid "can't []index a register, because it has no address" msgstr "" -#: config/tc-vax.c:2845 +#: config/tc-vax.c:2835 msgid "a register has no address" msgstr "" -#: config/tc-vax.c:2856 +#: config/tc-vax.c:2846 msgid "PC part of operand unpredictable" msgstr "" -#: config/tc-vax.c:3185 +#: config/tc-vax.c:3175 msgid "" "VAX options:\n" "-d LENGTH\t\tignored\n" @@ -7858,7 +7869,7 @@ msgid "" "-V\t\t\tignored\n" msgstr "" -#: config/tc-vax.c:3194 +#: config/tc-vax.c:3184 msgid "" "VMS options:\n" "-+\t\t\thash encode names longer than 31 characters\n" @@ -7877,84 +7888,84 @@ msgstr "" msgid "syntax error after <exp" msgstr "" -#: config/tc-z8k.c:286 +#: config/tc-z8k.c:284 #, c-format msgid "register rr%d, out of range." msgstr "" -#: config/tc-z8k.c:294 +#: config/tc-z8k.c:292 #, c-format msgid "register rh%d, out of range." msgstr "" -#: config/tc-z8k.c:302 +#: config/tc-z8k.c:300 #, c-format msgid "register rl%d, out of range." msgstr "" -#: config/tc-z8k.c:311 +#: config/tc-z8k.c:309 #, c-format msgid "register rq%d, out of range." msgstr "" -#: config/tc-z8k.c:319 +#: config/tc-z8k.c:317 #, c-format msgid "register r%d, out of range." msgstr "" -#: config/tc-z8k.c:364 +#: config/tc-z8k.c:362 #, c-format msgid "expected %c" msgstr "" -#: config/tc-z8k.c:381 +#: config/tc-z8k.c:379 #, c-format msgid "register is wrong size for a word %s" msgstr "" -#: config/tc-z8k.c:397 +#: config/tc-z8k.c:395 #, c-format msgid "register is wrong size for address %s" msgstr "" -#: config/tc-z8k.c:665 +#: config/tc-z8k.c:656 msgid "Missing ) in ra(rb)" msgstr "" -#: config/tc-z8k.c:932 +#: config/tc-z8k.c:923 #, c-format msgid "operand %s0x%x out of range." msgstr "" -#: config/tc-z8k.c:1070 +#: config/tc-z8k.c:1051 msgid "immediate must be 1 or 2" msgstr "" -#: config/tc-z8k.c:1073 +#: config/tc-z8k.c:1054 msgid "immediate 1 or 2 expected" msgstr "" -#: config/tc-z8k.c:1099 +#: config/tc-z8k.c:1080 msgid "can't use R0 here" msgstr "" -#: config/tc-z8k.c:1256 +#: config/tc-z8k.c:1234 msgid "Can't find opcode to match operands" msgstr "" -#: config/tc-z8k.c:1371 +#: config/tc-z8k.c:1349 #, c-format msgid "invalid architecture -z%s" msgstr "" -#: config/tc-z8k.c:1387 +#: config/tc-z8k.c:1365 msgid "" "Z8K options:\n" "-z8001\t\t\tgenerate segmented code\n" "-z8002\t\t\tgenerate unsegmented code\n" msgstr "" -#: config/tc-z8k.c:1531 +#: config/tc-z8k.c:1509 #, c-format msgid "Can't subtract symbols in different sections %s %s" msgstr "" @@ -8191,11 +8202,11 @@ msgstr "" msgid ".begin/.bend in different segments" msgstr "" -#: ecoff.c:4742 +#: ecoff.c:4743 msgid "Missing .end or .bend at end of file" msgstr "" -#: ecoff.c:5232 +#: ecoff.c:5233 msgid "GP prologue size exceeds field size, using 0 instead" msgstr "" @@ -8281,7 +8292,7 @@ msgstr "" msgid "right operand is a float; integer 0 assumed" msgstr "" -#: expr.c:1797 symbols.c:1098 +#: expr.c:1797 symbols.c:1094 msgid "division by zero" msgstr "" @@ -8708,27 +8719,27 @@ msgstr "" msgid "missplaced )" msgstr "" -#: macro.c:978 +#: macro.c:986 msgid "confusion in formal parameters" msgstr "" -#: macro.c:983 +#: macro.c:991 msgid "macro formal argument does not exist" msgstr "" -#: macro.c:998 +#: macro.c:1006 msgid "can't mix positional and keyword arguments" msgstr "" -#: macro.c:1006 +#: macro.c:1014 msgid "too many positional arguments" msgstr "" -#: macro.c:1186 +#: macro.c:1194 msgid "unexpected end of file in irp or irpc" msgstr "" -#: macro.c:1194 +#: macro.c:1202 msgid "missing model parameter" msgstr "" @@ -8996,11 +9007,11 @@ msgstr "" msgid "attempt to store value in absolute section" msgstr "" -#: read.c:3501 read.c:4399 +#: read.c:3501 read.c:4400 msgid "zero assumed for missing expression" msgstr "" -#: read.c:3513 read.c:4411 write.c:291 +#: read.c:3513 read.c:4412 write.c:289 msgid "register value used as expression" msgstr "" @@ -9056,45 +9067,45 @@ msgstr "" msgid "unresolvable or nonpositive repeat count; using 1" msgstr "" -#: read.c:4542 +#: read.c:4554 msgid "Expected <nn>" msgstr "" #. To be compatible with BSD 4.2 as: give the luser a linefeed!! -#: read.c:4575 read.c:4661 +#: read.c:4587 read.c:4673 msgid "Unterminated string: Newline inserted." msgstr "" -#: read.c:4669 +#: read.c:4681 msgid "Bad escaped character in string, '?' assumed" msgstr "" -#: read.c:4695 +#: read.c:4707 msgid "expected address expression; zero assumed" msgstr "" -#: read.c:4715 +#: read.c:4727 #, c-format msgid "symbol \"%s\" undefined; zero assumed" msgstr "" -#: read.c:4718 +#: read.c:4730 msgid "some symbol undefined; zero assumed" msgstr "" -#: read.c:4771 +#: read.c:4783 msgid "This string may not contain '\\0'" msgstr "" -#: read.c:4808 +#: read.c:4820 msgid "Missing string" msgstr "" -#: read.c:5044 +#: read.c:5056 msgid "missing .func" msgstr "" -#: read.c:5061 +#: read.c:5073 msgid ".endfunc missing for previous .func" msgstr "" @@ -9131,102 +9142,106 @@ msgstr "" msgid "Inserting \"%s\" into symbol table failed: %s" msgstr "" -#: symbols.c:881 +#: symbols.c:876 #, c-format msgid "Symbol definition loop encountered at %s" msgstr "" -#: symbols.c:1059 symbols.c:1063 +#: symbols.c:1055 symbols.c:1059 #, c-format msgid "undefined symbol %s in operation" msgstr "" -#: symbols.c:1068 +#: symbols.c:1064 msgid "invalid section for operation" msgstr "" -#: symbols.c:1073 symbols.c:1077 +#: symbols.c:1069 symbols.c:1073 #, c-format msgid "undefined symbol %s in operation setting %s" msgstr "" -#: symbols.c:1082 +#: symbols.c:1078 #, c-format msgid "invalid section for operation setting %s" msgstr "" -#: symbols.c:1100 +#: symbols.c:1096 #, c-format msgid "division by zero when setting %s" msgstr "" -#: symbols.c:1172 write.c:2010 +#: symbols.c:1168 write.c:2009 #, c-format msgid "can't resolve value for symbol \"%s\"" msgstr "" -#: symbols.c:1566 +#: symbols.c:1562 #, c-format msgid "\"%d\" (instance number %d of a %s label)" msgstr "" -#: symbols.c:1603 +#: symbols.c:1599 #, c-format msgid "Attempt to get value of unresolved symbol %s" msgstr "" -#: write.c:177 +#: symbols.c:1835 +msgid "Section symbols are already global" +msgstr "" + +#: write.c:175 #, c-format msgid "field fx_size too small to hold %d" msgstr "" -#: write.c:318 +#: write.c:316 msgid "rva not supported" msgstr "" -#: write.c:526 +#: write.c:524 #, c-format msgid "attempt to .org/.space backwards? (%ld)" msgstr "" -#: write.c:1028 +#: write.c:1026 msgid "relocation out of range" msgstr "" -#: write.c:1031 +#: write.c:1029 #, c-format msgid "%s:%u: bad return from bfd_install_relocation: %x" msgstr "" -#: write.c:1076 +#: write.c:1074 msgid "internal error: fixup not contained within frag" msgstr "" -#: write.c:1092 +#: write.c:1090 #, c-format msgid "%s:%u: bad return from bfd_install_relocation" msgstr "" -#: write.c:1179 write.c:1203 +#: write.c:1177 write.c:1201 #, c-format msgid "FATAL: Can't write %s" msgstr "" -#: write.c:1235 +#: write.c:1233 msgid "Cannot write to output file." msgstr "" -#: write.c:1484 +#: write.c:1482 #, c-format msgid "%d error%s, %d warning%s, generating bad object file.\n" msgstr "" -#: write.c:1491 +#: write.c:1489 #, c-format msgid "%d error%s, %d warning%s, no object file generated.\n" msgstr "" -#: write.c:1947 +#: write.c:1946 #, c-format msgid "local label %s is not defined" msgstr "" @@ -9236,31 +9251,31 @@ msgstr "" msgid "alignment padding (%lu bytes) not a multiple of %ld" msgstr "" -#: write.c:2357 +#: write.c:2358 #, c-format msgid ".word %s-%s+%s didn't fit" msgstr "" -#: write.c:2438 +#: write.c:2439 msgid "attempt to .org backwards ignored" msgstr "" -#: write.c:2462 +#: write.c:2467 msgid ".space specifies non-absolute value" msgstr "" -#: write.c:2466 +#: write.c:2474 msgid ".space or .fill with negative value, ignored" msgstr "" -#: write.c:2721 +#: write.c:2730 #, c-format msgid "" "Subtraction of two symbols in different sections \"%s\" {%s section} - " "\"%s\" {%s section} at file address %s." msgstr "" -#: write.c:2875 +#: write.c:2884 #, c-format msgid "Value of %s too large for field of %d bytes at %s" msgstr "" diff --git a/gprof/ChangeLog b/gprof/ChangeLog index a57e13d56f..16e17e22e3 100644 --- a/gprof/ChangeLog +++ b/gprof/ChangeLog @@ -1,3 +1,11 @@ +2001-06-18 H.J. Lu <hjl@gnu.org> + + * Makefile.am (diststuff): Add $(MANS). + (gprof.1): Remove the prefix `$(srcdir)/'. + * Makefile.in: Regenerated. + + * gprof.1: Removed. + 2001-06-12 Ben Elliston <bje@redhat.com> * gprof.texi (File Format): Profile data files are stored in diff --git a/gprof/Makefile.am b/gprof/Makefile.am index 4e311d4384..24acf1c8eb 100644 --- a/gprof/Makefile.am +++ b/gprof/Makefile.am @@ -33,11 +33,10 @@ noinst_HEADERS = \ corefile.h gmon.h gmon_io.h gmon_out.h gprof.h hertz.h hist.h \ search_list.h source.h sym_ids.h symtab.h utils.h -EXTRA_DIST = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c bbconv.pl - BUILT_SOURCES = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c +EXTRA_DIST = $(BUILT_SOURCES) bbconv.pl $(man_MANS) -diststuff: $(BUILT_SOURCES) info +diststuff: $(BUILT_SOURCES) info $(man_MANS) .m.c: awk -f $(srcdir)/gen-c-prog.awk > ./$*.c \ @@ -61,13 +60,13 @@ man_MANS = gprof.1 # Build the man page from the texinfo file # The sed command removes the no-adjust Nroff command so that # the man output looks standard. -$(srcdir)/gprof.1: $(srcdir)/gprof.texi - touch $(srcdir)/gprof.1 +gprof.1: $(srcdir)/gprof.texi + touch $@ -$(TEXI2POD) $(MANCONF) -Dgprof < $(srcdir)/gprof.texi > gprof.pod -($(POD2MAN) gprof.pod | \ - sed -e '/^.if n .na/d' > $(srcdir)/gprof.1.T$$$$ && \ - mv -f $(srcdir)/gprof.1.T$$$$ $(srcdir)/gprof.1) || \ - (rm -f $(srcdir)/gprof.1.T$$$$ && exit 1) + sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || \ + (rm -f $@.T$$$$ && exit 1) rm -f gprof.pod # Targets to rebuild dependencies in this Makefile. diff --git a/gprof/Makefile.in b/gprof/Makefile.in index aca0211395..dc060131b2 100644 --- a/gprof/Makefile.in +++ b/gprof/Makefile.in @@ -135,9 +135,8 @@ noinst_HEADERS = \ search_list.h source.h sym_ids.h symtab.h utils.h -EXTRA_DIST = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c bbconv.pl - BUILT_SOURCES = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c +EXTRA_DIST = $(BUILT_SOURCES) bbconv.pl $(man_MANS) POTFILES = $(sources) $(noinst_HEADERS) @@ -193,7 +192,7 @@ acconfig.h acinclude.m4 aclocal.m4 configure configure.in gconfig.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) -TAR = tar +TAR = gtar GZIP_ENV = --best SOURCES = $(gprof_SOURCES) OBJECTS = $(gprof_OBJECTS) @@ -712,7 +711,7 @@ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean -diststuff: $(BUILT_SOURCES) info +diststuff: $(BUILT_SOURCES) info $(man_MANS) .m.c: awk -f $(srcdir)/gen-c-prog.awk > ./$*.c \ @@ -725,13 +724,13 @@ po/POTFILES.in: @MAINT@ Makefile # Build the man page from the texinfo file # The sed command removes the no-adjust Nroff command so that # the man output looks standard. -$(srcdir)/gprof.1: $(srcdir)/gprof.texi - touch $(srcdir)/gprof.1 +gprof.1: $(srcdir)/gprof.texi + touch $@ -$(TEXI2POD) $(MANCONF) -Dgprof < $(srcdir)/gprof.texi > gprof.pod -($(POD2MAN) gprof.pod | \ - sed -e '/^.if n .na/d' > $(srcdir)/gprof.1.T$$$$ && \ - mv -f $(srcdir)/gprof.1.T$$$$ $(srcdir)/gprof.1) || \ - (rm -f $(srcdir)/gprof.1.T$$$$ && exit 1) + sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || \ + (rm -f $@.T$$$$ && exit 1) rm -f gprof.pod # Targets to rebuild dependencies in this Makefile. diff --git a/gprof/gprof.1 b/gprof/gprof.1 deleted file mode 100644 index fd8effcf81..0000000000 --- a/gprof/gprof.1 +++ /dev/null @@ -1,593 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Tue Jun 12 14:06:00 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "GPROF 1" -.TH GPROF 1 "binutils-2.11.90" "2001-06-12" "GNU" -.UC -.SH "NAME" -gprof \- display call graph profile data -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -gprof [ \-[abcDhilLsTvwxyz] ] [ \-[ACeEfFJnNOpPqQZ][\fIname\fR] ] - [ \-I \fIdirs\fR ] [ \-d[\fInum\fR] ] [ \-k \fIfrom/to\fR ] - [ \-m \fImin-count\fR ] [ \-t \fItable-length\fR ] - [ \-\-[no-]annotated-source[=\fIname\fR] ] - [ \-\-[no-]exec-counts[=\fIname\fR] ] - [ \-\-[no-]flat-profile[=\fIname\fR] ] [ \-\-[no-]graph[=\fIname\fR] ] - [ \-\-[no-]time=\fIname\fR] [ \-\-all-lines ] [ \-\-brief ] - [ \-\-debug[=\fIlevel\fR] ] [ \-\-function-ordering ] - [ \-\-file-ordering ] [ \-\-directory-path=\fIdirs\fR ] - [ \-\-display-unused-functions ] [ \-\-file-format=\fIname\fR ] - [ \-\-file-info ] [ \-\-help ] [ \-\-line ] [ \-\-min-count=\fIn\fR ] - [ \-\-no-static ] [ \-\-print-path ] [ \-\-separate-files ] - [ \-\-static-call-graph ] [ \-\-sum ] [ \-\-table-length=\fIlen\fR ] - [ \-\-traditional ] [ \-\-version ] [ \-\-width=\fIn\fR ] - [ \-\-ignore-non-functions ] [ \-\-demangle[=\fI\s-1STYLE\s0\fR] ] - [ \-\-no-demangle ] [ \fIimage-file\fR ] [ \fIprofile-file\fR ... ] -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -\&\f(CW\*(C`gprof\*(C'\fR produces an execution profile of C, Pascal, or Fortran77 -programs. The effect of called routines is incorporated in the profile -of each caller. The profile data is taken from the call graph profile file -(\fIgmon.out\fR default) which is created by programs -that are compiled with the \fB\-pg\fR option of -\&\f(CW\*(C`cc\*(C'\fR, \f(CW\*(C`pc\*(C'\fR, and \f(CW\*(C`f77\*(C'\fR. -The \fB\-pg\fR option also links in versions of the library routines -that are compiled for profiling. \f(CW\*(C`Gprof\*(C'\fR reads the given object -file (the default is \f(CW\*(C`a.out\*(C'\fR) and establishes the relation between -its symbol table and the call graph profile from \fIgmon.out\fR. -If more than one profile file is specified, the \f(CW\*(C`gprof\*(C'\fR -output shows the sum of the profile information in the given profile files. -.PP -\&\f(CW\*(C`Gprof\*(C'\fR calculates the amount of time spent in each routine. -Next, these times are propagated along the edges of the call graph. -Cycles are discovered, and calls into a cycle are made to share the time -of the cycle. -.PP -Several forms of output are available from the analysis. -.PP -The \fIflat profile\fR shows how much time your program spent in each function, -and how many times that function was called. If you simply want to know -which functions burn most of the cycles, it is stated concisely here. -.PP -The \fIcall graph\fR shows, for each function, which functions called it, which -other functions it called, and how many times. There is also an estimate -of how much time was spent in the subroutines of each function. This can -suggest places where you might try to eliminate function calls that use a -lot of time. -.PP -The \fIannotated source\fR listing is a copy of the program's -source code, labeled with the number of times each line of the -program was executed. -.SH "OPTIONS" -.IX Header "OPTIONS" -These options specify which of several output formats -\&\f(CW\*(C`gprof\*(C'\fR should produce. -.PP -Many of these options take an optional \fIsymspec\fR to specify -functions to be included or excluded. These options can be -specified multiple times, with different symspecs, to include -or exclude sets of symbols. -.PP -Specifying any of these options overrides the default (\fB\-p \-q\fR), -which prints a flat profile and call graph analysis -for all functions. -.Ip "\f(CW\*(C`\-A[\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "-A[symspec]" -.Ip "\f(CW\*(C`\-\-annotated\-source[=\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "--annotated-source[=symspec]" -The \fB\-A\fR option causes \f(CW\*(C`gprof\*(C'\fR to print annotated source code. -If \fIsymspec\fR is specified, print output only for matching symbols. -.Ip "\f(CW\*(C`\-b\*(C'\fR" 4 -.IX Item "-b" -.Ip "\f(CW\*(C`\-\-brief\*(C'\fR" 4 -.IX Item "--brief" -If the \fB\-b\fR option is given, \f(CW\*(C`gprof\*(C'\fR doesn't print the -verbose blurbs that try to explain the meaning of all of the fields in -the tables. This is useful if you intend to print out the output, or -are tired of seeing the blurbs. -.Ip "\f(CW\*(C`\-C[\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "-C[symspec]" -.Ip "\f(CW\*(C`\-\-exec\-counts[=\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "--exec-counts[=symspec]" -The \fB\-C\fR option causes \f(CW\*(C`gprof\*(C'\fR to -print a tally of functions and the number of times each was called. -If \fIsymspec\fR is specified, print tally only for matching symbols. -.Sp -If the profile data file contains basic-block count records, specifying -the \fB\-l\fR option, along with \fB\-C\fR, will cause basic-block -execution counts to be tallied and displayed. -.Ip "\f(CW\*(C`\-i\*(C'\fR" 4 -.IX Item "-i" -.Ip "\f(CW\*(C`\-\-file\-info\*(C'\fR" 4 -.IX Item "--file-info" -The \fB\-i\fR option causes \f(CW\*(C`gprof\*(C'\fR to display summary information -about the profile data \fIfile\fR\|(s) and then exit. The number of histogram, -call graph, and basic-block count records is displayed. -.Ip "\f(CW\*(C`\-I \f(CIdirs\f(CW\*(C'\fR" 4 -.IX Item "-I dirs" -.Ip "\f(CW\*(C`\-\-directory\-path=\f(CIdirs\f(CW\*(C'\fR" 4 -.IX Item "--directory-path=dirs" -The \fB\-I\fR option specifies a list of search directories in -which to find source files. Environment variable \fI\s-1GPROF_PATH\s0\fR -can also be used to convey this information. -Used mostly for annotated source output. -.Ip "\f(CW\*(C`\-J[\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "-J[symspec]" -.Ip "\f(CW\*(C`\-\-no\-annotated\-source[=\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "--no-annotated-source[=symspec]" -The \fB\-J\fR option causes \f(CW\*(C`gprof\*(C'\fR not to -print annotated source code. -If \fIsymspec\fR is specified, \f(CW\*(C`gprof\*(C'\fR prints annotated source, -but excludes matching symbols. -.Ip "\f(CW\*(C`\-L\*(C'\fR" 4 -.IX Item "-L" -.Ip "\f(CW\*(C`\-\-print\-path\*(C'\fR" 4 -.IX Item "--print-path" -Normally, source filenames are printed with the path -component suppressed. The \fB\-L\fR option causes \f(CW\*(C`gprof\*(C'\fR -to print the full pathname of -source filenames, which is determined -from symbolic debugging information in the image file -and is relative to the directory in which the compiler -was invoked. -.Ip "\f(CW\*(C`\-p[\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "-p[symspec]" -.Ip "\f(CW\*(C`\-\-flat\-profile[=\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "--flat-profile[=symspec]" -The \fB\-p\fR option causes \f(CW\*(C`gprof\*(C'\fR to print a flat profile. -If \fIsymspec\fR is specified, print flat profile only for matching symbols. -.Ip "\f(CW\*(C`\-P[\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "-P[symspec]" -.Ip "\f(CW\*(C`\-\-no\-flat\-profile[=\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "--no-flat-profile[=symspec]" -The \fB\-P\fR option causes \f(CW\*(C`gprof\*(C'\fR to suppress printing a flat profile. -If \fIsymspec\fR is specified, \f(CW\*(C`gprof\*(C'\fR prints a flat profile, -but excludes matching symbols. -.Ip "\f(CW\*(C`\-q[\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "-q[symspec]" -.Ip "\f(CW\*(C`\-\-graph[=\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "--graph[=symspec]" -The \fB\-q\fR option causes \f(CW\*(C`gprof\*(C'\fR to print the call graph analysis. -If \fIsymspec\fR is specified, print call graph only for matching symbols -and their children. -.Ip "\f(CW\*(C`\-Q[\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "-Q[symspec]" -.Ip "\f(CW\*(C`\-\-no\-graph[=\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "--no-graph[=symspec]" -The \fB\-Q\fR option causes \f(CW\*(C`gprof\*(C'\fR to suppress printing the -call graph. -If \fIsymspec\fR is specified, \f(CW\*(C`gprof\*(C'\fR prints a call graph, -but excludes matching symbols. -.Ip "\f(CW\*(C`\-y\*(C'\fR" 4 -.IX Item "-y" -.Ip "\f(CW\*(C`\-\-separate\-files\*(C'\fR" 4 -.IX Item "--separate-files" -This option affects annotated source output only. -Normally, \f(CW\*(C`gprof\*(C'\fR prints annotated source files -to standard-output. If this option is specified, -annotated source for a file named \fIpath/\fIfilename\fI\fR -is generated in the file \fI\fIfilename\fI\-ann\fR. If the underlying -filesystem would truncate \fI\fIfilename\fI\-ann\fR so that it -overwrites the original \fI\fIfilename\fI\fR, \f(CW\*(C`gprof\*(C'\fR generates -annotated source in the file \fI\fIfilename\fI.ann\fR instead (if the -original file name has an extension, that extension is \fIreplaced\fR -with \fI.ann\fR). -.Ip "\f(CW\*(C`\-Z[\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "-Z[symspec]" -.Ip "\f(CW\*(C`\-\-no\-exec\-counts[=\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "--no-exec-counts[=symspec]" -The \fB\-Z\fR option causes \f(CW\*(C`gprof\*(C'\fR not to -print a tally of functions and the number of times each was called. -If \fIsymspec\fR is specified, print tally, but exclude matching symbols. -.Ip "\f(CW\*(C`\-\-function\-ordering\*(C'\fR" 4 -.IX Item "--function-ordering" -The \fB\*(--function-ordering\fR option causes \f(CW\*(C`gprof\*(C'\fR to print a -suggested function ordering for the program based on profiling data. -This option suggests an ordering which may improve paging, tlb and -cache behavior for the program on systems which support arbitrary -ordering of functions in an executable. -.Sp -The exact details of how to force the linker to place functions -in a particular order is system dependent and out of the scope of this -manual. -.Ip "\f(CW\*(C`\-\-file\-ordering \f(CImap_file\f(CW\*(C'\fR" 4 -.IX Item "--file-ordering map_file" -The \fB\*(--file-ordering\fR option causes \f(CW\*(C`gprof\*(C'\fR to print a -suggested .o link line ordering for the program based on profiling data. -This option suggests an ordering which may improve paging, tlb and -cache behavior for the program on systems which do not support arbitrary -ordering of functions in an executable. -.Sp -Use of the \fB\-a\fR argument is highly recommended with this option. -.Sp -The \fImap_file\fR argument is a pathname to a file which provides -function name to object file mappings. The format of the file is similar to -the output of the program \f(CW\*(C`nm\*(C'\fR. -.Sp -.Vb 8 -\& c-parse.o:00000000 T yyparse -\& c-parse.o:00000004 C yyerrflag -\& c-lang.o:00000000 T maybe_objc_method_name -\& c-lang.o:00000000 T print_lang_statistics -\& c-lang.o:00000000 T recognize_objc_keyword -\& c-decl.o:00000000 T print_lang_identifier -\& c-decl.o:00000000 T print_lang_type -\& ... -.Ve -To create a \fImap_file\fR with \s-1GNU\s0 \f(CW\*(C`nm\*(C'\fR, type a command like -\&\f(CW\*(C`nm \-\-extern\-only \-\-defined\-only \-v \-\-print\-file\-name program\-name\*(C'\fR. -.Ip "\f(CW\*(C`\-T\*(C'\fR" 4 -.IX Item "-T" -.Ip "\f(CW\*(C`\-\-traditional\*(C'\fR" 4 -.IX Item "--traditional" -The \fB\-T\fR option causes \f(CW\*(C`gprof\*(C'\fR to print its output in -``traditional'' \s-1BSD\s0 style. -.Ip "\f(CW\*(C`\-w \f(CIwidth\f(CW\*(C'\fR" 4 -.IX Item "-w width" -.Ip "\f(CW\*(C`\-\-width=\f(CIwidth\f(CW\*(C'\fR" 4 -.IX Item "--width=width" -Sets width of output lines to \fIwidth\fR. -Currently only used when printing the function index at the bottom -of the call graph. -.Ip "\f(CW\*(C`\-x\*(C'\fR" 4 -.IX Item "-x" -.Ip "\f(CW\*(C`\-\-all\-lines\*(C'\fR" 4 -.IX Item "--all-lines" -This option affects annotated source output only. -By default, only the lines at the beginning of a basic-block -are annotated. If this option is specified, every line in -a basic-block is annotated by repeating the annotation for the -first line. This behavior is similar to \f(CW\*(C`tcov\*(C'\fR's \fB\-a\fR. -.Ip "\f(CW\*(C`\-\-demangle[=\f(CIstyle\f(CW]\*(C'\fR" 4 -.IX Item "--demangle[=style]" -.Ip "\f(CW\*(C`\-\-no\-demangle\*(C'\fR" 4 -.IX Item "--no-demangle" -These options control whether \*(C+ symbol names should be demangled when -printing output. The default is to demangle symbols. The -\&\f(CW\*(C`\-\-no\-demangle\*(C'\fR option may be used to turn off demangling. Different -compilers have different mangling styles. The optional demangling style -argument can be used to choose an appropriate demangling style for your -compiler. -.Sh "Analysis Options" -.IX Subsection "Analysis Options" -.Ip "\f(CW\*(C`\-a\*(C'\fR" 4 -.IX Item "-a" -.Ip "\f(CW\*(C`\-\-no\-static\*(C'\fR" 4 -.IX Item "--no-static" -The \fB\-a\fR option causes \f(CW\*(C`gprof\*(C'\fR to suppress the printing of -statically declared (private) functions. (These are functions whose -names are not listed as global, and which are not visible outside the -file/function/block where they were defined.) Time spent in these -functions, calls to/from them, etc, will all be attributed to the -function that was loaded directly before it in the executable file. -This option affects both the flat profile and the call graph. -.Ip "\f(CW\*(C`\-c\*(C'\fR" 4 -.IX Item "-c" -.Ip "\f(CW\*(C`\-\-static\-call\-graph\*(C'\fR" 4 -.IX Item "--static-call-graph" -The \fB\-c\fR option causes the call graph of the program to be -augmented by a heuristic which examines the text space of the object -file and identifies function calls in the binary machine code. -Since normal call graph records are only generated when functions are -entered, this option identifies children that could have been called, -but never were. Calls to functions that were not compiled with -profiling enabled are also identified, but only if symbol table -entries are present for them. -Calls to dynamic library routines are typically \fInot\fR found -by this option. -Parents or children identified via this heuristic -are indicated in the call graph with call counts of \fB0\fR. -.Ip "\f(CW\*(C`\-D\*(C'\fR" 4 -.IX Item "-D" -.Ip "\f(CW\*(C`\-\-ignore\-non\-functions\*(C'\fR" 4 -.IX Item "--ignore-non-functions" -The \fB\-D\fR option causes \f(CW\*(C`gprof\*(C'\fR to ignore symbols which -are not known to be functions. This option will give more accurate -profile data on systems where it is supported (Solaris and \s-1HPUX\s0 for -example). -.Ip "\f(CW\*(C`\-k \f(CIfrom\f(CW/\f(CIto\f(CW\*(C'\fR" 4 -.IX Item "-k from/to" -The \fB\-k\fR option allows you to delete from the call graph any arcs from -symbols matching symspec \fIfrom\fR to those matching symspec \fIto\fR. -.Ip "\f(CW\*(C`\-l\*(C'\fR" 4 -.IX Item "-l" -.Ip "\f(CW\*(C`\-\-line\*(C'\fR" 4 -.IX Item "--line" -The \fB\-l\fR option enables line-by-line profiling, which causes -histogram hits to be charged to individual source code lines, -instead of functions. -If the program was compiled with basic-block counting enabled, -this option will also identify how many times each line of -code was executed. -While line-by-line profiling can help isolate where in a large function -a program is spending its time, it also significantly increases -the running time of \f(CW\*(C`gprof\*(C'\fR, and magnifies statistical -inaccuracies. -.Ip "\f(CW\*(C`\-m \f(CInum\f(CW\*(C'\fR" 4 -.IX Item "-m num" -.Ip "\f(CW\*(C`\-\-min\-count=\f(CInum\f(CW\*(C'\fR" 4 -.IX Item "--min-count=num" -This option affects execution count output only. -Symbols that are executed less than \fInum\fR times are suppressed. -.Ip "\f(CW\*(C`\-n[\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "-n[symspec]" -.Ip "\f(CW\*(C`\-\-time[=\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "--time[=symspec]" -The \fB\-n\fR option causes \f(CW\*(C`gprof\*(C'\fR, in its call graph analysis, -to only propagate times for symbols matching \fIsymspec\fR. -.Ip "\f(CW\*(C`\-N[\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "-N[symspec]" -.Ip "\f(CW\*(C`\-\-no\-time[=\f(CIsymspec\f(CW]\*(C'\fR" 4 -.IX Item "--no-time[=symspec]" -The \fB\-n\fR option causes \f(CW\*(C`gprof\*(C'\fR, in its call graph analysis, -not to propagate times for symbols matching \fIsymspec\fR. -.Ip "\f(CW\*(C`\-z\*(C'\fR" 4 -.IX Item "-z" -.Ip "\f(CW\*(C`\-\-display\-unused\-functions\*(C'\fR" 4 -.IX Item "--display-unused-functions" -If you give the \fB\-z\fR option, \f(CW\*(C`gprof\*(C'\fR will mention all -functions in the flat profile, even those that were never called, and -that had no time spent in them. This is useful in conjunction with the -\&\fB\-c\fR option for discovering which routines were never called. -.Sh "Miscellaneous Options" -.IX Subsection "Miscellaneous Options" -.Ip "\f(CW\*(C`\-d[\f(CInum\f(CW]\*(C'\fR" 4 -.IX Item "-d[num]" -.Ip "\f(CW\*(C`\-\-debug[=\f(CInum\f(CW]\*(C'\fR" 4 -.IX Item "--debug[=num]" -The \fB\-d\fR \fInum\fR option specifies debugging options. -If \fInum\fR is not specified, enable all debugging. -.Ip "\f(CW\*(C`\-O\f(CIname\f(CW\*(C'\fR" 4 -.IX Item "-Oname" -.Ip "\f(CW\*(C`\-\-file\-format=\f(CIname\f(CW\*(C'\fR" 4 -.IX Item "--file-format=name" -Selects the format of the profile data files. Recognized formats are -\&\fBauto\fR (the default), \fBbsd\fR, \fB4.4bsd\fR, \fBmagic\fR, and -\&\fBprof\fR (not yet supported). -.Ip "\f(CW\*(C`\-s\*(C'\fR" 4 -.IX Item "-s" -.Ip "\f(CW\*(C`\-\-sum\*(C'\fR" 4 -.IX Item "--sum" -The \fB\-s\fR option causes \f(CW\*(C`gprof\*(C'\fR to summarize the information -in the profile data files it read in, and write out a profile data -file called \fIgmon.sum\fR, which contains all the information from -the profile data files that \f(CW\*(C`gprof\*(C'\fR read in. The file \fIgmon.sum\fR -may be one of the specified input files; the effect of this is to -merge the data in the other input files into \fIgmon.sum\fR. -.Sp -Eventually you can run \f(CW\*(C`gprof\*(C'\fR again without \fB\-s\fR to analyze the -cumulative data in the file \fIgmon.sum\fR. -.Ip "\f(CW\*(C`\-v\*(C'\fR" 4 -.IX Item "-v" -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -The \fB\-v\fR flag causes \f(CW\*(C`gprof\*(C'\fR to print the current version -number, and then exit. -.Sh "Deprecated Options" -.IX Subsection "Deprecated Options" -These options have been replaced with newer versions that use symspecs. -.Ip "\f(CW\*(C`\-e \f(CIfunction_name\f(CW\*(C'\fR" 4 -.IX Item "-e function_name" -The \fB\-e\fR \fIfunction\fR option tells \f(CW\*(C`gprof\*(C'\fR to not print -information about the function \fIfunction_name\fR (and its -children...) in the call graph. The function will still be listed -as a child of any functions that call it, but its index number will be -shown as \fB[not printed]\fR. More than one \fB\-e\fR option may be -given; only one \fIfunction_name\fR may be indicated with each \fB\-e\fR -option. -.Ip "\f(CW\*(C`\-E \f(CIfunction_name\f(CW\*(C'\fR" 4 -.IX Item "-E function_name" -The \f(CW\*(C`\-E \f(CIfunction\f(CW\*(C'\fR option works like the \f(CW\*(C`\-e\*(C'\fR option, but -time spent in the function (and children who were not called from -anywhere else), will not be used to compute the percentages-of-time for -the call graph. More than one \fB\-E\fR option may be given; only one -\&\fIfunction_name\fR may be indicated with each \fB\-E\fR option. -.Ip "\f(CW\*(C`\-f \f(CIfunction_name\f(CW\*(C'\fR" 4 -.IX Item "-f function_name" -The \fB\-f\fR \fIfunction\fR option causes \f(CW\*(C`gprof\*(C'\fR to limit the -call graph to the function \fIfunction_name\fR and its children (and -their children...). More than one \fB\-f\fR option may be given; -only one \fIfunction_name\fR may be indicated with each \fB\-f\fR -option. -.Ip "\f(CW\*(C`\-F \f(CIfunction_name\f(CW\*(C'\fR" 4 -.IX Item "-F function_name" -The \fB\-F\fR \fIfunction\fR option works like the \f(CW\*(C`\-f\*(C'\fR option, but -only time spent in the function and its children (and their -children...) will be used to determine total-time and -percentages-of-time for the call graph. More than one \fB\-F\fR option -may be given; only one \fIfunction_name\fR may be indicated with each -\&\fB\-F\fR option. The \fB\-F\fR option overrides the \fB\-E\fR option. -.SH "FILES" -.IX Header "FILES" -.Ip "\f(CW\*(C`\f(CIa.out\f(CW\*(C'\fR" 4 -.IX Item "a.out" -the namelist and text space. -.Ip "\f(CW\*(C`\f(CIgmon.out\f(CW\*(C'\fR" 4 -.IX Item "gmon.out" -dynamic call graph and profile. -.Ip "\f(CW\*(C`\f(CIgmon.sum\f(CW\*(C'\fR" 4 -.IX Item "gmon.sum" -summarized dynamic call graph and profile. -.SH "BUGS" -.IX Header "BUGS" -The granularity of the sampling is shown, but remains -statistical at best. -We assume that the time for each execution of a function -can be expressed by the total time for the function divided -by the number of times the function is called. -Thus the time propagated along the call graph arcs to the function's -parents is directly proportional to the number of times that -arc is traversed. -.PP -Parents that are not themselves profiled will have the time of -their profiled children propagated to them, but they will appear -to be spontaneously invoked in the call graph listing, and will -not have their time propagated further. -Similarly, signal catchers, even though profiled, will appear -to be spontaneous (although for more obscure reasons). -Any profiled children of signal catchers should have their times -propagated properly, unless the signal catcher was invoked during -the execution of the profiling routine, in which case all is lost. -.PP -The profiled program must call \f(CW\*(C`exit\*(C'\fR(2) -or return normally for the profiling information to be saved -in the \fIgmon.out\fR file. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -\&\fImonitor\fR\|(3), \fIprofil\fR\|(2), \fIcc\fR\|(1), \fIprof\fR\|(1), and the Info entry for \fIgprof\fR. -.PP -``An Execution Profiler for Modular Programs'', -by S. Graham, P. Kessler, M. McKusick; -Software \- Practice and Experience, -Vol. 13, pp. 671\-685, 1983. -.PP -``gprof: A Call Graph Execution Profiler'', -by S. Graham, P. Kessler, M. McKusick; -Proceedings of the \s-1SIGPLAN\s0 '82 Symposium on Compiler Construction, -\&\s-1SIGPLAN\s0 Notices, Vol. 17, No 6, pp. 120\-126, June 1982. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (C) 1988, 92, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/ld/ChangeLog b/ld/ChangeLog index a12c2d8690..b2c5299bff 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,11 @@ +2001-06-18 H.J. Lu <hjl@gnu.org> + + * Makefile.am (ld.1): Remove the prefix `$(srcdir)/'. + (diststuff): Add $(MANS). + * Makefile.in: Regenerated. + + * ld.1: Removed. + 2001-06-18 Hans-Peter Nilsson <hp@axis.com> * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): diff --git a/ld/Makefile.am b/ld/Makefile.am index 49b2375a0d..27c5963485 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -934,13 +934,14 @@ ld.dvi: $(srcdir)/ld.texinfo configdoc.texi ldver.texi # Build the man page from the texinfo file # The sed command removes the no-adjust Nroff command so that # the man output looks standard. -$(srcdir)/ld.1: $(srcdir)/ld.texinfo - touch $(srcdir)/ld.1 +ld.1: $(srcdir)/ld.texinfo + touch $@ -$(TEXI2POD) $(MANCONF) < $(srcdir)/ld.texinfo > ld.pod -($(POD2MAN) ld.pod | \ - sed -e '/^.if n .na/d' > $(srcdir)/ld.1.T$$$$ && \ - mv -f $(srcdir)/ld.1.T$$$$ $(srcdir)/ld.1) || \ - (rm -f $(srcdir)/ld.1.T$$$$ && exit 1) + sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || \ + (rm -f $@.T$$$$ && exit 1) + rm -f ld.pod MAINTAINERCLEANFILES = ldver.texi @@ -979,8 +980,8 @@ install-data-local: # Stuff that should be included in a distribution. The diststuff # target is run by the taz target in ../Makefile.in. -LDDISTSTUFF = ldgram.c ldgram.h ldlex.c -diststuff: $(LDDISTSTUFF) info +EXTRA_DIST = ldgram.c ldgram.h ldlex.c $(man_MANS) +diststuff: info $(EXTRA_DIST) DISTCLEANFILES = tdirs site.exp site.bak stringify.sed distclean-local: diff --git a/ld/Makefile.in b/ld/Makefile.in index 22fc273062..fdef9309ee 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -431,7 +431,7 @@ CLEANFILES = dep.sed DEP DEPA DEP1 DEP2 # Stuff that should be included in a distribution. The diststuff # target is run by the taz target in ../Makefile.in. -LDDISTSTUFF = ldgram.c ldgram.h ldlex.c +EXTRA_DIST = ldgram.c ldgram.h ldlex.c $(man_MANS) DISTCLEANFILES = tdirs site.exp site.bak stringify.sed ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -475,7 +475,7 @@ deffilep.c ldgram.c ldlex.c DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) -TAR = tar +TAR = gtar GZIP_ENV = --best SOURCES = $(ld_new_SOURCES) $(EXTRA_ld_new_SOURCES) OBJECTS = $(ld_new_OBJECTS) @@ -1637,13 +1637,14 @@ ld.dvi: $(srcdir)/ld.texinfo configdoc.texi ldver.texi # Build the man page from the texinfo file # The sed command removes the no-adjust Nroff command so that # the man output looks standard. -$(srcdir)/ld.1: $(srcdir)/ld.texinfo - touch $(srcdir)/ld.1 +ld.1: $(srcdir)/ld.texinfo + touch $@ -$(TEXI2POD) $(MANCONF) < $(srcdir)/ld.texinfo > ld.pod -($(POD2MAN) ld.pod | \ - sed -e '/^.if n .na/d' > $(srcdir)/ld.1.T$$$$ && \ - mv -f $(srcdir)/ld.1.T$$$$ $(srcdir)/ld.1) || \ - (rm -f $(srcdir)/ld.1.T$$$$ && exit 1) + sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || \ + (rm -f $@.T$$$$ && exit 1) + rm -f ld.pod # We want to reconfigure if configure.host or configure.tgt changes. config.status: $(srcdir)/configure $(srcdir)/configure.host $(srcdir)/configure.tgt @@ -1673,7 +1674,7 @@ install-data-local: for f in ldscripts/*; do \ $(INSTALL_DATA) $$f $(scriptdir)/$$f ; \ done -diststuff: $(LDDISTSTUFF) info +diststuff: info $(EXTRA_DIST) distclean-local: rm -rf ldscripts diff --git a/ld/ld.1 b/ld/ld.1 deleted file mode 100644 index 21d243a29a..0000000000 --- a/ld/ld.1 +++ /dev/null @@ -1,1437 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Tue May 22 15:43:56 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "LD 1" -.TH LD 1 "binutils-2.11.90" "2001-05-22" "GNU" -.UC -.SH "NAME" -ld \- Using \s-1LD\s0, the \s-1GNU\s0 linker -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -ld [ options ] objfile... -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -\&\f(CW\*(C`ld\*(C'\fR combines a number of object and archive files, relocates -their data and ties up symbol references. Usually the last step in -compiling a program is to run \f(CW\*(C`ld\*(C'\fR. -.PP -\&\f(CW\*(C`ld\*(C'\fR accepts Linker Command Language files written in -a superset of \s-1AT&T\s0's Link Editor Command Language syntax, -to provide explicit and total control over the linking process. -.PP -This man page does not describe the command language; see the -\&\f(CW\*(C`ld\*(C'\fR entry in \f(CW\*(C`info\*(C'\fR, or the manual -ld: the \s-1GNU\s0 linker, for full details on the command language and -on other aspects of the \s-1GNU\s0 linker. -.PP -This version of \f(CW\*(C`ld\*(C'\fR uses the general purpose \s-1BFD\s0 libraries -to operate on object files. This allows \f(CW\*(C`ld\*(C'\fR to read, combine, and -write object files in many different formats\-\-\-for example, \s-1COFF\s0 or -\&\f(CW\*(C`a.out\*(C'\fR. Different formats may be linked together to produce any -available kind of object file. -.PP -Aside from its flexibility, the \s-1GNU\s0 linker is more helpful than other -linkers in providing diagnostic information. Many linkers abandon -execution immediately upon encountering an error; whenever possible, -\&\f(CW\*(C`ld\*(C'\fR continues executing, allowing you to identify other errors -(or, in some cases, to get an output file in spite of the error). -.PP -The \s-1GNU\s0 linker \f(CW\*(C`ld\*(C'\fR is meant to cover a broad range of situations, -and to be as compatible as possible with other linkers. As a result, -you have many choices to control its behavior. -.SH "OPTIONS" -.IX Header "OPTIONS" -The linker supports a plethora of command-line options, but in actual -practice few of them are used in any particular context. -For instance, a frequent use of \f(CW\*(C`ld\*(C'\fR is to link standard Unix -object files on a standard, supported Unix system. On such a system, to -link a file \f(CW\*(C`hello.o\*(C'\fR: -.PP -.Vb 1 -\& ld -o I<output> /lib/crt0.o hello.o -lc -.Ve -This tells \f(CW\*(C`ld\*(C'\fR to produce a file called \fIoutput\fR as the -result of linking the file \f(CW\*(C`/lib/crt0.o\*(C'\fR with \f(CW\*(C`hello.o\*(C'\fR and -the library \f(CW\*(C`libc.a\*(C'\fR, which will come from the standard search -directories. (See the discussion of the \fB\-l\fR option below.) -.PP -Some of the command-line options to \f(CW\*(C`ld\*(C'\fR may be specified at any -point in the command line. However, options which refer to files, such -as \fB\-l\fR or \fB\-T\fR, cause the file to be read at the point at -which the option appears in the command line, relative to the object -files and other file options. Repeating non-file options with a -different argument will either have no further effect, or override prior -occurrences (those further to the left on the command line) of that -option. Options which may be meaningfully specified more than once are -noted in the descriptions below. -.PP -Non-option arguments are object files or archives which are to be linked -together. They may follow, precede, or be mixed in with command-line -options, except that an object file argument may not be placed between -an option and its argument. -.PP -Usually the linker is invoked with at least one object file, but you can -specify other forms of binary input files using \fB\-l\fR, \fB\-R\fR, -and the script command language. If \fIno\fR binary input files at all -are specified, the linker does not produce any output, and issues the -message \fBNo input files\fR. -.PP -If the linker can not recognize the format of an object file, it will -assume that it is a linker script. A script specified in this way -augments the main linker script used for the link (either the default -linker script or the one specified by using \fB\-T\fR). This feature -permits the linker to link against a file which appears to be an object -or an archive, but actually merely defines some symbol values, or uses -\&\f(CW\*(C`INPUT\*(C'\fR or \f(CW\*(C`GROUP\*(C'\fR to load other objects. Note that -specifying a script in this way should only be used to augment the main -linker script; if you want to use some command that logically can only -appear once, such as the \f(CW\*(C`SECTIONS\*(C'\fR or \f(CW\*(C`MEMORY\*(C'\fR command, you -must replace the default linker script using the \fB\-T\fR option. -.PP -For options whose names are a single letter, -option arguments must either follow the option letter without intervening -whitespace, or be given as separate arguments immediately following the -option that requires them. -.PP -For options whose names are multiple letters, either one dash or two can -precede the option name; for example, \fB\-trace-symbol\fR and -\&\fB\*(--trace-symbol\fR are equivalent. Note \- there is one exception to -this rule. Multiple letter options that start with a lower case 'o' can -only be preceeded by two dashes. This is to reduce confusion with the -\&\fB\-o\fR option. So for example \fB\-omagic\fR sets the output file -name to \fBmagic\fR whereas \fB\*(--omagic\fR sets the \s-1NMAGIC\s0 flag on the -output. -.PP -Arguments to multiple-letter options must either be separated from the -option name by an equals sign, or be given as separate arguments -immediately following the option that requires them. For example, -\&\fB\*(--trace-symbol foo\fR and \fB\*(--trace-symbol=foo\fR are equivalent. -Unique abbreviations of the names of multiple-letter options are -accepted. -.PP -Note \- if the linker is being invoked indirectly, via a compiler driver -(eg \fBgcc\fR) then all the linker command line options should be -prefixed by \fB\-Wl,\fR (or whatever is appropriate for the particular -compiler driver) like this: -.PP -.Vb 1 -\& gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup -.Ve -This is important, because otherwise the compiler driver program may -silently drop the linker options, resulting in a bad link. -.PP -Here is a table of the generic command line switches accepted by the \s-1GNU\s0 -linker: -.Ip "\f(CW\*(C`\-a\f(CIkeyword\f(CW\*(C'\fR" 4 -.IX Item "-akeyword" -This option is supported for \s-1HP/UX\s0 compatibility. The \fIkeyword\fR -argument must be one of the strings \fBarchive\fR, \fBshared\fR, or -\&\fBdefault\fR. \fB\-aarchive\fR is functionally equivalent to -\&\fB\-Bstatic\fR, and the other two keywords are functionally equivalent -to \fB\-Bdynamic\fR. This option may be used any number of times. -.Ip "\f(CW\*(C`\-A\f(CIarchitecture\f(CW\*(C'\fR" 4 -.IX Item "-Aarchitecture" -.Ip "\f(CW\*(C`\-\-architecture=\f(CIarchitecture\f(CW\*(C'\fR" 4 -.IX Item "--architecture=architecture" -In the current release of \f(CW\*(C`ld\*(C'\fR, this option is useful only for the -Intel 960 family of architectures. In that \f(CW\*(C`ld\*(C'\fR configuration, the -\&\fIarchitecture\fR argument identifies the particular architecture in -the 960 family, enabling some safeguards and modifying the -archive-library search path. -.Sp -Future releases of \f(CW\*(C`ld\*(C'\fR may support similar functionality for -other architecture families. -.Ip "\f(CW\*(C`\-b \f(CIinput\-format\f(CW\*(C'\fR" 4 -.IX Item "-b input-format" -.Ip "\f(CW\*(C`\-\-format=\f(CIinput\-format\f(CW\*(C'\fR" 4 -.IX Item "--format=input-format" -\&\f(CW\*(C`ld\*(C'\fR may be configured to support more than one kind of object -file. If your \f(CW\*(C`ld\*(C'\fR is configured this way, you can use the -\&\fB\-b\fR option to specify the binary format for input object files -that follow this option on the command line. Even when \f(CW\*(C`ld\*(C'\fR is -configured to support alternative object formats, you don't usually need -to specify this, as \f(CW\*(C`ld\*(C'\fR should be configured to expect as a -default input format the most usual format on each machine. -\&\fIinput-format\fR is a text string, the name of a particular format -supported by the \s-1BFD\s0 libraries. (You can list the available binary -formats with \fBobjdump \-i\fR.) -.Sp -You may want to use this option if you are linking files with an unusual -binary format. You can also use \fB\-b\fR to switch formats explicitly (when -linking object files of different formats), by including -\&\fB\-b\fR \fIinput-format\fR before each group of object files in a -particular format. -.Sp -The default format is taken from the environment variable -\&\f(CW\*(C`GNUTARGET\*(C'\fR. -.Sp -You can also define the input format from a script, using the command -\&\f(CW\*(C`TARGET\*(C'\fR; -.Ip "\f(CW\*(C`\-c \f(CIMRI\-commandfile\f(CW\*(C'\fR" 4 -.IX Item "-c MRI-commandfile" -.Ip "\f(CW\*(C`\-\-mri\-script=\f(CIMRI\-commandfile\f(CW\*(C'\fR" 4 -.IX Item "--mri-script=MRI-commandfile" -For compatibility with linkers produced by \s-1MRI\s0, \f(CW\*(C`ld\*(C'\fR accepts script -files written in an alternate, restricted command language, described in -the \s-1MRI\s0 Compatible Script Files section of \s-1GNU\s0 ld documentation. -Introduce \s-1MRI\s0 script files with -the option \fB\-c\fR; use the \fB\-T\fR option to run linker -scripts written in the general-purpose \f(CW\*(C`ld\*(C'\fR scripting language. -If \fIMRI-cmdfile\fR does not exist, \f(CW\*(C`ld\*(C'\fR looks for it in the directories -specified by any \fB\-L\fR options. -.Ip "\f(CW\*(C`\-d\*(C'\fR" 4 -.IX Item "-d" -.Ip "\f(CW\*(C`\-dc\*(C'\fR" 4 -.IX Item "-dc" -.Ip "\f(CW\*(C`\-dp\*(C'\fR" 4 -.IX Item "-dp" -These three options are equivalent; multiple forms are supported for -compatibility with other linkers. They assign space to common symbols -even if a relocatable output file is specified (with \fB\-r\fR). The -script command \f(CW\*(C`FORCE_COMMON_ALLOCATION\*(C'\fR has the same effect. -.Ip "\f(CW\*(C`\-e \f(CIentry\f(CW\*(C'\fR" 4 -.IX Item "-e entry" -.Ip "\f(CW\*(C`\-\-entry=\f(CIentry\f(CW\*(C'\fR" 4 -.IX Item "--entry=entry" -Use \fIentry\fR as the explicit symbol for beginning execution of your -program, rather than the default entry point. If there is no symbol -named \fIentry\fR, the linker will try to parse \fIentry\fR as a number, -and use that as the entry address (the number will be interpreted in -base 10; you may use a leading \fB0x\fR for base 16, or a leading -\&\fB0\fR for base 8). -.Ip "\f(CW\*(C`\-E\*(C'\fR" 4 -.IX Item "-E" -.Ip "\f(CW\*(C`\-\-export\-dynamic\*(C'\fR" 4 -.IX Item "--export-dynamic" -When creating a dynamically linked executable, add all symbols to the -dynamic symbol table. The dynamic symbol table is the set of symbols -which are visible from dynamic objects at run time. -.Sp -If you do not use this option, the dynamic symbol table will normally -contain only those symbols which are referenced by some dynamic object -mentioned in the link. -.Sp -If you use \f(CW\*(C`dlopen\*(C'\fR to load a dynamic object which needs to refer -back to the symbols defined by the program, rather than some other -dynamic object, then you will probably need to use this option when -linking the program itself. -.Ip "\f(CW\*(C`\-EB\*(C'\fR" 4 -.IX Item "-EB" -Link big-endian objects. This affects the default output format. -.Ip "\f(CW\*(C`\-EL\*(C'\fR" 4 -.IX Item "-EL" -Link little-endian objects. This affects the default output format. -.Ip "\f(CW\*(C`\-f\*(C'\fR" 4 -.IX Item "-f" -.Ip "\f(CW\*(C`\-\-auxiliary \f(CIname\f(CW\*(C'\fR" 4 -.IX Item "--auxiliary name" -When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_AUXILIARY\s0 field -to the specified name. This tells the dynamic linker that the symbol -table of the shared object should be used as an auxiliary filter on the -symbol table of the shared object \fIname\fR. -.Sp -If you later link a program against this filter object, then, when you -run the program, the dynamic linker will see the \s-1DT_AUXILIARY\s0 field. If -the dynamic linker resolves any symbols from the filter object, it will -first check whether there is a definition in the shared object -\&\fIname\fR. If there is one, it will be used instead of the definition -in the filter object. The shared object \fIname\fR need not exist. -Thus the shared object \fIname\fR may be used to provide an alternative -implementation of certain functions, perhaps for debugging or for -machine specific performance. -.Sp -This option may be specified more than once. The \s-1DT_AUXILIARY\s0 entries -will be created in the order in which they appear on the command line. -.Ip "\f(CW\*(C`\-F \f(CIname\f(CW\*(C'\fR" 4 -.IX Item "-F name" -.Ip "\f(CW\*(C`\-\-filter \f(CIname\f(CW\*(C'\fR" 4 -.IX Item "--filter name" -When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_FILTER\s0 field to -the specified name. This tells the dynamic linker that the symbol table -of the shared object which is being created should be used as a filter -on the symbol table of the shared object \fIname\fR. -.Sp -If you later link a program against this filter object, then, when you -run the program, the dynamic linker will see the \s-1DT_FILTER\s0 field. The -dynamic linker will resolve symbols according to the symbol table of the -filter object as usual, but it will actually link to the definitions -found in the shared object \fIname\fR. Thus the filter object can be -used to select a subset of the symbols provided by the object -\&\fIname\fR. -.Sp -Some older linkers used the \f(CW\*(C`\-F\*(C'\fR option throughout a compilation -toolchain for specifying object-file format for both input and output -object files. The \s-1GNU\s0 linker uses other mechanisms for this -purpose: the \f(CW\*(C`\-b\*(C'\fR, \f(CW\*(C`\-\-format\*(C'\fR, \f(CW\*(C`\-\-oformat\*(C'\fR options, the -\&\f(CW\*(C`TARGET\*(C'\fR command in linker scripts, and the \f(CW\*(C`GNUTARGET\*(C'\fR -environment variable. The \s-1GNU\s0 linker will ignore the \f(CW\*(C`\-F\*(C'\fR -option when not creating an \s-1ELF\s0 shared object. -.Ip "\f(CW\*(C`\-fini \f(CIname\f(CW\*(C'\fR" 4 -.IX Item "-fini name" -When creating an \s-1ELF\s0 executable or shared object, call \s-1NAME\s0 when the -executable or shared object is unloaded, by setting \s-1DT_FINI\s0 to the -address of the function. By default, the linker uses \f(CW\*(C`_fini\*(C'\fR as -the function to call. -.Ip "\f(CW\*(C`\-g\*(C'\fR" 4 -.IX Item "-g" -Ignored. Provided for compatibility with other tools. -.Ip "\f(CW\*(C`\-G\f(CIvalue\f(CW\*(C'\fR" 4 -.IX Item "-Gvalue" -.Ip "\f(CW\*(C`\-\-gpsize=\f(CIvalue\f(CW\*(C'\fR" 4 -.IX Item "--gpsize=value" -Set the maximum size of objects to be optimized using the \s-1GP\s0 register to -\&\fIsize\fR. This is only meaningful for object file formats such as -\&\s-1MIPS\s0 \s-1ECOFF\s0 which supports putting large and small objects into different -sections. This is ignored for other object file formats. -.Ip "\f(CW\*(C`\-h\f(CIname\f(CW\*(C'\fR" 4 -.IX Item "-hname" -.Ip "\f(CW\*(C`\-soname=\f(CIname\f(CW\*(C'\fR" 4 -.IX Item "-soname=name" -When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_SONAME\s0 field to -the specified name. When an executable is linked with a shared object -which has a \s-1DT_SONAME\s0 field, then when the executable is run the dynamic -linker will attempt to load the shared object specified by the \s-1DT_SONAME\s0 -field rather than the using the file name given to the linker. -.Ip "\f(CW\*(C`\-i\*(C'\fR" 4 -.IX Item "-i" -Perform an incremental link (same as option \fB\-r\fR). -.Ip "\f(CW\*(C`\-init \f(CIname\f(CW\*(C'\fR" 4 -.IX Item "-init name" -When creating an \s-1ELF\s0 executable or shared object, call \s-1NAME\s0 when the -executable or shared object is loaded, by setting \s-1DT_INIT\s0 to the address -of the function. By default, the linker uses \f(CW\*(C`_init\*(C'\fR as the -function to call. -.Ip "\f(CW\*(C`\-l\f(CIarchive\f(CW\*(C'\fR" 4 -.IX Item "-larchive" -.Ip "\f(CW\*(C`\-\-library=\f(CIarchive\f(CW\*(C'\fR" 4 -.IX Item "--library=archive" -Add archive file \fIarchive\fR to the list of files to link. This -option may be used any number of times. \f(CW\*(C`ld\*(C'\fR will search its -path-list for occurrences of \f(CW\*(C`lib\f(CIarchive\f(CW.a\*(C'\fR for every -\&\fIarchive\fR specified. -.Sp -On systems which support shared libraries, \f(CW\*(C`ld\*(C'\fR may also search for -libraries with extensions other than \f(CW\*(C`.a\*(C'\fR. Specifically, on \s-1ELF\s0 -and SunOS systems, \f(CW\*(C`ld\*(C'\fR will search a directory for a library with -an extension of \f(CW\*(C`.so\*(C'\fR before searching for one with an extension of -\&\f(CW\*(C`.a\*(C'\fR. By convention, a \f(CW\*(C`.so\*(C'\fR extension indicates a shared -library. -.Sp -The linker will search an archive only once, at the location where it is -specified on the command line. If the archive defines a symbol which -was undefined in some object which appeared before the archive on the -command line, the linker will include the appropriate \fIfile\fR\|(s) from the -archive. However, an undefined symbol in an object appearing later on -the command line will not cause the linker to search the archive again. -.Sp -See the \f(CW\*(C`\-(\*(C'\fR option for a way to force the linker to search -archives multiple times. -.Sp -You may list the same archive multiple times on the command line. -.Sp -This type of archive searching is standard for Unix linkers. However, -if you are using \f(CW\*(C`ld\*(C'\fR on \s-1AIX\s0, note that it is different from the -behaviour of the \s-1AIX\s0 linker. -.Ip "\f(CW\*(C`\-L\f(CIsearchdir\f(CW\*(C'\fR" 4 -.IX Item "-Lsearchdir" -.Ip "\f(CW\*(C`\-\-library\-path=\f(CIsearchdir\f(CW\*(C'\fR" 4 -.IX Item "--library-path=searchdir" -Add path \fIsearchdir\fR to the list of paths that \f(CW\*(C`ld\*(C'\fR will search -for archive libraries and \f(CW\*(C`ld\*(C'\fR control scripts. You may use this -option any number of times. The directories are searched in the order -in which they are specified on the command line. Directories specified -on the command line are searched before the default directories. All -\&\f(CW\*(C`\-L\*(C'\fR options apply to all \f(CW\*(C`\-l\*(C'\fR options, regardless of the -order in which the options appear. -.Sp -The default set of paths searched (without being specified with -\&\fB\-L\fR) depends on which emulation mode \f(CW\*(C`ld\*(C'\fR is using, and in -some cases also on how it was configured. -.Sp -The paths can also be specified in a link script with the -\&\f(CW\*(C`SEARCH_DIR\*(C'\fR command. Directories specified this way are searched -at the point in which the linker script appears in the command line. -.Ip "\f(CW\*(C`\-m\f(CIemulation\f(CW\*(C'\fR" 4 -.IX Item "-memulation" -Emulate the \fIemulation\fR linker. You can list the available -emulations with the \fB\*(--verbose\fR or \fB\-V\fR options. -.Sp -If the \fB\-m\fR option is not used, the emulation is taken from the -\&\f(CW\*(C`LDEMULATION\*(C'\fR environment variable, if that is defined. -.Sp -Otherwise, the default emulation depends upon how the linker was -configured. -.Ip "\f(CW\*(C`\-M\*(C'\fR" 4 -.IX Item "-M" -.Ip "\f(CW\*(C`\-\-print\-map\*(C'\fR" 4 -.IX Item "--print-map" -Print a link map to the standard output. A link map provides -information about the link, including the following: -.RS 4 -.Ip "\(bu" 4 -Where object files and symbols are mapped into memory. -.Ip "\(bu" 4 -How common symbols are allocated. -.Ip "\(bu" 4 -All archive members included in the link, with a mention of the symbol -which caused the archive member to be brought in. -.RE -.RS 4 -.RE -.Ip "\f(CW\*(C`\-n\*(C'\fR" 4 -.IX Item "-n" -.Ip "\f(CW\*(C`\-\-nmagic\*(C'\fR" 4 -.IX Item "--nmagic" -Turn off page alignment of sections, and mark the output as -\&\f(CW\*(C`NMAGIC\*(C'\fR if possible. -.Ip "\f(CW\*(C`\-N\*(C'\fR" 4 -.IX Item "-N" -.Ip "\f(CW\*(C`\-\-omagic\*(C'\fR" 4 -.IX Item "--omagic" -Set the text and data sections to be readable and writable. Also, do -not page-align the data segment. If the output format supports Unix -style magic numbers, mark the output as \f(CW\*(C`OMAGIC\*(C'\fR. -.Ip "\f(CW\*(C`\-o \f(CIoutput\f(CW\*(C'\fR" 4 -.IX Item "-o output" -.Ip "\f(CW\*(C`\-\-output=\f(CIoutput\f(CW\*(C'\fR" 4 -.IX Item "--output=output" -Use \fIoutput\fR as the name for the program produced by \f(CW\*(C`ld\*(C'\fR; if this -option is not specified, the name \fIa.out\fR is used by default. The -script command \f(CW\*(C`OUTPUT\*(C'\fR can also specify the output file name. -.Ip "\f(CW\*(C`\-O \f(CIlevel\f(CW\*(C'\fR" 4 -.IX Item "-O level" -If \fIlevel\fR is a numeric values greater than zero \f(CW\*(C`ld\*(C'\fR optimizes -the output. This might take significantly longer and therefore probably -should only be enabled for the final binary. -.Ip "\f(CW\*(C`\-q\*(C'\fR" 4 -.IX Item "-q" -.Ip "\f(CW\*(C`\-\-emit\-relocs\*(C'\fR" 4 -.IX Item "--emit-relocs" -Leave relocation sections and contents in fully linked exececutables. -Post link analysis and optimization tools may need this information in -order to perform correct modifications of executables. This results -in larger executables. -.Ip "\f(CW\*(C`\-r\*(C'\fR" 4 -.IX Item "-r" -.Ip "\f(CW\*(C`\-\-relocateable\*(C'\fR" 4 -.IX Item "--relocateable" -Generate relocatable output\-\-\-i.e., generate an output file that can in -turn serve as input to \f(CW\*(C`ld\*(C'\fR. This is often called \fIpartial -linking\fR. As a side effect, in environments that support standard Unix -magic numbers, this option also sets the output file's magic number to -\&\f(CW\*(C`OMAGIC\*(C'\fR. -If this option is not specified, an absolute file is produced. When -linking \*(C+ programs, this option \fIwill not\fR resolve references to -constructors; to do that, use \fB\-Ur\fR. -.Sp -This option does the same thing as \fB\-i\fR. -.Ip "\f(CW\*(C`\-R \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "-R filename" -.Ip "\f(CW\*(C`\-\-just\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--just-symbols=filename" -Read symbol names and their addresses from \fIfilename\fR, but do not -relocate it or include it in the output. This allows your output file -to refer symbolically to absolute locations of memory defined in other -programs. You may use this option more than once. -.Sp -For compatibility with other \s-1ELF\s0 linkers, if the \f(CW\*(C`\-R\*(C'\fR option is -followed by a directory name, rather than a file name, it is treated as -the \f(CW\*(C`\-rpath\*(C'\fR option. -.Ip "\f(CW\*(C`\-s\*(C'\fR" 4 -.IX Item "-s" -.Ip "\f(CW\*(C`\-\-strip\-all\*(C'\fR" 4 -.IX Item "--strip-all" -Omit all symbol information from the output file. -.Ip "\f(CW\*(C`\-S\*(C'\fR" 4 -.IX Item "-S" -.Ip "\f(CW\*(C`\-\-strip\-debug\*(C'\fR" 4 -.IX Item "--strip-debug" -Omit debugger symbol information (but not all symbols) from the output file. -.Ip "\f(CW\*(C`\-t\*(C'\fR" 4 -.IX Item "-t" -.Ip "\f(CW\*(C`\-\-trace\*(C'\fR" 4 -.IX Item "--trace" -Print the names of the input files as \f(CW\*(C`ld\*(C'\fR processes them. -.Ip "\f(CW\*(C`\-T \f(CIscriptfile\f(CW\*(C'\fR" 4 -.IX Item "-T scriptfile" -.Ip "\f(CW\*(C`\-\-script=\f(CIscriptfile\f(CW\*(C'\fR" 4 -.IX Item "--script=scriptfile" -Use \fIscriptfile\fR as the linker script. This script replaces -\&\f(CW\*(C`ld\*(C'\fR's default linker script (rather than adding to it), so -\&\fIcommandfile\fR must specify everything necessary to describe the -output file. You must use this option if you want to use a command -which can only appear once in a linker script, such as the -\&\f(CW\*(C`SECTIONS\*(C'\fR or \f(CW\*(C`MEMORY\*(C'\fR command. If -\&\fIscriptfile\fR does not exist in the current directory, \f(CW\*(C`ld\*(C'\fR -looks for it in the directories specified by any preceding \fB\-L\fR -options. Multiple \fB\-T\fR options accumulate. -.Ip "\f(CW\*(C`\-u \f(CIsymbol\f(CW\*(C'\fR" 4 -.IX Item "-u symbol" -.Ip "\f(CW\*(C`\-\-undefined=\f(CIsymbol\f(CW\*(C'\fR" 4 -.IX Item "--undefined=symbol" -Force \fIsymbol\fR to be entered in the output file as an undefined -symbol. Doing this may, for example, trigger linking of additional -modules from standard libraries. \fB\-u\fR may be repeated with -different option arguments to enter additional undefined symbols. This -option is equivalent to the \f(CW\*(C`EXTERN\*(C'\fR linker script command. -.Ip "\f(CW\*(C`\-Ur\*(C'\fR" 4 -.IX Item "-Ur" -For anything other than \*(C+ programs, this option is equivalent to -\&\fB\-r\fR: it generates relocatable output\-\-\-i.e., an output file that can in -turn serve as input to \f(CW\*(C`ld\*(C'\fR. When linking \*(C+ programs, \fB\-Ur\fR -\&\fIdoes\fR resolve references to constructors, unlike \fB\-r\fR. -It does not work to use \fB\-Ur\fR on files that were themselves linked -with \fB\-Ur\fR; once the constructor table has been built, it cannot -be added to. Use \fB\-Ur\fR only for the last partial link, and -\&\fB\-r\fR for the others. -.Ip "\f(CW\*(C`\-\-unique[=\f(CI\s\-1SECTION\s0\f(CW]\*(C'\fR" 4 -.IX Item "--unique[=SECTION]" -Creates a separate output section for every input section matching -\&\fI\s-1SECTION\s0\fR, or if the optional wildcard \fI\s-1SECTION\s0\fR argument is -missing, for every orphan input section. An orphan section is one not -specifically mentioned in a linker script. You may use this option -multiple times on the command line; It prevents the normal merging of -input sections with the same name, overriding output section assignments -in a linker script. -.Ip "\f(CW\*(C`\-v\*(C'\fR" 4 -.IX Item "-v" -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -.Ip "\f(CW\*(C`\-V\*(C'\fR" 4 -.IX Item "-V" -Display the version number for \f(CW\*(C`ld\*(C'\fR. The \f(CW\*(C`\-V\*(C'\fR option also -lists the supported emulations. -.Ip "\f(CW\*(C`\-x\*(C'\fR" 4 -.IX Item "-x" -.Ip "\f(CW\*(C`\-\-discard\-all\*(C'\fR" 4 -.IX Item "--discard-all" -Delete all local symbols. -.Ip "\f(CW\*(C`\-X\*(C'\fR" 4 -.IX Item "-X" -.Ip "\f(CW\*(C`\-\-discard\-locals\*(C'\fR" 4 -.IX Item "--discard-locals" -Delete all temporary local symbols. For most targets, this is all local -symbols whose names begin with \fBL\fR. -.Ip "\f(CW\*(C`\-y \f(CIsymbol\f(CW\*(C'\fR" 4 -.IX Item "-y symbol" -.Ip "\f(CW\*(C`\-\-trace\-symbol=\f(CIsymbol\f(CW\*(C'\fR" 4 -.IX Item "--trace-symbol=symbol" -Print the name of each linked file in which \fIsymbol\fR appears. This -option may be given any number of times. On many systems it is necessary -to prepend an underscore. -.Sp -This option is useful when you have an undefined symbol in your link but -don't know where the reference is coming from. -.Ip "\f(CW\*(C`\-Y \f(CIpath\f(CW\*(C'\fR" 4 -.IX Item "-Y path" -Add \fIpath\fR to the default library search path. This option exists -for Solaris compatibility. -.Ip "\f(CW\*(C`\-z \f(CIkeyword\f(CW\*(C'\fR" 4 -.IX Item "-z keyword" -The recognized keywords are \f(CW\*(C`initfirst\*(C'\fR, \f(CW\*(C`interpose\*(C'\fR, -\&\f(CW\*(C`loadfltr\*(C'\fR, \f(CW\*(C`nodefaultlib\*(C'\fR, \f(CW\*(C`nodelete\*(C'\fR, \f(CW\*(C`nodlopen\*(C'\fR, -\&\f(CW\*(C`nodump\*(C'\fR, \f(CW\*(C`now\*(C'\fR and \f(CW\*(C`origin\*(C'\fR. The other keywords are -ignored for Solaris compatibility. \f(CW\*(C`initfirst\*(C'\fR marks the object -to be initialized first at runtime before any other objects. -\&\f(CW\*(C`interpose\*(C'\fR marks the object that its symbol table interposes -before all symbols but the primary executable. \f(CW\*(C`loadfltr\*(C'\fR marks -the object that its filtees be processed immediately at runtime. -\&\f(CW\*(C`nodefaultlib\*(C'\fR marks the object that the search for dependencies -of this object will ignore any default library search paths. -\&\f(CW\*(C`nodelete\*(C'\fR marks the object shouldn't be unloaded at runtime. -\&\f(CW\*(C`nodlopen\*(C'\fR marks the object not available to \f(CW\*(C`dlopen\*(C'\fR. -\&\f(CW\*(C`nodump\*(C'\fR marks the object can not be dumped by \f(CW\*(C`dldump\*(C'\fR. -\&\f(CW\*(C`now\*(C'\fR marks the object with the non-lazy runtime binding. -\&\f(CW\*(C`origin\*(C'\fR marks the object may contain \f(CW$ORIGIN\fR. -\&\f(CW\*(C`defs\*(C'\fR disallows undefined symbols. -.Ip "\f(CW\*(C`\-( \f(CIarchives\f(CW \-)\*(C'\fR" 4 -.IX Item "-( archives -)" -.Ip "\f(CW\*(C`\-\-start\-group \f(CIarchives\f(CW \-\-end\-group\*(C'\fR" 4 -.IX Item "--start-group archives --end-group" -The \fIarchives\fR should be a list of archive files. They may be -either explicit file names, or \fB\-l\fR options. -.Sp -The specified archives are searched repeatedly until no new undefined -references are created. Normally, an archive is searched only once in -the order that it is specified on the command line. If a symbol in that -archive is needed to resolve an undefined symbol referred to by an -object in an archive that appears later on the command line, the linker -would not be able to resolve that reference. By grouping the archives, -they all be searched repeatedly until all possible references are -resolved. -.Sp -Using this option has a significant performance cost. It is best to use -it only when there are unavoidable circular references between two or -more archives. -.Ip "\f(CW\*(C`\-assert \f(CIkeyword\f(CW\*(C'\fR" 4 -.IX Item "-assert keyword" -This option is ignored for SunOS compatibility. -.Ip "\f(CW\*(C`\-Bdynamic\*(C'\fR" 4 -.IX Item "-Bdynamic" -.Ip "\f(CW\*(C`\-dy\*(C'\fR" 4 -.IX Item "-dy" -.Ip "\f(CW\*(C`\-call_shared\*(C'\fR" 4 -.IX Item "-call_shared" -Link against dynamic libraries. This is only meaningful on platforms -for which shared libraries are supported. This option is normally the -default on such platforms. The different variants of this option are -for compatibility with various systems. You may use this option -multiple times on the command line: it affects library searching for -\&\f(CW\*(C`\-l\*(C'\fR options which follow it. -.Ip "\f(CW\*(C`\-Bgroup\*(C'\fR" 4 -.IX Item "-Bgroup" -Set the \f(CW\*(C`DF_1_GROUP\*(C'\fR flag in the \f(CW\*(C`DT_FLAGS_1\*(C'\fR entry in the dynamic -section. This causes the runtime linker to handle lookups in this -object and its dependencies to be performed only inside the group. -\&\f(CW\*(C`\-\-no\-undefined\*(C'\fR is implied. This option is only meaningful on \s-1ELF\s0 -platforms which support shared libraries. -.Ip "\f(CW\*(C`\-Bstatic\*(C'\fR" 4 -.IX Item "-Bstatic" -.Ip "\f(CW\*(C`\-dn\*(C'\fR" 4 -.IX Item "-dn" -.Ip "\f(CW\*(C`\-non_shared\*(C'\fR" 4 -.IX Item "-non_shared" -.Ip "\f(CW\*(C`\-static\*(C'\fR" 4 -.IX Item "-static" -Do not link against shared libraries. This is only meaningful on -platforms for which shared libraries are supported. The different -variants of this option are for compatibility with various systems. You -may use this option multiple times on the command line: it affects -library searching for \f(CW\*(C`\-l\*(C'\fR options which follow it. -.Ip "\f(CW\*(C`\-Bsymbolic\*(C'\fR" 4 -.IX Item "-Bsymbolic" -When creating a shared library, bind references to global symbols to the -definition within the shared library, if any. Normally, it is possible -for a program linked against a shared library to override the definition -within the shared library. This option is only meaningful on \s-1ELF\s0 -platforms which support shared libraries. -.Ip "\f(CW\*(C`\-\-check\-sections\*(C'\fR" 4 -.IX Item "--check-sections" -.Ip "\f(CW\*(C`\-\-no\-check\-sections\*(C'\fR" 4 -.IX Item "--no-check-sections" -Asks the linker \fInot\fR to check section addresses after they have -been assigned to see if there any overlaps. Normally the linker will -perform this check, and if it finds any overlaps it will produce -suitable error messages. The linker does know about, and does make -allowances for sections in overlays. The default behaviour can be -restored by using the command line switch \fB\*(--check-sections\fR. -.Ip "\f(CW\*(C`\-\-cref\*(C'\fR" 4 -.IX Item "--cref" -Output a cross reference table. If a linker map file is being -generated, the cross reference table is printed to the map file. -Otherwise, it is printed on the standard output. -.Sp -The format of the table is intentionally simple, so that it may be -easily processed by a script if necessary. The symbols are printed out, -sorted by name. For each symbol, a list of file names is given. If the -symbol is defined, the first file listed is the location of the -definition. The remaining files contain references to the symbol. -.Ip "\f(CW\*(C`\-\-defsym \f(CIsymbol\f(CW=\f(CIexpression\f(CW\*(C'\fR" 4 -.IX Item "--defsym symbol=expression" -Create a global symbol in the output file, containing the absolute -address given by \fIexpression\fR. You may use this option as many -times as necessary to define multiple symbols in the command line. A -limited form of arithmetic is supported for the \fIexpression\fR in this -context: you may give a hexadecimal constant or the name of an existing -symbol, or use \f(CW\*(C`+\*(C'\fR and \f(CW\*(C`\-\*(C'\fR to add or subtract hexadecimal -constants or symbols. If you need more elaborate expressions, consider -using the linker command language from a script. \fINote:\fR there should be no white -space between \fIsymbol\fR, the equals sign (``\fB=\fR''), and -\&\fIexpression\fR. -.Ip "\f(CW\*(C`\-\-demangle[=\f(CIstyle\f(CW]\*(C'\fR" 4 -.IX Item "--demangle[=style]" -.Ip "\f(CW\*(C`\-\-no\-demangle\*(C'\fR" 4 -.IX Item "--no-demangle" -These options control whether to demangle symbol names in error messages -and other output. When the linker is told to demangle, it tries to -present symbol names in a readable fashion: it strips leading -underscores if they are used by the object file format, and converts \*(C+ -mangled symbol names into user readable names. Different compilers have -different mangling styles. The optional demangling style argument can be used -to choose an appropriate demangling style for your compiler. The linker will -demangle by default unless the environment variable \fB\s-1COLLECT_NO_DEMANGLE\s0\fR -is set. These options may be used to override the default. -.Ip "\f(CW\*(C`\-\-dynamic\-linker \f(CIfile\f(CW\*(C'\fR" 4 -.IX Item "--dynamic-linker file" -Set the name of the dynamic linker. This is only meaningful when -generating dynamically linked \s-1ELF\s0 executables. The default dynamic -linker is normally correct; don't use this unless you know what you are -doing. -.Ip "\f(CW\*(C`\-\-embedded\-relocs\*(C'\fR" 4 -.IX Item "--embedded-relocs" -This option is only meaningful when linking \s-1MIPS\s0 embedded \s-1PIC\s0 code, -generated by the \-membedded-pic option to the \s-1GNU\s0 compiler and -assembler. It causes the linker to create a table which may be used at -runtime to relocate any data which was statically initialized to pointer -values. See the code in testsuite/ld-empic for details. -.Ip "\f(CW\*(C`\-\-fatal\-warnings\*(C'\fR" 4 -.IX Item "--fatal-warnings" -Treat all warnings as errors. -.Ip "\f(CW\*(C`\-\-force\-exe\-suffix\*(C'\fR" 4 -.IX Item "--force-exe-suffix" -Make sure that an output file has a .exe suffix. -.Sp -If a successfully built fully linked output file does not have a -\&\f(CW\*(C`.exe\*(C'\fR or \f(CW\*(C`.dll\*(C'\fR suffix, this option forces the linker to copy -the output file to one of the same name with a \f(CW\*(C`.exe\*(C'\fR suffix. This -option is useful when using unmodified Unix makefiles on a Microsoft -Windows host, since some versions of Windows won't run an image unless -it ends in a \f(CW\*(C`.exe\*(C'\fR suffix. -.Ip "\f(CW\*(C`\-\-no\-gc\-sections\*(C'\fR" 4 -.IX Item "--no-gc-sections" -.Ip "\f(CW\*(C`\-\-gc\-sections\*(C'\fR" 4 -.IX Item "--gc-sections" -Enable garbage collection of unused input sections. It is ignored on -targets that do not support this option. This option is not compatible -with \fB\-r\fR, nor should it be used with dynamic linking. The default -behaviour (of not performing this garbage collection) can be restored by -specifying \fB\*(--no-gc-sections\fR on the command line. -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Print a summary of the command-line options on the standard output and exit. -.Ip "\f(CW\*(C`\-\-target\-help\*(C'\fR" 4 -.IX Item "--target-help" -Print a summary of all target specific options on the standard output and exit. -.Ip "\f(CW\*(C`\-Map \f(CImapfile\f(CW\*(C'\fR" 4 -.IX Item "-Map mapfile" -Print a link map to the file \fImapfile\fR. See the description of the -\&\fB\-M\fR option, above. -.Ip "\f(CW\*(C`\-\-no\-keep\-memory\*(C'\fR" 4 -.IX Item "--no-keep-memory" -\&\f(CW\*(C`ld\*(C'\fR normally optimizes for speed over memory usage by caching the -symbol tables of input files in memory. This option tells \f(CW\*(C`ld\*(C'\fR to -instead optimize for memory usage, by rereading the symbol tables as -necessary. This may be required if \f(CW\*(C`ld\*(C'\fR runs out of memory space -while linking a large executable. -.Ip "\f(CW\*(C`\-\-no\-undefined\*(C'\fR" 4 -.IX Item "--no-undefined" -.Ip "\f(CW\*(C`\-z defs\*(C'\fR" 4 -.IX Item "-z defs" -Normally when creating a non-symbolic shared library, undefined symbols -are allowed and left to be resolved by the runtime loader. These options -disallows such undefined symbols. -.Ip "\f(CW\*(C`\-\-allow\-shlib\-undefined\*(C'\fR" 4 -.IX Item "--allow-shlib-undefined" -Allow undefined symbols in shared objects even when \-\-no-undefined is -set. The net result will be that undefined symbols in regular objects -will still trigger an error, but undefined symbols in shared objects -will be ignored. The implementation of no_undefined makes the -assumption that the runtime linker will choke on undefined symbols. -However there is at least one system (BeOS) where undefined symbols in -shared libraries is normal since the kernel patches them at load time to -select which function is most appropriate for the current architecture. -I.E. dynamically select an appropriate memset function. Apparently it -is also normal for \s-1HPPA\s0 shared libraries to have undefined symbols. -.Ip "\f(CW\*(C`\-\-no\-warn\-mismatch\*(C'\fR" 4 -.IX Item "--no-warn-mismatch" -Normally \f(CW\*(C`ld\*(C'\fR will give an error if you try to link together input -files that are mismatched for some reason, perhaps because they have -been compiled for different processors or for different endiannesses. -This option tells \f(CW\*(C`ld\*(C'\fR that it should silently permit such possible -errors. This option should only be used with care, in cases when you -have taken some special action that ensures that the linker errors are -inappropriate. -.Ip "\f(CW\*(C`\-\-no\-whole\-archive\*(C'\fR" 4 -.IX Item "--no-whole-archive" -Turn off the effect of the \f(CW\*(C`\-\-whole\-archive\*(C'\fR option for subsequent -archive files. -.Ip "\f(CW\*(C`\-\-noinhibit\-exec\*(C'\fR" 4 -.IX Item "--noinhibit-exec" -Retain the executable output file whenever it is still usable. -Normally, the linker will not produce an output file if it encounters -errors during the link process; it exits without writing an output file -when it issues any error whatsoever. -.Ip "\f(CW\*(C`\-\-oformat \f(CIoutput\-format\f(CW\*(C'\fR" 4 -.IX Item "--oformat output-format" -\&\f(CW\*(C`ld\*(C'\fR may be configured to support more than one kind of object -file. If your \f(CW\*(C`ld\*(C'\fR is configured this way, you can use the -\&\fB\*(--oformat\fR option to specify the binary format for the output -object file. Even when \f(CW\*(C`ld\*(C'\fR is configured to support alternative -object formats, you don't usually need to specify this, as \f(CW\*(C`ld\*(C'\fR -should be configured to produce as a default output format the most -usual format on each machine. \fIoutput-format\fR is a text string, the -name of a particular format supported by the \s-1BFD\s0 libraries. (You can -list the available binary formats with \fBobjdump \-i\fR.) The script -command \f(CW\*(C`OUTPUT_FORMAT\*(C'\fR can also specify the output format, but -this option overrides it. -.Ip "\f(CW\*(C`\-qmagic\*(C'\fR" 4 -.IX Item "-qmagic" -This option is ignored for Linux compatibility. -.Ip "\f(CW\*(C`\-Qy\*(C'\fR" 4 -.IX Item "-Qy" -This option is ignored for \s-1SVR4\s0 compatibility. -.Ip "\f(CW\*(C`\-\-relax\*(C'\fR" 4 -.IX Item "--relax" -An option with machine dependent effects. -This option is only supported on a few targets. -.Sp -On some platforms, the \fB\*(--relax\fR option performs global -optimizations that become possible when the linker resolves addressing -in the program, such as relaxing address modes and synthesizing new -instructions in the output object file. -.Sp -On some platforms these link time global optimizations may make symbolic -debugging of the resulting executable impossible. -This is known to be -the case for the Matsushita \s-1MN10200\s0 and \s-1MN10300\s0 family of processors. -.Sp -On platforms where this is not supported, \fB\*(--relax\fR is accepted, -but ignored. -.Ip "\f(CW\*(C`\-\-retain\-symbols\-file \f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--retain-symbols-file filename" -Retain \fIonly\fR the symbols listed in the file \fIfilename\fR, -discarding all others. \fIfilename\fR is simply a flat file, with one -symbol name per line. This option is especially useful in environments -(such as VxWorks) -where a large global symbol table is accumulated gradually, to conserve -run-time memory. -.Sp -\&\fB\*(--retain-symbols-file\fR does \fInot\fR discard undefined symbols, -or symbols needed for relocations. -.Sp -You may only specify \fB\*(--retain-symbols-file\fR once in the command -line. It overrides \fB\-s\fR and \fB\-S\fR. -.Ip "\f(CW\*(C`\-rpath \f(CIdir\f(CW\*(C'\fR" 4 -.IX Item "-rpath dir" -Add a directory to the runtime library search path. This is used when -linking an \s-1ELF\s0 executable with shared objects. All \f(CW\*(C`\-rpath\*(C'\fR -arguments are concatenated and passed to the runtime linker, which uses -them to locate shared objects at runtime. The \f(CW\*(C`\-rpath\*(C'\fR option is -also used when locating shared objects which are needed by shared -objects explicitly included in the link; see the description of the -\&\f(CW\*(C`\-rpath\-link\*(C'\fR option. If \f(CW\*(C`\-rpath\*(C'\fR is not used when linking an -\&\s-1ELF\s0 executable, the contents of the environment variable -\&\f(CW\*(C`LD_RUN_PATH\*(C'\fR will be used if it is defined. -.Sp -The \f(CW\*(C`\-rpath\*(C'\fR option may also be used on SunOS. By default, on -SunOS, the linker will form a runtime search patch out of all the -\&\f(CW\*(C`\-L\*(C'\fR options it is given. If a \f(CW\*(C`\-rpath\*(C'\fR option is used, the -runtime search path will be formed exclusively using the \f(CW\*(C`\-rpath\*(C'\fR -options, ignoring the \f(CW\*(C`\-L\*(C'\fR options. This can be useful when using -gcc, which adds many \f(CW\*(C`\-L\*(C'\fR options which may be on \s-1NFS\s0 mounted -filesystems. -.Sp -For compatibility with other \s-1ELF\s0 linkers, if the \f(CW\*(C`\-R\*(C'\fR option is -followed by a directory name, rather than a file name, it is treated as -the \f(CW\*(C`\-rpath\*(C'\fR option. -.Ip "\f(CW\*(C`\-rpath\-link \f(CI\s\-1DIR\s0\f(CW\*(C'\fR" 4 -.IX Item "-rpath-link DIR" -When using \s-1ELF\s0 or SunOS, one shared library may require another. This -happens when an \f(CW\*(C`ld \-shared\*(C'\fR link includes a shared library as one -of the input files. -.Sp -When the linker encounters such a dependency when doing a non-shared, -non-relocatable link, it will automatically try to locate the required -shared library and include it in the link, if it is not included -explicitly. In such a case, the \f(CW\*(C`\-rpath\-link\*(C'\fR option -specifies the first set of directories to search. The -\&\f(CW\*(C`\-rpath\-link\*(C'\fR option may specify a sequence of directory names -either by specifying a list of names separated by colons, or by -appearing multiple times. -.Sp -This option should be used with caution as it overrides the search path -that may have been hard compiled into a shared library. In such a case it -is possible to use unintentionally a different search path than the -runtime linker would do. -.Sp -The linker uses the following search paths to locate required shared -libraries. -.RS 4 -.Ip "1." 4 -Any directories specified by \f(CW\*(C`\-rpath\-link\*(C'\fR options. -.Ip "2." 4 -Any directories specified by \f(CW\*(C`\-rpath\*(C'\fR options. The difference -between \f(CW\*(C`\-rpath\*(C'\fR and \f(CW\*(C`\-rpath\-link\*(C'\fR is that directories -specified by \f(CW\*(C`\-rpath\*(C'\fR options are included in the executable and -used at runtime, whereas the \f(CW\*(C`\-rpath\-link\*(C'\fR option is only effective -at link time. It is for the native linker only. -.Ip "3." 4 -On an \s-1ELF\s0 system, if the \f(CW\*(C`\-rpath\*(C'\fR and \f(CW\*(C`rpath\-link\*(C'\fR options -were not used, search the contents of the environment variable -\&\f(CW\*(C`LD_RUN_PATH\*(C'\fR. It is for the native linker only. -.Ip "4." 4 -On SunOS, if the \f(CW\*(C`\-rpath\*(C'\fR option was not used, search any -directories specified using \f(CW\*(C`\-L\*(C'\fR options. -.Ip "5." 4 -For a native linker, the contents of the environment variable -\&\f(CW\*(C`LD_LIBRARY_PATH\*(C'\fR. -.Ip "6." 4 -For a native \s-1ELF\s0 linker, the directories in \f(CW\*(C`DT_RUNPATH\*(C'\fR or -\&\f(CW\*(C`DT_RPATH\*(C'\fR of a shared library are searched for shared -libraries needed by it. The \f(CW\*(C`DT_RPATH\*(C'\fR entries are ignored if -\&\f(CW\*(C`DT_RUNPATH\*(C'\fR entries exist. -.Ip "7." 4 -The default directories, normally \fI/lib\fR and \fI/usr/lib\fR. -.Ip "8." 4 -For a native linker on an \s-1ELF\s0 system, if the file \fI/etc/ld.so.conf\fR -exists, the list of directories found in that file. -.RE -.RS 4 -.Sp -If the required shared library is not found, the linker will issue a -warning and continue with the link. -.RE -.Ip "\f(CW\*(C`\-shared\*(C'\fR" 4 -.IX Item "-shared" -.Ip "\f(CW\*(C`\-Bshareable\*(C'\fR" 4 -.IX Item "-Bshareable" -Create a shared library. This is currently only supported on \s-1ELF\s0, \s-1XCOFF\s0 -and SunOS platforms. On SunOS, the linker will automatically create a -shared library if the \f(CW\*(C`\-e\*(C'\fR option is not used and there are -undefined symbols in the link. -.Ip "\f(CW\*(C`\-\-sort\-common\*(C'\fR" 4 -.IX Item "--sort-common" -This option tells \f(CW\*(C`ld\*(C'\fR to sort the common symbols by size when it -places them in the appropriate output sections. First come all the one -byte symbols, then all the two bytes, then all the four bytes, and then -everything else. This is to prevent gaps between symbols due to -alignment constraints. -.Ip "\f(CW\*(C`\-\-split\-by\-file [\f(CIsize\f(CW]\*(C'\fR" 4 -.IX Item "--split-by-file [size]" -Similar to \f(CW\*(C`\-\-split\-by\-reloc\*(C'\fR but creates a new output section for -each input file when \fIsize\fR is reached. \fIsize\fR defaults to a -size of 1 if not given. -.Ip "\f(CW\*(C`\-\-split\-by\-reloc [\f(CIcount\f(CW]\*(C'\fR" 4 -.IX Item "--split-by-reloc [count]" -Tries to creates extra sections in the output file so that no single -output section in the file contains more than \fIcount\fR relocations. -This is useful when generating huge relocatable files for downloading into -certain real time kernels with the \s-1COFF\s0 object file format; since \s-1COFF\s0 -cannot represent more than 65535 relocations in a single section. Note -that this will fail to work with object file formats which do not -support arbitrary sections. The linker will not split up individual -input sections for redistribution, so if a single input section contains -more than \fIcount\fR relocations one output section will contain that -many relocations. \fIcount\fR defaults to a value of 32768. -.Ip "\f(CW\*(C`\-\-stats\*(C'\fR" 4 -.IX Item "--stats" -Compute and display statistics about the operation of the linker, such -as execution time and memory usage. -.Ip "\f(CW\*(C`\-\-traditional\-format\*(C'\fR" 4 -.IX Item "--traditional-format" -For some targets, the output of \f(CW\*(C`ld\*(C'\fR is different in some ways from -the output of some existing linker. This switch requests \f(CW\*(C`ld\*(C'\fR to -use the traditional format instead. -.Sp -For example, on SunOS, \f(CW\*(C`ld\*(C'\fR combines duplicate entries in the -symbol string table. This can reduce the size of an output file with -full debugging information by over 30 percent. Unfortunately, the SunOS -\&\f(CW\*(C`dbx\*(C'\fR program can not read the resulting program (\f(CW\*(C`gdb\*(C'\fR has no -trouble). The \fB\*(--traditional-format\fR switch tells \f(CW\*(C`ld\*(C'\fR to not -combine duplicate entries. -.Ip "\f(CW\*(C`\-\-section\-start \f(CIsectionname\f(CW=\f(CIorg\f(CW\*(C'\fR" 4 -.IX Item "--section-start sectionname=org" -Locate a section in the output file at the absolute -address given by \fIorg\fR. You may use this option as many -times as necessary to locate multiple sections in the command -line. -\&\fIorg\fR must be a single hexadecimal integer; -for compatibility with other linkers, you may omit the leading -\&\fB0x\fR usually associated with hexadecimal values. \fINote:\fR there -should be no white space between \fIsectionname\fR, the equals -sign (``\fB=\fR''), and \fIorg\fR. -.Ip "\f(CW\*(C`\-Tbss \f(CIorg\f(CW\*(C'\fR" 4 -.IX Item "-Tbss org" -.Ip "\f(CW\*(C`\-Tdata \f(CIorg\f(CW\*(C'\fR" 4 -.IX Item "-Tdata org" -.Ip "\f(CW\*(C`\-Ttext \f(CIorg\f(CW\*(C'\fR" 4 -.IX Item "-Ttext org" -Use \fIorg\fR as the starting address for\-\-\-respectively\-\-\-the -\&\f(CW\*(C`bss\*(C'\fR, \f(CW\*(C`data\*(C'\fR, or the \f(CW\*(C`text\*(C'\fR segment of the output file. -\&\fIorg\fR must be a single hexadecimal integer; -for compatibility with other linkers, you may omit the leading -\&\fB0x\fR usually associated with hexadecimal values. -.Ip "\f(CW\*(C`\-\-dll\-verbose\*(C'\fR" 4 -.IX Item "--dll-verbose" -.Ip "\f(CW\*(C`\-\-verbose\*(C'\fR" 4 -.IX Item "--verbose" -Display the version number for \f(CW\*(C`ld\*(C'\fR and list the linker emulations -supported. Display which input files can and cannot be opened. Display -the linker script if using a default builtin script. -.Ip "\f(CW\*(C`\-\-version\-script=\f(CIversion\-scriptfile\f(CW\*(C'\fR" 4 -.IX Item "--version-script=version-scriptfile" -Specify the name of a version script to the linker. This is typically -used when creating shared libraries to specify additional information -about the version heirarchy for the library being created. This option -is only meaningful on \s-1ELF\s0 platforms which support shared libraries. -.Ip "\f(CW\*(C`\-\-warn\-common\*(C'\fR" 4 -.IX Item "--warn-common" -Warn when a common symbol is combined with another common symbol or with -a symbol definition. Unix linkers allow this somewhat sloppy practice, -but linkers on some other operating systems do not. This option allows -you to find potential problems from combining global symbols. -Unfortunately, some C libraries use this practice, so you may get some -warnings about symbols in the libraries as well as in your programs. -.Sp -There are three kinds of global symbols, illustrated here by C examples: -.RS 4 -.Ip "\fBint i = 1;\fR" 4 -.IX Item "int i = 1;" -A definition, which goes in the initialized data section of the output -file. -.Ip "\fBextern int i;\fR" 4 -.IX Item "extern int i;" -An undefined reference, which does not allocate space. -There must be either a definition or a common symbol for the -variable somewhere. -.Ip "\fBint i;\fR" 4 -.IX Item "int i;" -A common symbol. If there are only (one or more) common symbols for a -variable, it goes in the uninitialized data area of the output file. -The linker merges multiple common symbols for the same variable into a -single symbol. If they are of different sizes, it picks the largest -size. The linker turns a common symbol into a declaration, if there is -a definition of the same variable. -.RE -.RS 4 -.Sp -The \fB\*(--warn-common\fR option can produce five kinds of warnings. -Each warning consists of a pair of lines: the first describes the symbol -just encountered, and the second describes the previous symbol -encountered with the same name. One or both of the two symbols will be -a common symbol. -.RS 4 -.RE -.Ip "1." 4 -Turning a common symbol into a reference, because there is already a -definition for the symbol. -.Sp -.Vb 3 -\& I<file>(I<section>): warning: common of `I<symbol>' -\& overridden by definition -\& I<file>(I<section>): warning: defined here -.Ve -.Ip "2." 4 -Turning a common symbol into a reference, because a later definition for -the symbol is encountered. This is the same as the previous case, -except that the symbols are encountered in a different order. -.Sp -.Vb 3 -\& I<file>(I<section>): warning: definition of `I<symbol>' -\& overriding common -\& I<file>(I<section>): warning: common is here -.Ve -.Ip "3." 4 -Merging a common symbol with a previous same-sized common symbol. -.Sp -.Vb 3 -\& I<file>(I<section>): warning: multiple common -\& of `I<symbol>' -\& I<file>(I<section>): warning: previous common is here -.Ve -.Ip "4." 4 -Merging a common symbol with a previous larger common symbol. -.Sp -.Vb 3 -\& I<file>(I<section>): warning: common of `I<symbol>' -\& overridden by larger common -\& I<file>(I<section>): warning: larger common is here -.Ve -.Ip "5." 4 -Merging a common symbol with a previous smaller common symbol. This is -the same as the previous case, except that the symbols are -encountered in a different order. -.Sp -.Vb 3 -\& I<file>(I<section>): warning: common of `I<symbol>' -\& overriding smaller common -\& I<file>(I<section>): warning: smaller common is here -.Ve -.RE -.RS 4 -.RE -.Ip "\f(CW\*(C`\-\-warn\-constructors\*(C'\fR" 4 -.IX Item "--warn-constructors" -Warn if any global constructors are used. This is only useful for a few -object file formats. For formats like \s-1COFF\s0 or \s-1ELF\s0, the linker can not -detect the use of global constructors. -.Ip "\f(CW\*(C`\-\-warn\-multiple\-gp\*(C'\fR" 4 -.IX Item "--warn-multiple-gp" -Warn if multiple global pointer values are required in the output file. -This is only meaningful for certain processors, such as the Alpha. -Specifically, some processors put large-valued constants in a special -section. A special register (the global pointer) points into the middle -of this section, so that constants can be loaded efficiently via a -base-register relative addressing mode. Since the offset in -base-register relative mode is fixed and relatively small (e.g., 16 -bits), this limits the maximum size of the constant pool. Thus, in -large programs, it is often necessary to use multiple global pointer -values in order to be able to address all possible constants. This -option causes a warning to be issued whenever this case occurs. -.Ip "\f(CW\*(C`\-\-warn\-once\*(C'\fR" 4 -.IX Item "--warn-once" -Only warn once for each undefined symbol, rather than once per module -which refers to it. -.Ip "\f(CW\*(C`\-\-warn\-section\-align\*(C'\fR" 4 -.IX Item "--warn-section-align" -Warn if the address of an output section is changed because of -alignment. Typically, the alignment will be set by an input section. -The address will only be changed if it not explicitly specified; that -is, if the \f(CW\*(C`SECTIONS\*(C'\fR command does not specify a start address for -the section. -.Ip "\f(CW\*(C`\-\-whole\-archive\*(C'\fR" 4 -.IX Item "--whole-archive" -For each archive mentioned on the command line after the -\&\f(CW\*(C`\-\-whole\-archive\*(C'\fR option, include every object file in the archive -in the link, rather than searching the archive for the required object -files. This is normally used to turn an archive file into a shared -library, forcing every object to be included in the resulting shared -library. This option may be used more than once. -.Sp -Two notes when using this option from gcc: First, gcc doesn't know -about this option, so you have to use \f(CW\*(C`\-Wl,\-whole\-archive\*(C'\fR. -Second, don't forget to use \f(CW\*(C`\-Wl,\-no\-whole\-archive\*(C'\fR after your -list of archives, because gcc will add its own list of archives to -your link and you may not want this flag to affect those as well. -.Ip "\f(CW\*(C`\-\-wrap \f(CIsymbol\f(CW\*(C'\fR" 4 -.IX Item "--wrap symbol" -Use a wrapper function for \fIsymbol\fR. Any undefined reference to -\&\fIsymbol\fR will be resolved to \f(CW\*(C`_\|_wrap_\f(CIsymbol\f(CW\*(C'\fR. Any -undefined reference to \f(CW\*(C`_\|_real_\f(CIsymbol\f(CW\*(C'\fR will be resolved to -\&\fIsymbol\fR. -.Sp -This can be used to provide a wrapper for a system function. The -wrapper function should be called \f(CW\*(C`_\|_wrap_\f(CIsymbol\f(CW\*(C'\fR. If it -wishes to call the system function, it should call -\&\f(CW\*(C`_\|_real_\f(CIsymbol\f(CW\*(C'\fR. -.Sp -Here is a trivial example: -.Sp -.Vb 6 -\& void * -\& __wrap_malloc (int c) -\& { -\& printf ("malloc called with %ld\en", c); -\& return __real_malloc (c); -\& } -.Ve -If you link other code with this file using \f(CW\*(C`\-\-wrap malloc\*(C'\fR, then -all calls to \f(CW\*(C`malloc\*(C'\fR will call the function \f(CW\*(C`_\|_wrap_malloc\*(C'\fR -instead. The call to \f(CW\*(C`_\|_real_malloc\*(C'\fR in \f(CW\*(C`_\|_wrap_malloc\*(C'\fR will -call the real \f(CW\*(C`malloc\*(C'\fR function. -.Sp -You may wish to provide a \f(CW\*(C`_\|_real_malloc\*(C'\fR function as well, so that -links without the \f(CW\*(C`\-\-wrap\*(C'\fR option will succeed. If you do this, -you should not put the definition of \f(CW\*(C`_\|_real_malloc\*(C'\fR in the same -file as \f(CW\*(C`_\|_wrap_malloc\*(C'\fR; if you do, the assembler may resolve the -call before the linker has a chance to wrap it to \f(CW\*(C`malloc\*(C'\fR. -.Ip "\f(CW\*(C`\-\-enable\-new\-dtags\*(C'\fR" 4 -.IX Item "--enable-new-dtags" -.Ip "\f(CW\*(C`\-\-disable\-new\-dtags\*(C'\fR" 4 -.IX Item "--disable-new-dtags" -This linker can create the new dynamic tags in \s-1ELF\s0. But the older \s-1ELF\s0 -systems may not understand them. If you specify -\&\f(CW\*(C`\-\-enable\-new\-dtags\*(C'\fR, the dynamic tags will be created as needed. -If you specify \f(CW\*(C`\-\-disable\-new\-dtags\*(C'\fR, no new dynamic tags will be -created. By default, the new dynamic tags are not created. Note that -those options are only available for \s-1ELF\s0 systems. -.PP -The i386 \s-1PE\s0 linker supports the \f(CW\*(C`\-shared\*(C'\fR option, which causes -the output to be a dynamically linked library (\s-1DLL\s0) instead of a -normal executable. You should name the output \f(CW\*(C`*.dll\*(C'\fR when you -use this option. In addition, the linker fully supports the standard -\&\f(CW\*(C`*.def\*(C'\fR files, which may be specified on the linker command line -like an object file (in fact, it should precede archives it exports -symbols from, to ensure that they get linked in, just like a normal -object file). -.PP -In addition to the options common to all targets, the i386 \s-1PE\s0 linker -support additional command line options that are specific to the i386 -\&\s-1PE\s0 target. Options that take values may be separated from their -values by either a space or an equals sign. -.Ip "\f(CW\*(C`\-\-add\-stdcall\-alias\*(C'\fR" 4 -.IX Item "--add-stdcall-alias" -If given, symbols with a stdcall suffix (@\fInn\fR) will be exported -as-is and also with the suffix stripped. -.Ip "\f(CW\*(C`\-\-base\-file \f(CIfile\f(CW\*(C'\fR" 4 -.IX Item "--base-file file" -Use \fIfile\fR as the name of a file in which to save the base -addresses of all the relocations needed for generating DLLs with -\&\fIdlltool\fR. -.Ip "\f(CW\*(C`\-\-dll\*(C'\fR" 4 -.IX Item "--dll" -Create a \s-1DLL\s0 instead of a regular executable. You may also use -\&\f(CW\*(C`\-shared\*(C'\fR or specify a \f(CW\*(C`LIBRARY\*(C'\fR in a given \f(CW\*(C`.def\*(C'\fR -file. -.Ip "\f(CW\*(C`\-\-enable\-stdcall\-fixup\*(C'\fR" 4 -.IX Item "--enable-stdcall-fixup" -.Ip "\f(CW\*(C`\-\-disable\-stdcall\-fixup\*(C'\fR" 4 -.IX Item "--disable-stdcall-fixup" -If the link finds a symbol that it cannot resolve, it will attempt to -do \*(L"fuzzy linking\*(R" by looking for another defined symbol that differs -only in the format of the symbol name (cdecl vs stdcall) and will -resolve that symbol by linking to the match. For example, the -undefined symbol \f(CW\*(C`_foo\*(C'\fR might be linked to the function -\&\f(CW\*(C`_foo@12\*(C'\fR, or the undefined symbol \f(CW\*(C`_bar@16\*(C'\fR might be linked -to the function \f(CW\*(C`_bar\*(C'\fR. When the linker does this, it prints a -warning, since it normally should have failed to link, but sometimes -import libraries generated from third-party dlls may need this feature -to be usable. If you specify \f(CW\*(C`\-\-enable\-stdcall\-fixup\*(C'\fR, this -feature is fully enabled and warnings are not printed. If you specify -\&\f(CW\*(C`\-\-disable\-stdcall\-fixup\*(C'\fR, this feature is disabled and such -mismatches are considered to be errors. -.Ip "\f(CW\*(C`\-\-export\-all\-symbols\*(C'\fR" 4 -.IX Item "--export-all-symbols" -If given, all global symbols in the objects used to build a \s-1DLL\s0 will -be exported by the \s-1DLL\s0. Note that this is the default if there -otherwise wouldn't be any exported symbols. When symbols are -explicitly exported via \s-1DEF\s0 files or implicitly exported via function -attributes, the default is to not export anything else unless this -option is given. Note that the symbols \f(CW\*(C`DllMain@12\*(C'\fR, -\&\f(CW\*(C`DllEntryPoint@0\*(C'\fR, and \f(CW\*(C`impure_ptr\*(C'\fR will not be automatically -exported. -.Ip "\f(CW\*(C`\-\-exclude\-symbols \f(CIsymbol\f(CW,\f(CIsymbol\f(CW,...\*(C'\fR" 4 -.IX Item "--exclude-symbols symbol,symbol,..." -Specifies a list of symbols which should not be automatically -exported. The symbol names may be delimited by commas or colons. -.Ip "\f(CW\*(C`\-\-file\-alignment\*(C'\fR" 4 -.IX Item "--file-alignment" -Specify the file alignment. Sections in the file will always begin at -file offsets which are multiples of this number. This defaults to -512. -.Ip "\f(CW\*(C`\-\-heap \f(CIreserve\f(CW\*(C'\fR" 4 -.IX Item "--heap reserve" -.Ip "\f(CW\*(C`\-\-heap \f(CIreserve\f(CW,\f(CIcommit\f(CW\*(C'\fR" 4 -.IX Item "--heap reserve,commit" -Specify the amount of memory to reserve (and optionally commit) to be -used as heap for this program. The default is 1Mb reserved, 4K -committed. -.Ip "\f(CW\*(C`\-\-image\-base \f(CIvalue\f(CW\*(C'\fR" 4 -.IX Item "--image-base value" -Use \fIvalue\fR as the base address of your program or dll. This is -the lowest memory location that will be used when your program or dll -is loaded. To reduce the need to relocate and improve performance of -your dlls, each should have a unique base address and not overlap any -other dlls. The default is 0x400000 for executables, and 0x10000000 -for dlls. -.Ip "\f(CW\*(C`\-\-kill\-at\*(C'\fR" 4 -.IX Item "--kill-at" -If given, the stdcall suffixes (@\fInn\fR) will be stripped from -symbols before they are exported. -.Ip "\f(CW\*(C`\-\-major\-image\-version \f(CIvalue\f(CW\*(C'\fR" 4 -.IX Item "--major-image-version value" -Sets the major number of the \*(L"image version\*(R". Defaults to 1. -.Ip "\f(CW\*(C`\-\-major\-os\-version \f(CIvalue\f(CW\*(C'\fR" 4 -.IX Item "--major-os-version value" -Sets the major number of the \*(L"os version\*(R". Defaults to 4. -.Ip "\f(CW\*(C`\-\-major\-subsystem\-version \f(CIvalue\f(CW\*(C'\fR" 4 -.IX Item "--major-subsystem-version value" -Sets the major number of the \*(L"subsystem version\*(R". Defaults to 4. -.Ip "\f(CW\*(C`\-\-minor\-image\-version \f(CIvalue\f(CW\*(C'\fR" 4 -.IX Item "--minor-image-version value" -Sets the minor number of the \*(L"image version\*(R". Defaults to 0. -.Ip "\f(CW\*(C`\-\-minor\-os\-version \f(CIvalue\f(CW\*(C'\fR" 4 -.IX Item "--minor-os-version value" -Sets the minor number of the \*(L"os version\*(R". Defaults to 0. -.Ip "\f(CW\*(C`\-\-minor\-subsystem\-version \f(CIvalue\f(CW\*(C'\fR" 4 -.IX Item "--minor-subsystem-version value" -Sets the minor number of the \*(L"subsystem version\*(R". Defaults to 0. -.Ip "\f(CW\*(C`\-\-output\-def \f(CIfile\f(CW\*(C'\fR" 4 -.IX Item "--output-def file" -The linker will create the file \fIfile\fR which will contain a \s-1DEF\s0 -file corresponding to the \s-1DLL\s0 the linker is generating. This \s-1DEF\s0 file -(which should be called \f(CW\*(C`*.def\*(C'\fR) may be used to create an import -library with \f(CW\*(C`dlltool\*(C'\fR or may be used as a reference to -automatically or implicitly exported symbols. -.Ip "\f(CW\*(C`\-\-section\-alignment\*(C'\fR" 4 -.IX Item "--section-alignment" -Sets the section alignment. Sections in memory will always begin at -addresses which are a multiple of this number. Defaults to 0x1000. -.Ip "\f(CW\*(C`\-\-stack \f(CIreserve\f(CW\*(C'\fR" 4 -.IX Item "--stack reserve" -.Ip "\f(CW\*(C`\-\-stack \f(CIreserve\f(CW,\f(CIcommit\f(CW\*(C'\fR" 4 -.IX Item "--stack reserve,commit" -Specify the amount of memory to reserve (and optionally commit) to be -used as stack for this program. The default is 32Mb reserved, 4K -committed. -.Ip "\f(CW\*(C`\-\-subsystem \f(CIwhich\f(CW\*(C'\fR" 4 -.IX Item "--subsystem which" -.Ip "\f(CW\*(C`\-\-subsystem \f(CIwhich\f(CW:\f(CImajor\f(CW\*(C'\fR" 4 -.IX Item "--subsystem which:major" -.Ip "\f(CW\*(C`\-\-subsystem \f(CIwhich\f(CW:\f(CImajor\f(CW.\f(CIminor\f(CW\*(C'\fR" 4 -.IX Item "--subsystem which:major.minor" -Specifies the subsystem under which your program will execute. The -legal values for \fIwhich\fR are \f(CW\*(C`native\*(C'\fR, \f(CW\*(C`windows\*(C'\fR, -\&\f(CW\*(C`console\*(C'\fR, and \f(CW\*(C`posix\*(C'\fR. You may optionally set the -subsystem version also. -.SH "ENVIRONMENT" -.IX Header "ENVIRONMENT" -You can change the behavior of \f(CW\*(C`ld\*(C'\fR with the environment variables -\&\f(CW\*(C`GNUTARGET\*(C'\fR, \f(CW\*(C`LDEMULATION\*(C'\fR, and \f(CW\*(C`COLLECT_NO_DEMANGLE\*(C'\fR. -.PP -\&\f(CW\*(C`GNUTARGET\*(C'\fR determines the input-file object format if you don't -use \fB\-b\fR (or its synonym \fB\*(--format\fR). Its value should be one -of the \s-1BFD\s0 names for an input format. If there is no -\&\f(CW\*(C`GNUTARGET\*(C'\fR in the environment, \f(CW\*(C`ld\*(C'\fR uses the natural format -of the target. If \f(CW\*(C`GNUTARGET\*(C'\fR is set to \f(CW\*(C`default\*(C'\fR then \s-1BFD\s0 -attempts to discover the input format by examining binary input files; -this method often succeeds, but there are potential ambiguities, since -there is no method of ensuring that the magic number used to specify -object-file formats is unique. However, the configuration procedure for -\&\s-1BFD\s0 on each system places the conventional format for that system first -in the search-list, so ambiguities are resolved in favor of convention. -.PP -\&\f(CW\*(C`LDEMULATION\*(C'\fR determines the default emulation if you don't use the -\&\fB\-m\fR option. The emulation can affect various aspects of linker -behaviour, particularly the default linker script. You can list the -available emulations with the \fB\*(--verbose\fR or \fB\-V\fR options. If -the \fB\-m\fR option is not used, and the \f(CW\*(C`LDEMULATION\*(C'\fR environment -variable is not defined, the default emulation depends upon how the -linker was configured. -.PP -Normally, the linker will default to demangling symbols. However, if -\&\f(CW\*(C`COLLECT_NO_DEMANGLE\*(C'\fR is set in the environment, then it will -default to not demangling symbols. This environment variable is used in -a similar fashion by the \f(CW\*(C`gcc\*(C'\fR linker wrapper program. The default -may be overridden by the \fB\*(--demangle\fR and \fB\*(--no-demangle\fR -options. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -\&\fIar\fR\|(1), \fInm\fR\|(1), \fIobjcopy\fR\|(1), \fIobjdump\fR\|(1), \fIreadelf\fR\|(1) and -the Info entries for \fIbinutils\fR and -\&\fIld\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with no Invariant Sections, with no Front-Cover Texts, and with no -Back-Cover Texts. A copy of the license is included in the -section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". |