diff options
Diffstat (limited to 'contrib/binutils/gas/doc')
-rw-r--r-- | contrib/binutils/gas/doc/Makefile.am | 43 | ||||
-rw-r--r-- | contrib/binutils/gas/doc/Makefile.in | 350 | ||||
-rw-r--r-- | contrib/binutils/gas/doc/all.texi | 70 | ||||
-rw-r--r-- | contrib/binutils/gas/doc/as.1 | 302 | ||||
-rw-r--r-- | contrib/binutils/gas/doc/as.texinfo | 5190 | ||||
-rw-r--r-- | contrib/binutils/gas/doc/c-i386.texi | 456 | ||||
-rw-r--r-- | contrib/binutils/gas/doc/c-sh.texi | 272 | ||||
-rw-r--r-- | contrib/binutils/gas/doc/c-v850.texi | 308 | ||||
-rw-r--r-- | contrib/binutils/gas/doc/c-z8k.texi | 380 | ||||
-rw-r--r-- | contrib/binutils/gas/doc/gasp.texi | 1086 | ||||
-rw-r--r-- | contrib/binutils/gas/doc/h8.texi | 26 | ||||
-rw-r--r-- | contrib/binutils/gas/doc/internals.texi | 1547 |
12 files changed, 0 insertions, 10030 deletions
diff --git a/contrib/binutils/gas/doc/Makefile.am b/contrib/binutils/gas/doc/Makefile.am deleted file mode 100644 index 894947628527..000000000000 --- a/contrib/binutils/gas/doc/Makefile.am +++ /dev/null @@ -1,43 +0,0 @@ -## Process this file with automake to generate Makefile.in - -AUTOMAKE_OPTIONS = cygnus - -# What version of the manual you want; "all" includes everything -CONFIG=all - -man_MANS = as.1 - -info_TEXINFOS = as.texinfo gasp.texi - -asconfig.texi: $(CONFIG).texi - rm -f asconfig.texi - ln -s $(srcdir)/$(CONFIG).texi ./asconfig.texi >/dev/null 2>&1 \ - || ln $(srcdir)/$(CONFIG).texi ./asconfig.texi >/dev/null 2>&1 \ - || cp $(srcdir)/$(CONFIG).texi ./asconfig.texi - -CPU_DOCS = \ - c-a29k.texi \ - c-arm.texi \ - c-d10v.texi \ - c-h8300.texi \ - c-h8500.texi \ - c-hppa.texi \ - c-i386.texi \ - c-i960.texi \ - c-m68k.texi \ - c-mips.texi \ - c-ns32k.texi \ - c-sh.texi \ - c-sparc.texi \ - c-vax.texi \ - c-v850.texi \ - c-z8k.texi - -as.info: $(srcdir)/as.texinfo asconfig.texi $(CPU_DOCS) -as.dvi: $(srcdir)/as.texinfo asconfig.texi $(CPU_DOCS) - -# This one isn't ready for prime time yet. Not even a little bit. - -noinst_TEXINFOS = internals.texi - -DISTCLEANFILES = asconfig.texi diff --git a/contrib/binutils/gas/doc/Makefile.in b/contrib/binutils/gas/doc/Makefile.in deleted file mode 100644 index d9ee2b255ad9..000000000000 --- a/contrib/binutils/gas/doc/Makefile.in +++ /dev/null @@ -1,350 +0,0 @@ -# Makefile.in generated automatically by automake 1.2e from Makefile.am - -# Copyright (C) 1994, 1995, 1996, 1997, 1998 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 - -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@ -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@ -ALL_OBJ_DEPS = @ALL_OBJ_DEPS@ -BFDLIB = @BFDLIB@ -CC = @CC@ -EXEEXT = @EXEEXT@ -LD = @LD@ -LEX = @LEX@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -NM = @NM@ -OPCODES_LIB = @OPCODES_LIB@ -PACKAGE = @PACKAGE@ -RANLIB = @RANLIB@ -VERSION = @VERSION@ -YACC = @YACC@ -atof = @atof@ -extra_objects = @extra_objects@ -obj_format = @obj_format@ -target_cpu_type = @target_cpu_type@ -te_file = @te_file@ - -AUTOMAKE_OPTIONS = cygnus - -# What version of the manual you want; "all" includes everything -CONFIG=all - -man_MANS = as.1 - -info_TEXINFOS = as.texinfo gasp.texi - -CPU_DOCS = \ - c-a29k.texi \ - c-arm.texi \ - c-d10v.texi \ - c-h8300.texi \ - c-h8500.texi \ - c-hppa.texi \ - c-i386.texi \ - c-i960.texi \ - c-m68k.texi \ - c-mips.texi \ - c-ns32k.texi \ - c-sh.texi \ - c-sparc.texi \ - c-vax.texi \ - c-v850.texi \ - c-z8k.texi - -# This one isn't ready for prime time yet. Not even a little bit. - -noinst_TEXINFOS = internals.texi - -DISTCLEANFILES = asconfig.texi -mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs -CONFIG_HEADER = ../config.h -CONFIG_CLEAN_FILES = -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 = as.info gasp.info -DVIS = as.dvi gasp.dvi -TEXINFOS = as.texinfo gasp.texi -MANS = as.1 - -NROFF = nroff -DIST_COMMON = Makefile.am Makefile.in - - -DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) - -TAR = tar -GZIP = --best -default: all - -.SUFFIXES: -.SUFFIXES: .dvi .info .ps .texi .texinfo -$(srcdir)/Makefile.in: @MAINT@ 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 - - -as.info: as.texinfo -as.dvi: as.texinfo - - -gasp.info: gasp.texi -gasp.dvi: gasp.texi - - -DVIPS = dvips - -.texi.info: - @rm -f $@ $@-[0-9] $@-[0-9][0-9] - $(MAKEINFO) -I $(srcdir) $< - -.texi.dvi: - TEXINPUTS=$(top_srcdir)/../texinfo:$$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:$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< -.dvi.ps: - $(DVIPS) $< -o $@ - -install-info-am: $(INFO_DEPS) - @$(NORMAL_INSTALL) - $(mkinstalldirs) $(infodir) - @for file in $(INFO_DEPS); 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 $(infodir)/$$ifile"; \ - $(INSTALL_DATA) $$d/$$ifile $(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 \ - for file in $(INFO_DEPS); do \ - echo " install-info --info-dir=$(infodir) $(infodir)/$$file";\ - install-info --info-dir=$(infodir) $(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; \ - for file in $(INFO_DEPS); do \ - test -z "$ii" \ - || install-info --info-dir=$(infodir) --remove $$file; \ - done - $(NORMAL_UNINSTALL) - for file in $(INFO_DEPS); do \ - (cd $(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \ - done - -dist-info: $(INFO_DEPS) - for base in $(INFO_DEPS); 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 as.aux as.cp as.cps as.dvi as.fn as.fns as.ky as.kys as.ps \ - as.log as.pg as.toc as.tp as.tps as.vr as.vrs as.op as.tr \ - as.cv as.cn gasp.aux gasp.cp gasp.cps gasp.dvi gasp.fn \ - gasp.fns gasp.ky gasp.kys gasp.ps gasp.log gasp.pg gasp.toc \ - gasp.tp gasp.tps gasp.vr gasp.vrs gasp.op gasp.tr gasp.cv \ - gasp.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-man: $(MANS) - $(NORMAL_INSTALL) - $(mkinstalldirs) $(mandir)/man1 - @sect=1; \ - inst=`echo "as" | sed '$(transform)'`.1; \ - if test -f $(srcdir)/as.1; then file=$(srcdir)/as.1; \ - else file=as.1; fi; \ - echo " $(INSTALL_DATA) $$file $(mandir)/man$$sect/$$inst"; \ - $(INSTALL_DATA) $$file $(mandir)/man$$sect/$$inst - -uninstall-man: - $(NORMAL_UNINSTALL) - -inst=`echo "as" | sed '$(transform)'`.1; \ - rm -f $(mandir)/man1/$$inst - -tags: TAGS -TAGS: - - -distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) - -subdir = doc - -distdir: $(DISTFILES) - @for file in $(DISTFILES); do \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ - test -f $(distdir)/$$file \ - || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ - || cp -p $$d/$$file $(distdir)/$$file; \ - done - $(MAKE) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info -info: $(INFO_DEPS) -dvi: $(DVIS) -check: - $(MAKE) -installcheck: -install-info: install-info-am -install-exec: - @$(NORMAL_INSTALL) - -install-data: install-man - @$(NORMAL_INSTALL) - -install: install-exec install-data all - @: - -uninstall: uninstall-man - -all: Makefile $(MANS) - -install-strip: - $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install -installdirs: - $(mkinstalldirs) $(mandir)/man1 - - -mostlyclean-generic: - -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -rm -f Makefile $(DISTCLEANFILES) - -rm -f config.cache config.log stamp-h stamp-h[0-9]* - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -mostlyclean: mostlyclean-aminfo mostlyclean-generic - -clean: clean-aminfo clean-generic mostlyclean - -distclean: distclean-aminfo distclean-generic clean - -rm -f config.status - -rm -f libtool - -maintainer-clean: maintainer-clean-aminfo maintainer-clean-generic \ - distclean - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - -.PHONY: default install-info-am uninstall-info mostlyclean-aminfo \ -distclean-aminfo clean-aminfo maintainer-clean-aminfo install-man \ -uninstall-man tags distdir info dvi installcheck install-info \ -install-exec install-data install uninstall all installdirs \ -mostlyclean-generic distclean-generic clean-generic \ -maintainer-clean-generic clean mostlyclean distclean maintainer-clean - - -asconfig.texi: $(CONFIG).texi - rm -f asconfig.texi - ln -s $(srcdir)/$(CONFIG).texi ./asconfig.texi >/dev/null 2>&1 \ - || ln $(srcdir)/$(CONFIG).texi ./asconfig.texi >/dev/null 2>&1 \ - || cp $(srcdir)/$(CONFIG).texi ./asconfig.texi - -as.info: $(srcdir)/as.texinfo asconfig.texi $(CPU_DOCS) -as.dvi: $(srcdir)/as.texinfo asconfig.texi $(CPU_DOCS) - -# 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/contrib/binutils/gas/doc/all.texi b/contrib/binutils/gas/doc/all.texi deleted file mode 100644 index 2638dbc04296..000000000000 --- a/contrib/binutils/gas/doc/all.texi +++ /dev/null @@ -1,70 +0,0 @@ -@c Copyright 1992, 1993 Free Software Foundation, Inc. -@c This file is part of the documentation for the GAS manual - -@c Configuration settings for all-inclusive version of manual - -@c switches:------------------------------------------------------------ -@c Properties of the manual -@c ======================== -@c Discuss all architectures? -@set ALL-ARCH -@c A generic form of manual (not tailored to specific target)? -@set GENERIC -@c Include text on assembler internals? -@clear INTERNALS -@c Many object formats supported in this config? -@set MULTI-OBJ - -@c Object formats of interest -@c ========================== -@set AOUT -@set BOUT -@set COFF -@set ELF -@set SOM - -@c CPUs of interest -@c ================ -@set A29K -@set ARC -@set ARM -@set D10V -@set H8/300 -@set H8/500 -@set SH -@set I80386 -@set I960 -@set MIPS -@set M32R -@set M680X0 -@set Z8000 -@set SPARC -@set VAX -@set VXWORKS -@set HPPA -@set V850 - -@c Does this version of the assembler use the difference-table kluge? -@set DIFF-TBL-KLUGE - -@c Do all machines described use IEEE floating point? -@clear IEEEFLOAT - -@c Is a word 32 bits, or 16? -@clear W32 -@set W16 - -@c Do symbols have different characters than usual? -@clear SPECIAL-SYMS - -@c strings:------------------------------------------------------------ -@c Name of the assembler: -@set AS as -@c Name of C compiler: -@set GCC gcc -@c Name of linker: -@set LD ld -@c Text for target machine (best not used in generic case; but just in case...) -@set TARGET machine specific -@c Name of object format NOT SET in generic version -@clear OBJ-NAME diff --git a/contrib/binutils/gas/doc/as.1 b/contrib/binutils/gas/doc/as.1 deleted file mode 100644 index adf28868eac1..000000000000 --- a/contrib/binutils/gas/doc/as.1 +++ /dev/null @@ -1,302 +0,0 @@ -.\" Copyright (c) 1991, 1992, 1996, 1997, 1998 Free Software Foundation -.\" See section COPYING for conditions for redistribution -.TH as 1 "29 March 1996" "cygnus support" "GNU Development Tools" - -.SH NAME -GNU as \- the portable GNU assembler. - -.SH SYNOPSIS -.na -.B as -.RB "[\|" \-a "[\|" dhlns "\|]" \c -\&\[\|\=\c -.I file\c -\&\|]\|] -.RB "[\|" \-D "\|]" -.RB "[\|" \-\-defsym\ SYM=VAL "\|]" -.RB "[\|" \-f "\|]" -.RB "[\|" \-\-gstabs "\|]" -.RB "[\|" \-I -.I path\c -\&\|] -.RB "[\|" \-K "\|]" -.RB "[\|" \-L "\|]" -.RB "[\|" \-M\ |\ \-\-mri "\|]" -.RB "[\|" \-o -.I objfile\c -\&\|] -.RB "[\|" \-R "\|]" -.RB "[\|" \-\-traditional\-format "\|]" -.RB "[\|" \-v "\|]" -.RB "[\|" \-w "\|]" -.RB "[\|" \-\^\- "\ |\ " \c -.I files\c -\&\|.\|.\|.\|] - -.I i960-only options: -.br -.RB "[\|" \-ACA "\||\|" \-ACA_A "\||\|" \-ACB\c -.RB "\||\|" \-ACC "\||\|" \-AKA "\||\|" \-AKB\c -.RB "\||\|" \-AKC "\||\|" \-AMC "\|]" -.RB "[\|" \-b "\|]" -.RB "[\|" \-no-relax "\|]" - -.I m680x0-only options: -.br -.RB "[\|" \-l "\|]" -.RB "[\|" \-mc68000 "\||\|" \-mc68010 "\||\|" \-mc68020 "\|]" -.ad b - -.SH DESCRIPTION -GNU \c -.B as\c -\& is really a family of assemblers. -If you use (or have used) the GNU 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 -\c -.I pseudo-ops)\c -\& and assembler syntax. - -For information on the syntax and pseudo-ops used by GNU \c -.B as\c -\&, see `\|\c -.B as\c -\|' entry in \c -.B info \c -(or the manual \c -.I -.I -Using as: The GNU Assembler\c -\&). - -\c -.B as\c -\& is primarily intended to assemble the output of the GNU C -compiler \c -.B gcc\c -\& for use by the linker \c -.B ld\c -\&. Nevertheless, -we've tried to make \c -.B as\c -\& assemble correctly everything that the native -assembler would. -This doesn't mean \c -.B as\c -\& 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. - -Each time you run \c -.B as\c -\& it assembles exactly one source -program. The source program is made up of one or more files. -(The standard input is also a file.) - -If \c -.B as\c -\& is given no file names it attempts to read one input file -from the \c -.B as\c -\& standard input, which is normally your terminal. You -may have to type \c -.B ctl-D\c -\& to tell \c -.B as\c -\& there is no more program -to assemble. Use `\|\c -.B \-\^\-\c -\|' if you need to explicitly name the standard input file -in your command line. - -.B as\c -\& may write warnings and error messages to the standard error -file (usually your terminal). This should not happen when \c -.B as\c -\& is -run automatically by a compiler. Warnings report an assumption made so -that \c -.B as\c -\& could keep assembling a flawed program; errors report a -grave problem that stops the assembly. - -.SH OPTIONS -.TP -.BR \-a -Turn on assembly listings. There are various suboptions. -.B d -omits debugging directives. -.B h -includes the high level source code; this is only available if the -source file can be found, and the code was compiled with -.B \-g. -.B l -includes an assembly listing. -.B n -omits forms processing. -.B s -includes a symbol listing. -.B = -.I file -sets the listing file name; this must be the last suboption. -The default suboptions are -.B hls. -.TP -.B \-D -This option is accepted only for script compatibility with calls to -other assemblers; it has no effect on \c -.B as\c -\&. -.TP -.B \-\-defsym SYM=VALUE -Define the symbol SYM to be VALUE before assembling the input file. -VALUE must be an integer constant. As in C, a leading 0x indicates a -hexadecimal value, and a leading 0 indicates an octal value. -.TP -.B \-f -``fast''--skip preprocessing (assume source is compiler output). -.TP -.BI "\-I\ " path -Add -.I path -to the search list for -.B .include -directives. -.TP -.B \-\-gstabs -Generate stabs debugging information for each assembler line. This -may help debugging assembler code, if the debugger can handle it. -.TP -.B \-K -Issue warnings when difference tables altered for long displacements. -.TP -.B \-L -Keep (in symbol table) local symbols, starting with `\|\c -.B L\c -\|' -.TP -.B \-M, \-\-mri -Assemble in MRI compatibility mode. -.TP -.BI "\-o\ " objfile -Name the object-file output from \c -.B as -.TP -.B \-R -Fold data section into text section -.TP -.B \-\-traditional\-format -Use same format as native assembler, when possible. -.TP -.B \-v -Announce \c -.B as\c -\& version -.TP -.B \-W -Suppress warning messages -.TP -.IR "\-\^\-" "\ |\ " "files\|.\|.\|." -Source files to assemble, or standard input (\c -.BR "\-\^\-" ")" -.TP -.BI \-A var -.I -(When configured for Intel 960.) -Specify which variant of the 960 architecture is the target. -.TP -.B \-b -.I -(When configured for Intel 960.) -Add code to collect statistics about branches taken. -.TP -.B \-no-relax -.I -(When configured for Intel 960.) -Do not alter compare-and-branch instructions for long displacements; -error if necessary. -.TP -.B \-l -.I -(When configured for Motorola 68000). -.br -Shorten references to undefined symbols, to one word instead of two. -.TP -.BR "\-mc68000" "\||\|" "\-mc68010" "\||\|" "\-mc68020" -.I -(When configured for Motorola 68000). -.br -Specify what processor in the 68000 family is the target (default 68020) - -.PP -Options may be in any order, and may be -before, after, or between file names. The order of file names is -significant. - -`\|\c -.B \-\^\-\c -\|' (two hyphens) by itself names the standard input file -explicitly, as one of the files for \c -.B as\c -\& to assemble. - -Except for `\|\c -.B \-\^\-\c -\|' any command line argument that begins with a -hyphen (`\|\c -.B \-\c -\|') is an option. Each option changes the behavior of -\c -.B as\c -\&. No option changes the way another option works. An -option is a `\|\c -.B \-\c -\|' followed by one or more letters; the case of -the letter is important. All options are optional. - -The `\|\c -.B \-o\c -\|' option expects exactly one file name to follow. The file -name may either immediately follow the option's letter (compatible -with older assemblers) or it may be the next command argument (GNU -standard). - -These two command lines are equivalent: -.br -.B -as\ \ \-o\ \ my\-object\-file.o\ \ mumble.s -.br -.B -as\ \ \-omy\-object\-file.o\ \ mumble.s - -.SH "SEE ALSO" -.RB "`\|" as "\|'" -entry in -.B -info\c -\&; -.I -Using as: The GNU Assembler\c -\&; -.BR gcc "(" 1 ")," -.BR ld "(" 1 ")." - -.SH COPYING -Copyright (c) 1991, 1992 Free Software Foundation, Inc. -.PP -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. -.PP -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the -entire resulting derived work is distributed under the terms of a -permission notice identical to this one. -.PP -Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be included in -translations approved by the Free Software Foundation instead of in -the original English. diff --git a/contrib/binutils/gas/doc/as.texinfo b/contrib/binutils/gas/doc/as.texinfo deleted file mode 100644 index 7bfdc0840457..000000000000 --- a/contrib/binutils/gas/doc/as.texinfo +++ /dev/null @@ -1,5190 +0,0 @@ -\input texinfo @c -*-Texinfo-*- -@c Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 1998 -@c Free Software Foundation, Inc. -@c UPDATE!! On future updates-- -@c (1) check for new machine-dep cmdline options in -@c md_parse_option definitions in config/tc-*.c -@c (2) for platform-specific directives, examine md_pseudo_op -@c in config/tc-*.c -@c (3) for object-format specific directives, examine obj_pseudo_op -@c in config/obj-*.c -@c (4) portable directives in potable[] in read.c -@c %**start of header -@setfilename as.info -@c ---config--- -@c defaults, config file may override: -@set have-stabs -@c --- -@include asconfig.texi -@c --- -@c common OR combinations of conditions -@ifset AOUT -@set aout-bout -@end ifset -@ifset ARM/Thumb -@set ARM -@end ifset -@ifset BOUT -@set aout-bout -@end ifset -@ifset H8/300 -@set H8 -@end ifset -@ifset H8/500 -@set H8 -@end ifset -@ifset SH -@set H8 -@end ifset -@ifset HPPA -@set abnormal-separator -@end ifset -@c ------------ -@ifset GENERIC -@settitle Using @value{AS} -@end ifset -@ifclear GENERIC -@settitle Using @value{AS} (@value{TARGET}) -@end ifclear -@setchapternewpage odd -@c %**end of header - -@c @smallbook -@c @set SMALL -@c WARE! Some of the machine-dependent sections contain tables of machine -@c instructions. Except in multi-column format, these tables look silly. -@c Unfortunately, Texinfo doesn't have a general-purpose multi-col format, so -@c the multi-col format is faked within @example sections. -@c -@c Again unfortunately, the natural size that fits on a page, for these tables, -@c is different depending on whether or not smallbook is turned on. -@c This matters, because of order: text flow switches columns at each page -@c break. -@c -@c The format faked in this source works reasonably well for smallbook, -@c not well for the default large-page format. This manual expects that if you -@c turn on @smallbook, you will also uncomment the "@set SMALL" to enable the -@c tables in question. You can turn on one without the other at your -@c discretion, of course. -@ifinfo -@set SMALL -@c the insn tables look just as silly in info files regardless of smallbook, -@c might as well show 'em anyways. -@end ifinfo - -@ifinfo -@format -START-INFO-DIR-ENTRY -* As: (as). The GNU assembler. -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@finalout -@syncodeindex ky cp - -@ifinfo -This file documents the GNU Assembler "@value{AS}". - -Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -@ignore -Permission is granted to process this file through Tex and print the -results, provided the printed document carries copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). - -@end ignore -Permission is granted to copy and distribute modified versions of this manual -under the conditions for verbatim copying, provided that the entire resulting -derived work is distributed under the terms of a permission notice identical to -this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions. -@end ifinfo - -@titlepage -@title Using @value{AS} -@subtitle The @sc{gnu} Assembler -@ifclear GENERIC -@subtitle for the @value{TARGET} family -@end ifclear -@sp 1 -@subtitle January 1994 -@sp 1 -@sp 13 -The Free Software Foundation Inc. thanks The Nice Computer -Company of Australia for loaning Dean Elsner to write the -first (Vax) version of @code{as} for Project @sc{gnu}. -The proprietors, management and staff of TNCCA thank FSF for -distracting the boss while they got some work -done. -@sp 3 -@author Dean Elsner, Jay Fenlason & friends -@page -@tex -{\parskip=0pt -\hfill {\it Using {\tt @value{AS}}}\par -\hfill Edited by Cygnus Support\par -} -%"boxit" macro for figures: -%Modified from Knuth's ``boxit'' macro from TeXbook (answer to exercise 21.3) -\gdef\boxit#1#2{\vbox{\hrule\hbox{\vrule\kern3pt - \vbox{\parindent=0pt\parskip=0pt\hsize=#1\kern3pt\strut\hfil -#2\hfil\strut\kern3pt}\kern3pt\vrule}\hrule}}%box with visible outline -\gdef\ibox#1#2{\hbox to #1{#2\hfil}\kern8pt}% invisible box -@end tex - -@vskip 0pt plus 1filll -Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this manual -under the conditions for verbatim copying, provided that the entire resulting -derived work is distributed under the terms of a permission notice identical to -this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions. -@end titlepage - -@ifinfo -@node Top -@top Using @value{AS} - -This file is a user guide to the @sc{gnu} assembler @code{@value{AS}}. -@ifclear GENERIC -This version of the file describes @code{@value{AS}} configured to generate -code for @value{TARGET} architectures. -@end ifclear -@menu -* Overview:: Overview -* Invoking:: Command-Line Options -* Syntax:: Syntax -* Sections:: Sections and Relocation -* Symbols:: Symbols -* Expressions:: Expressions -* Pseudo Ops:: Assembler Directives -* Machine Dependencies:: Machine Dependent Features -* Reporting Bugs:: Reporting Bugs -* Acknowledgements:: Who Did What -* Index:: Index -@end menu -@end ifinfo - -@node Overview -@chapter Overview -@iftex -This manual is a user guide to the @sc{gnu} assembler @code{@value{AS}}. -@ifclear GENERIC -This version of the manual describes @code{@value{AS}} configured to generate -code for @value{TARGET} architectures. -@end ifclear -@end iftex - -@cindex invocation summary -@cindex option summary -@cindex summary of options -Here is a brief summary of how to invoke @code{@value{AS}}. For details, -@pxref{Invoking,,Comand-Line Options}. - -@c We don't use deffn and friends for the following because they seem -@c to be limited to one line for the header. -@smallexample -@value{AS} [ -a[cdhlns][=file] ] [ -D ] [ --defsym @var{sym}=@var{val} ] - [ -f ] [ --gstabs ] [ --help ] [ -I @var{dir} ] [ -J ] [ -K ] [ -L ] - [ --keep-locals ] [ -o @var{objfile} ] [ -R ] [ --statistics ] [ -v ] - [ -version ] [ --version ] [ -W ] [ -w ] [ -x ] [ -Z ] -@ifset A29K -@c am29k has no machine-dependent assembler options -@end ifset -@ifset ARC - [ -mbig-endian | -mlittle-endian ] -@end ifset -@ifset ARM - [ -m[arm]1 | -m[arm]2 | -m[arm]250 | -m[arm]3 | -m[arm]6 | -m[arm]7[t][[d]m[i]] ] - [ -m[arm]v2 | -m[arm]v2a | -m[arm]v3 | -m[arm]v3m | -m[arm]v4 | -m[arm]v4t ] - [ -mthumb | -mall ] - [ -mfpa10 | -mfpa11 | -mfpe-old | -mno-fpu ] - [ -EB | -EL ] - [ -mapcs-32 | -mapcs-26 ] -@end ifset -@ifset D10V - [ -O ] -@end ifset -@ifset H8 -@c Hitachi family chips have no machine-dependent assembler options -@end ifset -@ifset HPPA -@c HPPA has no machine-dependent assembler options (yet). -@end ifset -@ifset SPARC -@c The order here is important. See c-sparc.texi. - [ -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite - -Av8plus | -Av8plusa | -Av9 | -Av9a ] - [ -xarch=v8plus | -xarch=v8plusa ] [ -bump ] [ -32 | -64 ] -@end ifset -@ifset Z8000 -@c Z8000 has no machine-dependent assembler options -@end ifset -@ifset I960 -@c see md_parse_option in tc-i960.c - [ -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC ] - [ -b ] [ -no-relax ] -@end ifset -@ifset M680X0 - [ -l ] [ -m68000 | -m68010 | -m68020 | ... ] -@end ifset -@ifset MIPS - [ -nocpp ] [ -EL ] [ -EB ] [ -G @var{num} ] [ -mcpu=@var{CPU} ] - [ -mips1 ] [ -mips2 ] [ -mips3 ] [ -m4650 ] [ -no-m4650 ] - [ --trap ] [ --break ] - [ --emulation=@var{name} ] -@end ifset - [ -- | @var{files} @dots{} ] -@end smallexample - -@table @code -@item -a[cdhlmns] -Turn on listings, in any of a variety of ways: - -@table @code -@item -ac -omit false conditionals - -@item -ad -omit debugging directives - -@item -ah -include high-level source - -@item -al -include assembly - -@item -am -include macro expansions - -@item -an -omit forms processing - -@item -as -include symbols - -@item =file -set the name of the listing file -@end table - -You may combine these options; for example, use @samp{-aln} for assembly -listing without forms processing. The @samp{=file} option, if used, must be -the last one. By itself, @samp{-a} defaults to @samp{-ahls}. - -@item -D -Ignored. This option is accepted for script compatibility with calls to -other assemblers. - -@item --defsym @var{sym}=@var{value} -Define the symbol @var{sym} to be @var{value} before assembling the input file. -@var{value} must be an integer constant. As in C, a leading @samp{0x} -indicates a hexadecimal value, and a leading @samp{0} indicates an octal value. - -@item -f -``fast''---skip whitespace and comment preprocessing (assume source is -compiler output). - -@item --gstabs -Generate stabs debugging information for each assembler line. This -may help debugging assembler code, if the debugger can handle it. - -@item --help -Print a summary of the command line options and exit. - -@item -I @var{dir} -Add directory @var{dir} to the search list for @code{.include} directives. - -@item -J -Don't warn about signed overflow. - -@item -K -@ifclear DIFF-TBL-KLUGE -This option is accepted but has no effect on the @value{TARGET} family. -@end ifclear -@ifset DIFF-TBL-KLUGE -Issue warnings when difference tables altered for long displacements. -@end ifset - -@item -L -@itemx --keep-locals -Keep (in the symbol table) local symbols. On traditional a.out systems -these start with @samp{L}, but different systems have different local -label prefixes. - -@item -o @var{objfile} -Name the object-file output from @code{@value{AS}} @var{objfile}. - -@item -R -Fold the data section into the text section. - -@item --statistics -Print the maximum space (in bytes) and total time (in seconds) used by -assembly. - -@item --strip-local-absolute -Remove local absolute symbols from the outgoing symbol table. - -@item -v -@itemx -version -Print the @code{as} version. - -@item --version -Print the @code{as} version and exit. - -@item -W -Suppress warning messages. - -@item -w -Ignored. - -@item -x -Ignored. - -@item -Z -Generate an object file even after errors. - -@item -- | @var{files} @dots{} -Standard input, or source files to assemble. - -@end table - -@ifset ARC -The following options are available when @value{AS} is configured for -an ARC processor. - -@table @code - -@cindex ARC endianness -@cindex endianness, ARC -@cindex big endian output, ARC -@item -mbig-endian -Generate ``big endian'' format output. - -@cindex little endian output, ARC -@item -mlittle-endian -Generate ``little endian'' format output. - -@end table -@end ifset - -@ifset ARM -The following options are available when @value{AS} is configured for the ARM -processor family. - -@table @code -@item -m[arm]1 | -m[arm]2 | -m[arm]250 | -m[arm]3 | -m[arm]6 | -m[arm]7[t][[d]m] | -m[arm]v2 | -m[arm]v2a | -m[arm]v3 | -m[arm]v3m | -m[arm]v4 | -m[arm]v4t -Specify which variant of the ARM architecture is the target. -@item -mthumb | -mall -Enable or disable Thumb only instruction decoding. -@item -mfpa10 | -mfpa11 | -mfpe-old | -mno-fpu -Select which Floating Point architcture is the target. -@item -mapcs-32 | -mapcs-26 -Select which procedure calling convention is in use. -@item -EB | -EL -Select either big-endian (-EB) or little-endian (-EL) output. -@end table -@end ifset - -@ifset D10V -The following options are available when @value{AS} is configured for -a D10V processor. -@table @code -@cindex D10V optimization -@cindex optimization, D10V -@item -O -Optimize output by parallelizing instructions. -@end table -@end ifset - - -@ifset I960 -The following options are available when @value{AS} is configured for the -Intel 80960 processor. - -@table @code -@item -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC -Specify which variant of the 960 architecture is the target. - -@item -b -Add code to collect statistics about branches taken. - -@item -no-relax -Do not alter compare-and-branch instructions for long displacements; -error if necessary. - -@end table -@end ifset - - -@ifset M680X0 -The following options are available when @value{AS} is configured for the -Motorola 68000 series. - -@table @code - -@item -l -Shorten references to undefined symbols, to one word instead of two. - -@item -m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040 | -m68060 -@itemx | -m68302 | -m68331 | -m68332 | -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. - -@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. - -@item -m68851 | -mno-68851 -The target machine does (or does not) have a memory-management -unit coprocessor. The default is to assume an MMU for 68020 and up. - -@end table -@end ifset - -@ifset SPARC -The following options are available when @code{@value{AS}} is configured -for the SPARC architecture: - -@table @code -@item -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite -@itemx -Av8plus | -Av8plusa | -Av9 | -Av9a -Explicitly select a variant of the SPARC architecture. - -@samp{-Av8plus} and @samp{-Av8plusa} select a 32 bit environment. -@samp{-Av9} and @samp{-Av9a} select a 64 bit environment. - -@samp{-Av8plusa} and @samp{-Av9a} enable the SPARC V9 instruction set with -UltraSPARC extensions. - -@item -xarch=v8plus | -xarch=v8plusa -For compatibility with the Solaris v9 assembler. These options are -equivalent to -Av8plus and -Av8plusa, respectively. - -@item -bump -Warn when the assembler switches to another architecture. -@end table -@end ifset - -@ifset MIPS -The following options are available when @value{AS} is configured for -a MIPS processor. - -@table @code -@item -G @var{num} -This option sets the largest size of an object that can be referenced -implicitly with the @code{gp} register. It is only accepted for targets that -use ECOFF format, such as a DECstation running Ultrix. The default value is 8. - -@cindex MIPS endianness -@cindex endianness, MIPS -@cindex big endian output, MIPS -@item -EB -Generate ``big endian'' format output. - -@cindex little endian output, MIPS -@item -EL -Generate ``little endian'' format output. - -@cindex MIPS ISA -@item -mips1 -@itemx -mips2 -@itemx -mips3 -Generate code for a particular MIPS Instruction Set Architecture level. -@samp{-mips1} corresponds to the @sc{r2000} and @sc{r3000} processors, -@samp{-mips2} to the @sc{r6000} processor, and @samp{-mips3} to the @sc{r4000} -processor. - -@item -m4650 -@itemx -no-m4650 -Generate code for the MIPS @sc{r4650} chip. This tells the assembler to accept -the @samp{mad} and @samp{madu} instruction, and to not schedule @samp{nop} -instructions around accesses to the @samp{HI} and @samp{LO} registers. -@samp{-no-m4650} turns off this option. - -@item -mcpu=@var{CPU} -Generate code for a particular MIPS cpu. This has little effect on the -assembler, but it is passed by @code{@value{GCC}}. - -@cindex emulation -@item --emulation=@var{name} -This option causes @code{@value{AS}} to emulate @code{@value{AS}} configured -for some other target, in all respects, including output format (choosing -between ELF and ECOFF only), handling of pseudo-opcodes which may generate -debugging information or store symbol table information, and default -endianness. The available configuration names are: @samp{mipsecoff}, -@samp{mipself}, @samp{mipslecoff}, @samp{mipsbecoff}, @samp{mipslelf}, -@samp{mipsbelf}. 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 @samp{b} or @samp{l} -in the name. Using @samp{-EB} or @samp{-EL} will override the endianness -selection in any case. - -This option is currently supported only when the primary target -@code{@value{AS}} is configured for is a MIPS ELF or ECOFF target. -Furthermore, the primary target or others specified with -@samp{--enable-targets=@dots{}} 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. - -Eventually, this option will support more configurations, with more -fine-grained control over the assembler's behavior, and will be supported for -more processors. - -@item -nocpp -@code{@value{AS}} ignores this option. It is accepted for compatibility with -the native tools. - -@need 900 -@item --trap -@itemx --no-trap -@itemx --break -@itemx --no-break -Control how to deal with multiplication overflow and division by zero. -@samp{--trap} or @samp{--no-break} (which are synonyms) take a trap exception -(and only work for Instruction Set Architecture level 2 and higher); -@samp{--break} or @samp{--no-trap} (also synonyms, and the default) take a -break exception. -@end table -@end ifset - -@menu -* Manual:: Structure of this Manual -* GNU Assembler:: The GNU Assembler -* Object Formats:: Object File Formats -* Command Line:: Command Line -* Input Files:: Input Files -* Object:: Output (Object) File -* Errors:: Error and Warning Messages -@end menu - -@node Manual -@section Structure of this Manual - -@cindex manual, structure and purpose -This manual is intended to describe what you need to know to use -@sc{gnu} @code{@value{AS}}. We cover the syntax expected in source files, including -notation for symbols, constants, and expressions; the directives that -@code{@value{AS}} understands; and of course how to invoke @code{@value{AS}}. - -@ifclear GENERIC -We also cover special features in the @value{TARGET} -configuration of @code{@value{AS}}, including assembler directives. -@end ifclear -@ifset GENERIC -This manual also describes some of the machine-dependent features of -various flavors of the assembler. -@end ifset - -@cindex machine instructions (not covered) -On the other hand, this manual is @emph{not} intended as an introduction -to programming in assembly language---let alone programming in general! -In a similar vein, we make no attempt to introduce the machine -architecture; we do @emph{not} describe the instruction set, standard -mnemonics, registers or addressing modes that are standard to a -particular architecture. -@ifset GENERIC -You may want to consult the manufacturer's -machine architecture manual for this information. -@end ifset -@ifclear GENERIC -@ifset H8/300 -For information on the H8/300 machine instruction set, see @cite{H8/300 -Series Programming Manual} (Hitachi ADE--602--025). For the H8/300H, -see @cite{H8/300H Series Programming Manual} (Hitachi). -@end ifset -@ifset H8/500 -For information on the H8/500 machine instruction set, see @cite{H8/500 -Series Programming Manual} (Hitachi M21T001). -@end ifset -@ifset SH -For information on the Hitachi SH machine instruction set, see -@cite{SH-Microcomputer User's Manual} (Hitachi Micro Systems, Inc.). -@end ifset -@ifset Z8000 -For information on the Z8000 machine instruction set, see @cite{Z8000 CPU Technical Manual} -@end ifset -@end ifclear - -@c I think this is premature---doc@cygnus.com, 17jan1991 -@ignore -Throughout this manual, we assume that you are running @dfn{GNU}, -the portable operating system from the @dfn{Free Software -Foundation, Inc.}. This restricts our attention to certain kinds of -computer (in particular, the kinds of computers that @sc{gnu} can run on); -once this assumption is granted examples and definitions need less -qualification. - -@code{@value{AS}} is part of a team of programs that turn a high-level -human-readable series of instructions into a low-level -computer-readable series of instructions. Different versions of -@code{@value{AS}} are used for different kinds of computer. -@end ignore - -@c There used to be a section "Terminology" here, which defined -@c "contents", "byte", "word", and "long". Defining "word" to any -@c particular size is confusing when the .word directive may generate 16 -@c bits on one machine and 32 bits on another; in general, for the user -@c version of this manual, none of these terms seem essential to define. -@c They were used very little even in the former draft of the manual; -@c this draft makes an effort to avoid them (except in names of -@c directives). - -@node GNU Assembler -@section The GNU Assembler - -@sc{gnu} @code{as} is really a family of assemblers. -@ifclear GENERIC -This manual describes @code{@value{AS}}, a member of that family which is -configured for the @value{TARGET} architectures. -@end ifclear -If you use (or have used) the @sc{gnu} 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 -@dfn{pseudo-ops}) and assembler syntax.@refill - -@cindex purpose of @sc{gnu} assembler -@code{@value{AS}} is primarily intended to assemble the output of the -@sc{gnu} C compiler @code{@value{GCC}} for use by the linker -@code{@value{LD}}. Nevertheless, we've tried to make @code{@value{AS}} -assemble correctly everything that other assemblers for the same -machine would assemble. -@ifset VAX -Any exceptions are documented explicitly (@pxref{Machine Dependencies}). -@end ifset -@ifset M680X0 -@c This remark should appear in generic version of manual; assumption -@c here is that generic version sets M680x0. -This doesn't mean @code{@value{AS}} 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. -@end ifset - -Unlike older assemblers, @code{@value{AS}} is designed to assemble a source -program in one pass of the source file. This has a subtle impact on the -@kbd{.org} directive (@pxref{Org,,@code{.org}}). - -@node Object Formats -@section Object File Formats - -@cindex object file format -The @sc{gnu} assembler can be configured to produce several alternative -object file formats. For the most part, this does not affect how you -write assembly language programs; but directives for debugging symbols -are typically different in different file formats. @xref{Symbol -Attributes,,Symbol Attributes}. -@ifclear GENERIC -@ifclear MULTI-OBJ -On the @value{TARGET}, @code{@value{AS}} is configured to produce -@value{OBJ-NAME} format object files. -@end ifclear -@c The following should exhaust all configs that set MULTI-OBJ, ideally -@ifset A29K -On the @value{TARGET}, @code{@value{AS}} can be configured to produce either -@code{a.out} or COFF format object files. -@end ifset -@ifset I960 -On the @value{TARGET}, @code{@value{AS}} can be configured to produce either -@code{b.out} or COFF format object files. -@end ifset -@ifset HPPA -On the @value{TARGET}, @code{@value{AS}} can be configured to produce either -SOM or ELF format object files. -@end ifset -@end ifclear - -@node Command Line -@section Command Line - -@cindex command line conventions -After the program name @code{@value{AS}}, the command line may contain -options and file names. Options may appear in any order, and may be -before, after, or between file names. The order of file names is -significant. - -@cindex standard input, as input file -@kindex -- -@file{--} (two hyphens) by itself names the standard input file -explicitly, as one of the files for @code{@value{AS}} to assemble. - -@cindex options, command line -Except for @samp{--} any command line argument that begins with a -hyphen (@samp{-}) is an option. Each option changes the behavior of -@code{@value{AS}}. No option changes the way another option works. An -option is a @samp{-} followed by one or more letters; the case of -the letter is important. All options are optional. - -Some options expect exactly one file name to follow them. The file -name may either immediately follow the option's letter (compatible -with older assemblers) or it may be the next command argument (@sc{gnu} -standard). These two command lines are equivalent: - -@smallexample -@value{AS} -o my-object-file.o mumble.s -@value{AS} -omy-object-file.o mumble.s -@end smallexample - -@node Input Files -@section Input Files - -@cindex input -@cindex source program -@cindex files, input -We use the phrase @dfn{source program}, abbreviated @dfn{source}, to -describe the program input to one run of @code{@value{AS}}. The program may -be in one or more files; how the source is partitioned into files -doesn't change the meaning of the source. - -@c I added "con" prefix to "catenation" just to prove I can overcome my -@c APL training... doc@cygnus.com -The source program is a concatenation of the text in all the files, in the -order specified. - -Each time you run @code{@value{AS}} it assembles exactly one source -program. The source program is made up of one or more files. -(The standard input is also a file.) - -You give @code{@value{AS}} 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. - -If you give @code{@value{AS}} no file names it attempts to read one input file -from the @code{@value{AS}} standard input, which is normally your terminal. You -may have to type @key{ctl-D} to tell @code{@value{AS}} there is no more program -to assemble. - -Use @samp{--} if you need to explicitly name the standard input file -in your command line. - -If the source is empty, @code{@value{AS}} produces a small, empty object -file. - -@subheading Filenames and Line-numbers - -@cindex input file linenumbers -@cindex line numbers, in input files -There are two ways of locating a line in the input file (or files) and -either may be used in reporting error messages. One way refers to a line -number in a physical file; the other refers to a line number in a -``logical'' file. @xref{Errors, ,Error and Warning Messages}. - -@dfn{Physical files} are those files named in the command line given -to @code{@value{AS}}. - -@dfn{Logical files} are simply names declared explicitly by assembler -directives; they bear no relation to physical files. Logical file names -help error messages reflect the original source file, when @code{@value{AS}} -source is itself synthesized from other files. -@xref{App-File,,@code{.app-file}}. - -@node Object -@section Output (Object) File - -@cindex object file -@cindex output file -@kindex a.out -@kindex .o -Every time you run @code{@value{AS}} it produces an output file, which is -your assembly language program translated into numbers. This file -is the object file. Its default name is -@ifclear BOUT -@code{a.out}. -@end ifclear -@ifset BOUT -@ifset GENERIC -@code{a.out}, or -@end ifset -@code{b.out} when @code{@value{AS}} is configured for the Intel 80960. -@end ifset -You can give it another name by using the @code{-o} option. Conventionally, -object file names end with @file{.o}. The default name is used for historical -reasons: older assemblers were capable of assembling self-contained programs -directly into a runnable program. (For some formats, this isn't currently -possible, but it can be done for the @code{a.out} format.) - -@cindex linker -@kindex ld -The object file is meant for input to the linker @code{@value{LD}}. It contains -assembled program code, information to help @code{@value{LD}} integrate -the assembled program into a runnable file, and (optionally) symbolic -information for the debugger. - -@c link above to some info file(s) like the description of a.out. -@c don't forget to describe @sc{gnu} info as well as Unix lossage. - -@node Errors -@section Error and Warning Messages - -@cindex error messsages -@cindex warning messages -@cindex messages from assembler -@code{@value{AS}} may write warnings and error messages to the standard error -file (usually your terminal). This should not happen when a compiler -runs @code{@value{AS}} automatically. Warnings report an assumption made so -that @code{@value{AS}} could keep assembling a flawed program; errors report a -grave problem that stops the assembly. - -@cindex format of warning messages -Warning messages have the format - -@smallexample -file_name:@b{NNN}:Warning Message Text -@end smallexample - -@noindent -@cindex line numbers, in warnings/errors -(where @b{NNN} is a line number). If a logical file name has been given -(@pxref{App-File,,@code{.app-file}}) it is used for the filename, -otherwise the name of the current input file is used. If a logical line -number was given -@ifset GENERIC -(@pxref{Line,,@code{.line}}) -@end ifset -@ifclear GENERIC -@ifclear A29K -(@pxref{Line,,@code{.line}}) -@end ifclear -@ifset A29K -(@pxref{Ln,,@code{.ln}}) -@end ifset -@end ifclear -then it is used to calculate the number printed, -otherwise the actual line in the current source file is printed. The -message text is intended to be self explanatory (in the grand Unix -tradition). - -@cindex format of error messages -Error messages have the format -@smallexample -file_name:@b{NNN}:FATAL:Error Message Text -@end smallexample -The file name and line number are derived as for warning -messages. The actual message text may be rather less explanatory -because many of them aren't supposed to happen. - -@node Invoking -@chapter Command-Line Options - -@cindex options, all versions of assembler -This chapter describes command-line options available in @emph{all} -versions of the @sc{gnu} assembler; @pxref{Machine Dependencies}, for options specific -@ifclear GENERIC -to the @value{TARGET}. -@end ifclear -@ifset GENERIC -to particular machine architectures. -@end ifset - -If you are invoking @code{@value{AS}} via the @sc{gnu} C compiler (version 2), you -can use the @samp{-Wa} option to pass arguments through to the -assembler. The assembler arguments must be separated from each other -(and the @samp{-Wa}) by commas. For example: - -@smallexample -gcc -c -g -O -Wa,-alh,-L file.c -@end smallexample - -@noindent -emits a listing to standard output with high-level -and assembly source. - -Usually you do not need to use this @samp{-Wa} mechanism, since many compiler -command-line options are automatically passed to the assembler by the compiler. -(You can call the @sc{gnu} compiler driver with the @samp{-v} option to see -precisely what options it passes to each compilation pass, including the -assembler.) - -@menu -* a:: -a[cdhlns] enable listings -* D:: -D for compatibility -* f:: -f to work faster -* I:: -I for .include search path -@ifclear DIFF-TBL-KLUGE -* K:: -K for compatibility -@end ifclear -@ifset DIFF-TBL-KLUGE -* K:: -K for difference tables -@end ifset - -* L:: -L to retain local labels -* M:: -M or --mri to assemble in MRI compatibility mode -* MD:: --MD for dependency tracking -* o:: -o to name the object file -* R:: -R to join data and text sections -* statistics:: --statistics to see statistics about assembly -* traditional-format:: --traditional-format for compatible output -* v:: -v to announce version -* W:: -W to suppress warnings -* Z:: -Z to make object file even after errors -@end menu - -@node a -@section Enable Listings: @code{-a[cdhlns]} - -@kindex -a -@kindex -ac -@kindex -ad -@kindex -ah -@kindex -al -@kindex -an -@kindex -as -@cindex listings, enabling -@cindex assembly listings, enabling - -These options enable listing output from the assembler. By itself, -@samp{-a} requests high-level, assembly, and symbols listing. -You can use other letters to select specific options for the list: -@samp{-ah} requests a high-level language listing, -@samp{-al} requests an output-program assembly listing, and -@samp{-as} requests a symbol table listing. -High-level listings require that a compiler debugging option like -@samp{-g} be used, and that assembly listings (@samp{-al}) be requested -also. - -Use the @samp{-ac} option to omit false conditionals from a listing. Any lines -which are not assembled because of a false @code{.if} (or @code{.ifdef}, or any -other conditional), or a true @code{.if} followed by an @code{.else}, will be -omitted from the listing. - -Use the @samp{-ad} option to omit debugging directives from the -listing. - -Once you have specified one of these options, you can further control -listing output and its appearance using the directives @code{.list}, -@code{.nolist}, @code{.psize}, @code{.eject}, @code{.title}, and -@code{.sbttl}. -The @samp{-an} option turns off all forms processing. -If you do not request listing output with one of the @samp{-a} options, the -listing-control directives have no effect. - -The letters after @samp{-a} may be combined into one option, -@emph{e.g.}, @samp{-aln}. - -@node D -@section @code{-D} - -@kindex -D -This option has no effect whatsoever, but it is accepted to make it more -likely that scripts written for other assemblers also work with -@code{@value{AS}}. - -@node f -@section Work Faster: @code{-f} - -@kindex -f -@cindex trusted compiler -@cindex faster processing (@code{-f}) -@samp{-f} should only be used when assembling programs written by a -(trusted) compiler. @samp{-f} stops the assembler from doing whitespace -and comment preprocessing on -the input file(s) before assembling them. @xref{Preprocessing, -,Preprocessing}. - -@quotation -@emph{Warning:} if you use @samp{-f} when the files actually need to be -preprocessed (if they contain comments, for example), @code{@value{AS}} does -not work correctly. -@end quotation - -@node I -@section @code{.include} search path: @code{-I} @var{path} - -@kindex -I @var{path} -@cindex paths for @code{.include} -@cindex search path for @code{.include} -@cindex @code{include} directive search path -Use this option to add a @var{path} to the list of directories -@code{@value{AS}} searches for files specified in @code{.include} -directives (@pxref{Include,,@code{.include}}). You may use @code{-I} as -many times as necessary to include a variety of paths. The current -working directory is always searched first; after that, @code{@value{AS}} -searches any @samp{-I} directories in the same order as they were -specified (left to right) on the command line. - -@node K -@section Difference Tables: @code{-K} - -@kindex -K -@ifclear DIFF-TBL-KLUGE -On the @value{TARGET} family, this option is allowed, but has no effect. It is -permitted for compatibility with the @sc{gnu} assembler on other platforms, -where it can be used to warn when the assembler alters the machine code -generated for @samp{.word} directives in difference tables. The @value{TARGET} -family does not have the addressing limitations that sometimes lead to this -alteration on other platforms. -@end ifclear - -@ifset DIFF-TBL-KLUGE -@cindex difference tables, warning -@cindex warning for altered difference tables -@code{@value{AS}} sometimes alters the code emitted for directives of the form -@samp{.word @var{sym1}-@var{sym2}}; @pxref{Word,,@code{.word}}. -You can use the @samp{-K} option if you want a warning issued when this -is done. -@end ifset - -@node L -@section Include Local Labels: @code{-L} - -@kindex -L -@cindex local labels, retaining in output -Labels beginning with @samp{L} (upper case only) are called @dfn{local -labels}. @xref{Symbol Names}. Normally you do not see such labels when -debugging, because they are intended for the use of programs (like -compilers) that compose assembler programs, not for your notice. -Normally both @code{@value{AS}} and @code{@value{LD}} discard such labels, so you do not -normally debug with them. - -This option tells @code{@value{AS}} to retain those @samp{L@dots{}} symbols -in the object file. Usually if you do this you also tell the linker -@code{@value{LD}} to preserve symbols whose names begin with @samp{L}. - -By default, a local label is any label beginning with @samp{L}, but each -target is allowed to redefine the local label prefix. -@ifset HPPA -On the HPPA local labels begin with @samp{L$}. -@end ifset -@ifset ARM -@samp{;} for the ARM family; -@end ifset - -@node M -@section Assemble in MRI Compatibility Mode: @code{-M} - -@kindex -M -@cindex MRI compatibility mode -The @code{-M} or @code{--mri} option selects MRI compatibility mode. This -changes the syntax and pseudo-op handling of @code{@value{AS}} to make it -compatible with the @code{ASM68K} or the @code{ASM960} (depending upon the -configured target) assembler from Microtec Research. The exact nature of the -MRI syntax will not be documented here; see the MRI manuals for more -information. Note in particular that the handling of macros and macro -arguments is somewhat different. The purpose of this option is to permit -assembling existing MRI assembler code using @code{@value{AS}}. - -The MRI compatibility is not complete. Certain operations of the MRI assembler -depend upon its object file format, and can not be supported using other object -file formats. Supporting these would require enhancing each object file format -individually. These are: - -@itemize @bullet -@item global symbols in common section - -The m68k MRI assembler supports common sections which are merged by the linker. -Other object file formats do not support this. @code{@value{AS}} handles -common sections by treating them as a single common symbol. It permits local -symbols to be defined within a common section, but it can not support global -symbols, since it has no way to describe them. - -@item complex relocations - -The MRI assemblers support relocations against a negated section address, and -relocations which combine the start addresses of two or more sections. These -are not support by other object file formats. - -@item @code{END} pseudo-op specifying start address - -The MRI @code{END} pseudo-op permits the specification of a start address. -This is not supported by other object file formats. The start address may -instead be specified using the @code{-e} option to the linker, or in a linker -script. - -@item @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops - -The MRI @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops assign a module -name to the output file. This is not supported by other object file formats. - -@item @code{ORG} pseudo-op - -The m68k MRI @code{ORG} pseudo-op begins an absolute section at a given -address. This differs from the usual @code{@value{AS}} @code{.org} pseudo-op, -which changes the location within the current section. Absolute sections are -not supported by other object file formats. The address of a section may be -assigned within a linker script. -@end itemize - -There are some other features of the MRI assembler which are not supported by -@code{@value{AS}}, typically either because they are difficult or because they -seem of little consequence. Some of these may be supported in future releases. - -@itemize @bullet - -@item EBCDIC strings - -EBCDIC strings are not supported. - -@item packed binary coded decimal - -Packed binary coded decimal is not supported. This means that the @code{DC.P} -and @code{DCB.P} pseudo-ops are not supported. - -@item @code{FEQU} pseudo-op - -The m68k @code{FEQU} pseudo-op is not supported. - -@item @code{NOOBJ} pseudo-op - -The m68k @code{NOOBJ} pseudo-op is not supported. - -@item @code{OPT} branch control options - -The m68k @code{OPT} branch control options---@code{B}, @code{BRS}, @code{BRB}, -@code{BRL}, and @code{BRW}---are ignored. @code{@value{AS}} automatically -relaxes all branches, whether forward or backward, to an appropriate size, so -these options serve no purpose. - -@item @code{OPT} list control options - -The following m68k @code{OPT} list control options are ignored: @code{C}, -@code{CEX}, @code{CL}, @code{CRE}, @code{E}, @code{G}, @code{I}, @code{M}, -@code{MEX}, @code{MC}, @code{MD}, @code{X}. - -@item other @code{OPT} options - -The following m68k @code{OPT} options are ignored: @code{NEST}, @code{O}, -@code{OLD}, @code{OP}, @code{P}, @code{PCO}, @code{PCR}, @code{PCS}, @code{R}. - -@item @code{OPT} @code{D} option is default - -The m68k @code{OPT} @code{D} option is the default, unlike the MRI assembler. -@code{OPT NOD} may be used to turn it off. - -@item @code{XREF} pseudo-op. - -The m68k @code{XREF} pseudo-op is ignored. - -@item @code{.debug} pseudo-op - -The i960 @code{.debug} pseudo-op is not supported. - -@item @code{.extended} pseudo-op - -The i960 @code{.extended} pseudo-op is not supported. - -@item @code{.list} pseudo-op. - -The various options of the i960 @code{.list} pseudo-op are not supported. - -@item @code{.optimize} pseudo-op - -The i960 @code{.optimize} pseudo-op is not supported. - -@item @code{.output} pseudo-op - -The i960 @code{.output} pseudo-op is not supported. - -@item @code{.setreal} pseudo-op - -The i960 @code{.setreal} pseudo-op is not supported. - -@end itemize - -@node MD -@section Dependency tracking: @code{--MD} - -@kindex --MD -@cindex dependency tracking -@cindex make rules - -@code{@value{AS}} can generate a dependency file for the file it creates. This -file consists of a single rule suitable for @code{make} describing the -dependencies of the main source file. - -The rule is written to the file named in its argument. - -This feature is used in the automatic updating of makefiles. - -@node o -@section Name the Object File: @code{-o} - -@kindex -o -@cindex naming object file -@cindex object file name -There is always one object file output when you run @code{@value{AS}}. By -default it has the name -@ifset GENERIC -@ifset I960 -@file{a.out} (or @file{b.out}, for Intel 960 targets only). -@end ifset -@ifclear I960 -@file{a.out}. -@end ifclear -@end ifset -@ifclear GENERIC -@ifset I960 -@file{b.out}. -@end ifset -@ifclear I960 -@file{a.out}. -@end ifclear -@end ifclear -You use this option (which takes exactly one filename) to give the -object file a different name. - -Whatever the object file is called, @code{@value{AS}} overwrites any -existing file of the same name. - -@node R -@section Join Data and Text Sections: @code{-R} - -@kindex -R -@cindex data and text sections, joining -@cindex text and data sections, joining -@cindex joining text and data sections -@cindex merging text and data sections -@code{-R} tells @code{@value{AS}} to write the object file as if all -data-section data lives in the text section. This is only done at -the very last moment: your binary data are the same, but data -section parts are relocated differently. The data section part of -your object file is zero bytes long because all its bytes are -appended to the text section. (@xref{Sections,,Sections and Relocation}.) - -When you specify @code{-R} it would be possible to generate shorter -address displacements (because we do not have to cross between text and -data section). We refrain from doing this simply for compatibility with -older versions of @code{@value{AS}}. In future, @code{-R} may work this way. - -@ifset COFF -When @code{@value{AS}} is configured for COFF output, -this option is only useful if you use sections named @samp{.text} and -@samp{.data}. -@end ifset - -@ifset HPPA -@code{-R} is not supported for any of the HPPA targets. Using -@code{-R} generates a warning from @code{@value{AS}}. -@end ifset - -@node statistics -@section Display Assembly Statistics: @code{--statistics} - -@kindex --statistics -@cindex statistics, about assembly -@cindex time, total for assembly -@cindex space used, maximum for assembly -Use @samp{--statistics} to display two statistics about the resources used by -@code{@value{AS}}: the maximum amount of space allocated during the assembly -(in bytes), and the total execution time taken for the assembly (in @sc{cpu} -seconds). - -@node traditional-format -@section Compatible output: @code{--traditional-format} - -@kindex --traditional-format -For some targets, the output of @code{@value{AS}} is different in some ways -from the output of some existing assembler. This switch requests -@code{@value{AS}} to use the traditional format instead. - -For example, it disables the exception frame optimizations which -@code{@value{AS}} normally does by default on @code{@value{GCC}} output. - -@node v -@section Announce Version: @code{-v} - -@kindex -v -@kindex -version -@cindex assembler version -@cindex version of assembler -You can find out what version of as is running by including the -option @samp{-v} (which you can also spell as @samp{-version}) on the -command line. - -@node W -@section Suppress Warnings: @code{-W} - -@kindex -W -@cindex suppressing warnings -@cindex warnings, suppressing -@code{@value{AS}} should never give a warning or error message when -assembling compiler output. But programs written by people often -cause @code{@value{AS}} to give a warning that a particular assumption was -made. All such warnings are directed to the standard error file. -If you use this option, no warnings are issued. This option only -affects the warning messages: it does not change any particular of how -@code{@value{AS}} assembles your file. Errors, which stop the assembly, are -still reported. - -@node Z -@section Generate Object File in Spite of Errors: @code{-Z} -@cindex object file, after errors -@cindex errors, continuing after -After an error message, @code{@value{AS}} normally produces no output. If for -some reason you are interested in object file output even after -@code{@value{AS}} gives an error message on your program, use the @samp{-Z} -option. If there are any errors, @code{@value{AS}} continues anyways, and -writes an object file after a final warning message of the form @samp{@var{n} -errors, @var{m} warnings, generating bad object file.} - -@node Syntax -@chapter Syntax - -@cindex machine-independent syntax -@cindex syntax, machine-independent -This chapter describes the machine-independent syntax allowed in a -source file. @code{@value{AS}} syntax is similar to what many other -assemblers use; it is inspired by the BSD 4.2 -@ifclear VAX -assembler. -@end ifclear -@ifset VAX -assembler, except that @code{@value{AS}} does not assemble Vax bit-fields. -@end ifset - -@menu -* Preprocessing:: Preprocessing -* Whitespace:: Whitespace -* Comments:: Comments -* Symbol Intro:: Symbols -* Statements:: Statements -* Constants:: Constants -@end menu - -@node Preprocessing -@section Preprocessing - -@cindex preprocessing -The @code{@value{AS}} internal preprocessor: -@itemize @bullet -@cindex whitespace, removed by preprocessor -@item -adjusts and removes extra whitespace. It leaves one space or tab before -the keywords on a line, and turns any other whitespace on the line into -a single space. - -@cindex comments, removed by preprocessor -@item -removes all comments, replacing them with a single space, or an -appropriate number of newlines. - -@cindex constants, converted by preprocessor -@item -converts character constants into the appropriate numeric values. -@end itemize - -It does not do macro processing, include file handling, or -anything else you may get from your C compiler's preprocessor. You can -do include file processing with the @code{.include} directive -(@pxref{Include,,@code{.include}}). You can use the @sc{gnu} C compiler driver -to get other ``CPP'' style preprocessing, by giving the input file a -@samp{.S} suffix. @xref{Overall Options,, Options Controlling the Kind of -Output, gcc.info, Using GNU CC}. - -Excess whitespace, comments, and character constants -cannot be used in the portions of the input text that are not -preprocessed. - -@cindex turning preprocessing on and off -@cindex preprocessing, turning on and off -@kindex #NO_APP -@kindex #APP -If the first line of an input file is @code{#NO_APP} or if you use the -@samp{-f} option, whitespace and comments are not removed from the input file. -Within an input file, you can ask for whitespace and comment removal in -specific portions of the by putting a line that says @code{#APP} before the -text that may contain whitespace or comments, and putting a line that says -@code{#NO_APP} after this text. This feature is mainly intend to support -@code{asm} statements in compilers whose output is otherwise free of comments -and whitespace. - -@node Whitespace -@section Whitespace - -@cindex whitespace -@dfn{Whitespace} is one or more blanks or tabs, in any order. -Whitespace is used to separate symbols, and to make programs neater for -people to read. Unless within character constants -(@pxref{Characters,,Character Constants}), any whitespace means the same -as exactly one space. - -@node Comments -@section Comments - -@cindex comments -There are two ways of rendering comments to @code{@value{AS}}. In both -cases the comment is equivalent to one space. - -Anything from @samp{/*} through the next @samp{*/} is a comment. -This means you may not nest these comments. - -@smallexample -/* - The only way to include a newline ('\n') in a comment - is to use this sort of comment. -*/ - -/* This sort of comment does not nest. */ -@end smallexample - -@cindex line comment character -Anything from the @dfn{line comment} character to the next newline -is considered a comment and is ignored. The line comment character is -@ifset A29K -@samp{;} for the AMD 29K family; -@end ifset -@ifset ARC -@samp{;} on the ARC; -@end ifset -@ifset H8/300 -@samp{;} for the H8/300 family; -@end ifset -@ifset H8/500 -@samp{!} for the H8/500 family; -@end ifset -@ifset HPPA -@samp{;} for the HPPA; -@end ifset -@ifset I960 -@samp{#} on the i960; -@end ifset -@ifset SH -@samp{!} for the Hitachi SH; -@end ifset -@ifset SPARC -@samp{!} on the SPARC; -@end ifset -@ifset M32R -@samp{#} on the m32r; -@end ifset -@ifset M680X0 -@samp{|} on the 680x0; -@end ifset -@ifset VAX -@samp{#} on the Vax; -@end ifset -@ifset Z8000 -@samp{!} for the Z8000; -@end ifset -@ifset V850 -@samp{#} on the V850; -@end ifset -see @ref{Machine Dependencies}. @refill -@c FIXME What about i386, m88k, i860? - -@ifset GENERIC -On some machines there are two different line comment characters. One -character only begins a comment if it is the first non-whitespace character on -a line, while the other always begins a comment. -@end ifset - -@ifset V850 -The V850 assembler also supports a double dash as starting a comment that -extends to the end of the line. - -@samp{--}; -@end ifset - -@kindex # -@cindex lines starting with @code{#} -@cindex logical line numbers -To be compatible with past assemblers, lines that begin with @samp{#} have a -special interpretation. Following the @samp{#} should be an absolute -expression (@pxref{Expressions}): the logical line number of the @emph{next} -line. Then a string (@pxref{Strings,, Strings}) is allowed: if present it is a -new logical file name. The rest of the line, if any, should be whitespace. - -If the first non-whitespace characters on the line are not numeric, -the line is ignored. (Just like a comment.) - -@smallexample - # This is an ordinary comment. -# 42-6 "new_file_name" # New logical file name - # This is logical line # 36. -@end smallexample -This feature is deprecated, and may disappear from future versions -of @code{@value{AS}}. - -@node Symbol Intro -@section Symbols - -@cindex characters used in symbols -@ifclear SPECIAL-SYMS -A @dfn{symbol} is one or more characters chosen from the set of all -letters (both upper and lower case), digits and the three characters -@samp{_.$}. -@end ifclear -@ifset SPECIAL-SYMS -@ifclear GENERIC -@ifset H8 -A @dfn{symbol} is one or more characters chosen from the set of all -letters (both upper and lower case), digits and the three characters -@samp{._$}. (Save that, on the H8/300 only, you may not use @samp{$} in -symbol names.) -@end ifset -@end ifclear -@end ifset -@ifset GENERIC -On most machines, you can also use @code{$} in symbol names; exceptions -are noted in @ref{Machine Dependencies}. -@end ifset -No symbol may begin with a digit. Case is significant. -There is no length limit: all characters are significant. Symbols are -delimited by characters not in that set, or by the beginning of a file -(since the source program must end with a newline, the end of a file is -not a possible symbol delimiter). @xref{Symbols}. -@cindex length of symbols - -@node Statements -@section Statements - -@cindex statements, structure of -@cindex line separator character -@cindex statement separator character -@ifclear GENERIC -@ifclear abnormal-separator -A @dfn{statement} ends at a newline character (@samp{\n}) or at a -semicolon (@samp{;}). The newline or semicolon is considered part of -the preceding statement. Newlines and semicolons within character -constants are an exception: they do not end statements. -@end ifclear -@ifset abnormal-separator -@ifset A29K -A @dfn{statement} ends at a newline character (@samp{\n}) or an ``at'' -sign (@samp{@@}). The newline or at sign is considered part of the -preceding statement. Newlines and at signs within character constants -are an exception: they do not end statements. -@end ifset -@ifset HPPA -A @dfn{statement} ends at a newline character (@samp{\n}) or an exclamation -point (@samp{!}). The newline or exclamation point is considered part of the -preceding statement. Newlines and exclamation points within character -constants are an exception: they do not end statements. -@end ifset -@ifset H8 -A @dfn{statement} ends at a newline character (@samp{\n}); or (for the -H8/300) a dollar sign (@samp{$}); or (for the -Hitachi-SH or the -H8/500) a semicolon -(@samp{;}). The newline or separator character is considered part of -the preceding statement. Newlines and separators within character -constants are an exception: they do not end statements. -@end ifset -@end ifset -@end ifclear -@ifset GENERIC -A @dfn{statement} ends at a newline character (@samp{\n}) or line -separator character. (The line separator is usually @samp{;}, unless -this conflicts with the comment character; @pxref{Machine Dependencies}.) The -newline or separator character is considered part of the preceding -statement. Newlines and separators within character constants are an -exception: they do not end statements. -@end ifset - -@cindex newline, required at file end -@cindex EOF, newline must precede -It is an error to end any statement with end-of-file: the last -character of any input file should be a newline.@refill - -@cindex continuing statements -@cindex multi-line statements -@cindex statement on multiple lines -You may write a statement on more than one line if you put a -backslash (@kbd{\}) immediately in front of any newlines within the -statement. When @code{@value{AS}} reads a backslashed newline both -characters are ignored. You can even put backslashed newlines in -the middle of symbol names without changing the meaning of your -source program. - -An empty statement is allowed, and may include whitespace. It is ignored. - -@cindex instructions and directives -@cindex directives and instructions -@c "key symbol" is not used elsewhere in the document; seems pedantic to -@c @defn{} it in that case, as was done previously... doc@cygnus.com, -@c 13feb91. -A statement begins with zero or more labels, optionally followed by a -key symbol which determines what kind of statement it is. The key -symbol determines the syntax of the rest of the statement. If the -symbol begins with a dot @samp{.} then the statement is an assembler -directive: typically valid for any computer. If the symbol begins with -a letter the statement is an assembly language @dfn{instruction}: it -assembles into a machine language instruction. -@ifset GENERIC -Different versions of @code{@value{AS}} for different computers -recognize different instructions. In fact, the same symbol may -represent a different instruction in a different computer's assembly -language.@refill -@end ifset - -@cindex @code{:} (label) -@cindex label (@code{:}) -A label is a symbol immediately followed by a colon (@code{:}). -Whitespace before a label or after a colon is permitted, but you may not -have whitespace between a label's symbol and its colon. @xref{Labels}. - -@ifset HPPA -For HPPA targets, labels need not be immediately followed by a colon, but -the definition of a label must begin in column zero. This also implies that -only one label may be defined on each line. -@end ifset - -@smallexample -label: .directive followed by something -another_label: # This is an empty statement. - instruction operand_1, operand_2, @dots{} -@end smallexample - -@node Constants -@section Constants - -@cindex constants -A constant is a number, written so that its value is known by -inspection, without knowing any context. Like this: -@smallexample -@group -.byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value. -.ascii "Ring the bell\7" # A string constant. -.octa 0x123456789abcdef0123456789ABCDEF0 # A bignum. -.float 0f-314159265358979323846264338327\ -95028841971.693993751E-40 # - pi, a flonum. -@end group -@end smallexample - -@menu -* Characters:: Character Constants -* Numbers:: Number Constants -@end menu - -@node Characters -@subsection Character Constants - -@cindex character constants -@cindex constants, character -There are two kinds of character constants. A @dfn{character} stands -for one character in one byte and its value may be used in -numeric expressions. String constants (properly called string -@emph{literals}) are potentially many bytes and their values may not be -used in arithmetic expressions. - -@menu -* Strings:: Strings -* Chars:: Characters -@end menu - -@node Strings -@subsubsection Strings - -@cindex string constants -@cindex constants, string -A @dfn{string} is written between double-quotes. It may contain -double-quotes or null characters. The way to get special characters -into a string is to @dfn{escape} these characters: precede them with -a backslash @samp{\} character. For example @samp{\\} represents -one backslash: the first @code{\} is an escape which tells -@code{@value{AS}} to interpret the second character literally as a backslash -(which prevents @code{@value{AS}} from recognizing the second @code{\} as an -escape character). The complete list of escapes follows. - -@cindex escape codes, character -@cindex character escape codes -@table @kbd -@c @item \a -@c Mnemonic for ACKnowledge; for ASCII this is octal code 007. -@c -@cindex @code{\b} (backspace character) -@cindex backspace (@code{\b}) -@item \b -Mnemonic for backspace; for ASCII this is octal code 010. - -@c @item \e -@c Mnemonic for EOText; for ASCII this is octal code 004. -@c -@cindex @code{\f} (formfeed character) -@cindex formfeed (@code{\f}) -@item \f -Mnemonic for FormFeed; for ASCII this is octal code 014. - -@cindex @code{\n} (newline character) -@cindex newline (@code{\n}) -@item \n -Mnemonic for newline; for ASCII this is octal code 012. - -@c @item \p -@c Mnemonic for prefix; for ASCII this is octal code 033, usually known as @code{escape}. -@c -@cindex @code{\r} (carriage return character) -@cindex carriage return (@code{\r}) -@item \r -Mnemonic for carriage-Return; for ASCII this is octal code 015. - -@c @item \s -@c Mnemonic for space; for ASCII this is octal code 040. Included for compliance with -@c other assemblers. -@c -@cindex @code{\t} (tab) -@cindex tab (@code{\t}) -@item \t -Mnemonic for horizontal Tab; for ASCII this is octal code 011. - -@c @item \v -@c Mnemonic for Vertical tab; for ASCII this is octal code 013. -@c @item \x @var{digit} @var{digit} @var{digit} -@c A hexadecimal character code. The numeric code is 3 hexadecimal digits. -@c -@cindex @code{\@var{ddd}} (octal character code) -@cindex octal character code (@code{\@var{ddd}}) -@item \ @var{digit} @var{digit} @var{digit} -An octal character code. The numeric code is 3 octal digits. -For compatibility with other Unix systems, 8 and 9 are accepted as digits: -for example, @code{\008} has the value 010, and @code{\009} the value 011. - -@cindex @code{\@var{xd...}} (hex character code) -@cindex hex character code (@code{\@var{xd...}}) -@item \@code{x} @var{hex-digits...} -A hex character code. All trailing hex digits are combined. Either upper or -lower case @code{x} works. - -@cindex @code{\\} (@samp{\} character) -@cindex backslash (@code{\\}) -@item \\ -Represents one @samp{\} character. - -@c @item \' -@c Represents one @samp{'} (accent acute) character. -@c This is needed in single character literals -@c (@xref{Characters,,Character Constants}.) to represent -@c a @samp{'}. -@c -@cindex @code{\"} (doublequote character) -@cindex doublequote (@code{\"}) -@item \" -Represents one @samp{"} character. Needed in strings to represent -this character, because an unescaped @samp{"} would end the string. - -@item \ @var{anything-else} -Any other character when escaped by @kbd{\} gives a warning, but -assembles as if the @samp{\} was not present. The idea is that if -you used an escape sequence you clearly didn't want the literal -interpretation of the following character. However @code{@value{AS}} has no -other interpretation, so @code{@value{AS}} knows it is giving you the wrong -code and warns you of the fact. -@end table - -Which characters are escapable, and what those escapes represent, -varies widely among assemblers. The current set is what we think -the BSD 4.2 assembler recognizes, and is a subset of what most C -compilers recognize. If you are in doubt, do not use an escape -sequence. - -@node Chars -@subsubsection Characters - -@cindex single character constant -@cindex character, single -@cindex constant, single character -A single character may be written as a single quote immediately -followed by that character. The same escapes apply to characters as -to strings. So if you want to write the character backslash, you -must write @kbd{'\\} where the first @code{\} escapes the second -@code{\}. As you can see, the quote is an acute accent, not a -grave accent. A newline -@ifclear GENERIC -@ifclear abnormal-separator -(or semicolon @samp{;}) -@end ifclear -@ifset abnormal-separator -@ifset A29K -(or at sign @samp{@@}) -@end ifset -@ifset H8 -(or dollar sign @samp{$}, for the H8/300; or semicolon @samp{;} for the -Hitachi SH or -H8/500) -@end ifset -@end ifset -@end ifclear -immediately following an acute accent is taken as a literal character -and does not count as the end of a statement. The value of a character -constant in a numeric expression is the machine's byte-wide code for -that character. @code{@value{AS}} assumes your character code is ASCII: -@kbd{'A} means 65, @kbd{'B} means 66, and so on. @refill - -@node Numbers -@subsection Number Constants - -@cindex constants, number -@cindex number constants -@code{@value{AS}} distinguishes three kinds of numbers according to how they -are stored in the target machine. @emph{Integers} are numbers that -would fit into an @code{int} in the C language. @emph{Bignums} are -integers, but they are stored in more than 32 bits. @emph{Flonums} -are floating point numbers, described below. - -@menu -* Integers:: Integers -* Bignums:: Bignums -* Flonums:: Flonums -@ifclear GENERIC -@ifset I960 -* Bit Fields:: Bit Fields -@end ifset -@end ifclear -@end menu - -@node Integers -@subsubsection Integers -@cindex integers -@cindex constants, integer - -@cindex binary integers -@cindex integers, binary -A binary integer is @samp{0b} or @samp{0B} followed by zero or more of -the binary digits @samp{01}. - -@cindex octal integers -@cindex integers, octal -An octal integer is @samp{0} followed by zero or more of the octal -digits (@samp{01234567}). - -@cindex decimal integers -@cindex integers, decimal -A decimal integer starts with a non-zero digit followed by zero or -more digits (@samp{0123456789}). - -@cindex hexadecimal integers -@cindex integers, hexadecimal -A hexadecimal integer is @samp{0x} or @samp{0X} followed by one or -more hexadecimal digits chosen from @samp{0123456789abcdefABCDEF}. - -Integers have the usual values. To denote a negative integer, use -the prefix operator @samp{-} discussed under expressions -(@pxref{Prefix Ops,,Prefix Operators}). - -@node Bignums -@subsubsection Bignums - -@cindex bignums -@cindex constants, bignum -A @dfn{bignum} has the same syntax and semantics as an integer -except that the number (or its negative) takes more than 32 bits to -represent in binary. The distinction is made because in some places -integers are permitted while bignums are not. - -@node Flonums -@subsubsection Flonums -@cindex flonums -@cindex floating point numbers -@cindex constants, floating point - -@cindex precision, floating point -A @dfn{flonum} represents a floating point number. The translation is -indirect: a decimal floating point number from the text is converted by -@code{@value{AS}} to a generic binary floating point number of more than -sufficient precision. This generic floating point number is converted -to a particular computer's floating point format (or formats) by a -portion of @code{@value{AS}} specialized to that computer. - -A flonum is written by writing (in order) -@itemize @bullet -@item -The digit @samp{0}. -@ifset HPPA -(@samp{0} is optional on the HPPA.) -@end ifset - -@item -A letter, to tell @code{@value{AS}} the rest of the number is a flonum. -@ifset GENERIC -@kbd{e} is recommended. Case is not important. -@ignore -@c FIXME: verify if flonum syntax really this vague for most cases -(Any otherwise illegal letter works here, but that might be changed. Vax BSD -4.2 assembler seems to allow any of @samp{defghDEFGH}.) -@end ignore - -On the H8/300, H8/500, -Hitachi SH, -and AMD 29K architectures, the letter must be -one of the letters @samp{DFPRSX} (in upper or lower case). - -On the ARC, the letter must be one of the letters @samp{DFRS} -(in upper or lower case). - -On the Intel 960 architecture, the letter must be -one of the letters @samp{DFT} (in upper or lower case). - -On the HPPA architecture, the letter must be @samp{E} (upper case only). -@end ifset -@ifclear GENERIC -@ifset A29K -One of the letters @samp{DFPRSX} (in upper or lower case). -@end ifset -@ifset ARC -One of the letters @samp{DFRS} (in upper or lower case). -@end ifset -@ifset H8 -One of the letters @samp{DFPRSX} (in upper or lower case). -@end ifset -@ifset HPPA -The letter @samp{E} (upper case only). -@end ifset -@ifset I960 -One of the letters @samp{DFT} (in upper or lower case). -@end ifset -@end ifclear - -@item -An optional sign: either @samp{+} or @samp{-}. - -@item -An optional @dfn{integer part}: zero or more decimal digits. - -@item -An optional @dfn{fractional part}: @samp{.} followed by zero -or more decimal digits. - -@item -An optional exponent, consisting of: - -@itemize @bullet -@item -An @samp{E} or @samp{e}. -@c I can't find a config where "EXP_CHARS" is other than 'eE', but in -@c principle this can perfectly well be different on different targets. -@item -Optional sign: either @samp{+} or @samp{-}. -@item -One or more decimal digits. -@end itemize - -@end itemize - -At least one of the integer part or the fractional part must be -present. The floating point number has the usual base-10 value. - -@code{@value{AS}} does all processing using integers. Flonums are computed -independently of any floating point hardware in the computer running -@code{@value{AS}}. - -@ifclear GENERIC -@ifset I960 -@c Bit fields are written as a general facility but are also controlled -@c by a conditional-compilation flag---which is as of now (21mar91) -@c turned on only by the i960 config of GAS. -@node Bit Fields -@subsubsection Bit Fields - -@cindex bit fields -@cindex constants, bit field -You can also define numeric constants as @dfn{bit fields}. -specify two numbers separated by a colon--- -@example -@var{mask}:@var{value} -@end example -@noindent -@code{@value{AS}} applies a bitwise @sc{and} between @var{mask} and -@var{value}. - -The resulting number is then packed -@ifset GENERIC -@c this conditional paren in case bit fields turned on elsewhere than 960 -(in host-dependent byte order) -@end ifset -into a field whose width depends on which assembler directive has the -bit-field as its argument. Overflow (a result from the bitwise and -requiring more binary digits to represent) is not an error; instead, -more constants are generated, of the specified width, beginning with the -least significant digits.@refill - -The directives @code{.byte}, @code{.hword}, @code{.int}, @code{.long}, -@code{.short}, and @code{.word} accept bit-field arguments. -@end ifset -@end ifclear - -@node Sections -@chapter Sections and Relocation -@cindex sections -@cindex relocation - -@menu -* Secs Background:: Background -* Ld Sections:: Linker Sections -* As Sections:: Assembler Internal Sections -* Sub-Sections:: Sub-Sections -* bss:: bss Section -@end menu - -@node Secs Background -@section Background - -Roughly, a section is a range of addresses, with no gaps; all data -``in'' those addresses is treated the same for some particular purpose. -For example there may be a ``read only'' section. - -@cindex linker, and assembler -@cindex assembler, and linker -The linker @code{@value{LD}} reads many object files (partial programs) and -combines their contents to form a runnable program. When @code{@value{AS}} -emits an object file, the partial program is assumed to start at address 0. -@code{@value{LD}} assigns the final addresses for the partial program, so that -different partial programs do not overlap. This is actually an -oversimplification, but it suffices to explain how @code{@value{AS}} uses -sections. - -@code{@value{LD}} moves blocks of bytes of your program to their run-time -addresses. These blocks slide to their run-time addresses as rigid -units; their length does not change and neither does the order of bytes -within them. Such a rigid unit is called a @emph{section}. Assigning -run-time addresses to sections is called @dfn{relocation}. It includes -the task of adjusting mentions of object-file addresses so they refer to -the proper run-time addresses. -@ifset H8 -For the H8/300 and H8/500, -and for the Hitachi SH, -@code{@value{AS}} pads sections if needed to -ensure they end on a word (sixteen bit) boundary. -@end ifset - -@cindex standard assembler sections -An object file written by @code{@value{AS}} has at least three sections, any -of which may be empty. These are named @dfn{text}, @dfn{data} and -@dfn{bss} sections. - -@ifset COFF -@ifset GENERIC -When it generates COFF output, -@end ifset -@code{@value{AS}} can also generate whatever other named sections you specify -using the @samp{.section} directive (@pxref{Section,,@code{.section}}). -If you do not use any directives that place output in the @samp{.text} -or @samp{.data} sections, these sections still exist, but are empty. -@end ifset - -@ifset HPPA -@ifset GENERIC -When @code{@value{AS}} generates SOM or ELF output for the HPPA, -@end ifset -@code{@value{AS}} can also generate whatever other named sections you -specify using the @samp{.space} and @samp{.subspace} directives. See -@cite{HP9000 Series 800 Assembly Language Reference Manual} -(HP 92432-90001) for details on the @samp{.space} and @samp{.subspace} -assembler directives. - -@ifset SOM -Additionally, @code{@value{AS}} uses different names for the standard -text, data, and bss sections when generating SOM output. Program text -is placed into the @samp{$CODE$} section, data into @samp{$DATA$}, and -BSS into @samp{$BSS$}. -@end ifset -@end ifset - -Within the object file, the text section starts at address @code{0}, the -data section follows, and the bss section follows the data section. - -@ifset HPPA -When generating either SOM or ELF output files on the HPPA, the text -section starts at address @code{0}, the data section at address -@code{0x4000000}, and the bss section follows the data section. -@end ifset - -To let @code{@value{LD}} know which data changes when the sections are -relocated, and how to change that data, @code{@value{AS}} also writes to the -object file details of the relocation needed. To perform relocation -@code{@value{LD}} must know, each time an address in the object -file is mentioned: -@itemize @bullet -@item -Where in the object file is the beginning of this reference to -an address? -@item -How long (in bytes) is this reference? -@item -Which section does the address refer to? What is the numeric value of -@display -(@var{address}) @minus{} (@var{start-address of section})? -@end display -@item -Is the reference to an address ``Program-Counter relative''? -@end itemize - -@cindex addresses, format of -@cindex section-relative addressing -In fact, every address @code{@value{AS}} ever uses is expressed as -@display -(@var{section}) + (@var{offset into section}) -@end display -@noindent -Further, most expressions @code{@value{AS}} computes have this section-relative -nature. -@ifset SOM -(For some object formats, such as SOM for the HPPA, some expressions are -symbol-relative instead.) -@end ifset - -In this manual we use the notation @{@var{secname} @var{N}@} to mean ``offset -@var{N} into section @var{secname}.'' - -Apart from text, data and bss sections you need to know about the -@dfn{absolute} section. When @code{@value{LD}} mixes partial programs, -addresses in the absolute section remain unchanged. For example, address -@code{@{absolute 0@}} is ``relocated'' to run-time address 0 by -@code{@value{LD}}. Although the linker never arranges two partial programs' -data sections with overlapping addresses after linking, @emph{by definition} -their absolute sections must overlap. Address @code{@{absolute@ 239@}} in one -part of a program is always the same address when the program is running as -address @code{@{absolute@ 239@}} in any other part of the program. - -The idea of sections is extended to the @dfn{undefined} section. Any -address whose section is unknown at assembly time is by definition -rendered @{undefined @var{U}@}---where @var{U} is filled in later. -Since numbers are always defined, the only way to generate an undefined -address is to mention an undefined symbol. A reference to a named -common block would be such a symbol: its value is unknown at assembly -time so it has section @emph{undefined}. - -By analogy the word @emph{section} is used to describe groups of sections in -the linked program. @code{@value{LD}} puts all partial programs' text -sections in contiguous addresses in the linked program. It is -customary to refer to the @emph{text section} of a program, meaning all -the addresses of all partial programs' text sections. Likewise for -data and bss sections. - -Some sections are manipulated by @code{@value{LD}}; others are invented for -use of @code{@value{AS}} and have no meaning except during assembly. - -@node Ld Sections -@section Linker Sections -@code{@value{LD}} deals with just four kinds of sections, summarized below. - -@table @strong - -@ifset COFF -@cindex named sections -@cindex sections, named -@item named sections -@end ifset -@ifset aout-bout -@cindex text section -@cindex data section -@itemx text section -@itemx data section -@end ifset -These sections hold your program. @code{@value{AS}} and @code{@value{LD}} treat them as -separate but equal sections. Anything you can say of one section is -true another. -@ifset aout-bout -When the program is running, however, it is -customary for the text section to be unalterable. The -text section is often shared among processes: it contains -instructions, constants and the like. The data section of a running -program is usually alterable: for example, C variables would be stored -in the data section. -@end ifset - -@cindex bss section -@item bss section -This section contains zeroed bytes when your program begins running. It -is used to hold unitialized variables or common storage. The length of -each partial program's bss section is important, but because it starts -out containing zeroed bytes there is no need to store explicit zero -bytes in the object file. The bss section was invented to eliminate -those explicit zeros from object files. - -@cindex absolute section -@item absolute section -Address 0 of this section is always ``relocated'' to runtime address 0. -This is useful if you want to refer to an address that @code{@value{LD}} must -not change when relocating. In this sense we speak of absolute -addresses being ``unrelocatable'': they do not change during relocation. - -@cindex undefined section -@item undefined section -This ``section'' is a catch-all for address references to objects not in -the preceding sections. -@c FIXME: ref to some other doc on obj-file formats could go here. -@end table - -@cindex relocation example -An idealized example of three relocatable sections follows. -@ifset COFF -The example uses the traditional section names @samp{.text} and @samp{.data}. -@end ifset -Memory addresses are on the horizontal axis. - -@c TEXI2ROFF-KILL -@ifinfo -@c END TEXI2ROFF-KILL -@smallexample - +-----+----+--+ -partial program # 1: |ttttt|dddd|00| - +-----+----+--+ - - text data bss - seg. seg. seg. - - +---+---+---+ -partial program # 2: |TTT|DDD|000| - +---+---+---+ - - +--+---+-----+--+----+---+-----+~~ -linked program: | |TTT|ttttt| |dddd|DDD|00000| - +--+---+-----+--+----+---+-----+~~ - - addresses: 0 @dots{} -@end smallexample -@c TEXI2ROFF-KILL -@end ifinfo -@need 5000 -@tex - -\line{\it Partial program \#1: \hfil} -\line{\ibox{2.5cm}{\tt text}\ibox{2cm}{\tt data}\ibox{1cm}{\tt bss}\hfil} -\line{\boxit{2.5cm}{\tt ttttt}\boxit{2cm}{\tt dddd}\boxit{1cm}{\tt 00}\hfil} - -\line{\it Partial program \#2: \hfil} -\line{\ibox{1cm}{\tt text}\ibox{1.5cm}{\tt data}\ibox{1cm}{\tt bss}\hfil} -\line{\boxit{1cm}{\tt TTT}\boxit{1.5cm}{\tt DDDD}\boxit{1cm}{\tt 000}\hfil} - -\line{\it linked program: \hfil} -\line{\ibox{.5cm}{}\ibox{1cm}{\tt text}\ibox{2.5cm}{}\ibox{.75cm}{}\ibox{2cm}{\tt data}\ibox{1.5cm}{}\ibox{2cm}{\tt bss}\hfil} -\line{\boxit{.5cm}{}\boxit{1cm}{\tt TTT}\boxit{2.5cm}{\tt -ttttt}\boxit{.75cm}{}\boxit{2cm}{\tt dddd}\boxit{1.5cm}{\tt -DDDD}\boxit{2cm}{\tt 00000}\ \dots\hfil} - -\line{\it addresses: \hfil} -\line{0\dots\hfil} - -@end tex -@c END TEXI2ROFF-KILL - -@node As Sections -@section Assembler Internal Sections - -@cindex internal assembler sections -@cindex sections in messages, internal -These sections are meant only for the internal use of @code{@value{AS}}. They -have no meaning at run-time. You do not really need to know about these -sections for most purposes; but they can be mentioned in @code{@value{AS}} -warning messages, so it might be helpful to have an idea of their -meanings to @code{@value{AS}}. These sections are used to permit the -value of every expression in your assembly language program to be a -section-relative address. - -@table @b -@cindex assembler internal logic error -@item ASSEMBLER-INTERNAL-LOGIC-ERROR! -An internal assembler logic error has been found. This means there is a -bug in the assembler. - -@cindex expr (internal section) -@item expr section -The assembler stores complex expression internally as combinations of -symbols. When it needs to represent an expression as a symbol, it puts -it in the expr section. -@c FIXME item debug -@c FIXME item transfer[t] vector preload -@c FIXME item transfer[t] vector postload -@c FIXME item register -@end table - -@node Sub-Sections -@section Sub-Sections - -@cindex numbered subsections -@cindex grouping data -@ifset aout-bout -Assembled bytes -@ifset COFF -conventionally -@end ifset -fall into two sections: text and data. -@end ifset -You may have separate groups of -@ifset GENERIC -data in named sections -@end ifset -@ifclear GENERIC -@ifclear aout-bout -data in named sections -@end ifclear -@ifset aout-bout -text or data -@end ifset -@end ifclear -that you want to end up near to each other in the object file, even though they -are not contiguous in the assembler source. @code{@value{AS}} allows you to -use @dfn{subsections} for this purpose. Within each section, there can be -numbered subsections with values from 0 to 8192. Objects assembled into the -same subsection go into the object file together with other objects in the same -subsection. For example, a compiler might want to store constants in the text -section, but might not want to have them interspersed with the program being -assembled. In this case, the compiler could issue a @samp{.text 0} before each -section of code being output, and a @samp{.text 1} before each group of -constants being output. - -Subsections are optional. If you do not use subsections, everything -goes in subsection number zero. - -@ifset GENERIC -Each subsection is zero-padded up to a multiple of four bytes. -(Subsections may be padded a different amount on different flavors -of @code{@value{AS}}.) -@end ifset -@ifclear GENERIC -@ifset H8 -On the H8/300 and H8/500 platforms, each subsection is zero-padded to a word -boundary (two bytes). -The same is true on the Hitachi SH. -@end ifset -@ifset I960 -@c FIXME section padding (alignment)? -@c Rich Pixley says padding here depends on target obj code format; that -@c doesn't seem particularly useful to say without further elaboration, -@c so for now I say nothing about it. If this is a generic BFD issue, -@c these paragraphs might need to vanish from this manual, and be -@c discussed in BFD chapter of binutils (or some such). -@end ifset -@ifset A29K -On the AMD 29K family, no particular padding is added to section or -subsection sizes; @value{AS} forces no alignment on this platform. -@end ifset -@end ifclear - -Subsections appear in your object file in numeric order, lowest numbered -to highest. (All this to be compatible with other people's assemblers.) -The object file contains no representation of subsections; @code{@value{LD}} and -other programs that manipulate object files see no trace of them. -They just see all your text subsections as a text section, and all your -data subsections as a data section. - -To specify which subsection you want subsequent statements assembled -into, use a numeric argument to specify it, in a @samp{.text -@var{expression}} or a @samp{.data @var{expression}} statement. -@ifset COFF -@ifset GENERIC -When generating COFF output, you -@end ifset -@ifclear GENERIC -You -@end ifclear -can also use an extra subsection -argument with arbitrary named sections: @samp{.section @var{name}, -@var{expression}}. -@end ifset -@var{Expression} should be an absolute expression. -(@xref{Expressions}.) If you just say @samp{.text} then @samp{.text 0} -is assumed. Likewise @samp{.data} means @samp{.data 0}. Assembly -begins in @code{text 0}. For instance: -@smallexample -.text 0 # The default subsection is text 0 anyway. -.ascii "This lives in the first text subsection. *" -.text 1 -.ascii "But this lives in the second text subsection." -.data 0 -.ascii "This lives in the data section," -.ascii "in the first data subsection." -.text 0 -.ascii "This lives in the first text section," -.ascii "immediately following the asterisk (*)." -@end smallexample - -Each section has a @dfn{location counter} incremented by one for every byte -assembled into that section. Because subsections are merely a convenience -restricted to @code{@value{AS}} there is no concept of a subsection location -counter. There is no way to directly manipulate a location counter---but the -@code{.align} directive changes it, and any label definition captures its -current value. The location counter of the section where statements are being -assembled is said to be the @dfn{active} location counter. - -@node bss -@section bss Section - -@cindex bss section -@cindex common variable storage -The bss section is used for local common variable storage. -You may allocate address space in the bss section, but you may -not dictate data to load into it before your program executes. When -your program starts running, all the contents of the bss -section are zeroed bytes. - -The @code{.lcomm} pseudo-op defines a symbol in the bss section; see -@ref{Lcomm,,@code{.lcomm}}. - -The @code{.comm} pseudo-op may be used to declare a common symbol, which is -another form of uninitialized symbol; see @xref{Comm,,@code{.comm}}. - -@ifset GENERIC -When assembling for a target which supports multiple sections, such as ELF or -COFF, you may switch into the @code{.bss} section and define symbols as usual; -see @ref{Section,,@code{.section}}. You may only assemble zero values into the -section. Typically the section will only contain symbol definitions and -@code{.skip} directives (@pxref{Skip,,@code{.skip}}). -@end ifset - -@node Symbols -@chapter Symbols - -@cindex symbols -Symbols are a central concept: the programmer uses symbols to name -things, the linker uses symbols to link, and the debugger uses symbols -to debug. - -@quotation -@cindex debuggers, and symbol order -@emph{Warning:} @code{@value{AS}} does not place symbols in the object file in -the same order they were declared. This may break some debuggers. -@end quotation - -@menu -* Labels:: Labels -* Setting Symbols:: Giving Symbols Other Values -* Symbol Names:: Symbol Names -* Dot:: The Special Dot Symbol -* Symbol Attributes:: Symbol Attributes -@end menu - -@node Labels -@section Labels - -@cindex labels -A @dfn{label} is written as a symbol immediately followed by a colon -@samp{:}. The symbol then represents the current value of the -active location counter, and is, for example, a suitable instruction -operand. You are warned if you use the same symbol to represent two -different locations: the first definition overrides any other -definitions. - -@ifset HPPA -On the HPPA, the usual form for a label need not be immediately followed by a -colon, but instead must start in column zero. Only one label may be defined on -a single line. To work around this, the HPPA version of @code{@value{AS}} also -provides a special directive @code{.label} for defining labels more flexibly. -@end ifset - -@node Setting Symbols -@section Giving Symbols Other Values - -@cindex assigning values to symbols -@cindex symbol values, assigning -A symbol can be given an arbitrary value by writing a symbol, followed -by an equals sign @samp{=}, followed by an expression -(@pxref{Expressions}). This is equivalent to using the @code{.set} -directive. @xref{Set,,@code{.set}}. - -@node Symbol Names -@section Symbol Names - -@cindex symbol names -@cindex names, symbol -@ifclear SPECIAL-SYMS -Symbol names begin with a letter or with one of @samp{._}. On most -machines, you can also use @code{$} in symbol names; exceptions are -noted in @ref{Machine Dependencies}. That character may be followed by any -string of digits, letters, dollar signs (unless otherwise noted in -@ref{Machine Dependencies}), and underscores. -@end ifclear -@ifset A29K -For the AMD 29K family, @samp{?} is also allowed in the -body of a symbol name, though not at its beginning. -@end ifset - -@ifset SPECIAL-SYMS -@ifset H8 -Symbol names begin with a letter or with one of @samp{._}. On the -Hitachi SH or the -H8/500, you can also use @code{$} in symbol names. That character may -be followed by any string of digits, letters, dollar signs (save on the -H8/300), and underscores. -@end ifset -@end ifset - -Case of letters is significant: @code{foo} is a different symbol name -than @code{Foo}. - -Each symbol has exactly one name. Each name in an assembly language program -refers to exactly one symbol. You may use that symbol name any number of times -in a program. - -@subheading Local Symbol Names - -@cindex local symbol names -@cindex symbol names, local -@cindex temporary symbol names -@cindex symbol names, temporary -Local symbols help compilers and programmers use names temporarily. -There are ten local symbol names, which are re-used throughout the -program. You may refer to them using the names @samp{0} @samp{1} -@dots{} @samp{9}. To define a local symbol, write a label of the form -@samp{@b{N}:} (where @b{N} represents any digit). To refer to the most -recent previous definition of that symbol write @samp{@b{N}b}, using the -same digit as when you defined the label. To refer to the next -definition of a local label, write @samp{@b{N}f}---where @b{N} gives you -a choice of 10 forward references. The @samp{b} stands for -``backwards'' and the @samp{f} stands for ``forwards''. - -Local symbols are not emitted by the current @sc{gnu} C compiler. - -There is no restriction on how you can use these labels, but -remember that at any point in the assembly you can refer to at most -10 prior local labels and to at most 10 forward local labels. - -Local symbol names are only a notation device. They are immediately -transformed into more conventional symbol names before the assembler -uses them. The symbol names stored in the symbol table, appearing in -error messages and optionally emitted to the object file have these -parts: - -@table @code -@item L -All local labels begin with @samp{L}. Normally both @code{@value{AS}} and -@code{@value{LD}} forget symbols that start with @samp{L}. These labels are -used for symbols you are never intended to see. If you use the -@samp{-L} option then @code{@value{AS}} retains these symbols in the -object file. If you also instruct @code{@value{LD}} to retain these symbols, -you may use them in debugging. - -@item @var{digit} -If the label is written @samp{0:} then the digit is @samp{0}. -If the label is written @samp{1:} then the digit is @samp{1}. -And so on up through @samp{9:}. - -@item @kbd{C-A} -This unusual character is included so you do not accidentally invent -a symbol of the same name. The character has ASCII value -@samp{\001}. - -@item @emph{ordinal number} -This is a serial number to keep the labels distinct. The first -@samp{0:} gets the number @samp{1}; The 15th @samp{0:} gets the -number @samp{15}; @emph{etc.}. Likewise for the other labels @samp{1:} -through @samp{9:}. -@end table - -For instance, the first @code{1:} is named @code{L1@kbd{C-A}1}, the 44th -@code{3:} is named @code{L3@kbd{C-A}44}. - -@node Dot -@section The Special Dot Symbol - -@cindex dot (symbol) -@cindex @code{.} (symbol) -@cindex current address -@cindex location counter -The special symbol @samp{.} refers to the current address that -@code{@value{AS}} is assembling into. Thus, the expression @samp{melvin: -.long .} defines @code{melvin} to contain its own address. -Assigning a value to @code{.} is treated the same as a @code{.org} -directive. Thus, the expression @samp{.=.+4} is the same as saying -@ifclear no-space-dir -@samp{.space 4}. -@end ifclear -@ifset no-space-dir -@ifset A29K -@samp{.block 4}. -@end ifset -@end ifset - -@node Symbol Attributes -@section Symbol Attributes - -@cindex symbol attributes -@cindex attributes, symbol -Every symbol has, as well as its name, the attributes ``Value'' and -``Type''. Depending on output format, symbols can also have auxiliary -attributes. -@ifset INTERNALS -The detailed definitions are in @file{a.out.h}. -@end ifset - -If you use a symbol without defining it, @code{@value{AS}} assumes zero for -all these attributes, and probably won't warn you. This makes the -symbol an externally defined symbol, which is generally what you -would want. - -@menu -* Symbol Value:: Value -* Symbol Type:: Type -@ifset aout-bout -@ifset GENERIC -* a.out Symbols:: Symbol Attributes: @code{a.out} -@end ifset -@ifclear GENERIC -@ifclear BOUT -* a.out Symbols:: Symbol Attributes: @code{a.out} -@end ifclear -@ifset BOUT -* a.out Symbols:: Symbol Attributes: @code{a.out}, @code{b.out} -@end ifset -@end ifclear -@end ifset -@ifset COFF -* COFF Symbols:: Symbol Attributes for COFF -@end ifset -@ifset SOM -* SOM Symbols:: Symbol Attributes for SOM -@end ifset -@end menu - -@node Symbol Value -@subsection Value - -@cindex value of a symbol -@cindex symbol value -The value of a symbol is (usually) 32 bits. For a symbol which labels a -location in the text, data, bss or absolute sections the value is the -number of addresses from the start of that section to the label. -Naturally for text, data and bss sections the value of a symbol changes -as @code{@value{LD}} changes section base addresses during linking. Absolute -symbols' values do not change during linking: that is why they are -called absolute. - -The value of an undefined symbol is treated in a special way. If it is -0 then the symbol is not defined in this assembler source file, and -@code{@value{LD}} tries to determine its value from other files linked into the -same program. You make this kind of symbol simply by mentioning a symbol -name without defining it. A non-zero value represents a @code{.comm} -common declaration. The value is how much common storage to reserve, in -bytes (addresses). The symbol refers to the first address of the -allocated storage. - -@node Symbol Type -@subsection Type - -@cindex type of a symbol -@cindex symbol type -The type attribute of a symbol contains relocation (section) -information, any flag settings indicating that a symbol is external, and -(optionally), other information for linkers and debuggers. The exact -format depends on the object-code output format in use. - -@ifset aout-bout -@ifclear GENERIC -@ifset BOUT -@c The following avoids a "widow" subsection title. @group would be -@c better if it were available outside examples. -@need 1000 -@node a.out Symbols -@subsection Symbol Attributes: @code{a.out}, @code{b.out} - -@cindex @code{b.out} symbol attributes -@cindex symbol attributes, @code{b.out} -These symbol attributes appear only when @code{@value{AS}} is configured for -one of the Berkeley-descended object output formats---@code{a.out} or -@code{b.out}. - -@end ifset -@ifclear BOUT -@node a.out Symbols -@subsection Symbol Attributes: @code{a.out} - -@cindex @code{a.out} symbol attributes -@cindex symbol attributes, @code{a.out} - -@end ifclear -@end ifclear -@ifset GENERIC -@node a.out Symbols -@subsection Symbol Attributes: @code{a.out} - -@cindex @code{a.out} symbol attributes -@cindex symbol attributes, @code{a.out} - -@end ifset -@menu -* Symbol Desc:: Descriptor -* Symbol Other:: Other -@end menu - -@node Symbol Desc -@subsubsection Descriptor - -@cindex descriptor, of @code{a.out} symbol -This is an arbitrary 16-bit value. You may establish a symbol's -descriptor value by using a @code{.desc} statement -(@pxref{Desc,,@code{.desc}}). A descriptor value means nothing to -@code{@value{AS}}. - -@node Symbol Other -@subsubsection Other - -@cindex other attribute, of @code{a.out} symbol -This is an arbitrary 8-bit value. It means nothing to @code{@value{AS}}. -@end ifset - -@ifset COFF -@node COFF Symbols -@subsection Symbol Attributes for COFF - -@cindex COFF symbol attributes -@cindex symbol attributes, COFF - -The COFF format supports a multitude of auxiliary symbol attributes; -like the primary symbol attributes, they are set between @code{.def} and -@code{.endef} directives. - -@subsubsection Primary Attributes - -@cindex primary attributes, COFF symbols -The symbol name is set with @code{.def}; the value and type, -respectively, with @code{.val} and @code{.type}. - -@subsubsection Auxiliary Attributes - -@cindex auxiliary attributes, COFF symbols -The @code{@value{AS}} directives @code{.dim}, @code{.line}, @code{.scl}, -@code{.size}, and @code{.tag} can generate auxiliary symbol table -information for COFF. -@end ifset - -@ifset SOM -@node SOM Symbols -@subsection Symbol Attributes for SOM - -@cindex SOM symbol attributes -@cindex symbol attributes, SOM - -The SOM format for the HPPA supports a multitude of symbol attributes set with -the @code{.EXPORT} and @code{.IMPORT} directives. - -The attributes are described in @cite{HP9000 Series 800 Assembly -Language Reference Manual} (HP 92432-90001) under the @code{IMPORT} and -@code{EXPORT} assembler directive documentation. -@end ifset - -@node Expressions -@chapter Expressions - -@cindex expressions -@cindex addresses -@cindex numeric values -An @dfn{expression} specifies an address or numeric value. -Whitespace may precede and/or follow an expression. - -The result of an expression must be an absolute number, or else an offset into -a particular section. If an expression is not absolute, and there is not -enough information when @code{@value{AS}} sees the expression to know its -section, a second pass over the source program might be necessary to interpret -the expression---but the second pass is currently not implemented. -@code{@value{AS}} aborts with an error message in this situation. - -@menu -* Empty Exprs:: Empty Expressions -* Integer Exprs:: Integer Expressions -@end menu - -@node Empty Exprs -@section Empty Expressions - -@cindex empty expressions -@cindex expressions, empty -An empty expression has no value: it is just whitespace or null. -Wherever an absolute expression is required, you may omit the -expression, and @code{@value{AS}} assumes a value of (absolute) 0. This -is compatible with other assemblers. - -@node Integer Exprs -@section Integer Expressions - -@cindex integer expressions -@cindex expressions, integer -An @dfn{integer expression} is one or more @emph{arguments} delimited -by @emph{operators}. - -@menu -* Arguments:: Arguments -* Operators:: Operators -* Prefix Ops:: Prefix Operators -* Infix Ops:: Infix Operators -@end menu - -@node Arguments -@subsection Arguments - -@cindex expression arguments -@cindex arguments in expressions -@cindex operands in expressions -@cindex arithmetic operands -@dfn{Arguments} are symbols, numbers or subexpressions. In other -contexts arguments are sometimes called ``arithmetic operands''. In -this manual, to avoid confusing them with the ``instruction operands'' of -the machine language, we use the term ``argument'' to refer to parts of -expressions only, reserving the word ``operand'' to refer only to machine -instruction operands. - -Symbols are evaluated to yield @{@var{section} @var{NNN}@} where -@var{section} is one of text, data, bss, absolute, -or undefined. @var{NNN} is a signed, 2's complement 32 bit -integer. - -Numbers are usually integers. - -A number can be a flonum or bignum. In this case, you are warned -that only the low order 32 bits are used, and @code{@value{AS}} pretends -these 32 bits are an integer. You may write integer-manipulating -instructions that act on exotic constants, compatible with other -assemblers. - -@cindex subexpressions -Subexpressions are a left parenthesis @samp{(} followed by an integer -expression, followed by a right parenthesis @samp{)}; or a prefix -operator followed by an argument. - -@node Operators -@subsection Operators - -@cindex operators, in expressions -@cindex arithmetic functions -@cindex functions, in expressions -@dfn{Operators} are arithmetic functions, like @code{+} or @code{%}. Prefix -operators are followed by an argument. Infix operators appear -between their arguments. Operators may be preceded and/or followed by -whitespace. - -@node Prefix Ops -@subsection Prefix Operator - -@cindex prefix operators -@code{@value{AS}} has the following @dfn{prefix operators}. They each take -one argument, which must be absolute. - -@c the tex/end tex stuff surrounding this small table is meant to make -@c it align, on the printed page, with the similar table in the next -@c section (which is inside an enumerate). -@tex -\global\advance\leftskip by \itemindent -@end tex - -@table @code -@item - -@dfn{Negation}. Two's complement negation. -@item ~ -@dfn{Complementation}. Bitwise not. -@end table - -@tex -\global\advance\leftskip by -\itemindent -@end tex - -@node Infix Ops -@subsection Infix Operators - -@cindex infix operators -@cindex operators, permitted arguments -@dfn{Infix operators} take two arguments, one on either side. Operators -have precedence, but operations with equal precedence are performed left -to right. Apart from @code{+} or @code{-}, both arguments must be -absolute, and the result is absolute. - -@enumerate -@cindex operator precedence -@cindex precedence of operators - -@item -Highest Precedence - -@table @code -@item * -@dfn{Multiplication}. - -@item / -@dfn{Division}. Truncation is the same as the C operator @samp{/} - -@item % -@dfn{Remainder}. - -@item < -@itemx << -@dfn{Shift Left}. Same as the C operator @samp{<<}. - -@item > -@itemx >> -@dfn{Shift Right}. Same as the C operator @samp{>>}. -@end table - -@item -Intermediate precedence - -@table @code -@item | - -@dfn{Bitwise Inclusive Or}. - -@item & -@dfn{Bitwise And}. - -@item ^ -@dfn{Bitwise Exclusive Or}. - -@item ! -@dfn{Bitwise Or Not}. -@end table - -@item -Lowest Precedence - -@table @code -@cindex addition, permitted arguments -@cindex plus, permitted arguments -@cindex arguments for addition -@item + -@dfn{Addition}. If either argument is absolute, the result has the section of -the other argument. You may not add together arguments from different -sections. - -@cindex subtraction, permitted arguments -@cindex minus, permitted arguments -@cindex arguments for subtraction -@item - -@dfn{Subtraction}. If the right argument is absolute, the -result has the section of the left argument. -If both arguments are in the same section, the result is absolute. -You may not subtract arguments from different sections. -@c FIXME is there still something useful to say about undefined - undefined ? -@end table -@end enumerate - -In short, it's only meaningful to add or subtract the @emph{offsets} in an -address; you can only have a defined section in one of the two arguments. - -@node Pseudo Ops -@chapter Assembler Directives - -@cindex directives, machine independent -@cindex pseudo-ops, machine independent -@cindex machine independent directives -All assembler directives have names that begin with a period (@samp{.}). -The rest of the name is letters, usually in lower case. - -This chapter discusses directives that are available regardless of the -target machine configuration for the @sc{gnu} assembler. -@ifset GENERIC -Some machine configurations provide additional directives. -@xref{Machine Dependencies}. -@end ifset -@ifclear GENERIC -@ifset machine-directives -@xref{Machine Dependencies} for additional directives. -@end ifset -@end ifclear - -@menu -* Abort:: @code{.abort} -@ifset COFF -* ABORT:: @code{.ABORT} -@end ifset - -* Align:: @code{.align @var{abs-expr} , @var{abs-expr}} -* App-File:: @code{.app-file @var{string}} -* Ascii:: @code{.ascii "@var{string}"}@dots{} -* Asciz:: @code{.asciz "@var{string}"}@dots{} -* Balign:: @code{.balign @var{abs-expr} , @var{abs-expr}} -* Byte:: @code{.byte @var{expressions}} -* Comm:: @code{.comm @var{symbol} , @var{length} } -* Data:: @code{.data @var{subsection}} -@ifset COFF -* Def:: @code{.def @var{name}} -@end ifset -@ifset aout-bout -* Desc:: @code{.desc @var{symbol}, @var{abs-expression}} -@end ifset -@ifset COFF -* Dim:: @code{.dim} -@end ifset - -* Double:: @code{.double @var{flonums}} -* Eject:: @code{.eject} -* Else:: @code{.else} -@ifset COFF -* Endef:: @code{.endef} -@end ifset - -* Endif:: @code{.endif} -* Equ:: @code{.equ @var{symbol}, @var{expression}} -* Equiv:: @code{.equiv @var{symbol}, @var{expression}} -* Err:: @code{.err} -* Extern:: @code{.extern} -@ifclear no-file-dir -* File:: @code{.file @var{string}} -@end ifclear - -* Fill:: @code{.fill @var{repeat} , @var{size} , @var{value}} -* Float:: @code{.float @var{flonums}} -* Global:: @code{.global @var{symbol}}, @code{.globl @var{symbol}} -* hword:: @code{.hword @var{expressions}} -* Ident:: @code{.ident} -* If:: @code{.if @var{absolute expression}} -* Include:: @code{.include "@var{file}"} -* Int:: @code{.int @var{expressions}} -* Irp:: @code{.irp @var{symbol},@var{values}}@dots{} -* Irpc:: @code{.irpc @var{symbol},@var{values}}@dots{} -* Lcomm:: @code{.lcomm @var{symbol} , @var{length}} -* Lflags:: @code{.lflags} -@ifclear no-line-dir -* Line:: @code{.line @var{line-number}} -@end ifclear - -* Ln:: @code{.ln @var{line-number}} -* Linkonce:: @code{.linkonce [@var{type}]} -* List:: @code{.list} -* Long:: @code{.long @var{expressions}} -@ignore -* Lsym:: @code{.lsym @var{symbol}, @var{expression}} -@end ignore - -* Macro:: @code{.macro @var{name} @var{args}}@dots{} -* MRI:: @code{.mri @var{val}} - -* Nolist:: @code{.nolist} -* Octa:: @code{.octa @var{bignums}} -* Org:: @code{.org @var{new-lc} , @var{fill}} -* P2align:: @code{.p2align @var{abs-expr} , @var{abs-expr}} -* Psize:: @code{.psize @var{lines}, @var{columns}} -* Quad:: @code{.quad @var{bignums}} -* Rept:: @code{.rept @var{count}} -* Sbttl:: @code{.sbttl "@var{subheading}"} -@ifset COFF -* Scl:: @code{.scl @var{class}} -* Section:: @code{.section @var{name}, @var{subsection}} -@end ifset - -* Set:: @code{.set @var{symbol}, @var{expression}} -* Short:: @code{.short @var{expressions}} -* Single:: @code{.single @var{flonums}} -@ifset COFF -* Size:: @code{.size} -@end ifset - -* Skip:: @code{.skip @var{size} , @var{fill}} -* Sleb128:: @code{.sleb128 @var{expressions}} -* Space:: @code{.space @var{size} , @var{fill}} -@ifset have-stabs -* Stab:: @code{.stabd, .stabn, .stabs} -@end ifset - -* String:: @code{.string "@var{str}"} -@ifset ELF -* Symver:: @code{.symver @var{name},@var{name2@@nodename}} -@end ifset -@ifset COFF -* Tag:: @code{.tag @var{structname}} -@end ifset - -* Text:: @code{.text @var{subsection}} -* Title:: @code{.title "@var{heading}"} -@ifset COFF -* Type:: @code{.type @var{int}} -* Val:: @code{.val @var{addr}} -@end ifset - -* Uleb128:: @code{.uleb128 @var{expressions}} -* Word:: @code{.word @var{expressions}} -* Deprecated:: Deprecated Directives -@end menu - -@node Abort -@section @code{.abort} - -@cindex @code{abort} directive -@cindex stopping the assembly -This directive stops the assembly immediately. It is for -compatibility with other assemblers. The original idea was that the -assembly language source would be piped into the assembler. If the sender -of the source quit, it could use this directive tells @code{@value{AS}} to -quit also. One day @code{.abort} will not be supported. - -@ifset COFF -@node ABORT -@section @code{.ABORT} - -@cindex @code{ABORT} directive -When producing COFF output, @code{@value{AS}} accepts this directive as a -synonym for @samp{.abort}. - -@ifset BOUT -When producing @code{b.out} output, @code{@value{AS}} accepts this directive, -but ignores it. -@end ifset -@end ifset - -@node Align -@section @code{.align @var{abs-expr}, @var{abs-expr}, @var{abs-expr}} - -@cindex padding the location counter -@cindex @code{align} directive -Pad the location counter (in the current subsection) to a particular storage -boundary. The first expression (which must be absolute) is the alignment -required, as described below. - -The second expression (also absolute) gives the fill value to be stored in the -padding bytes. It (and the comma) may be omitted. If it is omitted, the -padding bytes are normally zero. However, on some systems, if the section is -marked as containing code and the fill value is omitted, the space is filled -with no-op instructions. - -The third expression is also absolute, and is also optional. If it is present, -it is the maximum number of bytes that should be skipped by this alignment -directive. If doing the alignment would require skipping more bytes than the -specified maximum, then the alignment is not done at all. You can omit the -fill value (the second argument) entirely by simply using two commas after the -required alignment; this can be useful if you want the alignment to be filled -with no-op instructions when appropriate. - -The way the required alignment is specified varies from system to system. -For the a29k, hppa, m68k, m88k, w65, sparc, and Hitachi SH, and i386 using ELF -format, -the first expression is the -alignment request in bytes. For example @samp{.align 8} advances -the location counter until it is a multiple of 8. If the location counter -is already a multiple of 8, no change is needed. - -For other systems, including the i386 using a.out format, it is the -number of low-order zero bits the location counter must have after -advancement. For example @samp{.align 3} advances the location -counter until it a multiple of 8. If the location counter is already a -multiple of 8, no change is needed. - -This inconsistency is due to the different behaviors of the various -native assemblers for these systems which GAS must emulate. -GAS also provides @code{.balign} and @code{.p2align} directives, -described later, which have a consistent behavior across all -architectures (but are specific to GAS). - -@node App-File -@section @code{.app-file @var{string}} - -@cindex logical file name -@cindex file name, logical -@cindex @code{app-file} directive -@code{.app-file} -@ifclear no-file-dir -(which may also be spelled @samp{.file}) -@end ifclear -tells @code{@value{AS}} that we are about to start a new -logical file. @var{string} is the new file name. In general, the -filename is recognized whether or not it is surrounded by quotes @samp{"}; -but if you wish to specify an empty file name is permitted, -you must give the quotes--@code{""}. This statement may go away in -future: it is only recognized to be compatible with old @code{@value{AS}} -programs.@refill - -@node Ascii -@section @code{.ascii "@var{string}"}@dots{} - -@cindex @code{ascii} directive -@cindex string literals -@code{.ascii} expects zero or more string literals (@pxref{Strings}) -separated by commas. It assembles each string (with no automatic -trailing zero byte) into consecutive addresses. - -@node Asciz -@section @code{.asciz "@var{string}"}@dots{} - -@cindex @code{asciz} directive -@cindex zero-terminated strings -@cindex null-terminated strings -@code{.asciz} is just like @code{.ascii}, but each string is followed by -a zero byte. The ``z'' in @samp{.asciz} stands for ``zero''. - -@node Balign -@section @code{.balign[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}} - -@cindex padding the location counter given number of bytes -@cindex @code{balign} directive -Pad the location counter (in the current subsection) to a particular -storage boundary. The first expression (which must be absolute) is the -alignment request in bytes. For example @samp{.balign 8} advances -the location counter until it is a multiple of 8. If the location counter -is already a multiple of 8, no change is needed. - -The second expression (also absolute) gives the fill value to be stored in the -padding bytes. It (and the comma) may be omitted. If it is omitted, the -padding bytes are normally zero. However, on some systems, if the section is -marked as containing code and the fill value is omitted, the space is filled -with no-op instructions. - -The third expression is also absolute, and is also optional. If it is present, -it is the maximum number of bytes that should be skipped by this alignment -directive. If doing the alignment would require skipping more bytes than the -specified maximum, then the alignment is not done at all. You can omit the -fill value (the second argument) entirely by simply using two commas after the -required alignment; this can be useful if you want the alignment to be filled -with no-op instructions when appropriate. - -@cindex @code{balignw} directive -@cindex @code{balignl} directive -The @code{.balignw} and @code{.balignl} directives are variants of the -@code{.balign} directive. The @code{.balignw} directive treats the fill -pattern as a two byte word value. The @code{.balignl} directives treats the -fill pattern as a four byte longword value. For example, @code{.balignw -4,0x368d} will align to a multiple of 4. If it skips two bytes, they will be -filled in with the value 0x368d (the exact placement of the bytes depends upon -the endianness of the processor). If it skips 1 or 3 bytes, the fill value is -undefined. - -@node Byte -@section @code{.byte @var{expressions}} - -@cindex @code{byte} directive -@cindex integers, one byte -@code{.byte} expects zero or more expressions, separated by commas. -Each expression is assembled into the next byte. - -@node Comm -@section @code{.comm @var{symbol} , @var{length} } - -@cindex @code{comm} directive -@cindex symbol, common -@code{.comm} declares a common symbol named @var{symbol}. When linking, a -common symbol in one object file may be merged with a defined or common symbol -of the same name in another object file. If @code{@value{LD}} does not see a -definition for the symbol--just one or more common symbols--then it will -allocate @var{length} bytes of uninitialized memory. @var{length} must be an -absolute expression. If @code{@value{LD}} sees multiple common symbols with -the same name, and they do not all have the same size, it will allocate space -using the largest size. - -@ifset ELF -When using ELF, the @code{.comm} directive takes an optional third argument. -This is the desired alignment of the symbol, specified as a byte boundary (for -example, an alignment of 16 means that the least significant 4 bits of the -address should be zero). The alignment must be an absolute expression, and it -must be a power of two. If @code{@value{LD}} allocates uninitialized memory -for the common symbol, it will use the alignment when placing the symbol. If -no alignment is specified, @code{@value{AS}} will set the alignment to the -largest power of two less than or equal to the size of the symbol, up to a -maximum of 16. -@end ifset - -@ifset HPPA -The syntax for @code{.comm} differs slightly on the HPPA. The syntax is -@samp{@var{symbol} .comm, @var{length}}; @var{symbol} is optional. -@end ifset - -@node Data -@section @code{.data @var{subsection}} - -@cindex @code{data} directive -@code{.data} tells @code{@value{AS}} to assemble the following statements onto the -end of the data subsection numbered @var{subsection} (which is an -absolute expression). If @var{subsection} is omitted, it defaults -to zero. - -@ifset COFF -@node Def -@section @code{.def @var{name}} - -@cindex @code{def} directive -@cindex COFF symbols, debugging -@cindex debugging COFF symbols -Begin defining debugging information for a symbol @var{name}; the -definition extends until the @code{.endef} directive is encountered. -@ifset BOUT - -This directive is only observed when @code{@value{AS}} is configured for COFF -format output; when producing @code{b.out}, @samp{.def} is recognized, -but ignored. -@end ifset -@end ifset - -@ifset aout-bout -@node Desc -@section @code{.desc @var{symbol}, @var{abs-expression}} - -@cindex @code{desc} directive -@cindex COFF symbol descriptor -@cindex symbol descriptor, COFF -This directive sets the descriptor of the symbol (@pxref{Symbol Attributes}) -to the low 16 bits of an absolute expression. - -@ifset COFF -The @samp{.desc} directive is not available when @code{@value{AS}} is -configured for COFF output; it is only for @code{a.out} or @code{b.out} -object format. For the sake of compatibility, @code{@value{AS}} accepts -it, but produces no output, when configured for COFF. -@end ifset -@end ifset - -@ifset COFF -@node Dim -@section @code{.dim} - -@cindex @code{dim} directive -@cindex COFF auxiliary symbol information -@cindex auxiliary symbol information, COFF -This directive is generated by compilers to include auxiliary debugging -information in the symbol table. It is only permitted inside -@code{.def}/@code{.endef} pairs. -@ifset BOUT - -@samp{.dim} is only meaningful when generating COFF format output; when -@code{@value{AS}} is generating @code{b.out}, it accepts this directive but -ignores it. -@end ifset -@end ifset - -@node Double -@section @code{.double @var{flonums}} - -@cindex @code{double} directive -@cindex floating point numbers (double) -@code{.double} expects zero or more flonums, separated by commas. It -assembles floating point numbers. -@ifset GENERIC -The exact kind of floating point numbers emitted depends on how -@code{@value{AS}} is configured. @xref{Machine Dependencies}. -@end ifset -@ifclear GENERIC -@ifset IEEEFLOAT -On the @value{TARGET} family @samp{.double} emits 64-bit floating-point numbers -in @sc{ieee} format. -@end ifset -@end ifclear - -@node Eject -@section @code{.eject} - -@cindex @code{eject} directive -@cindex new page, in listings -@cindex page, in listings -@cindex listing control: new page -Force a page break at this point, when generating assembly listings. - -@node Else -@section @code{.else} - -@cindex @code{else} directive -@code{.else} is part of the @code{@value{AS}} support for conditional -assembly; @pxref{If,,@code{.if}}. It marks the beginning of a section -of code to be assembled if the condition for the preceding @code{.if} -was false. - -@ignore -@node End, Endef, Else, Pseudo Ops -@section @code{.end} - -@cindex @code{end} directive -This doesn't do anything---but isn't an s_ignore, so I suspect it's -meant to do something eventually (which is why it isn't documented here -as "for compatibility with blah"). -@end ignore - -@ifset COFF -@node Endef -@section @code{.endef} - -@cindex @code{endef} directive -This directive flags the end of a symbol definition begun with -@code{.def}. -@ifset BOUT - -@samp{.endef} is only meaningful when generating COFF format output; if -@code{@value{AS}} is configured to generate @code{b.out}, it accepts this -directive but ignores it. -@end ifset -@end ifset - -@node Endif -@section @code{.endif} - -@cindex @code{endif} directive -@code{.endif} is part of the @code{@value{AS}} support for conditional assembly; -it marks the end of a block of code that is only assembled -conditionally. @xref{If,,@code{.if}}. - -@node Equ -@section @code{.equ @var{symbol}, @var{expression}} - -@cindex @code{equ} directive -@cindex assigning values to symbols -@cindex symbols, assigning values to -This directive sets the value of @var{symbol} to @var{expression}. -It is synonymous with @samp{.set}; @pxref{Set,,@code{.set}}. - -@ifset HPPA -The syntax for @code{equ} on the HPPA is -@samp{@var{symbol} .equ @var{expression}}. -@end ifset - -@node Equiv -@section @code{.equiv @var{symbol}, @var{expression}} -@cindex @code{equiv} directive -The @code{.equiv} directive is like @code{.equ} and @code{.set}, except that -the assembler will signal an error if @var{symbol} is already defined. - -Except for the contents of the error message, this is roughly equivalent to -@smallexample -.ifdef SYM -.err -.endif -.equ SYM,VAL -@end smallexample - -@node Err -@section @code{.err} -@cindex @code{err} directive -If @code{@value{AS}} assembles a @code{.err} directive, it will print an error -message and, unless the @code{-Z} option was used, it will not generate an -object file. This can be used to signal error an conditionally compiled code. - -@node Extern -@section @code{.extern} - -@cindex @code{extern} directive -@code{.extern} is accepted in the source program---for compatibility -with other assemblers---but it is ignored. @code{@value{AS}} treats -all undefined symbols as external. - -@ifclear no-file-dir -@node File -@section @code{.file @var{string}} - -@cindex @code{file} directive -@cindex logical file name -@cindex file name, logical -@code{.file} (which may also be spelled @samp{.app-file}) tells -@code{@value{AS}} that we are about to start a new logical file. -@var{string} is the new file name. In general, the filename is -recognized whether or not it is surrounded by quotes @samp{"}; but if -you wish to specify an empty file name, you must give the -quotes--@code{""}. This statement may go away in future: it is only -recognized to be compatible with old @code{@value{AS}} programs. -@ifset A29K -In some configurations of @code{@value{AS}}, @code{.file} has already been -removed to avoid conflicts with other assemblers. @xref{Machine Dependencies}. -@end ifset -@end ifclear - -@node Fill -@section @code{.fill @var{repeat} , @var{size} , @var{value}} - -@cindex @code{fill} directive -@cindex writing patterns in memory -@cindex patterns, writing in memory -@var{result}, @var{size} and @var{value} are absolute expressions. -This emits @var{repeat} copies of @var{size} bytes. @var{Repeat} -may be zero or more. @var{Size} may be zero or more, but if it is -more than 8, then it is deemed to have the value 8, compatible with -other people's assemblers. The contents of each @var{repeat} bytes -is taken from an 8-byte number. The highest order 4 bytes are -zero. The lowest order 4 bytes are @var{value} rendered in the -byte-order of an integer on the computer @code{@value{AS}} is assembling for. -Each @var{size} bytes in a repetition is taken from the lowest order -@var{size} bytes of this number. Again, this bizarre behavior is -compatible with other people's assemblers. - -@var{size} and @var{value} are optional. -If the second comma and @var{value} are absent, @var{value} is -assumed zero. If the first comma and following tokens are absent, -@var{size} is assumed to be 1. - -@node Float -@section @code{.float @var{flonums}} - -@cindex floating point numbers (single) -@cindex @code{float} directive -This directive assembles zero or more flonums, separated by commas. It -has the same effect as @code{.single}. -@ifset GENERIC -The exact kind of floating point numbers emitted depends on how -@code{@value{AS}} is configured. -@xref{Machine Dependencies}. -@end ifset -@ifclear GENERIC -@ifset IEEEFLOAT -On the @value{TARGET} family, @code{.float} emits 32-bit floating point numbers -in @sc{ieee} format. -@end ifset -@end ifclear - -@node Global -@section @code{.global @var{symbol}}, @code{.globl @var{symbol}} - -@cindex @code{global} directive -@cindex symbol, making visible to linker -@code{.global} makes the symbol visible to @code{@value{LD}}. If you define -@var{symbol} in your partial program, its value is made available to -other partial programs that are linked with it. Otherwise, -@var{symbol} takes its attributes from a symbol of the same name -from another file linked into the same program. - -Both spellings (@samp{.globl} and @samp{.global}) are accepted, for -compatibility with other assemblers. - -@ifset HPPA -On the HPPA, @code{.global} is not always enough to make it accessible to other -partial programs. You may need the HPPA-only @code{.EXPORT} directive as well. -@xref{HPPA Directives,, HPPA Assembler Directives}. -@end ifset - -@node hword -@section @code{.hword @var{expressions}} - -@cindex @code{hword} directive -@cindex integers, 16-bit -@cindex numbers, 16-bit -@cindex sixteen bit integers -This expects zero or more @var{expressions}, and emits -a 16 bit number for each. - -@ifset GENERIC -This directive is a synonym for @samp{.short}; depending on the target -architecture, it may also be a synonym for @samp{.word}. -@end ifset -@ifclear GENERIC -@ifset W32 -This directive is a synonym for @samp{.short}. -@end ifset -@ifset W16 -This directive is a synonym for both @samp{.short} and @samp{.word}. -@end ifset -@end ifclear - -@node Ident -@section @code{.ident} - -@cindex @code{ident} directive -This directive is used by some assemblers to place tags in object files. -@code{@value{AS}} simply accepts the directive for source-file -compatibility with such assemblers, but does not actually emit anything -for it. - -@node If -@section @code{.if @var{absolute expression}} - -@cindex conditional assembly -@cindex @code{if} directive -@code{.if} marks the beginning of a section of code which is only -considered part of the source program being assembled if the argument -(which must be an @var{absolute expression}) is non-zero. The end of -the conditional section of code must be marked by @code{.endif} -(@pxref{Endif,,@code{.endif}}); optionally, you may include code for the -alternative condition, flagged by @code{.else} (@pxref{Else,,@code{.else}}). - -The following variants of @code{.if} are also supported: -@table @code -@cindex @code{ifdef} directive -@item .ifdef @var{symbol} -Assembles the following section of code if the specified @var{symbol} -has been defined. - -@ignore -@cindex @code{ifeqs} directive -@item .ifeqs -Not yet implemented. -@end ignore - -@cindex @code{ifndef} directive -@cindex @code{ifnotdef} directive -@item .ifndef @var{symbol} -@itemx .ifnotdef @var{symbol} -Assembles the following section of code if the specified @var{symbol} -has not been defined. Both spelling variants are equivalent. - -@ignore -@item ifnes -Not yet implemented. -@end ignore -@end table - -@node Include -@section @code{.include "@var{file}"} - -@cindex @code{include} directive -@cindex supporting files, including -@cindex files, including -This directive provides a way to include supporting files at specified -points in your source program. The code from @var{file} is assembled as -if it followed the point of the @code{.include}; when the end of the -included file is reached, assembly of the original file continues. You -can control the search paths used with the @samp{-I} command-line option -(@pxref{Invoking,,Command-Line Options}). Quotation marks are required -around @var{file}. - -@node Int -@section @code{.int @var{expressions}} - -@cindex @code{int} directive -@cindex integers, 32-bit -Expect zero or more @var{expressions}, of any section, separated by commas. -For each expression, emit a number that, at run time, is the value of that -expression. The byte order and bit size of the number depends on what kind -of target the assembly is for. - -@ifclear GENERIC -@ifset H8 -On the H8/500 and most forms of the H8/300, @code{.int} emits 16-bit -integers. On the H8/300H and the Hitachi SH, however, @code{.int} emits -32-bit integers. -@end ifset -@end ifclear - -@node Irp -@section @code{.irp @var{symbol},@var{values}}@dots{} - -@cindex @code{irp} directive -Evaluate a sequence of statements assigning different values to @var{symbol}. -The sequence of statements starts at the @code{.irp} directive, and is -terminated by an @code{.endr} directive. For each @var{value}, @var{symbol} is -set to @var{value}, and the sequence of statements is assembled. If no -@var{value} is listed, the sequence of statements is assembled once, with -@var{symbol} set to the null string. To refer to @var{symbol} within the -sequence of statements, use @var{\symbol}. - -For example, assembling - -@example - .irp param,1,2,3 - move d\param,sp@@- - .endr -@end example - -is equivalent to assembling - -@example - move d1,sp@@- - move d2,sp@@- - move d3,sp@@- -@end example - -@node Irpc -@section @code{.irpc @var{symbol},@var{values}}@dots{} - -@cindex @code{irpc} directive -Evaluate a sequence of statements assigning different values to @var{symbol}. -The sequence of statements starts at the @code{.irpc} directive, and is -terminated by an @code{.endr} directive. For each character in @var{value}, -@var{symbol} is set to the character, and the sequence of statements is -assembled. If no @var{value} is listed, the sequence of statements is -assembled once, with @var{symbol} set to the null string. To refer to -@var{symbol} within the sequence of statements, use @var{\symbol}. - -For example, assembling - -@example - .irpc param,123 - move d\param,sp@@- - .endr -@end example - -is equivalent to assembling - -@example - move d1,sp@@- - move d2,sp@@- - move d3,sp@@- -@end example - -@node Lcomm -@section @code{.lcomm @var{symbol} , @var{length}} - -@cindex @code{lcomm} directive -@cindex local common symbols -@cindex symbols, local common -Reserve @var{length} (an absolute expression) bytes for a local common -denoted by @var{symbol}. The section and value of @var{symbol} are -those of the new local common. The addresses are allocated in the bss -section, so that at run-time the bytes start off zeroed. @var{Symbol} -is not declared global (@pxref{Global,,@code{.global}}), so is normally -not visible to @code{@value{LD}}. - -@ifset GENERIC -Some targets permit a third argument to be used with @code{.lcomm}. This -argument specifies the desired alignment of the symbol in the bss section. -@end ifset - -@ifset HPPA -The syntax for @code{.lcomm} differs slightly on the HPPA. The syntax is -@samp{@var{symbol} .lcomm, @var{length}}; @var{symbol} is optional. -@end ifset - -@node Lflags -@section @code{.lflags} - -@cindex @code{lflags} directive (ignored) -@code{@value{AS}} accepts this directive, for compatibility with other -assemblers, but ignores it. - -@ifclear no-line-dir -@node Line -@section @code{.line @var{line-number}} - -@cindex @code{line} directive -@end ifclear -@ifset no-line-dir -@node Ln -@section @code{.ln @var{line-number}} - -@cindex @code{ln} directive -@end ifset -@cindex logical line number -@ifset aout-bout -Change the logical line number. @var{line-number} must be an absolute -expression. The next line has that logical line number. Therefore any other -statements on the current line (after a statement separator character) are -reported as on logical line number @var{line-number} @minus{} 1. One day -@code{@value{AS}} will no longer support this directive: it is recognized only -for compatibility with existing assembler programs. - -@ifset GENERIC -@ifset A29K -@emph{Warning:} In the AMD29K configuration of @value{AS}, this command is -not available; use the synonym @code{.ln} in that context. -@end ifset -@end ifset -@end ifset - -@ifclear no-line-dir -Even though this is a directive associated with the @code{a.out} or -@code{b.out} object-code formats, @code{@value{AS}} still recognizes it -when producing COFF output, and treats @samp{.line} as though it -were the COFF @samp{.ln} @emph{if} it is found outside a -@code{.def}/@code{.endef} pair. - -Inside a @code{.def}, @samp{.line} is, instead, one of the directives -used by compilers to generate auxiliary symbol information for -debugging. -@end ifclear - -@node Linkonce -@section @code{.linkonce [@var{type}]} -@cindex COMDAT -@cindex @code{linkonce} directive -@cindex common sections -Mark the current section so that the linker only includes a single copy of it. -This may be used to include the same section in several different object files, -but ensure that the linker will only include it once in the final output file. -The @code{.linkonce} pseudo-op must be used for each instance of the section. -Duplicate sections are detected based on the section name, so it should be -unique. - -This directive is only supported by a few object file formats; as of this -writing, the only object file format which supports it is the Portable -Executable format used on Windows NT. - -The @var{type} argument is optional. If specified, it must be one of the -following strings. For example: -@smallexample -.linkonce same_size -@end smallexample -Not all types may be supported on all object file formats. - -@table @code -@item discard -Silently discard duplicate sections. This is the default. - -@item one_only -Warn if there are duplicate sections, but still keep only one copy. - -@item same_size -Warn if any of the duplicates have different sizes. - -@item same_contents -Warn if any of the duplicates do not have exactly the same contents. -@end table - -@node Ln -@section @code{.ln @var{line-number}} - -@cindex @code{ln} directive -@ifclear no-line-dir -@samp{.ln} is a synonym for @samp{.line}. -@end ifclear -@ifset no-line-dir -Tell @code{@value{AS}} to change the logical line number. @var{line-number} -must be an absolute expression. The next line has that logical -line number, so any other statements on the current line (after a -statement separator character @code{;}) are reported as on logical -line number @var{line-number} @minus{} 1. -@ifset BOUT - -This directive is accepted, but ignored, when @code{@value{AS}} is -configured for @code{b.out}; its effect is only associated with COFF -output format. -@end ifset -@end ifset - -@node MRI -@section @code{.mri @var{val}} - -@cindex @code{mri} directive -@cindex MRI mode, temporarily -If @var{val} is non-zero, this tells @code{@value{AS}} to enter MRI mode. If -@var{val} is zero, this tells @code{@value{AS}} to exit MRI mode. This change -affects code assembled until the next @code{.mri} directive, or until the end -of the file. @xref{M, MRI mode, MRI mode}. - -@node List -@section @code{.list} - -@cindex @code{list} directive -@cindex listing control, turning on -Control (in conjunction with the @code{.nolist} directive) whether or -not assembly listings are generated. These two directives maintain an -internal counter (which is zero initially). @code{.list} increments the -counter, and @code{.nolist} decrements it. Assembly listings are -generated whenever the counter is greater than zero. - -By default, listings are disabled. When you enable them (with the -@samp{-a} command line option; @pxref{Invoking,,Command-Line Options}), -the initial value of the listing counter is one. - -@node Long -@section @code{.long @var{expressions}} - -@cindex @code{long} directive -@code{.long} is the same as @samp{.int}, @pxref{Int,,@code{.int}}. - -@ignore -@c no one seems to know what this is for or whether this description is -@c what it really ought to do -@node Lsym -@section @code{.lsym @var{symbol}, @var{expression}} - -@cindex @code{lsym} directive -@cindex symbol, not referenced in assembly -@code{.lsym} creates a new symbol named @var{symbol}, but does not put it in -the hash table, ensuring it cannot be referenced by name during the -rest of the assembly. This sets the attributes of the symbol to be -the same as the expression value: -@smallexample -@var{other} = @var{descriptor} = 0 -@var{type} = @r{(section of @var{expression})} -@var{value} = @var{expression} -@end smallexample -@noindent -The new symbol is not flagged as external. -@end ignore - -@node Macro -@section @code{.macro} - -@cindex macros -The commands @code{.macro} and @code{.endm} allow you to define macros that -generate assembly output. For example, this definition specifies a macro -@code{sum} that puts a sequence of numbers into memory: - -@example - .macro sum from=0, to=5 - .long \from - .if \to-\from - sum "(\from+1)",\to - .endif - .endm -@end example - -@noindent -With that definition, @samp{SUM 0,5} is equivalent to this assembly input: - -@example - .long 0 - .long 1 - .long 2 - .long 3 - .long 4 - .long 5 -@end example - -@ftable @code -@item .macro @var{macname} -@itemx .macro @var{macname} @var{macargs} @dots{} -@cindex @code{macro} directive -Begin the definition of a macro called @var{macname}. If your macro -definition requires arguments, specify their names after the macro name, -separated by commas or spaces. You can supply a default value for any -macro argument by following the name with @samp{=@var{deflt}}. For -example, these are all valid @code{.macro} statements: - -@table @code -@item .macro comm -Begin the definition of a macro called @code{comm}, which takes no -arguments. - -@item .macro plus1 p, p1 -@itemx .macro plus1 p p1 -Either statement begins the definition of a macro called @code{plus1}, -which takes two arguments; within the macro definition, write -@samp{\p} or @samp{\p1} to evaluate the arguments. - -@item .macro reserve_str p1=0 p2 -Begin the definition of a macro called @code{reserve_str}, with two -arguments. The first argument has a default value, but not the second. -After the definition is complete, you can call the macro either as -@samp{reserve_str @var{a},@var{b}} (with @samp{\p1} evaluating to -@var{a} and @samp{\p2} evaluating to @var{b}), or as @samp{reserve_str -,@var{b}} (with @samp{\p1} evaluating as the default, in this case -@samp{0}, and @samp{\p2} evaluating to @var{b}). -@end table - -When you call a macro, you can specify the argument values either by -position, or by keyword. For example, @samp{sum 9,17} is equivalent to -@samp{sum to=17, from=9}. - -@item .endm -@cindex @code{endm} directive -Mark the end of a macro definition. - -@item .exitm -@cindex @code{exitm} directive -Exit early from the current macro definition. - -@cindex number of macros executed -@cindex macros, count executed -@item \@@ -@code{@value{AS}} maintains a counter of how many macros it has -executed in this pseudo-variable; you can copy that number to your -output with @samp{\@@}, but @emph{only within a macro definition}. - -@ignore -@item LOCAL @var{name} [ , @dots{} ] -@emph{Warning: @code{LOCAL} is only available if you select ``alternate -macro syntax'' with @samp{-a} or @samp{--alternate}.} @xref{Alternate,, -Alternate macro syntax}. - -Generate a string replacement for each of the @var{name} arguments, and -replace any instances of @var{name} in each macro expansion. The -replacement string is unique in the assembly, and different for each -separate macro expansion. @code{LOCAL} allows you to write macros that -define symbols, without fear of conflict between separate macro expansions. -@end ignore -@end ftable - -@node Nolist -@section @code{.nolist} - -@cindex @code{nolist} directive -@cindex listing control, turning off -Control (in conjunction with the @code{.list} directive) whether or -not assembly listings are generated. These two directives maintain an -internal counter (which is zero initially). @code{.list} increments the -counter, and @code{.nolist} decrements it. Assembly listings are -generated whenever the counter is greater than zero. - -@node Octa -@section @code{.octa @var{bignums}} - -@c FIXME: double size emitted for "octa" on i960, others? Or warn? -@cindex @code{octa} directive -@cindex integer, 16-byte -@cindex sixteen byte integer -This directive expects zero or more bignums, separated by commas. For each -bignum, it emits a 16-byte integer. - -The term ``octa'' comes from contexts in which a ``word'' is two bytes; -hence @emph{octa}-word for 16 bytes. - -@node Org -@section @code{.org @var{new-lc} , @var{fill}} - -@cindex @code{org} directive -@cindex location counter, advancing -@cindex advancing location counter -@cindex current address, advancing -Advance the location counter of the current section to -@var{new-lc}. @var{new-lc} is either an absolute expression or an -expression with the same section as the current subsection. That is, -you can't use @code{.org} to cross sections: if @var{new-lc} has the -wrong section, the @code{.org} directive is ignored. To be compatible -with former assemblers, if the section of @var{new-lc} is absolute, -@code{@value{AS}} issues a warning, then pretends the section of @var{new-lc} -is the same as the current subsection. - -@code{.org} may only increase the location counter, or leave it -unchanged; you cannot use @code{.org} to move the location counter -backwards. - -@c double negative used below "not undefined" because this is a specific -@c reference to "undefined" (as SEG_UNKNOWN is called in this manual) -@c section. doc@cygnus.com 18feb91 -Because @code{@value{AS}} tries to assemble programs in one pass, @var{new-lc} -may not be undefined. If you really detest this restriction we eagerly await -a chance to share your improved assembler. - -Beware that the origin is relative to the start of the section, not -to the start of the subsection. This is compatible with other -people's assemblers. - -When the location counter (of the current subsection) is advanced, the -intervening bytes are filled with @var{fill} which should be an -absolute expression. If the comma and @var{fill} are omitted, -@var{fill} defaults to zero. - -@node P2align -@section @code{.p2align[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}} - -@cindex padding the location counter given a power of two -@cindex @code{p2align} directive -Pad the location counter (in the current subsection) to a particular -storage boundary. The first expression (which must be absolute) is the -number of low-order zero bits the location counter must have after -advancement. For example @samp{.p2align 3} advances the location -counter until it a multiple of 8. If the location counter is already a -multiple of 8, no change is needed. - -The second expression (also absolute) gives the fill value to be stored in the -padding bytes. It (and the comma) may be omitted. If it is omitted, the -padding bytes are normally zero. However, on some systems, if the section is -marked as containing code and the fill value is omitted, the space is filled -with no-op instructions. - -The third expression is also absolute, and is also optional. If it is present, -it is the maximum number of bytes that should be skipped by this alignment -directive. If doing the alignment would require skipping more bytes than the -specified maximum, then the alignment is not done at all. You can omit the -fill value (the second argument) entirely by simply using two commas after the -required alignment; this can be useful if you want the alignment to be filled -with no-op instructions when appropriate. - -@cindex @code{p2alignw} directive -@cindex @code{p2alignl} directive -The @code{.p2alignw} and @code{.p2alignl} directives are variants of the -@code{.p2align} directive. The @code{.p2alignw} directive treats the fill -pattern as a two byte word value. The @code{.p2alignl} directives treats the -fill pattern as a four byte longword value. For example, @code{.p2alignw -2,0x368d} will align to a multiple of 4. If it skips two bytes, they will be -filled in with the value 0x368d (the exact placement of the bytes depends upon -the endianness of the processor). If it skips 1 or 3 bytes, the fill value is -undefined. - -@node Psize -@section @code{.psize @var{lines} , @var{columns}} - -@cindex @code{psize} directive -@cindex listing control: paper size -@cindex paper size, for listings -Use this directive to declare the number of lines---and, optionally, the -number of columns---to use for each page, when generating listings. - -If you do not use @code{.psize}, listings use a default line-count -of 60. You may omit the comma and @var{columns} specification; the -default width is 200 columns. - -@code{@value{AS}} generates formfeeds whenever the specified number of -lines is exceeded (or whenever you explicitly request one, using -@code{.eject}). - -If you specify @var{lines} as @code{0}, no formfeeds are generated save -those explicitly specified with @code{.eject}. - -@node Quad -@section @code{.quad @var{bignums}} - -@cindex @code{quad} directive -@code{.quad} expects zero or more bignums, separated by commas. For -each bignum, it emits -@ifclear bignum-16 -an 8-byte integer. If the bignum won't fit in 8 bytes, it prints a -warning message; and just takes the lowest order 8 bytes of the bignum. -@cindex eight-byte integer -@cindex integer, 8-byte - -The term ``quad'' comes from contexts in which a ``word'' is two bytes; -hence @emph{quad}-word for 8 bytes. -@end ifclear -@ifset bignum-16 -a 16-byte integer. If the bignum won't fit in 16 bytes, it prints a -warning message; and just takes the lowest order 16 bytes of the bignum. -@cindex sixteen-byte integer -@cindex integer, 16-byte -@end ifset - -@node Rept -@section @code{.rept @var{count}} - -@cindex @code{rept} directive -Repeat the sequence of lines between the @code{.rept} directive and the next -@code{.endr} directive @var{count} times. - -For example, assembling - -@example - .rept 3 - .long 0 - .endr -@end example - -is equivalent to assembling - -@example - .long 0 - .long 0 - .long 0 -@end example - -@node Sbttl -@section @code{.sbttl "@var{subheading}"} - -@cindex @code{sbttl} directive -@cindex subtitles for listings -@cindex listing control: subtitle -Use @var{subheading} as the title (third line, immediately after the -title line) when generating assembly listings. - -This directive affects subsequent pages, as well as the current page if -it appears within ten lines of the top of a page. - -@ifset COFF -@node Scl -@section @code{.scl @var{class}} - -@cindex @code{scl} directive -@cindex symbol storage class (COFF) -@cindex COFF symbol storage class -Set the storage-class value for a symbol. This directive may only be -used inside a @code{.def}/@code{.endef} pair. Storage class may flag -whether a symbol is static or external, or it may record further -symbolic debugging information. -@ifset BOUT - -The @samp{.scl} directive is primarily associated with COFF output; when -configured to generate @code{b.out} output format, @code{@value{AS}} -accepts this directive but ignores it. -@end ifset -@end ifset - -@node Section -@section @code{.section @var{name}} - -@cindex @code{section} directive -@cindex named section -Use the @code{.section} directive to assemble the following code into a section -named @var{name}. - -This directive is only supported for targets that actually support arbitrarily -named sections; on @code{a.out} targets, for example, it is not accepted, even -with a standard @code{a.out} section name. - -@ifset COFF -For COFF targets, the @code{.section} directive is used in one of the following -ways: -@smallexample -.section @var{name}[, "@var{flags}"] -.section @var{name}[, @var{subsegment}] -@end smallexample - -If the optional argument is quoted, it is taken as flags to use for the -section. Each flag is a single character. The following flags are recognized: -@table @code -@item b -bss section (uninitialized data) -@item n -section is not loaded -@item w -writable section -@item d -data section -@item r -read-only section -@item x -executable section -@end table - -If no flags are specified, the default flags depend upon the section name. If -the section name is not recognized, the default will be for the section to be -loaded and writable. - -If the optional argument to the @code{.section} directive is not quoted, it is -taken as a subsegment number (@pxref{Sub-Sections}). -@end ifset - -@ifset ELF -For ELF targets, the @code{.section} directive is used like this: -@smallexample -.section @var{name}[, "@var{flags}"[, @@@var{type}]] -@end smallexample -The optional @var{flags} argument is a quoted string which may contain any -combintion of the following characters: -@table @code -@item a -section is allocatable -@item w -section is writable -@item x -section is executable -@end table - -The optional @var{type} argument may contain one of the following constants: -@table @code -@item @@progbits -section contains data -@item @@nobits -section does not contain data (i.e., section only occupies space) -@end table - -If no flags are specified, the default flags depend upon the section name. If -the section name is not recognized, the default will be for the section to have -none of the above flags: it will not be allocated in memory, nor writable, nor -executable. The section will contain data. - -For ELF targets, the assembler supports another type of @code{.section} -directive for compatibility with the Solaris assembler: -@smallexample -.section "@var{name}"[, @var{flags}...] -@end smallexample -Note that the section name is quoted. There may be a sequence of comma -separated flags: -@table @code -@item #alloc -section is allocatable -@item #write -section is writable -@item #execinstr -section is executable -@end table -@end ifset - -@node Set -@section @code{.set @var{symbol}, @var{expression}} - -@cindex @code{set} directive -@cindex symbol value, setting -Set the value of @var{symbol} to @var{expression}. This -changes @var{symbol}'s value and type to conform to -@var{expression}. If @var{symbol} was flagged as external, it remains -flagged (@pxref{Symbol Attributes}). - -You may @code{.set} a symbol many times in the same assembly. - -If you @code{.set} a global symbol, the value stored in the object -file is the last value stored into it. - -@ifset HPPA -The syntax for @code{set} on the HPPA is -@samp{@var{symbol} .set @var{expression}}. -@end ifset - -@node Short -@section @code{.short @var{expressions}} - -@cindex @code{short} directive -@ifset GENERIC -@code{.short} is normally the same as @samp{.word}. -@xref{Word,,@code{.word}}. - -In some configurations, however, @code{.short} and @code{.word} generate -numbers of different lengths; @pxref{Machine Dependencies}. -@end ifset -@ifclear GENERIC -@ifset W16 -@code{.short} is the same as @samp{.word}. @xref{Word,,@code{.word}}. -@end ifset -@ifset W32 -This expects zero or more @var{expressions}, and emits -a 16 bit number for each. -@end ifset -@end ifclear - -@node Single -@section @code{.single @var{flonums}} - -@cindex @code{single} directive -@cindex floating point numbers (single) -This directive assembles zero or more flonums, separated by commas. It -has the same effect as @code{.float}. -@ifset GENERIC -The exact kind of floating point numbers emitted depends on how -@code{@value{AS}} is configured. @xref{Machine Dependencies}. -@end ifset -@ifclear GENERIC -@ifset IEEEFLOAT -On the @value{TARGET} family, @code{.single} emits 32-bit floating point -numbers in @sc{ieee} format. -@end ifset -@end ifclear - -@ifset COFF -@node Size -@section @code{.size} - -@cindex @code{size} directive -This directive is generated by compilers to include auxiliary debugging -information in the symbol table. It is only permitted inside -@code{.def}/@code{.endef} pairs. -@ifset BOUT - -@samp{.size} is only meaningful when generating COFF format output; when -@code{@value{AS}} is generating @code{b.out}, it accepts this directive but -ignores it. -@end ifset -@end ifset - -@node Sleb128 -@section @code{.sleb128 @var{expressions}} - -@cindex @code{sleb128} directive -@var{sleb128} stands for ``signed little endian base 128.'' This is a -compact, variable length representation of numbers used by the DWARF -symbolic debugging format. @xref{Uleb128,@code{.uleb128}}. - -@ifclear no-space-dir -@node Skip -@section @code{.skip @var{size} , @var{fill}} - -@cindex @code{skip} directive -@cindex filling memory -This directive emits @var{size} bytes, each of value @var{fill}. Both -@var{size} and @var{fill} are absolute expressions. If the comma and -@var{fill} are omitted, @var{fill} is assumed to be zero. This is the same as -@samp{.space}. - -@node Space -@section @code{.space @var{size} , @var{fill}} - -@cindex @code{space} directive -@cindex filling memory -This directive emits @var{size} bytes, each of value @var{fill}. Both -@var{size} and @var{fill} are absolute expressions. If the comma -and @var{fill} are omitted, @var{fill} is assumed to be zero. This is the same -as @samp{.skip}. - -@ifset HPPA -@quotation -@emph{Warning:} @code{.space} has a completely different meaning for HPPA -targets; use @code{.block} as a substitute. See @cite{HP9000 Series 800 -Assembly Language Reference Manual} (HP 92432-90001) for the meaning of the -@code{.space} directive. @xref{HPPA Directives,,HPPA Assembler Directives}, -for a summary. -@end quotation -@end ifset -@end ifclear - -@ifset A29K -@ifclear GENERIC -@node Space -@section @code{.space} -@cindex @code{space} directive -@end ifclear -On the AMD 29K, this directive is ignored; it is accepted for -compatibility with other AMD 29K assemblers. - -@quotation -@emph{Warning:} In most versions of the @sc{gnu} assembler, the directive -@code{.space} has the effect of @code{.block} @xref{Machine Dependencies}. -@end quotation -@end ifset - -@ifset have-stabs -@node Stab -@section @code{.stabd, .stabn, .stabs} - -@cindex symbolic debuggers, information for -@cindex @code{stab@var{x}} directives -There are three directives that begin @samp{.stab}. -All emit symbols (@pxref{Symbols}), for use by symbolic debuggers. -The symbols are not entered in the @code{@value{AS}} hash table: they -cannot be referenced elsewhere in the source file. -Up to five fields are required: - -@table @var -@item string -This is the symbol's name. It may contain any character except -@samp{\000}, so is more general than ordinary symbol names. Some -debuggers used to code arbitrarily complex structures into symbol names -using this field. - -@item type -An absolute expression. The symbol's type is set to the low 8 bits of -this expression. Any bit pattern is permitted, but @code{@value{LD}} -and debuggers choke on silly bit patterns. - -@item other -An absolute expression. The symbol's ``other'' attribute is set to the -low 8 bits of this expression. - -@item desc -An absolute expression. The symbol's descriptor is set to the low 16 -bits of this expression. - -@item value -An absolute expression which becomes the symbol's value. -@end table - -If a warning is detected while reading a @code{.stabd}, @code{.stabn}, -or @code{.stabs} statement, the symbol has probably already been created; -you get a half-formed symbol in your object file. This is -compatible with earlier assemblers! - -@table @code -@cindex @code{stabd} directive -@item .stabd @var{type} , @var{other} , @var{desc} - -The ``name'' of the symbol generated is not even an empty string. -It is a null pointer, for compatibility. Older assemblers used a -null pointer so they didn't waste space in object files with empty -strings. - -The symbol's value is set to the location counter, -relocatably. When your program is linked, the value of this symbol -is the address of the location counter when the @code{.stabd} was -assembled. - -@cindex @code{stabn} directive -@item .stabn @var{type} , @var{other} , @var{desc} , @var{value} -The name of the symbol is set to the empty string @code{""}. - -@cindex @code{stabs} directive -@item .stabs @var{string} , @var{type} , @var{other} , @var{desc} , @var{value} -All five fields are specified. -@end table -@end ifset -@c end have-stabs - -@node String -@section @code{.string} "@var{str}" - -@cindex string, copying to object file -@cindex @code{string} directive - -Copy the characters in @var{str} to the object file. You may specify more than -one string to copy, separated by commas. Unless otherwise specified for a -particular machine, the assembler marks the end of each string with a 0 byte. -You can use any of the escape sequences described in @ref{Strings,,Strings}. - -@ifset ELF -@node Symver -@section @code{.symver} -@cindex @code{symver} directive -@cindex symbol versioning -@cindex versions of symbols -Use the @code{.symver} directive to bind symbols to specific version nodes -within a source file. This is only supported on ELF platforms, and is -typically used when assembling files to be linked into a shared library. -There are cases where it may make sense to use this in objects to be bound -into an application itself so as to override a versioned symbol from a -shared library. - -For ELF targets, the @code{.symver} directive is used like this: -@smallexample -.symver @var{name}, @var{name2@@nodename} -@end smallexample -In this case, the symbol @var{name} must exist and be defined within the file -being assembled. The @code{.versym} directive effectively creates a symbol -alias with the name @var{name2@@nodename}, and in fact the main reason that we -just don't try and create a regular alias is that the @var{@@} character isn't -permitted in symbol names. The @var{name2} part of the name is the actual name -of the symbol by which it will be externally referenced. The name @var{name} -itself is merely a name of convenience that is used so that it is possible to -have definitions for multiple versions of a function within a single source -file, and so that the compiler can unambiguously know which version of a -function is being mentioned. The @var{nodename} portion of the alias should be -the name of a node specified in the version script supplied to the linker when -building a shared library. If you are attempting to override a versioned -symbol from a shared library, then @var{nodename} should correspond to the -nodename of the symbol you are trying to override. -@end ifset - -@ifset COFF -@node Tag -@section @code{.tag @var{structname}} - -@cindex COFF structure debugging -@cindex structure debugging, COFF -@cindex @code{tag} directive -This directive is generated by compilers to include auxiliary debugging -information in the symbol table. It is only permitted inside -@code{.def}/@code{.endef} pairs. Tags are used to link structure -definitions in the symbol table with instances of those structures. -@ifset BOUT - -@samp{.tag} is only used when generating COFF format output; when -@code{@value{AS}} is generating @code{b.out}, it accepts this directive but -ignores it. -@end ifset -@end ifset - -@node Text -@section @code{.text @var{subsection}} - -@cindex @code{text} directive -Tells @code{@value{AS}} to assemble the following statements onto the end of -the text subsection numbered @var{subsection}, which is an absolute -expression. If @var{subsection} is omitted, subsection number zero -is used. - -@node Title -@section @code{.title "@var{heading}"} - -@cindex @code{title} directive -@cindex listing control: title line -Use @var{heading} as the title (second line, immediately after the -source file name and pagenumber) when generating assembly listings. - -This directive affects subsequent pages, as well as the current page if -it appears within ten lines of the top of a page. - -@ifset COFF -@node Type -@section @code{.type @var{int}} - -@cindex COFF symbol type -@cindex symbol type, COFF -@cindex @code{type} directive -This directive, permitted only within @code{.def}/@code{.endef} pairs, -records the integer @var{int} as the type attribute of a symbol table entry. -@ifset BOUT - -@samp{.type} is associated only with COFF format output; when -@code{@value{AS}} is configured for @code{b.out} output, it accepts this -directive but ignores it. -@end ifset -@end ifset - -@ifset COFF -@node Val -@section @code{.val @var{addr}} - -@cindex @code{val} directive -@cindex COFF value attribute -@cindex value attribute, COFF -This directive, permitted only within @code{.def}/@code{.endef} pairs, -records the address @var{addr} as the value attribute of a symbol table -entry. -@ifset BOUT - -@samp{.val} is used only for COFF output; when @code{@value{AS}} is -configured for @code{b.out}, it accepts this directive but ignores it. -@end ifset -@end ifset - -@node Uleb128 -@section @code{.uleb128 @var{expressions}} - -@cindex @code{uleb128} directive -@var{uleb128} stands for ``unsigned little endian base 128.'' This is a -compact, variable length representation of numbers used by the DWARF -symbolic debugging format. @xref{Sleb128,@code{.sleb128}}. - -@node Word -@section @code{.word @var{expressions}} - -@cindex @code{word} directive -This directive expects zero or more @var{expressions}, of any section, -separated by commas. -@ifclear GENERIC -@ifset W32 -For each expression, @code{@value{AS}} emits a 32-bit number. -@end ifset -@ifset W16 -For each expression, @code{@value{AS}} emits a 16-bit number. -@end ifset -@end ifclear -@ifset GENERIC - -The size of the number emitted, and its byte order, -depend on what target computer the assembly is for. -@end ifset - -@c on amd29k, i960, sparc the "special treatment to support compilers" doesn't -@c happen---32-bit addressability, period; no long/short jumps. -@ifset DIFF-TBL-KLUGE -@cindex difference tables altered -@cindex altered difference tables -@quotation -@emph{Warning: Special Treatment to support Compilers} -@end quotation - -@ifset GENERIC -Machines with a 32-bit address space, but that do less than 32-bit -addressing, require the following special treatment. If the machine of -interest to you does 32-bit addressing (or doesn't require it; -@pxref{Machine Dependencies}), you can ignore this issue. - -@end ifset -In order to assemble compiler output into something that works, -@code{@value{AS}} occasionlly does strange things to @samp{.word} directives. -Directives of the form @samp{.word sym1-sym2} are often emitted by -compilers as part of jump tables. Therefore, when @code{@value{AS}} assembles a -directive of the form @samp{.word sym1-sym2}, and the difference between -@code{sym1} and @code{sym2} does not fit in 16 bits, @code{@value{AS}} -creates a @dfn{secondary jump table}, immediately before the next label. -This secondary jump table is preceded by a short-jump to the -first byte after the secondary table. This short-jump prevents the flow -of control from accidentally falling into the new table. Inside the -table is a long-jump to @code{sym2}. The original @samp{.word} -contains @code{sym1} minus the address of the long-jump to -@code{sym2}. - -If there were several occurrences of @samp{.word sym1-sym2} before the -secondary jump table, all of them are adjusted. If there was a -@samp{.word sym3-sym4}, that also did not fit in sixteen bits, a -long-jump to @code{sym4} is included in the secondary jump table, -and the @code{.word} directives are adjusted to contain @code{sym3} -minus the address of the long-jump to @code{sym4}; and so on, for as many -entries in the original jump table as necessary. - -@ifset INTERNALS -@emph{This feature may be disabled by compiling @code{@value{AS}} with the -@samp{-DWORKING_DOT_WORD} option.} This feature is likely to confuse -assembly language programmers. -@end ifset -@end ifset -@c end DIFF-TBL-KLUGE - -@node Deprecated -@section Deprecated Directives - -@cindex deprecated directives -@cindex obsolescent directives -One day these directives won't work. -They are included for compatibility with older assemblers. -@table @t -@item .abort -@item .app-file -@item .line -@end table - -@ifset GENERIC -@node Machine Dependencies -@chapter Machine Dependent Features - -@cindex machine dependencies -The machine instruction sets are (almost by definition) different on -each machine where @code{@value{AS}} runs. Floating point representations -vary as well, and @code{@value{AS}} often supports a few additional -directives or command-line options for compatibility with other -assemblers on a particular platform. Finally, some versions of -@code{@value{AS}} support special pseudo-instructions for branch -optimization. - -This chapter discusses most of these differences, though it does not -include details on any machine's instruction set. For details on that -subject, see the hardware manufacturer's manual. - -@menu -@ifset A29K -* AMD29K-Dependent:: AMD 29K Dependent Features -@end ifset -@ifset ARC -* ARC-Dependent:: ARC Dependent Features -@end ifset -@ifset ARM -* ARM-Dependent:: ARM Dependent Features -@end ifset -@ifset D10V -* D10V-Dependent:: D10V Dependent Features -@end ifset -@ifset H8/300 -* H8/300-Dependent:: Hitachi H8/300 Dependent Features -@end ifset -@ifset H8/500 -* H8/500-Dependent:: Hitachi H8/500 Dependent Features -@end ifset -@ifset HPPA -* HPPA-Dependent:: HPPA Dependent Features -@end ifset -@ifset I80386 -* i386-Dependent:: Intel 80386 Dependent Features -@end ifset -@ifset I960 -* i960-Dependent:: Intel 80960 Dependent Features -@end ifset -@ifset M680X0 -* M68K-Dependent:: M680x0 Dependent Features -@end ifset -@ifset MIPS -* MIPS-Dependent:: MIPS Dependent Features -@end ifset -@ifset SH -* SH-Dependent:: Hitachi SH Dependent Features -@end ifset -@ifset SPARC -* Sparc-Dependent:: SPARC Dependent Features -@end ifset -@ifset V850 -* V850-Dependent:: V850 Dependent Features -@end ifset -@ifset Z8000 -* Z8000-Dependent:: Z8000 Dependent Features -@end ifset -@ifset VAX -* Vax-Dependent:: VAX Dependent Features -@end ifset -@end menu - -@lowersections -@end ifset - -@c The following major nodes are *sections* in the GENERIC version, *chapters* -@c in single-cpu versions. This is mainly achieved by @lowersections. There is a -@c peculiarity: to preserve cross-references, there must be a node called -@c "Machine Dependencies". Hence the conditional nodenames in each -@c major node below. Node defaulting in makeinfo requires adjacency of -@c node and sectioning commands; hence the repetition of @chapter BLAH -@c in both conditional blocks. - -@ifset ARC -@ifset GENERIC -@page -@node ARC-Dependent -@chapter ARC Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter ARC Dependent Features -@end ifclear - -@cindex ARC support -@menu -* ARC-Opts:: Options -* ARC-Float:: Floating Point -* ARC-Directives:: Sparc Machine Directives -@end menu - -@node ARC-Opts -@section Options - -@cindex options for ARC -@cindex ARC options -@cindex architectures, ARC -@cindex ARC architectures -The ARC chip family includes several successive levels (or other -variants) of chip, using the same core instruction set, but including -a few additional instructions at each level. - -By default, @code{@value{AS}} assumes the core instruction set (ARC -base). The @code{.cpu} pseudo-op is intended to be used to select -the variant. - -@table @code -@cindex @code{-mbig-endian} option (ARC) -@cindex @code{-mlittle-endian} option (ARC) -@cindex ARC big-endian output -@cindex ARC little-endian output -@cindex big-endian output, ARC -@cindex little-endian output, ARC -@item -mbig-endian -@itemx -mlittle-endian -Any @sc{arc} configuration of @code{@value{AS}} can select big-endian or -little-endian output at run time (unlike most other @sc{gnu} development -tools, which must be configured for one or the other). Use -@samp{-mbig-endian} to select big-endian output, and @samp{-mlittle-endian} -for little-endian. -@end table - -@node ARC-Float -@section Floating Point - -@cindex floating point, ARC (@sc{ieee}) -@cindex ARC floating point (@sc{ieee}) -The ARC cpu family currently does not have hardware floating point -support. Software floating point support is provided by @code{GCC} -and uses @sc{ieee} floating-point numbers. - -@node ARC-Directives -@section ARC Machine Directives - -@cindex ARC machine directives -@cindex machine directives, ARC -The ARC version of @code{@value{AS}} supports the following additional -machine directives: - -@table @code -@item .cpu -@cindex @code{cpu} directive, SPARC -This must be followed by the desired cpu. -The ARC is intended to be customizable, @code{.cpu} is used to -select the desired variant [though currently there are none]. - -@end table - -@end ifset - -@ifset A29K -@include c-a29k.texi -@end ifset - -@ifset ARM -@include c-arm.texi -@end ifset - -@ifset Hitachi-all -@ifclear GENERIC -@node Machine Dependencies -@chapter Machine Dependent Features - -The machine instruction sets are different on each Hitachi chip family, -and there are also some syntax differences among the families. This -chapter describes the specific @code{@value{AS}} features for each -family. - -@menu -* H8/300-Dependent:: Hitachi H8/300 Dependent Features -* H8/500-Dependent:: Hitachi H8/500 Dependent Features -* SH-Dependent:: Hitachi SH Dependent Features -@end menu -@lowersections -@end ifclear -@end ifset - -@ifset D10V -@include c-d10v.texi -@end ifset - - -@ifset H8/300 -@include c-h8300.texi -@end ifset - -@ifset H8/500 -@include c-h8500.texi -@end ifset - -@ifset HPPA -@include c-hppa.texi -@end ifset - -@ifset I80386 -@include c-i386.texi -@end ifset - -@ifset I960 -@include c-i960.texi -@end ifset - - -@ifset M680X0 -@include c-m68k.texi -@end ifset - -@ifset MIPS -@include c-mips.texi -@end ifset - -@ifset NS32K -@include c-ns32k.texi -@end ifset - -@ifset SH -@include c-sh.texi -@end ifset - -@ifset SPARC -@include c-sparc.texi -@end ifset - -@ifset Z8000 -@include c-z8k.texi -@end ifset - -@ifset VAX -@include c-vax.texi -@end ifset - -@ifset V850 -@include c-v850.texi -@end ifset - -@ifset GENERIC -@c reverse effect of @down at top of generic Machine-Dep chapter -@raisesections -@end ifset - -@node Reporting Bugs -@chapter Reporting Bugs -@cindex bugs in assembler -@cindex reporting bugs in assembler - -Your bug reports play an essential role in making @code{@value{AS}} reliable. - -Reporting a bug may help you by bringing a solution to your problem, or it may -not. But in any case the principal function of a bug report is to help the -entire community by making the next version of @code{@value{AS}} work better. -Bug reports are your contribution to the maintenance of @code{@value{AS}}. - -In order for a bug report to serve its purpose, you must include the -information that enables us to fix the bug. - -@menu -* Bug Criteria:: Have you found a bug? -* Bug Reporting:: How to report bugs -@end menu - -@node Bug Criteria -@section Have you found a bug? -@cindex bug criteria - -If you are not sure whether you have found a bug, here are some guidelines: - -@itemize @bullet -@cindex fatal signal -@cindex assembler crash -@cindex crash of assembler -@item -If the assembler gets a fatal signal, for any input whatever, that is a -@code{@value{AS}} bug. Reliable assemblers never crash. - -@cindex error on valid input -@item -If @code{@value{AS}} produces an error message for valid input, that is a bug. - -@cindex invalid input -@item -If @code{@value{AS}} does not produce an error message for invalid input, that -is a bug. However, you should note that your idea of ``invalid input'' might -be our idea of ``an extension'' or ``support for traditional practice''. - -@item -If you are an experienced user of assemblers, your suggestions for improvement -of @code{@value{AS}} are welcome in any case. -@end itemize - -@node Bug Reporting -@section How to report bugs -@cindex bug reports -@cindex assembler bugs, reporting - -A number of companies and individuals offer support for @sc{gnu} products. If -you obtained @code{@value{AS}} from a support organization, we recommend you -contact that organization first. - -You can find contact information for many support companies and -individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs -distribution. - -In any event, we also recommend that you send bug reports for @code{@value{AS}} -to @samp{bug-gnu-utils@@gnu.org}. - -The fundamental principle of reporting bugs usefully is this: -@strong{report all the facts}. If you are not sure whether to state a -fact or leave it out, state it! - -Often people omit facts because they think they know what causes the problem -and assume that some details do not matter. Thus, you might assume that the -name of a symbol you use in an example does not matter. Well, probably it does -not, but one cannot be sure. Perhaps the bug is a stray memory reference which -happens to fetch from the location where that name is stored in memory; -perhaps, if the name were different, the contents of that location would fool -the assembler into doing the right thing despite the bug. Play it safe and -give a specific, complete example. That is the easiest thing for you to do, -and the most helpful. - -Keep in mind that the purpose of a bug report is to enable us to fix the bug if -it is new to us. Therefore, always write your bug reports on the assumption -that the bug has not been reported previously. - -Sometimes people give a few sketchy facts and ask, ``Does this ring a -bell?'' Those bug reports are useless, and we urge everyone to -@emph{refuse to respond to them} except to chide the sender to report -bugs properly. - -To enable us to fix the bug, you should include all these things: - -@itemize @bullet -@item -The version of @code{@value{AS}}. @code{@value{AS}} announces it if you start -it with the @samp{--version} argument. - -Without this, we will not know whether there is any point in looking for -the bug in the current version of @code{@value{AS}}. - -@item -Any patches you may have applied to the @code{@value{AS}} source. - -@item -The type of machine you are using, and the operating system name and -version number. - -@item -What compiler (and its version) was used to compile @code{@value{AS}}---e.g. -``@code{gcc-2.7}''. - -@item -The command arguments you gave the assembler to assemble your example and -observe the bug. To guarantee you will not omit something important, list them -all. A copy of the Makefile (or the output from make) is sufficient. - -If we were to try to guess the arguments, we would probably guess wrong -and then we might not encounter the bug. - -@item -A complete input file that will reproduce the bug. If the bug is observed when -the assembler is invoked via a compiler, send the assembler source, not the -high level language source. Most compilers will produce the assembler source -when run with the @samp{-S} option. If you are using @code{@value{GCC}}, use -the options @samp{-v --save-temps}; this will save the assembler source in a -file with an extension of @file{.s}, and also show you exactly how -@code{@value{AS}} is being run. - -@item -A description of what behavior you observe that you believe is -incorrect. For example, ``It gets a fatal signal.'' - -Of course, if the bug is that @code{@value{AS}} gets a fatal signal, then we -will certainly notice it. But if the bug is incorrect output, we might not -notice unless it is glaringly wrong. You might as well not give us a chance to -make a mistake. - -Even if the problem you experience is a fatal signal, you should still say so -explicitly. Suppose something strange is going on, such as, your copy of -@code{@value{AS}} is out of synch, or you have encountered a bug in the C -library on your system. (This has happened!) Your copy might crash and ours -would not. If you told us to expect a crash, then when ours fails to crash, we -would know that the bug was not happening for us. If you had not told us to -expect a crash, then we would not be able to draw any conclusion from our -observations. - -@item -If you wish to suggest changes to the @code{@value{AS}} source, send us context -diffs, as generated by @code{diff} with the @samp{-u}, @samp{-c}, or @samp{-p} -option. Always send diffs from the old file to the new file. If you even -discuss something in the @code{@value{AS}} source, refer to it by context, not -by line number. - -The line numbers in our development sources will not match those in your -sources. Your line numbers would convey no useful information to us. -@end itemize - -Here are some things that are not necessary: - -@itemize @bullet -@item -A description of the envelope of the bug. - -Often people who encounter a bug spend a lot of time investigating -which changes to the input file will make the bug go away and which -changes will not affect it. - -This is often time consuming and not very useful, because the way we -will find the bug is by running a single example under the debugger -with breakpoints, not by pure deduction from a series of examples. -We recommend that you save your time for something else. - -Of course, if you can find a simpler example to report @emph{instead} -of the original one, that is a convenience for us. Errors in the -output will be easier to spot, running under the debugger will take -less time, and so on. - -However, simplification is not vital; if you do not want to do this, -report the bug anyway and send us the entire test case you used. - -@item -A patch for the bug. - -A patch for the bug does help us if it is a good one. But do not omit -the necessary information, such as the test case, on the assumption that -a patch is all we need. We might see problems with your patch and decide -to fix the problem another way, or we might not understand it at all. - -Sometimes with a program as complicated as @code{@value{AS}} it is very hard to -construct an example that will make the program follow a certain path through -the code. If you do not send us the example, we will not be able to construct -one, so we will not be able to verify that the bug is fixed. - -And if we cannot understand what bug you are trying to fix, or why your -patch should be an improvement, we will not install it. A test case will -help us to understand. - -@item -A guess about what the bug is or what it depends on. - -Such guesses are usually wrong. Even we cannot guess right about such -things without first using the debugger to find the facts. -@end itemize - -@node Acknowledgements -@chapter Acknowledgements - -If you have contributed to @code{@value{AS}} and your name isn't listed here, -it is not meant as a slight. We just don't know about it. Send mail to the -maintainer, and we'll correct the situation. Currently -@c (January 1994), -the maintainer is Ken Raeburn (email address @code{raeburn@@cygnus.com}). - -Dean Elsner wrote the original @sc{gnu} assembler for the VAX.@footnote{Any -more details?} - -Jay Fenlason maintained GAS for a while, adding support for GDB-specific debug -information and the 68k series machines, most of the preprocessing pass, and -extensive changes in @file{messages.c}, @file{input-file.c}, @file{write.c}. - -K. Richard Pixley maintained GAS for a while, adding various enhancements and -many bug fixes, including merging support for several processors, breaking GAS -up to handle multiple object file format back ends (including heavy rewrite, -testing, an integration of the coff and b.out back ends), adding configuration -including heavy testing and verification of cross assemblers and file splits -and renaming, converted GAS to strictly ANSI C including full prototypes, added -support for m680[34]0 and cpu32, did considerable work on i960 including a COFF -port (including considerable amounts of reverse engineering), a SPARC opcode -file rewrite, DECstation, rs6000, and hp300hpux host ports, updated ``know'' -assertions and made them work, much other reorganization, cleanup, and lint. - -Ken Raeburn wrote the high-level BFD interface code to replace most of the code -in format-specific I/O modules. - -The original VMS support was contributed by David L. Kashtan. Eric Youngdale -has done much work with it since. - -The Intel 80386 machine description was written by Eliot Dresselhaus. - -Minh Tran-Le at IntelliCorp contributed some AIX 386 support. - -The Motorola 88k machine description was contributed by Devon Bowen of Buffalo -University and Torbjorn Granlund of the Swedish Institute of Computer Science. - -Keith Knowles at the Open Software Foundation wrote the original MIPS back end -(@file{tc-mips.c}, @file{tc-mips.h}), and contributed Rose format support -(which hasn't been merged in yet). Ralph Campbell worked with the MIPS code to -support a.out format. - -Support for the Zilog Z8k and Hitachi H8/300 and H8/500 processors (tc-z8k, -tc-h8300, tc-h8500), and IEEE 695 object file format (obj-ieee), was written by -Steve Chamberlain of Cygnus Support. Steve also modified the COFF back end to -use BFD for some low-level operations, for use with the H8/300 and AMD 29k -targets. - -John Gilmore built the AMD 29000 support, added @code{.include} support, and -simplified the configuration of which versions accept which directives. He -updated the 68k machine description so that Motorola's opcodes always produced -fixed-size instructions (e.g. @code{jsr}), while synthetic instructions -remained shrinkable (@code{jbsr}). John fixed many bugs, including true tested -cross-compilation support, and one bug in relaxation that took a week and -required the proverbial one-bit fix. - -Ian Lance Taylor of Cygnus Support merged the Motorola and MIT syntax for the -68k, completed support for some COFF targets (68k, i386 SVR3, and SCO Unix), -added support for MIPS ECOFF and ELF targets, wrote the initial RS/6000 and -PowerPC assembler, and made a few other minor patches. - -Steve Chamberlain made @code{@value{AS}} able to generate listings. - -Hewlett-Packard contributed support for the HP9000/300. - -Jeff Law wrote GAS and BFD support for the native HPPA object format (SOM) -along with a fairly extensive HPPA testsuite (for both SOM and ELF object -formats). This work was supported by both the Center for Software Science at -the University of Utah and Cygnus Support. - -Support for ELF format files has been worked on by Mark Eichin of Cygnus -Support (original, incomplete implementation for SPARC), Pete Hoogenboom and -Jeff Law at the University of Utah (HPPA mainly), Michael Meissner of the Open -Software Foundation (i386 mainly), and Ken Raeburn of Cygnus Support (sparc, -and some initial 64-bit support). - -Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote GAS and BFD -support for openVMS/Alpha. - -Several engineers at Cygnus Support have also provided many small bug fixes and -configuration enhancements. - -Many others have contributed large or small bugfixes and enhancements. If -you have contributed significant work and are not mentioned on this list, and -want to be, let us know. Some of the history has been lost; we are not -intentionally leaving anyone out. - -@node Index -@unnumbered Index - -@printindex cp - -@contents -@bye -@c Local Variables: -@c fill-column: 79 -@c End: diff --git a/contrib/binutils/gas/doc/c-i386.texi b/contrib/binutils/gas/doc/c-i386.texi deleted file mode 100644 index bb51be3997e6..000000000000 --- a/contrib/binutils/gas/doc/c-i386.texi +++ /dev/null @@ -1,456 +0,0 @@ -@c Copyright (C) 1991, 92, 93, 94, 95, 1997 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@ifset GENERIC -@page -@node i386-Dependent -@chapter 80386 Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter 80386 Dependent Features -@end ifclear - -@cindex i386 support -@cindex i80306 support -@menu -* i386-Options:: Options -* i386-Syntax:: AT&T Syntax versus Intel Syntax -* i386-Opcodes:: Opcode Naming -* i386-Regs:: Register Naming -* i386-prefixes:: Opcode Prefixes -* i386-Memory:: Memory References -* i386-jumps:: Handling of Jump Instructions -* i386-Float:: Floating Point -* i386-16bit:: Writing 16-bit Code -* i386-Notes:: Notes -@end menu - -@node i386-Options -@section Options - -@cindex options for i386 (none) -@cindex i386 options (none) -The 80386 has no machine dependent options. - -@node i386-Syntax -@section AT&T Syntax versus Intel Syntax - -@cindex i386 syntax compatibility -@cindex syntax compatibility, i386 -In order to maintain compatibility with the output of @code{@value{GCC}}, -@code{@value{AS}} supports AT&T System V/386 assembler syntax. This is quite -different from Intel syntax. We mention these differences because -almost all 80386 documents used only Intel syntax. Notable differences -between the two syntaxes are: - -@cindex immediate operands, i386 -@cindex i386 immediate operands -@cindex register operands, i386 -@cindex i386 register operands -@cindex jump/call operands, i386 -@cindex i386 jump/call operands -@cindex operand delimiters, i386 -@itemize @bullet -@item -AT&T immediate operands are preceded by @samp{$}; Intel immediate -operands are undelimited (Intel @samp{push 4} is AT&T @samp{pushl $4}). -AT&T register operands are preceded by @samp{%}; Intel register operands -are undelimited. AT&T absolute (as opposed to PC relative) jump/call -operands are prefixed by @samp{*}; they are undelimited in Intel syntax. - -@cindex i386 source, destination operands -@cindex source, destination operands; i386 -@item -AT&T and Intel syntax use the opposite order for source and destination -operands. Intel @samp{add eax, 4} is @samp{addl $4, %eax}. The -@samp{source, dest} convention is maintained for compatibility with -previous Unix assemblers. - -@cindex opcode suffixes, i386 -@cindex sizes operands, i386 -@cindex i386 size suffixes -@item -In AT&T syntax the size of memory operands is determined from the last -character of the opcode name. Opcode suffixes of @samp{b}, @samp{w}, -and @samp{l} specify byte (8-bit), word (16-bit), and long (32-bit) -memory references. Intel syntax accomplishes this by prefixes memory -operands (@emph{not} the opcodes themselves) with @samp{byte ptr}, -@samp{word ptr}, and @samp{dword ptr}. Thus, Intel @samp{mov al, byte -ptr @var{foo}} is @samp{movb @var{foo}, %al} in AT&T syntax. - -@cindex return instructions, i386 -@cindex i386 jump, call, return -@item -Immediate form long jumps and calls are -@samp{lcall/ljmp $@var{section}, $@var{offset}} in AT&T syntax; the -Intel syntax is -@samp{call/jmp far @var{section}:@var{offset}}. Also, the far return -instruction -is @samp{lret $@var{stack-adjust}} in AT&T syntax; Intel syntax is -@samp{ret far @var{stack-adjust}}. - -@cindex sections, i386 -@cindex i386 sections -@item -The AT&T assembler does not provide support for multiple section -programs. Unix style systems expect all programs to be single sections. -@end itemize - -@node i386-Opcodes -@section Opcode Naming - -@cindex i386 opcode naming -@cindex opcode naming, i386 -Opcode names are suffixed with one character modifiers which specify the -size of operands. The letters @samp{b}, @samp{w}, and @samp{l} specify -byte, word, and long operands. If no suffix is specified by an -instruction and it contains no memory operands then @code{@value{AS}} tries to -fill in the missing suffix based on the destination register operand -(the last one by convention). Thus, @samp{mov %ax, %bx} is equivalent -to @samp{movw %ax, %bx}; also, @samp{mov $1, %bx} is equivalent to -@samp{movw $1, %bx}. Note that this is incompatible with the AT&T Unix -assembler which assumes that a missing opcode suffix implies long -operand size. (This incompatibility does not affect compiler output -since compilers always explicitly specify the opcode suffix.) - -Almost all opcodes have the same names in AT&T and Intel format. There -are a few exceptions. The sign extend and zero extend instructions need -two sizes to specify them. They need a size to sign/zero extend -@emph{from} and a size to zero extend @emph{to}. This is accomplished -by using two opcode suffixes in AT&T syntax. Base names for sign extend -and zero extend are @samp{movs@dots{}} and @samp{movz@dots{}} in AT&T -syntax (@samp{movsx} and @samp{movzx} in Intel syntax). The opcode -suffixes are tacked on to this base name, the @emph{from} suffix before -the @emph{to} suffix. Thus, @samp{movsbl %al, %edx} is AT&T syntax for -``move sign extend @emph{from} %al @emph{to} %edx.'' Possible suffixes, -thus, are @samp{bl} (from byte to long), @samp{bw} (from byte to word), -and @samp{wl} (from word to long). - -@cindex conversion instructions, i386 -@cindex i386 conversion instructions -The Intel-syntax conversion instructions - -@itemize @bullet -@item -@samp{cbw} --- sign-extend byte in @samp{%al} to word in @samp{%ax}, - -@item -@samp{cwde} --- sign-extend word in @samp{%ax} to long in @samp{%eax}, - -@item -@samp{cwd} --- sign-extend word in @samp{%ax} to long in @samp{%dx:%ax}, - -@item -@samp{cdq} --- sign-extend dword in @samp{%eax} to quad in @samp{%edx:%eax}, -@end itemize - -@noindent -are called @samp{cbtw}, @samp{cwtl}, @samp{cwtd}, and @samp{cltd} in -AT&T naming. @code{@value{AS}} accepts either naming for these instructions. - -@cindex jump instructions, i386 -@cindex call instructions, i386 -Far call/jump instructions are @samp{lcall} and @samp{ljmp} in -AT&T syntax, but are @samp{call far} and @samp{jump far} in Intel -convention. - -@node i386-Regs -@section Register Naming - -@cindex i386 registers -@cindex registers, i386 -Register operands are always prefixes with @samp{%}. The 80386 registers -consist of - -@itemize @bullet -@item -the 8 32-bit registers @samp{%eax} (the accumulator), @samp{%ebx}, -@samp{%ecx}, @samp{%edx}, @samp{%edi}, @samp{%esi}, @samp{%ebp} (the -frame pointer), and @samp{%esp} (the stack pointer). - -@item -the 8 16-bit low-ends of these: @samp{%ax}, @samp{%bx}, @samp{%cx}, -@samp{%dx}, @samp{%di}, @samp{%si}, @samp{%bp}, and @samp{%sp}. - -@item -the 8 8-bit registers: @samp{%ah}, @samp{%al}, @samp{%bh}, -@samp{%bl}, @samp{%ch}, @samp{%cl}, @samp{%dh}, and @samp{%dl} (These -are the high-bytes and low-bytes of @samp{%ax}, @samp{%bx}, -@samp{%cx}, and @samp{%dx}) - -@item -the 6 section registers @samp{%cs} (code section), @samp{%ds} -(data section), @samp{%ss} (stack section), @samp{%es}, @samp{%fs}, -and @samp{%gs}. - -@item -the 3 processor control registers @samp{%cr0}, @samp{%cr2}, and -@samp{%cr3}. - -@item -the 6 debug registers @samp{%db0}, @samp{%db1}, @samp{%db2}, -@samp{%db3}, @samp{%db6}, and @samp{%db7}. - -@item -the 2 test registers @samp{%tr6} and @samp{%tr7}. - -@item -the 8 floating point register stack @samp{%st} or equivalently -@samp{%st(0)}, @samp{%st(1)}, @samp{%st(2)}, @samp{%st(3)}, -@samp{%st(4)}, @samp{%st(5)}, @samp{%st(6)}, and @samp{%st(7)}. -@end itemize - -@node i386-prefixes -@section Opcode Prefixes - -@cindex i386 opcode prefixes -@cindex opcode prefixes, i386 -@cindex prefixes, i386 -Opcode prefixes are used to modify the following opcode. They are used -to repeat string instructions, to provide section overrides, to perform -bus lock operations, and to give operand and address size (16-bit -operands are specified in an instruction by prefixing what would -normally be 32-bit operands with a ``operand size'' opcode prefix). -Opcode prefixes are usually given as single-line instructions with no -operands, and must directly precede the instruction they act upon. For -example, the @samp{scas} (scan string) instruction is repeated with: -@smallexample - repne - scas -@end smallexample - -Here is a list of opcode prefixes: - -@cindex section override prefixes, i386 -@itemize @bullet -@item -Section override prefixes @samp{cs}, @samp{ds}, @samp{ss}, @samp{es}, -@samp{fs}, @samp{gs}. These are automatically added by specifying -using the @var{section}:@var{memory-operand} form for memory references. - -@cindex size prefixes, i386 -@item -Operand/Address size prefixes @samp{data16} and @samp{addr16} -change 32-bit operands/addresses into 16-bit operands/addresses. Note -that 16-bit addressing modes (i.e. 8086 and 80286 addressing modes) -are not supported (yet). - -@cindex bus lock prefixes, i386 -@cindex inhibiting interrupts, i386 -@item -The bus lock prefix @samp{lock} inhibits interrupts during -execution of the instruction it precedes. (This is only valid with -certain instructions; see a 80386 manual for details). - -@cindex coprocessor wait, i386 -@item -The wait for coprocessor prefix @samp{wait} waits for the -coprocessor to complete the current instruction. This should never be -needed for the 80386/80387 combination. - -@cindex repeat prefixes, i386 -@item -The @samp{rep}, @samp{repe}, and @samp{repne} prefixes are added -to string instructions to make them repeat @samp{%ecx} times. -@end itemize - -@node i386-Memory -@section Memory References - -@cindex i386 memory references -@cindex memory references, i386 -An Intel syntax indirect memory reference of the form - -@smallexample -@var{section}:[@var{base} + @var{index}*@var{scale} + @var{disp}] -@end smallexample - -@noindent -is translated into the AT&T syntax - -@smallexample -@var{section}:@var{disp}(@var{base}, @var{index}, @var{scale}) -@end smallexample - -@noindent -where @var{base} and @var{index} are the optional 32-bit base and -index registers, @var{disp} is the optional displacement, and -@var{scale}, taking the values 1, 2, 4, and 8, multiplies @var{index} -to calculate the address of the operand. If no @var{scale} is -specified, @var{scale} is taken to be 1. @var{section} specifies the -optional section register for the memory operand, and may override the -default section register (see a 80386 manual for section register -defaults). Note that section overrides in AT&T syntax @emph{must} have -be preceded by a @samp{%}. If you specify a section override which -coincides with the default section register, @code{@value{AS}} does @emph{not} -output any section register override prefixes to assemble the given -instruction. Thus, section overrides can be specified to emphasize which -section register is used for a given memory operand. - -Here are some examples of Intel and AT&T style memory references: - -@table @asis -@item AT&T: @samp{-4(%ebp)}, Intel: @samp{[ebp - 4]} -@var{base} is @samp{%ebp}; @var{disp} is @samp{-4}. @var{section} is -missing, and the default section is used (@samp{%ss} for addressing with -@samp{%ebp} as the base register). @var{index}, @var{scale} are both missing. - -@item AT&T: @samp{foo(,%eax,4)}, Intel: @samp{[foo + eax*4]} -@var{index} is @samp{%eax} (scaled by a @var{scale} 4); @var{disp} is -@samp{foo}. All other fields are missing. The section register here -defaults to @samp{%ds}. - -@item AT&T: @samp{foo(,1)}; Intel @samp{[foo]} -This uses the value pointed to by @samp{foo} as a memory operand. -Note that @var{base} and @var{index} are both missing, but there is only -@emph{one} @samp{,}. This is a syntactic exception. - -@item AT&T: @samp{%gs:foo}; Intel @samp{gs:foo} -This selects the contents of the variable @samp{foo} with section -register @var{section} being @samp{%gs}. -@end table - -Absolute (as opposed to PC relative) call and jump operands must be -prefixed with @samp{*}. If no @samp{*} is specified, @code{@value{AS}} -always chooses PC relative addressing for jump/call labels. - -Any instruction that has a memory operand @emph{must} specify its size (byte, -word, or long) with an opcode suffix (@samp{b}, @samp{w}, or @samp{l}, -respectively). - -@node i386-jumps -@section Handling of Jump Instructions - -@cindex jump optimization, i386 -@cindex i386 jump optimization -Jump instructions are always optimized to use the smallest possible -displacements. This is accomplished by using byte (8-bit) displacement -jumps whenever the target is sufficiently close. If a byte displacement -is insufficient a long (32-bit) displacement is used. We do not support -word (16-bit) displacement jumps (i.e. prefixing the jump instruction -with the @samp{addr16} opcode prefix), since the 80386 insists upon masking -@samp{%eip} to 16 bits after the word displacement is added. - -Note that the @samp{jcxz}, @samp{jecxz}, @samp{loop}, @samp{loopz}, -@samp{loope}, @samp{loopnz} and @samp{loopne} instructions only come in byte -displacements, so that if you use these instructions (@code{@value{GCC}} does -not use them) you may get an error message (and incorrect code). The AT&T -80386 assembler tries to get around this problem by expanding @samp{jcxz foo} -to - -@smallexample - jcxz cx_zero - jmp cx_nonzero -cx_zero: jmp foo -cx_nonzero: -@end smallexample - -@node i386-Float -@section Floating Point - -@cindex i386 floating point -@cindex floating point, i386 -All 80387 floating point types except packed BCD are supported. -(BCD support may be added without much difficulty). These data -types are 16-, 32-, and 64- bit integers, and single (32-bit), -double (64-bit), and extended (80-bit) precision floating point. -Each supported type has an opcode suffix and a constructor -associated with it. Opcode suffixes specify operand's data -types. Constructors build these data types into memory. - -@cindex @code{float} directive, i386 -@cindex @code{single} directive, i386 -@cindex @code{double} directive, i386 -@cindex @code{tfloat} directive, i386 -@itemize @bullet -@item -Floating point constructors are @samp{.float} or @samp{.single}, -@samp{.double}, and @samp{.tfloat} for 32-, 64-, and 80-bit formats. -These correspond to opcode suffixes @samp{s}, @samp{l}, and @samp{t}. -@samp{t} stands for temporary real, and that the 80387 only supports -this format via the @samp{fldt} (load temporary real to stack top) and -@samp{fstpt} (store temporary real and pop stack) instructions. - -@cindex @code{word} directive, i386 -@cindex @code{long} directive, i386 -@cindex @code{int} directive, i386 -@cindex @code{quad} directive, i386 -@item -Integer constructors are @samp{.word}, @samp{.long} or @samp{.int}, and -@samp{.quad} for the 16-, 32-, and 64-bit integer formats. The corresponding -opcode suffixes are @samp{s} (single), @samp{l} (long), and @samp{q} -(quad). As with the temporary real format the 64-bit @samp{q} format is -only present in the @samp{fildq} (load quad integer to stack top) and -@samp{fistpq} (store quad integer and pop stack) instructions. -@end itemize - -Register to register operations do not require opcode suffixes, -so that @samp{fst %st, %st(1)} is equivalent to @samp{fstl %st, %st(1)}. - -@node i386-16bit -@section Writing 16-bit Code - -@cindex i386 16-bit code -@cindex 16-bit code, i386 -@cindex real-mode code, i386 -@cindex @code{code16} directive, i386 -@cindex @code{code32} directive, i386 -While GAS normally writes only ``pure'' 32-bit i386 code, it has limited -support for writing code to run in real mode or in 16-bit protected mode -code segments. To do this, insert a @samp{.code16} directive before the -assembly language instructions to be run in 16-bit mode. You can switch -GAS back to writing normal 32-bit code with the @samp{.code32} directive. - -GAS understands exactly the same assembly language syntax in 16-bit mode as -in 32-bit mode. The function of any given instruction is exactly the same -regardless of mode, as long as the resulting object code is executed in the -mode for which GAS wrote it. So, for example, the @samp{ret} mnemonic -produces a 32-bit return instruction regardless of whether it is to be run -in 16-bit or 32-bit mode. (If GAS is in 16-bit mode, it will add an -operand size prefix to the instruction to force it to be a 32-bit return.) - -This means, for one thing, that you can use @sc{gnu} @sc{cc} to write code to be run -in real mode or 16-bit protected mode. Just insert the statement -@samp{asm(".code16");} at the beginning of your C source file, and while -@sc{gnu} @sc{cc} will still be generating 32-bit code, GAS will automatically add -all the necessary size prefixes to make that code run in 16-bit mode. Of -course, since @sc{gnu} @sc{cc} only writes small-model code (it doesn't know how to -attach segment selectors to pointers like native x86 compilers do), any -16-bit code you write with @sc{gnu} @sc{cc} will essentially be limited to a 64K -address space. Also, there will be a code size and performance penalty -due to all the extra address and operand size prefixes GAS has to add to -the instructions. - -Note that placing GAS in 16-bit mode does not mean that the resulting -code will necessarily run on a 16-bit pre-80386 processor. To write code -that runs on such a processor, you would have to refrain from using -@emph{any} 32-bit constructs which require GAS to output address or -operand size prefixes. At the moment this would be rather difficult, -because GAS currently supports @emph{only} 32-bit addressing modes: when -writing 16-bit code, it @emph{always} outputs address size prefixes for any -instruction that uses a non-register addressing mode. So you can write -code that runs on 16-bit processors, but only if that code never references -memory. - -@node i386-Notes -@section Notes - -@cindex i386 @code{mul}, @code{imul} instructions -@cindex @code{mul} instruction, i386 -@cindex @code{imul} instruction, i386 -There is some trickery concerning the @samp{mul} and @samp{imul} -instructions that deserves mention. The 16-, 32-, and 64-bit expanding -multiplies (base opcode @samp{0xf6}; extension 4 for @samp{mul} and 5 -for @samp{imul}) can be output only in the one operand form. Thus, -@samp{imul %ebx, %eax} does @emph{not} select the expanding multiply; -the expanding multiply would clobber the @samp{%edx} register, and this -would confuse @code{@value{GCC}} output. Use @samp{imul %ebx} to get the -64-bit product in @samp{%edx:%eax}. - -We have added a two operand form of @samp{imul} when the first operand -is an immediate mode expression and the second operand is a register. -This is just a shorthand, so that, multiplying @samp{%eax} by 69, for -example, can be done with @samp{imul $69, %eax} rather than @samp{imul -$69, %eax, %eax}. - diff --git a/contrib/binutils/gas/doc/c-sh.texi b/contrib/binutils/gas/doc/c-sh.texi deleted file mode 100644 index e20f55437883..000000000000 --- a/contrib/binutils/gas/doc/c-sh.texi +++ /dev/null @@ -1,272 +0,0 @@ -@c Copyright (C) 1991, 92, 93, 94, 95, 1997 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@page -@node SH-Dependent -@chapter Hitachi SH Dependent Features - -@cindex SH support -@menu -* SH Options:: Options -* SH Syntax:: Syntax -* SH Floating Point:: Floating Point -* SH Directives:: SH Machine Directives -* SH Opcodes:: Opcodes -@end menu - -@node SH Options -@section Options - -@cindex SH options (none) -@cindex options, SH (none) -@code{@value{AS}} has no additional command-line options for the Hitachi -SH family. - -@node SH Syntax -@section Syntax - -@menu -* SH-Chars:: Special Characters -* SH-Regs:: Register Names -* SH-Addressing:: Addressing Modes -@end menu - -@node SH-Chars -@subsection Special Characters - -@cindex line comment character, SH -@cindex SH line comment character -@samp{!} is the line comment character. - -@cindex line separator, SH -@cindex statement separator, SH -@cindex SH line separator -You can use @samp{;} instead of a newline to separate statements. - -@cindex symbol names, @samp{$} in -@cindex @code{$} in symbol names -Since @samp{$} has no special meaning, you may use it in symbol names. - -@node SH-Regs -@subsection Register Names - -@cindex SH registers -@cindex registers, SH -You can use the predefined symbols @samp{r0}, @samp{r1}, @samp{r2}, -@samp{r3}, @samp{r4}, @samp{r5}, @samp{r6}, @samp{r7}, @samp{r8}, -@samp{r9}, @samp{r10}, @samp{r11}, @samp{r12}, @samp{r13}, @samp{r14}, -and @samp{r15} to refer to the SH registers. - -The SH also has these control registers: - -@table @code -@item pr -procedure register (holds return address) - -@item pc -program counter - -@item mach -@itemx macl -high and low multiply accumulator registers - -@item sr -status register - -@item gbr -global base register - -@item vbr -vector base register (for interrupt vectors) -@end table - -@node SH-Addressing -@subsection Addressing Modes - -@cindex addressing modes, SH -@cindex SH addressing modes -@code{@value{AS}} understands the following addressing modes for the SH. -@code{R@var{n}} in the following refers to any of the numbered -registers, but @emph{not} the control registers. - -@table @code -@item R@var{n} -Register direct - -@item @@R@var{n} -Register indirect - -@item @@-R@var{n} -Register indirect with pre-decrement - -@item @@R@var{n}+ -Register indirect with post-increment - -@item @@(@var{disp}, R@var{n}) -Register indirect with displacement - -@item @@(R0, R@var{n}) -Register indexed - -@item @@(@var{disp}, GBR) -@code{GBR} offset - -@item @@(R0, GBR) -GBR indexed - -@item @var{addr} -@itemx @@(@var{disp}, PC) -PC relative address (for branch or for addressing memory). The -@code{@value{AS}} implementation allows you to use the simpler form -@var{addr} anywhere a PC relative address is called for; the alternate -form is supported for compatibility with other assemblers. - -@item #@var{imm} -Immediate data -@end table - -@node SH Floating Point -@section Floating Point - -@cindex floating point, SH (@sc{ieee}) -@cindex SH floating point (@sc{ieee}) -The SH family has no hardware floating point, but the @code{.float} -directive generates @sc{ieee} floating-point numbers for compatibility -with other development tools. - -@node SH Directives -@section SH Machine Directives - -@cindex SH machine directives -@cindex machine directives, SH -@cindex @code{uaword} directive, SH -@cindex @code{ualong} directive, SH - -@table @code -@item uaword -@itemx ualong -@code{@value{AS}} will issue a warning when a misaligned @code{.word} or -@code{.long} directive is used. You may use @code{.uaword} or -@code{.ualong} to indicate that the value is intentionally misaligned. -@end table - -@node SH Opcodes -@section Opcodes - -@cindex SH opcode summary -@cindex opcode summary, SH -@cindex mnemonics, SH -@cindex instruction summary, SH -For detailed information on the SH machine instruction set, see -@cite{SH-Microcomputer User's Manual} (Hitachi Micro Systems, Inc.). - -@code{@value{AS}} implements all the standard SH opcodes. No additional -pseudo-instructions are needed on this family. Note, however, that -because @code{@value{AS}} supports a simpler form of PC-relative -addressing, you may simply write (for example) - -@example -mov.l bar,r0 -@end example - -@noindent -where other assemblers might require an explicit displacement to -@code{bar} from the program counter: - -@example -mov.l @@(@var{disp}, PC) -@end example - -@ifset SMALL -@c this table, due to the multi-col faking and hardcoded order, looks silly -@c except in smallbook. See comments below "@set SMALL" near top of this file. - -Here is a summary of SH opcodes: - -@page -@smallexample -@i{Legend:} -Rn @r{a numbered register} -Rm @r{another numbered register} -#imm @r{immediate data} -disp @r{displacement} -disp8 @r{8-bit displacement} -disp12 @r{12-bit displacement} - -add #imm,Rn lds.l @@Rn+,PR -add Rm,Rn mac.w @@Rm+,@@Rn+ -addc Rm,Rn mov #imm,Rn -addv Rm,Rn mov Rm,Rn -and #imm,R0 mov.b Rm,@@(R0,Rn) -and Rm,Rn mov.b Rm,@@-Rn -and.b #imm,@@(R0,GBR) mov.b Rm,@@Rn -bf disp8 mov.b @@(disp,Rm),R0 -bra disp12 mov.b @@(disp,GBR),R0 -bsr disp12 mov.b @@(R0,Rm),Rn -bt disp8 mov.b @@Rm+,Rn -clrmac mov.b @@Rm,Rn -clrt mov.b R0,@@(disp,Rm) -cmp/eq #imm,R0 mov.b R0,@@(disp,GBR) -cmp/eq Rm,Rn mov.l Rm,@@(disp,Rn) -cmp/ge Rm,Rn mov.l Rm,@@(R0,Rn) -cmp/gt Rm,Rn mov.l Rm,@@-Rn -cmp/hi Rm,Rn mov.l Rm,@@Rn -cmp/hs Rm,Rn mov.l @@(disp,Rn),Rm -cmp/pl Rn mov.l @@(disp,GBR),R0 -cmp/pz Rn mov.l @@(disp,PC),Rn -cmp/str Rm,Rn mov.l @@(R0,Rm),Rn -div0s Rm,Rn mov.l @@Rm+,Rn -div0u mov.l @@Rm,Rn -div1 Rm,Rn mov.l R0,@@(disp,GBR) -exts.b Rm,Rn mov.w Rm,@@(R0,Rn) -exts.w Rm,Rn mov.w Rm,@@-Rn -extu.b Rm,Rn mov.w Rm,@@Rn -extu.w Rm,Rn mov.w @@(disp,Rm),R0 -jmp @@Rn mov.w @@(disp,GBR),R0 -jsr @@Rn mov.w @@(disp,PC),Rn -ldc Rn,GBR mov.w @@(R0,Rm),Rn -ldc Rn,SR mov.w @@Rm+,Rn -ldc Rn,VBR mov.w @@Rm,Rn -ldc.l @@Rn+,GBR mov.w R0,@@(disp,Rm) -ldc.l @@Rn+,SR mov.w R0,@@(disp,GBR) -ldc.l @@Rn+,VBR mova @@(disp,PC),R0 -lds Rn,MACH movt Rn -lds Rn,MACL muls Rm,Rn -lds Rn,PR mulu Rm,Rn -lds.l @@Rn+,MACH neg Rm,Rn -lds.l @@Rn+,MACL negc Rm,Rn -@page -nop stc VBR,Rn -not Rm,Rn stc.l GBR,@@-Rn -or #imm,R0 stc.l SR,@@-Rn -or Rm,Rn stc.l VBR,@@-Rn -or.b #imm,@@(R0,GBR) sts MACH,Rn -rotcl Rn sts MACL,Rn -rotcr Rn sts PR,Rn -rotl Rn sts.l MACH,@@-Rn -rotr Rn sts.l MACL,@@-Rn -rte sts.l PR,@@-Rn -rts sub Rm,Rn -sett subc Rm,Rn -shal Rn subv Rm,Rn -shar Rn swap.b Rm,Rn -shll Rn swap.w Rm,Rn -shll16 Rn tas.b @@Rn -shll2 Rn trapa #imm -shll8 Rn tst #imm,R0 -shlr Rn tst Rm,Rn -shlr16 Rn tst.b #imm,@@(R0,GBR) -shlr2 Rn xor #imm,R0 -shlr8 Rn xor Rm,Rn -sleep xor.b #imm,@@(R0,GBR) -stc GBR,Rn xtrct Rm,Rn -stc SR,Rn -@end smallexample -@end ifset - -@ifset Hitachi-all -@ifclear GENERIC -@raisesections -@end ifclear -@end ifset - diff --git a/contrib/binutils/gas/doc/c-v850.texi b/contrib/binutils/gas/doc/c-v850.texi deleted file mode 100644 index a7608f4e575e..000000000000 --- a/contrib/binutils/gas/doc/c-v850.texi +++ /dev/null @@ -1,308 +0,0 @@ -@c Copyright (C) 1997, 1998 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. - -@node V850-Dependent -@chapter v850 Dependent Features - -@cindex V850 support -@menu -* V850 Options:: Options -* V850 Syntax:: Syntax -* V850 Floating Point:: Floating Point -* V850 Directives:: V850 Machine Directives -* V850 Opcodes:: Opcodes -@end menu - -@node V850 Options -@section Options -@cindex V850 options (none) -@cindex options for V850 (none) -@code{@value{AS}} supports the following additional command-line options -for the V850 processor family: - -@cindex command line options, V850 -@cindex V850 command line options -@table @code - -@cindex @code{-wsigned_overflow} command line option, V850 -@item -wsigned_overflow -Causes warnings to be produced when signed immediate values overflow the -space available for then within their opcodes. By default this option -is disabled as it is possible to receive spurious warnings due to using -exact bit patterns as immediate constants. - -@cindex @code{-wunsigned_overflow} command line option, V850 -@item -wunsigned_overflow -Causes warnings to be produced when unsigned immediate values overflow -the space available for then within their opcodes. By default this -option is disabled as it is possible to receive spurious warnings due to -using exact bit patterns as immediate constants. - -@cindex @code{-mv850} command line option, V850 -@item -mv850 -Specifies that the assembled code should be marked as being targeted at -the V850 processor. This allows the linker to detect attempts to link -such code with code assembled for other processors. - - - -@end table - - -@node V850 Syntax -@section Syntax -@menu -* V850-Chars:: Special Characters -* V850-Regs:: Register Names -@end menu - -@node V850-Chars -@subsection Special Characters - -@cindex line comment character, V850 -@cindex V850 line comment character -@samp{#} is the line comment character. -@node V850-Regs -@subsection Register Names - -@cindex V850 register names -@cindex register names, V850 -@code{@value{AS}} supports the following names for registers: -@table @code -@cindex @code{zero} register, V850 -@item general register 0 -r0, zero -@item general register 1 -r1 -@item general register 2 -r2, hp -@cindex @code{sp} register, V850 -@item general register 3 -r3, sp -@cindex @code{gp} register, V850 -@item general register 4 -r4, gp -@cindex @code{tp} register, V850 -@item general register 5 -r5, tp -@item general register 6 -r6 -@item general register 7 -r7 -@item general register 8 -r8 -@item general register 9 -r9 -@item general register 10 -r10 -@item general register 11 -r11 -@item general register 12 -r12 -@item general register 13 -r13 -@item general register 14 -r14 -@item general register 15 -r15 -@item general register 16 -r16 -@item general register 17 -r17 -@item general register 18 -r18 -@item general register 19 -r19 -@item general register 20 -r20 -@item general register 21 -r21 -@item general register 22 -r22 -@item general register 23 -r23 -@item general register 24 -r24 -@item general register 25 -r25 -@item general register 26 -r26 -@item general register 27 -r27 -@item general register 28 -r28 -@item general register 29 -r29 -@cindex @code{ep} register, V850 -@item general register 30 -r30, ep -@cindex @code{lp} register, V850 -@item general register 31 -r31, lp -@cindex @code{eipc} register, V850 -@item system register 0 -eipc -@cindex @code{eipsw} register, V850 -@item system register 1 -eipsw -@cindex @code{fepc} register, V850 -@item system register 2 -fepc -@cindex @code{fepsw} register, V850 -@item system register 3 -fepsw -@cindex @code{ecr} register, V850 -@item system register 4 -ecr -@cindex @code{psw} register, V850 -@item system register 5 -psw -@end table - -@node V850 Floating Point -@section Floating Point - -@cindex floating point, V850 (@sc{ieee}) -@cindex V850 floating point (@sc{ieee}) -The V850 family uses @sc{ieee} floating-point numbers. - -@node V850 Directives -@section V850 Machine Directives - -@cindex machine directives, V850 -@cindex V850 machine directives -@table @code -@cindex @code{offset} directive, V850 -@item .offset @var{<expression>} -Moves the offset into the current section to the specified amount. - -@cindex @code{section} directive, V850 -@item .section "name", <type> -This is an extension to the standard .section directive. It sets the -current section to be <type> and creates an alias for this section -called "name". - -@cindex @code{.v850} directive, V850 -@item .v850 -Specifies that the assembled code should be marked as being targeted at -the V850 processor. This allows the linker to detect attempts to link -such code with code assembled for other processors. - - - -@end table - -@node V850 Opcodes -@section Opcodes - -@cindex V850 opcodes -@cindex opcodes for V850 -@code{@value{AS}} implements all the standard V850 opcodes. - -@code{@value{AS}} also implements the following pseudo ops: - -@table @code - -@cindex @code{hi0} pseudo-op, V850 -@item hi0() -Computes the higher 16 bits of the given expression and stores it into -the immediate operand field of the given instruction. For example: - - @samp{mulhi hi0(here - there), r5, r6} - -computes the difference between the address of labels 'here' and -'there', takes the upper 16 bits of this difference, shifts it down 16 -bits and then mutliplies it by the lower 16 bits in register 5, putting -the result into register 6. - -@cindex @code{lo} pseudo-op, V850 -@item lo() -Computes the lower 16 bits of the given expression and stores it into -the immediate operand field of the given instruction. For example: - - @samp{addi lo(here - there), r5, r6} - -computes the difference between the address of labels 'here' and -'there', takes the lower 16 bits of this difference and adds it to -register 5, putting the result into register 6. - -@cindex @code{hi} pseudo-op, V850 -@item hi() -Computes the higher 16 bits of the given expression and then adds the -value of the most significant bit of the lower 16 bits of the expression -and stores the result into the immediate operand field of the given -instruction. For example the following code can be used to compute the -address of the label 'here' and store it into register 6: - - @samp{movhi hi(here), r0, r6} - @samp{movea lo(here), r6, r6} - -The reason for this special behaviour is that movea performs a sign -extention on its immediate operand. So for example if the address of -'here' was 0xFFFFFFFF then without the special behaviour of the hi() -pseudo-op the movhi instruction would put 0xFFFF0000 into r6, then the -movea instruction would takes its immediate operand, 0xFFFF, sign extend -it to 32 bits, 0xFFFFFFFF, and then add it into r6 giving 0xFFFEFFFF -which is wrong (the fifth nibble is E). With the hi() pseudo op adding -in the top bit of the lo() pseudo op, the movhi instruction actually -stores 0 into r6 (0xFFFF + 1 = 0x0000), so that the movea instruction -stores 0xFFFFFFFF into r6 - the right value. - - -@cindex @code{sdaoff} pseudo-op, V850 -@item sdaoff() -Computes the offset of the named variable from the start of the Small -Data Area (whoes address is held in register 4, the GP register) and -stores the result as a 16 bit signed value in the immediate operand -field of the given instruction. For example: - - @samp{ld.w sdaoff(_a_variable)[gp],r6} - -loads the contents of the location pointed to by the label '_a_variable' -into register 6, provided that the label is located somewhere within +/- -32K of the address held in the GP register. [Note the linker assumes -that the GP register contains a fixed address set to the address of the -label called '__gp'. This can either be set up automatically by the -linker, or specifically set by using the @samp{--defsym __gp=<value>} -command line option]. - -@cindex @code{tdaoff} pseudo-op, V850 -@item tdaoff() -Computes the offset of the named variable from the start of the Tiny -Data Area (whoes address is held in register 30, the EP register) and -stores the result as a -7 or 8 bit unsigned value in the immediate -operand field of the given instruction. For example: - - @samp{sld.w tdaoff(_a_variable)[ep],r6} - -loads the contents of the location pointed to by the label '_a_variable' -into register 6, provided that the label is located somewhere within +256 -bytes of the address held in the EP register. [Note the linker assumes -that the EP register contains a fixed address set to the address of the -label called '__ep'. This can either be set up automatically by the -linker, or specifically set by using the @samp{--defsym __ep=<value>} -command line option]. - -@cindex @code{zdaoff} pseudo-op, V850 -@item zdaoff() -Computes the offset of the named variable from address 0 and stores the -result as a 16 bit signed value in the immediate operand field of the -given instruction. For example: - - @samp{movea zdaoff(_a_variable),zero,r6} - -puts the address of the label '_a_variable' into register 6, assuming -that the label is somewhere within the first 32K of memory. (Strictly -speaking it also possible to access the last 32K of memory as well, as -the offsets are signed). - - -@end table - - -For information on the V850 instruction set, see @cite{V850 -Family 32-/16-Bit single-Chip Microcontroller Architecture Manual} from NEC. -Ltd. - diff --git a/contrib/binutils/gas/doc/c-z8k.texi b/contrib/binutils/gas/doc/c-z8k.texi deleted file mode 100644 index 1fb10e3b2ca0..000000000000 --- a/contrib/binutils/gas/doc/c-z8k.texi +++ /dev/null @@ -1,380 +0,0 @@ -@c Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@ifset GENERIC -@page -@node Z8000-Dependent -@chapter Z8000 Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter Z8000 Dependent Features -@end ifclear - -@cindex Z8000 support -The Z8000 @value{AS} supports both members of the Z8000 family: the -unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with -24 bit addresses. - -When the assembler is in unsegmented mode (specified with the -@code{unsegm} directive), an address takes up one word (16 bit) -sized register. When the assembler is in segmented mode (specified with -the @code{segm} directive), a 24-bit address takes up a long (32 bit) -register. @xref{Z8000 Directives,,Assembler Directives for the Z8000}, -for a list of other Z8000 specific assembler directives. - -@menu -* Z8000 Options:: No special command-line options for Z8000 -* Z8000 Syntax:: Assembler syntax for the Z8000 -* Z8000 Directives:: Special directives for the Z8000 -* Z8000 Opcodes:: Opcodes -@end menu - -@node Z8000 Options -@section Options - -@cindex Z8000 options -@cindex options, Z8000 -@code{@value{AS}} has no additional command-line options for the Zilog -Z8000 family. - -@node Z8000 Syntax -@section Syntax -@menu -* Z8000-Chars:: Special Characters -* Z8000-Regs:: Register Names -* Z8000-Addressing:: Addressing Modes -@end menu - -@node Z8000-Chars -@subsection Special Characters - -@cindex line comment character, Z8000 -@cindex Z8000 line comment character -@samp{!} is the line comment character. - -@cindex line separator, Z8000 -@cindex statement separator, Z8000 -@cindex Z8000 line separator -You can use @samp{;} instead of a newline to separate statements. - -@node Z8000-Regs -@subsection Register Names - -@cindex Z8000 registers -@cindex registers, Z8000 -The Z8000 has sixteen 16 bit registers, numbered 0 to 15. You can refer -to different sized groups of registers by register number, with the -prefix @samp{r} for 16 bit registers, @samp{rr} for 32 bit registers and -@samp{rq} for 64 bit registers. You can also refer to the contents of -the first eight (of the sixteen 16 bit registers) by bytes. They are -named @samp{r@var{n}h} and @samp{r@var{n}l}. - -@smallexample -@exdent @emph{byte registers} -r0l r0h r1h r1l r2h r2l r3h r3l -r4h r4l r5h r5l r6h r6l r7h r7l - -@exdent @emph{word registers} -r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 - -@exdent @emph{long word registers} -rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14 - -@exdent @emph{quad word registers} -rq0 rq4 rq8 rq12 -@end smallexample - -@node Z8000-Addressing -@subsection Addressing Modes - -@cindex addressing modes, Z8000 -@cindex Z800 addressing modes -@value{AS} understands the following addressing modes for the Z8000: - -@table @code -@item r@var{n} -Register direct - -@item @@r@var{n} -Indirect register - -@item @var{addr} -Direct: the 16 bit or 24 bit address (depending on whether the assembler -is in segmented or unsegmented mode) of the operand is in the instruction. - -@item address(r@var{n}) -Indexed: the 16 or 24 bit address is added to the 16 bit register to produce -the final address in memory of the operand. - -@item r@var{n}(#@var{imm}) -Base Address: the 16 or 24 bit register is added to the 16 bit sign -extended immediate displacement to produce the final address in memory -of the operand. - -@item r@var{n}(r@var{m}) -Base Index: the 16 or 24 bit register r@var{n} is added to the sign -extended 16 bit index register r@var{m} to produce the final address in -memory of the operand. - -@item #@var{xx} -Immediate data @var{xx}. -@end table - -@node Z8000 Directives -@section Assembler Directives for the Z8000 - -@cindex Z8000 directives -@cindex directives, Z8000 -The Z8000 port of @value{AS} includes these additional assembler directives, -for compatibility with other Z8000 assemblers. As shown, these do not -begin with @samp{.} (unlike the ordinary @value{AS} directives). - -@table @code -@kindex segm -@item segm -Generates code for the segmented Z8001. - -@kindex unsegm -@item unsegm -Generates code for the unsegmented Z8002. - -@kindex name -@item name -Synonym for @code{.file} - -@kindex global -@item global -Synonym for @code{.global} - -@kindex wval -@item wval -Synonym for @code{.word} - -@kindex lval -@item lval -Synonym for @code{.long} - -@kindex bval -@item bval -Synonym for @code{.byte} - -@kindex sval -@item sval -Assemble a string. @code{sval} expects one string literal, delimited by -single quotes. It assembles each byte of the string into consecutive -addresses. You can use the escape sequence @samp{%@var{xx}} (where -@var{xx} represents a two-digit hexadecimal number) to represent the -character whose @sc{ascii} value is @var{xx}. Use this feature to -describe single quote and other characters that may not appear in string -literals as themselves. For example, the C statement @w{@samp{char *a = -"he said \"it's 50% off\"";}} is represented in Z8000 assembly language -(shown with the assembler output in hex at the left) as - -@iftex -@begingroup -@let@nonarrowing=@comment -@end iftex -@smallexample -68652073 sval 'he said %22it%27s 50%25 off%22%00' -61696420 -22697427 -73203530 -25206F66 -662200 -@end smallexample -@iftex -@endgroup -@end iftex - -@kindex rsect -@item rsect -synonym for @code{.section} - -@kindex block -@item block -synonym for @code{.space} - -@kindex even -@item even -special case of @code{.align}; aligns output to even byte boundary. -@end table - -@node Z8000 Opcodes -@section Opcodes - -@cindex Z8000 opcode summary -@cindex opcode summary, Z8000 -@cindex mnemonics, Z8000 -@cindex instruction summary, Z8000 -For detailed information on the Z8000 machine instruction set, see -@cite{Z8000 Technical Manual}. - -@ifset SMALL -@c this table, due to the multi-col faking and hardcoded order, looks silly -@c except in smallbook. See comments below "@set SMALL" near top of this file. - -The following table summarizes the opcodes and their arguments: -@iftex -@begingroup -@let@nonarrowing=@comment -@end iftex -@smallexample - - rs @r{16 bit source register} - rd @r{16 bit destination register} - rbs @r{8 bit source register} - rbd @r{8 bit destination register} - rrs @r{32 bit source register} - rrd @r{32 bit destination register} - rqs @r{64 bit source register} - rqd @r{64 bit destination register} - addr @r{16/24 bit address} - imm @r{immediate data} - -adc rd,rs clrb addr cpsir @@rd,@@rs,rr,cc -adcb rbd,rbs clrb addr(rd) cpsirb @@rd,@@rs,rr,cc -add rd,@@rs clrb rbd dab rbd -add rd,addr com @@rd dbjnz rbd,disp7 -add rd,addr(rs) com addr dec @@rd,imm4m1 -add rd,imm16 com addr(rd) dec addr(rd),imm4m1 -add rd,rs com rd dec addr,imm4m1 -addb rbd,@@rs comb @@rd dec rd,imm4m1 -addb rbd,addr comb addr decb @@rd,imm4m1 -addb rbd,addr(rs) comb addr(rd) decb addr(rd),imm4m1 -addb rbd,imm8 comb rbd decb addr,imm4m1 -addb rbd,rbs comflg flags decb rbd,imm4m1 -addl rrd,@@rs cp @@rd,imm16 di i2 -addl rrd,addr cp addr(rd),imm16 div rrd,@@rs -addl rrd,addr(rs) cp addr,imm16 div rrd,addr -addl rrd,imm32 cp rd,@@rs div rrd,addr(rs) -addl rrd,rrs cp rd,addr div rrd,imm16 -and rd,@@rs cp rd,addr(rs) div rrd,rs -and rd,addr cp rd,imm16 divl rqd,@@rs -and rd,addr(rs) cp rd,rs divl rqd,addr -and rd,imm16 cpb @@rd,imm8 divl rqd,addr(rs) -and rd,rs cpb addr(rd),imm8 divl rqd,imm32 -andb rbd,@@rs cpb addr,imm8 divl rqd,rrs -andb rbd,addr cpb rbd,@@rs djnz rd,disp7 -andb rbd,addr(rs) cpb rbd,addr ei i2 -andb rbd,imm8 cpb rbd,addr(rs) ex rd,@@rs -andb rbd,rbs cpb rbd,imm8 ex rd,addr -bit @@rd,imm4 cpb rbd,rbs ex rd,addr(rs) -bit addr(rd),imm4 cpd rd,@@rs,rr,cc ex rd,rs -bit addr,imm4 cpdb rbd,@@rs,rr,cc exb rbd,@@rs -bit rd,imm4 cpdr rd,@@rs,rr,cc exb rbd,addr -bit rd,rs cpdrb rbd,@@rs,rr,cc exb rbd,addr(rs) -bitb @@rd,imm4 cpi rd,@@rs,rr,cc exb rbd,rbs -bitb addr(rd),imm4 cpib rbd,@@rs,rr,cc ext0e imm8 -bitb addr,imm4 cpir rd,@@rs,rr,cc ext0f imm8 -bitb rbd,imm4 cpirb rbd,@@rs,rr,cc ext8e imm8 -bitb rbd,rs cpl rrd,@@rs ext8f imm8 -bpt cpl rrd,addr exts rrd -call @@rd cpl rrd,addr(rs) extsb rd -call addr cpl rrd,imm32 extsl rqd -call addr(rd) cpl rrd,rrs halt -calr disp12 cpsd @@rd,@@rs,rr,cc in rd,@@rs -clr @@rd cpsdb @@rd,@@rs,rr,cc in rd,imm16 -clr addr cpsdr @@rd,@@rs,rr,cc inb rbd,@@rs -clr addr(rd) cpsdrb @@rd,@@rs,rr,cc inb rbd,imm16 -clr rd cpsi @@rd,@@rs,rr,cc inc @@rd,imm4m1 -clrb @@rd cpsib @@rd,@@rs,rr,cc inc addr(rd),imm4m1 -inc addr,imm4m1 ldb rbd,rs(rx) mult rrd,addr(rs) -inc rd,imm4m1 ldb rd(imm16),rbs mult rrd,imm16 -incb @@rd,imm4m1 ldb rd(rx),rbs mult rrd,rs -incb addr(rd),imm4m1 ldctl ctrl,rs multl rqd,@@rs -incb addr,imm4m1 ldctl rd,ctrl multl rqd,addr -incb rbd,imm4m1 ldd @@rs,@@rd,rr multl rqd,addr(rs) -ind @@rd,@@rs,ra lddb @@rs,@@rd,rr multl rqd,imm32 -indb @@rd,@@rs,rba lddr @@rs,@@rd,rr multl rqd,rrs -inib @@rd,@@rs,ra lddrb @@rs,@@rd,rr neg @@rd -inibr @@rd,@@rs,ra ldi @@rd,@@rs,rr neg addr -iret ldib @@rd,@@rs,rr neg addr(rd) -jp cc,@@rd ldir @@rd,@@rs,rr neg rd -jp cc,addr ldirb @@rd,@@rs,rr negb @@rd -jp cc,addr(rd) ldk rd,imm4 negb addr -jr cc,disp8 ldl @@rd,rrs negb addr(rd) -ld @@rd,imm16 ldl addr(rd),rrs negb rbd -ld @@rd,rs ldl addr,rrs nop -ld addr(rd),imm16 ldl rd(imm16),rrs or rd,@@rs -ld addr(rd),rs ldl rd(rx),rrs or rd,addr -ld addr,imm16 ldl rrd,@@rs or rd,addr(rs) -ld addr,rs ldl rrd,addr or rd,imm16 -ld rd(imm16),rs ldl rrd,addr(rs) or rd,rs -ld rd(rx),rs ldl rrd,imm32 orb rbd,@@rs -ld rd,@@rs ldl rrd,rrs orb rbd,addr -ld rd,addr ldl rrd,rs(imm16) orb rbd,addr(rs) -ld rd,addr(rs) ldl rrd,rs(rx) orb rbd,imm8 -ld rd,imm16 ldm @@rd,rs,n orb rbd,rbs -ld rd,rs ldm addr(rd),rs,n out @@rd,rs -ld rd,rs(imm16) ldm addr,rs,n out imm16,rs -ld rd,rs(rx) ldm rd,@@rs,n outb @@rd,rbs -lda rd,addr ldm rd,addr(rs),n outb imm16,rbs -lda rd,addr(rs) ldm rd,addr,n outd @@rd,@@rs,ra -lda rd,rs(imm16) ldps @@rs outdb @@rd,@@rs,rba -lda rd,rs(rx) ldps addr outib @@rd,@@rs,ra -ldar rd,disp16 ldps addr(rs) outibr @@rd,@@rs,ra -ldb @@rd,imm8 ldr disp16,rs pop @@rd,@@rs -ldb @@rd,rbs ldr rd,disp16 pop addr(rd),@@rs -ldb addr(rd),imm8 ldrb disp16,rbs pop addr,@@rs -ldb addr(rd),rbs ldrb rbd,disp16 pop rd,@@rs -ldb addr,imm8 ldrl disp16,rrs popl @@rd,@@rs -ldb addr,rbs ldrl rrd,disp16 popl addr(rd),@@rs -ldb rbd,@@rs mbit popl addr,@@rs -ldb rbd,addr mreq rd popl rrd,@@rs -ldb rbd,addr(rs) mres push @@rd,@@rs -ldb rbd,imm8 mset push @@rd,addr -ldb rbd,rbs mult rrd,@@rs push @@rd,addr(rs) -ldb rbd,rs(imm16) mult rrd,addr push @@rd,imm16 -push @@rd,rs set addr,imm4 subl rrd,imm32 -pushl @@rd,@@rs set rd,imm4 subl rrd,rrs -pushl @@rd,addr set rd,rs tcc cc,rd -pushl @@rd,addr(rs) setb @@rd,imm4 tccb cc,rbd -pushl @@rd,rrs setb addr(rd),imm4 test @@rd -res @@rd,imm4 setb addr,imm4 test addr -res addr(rd),imm4 setb rbd,imm4 test addr(rd) -res addr,imm4 setb rbd,rs test rd -res rd,imm4 setflg imm4 testb @@rd -res rd,rs sinb rbd,imm16 testb addr -resb @@rd,imm4 sinb rd,imm16 testb addr(rd) -resb addr(rd),imm4 sind @@rd,@@rs,ra testb rbd -resb addr,imm4 sindb @@rd,@@rs,rba testl @@rd -resb rbd,imm4 sinib @@rd,@@rs,ra testl addr -resb rbd,rs sinibr @@rd,@@rs,ra testl addr(rd) -resflg imm4 sla rd,imm8 testl rrd -ret cc slab rbd,imm8 trdb @@rd,@@rs,rba -rl rd,imm1or2 slal rrd,imm8 trdrb @@rd,@@rs,rba -rlb rbd,imm1or2 sll rd,imm8 trib @@rd,@@rs,rbr -rlc rd,imm1or2 sllb rbd,imm8 trirb @@rd,@@rs,rbr -rlcb rbd,imm1or2 slll rrd,imm8 trtdrb @@ra,@@rb,rbr -rldb rbb,rba sout imm16,rs trtib @@ra,@@rb,rr -rr rd,imm1or2 soutb imm16,rbs trtirb @@ra,@@rb,rbr -rrb rbd,imm1or2 soutd @@rd,@@rs,ra trtrb @@ra,@@rb,rbr -rrc rd,imm1or2 soutdb @@rd,@@rs,rba tset @@rd -rrcb rbd,imm1or2 soutib @@rd,@@rs,ra tset addr -rrdb rbb,rba soutibr @@rd,@@rs,ra tset addr(rd) -rsvd36 sra rd,imm8 tset rd -rsvd38 srab rbd,imm8 tsetb @@rd -rsvd78 sral rrd,imm8 tsetb addr -rsvd7e srl rd,imm8 tsetb addr(rd) -rsvd9d srlb rbd,imm8 tsetb rbd -rsvd9f srll rrd,imm8 xor rd,@@rs -rsvdb9 sub rd,@@rs xor rd,addr -rsvdbf sub rd,addr xor rd,addr(rs) -sbc rd,rs sub rd,addr(rs) xor rd,imm16 -sbcb rbd,rbs sub rd,imm16 xor rd,rs -sc imm8 sub rd,rs xorb rbd,@@rs -sda rd,rs subb rbd,@@rs xorb rbd,addr -sdab rbd,rs subb rbd,addr xorb rbd,addr(rs) -sdal rrd,rs subb rbd,addr(rs) xorb rbd,imm8 -sdl rd,rs subb rbd,imm8 xorb rbd,rbs -sdlb rbd,rs subb rbd,rbs xorb rbd,rbs -sdll rrd,rs subl rrd,@@rs -set @@rd,imm4 subl rrd,addr -set addr(rd),imm4 subl rrd,addr(rs) -@end smallexample -@iftex -@endgroup -@end iftex -@end ifset - diff --git a/contrib/binutils/gas/doc/gasp.texi b/contrib/binutils/gas/doc/gasp.texi deleted file mode 100644 index 64cd6f44b17d..000000000000 --- a/contrib/binutils/gas/doc/gasp.texi +++ /dev/null @@ -1,1086 +0,0 @@ -\input texinfo @c -*- Texinfo -*- -@setfilename gasp.info -@c -@c This file documents the assembly preprocessor "GASP" -@c -@c Copyright (c) 1994 Free Software Foundation, Inc. -@c -@c This text may be freely distributed under the terms of the GNU -@c General Public License. - -@ifinfo -@format -START-INFO-DIR-ENTRY -* gasp: (gasp). The GNU Assembler Preprocessor -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@syncodeindex ky cp -@syncodeindex fn cp - -@finalout -@setchapternewpage odd -@settitle GASP -@titlepage -@c FIXME boring title -@title GASP, an assembly preprocessor -@subtitle for GASP version 1 -@sp 1 -@subtitle March 1994 -@author Roland Pesch -@page - -@tex -{\parskip=0pt \hfill Cygnus Support\par -} -@end tex - -@vskip 0pt plus 1filll -Copyright @copyright{} 1994, 1995 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions. -@end titlepage - -@ifinfo -Copyright @copyright{} 1994, 1995 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries a copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). -@end ignore - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions. - -@node Top -@top GASP - -GASP is a preprocessor for assembly programs. - -This file describes version 1 of GASP. - -Steve Chamberlain wrote GASP; Roland Pesch wrote this manual. - -@menu -* Overview:: What is GASP? -* Invoking GASP:: Command line options. -* Commands:: Preprocessor commands. -* Index:: Index. -@end menu -@end ifinfo - -@node Overview -@chapter What is GASP? - -The primary purpose of the @sc{gnu} assembler is to assemble the output of -other programs---notably compilers. When you have to hand-code -specialized routines in assembly, that means the @sc{gnu} assembler is -an unfriendly processor: it has no directives for macros, conditionals, -or many other conveniences that you might expect. - -In some cases you can simply use the C preprocessor, or a generalized -preprocessor like @sc{m4}; but this can be awkward, since none of these -things are designed with assembly in mind. - -@sc{gasp} fills this need. It is expressly designed to provide the -facilities you need with hand-coded assembly code. Implementing it as a -preprocessor, rather than part of the assembler, allows the maximum -flexibility: you can use it with hand-coded assembly, without paying a -penalty of added complexity in the assembler you use for compiler -output. - -Here is a small example to give the flavor of @sc{gasp}. This input to -@sc{gasp} - -@cartouche -@example - .MACRO saveregs from=8 to=14 -count .ASSIGNA \from - ! save r\from..r\to - .AWHILE \&count LE \to - mov r\&count,@@-sp -count .ASSIGNA \&count + 1 - .AENDW - .ENDM - - saveregs from=12 - -bar: mov #H'dead+10,r0 -foo .SDATAC "hello"<10> - .END -@end example -@end cartouche - -@noindent -generates this assembly program: - -@cartouche -@example - ! save r12..r14 - mov r12,@@-sp - mov r13,@@-sp - mov r14,@@-sp - -bar: mov #57005+10,r0 -foo: .byte 6,104,101,108,108,111,10 -@end example -@end cartouche - -@node Invoking GASP -@chapter Command Line Options - -@c FIXME! Or is there a simpler way, calling from GAS option? -The simplest way to use @sc{gasp} is to run it as a filter and assemble -its output. In Unix and its ilk, you can do this, for example: - -@c FIXME! GASP filename suffix convention? -@example -$ gasp prog.asm | as -o prog.o -@end example - -Naturally, there are also a few command-line options to allow you to -request variations on this basic theme. Here is the full set of -possibilities for the @sc{gasp} command line. - -@example -gasp [ -a | --alternate ] - [ -c @var{char} | --commentchar @var{char} ] - [ -d | --debug ] [ -h | --help ] [ -M | --mri ] - [ -o @var{outfile} | --output @var{outfile} ] - [ -p | --print ] [ -s | --copysource ] - [ -u | --unreasonable ] [ -v | --version ] - @var{infile} @dots{} -@end example - -@ftable @code -@item @var{infile} @dots{} -@c FIXME! Why not stdin as default infile? -The input file names. You must specify at least one input file; if you -specify more, @sc{gasp} preprocesses them all, concatenating the output -in the order you list the @var{infile} arguments. - -Mark the end of each input file with the preprocessor command -@code{.END}. @xref{Other Commands,, Miscellaneous commands}. - -@item -a -@itemx --alternate -Use alternative macro syntax. @xref{Alternate,, Alternate macro -syntax}, for a discussion of how this syntax differs from the default -@sc{gasp} syntax. - -@cindex comment character, changing -@cindex semicolon, as comment -@cindex exclamation mark, as comment -@cindex shriek, as comment -@cindex bang, as comment -@cindex @code{!} default comment char -@cindex @code{;} as comment char -@item -c '@var{char}' -@itemx --commentchar '@var{char}' -Use @var{char} as the comment character. The default comment character -is @samp{!}. For example, to use a semicolon as the comment character, -specify @w{@samp{-c ';'}} on the @sc{gasp} command line. Since -assembler command characters often have special significance to command -shells, it is a good idea to quote or escape @var{char} when you specify -a comment character. - -For the sake of simplicity, all examples in this manual use the default -comment character @samp{!}. - -@item -d -@itemx --debug -Show debugging statistics. In this version of @sc{gasp}, this option -produces statistics about the string buffers that @sc{gasp} allocates -internally. For each defined buffersize @var{s}, @sc{gasp} shows the -number of strings @var{n} that it allocated, with a line like this: - -@example -strings size @var{s} : @var{n} -@end example - -@noindent -@sc{gasp} displays these statistics on the standard error stream, when -done preprocessing. - -@item -h -@itemx --help -Display a summary of the @sc{gasp} command line options. - -@item -M -@itemx --mri -Use MRI compatibility mode. Using this option causes @sc{gasp} to -accept the syntax and pseudo-ops used by the Microtec Research -@code{ASM68K} assembler. - -@item -o @var{outfile} -@itemx --output @var{outfile} -Write the output in a file called @var{outfile}. If you do not use the -@samp{-o} option, @sc{gasp} writes its output on the standard output -stream. - -@item -p -@itemx --print -Print line numbers. @sc{gasp} obeys this option @emph{only} if you also -specify @samp{-s} to copy source lines to its output. With @samp{-s --p}, @sc{gasp} displays the line number of each source line copied -(immediately after the comment character at the beginning of the line). - -@item -s -@itemx --copysource -Copy the source lines to the output file. Use this option -to see the effect of each preprocessor line on the @sc{gasp} output. -@sc{gasp} places a comment character (@samp{!} by default) at -the beginning of each source line it copies, so that you can use this -option and still assemble the result. - -@item -u -@itemx --unreasonable -Bypass ``unreasonable expansion'' limit. Since you can define @sc{gasp} -macros inside other macro definitions, the preprocessor normally -includes a sanity check. If your program requires more than 1,000 -nested expansions, @sc{gasp} normally exits with an error message. Use -this option to turn off this check, allowing unlimited nested -expansions. - -@item -v -@itemx --version -Display the @sc{gasp} version number. -@end ftable - -@node Commands -@chapter Preprocessor Commands - -@sc{gasp} commands have a straightforward syntax that fits in well with -assembly conventions. In general, a command extends for a line, and may -have up to three fields: an optional label, the command itself, and -optional arguments to the command. You can write commands in upper or -lower case, though this manual shows them in upper case. @xref{Syntax -Details,, Details of the GASP syntax}, for more information. - -@menu -* Conditionals:: -* Loops:: -* Variables:: -* Macros:: -* Data:: -* Listings:: -* Other Commands:: -* Syntax Details:: -* Alternate:: -@end menu - -@node Conditionals -@section Conditional assembly - -The conditional-assembly directives allow you to include or exclude -portions of an assembly depending on how a pair of expressions, or a -pair of strings, compare. - -The overall structure of conditionals is familiar from many other -contexts. @code{.AIF} marks the start of a conditional, and precedes -assembly for the case when the condition is true. An optional -@code{.AELSE} precedes assembly for the converse case, and an -@code{.AENDI} marks the end of the condition. - -@c FIXME! Why doesn't -u turn off this check? -You may nest conditionals up to a depth of 100; @sc{gasp} rejects -nesting beyond that, because it may indicate a bug in your macro -structure. - -@c FIXME! Why isn't there something like cpp's -D option? Conditionals -@c would be much more useful if there were. -Conditionals are primarily useful inside macro definitions, where you -often need different effects depending on argument values. -@xref{Macros,, Defining your own directives}, for details about defining -macros. - -@ftable @code -@item .AIF @var{expra} @var{cmp} @var{exprb} -@itemx .AIF "@var{stra}" @var{cmp} "@var{strb}" - -The governing condition goes on the same line as the @code{.AIF} -preprocessor command. You may compare either two strings, or two -expressions. - -When you compare strings, only two conditional @var{cmp} comparison -operators are available: @samp{EQ} (true if @var{stra} and @var{strb} -are identical), and @samp{NE} (the opposite). - -When you compare two expressions, @emph{both expressions must be -absolute} (@pxref{Expressions,, Arithmetic expressions in GASP}). You -can use these @var{cmp} comparison operators with expressions: - -@ftable @code -@item EQ -Are @var{expra} and @var{exprb} equal? (For strings, are @var{stra} and -@var{strb} identical?) - -@item NE -Are @var{expra} and @var{exprb} different? (For strings, are @var{stra} -and @var{strb} different? - -@item LT -Is @var{expra} less than @var{exprb}? (Not allowed for strings.) - -@item LE -Is @var{expra} less than or equal to @var{exprb}? (Not allowed for strings.) - -@item GT -Is @var{expra} greater than @var{exprb}? (Not allowed for strings.) - -@item GE -Is @var{expra} greater than or equal to @var{exprb}? (Not allowed for -strings.) -@end ftable - -@item .AELSE -Marks the start of assembly code to be included if the condition fails. -Optional, and only allowed within a conditional (between @code{.AIF} and -@code{.AENDI}). - -@item .AENDI -Marks the end of a conditional assembly. -@end ftable - -@node Loops -@section Repetitive sections of assembly - -Two preprocessor directives allow you to repeatedly issue copies of the -same block of assembly code. - -@ftable @code -@item .AREPEAT @var{aexp} -@itemx .AENDR -If you simply need to repeat the same block of assembly over and over a -fixed number of times, sandwich one instance of the repeated block -between @code{.AREPEAT} and @code{.AENDR}. Specify the number of -copies as @var{aexp} (which must be an absolute expression). For -example, this repeats two assembly statements three times in succession: - -@cartouche -@example - .AREPEAT 3 - rotcl r2 - div1 r0,r1 - .AENDR -@end example -@end cartouche - -@item .AWHILE @var{expra} @var{cmp} @var{exprb} -@itemx .AENDW -@itemx .AWHILE @var{stra} @var{cmp} @var{strb} -@itemx .AENDW -To repeat a block of assembly depending on a conditional test, rather -than repeating it for a specific number of times, use @code{.AWHILE}. -@code{.AENDW} marks the end of the repeated block. The conditional -comparison works exactly the same way as for @code{.AIF}, with the same -comparison operators (@pxref{Conditionals,, Conditional assembly}). - -Since the terms of the comparison must be absolute expression, -@code{.AWHILE} is primarily useful within macros. @xref{Macros,, -Defining your own directives}. -@end ftable - -@cindex loops, breaking out of -@cindex breaking out of loops -You can use the @code{.EXITM} preprocessor directive to break out of -loops early (as well as to break out of macros). @xref{Macros,, -Defining your own directives}. - -@node Variables -@section Preprocessor variables - -You can use variables in @sc{gasp} to represent strings, registers, or -the results of expressions. - -You must distinguish two kinds of variables: -@enumerate -@item -Variables defined with @code{.EQU} or @code{.ASSIGN}. To evaluate this -kind of variable in your assembly output, simply mention its name. For -example, these two lines define and use a variable @samp{eg}: - -@cartouche -@example -eg .EQU FLIP-64 - @dots{} - mov.l eg,r0 -@end example -@end cartouche - -@emph{Do not use} this kind of variable in conditional expressions or -while loops; @sc{gasp} only evaluates these variables when writing -assembly output. - -@item -Variables for use during preprocessing. You can define these -with @code{.ASSIGNC} or @code{.ASSIGNA}. To evaluate this -kind of variable, write @samp{\&} before the variable name; for example, - -@cartouche -@example -opcit .ASSIGNA 47 - @dots{} - .AWHILE \&opcit GT 0 - @dots{} - .AENDW -@end example -@end cartouche - -@sc{gasp} treats macro arguments almost the same way, but to evaluate -them you use the prefix @samp{\} rather than @samp{\&}. -@xref{Macros,, Defining your own directives}. -@end enumerate - -@ftable @code -@item @var{pvar} .EQU @var{expr} -@c FIXME! Anything to beware of re GAS directive of same name? -Assign preprocessor variable @var{pvar} the value of the expression -@var{expr}. There are no restrictions on redefinition; use @samp{.EQU} -with the same @var{pvar} as often as you find it convenient. - -@item @var{pvar} .ASSIGN @var{expr} -Almost the same as @code{.EQU}, save that you may not redefine -@var{pvar} using @code{.ASSIGN} once it has a value. -@c FIXME!! Supposed to work this way, apparently, but on 9feb94 works -@c just like .EQU - -@item @var{pvar} .ASSIGNA @var{aexpr} -Define a variable with a numeric value, for use during preprocessing. -@var{aexpr} must be an absolute expression. You can redefine variables -with @code{.ASSIGNA} at any time. - -@item @var{pvar} .ASSIGNC "@var{str}" -Define a variable with a string value, for use during preprocessing. -You can redefine variables with @code{.ASSIGNC} at any time. - -@item @var{pvar} .REG (@var{register}) -Use @code{.REG} to define a variable that represents a register. In -particular, @var{register} is @emph{not evaluated} as an expression. -You may use @code{.REG} at will to redefine register variables. -@end ftable - -All these directives accept the variable name in the ``label'' position, -that is at the left margin. You may specify a colon after the variable -name if you wish; the first example above could have started @samp{eg:} -with the same effect. - -@c pagebreak makes for better aesthetics---ensures macro and expansion together -@page -@node Macros -@section Defining your own directives - -The commands @code{.MACRO} and @code{.ENDM} allow you to define macros -that generate assembly output. You can use these macros with a syntax -similar to built-in @sc{gasp} or assembler directives. For example, -this definition specifies a macro @code{SUM} that adds together a range of -consecutive registers: - -@cartouche -@example - .MACRO SUM FROM=0, TO=9 - ! \FROM \TO - mov r\FROM,r10 -COUNT .ASSIGNA \FROM+1 - .AWHILE \&COUNT LE \TO - add r\&COUNT,r10 -COUNT .ASSIGNA \&COUNT+1 - .AENDW - .ENDM -@end example -@end cartouche - -@noindent -With that definition, @samp{SUM 0,5} generates this assembly output: - -@cartouche -@example - ! 0 5 - mov r0,r10 - add r1,r10 - add r2,r10 - add r3,r10 - add r4,r10 - add r5,r10 -@end example -@end cartouche - -@ftable @code -@item .MACRO @var{macname} -@itemx .MACRO @var{macname} @var{macargs} @dots{} -Begin the definition of a macro called @var{macname}. If your macro -definition requires arguments, specify their names after the macro name, -separated by commas or spaces. You can supply a default value for any -macro argument by following the name with @samp{=@var{deflt}}. For -example, these are all valid @code{.MACRO} statements: - -@table @code -@item .MACRO COMM -Begin the definition of a macro called @code{COMM}, which takes no -arguments. - -@item .MACRO PLUS1 P, P1 -@itemx .MACRO PLUS1 P P1 -Either statement begins the definition of a macro called @code{PLUS1}, -which takes two arguments; within the macro definition, write -@samp{\P} or @samp{\P1} to evaluate the arguments. - -@item .MACRO RESERVE_STR P1=0 P2 -Begin the definition of a macro called @code{RESERVE_STR}, with two -arguments. The first argument has a default value, but not the second. -After the definition is complete, you can call the macro either as -@samp{RESERVE_STR @var{a},@var{b}} (with @samp{\P1} evaluating to -@var{a} and @samp{\P2} evaluating to @var{b}), or as @samp{RESERVE_STR -,@var{b}} (with @samp{\P1} evaluating as the default, in this case -@samp{0}, and @samp{\P2} evaluating to @var{b}). -@end table - -When you call a macro, you can specify the argument values either by -position, or by keyword. For example, @samp{SUM 9,17} is equivalent to -@samp{SUM TO=17, FROM=9}. Macro arguments are preprocessor variables -similar to the variables you define with @samp{.ASSIGNA} or -@samp{.ASSIGNC}; in particular, you can use them in conditionals or for -loop control. (The only difference is the prefix you write to evaluate -the variable: for a macro argument, write @samp{\@var{argname}}, but for -a preprocessor variable, write @samp{\&@var{varname}}.) - -@item @var{name} .MACRO -@itemx @var{name} .MACRO ( @var{macargs} @dots{} ) -@c FIXME check: I think no error _and_ no args recognized if I use form -@c NAME .MACRO ARG ARG -An alternative form of introducing a macro definition: specify the macro -name in the label position, and the arguments (if any) between -parentheses after the name. Defaulting rules and usage work the same -way as for the other macro definition syntax. - -@item .ENDM -Mark the end of a macro definition. - -@item .EXITM -Exit early from the current macro definition, @code{.AREPEAT} loop, or -@code{.AWHILE} loop. - -@cindex number of macros executed -@cindex macros, count executed -@item \@@ -@sc{gasp} maintains a counter of how many macros it has -executed in this pseudo-variable; you can copy that number to your -output with @samp{\@@}, but @emph{only within a macro definition}. - -@item LOCAL @var{name} [ , @dots{} ] -@emph{Warning: @code{LOCAL} is only available if you select ``alternate -macro syntax'' with @samp{-a} or @samp{--alternate}.} @xref{Alternate,, -Alternate macro syntax}. - -Generate a string replacement for each of the @var{name} arguments, and -replace any instances of @var{name} in each macro expansion. The -replacement string is unique in the assembly, and different for each -separate macro expansion. @code{LOCAL} allows you to write macros that -define symbols, without fear of conflict between separate macro expansions. -@end ftable - -@node Data -@section Data output - -In assembly code, you often need to specify working areas of memory; -depending on the application, you may want to initialize such memory or -not. @sc{gasp} provides preprocessor directives to help you avoid -repetitive coding for both purposes. - -You can use labels as usual to mark the data areas. - -@menu -* Initialized:: -* Uninitialized:: -@end menu - -@node Initialized -@subsection Initialized data - -These are the @sc{gasp} directives for initialized data, and the standard -@sc{gnu} assembler directives they expand to: - -@ftable @code -@item .DATA @var{expr}, @var{expr}, @dots{} -@itemx .DATA.B @var{expr}, @var{expr}, @dots{} -@itemx .DATA.W @var{expr}, @var{expr}, @dots{} -@itemx .DATA.L @var{expr}, @var{expr}, @dots{} -Evaluate arithmetic expressions @var{expr}, and emit the corresponding -@code{as} directive (labelled with @var{lab}). The unqualified -@code{.DATA} emits @samp{.long}; @code{.DATA.B} emits @samp{.byte}; -@code{.DATA.W} emits @samp{.short}; and @code{.DATA.L} emits -@samp{.long}. - -For example, @samp{foo .DATA 1,2,3} emits @samp{foo: .long 1,2,3}. - -@item .DATAB @var{repeat}, @var{expr} -@itemx .DATAB.B @var{repeat}, @var{expr} -@itemx .DATAB.W @var{repeat}, @var{expr} -@itemx .DATAB.L @var{repeat}, @var{expr} -@c FIXME! Looks like gasp accepts and ignores args after 2nd. -Make @code{as} emit @var{repeat} copies of the value of the expression -@var{expr} (using the @code{as} directive @code{.fill}). -@samp{.DATAB.B} repeats one-byte values; @samp{.DATAB.W} repeats -two-byte values; and @samp{.DATAB.L} repeats four-byte values. -@samp{.DATAB} without a suffix repeats four-byte values, just like -@samp{.DATAB.L}. - -@c FIXME! Allowing zero might be useful for edge conditions in macros. -@var{repeat} must be an absolute expression with a positive value. - -@item .SDATA "@var{str}" @dots{} -String data. Emits a concatenation of bytes, precisely as you specify -them (in particular, @emph{nothing is added to mark the end} of the -string). @xref{Constants,, String and numeric constants}, for details -about how to write strings. @code{.SDATA} concatenates multiple -arguments, making it easy to switch between string representations. You -can use commas to separate the individual arguments for clarity, if you -choose. - -@item .SDATAB @var{repeat}, "@var{str}" @dots{} -Repeated string data. The first argument specifies how many copies of -the string to emit; the remaining arguments specify the string, in the -same way as the arguments to @code{.SDATA}. - -@item .SDATAZ "@var{str}" @dots{} -Zero-terminated string data. Just like @code{.SDATA}, except that -@code{.SDATAZ} writes a zero byte at the end of the string. - -@item .SDATAC "@var{str}" @dots{} -Count-prefixed string data. Just like @code{.SDATA}, except that -@sc{gasp} precedes the string with a leading one-byte count. For -example, @samp{.SDATAC "HI"} generates @samp{.byte 2,72,73}. Since the -count field is only one byte, you can only use @code{.SDATAC} for -strings less than 256 bytes in length. -@end ftable - -@node Uninitialized -@subsection Uninitialized data - -@c FIXME! .space different on some platforms, notably HPPA. Config? -Use the @code{.RES}, @code{.SRES}, @code{.SRESC}, and @code{.SRESZ} -directives to reserve memory and leave it uninitialized. @sc{gasp} -resolves these directives to appropriate calls of the @sc{gnu} -@code{as} @code{.space} directive. - -@ftable @code -@item .RES @var{count} -@itemx .RES.B @var{count} -@itemx .RES.W @var{count} -@itemx .RES.L @var{count} -Reserve room for @var{count} uninitialized elements of data. The -suffix specifies the size of each element: @code{.RES.B} reserves -@var{count} bytes, @code{.RES.W} reserves @var{count} pairs of bytes, -and @code{.RES.L} reserves @var{count} quartets. @code{.RES} without a -suffix is equivalent to @code{.RES.L}. - -@item .SRES @var{count} -@itemx .SRES.B @var{count} -@itemx .SRES.W @var{count} -@itemx .SRES.L @var{count} -@c FIXME! This is boring. Shouldn't it at least have a different -@c default size? (e.g. the "S" suggests "string", for which .B -@c would be more appropriate) -@code{.SRES} is a synonym for @samp{.RES}. - -@item .SRESC @var{count} -@itemx .SRESC.B @var{count} -@itemx .SRESC.W @var{count} -@itemx .SRESC.L @var{count} -Like @code{.SRES}, but reserves space for @code{@var{count}+1} elements. - -@item .SRESZ @var{count} -@itemx .SRESZ.B @var{count} -@itemx .SRESZ.W @var{count} -@itemx .SRESZ.L @var{count} -Like @code{.SRES}, but reserves space for @code{@var{count}+1} elements. -@end ftable - -@node Listings -@section Assembly listing control - -The @sc{gasp} listing-control directives correspond to -related @sc{gnu} @code{as} directives. - -@ftable @code -@item .PRINT LIST -@itemx .PRINT NOLIST -Print control. This directive emits the @sc{gnu} @code{as} directive -@code{.list} or @code{.nolist}, according to its argument. @xref{List,, -@code{.list}, as.info, Using as}, for details on how these directives -interact. - -@item .FORM LIN=@var{ln} -@itemx .FORM COL=@var{cols} -@itemx .FORM LIN=@var{ln} COL=@var{cols} -Specify the page size for assembly listings: @var{ln} represents the -number of lines, and @var{cols} the number of columns. You may specify -either page dimension independently, or both together. If you do not -specify the number of lines, @sc{gasp} assumes 60 lines; if you do not -specify the number of columns, @sc{gasp} assumes 132 columns. -(Any values you may have specified in previous instances of @code{.FORM} -do @emph{not} carry over as defaults.) Emits the @code{.psize} -assembler directive. - -@item .HEADING @var{string} -Specify @var{string} as the title of your assembly listings. Emits -@samp{.title "@var{string}"}. - -@item .PAGE -Force a new page in assembly listings. Emits @samp{.eject}. -@end ftable - -@node Other Commands -@section Miscellaneous commands - -@ftable @code -@item .ALTERNATE -Use the alternate macro syntax henceforth in the assembly. -@xref{Alternate,, Alternate macro syntax}. - -@item .ORG -@c FIXME! This is very strange, since _GAS_ understands .org -This command is recognized, but not yet implemented. @sc{gasp} -generates an error message for programs that use @code{.ORG}. - -@item .RADIX @var{s} -@c FIXME no test cases in testsuite/gasp -@sc{gasp} understands numbers in any of base two, eight, ten, or -sixteen. You can encode the base explicitly in any numeric constant -(@pxref{Constants,, String and numeric constants}). If you write -numbers without an explicit indication of the base, the most recent -@samp{.RADIX @var{s}} command determines how they are interpreted. -@var{s} is a single letter, one of the following: - -@table @code -@item .RADIX B -Base 2. - -@item .RADIX Q -Base 8. - -@item .RADIX D -Base 10. This is the original default radix. - -@item .RADIX H -Base 16. -@end table - -You may specify the argument @var{s} in lower case (any of @samp{bqdh}) -with the same effects. - -@item .EXPORT @var{name} -@itemx .GLOBAL @var{name} -@c FIXME! No test cases in testsuite/gasp -Declare @var{name} global (emits @samp{.global @var{name}}). The two -directives are synonymous. - -@item .PROGRAM -No effect: @sc{gasp} accepts this directive, and silently ignores it. - -@item .END -Mark end of each preprocessor file. @sc{gasp} issues a warning if it -reaches end of file without seeing this command. - -@item .INCLUDE "@var{str}" -Preprocess the file named by @var{str}, as if its contents appeared -where the @code{.INCLUDE} directive does. @sc{gasp} imposes a maximum -limit of 30 stacked include files, as a sanity check. -@c FIXME! Why is include depth not affected by -u? - -@item .ALIGN @var{size} -@c FIXME! Why is this not utterly pointless? -Evaluate the absolute expression @var{size}, and emit the assembly -instruction @samp{.align @var{size}} using the result. -@end ftable - -@node Syntax Details -@section Details of the GASP syntax - -Since @sc{gasp} is meant to work with assembly code, its statement -syntax has no surprises for the assembly programmer. - -@cindex whitespace -@emph{Whitespace} (blanks or tabs; @emph{not} newline) is partially -significant, in that it delimits up to three fields in a line. The -amount of whitespace does not matter; you may line up fields in separate -lines if you wish, but @sc{gasp} does not require that. - -@cindex fields of @sc{gasp} source line -@cindex label field -The @emph{first field}, an optional @dfn{label}, must be flush left in a -line (with no leading whitespace) if it appears at all. You may use a -colon after the label if you wish; @sc{gasp} neither requires the colon -nor objects to it (but will not include it as part of the label name). - -@cindex directive field -The @emph{second field}, which must appear after some whitespace, -contains a @sc{gasp} or assembly @dfn{directive}. - -@cindex argument fields -Any @emph{further fields} on a line are @dfn{arguments} to the -directive; you can separate them from one another using either commas or -whitespace. - -@menu -* Markers:: -* Constants:: -* Symbols:: -* Expressions:: -* String Builtins:: -@end menu - -@node Markers -@subsection Special syntactic markers - -@sc{gasp} recognizes a few special markers: to delimit comments, to -continue a statement on the next line, to separate symbols from other -characters, and to copy text to the output literally. (One other -special marker, @samp{\@@}, works only within macro definitions; -@pxref{Macros,, Defining your own directives}.) - -@cindex comments -The trailing part of any @sc{gasp} source line may be a @dfn{comment}. -A comment begins with the first unquoted comment character (@samp{!} by -default), or an escaped or doubled comment character (@samp{\!} or -@samp{!!} by default), and extends to the end of a line. You can -specify what comment character to use with the @samp{-c} option -(@pxref{Invoking GASP,, Command Line Options}). The two kinds of -comment markers lead to slightly different treatment: - -@table @code -@item ! -A single, un-escaped comment character generates an assembly comment in -the @sc{gasp} output. @sc{gasp} evaluates any preprocessor variables -(macro arguments, or variables defined with @code{.ASSIGNA} or -@code{.ASSIGNC}) present. For example, a macro that begins like this - -@example - .MACRO SUM FROM=0, TO=9 - ! \FROM \TO -@end example - -@noindent -issues as the first line of output a comment that records the -values you used to call the macro. - -@c comments, preprocessor-only -@c preprocessor-only comments -@c GASP-only comments -@item \! -@itemx !! -Either an escaped comment character, or a double comment character, -marks a @sc{gasp} source comment. @sc{gasp} does not copy such comments -to the assembly output. -@end table - -@cindex continuation character -@kindex + -To @emph{continue a statement} on the next line of the file, begin the -second line with the character @samp{+}. - -@cindex literal copy to output -@cindex copying literally to output -@cindex preprocessing, avoiding -@cindex avoiding preprocessing -Occasionally you may want to prevent @sc{gasp} from preprocessing some -particular bit of text. To @emph{copy literally} from the @sc{gasp} -source to its output, place @samp{\(} before the string to copy, and -@samp{)} at the end. For example, write @samp{\(\!)} if you need the -characters @samp{\!} in your assembly output. - -@cindex symbol separator -@cindex text, separating from symbols -@cindex symbols, separating from text -To @emph{separate a preprocessor variable} from text to appear -immediately after its value, write a single quote (@code{'}). For -example, @samp{.SDATA "\P'1"} writes a string built by concatenating the -value of @code{P} and the digit @samp{1}. (You cannot achieve this by -writing just @samp{\P1}, since @samp{P1} is itself a valid name for a -preprocessor variable.) - -@node Constants -@subsection String and numeric constants - -There are two ways of writing @dfn{string constants} in @sc{gasp}: as -literal text, and by numeric byte value. Specify a string literal -between double quotes (@code{"@var{str}"}). Specify an individual -numeric byte value as an absolute expression between angle brackets -(@code{<@var{expr}>}. Directives that output strings allow you to -specify any number of either kind of value, in whatever order is -convenient, and concatenate the result. (Alternate syntax mode -introduces a number of alternative string notations; @pxref{Alternate,, -Alternate macro syntax}.) - -@c Details of numeric notation, e.g. base prefixes -You can write @dfn{numeric constants} either in a specific base, or in -whatever base is currently selected (either 10, or selected by the most -recent @code{.RADIX}). - -To write a number in a @emph{specific base}, use the pattern -@code{@var{s}'@var{ddd}}: a base specifier character @var{s}, followed -by a single quote followed by digits @var{ddd}. The base specifier -character matches those you can specify with @code{.RADIX}: @samp{B} for -base 2, @samp{Q} for base 8, @samp{D} for base 10, and @samp{H} for base -16. (You can write this character in lower case if you prefer.) - -@c FIXME! What are rules for recognizing number in deflt base? Whatever -@c is left over after parsing other things?? - -@node Symbols -@subsection Symbols - -@sc{gasp} recognizes symbol names that start with any alphabetic character, -@samp{_}, or @samp{$}, and continue with any of the same characters or -with digits. Label names follow the same rules. - -@node Expressions -@subsection Arithmetic expressions in GASP - -@cindex absolute expressions -@cindex relocatable expressions -There are two kinds of expressions, depending on their result: -@dfn{absolute} expressions, which resolve to a constant (that is, they -do not involve any values unknown to @sc{gasp}), and @dfn{relocatable} -expressions, which must reduce to the form - -@example -@var{addsym}+@var{const}-@var{subsym} -@end example - -@noindent -where @var{addsym} and @var{subsym} are assembly symbols of unknown -value, and @var{const} is a constant. - -Arithmetic for @sc{gasp} expressions follows very similar rules to C. -You can use parentheses to change precedence; otherwise, arithmetic -primitives have decreasing precedence in the order of the following -list. - -@enumerate -@item -Single-argument @code{+} (identity), @code{-} (arithmetic opposite), or -@code{~} (bitwise negation). @emph{The argument must be an absolute -expression.} - -@item -@code{*} (multiplication) and @code{/} (division). @emph{Both arguments -must be absolute expressions.} - -@item -@code{+} (addition) and @code{-} (subtraction). @emph{At least one argument -must be absolute.} -@c FIXME! Actually, subtraction doesn't check for this. - -@item -@code{&} (bitwise and). @emph{Both arguments must be absolute.} - -@item -@c FIXME! I agree ~ is a better notation than ^ for xor, but is the -@c improvement worth differing from C? -@code{|} (bitwise or) and @code{~} (bitwise exclusive or; @code{^} in -C). @emph{Both arguments must be absolute.} -@end enumerate - -@node String Builtins -@subsection String primitives - -You can use these primitives to manipulate strings (in the argument -field of @sc{gasp} statements): - -@ftable @code -@item .LEN("@var{str}") -Calculate the length of string @code{"@var{str}"}, as an absolute -expression. For example, @samp{.RES.B .LEN("sample")} reserves six -bytes of memory. - -@item .INSTR("@var{string}", "@var{seg}", @var{ix}) -Search for the first occurrence of @var{seg} after position @var{ix} of -@var{string}. For example, @samp{.INSTR("ABCDEFG", "CDE", 0)} evaluates -to the absolute result @code{2}. - -The result is @code{-1} if @var{seg} does not occur in @var{string} -after position @var{ix}. - -@item .SUBSTR("@var{string}",@var{start},@var{len}) -The substring of @var{string} beginning at byte number @var{start} and -extending for @var{len} bytes. -@end ftable - -@node Alternate -@section Alternate macro syntax - -If you specify @samp{-a} or @samp{--alternate} on the @sc{gasp} command -line, the preprocessor uses somewhat different syntax. This syntax is -reminiscent of the syntax of Phar Lap macro assembler, but it -is @emph{not} meant to be a full emulation of Phar Lap or similar -assemblers. In particular, @sc{gasp} does not support directives such -as @code{DB} and @code{IRP}, even in alternate syntax mode. - -In particular, @samp{-a} (or @samp{--alternate}) elicits these -differences: - -@table @emph -@item Preprocessor directives -You can use @sc{gasp} preprocessor directives without a leading @samp{.} -dot. For example, you can write @samp{SDATA} with the same effect as -@samp{.SDATA}. - -@item LOCAL -One additional directive, @code{LOCAL}, is available. @xref{Macros,, -Defining your own directives}, for an explanation of how to use -@code{LOCAL}. - -@need 2000 -@item String delimiters -You can write strings delimited in these other ways besides -@code{"@var{string}"}: - -@table @code -@item '@var{string}' -You can delimit strings with single-quote charaters. - -@item <@var{string}> -You can delimit strings with matching angle brackets. -@end table - -@item single-character string escape -To include any single character literally in a string (even if the -character would otherwise have some special meaning), you can prefix the -character with @samp{!} (an exclamation mark). For example, you can -write @samp{<4.3 !> 5.4!!>} to get the literal text @samp{4.3 > 5.4!}. - -@item Expression results as strings -You can write @samp{%@var{expr}} to evaluate the expression @var{expr} -and use the result as a string. -@end table - -@node Index -@unnumbered Index - -@printindex cp - -@contents -@bye diff --git a/contrib/binutils/gas/doc/h8.texi b/contrib/binutils/gas/doc/h8.texi deleted file mode 100644 index 0df17144bfc3..000000000000 --- a/contrib/binutils/gas/doc/h8.texi +++ /dev/null @@ -1,26 +0,0 @@ -@clear ALL-ARCH -@clear GENERIC -@clear INTERNALS -@clear MULTI-OBJ -@clear AOUT -@clear BOUT -@set COFF -@clear ELF -@set Hitachi-all -@set H8/300 -@set H8/500 -@set SH -@clear DIFF-TBL-KLUGE -@set IEEEFLOAT -@clear W32 -@set W16 -@set SPECIAL-SYMS -@set AS as -@set GCC gcc -@set LD ld -@set TARGET H8/300 and H8/500 -@set TARGET H8/300, H8/500, and Hitachi SH -@set OBJ-NAME COFF -@c -@clear have-stabs -@set abnormal-separator diff --git a/contrib/binutils/gas/doc/internals.texi b/contrib/binutils/gas/doc/internals.texi deleted file mode 100644 index eb9f44b87113..000000000000 --- a/contrib/binutils/gas/doc/internals.texi +++ /dev/null @@ -1,1547 +0,0 @@ -\input texinfo -@setfilename internals.info -@node Top -@top Assembler Internals -@raisesections -@cindex internals - -This chapter describes the internals of the assembler. It is incomplete, but -it may help a bit. - -This chapter was last modified on $Date: 1998/02/06 03:42:57 $. It is not updated regularly, and it -may be out of date. - -@menu -* GAS versions:: GAS versions -* Data types:: Data types -* GAS processing:: What GAS does when it runs -* Porting GAS:: Porting GAS -* Relaxation:: Relaxation -* Broken words:: Broken words -* Internal functions:: Internal functions -* Test suite:: Test suite -@end menu - -@node GAS versions -@section GAS versions - -GAS has acquired layers of code over time. The original GAS only supported the -a.out object file format, with three sections. Support for multiple sections -has been added in two different ways. - -The preferred approach is to use the version of GAS created when the symbol -@code{BFD_ASSEMBLER} is defined. The other versions of GAS are documented for -historical purposes, and to help anybody who has to debug code written for -them. - -The type @code{segT} is used to represent a section in code which must work -with all versions of GAS. - -@menu -* Original GAS:: Original GAS version -* MANY_SEGMENTS:: MANY_SEGMENTS gas version -* BFD_ASSEMBLER:: BFD_ASSEMBLER gas version -@end menu - -@node Original GAS -@subsection Original GAS - -The original GAS only supported the a.out object file format with three -sections: @samp{.text}, @samp{.data}, and @samp{.bss}. This is the version of -GAS that is compiled if neither @code{BFD_ASSEMBLER} nor @code{MANY_SEGMENTS} -is defined. This version of GAS is still used for the m68k-aout target, and -perhaps others. - -This version of GAS should not be used for any new development. - -There is still code that is specific to this version of GAS, notably in -@file{write.c}. There is no way for this code to loop through all the -sections; it simply looks at global variables like @code{text_frag_root} and -@code{data_frag_root}. - -The type @code{segT} is an enum. - -@node MANY_SEGMENTS -@subsection MANY_SEGMENTS gas version -@cindex MANY_SEGMENTS - -The @code{MANY_SEGMENTS} version of gas is only used for COFF. It uses the BFD -library, but it writes out all the data itself using @code{bfd_write}. This -version of gas supports up to 40 normal sections. The section names are stored -in the @code{seg_name} array. Other information is stored in the -@code{segment_info} array. - -The type @code{segT} is an enum. Code that wants to examine all the sections -can use a @code{segT} variable as loop index from @code{SEG_E0} up to but not -including @code{SEG_UNKNOWN}. - -Most of the code specific to this version of GAS is in the file -@file{config/obj-coff.c}, in the portion of that file that is compiled when -@code{BFD_ASSEMBLER} is not defined. - -This version of GAS is still used for several COFF targets. - -@node BFD_ASSEMBLER -@subsection BFD_ASSEMBLER gas version -@cindex BFD_ASSEMBLER - -The preferred version of GAS is the @code{BFD_ASSEMBLER} version. In this -version of GAS, the output file is a normal BFD, and the BFD routines are used -to generate the output. - -@code{BFD_ASSEMBLER} will automatically be used for certain targets, including -those that use the ELF, ECOFF, and SOM object file formats, and also all Alpha, -MIPS, PowerPC, and SPARC targets. You can force the use of -@code{BFD_ASSEMBLER} for other targets with the configure option -@samp{--enable-bfd-assembler}; however, it has not been tested for many -targets, and can not be assumed to work. - -@node Data types -@section Data types -@cindex internals, data types - -This section describes some fundamental GAS data types. - -@menu -* Symbols:: The symbolS structure -* Expressions:: The expressionS structure -* Fixups:: The fixS structure -* Frags:: The fragS structure -@end menu - -@node Symbols -@subsection Symbols -@cindex internals, symbols -@cindex symbols, internal -@cindex symbolS structure - -The definition for @code{struct symbol}, also known as @code{symbolS}, is -located in @file{struc-symbol.h}. Symbol structures contain the following -fields: - -@table @code -@item sy_value -This is an @code{expressionS} that describes the value of the symbol. It might -refer to one or more other symbols; if so, its true value may not be known -until @code{resolve_symbol_value} is called in @code{write_object_file}. - -The expression is often simply a constant. Before @code{resolve_symbol_value} -is called, the value is the offset from the frag (@pxref{Frags}). Afterward, -the frag address has been added in. - -@item sy_resolved -This field is non-zero if the symbol's value has been completely resolved. It -is used during the final pass over the symbol table. - -@item sy_resolving -This field is used to detect loops while resolving the symbol's value. - -@item sy_used_in_reloc -This field is non-zero if the symbol is used by a relocation entry. If a local -symbol is used in a relocation entry, it must be possible to redirect those -relocations to other symbols, or this symbol cannot be removed from the final -symbol list. - -@item sy_next -@itemx sy_previous -These pointers to other @code{symbolS} structures describe a singly or doubly -linked list. (If @code{SYMBOLS_NEED_BACKPOINTERS} is not defined, the -@code{sy_previous} field will be omitted; @code{SYMBOLS_NEED_BACKPOINTERS} is -always defined if @code{BFD_ASSEMBLER}.) These fields should be accessed with -the @code{symbol_next} and @code{symbol_previous} macros. - -@item sy_frag -This points to the frag (@pxref{Frags}) that this symbol is attached to. - -@item sy_used -Whether the symbol is used as an operand or in an expression. Note: Not all of -the backends keep this information accurate; backends which use this bit are -responsible for setting it when a symbol is used in backend routines. - -@item sy_mri_common -Whether the symbol is an MRI common symbol created by the @code{COMMON} -pseudo-op when assembling in MRI mode. - -@item bsym -If @code{BFD_ASSEMBLER} is defined, this points to the BFD @code{asymbol} that -will be used in writing the object file. - -@item sy_name_offset -(Only used if @code{BFD_ASSEMBLER} is not defined.) This is the position of -the symbol's name in the string table of the object file. On some formats, -this will start at position 4, with position 0 reserved for unnamed symbols. -This field is not used until @code{write_object_file} is called. - -@item sy_symbol -(Only used if @code{BFD_ASSEMBLER} is not defined.) This is the -format-specific symbol structure, as it would be written into the object file. - -@item sy_number -(Only used if @code{BFD_ASSEMBLER} is not defined.) This is a 24-bit symbol -number, for use in constructing relocation table entries. - -@item sy_obj -This format-specific data is of type @code{OBJ_SYMFIELD_TYPE}. If no macro by -that name is defined in @file{obj-format.h}, this field is not defined. - -@item sy_tc -This processor-specific data is of type @code{TC_SYMFIELD_TYPE}. If no macro -by that name is defined in @file{targ-cpu.h}, this field is not defined. - -@item TARGET_SYMBOL_FIELDS -If this macro is defined, it defines additional fields in the symbol structure. -This macro is obsolete, and should be replaced when possible by uses of -@code{OBJ_SYMFIELD_TYPE} and @code{TC_SYMFIELD_TYPE}. -@end table - -There are a number of access routines used to extract the fields of a -@code{symbolS} structure. When possible, these routines should be used rather -than referring to the fields directly. These routines will work for any GAS -version. - -@table @code -@item S_SET_VALUE -@cindex S_SET_VALUE -Set the symbol's value. - -@item S_GET_VALUE -@cindex S_GET_VALUE -Get the symbol's value. This will cause @code{resolve_symbol_value} to be -called if necessary, so @code{S_GET_VALUE} should only be called when it is -safe to resolve symbols (i.e., after the entire input file has been read and -all symbols have been defined). - -@item S_SET_SEGMENT -@cindex S_SET_SEGMENT -Set the section of the symbol. - -@item S_GET_SEGMENT -@cindex S_GET_SEGMENT -Get the symbol's section. - -@item S_GET_NAME -@cindex S_GET_NAME -Get the name of the symbol. - -@item S_SET_NAME -@cindex S_SET_NAME -Set the name of the symbol. - -@item S_IS_EXTERNAL -@cindex S_IS_EXTERNAL -Return non-zero if the symbol is externally visible. - -@item S_IS_EXTERN -@cindex S_IS_EXTERN -A synonym for @code{S_IS_EXTERNAL}. Don't use it. - -@item S_IS_WEAK -@cindex S_IS_WEAK -Return non-zero if the symbol is weak. - -@item S_IS_COMMON -@cindex S_IS_COMMON -Return non-zero if this is a common symbol. Common symbols are sometimes -represented as undefined symbols with a value, in which case this function will -not be reliable. - -@item S_IS_DEFINED -@cindex S_IS_DEFINED -Return non-zero if this symbol is defined. This function is not reliable when -called on a common symbol. - -@item S_IS_DEBUG -@cindex S_IS_DEBUG -Return non-zero if this is a debugging symbol. - -@item S_IS_LOCAL -@cindex S_IS_LOCAL -Return non-zero if this is a local assembler symbol which should not be -included in the final symbol table. Note that this is not the opposite of -@code{S_IS_EXTERNAL}. The @samp{-L} assembler option affects the return value -of this function. - -@item S_SET_EXTERNAL -@cindex S_SET_EXTERNAL -Mark the symbol as externally visible. - -@item S_CLEAR_EXTERNAL -@cindex S_CLEAR_EXTERNAL -Mark the symbol as not externally visible. - -@item S_SET_WEAK -@cindex S_SET_WEAK -Mark the symbol as weak. - -@item S_GET_TYPE -@item S_GET_DESC -@item S_GET_OTHER -@cindex S_GET_TYPE -@cindex S_GET_DESC -@cindex S_GET_OTHER -Get the @code{type}, @code{desc}, and @code{other} fields of the symbol. These -are only defined for object file formats for which they make sense (primarily -a.out). - -@item S_SET_TYPE -@item S_SET_DESC -@item S_SET_OTHER -@cindex S_SET_TYPE -@cindex S_SET_DESC -@cindex S_SET_OTHER -Set the @code{type}, @code{desc}, and @code{other} fields of the symbol. These -are only defined for object file formats for which they make sense (primarily -a.out). - -@item S_GET_SIZE -@cindex S_GET_SIZE -Get the size of a symbol. This is only defined for object file formats for -which it makes sense (primarily ELF). - -@item S_SET_SIZE -@cindex S_SET_SIZE -Set the size of a symbol. This is only defined for object file formats for -which it makes sense (primarily ELF). -@end table - -@node Expressions -@subsection Expressions -@cindex internals, expressions -@cindex expressions, internal -@cindex expressionS structure - -Expressions are stored in an @code{expressionS} structure. The structure is -defined in @file{expr.h}. - -@cindex expression -The macro @code{expression} will create an @code{expressionS} structure based -on the text found at the global variable @code{input_line_pointer}. - -@cindex make_expr_symbol -@cindex expr_symbol_where -A single @code{expressionS} structure can represent a single operation. -Complex expressions are formed by creating @dfn{expression symbols} and -combining them in @code{expressionS} structures. An expression symbol is -created by calling @code{make_expr_symbol}. An expression symbol should -naturally never appear in a symbol table, and the implementation of -@code{S_IS_LOCAL} (@pxref{Symbols}) reflects that. The function -@code{expr_symbol_where} returns non-zero if a symbol is an expression symbol, -and also returns the file and line for the expression which caused it to be -created. - -The @code{expressionS} structure has two symbol fields, a number field, an -operator field, and a field indicating whether the number is unsigned. - -The operator field is of type @code{operatorT}, and describes how to interpret -the other fields; see the definition in @file{expr.h} for the possibilities. - -An @code{operatorT} value of @code{O_big} indicates either a floating point -number, stored in the global variable @code{generic_floating_point_number}, or -an integer to large to store in an @code{offsetT} type, stored in the global -array @code{generic_bignum}. This rather inflexible approach makes it -impossible to use floating point numbers or large expressions in complex -expressions. - -@node Fixups -@subsection Fixups -@cindex internals, fixups -@cindex fixups -@cindex fixS structure - -A @dfn{fixup} is basically anything which can not be resolved in the first -pass. Sometimes a fixup can be resolved by the end of the assembly; if not, -the fixup becomes a relocation entry in the object file. - -@cindex fix_new -@cindex fix_new_exp -A fixup is created by a call to @code{fix_new} or @code{fix_new_exp}. Both -take a frag (@pxref{Frags}), a position within the frag, a size, an indication -of whether the fixup is PC relative, and a type. In a @code{BFD_ASSEMBLER} -GAS, the type is nominally a @code{bfd_reloc_code_real_type}, but several -targets use other type codes to represent fixups that can not be described as -relocations. - -The @code{fixS} structure has a number of fields, several of which are obsolete -or are only used by a particular target. The important fields are: - -@table @code -@item fx_frag -The frag (@pxref{Frags}) this fixup is in. - -@item fx_where -The location within the frag where the fixup occurs. - -@item fx_addsy -The symbol this fixup is against. Typically, the value of this symbol is added -into the object contents. This may be NULL. - -@item fx_subsy -The value of this symbol is subtracted from the object contents. This is -normally NULL. - -@item fx_offset -A number which is added into the fixup. - -@item fx_addnumber -Some CPU backends use this field to convey information between -@code{md_apply_fix} and @code{tc_gen_reloc}. The machine independent code does -not use it. - -@item fx_next -The next fixup in the section. - -@item fx_r_type -The type of the fixup. This field is only defined if @code{BFD_ASSEMBLER}, or -if the target defines @code{NEED_FX_R_TYPE}. - -@item fx_size -The size of the fixup. This is mostly used for error checking. - -@item fx_pcrel -Whether the fixup is PC relative. - -@item fx_done -Non-zero if the fixup has been applied, and no relocation entry needs to be -generated. - -@item fx_file -@itemx fx_line -The file and line where the fixup was created. - -@item tc_fix_data -This has the type @code{TC_FIX_TYPE}, and is only defined if the target defines -that macro. -@end table - -@node Frags -@subsection Frags -@cindex internals, frags -@cindex frags -@cindex fragS structure. - -The @code{fragS} structure is defined in @file{as.h}. Each frag represents a -portion of the final object file. As GAS reads the source file, it creates -frags to hold the data that it reads. At the end of the assembly the frags and -fixups are processed to produce the final contents. - -@table @code -@item fr_address -The address of the frag. This is not set until the assembler rescans the list -of all frags after the entire input file is parsed. The function -@code{relax_segment} fills in this field. - -@item fr_next -Pointer to the next frag in this (sub)section. - -@item fr_fix -Fixed number of characters we know we're going to emit to the output file. May -be zero. - -@item fr_var -Variable number of characters we may output, after the initial @code{fr_fix} -characters. May be zero. - -@item fr_offset -The interpretation of this field is controlled by @code{fr_type}. Generally, -if @code{fr_var} is non-zero, this is a repeat count: the @code{fr_var} -characters are output @code{fr_offset} times. - -@item line -Holds line number info when an assembler listing was requested. - -@item fr_type -Relaxation state. This field indicates the interpretation of @code{fr_offset}, -@code{fr_symbol} and the variable-length tail of the frag, as well as the -treatment it gets in various phases of processing. It does not affect the -initial @code{fr_fix} characters; they are always supposed to be output -verbatim (fixups aside). See below for specific values this field can have. - -@item fr_subtype -Relaxation substate. If the macro @code{md_relax_frag} isn't defined, this is -assumed to be an index into @code{TC_GENERIC_RELAX_TABLE} for the generic -relaxation code to process (@pxref{Relaxation}). If @code{md_relax_frag} is -defined, this field is available for any use by the CPU-specific code. - -@item fr_symbol -This normally indicates the symbol to use when relaxing the frag according to -@code{fr_type}. - -@item fr_opcode -Points to the lowest-addressed byte of the opcode, for use in relaxation. - -@item tc_frag_data -Target specific fragment data of type TC_FRAG_TYPE. -Only present if @code{TC_FRAG_TYPE} is defined. - -@item fr_file -@itemx fr_line -The file and line where this frag was last modified. - -@item fr_literal -Declared as a one-character array, this last field grows arbitrarily large to -hold the actual contents of the frag. -@end table - -These are the possible relaxation states, provided in the enumeration type -@code{relax_stateT}, and the interpretations they represent for the other -fields: - -@table @code -@item rs_align -@itemx rs_align_code -The start of the following frag should be aligned on some boundary. In this -frag, @code{fr_offset} is the logarithm (base 2) of the alignment in bytes. -(For example, if alignment on an 8-byte boundary were desired, @code{fr_offset} -would have a value of 3.) The variable characters indicate the fill pattern to -be used. The @code{fr_subtype} field holds the maximum number of bytes to skip -when doing this alignment. If more bytes are needed, the alignment is not -done. An @code{fr_subtype} value of 0 means no maximum, which is the normal -case. Target backends can use @code{rs_align_code} to handle certain types of -alignment differently. - -@item rs_broken_word -This indicates that ``broken word'' processing should be done (@pxref{Broken -words}). If broken word processing is not necessary on the target machine, -this enumerator value will not be defined. - -@item rs_cfa -This state is used to implement exception frame optimizations. The -@code{fr_symbol} is an expression symbol for the subtraction which may be -relaxed. The @code{fr_opcode} field holds the frag for the preceding command -byte. The @code{fr_offset} field holds the offset within that frag. The -@code{fr_subtype} field is used during relaxation to hold the current size of -the frag. - -@item rs_fill -The variable characters are to be repeated @code{fr_offset} times. If -@code{fr_offset} is 0, this frag has a length of @code{fr_fix}. Most frags -have this type. - -@item rs_leb128 -This state is used to implement the DWARF ``little endian base 128'' -variable length number format. The @code{fr_symbol} is always an expression -symbol, as constant expressions are emitted directly. The @code{fr_offset} -field is used during relaxation to hold the previous size of the number so -that we can determine if the fragment changed size. - -@item rs_machine_dependent -Displacement relaxation is to be done on this frag. The target is indicated by -@code{fr_symbol} and @code{fr_offset}, and @code{fr_subtype} indicates the -particular machine-specific addressing mode desired. @xref{Relaxation}. - -@item rs_org -The start of the following frag should be pushed back to some specific offset -within the section. (Some assemblers use the value as an absolute address; GAS -does not handle final absolute addresses, but rather requires that the linker -set them.) The offset is given by @code{fr_symbol} and @code{fr_offset}; one -character from the variable-length tail is used as the fill character. -@end table - -@cindex frchainS structure -A chain of frags is built up for each subsection. The data structure -describing a chain is called a @code{frchainS}, and contains the following -fields: - -@table @code -@item frch_root -Points to the first frag in the chain. May be NULL if there are no frags in -this chain. -@item frch_last -Points to the last frag in the chain, or NULL if there are none. -@item frch_next -Next in the list of @code{frchainS} structures. -@item frch_seg -Indicates the section this frag chain belongs to. -@item frch_subseg -Subsection (subsegment) number of this frag chain. -@item fix_root, fix_tail -(Defined only if @code{BFD_ASSEMBLER} is defined). Point to first and last -@code{fixS} structures associated with this subsection. -@item frch_obstack -Not currently used. Intended to be used for frag allocation for this -subsection. This should reduce frag generation caused by switching sections. -@item frch_frag_now -The current frag for this subsegment. -@end table - -A @code{frchainS} corresponds to a subsection; each section has a list of -@code{frchainS} records associated with it. In most cases, only one subsection -of each section is used, so the list will only be one element long, but any -processing of frag chains should be prepared to deal with multiple chains per -section. - -After the input files have been completely processed, and no more frags are to -be generated, the frag chains are joined into one per section for further -processing. After this point, it is safe to operate on one chain per section. - -The assembler always has a current frag, named @code{frag_now}. More space is -allocated for the current frag using the @code{frag_more} function; this -returns a pointer to the amount of requested space. Relaxing is done using -variant frags allocated by @code{frag_var} or @code{frag_variant} -(@pxref{Relaxation}). - -@node GAS processing -@section What GAS does when it runs -@cindex internals, overview - -This is a quick look at what an assembler run looks like. - -@itemize @bullet -@item -The assembler initializes itself by calling various init routines. - -@item -For each source file, the @code{read_a_source_file} function reads in the file -and parses it. The global variable @code{input_line_pointer} points to the -current text; it is guaranteed to be correct up to the end of the line, but not -farther. - -@item -For each line, the assembler passes labels to the @code{colon} function, and -isolates the first word. If it looks like a pseudo-op, the word is looked up -in the pseudo-op hash table @code{po_hash} and dispatched to a pseudo-op -routine. Otherwise, the target dependent @code{md_assemble} routine is called -to parse the instruction. - -@item -When pseudo-ops or instructions output data, they add it to a frag, calling -@code{frag_more} to get space to store it in. - -@item -Pseudo-ops and instructions can also output fixups created by @code{fix_new} or -@code{fix_new_exp}. - -@item -For certain targets, instructions can create variant frags which are used to -store relaxation information (@pxref{Relaxation}). - -@item -When the input file is finished, the @code{write_object_file} routine is -called. It assigns addresses to all the frags (@code{relax_segment}), resolves -all the fixups (@code{fixup_segment}), resolves all the symbol values (using -@code{resolve_symbol_value}), and finally writes out the file (in the -@code{BFD_ASSEMBLER} case, this is done by simply calling @code{bfd_close}). -@end itemize - -@node Porting GAS -@section Porting GAS -@cindex porting - -Each GAS target specifies two main things: the CPU file and the object format -file. Two main switches in the @file{configure.in} file handle this. The -first switches on CPU type to set the shell variable @code{cpu_type}. The -second switches on the entire target to set the shell variable @code{fmt}. - -The configure script uses the value of @code{cpu_type} to select two files in -the @file{config} directory: @file{tc-@var{CPU}.c} and @file{tc-@var{CPU}.h}. -The configuration process will create a file named @file{targ-cpu.h} in the -build directory which includes @file{tc-@var{CPU}.h}. - -The configure script also uses the value of @code{fmt} to select two files: -@file{obj-@var{fmt}.c} and @file{obj-@var{fmt}.h}. The configuration process -will create a file named @file{obj-format.h} in the build directory which -includes @file{obj-@var{fmt}.h}. - -You can also set the emulation in the configure script by setting the @code{em} -variable. Normally the default value of @samp{generic} is fine. The -configuration process will create a file named @file{targ-env.h} in the build -directory which includes @file{te-@var{em}.h}. - -Porting GAS to a new CPU requires writing the @file{tc-@var{CPU}} files. -Porting GAS to a new object file format requires writing the -@file{obj-@var{fmt}} files. There is sometimes some interaction between these -two files, but it is normally minimal. - -The best approach is, of course, to copy existing files. The documentation -below assumes that you are looking at existing files to see usage details. - -These interfaces have grown over time, and have never been carefully thought -out or designed. Nothing about the interfaces described here is cast in stone. -It is possible that they will change from one version of the assembler to the -next. Also, new macros are added all the time as they are needed. - -@menu -* CPU backend:: Writing a CPU backend -* Object format backend:: Writing an object format backend -* Emulations:: Writing emulation files -@end menu - -@node CPU backend -@subsection Writing a CPU backend -@cindex CPU backend -@cindex @file{tc-@var{CPU}} - -The CPU backend files are the heart of the assembler. They are the only parts -of the assembler which actually know anything about the instruction set of the -processor. - -You must define a reasonably small list of macros and functions in the CPU -backend files. You may define a large number of additional macros in the CPU -backend files, not all of which are documented here. You must, of course, -define macros in the @file{.h} file, which is included by every assembler -source file. You may define the functions as macros in the @file{.h} file, or -as functions in the @file{.c} file. - -@table @code -@item TC_@var{CPU} -@cindex TC_@var{CPU} -By convention, you should define this macro in the @file{.h} file. For -example, @file{tc-m68k.h} defines @code{TC_M68K}. You might have to use this -if it is necessary to add CPU specific code to the object format file. - -@item TARGET_FORMAT -This macro is the BFD target name to use when creating the output file. This -will normally depend upon the @code{OBJ_@var{FMT}} macro. - -@item TARGET_ARCH -This macro is the BFD architecture to pass to @code{bfd_set_arch_mach}. - -@item TARGET_MACH -This macro is the BFD machine number to pass to @code{bfd_set_arch_mach}. If -it is not defined, GAS will use 0. - -@item TARGET_BYTES_BIG_ENDIAN -You should define this macro to be non-zero if the target is big endian, and -zero if the target is little endian. - -@item md_shortopts -@itemx md_longopts -@itemx md_longopts_size -@itemx md_parse_option -@itemx md_show_usage -@cindex md_shortopts -@cindex md_longopts -@cindex md_longopts_size -@cindex md_parse_option -@cindex md_show_usage -GAS uses these variables and functions during option processing. -@code{md_shortopts} is a @code{const char *} which GAS adds to the machine -independent string passed to @code{getopt}. @code{md_longopts} is a -@code{struct option []} which GAS adds to the machine independent long options -passed to @code{getopt}; you may use @code{OPTION_MD_BASE}, defined in -@file{as.h}, as the start of a set of long option indices, if necessary. -@code{md_longopts_size} is a @code{size_t} holding the size @code{md_longopts}. -GAS will call @code{md_parse_option} whenever @code{getopt} returns an -unrecognized code, presumably indicating a special code value which appears in -@code{md_longopts}. GAS will call @code{md_show_usage} when a usage message is -printed; it should print a description of the machine specific options. - -@item md_begin -@cindex md_begin -GAS will call this function at the start of the assembly, after the command -line arguments have been parsed and all the machine independent initializations -have been completed. - -@item md_cleanup -@cindex md_cleanup -If you define this macro, GAS will call it at the end of each input file. - -@item md_assemble -@cindex md_assemble -GAS will call this function for each input line which does not contain a -pseudo-op. The argument is a null terminated string. The function should -assemble the string as an instruction with operands. Normally -@code{md_assemble} will do this by calling @code{frag_more} and writing out -some bytes (@pxref{Frags}). @code{md_assemble} will call @code{fix_new} to -create fixups as needed (@pxref{Fixups}). Targets which need to do special -purpose relaxation will call @code{frag_var}. - -@item md_pseudo_table -@cindex md_pseudo_table -This is a const array of type @code{pseudo_typeS}. It is a mapping from -pseudo-op names to functions. You should use this table to implement -pseudo-ops which are specific to the CPU. - -@item tc_conditional_pseudoop -@cindex tc_conditional_pseudoop -If this macro is defined, GAS will call it with a @code{pseudo_typeS} argument. -It should return non-zero if the pseudo-op is a conditional which controls -whether code is assembled, such as @samp{.if}. GAS knows about the normal -conditional pseudo-ops,and you should normally not have to define this macro. - -@item comment_chars -@cindex comment_chars -This is a null terminated @code{const char} array of characters which start a -comment. - -@item tc_comment_chars -@cindex tc_comment_chars -If this macro is defined, GAS will use it instead of @code{comment_chars}. - -@item line_comment_chars -@cindex line_comment_chars -This is a null terminated @code{const char} array of characters which start a -comment when they appear at the start of a line. - -@item line_separator_chars -@cindex line_separator_chars -This is a null terminated @code{const char} array of characters which separate -lines (the semicolon is such a character by default, and need not be listed in -this array). - -@item EXP_CHARS -@cindex EXP_CHARS -This is a null terminated @code{const char} array of characters which may be -used as the exponent character in a floating point number. This is normally -@code{"eE"}. - -@item FLT_CHARS -@cindex FLT_CHARS -This is a null terminated @code{const char} array of characters which may be -used to indicate a floating point constant. A zero followed by one of these -characters is assumed to be followed by a floating point number; thus they -operate the way that @code{0x} is used to indicate a hexadecimal constant. -Usually this includes @samp{r} and @samp{f}. - -@item LEX_AT -@cindex LEX_AT -You may define this macro to the lexical type of the @kbd{@}} character. The -default is zero. - -Lexical types are a combination of @code{LEX_NAME} and @code{LEX_BEGIN_NAME}, -both defined in @file{read.h}. @code{LEX_NAME} indicates that the character -may appear in a name. @code{LEX_BEGIN_NAME} indicates that the character may -appear at the beginning of a nem. - -@item LEX_BR -@cindex LEX_BR -You may define this macro to the lexical type of the brace characters @kbd{@{}, -@kbd{@}}, @kbd{[}, and @kbd{]}. The default value is zero. - -@item LEX_PCT -@cindex LEX_PCT -You may define this macro to the lexical type of the @kbd{%} character. The -default value is zero. - -@item LEX_QM -@cindex LEX_QM -You may define this macro to the lexical type of the @kbd{?} character. The -default value it zero. - -@item LEX_DOLLAR -@cindex LEX_DOLLAR -You may define this macro to the lexical type of the @kbd{$} character. The -default value is @code{LEX_NAME | LEX_BEGIN_NAME}. - -@item SINGLE_QUOTE_STRINGS -@cindex SINGLE_QUOTE_STRINGS -If you define this macro, GAS will treat single quotes as string delimiters. -Normally only double quotes are accepted as string delimiters. - -@item NO_STRING_ESCAPES -@cindex NO_STRING_ESCAPES -If you define this macro, GAS will not permit escape sequences in a string. - -@item ONLY_STANDARD_ESCAPES -@cindex ONLY_STANDARD_ESCAPES -If you define this macro, GAS will warn about the use of nonstandard escape -sequences in a string. - -@item md_start_line_hook -@cindex md_start_line_hook -If you define this macro, GAS will call it at the start of each line. - -@item LABELS_WITHOUT_COLONS -@cindex LABELS_WITHOUT_COLONS -If you define this macro, GAS will assume that any text at the start of a line -is a label, even if it does not have a colon. - -@item TC_START_LABEL -@cindex TC_START_LABEL -You may define this macro to control what GAS considers to be a label. The -default definition is to accept any name followed by a colon character. - -@item NO_PSEUDO_DOT -@cindex NO_PSEUDO_DOT -If you define this macro, GAS will not require pseudo-ops to start with a -@kbd{.} character. - -@item TC_EQUAL_IN_INSN -@cindex TC_EQUAL_IN_INSN -If you define this macro, it should return nonzero if the instruction is -permitted to contain an @kbd{=} character. GAS will use this to decide if a -@kbd{=} is an assignment or an instruction. - -@item TC_EOL_IN_INSN -@cindex TC_EOL_IN_INSN -If you define this macro, it should return nonzero if the current input line -pointer should be treated as the end of a line. - -@item md_parse_name -@cindex md_parse_name -If this macro is defined, GAS will call it for any symbol found in an -expression. You can define this to handle special symbols in a special way. -If a symbol always has a certain value, you should normally enter it in the -symbol table, perhaps using @code{reg_section}. - -@item md_undefined_symbol -@cindex md_undefined_symbol -GAS will call this function when a symbol table lookup fails, before it -creates a new symbol. Typically this would be used to supply symbols whose -name or value changes dynamically, possibly in a context sensitive way. -Predefined symbols with fixed values, such as register names or condition -codes, are typically entered directly into the symbol table when @code{md_begin} -is called. - -@item md_operand -@cindex md_operand -GAS will call this function for any expression that can not be recognized. -When the function is called, @code{input_line_pointer} will point to the start -of the expression. - -@item tc_unrecognized_line -@cindex tc_unrecognized_line -If you define this macro, GAS will call it when it finds a line that it can not -parse. - -@item md_do_align -@cindex md_do_align -You may define this macro to handle an alignment directive. GAS will call it -when the directive is seen in the input file. For example, the i386 backend -uses this to generate efficient nop instructions of varying lengths, depending -upon the number of bytes that the alignment will skip. - -@item HANDLE_ALIGN -@cindex HANDLE_ALIGN -You may define this macro to do special handling for an alignment directive. -GAS will call it at the end of the assembly. - -@item md_flush_pending_output -@cindex md_flush_pending_output -If you define this macro, GAS will call it each time it skips any space because of a -space filling or alignment or data allocation pseudo-op. - -@item TC_PARSE_CONS_EXPRESSION -@cindex TC_PARSE_CONS_EXPRESSION -You may define this macro to parse an expression used in a data allocation -pseudo-op such as @code{.word}. You can use this to recognize relocation -directives that may appear in such directives. - -@item BITFIELD_CONS_EXPRESSION -@cindex BITFIELD_CONS_EXPRESSION -If you define this macro, GAS will recognize bitfield instructions in data -allocation pseudo-ops, as used on the i960. - -@item REPEAT_CONS_EXPRESSION -@cindex REPEAT_CONS_EXPRESSION -If you define this macro, GAS will recognize repeat counts in data allocation -pseudo-ops, as used on the MIPS. - -@item md_cons_align -@cindex md_cons_align -You may define this macro to do any special alignment before a data allocation -pseudo-op. - -@item TC_CONS_FIX_NEW -@cindex TC_CONS_FIX_NEW -You may define this macro to generate a fixup for a data allocation pseudo-op. - -@item TC_INIT_FIX_DATA (@var{fixp}) -@cindex TC_INIT_FIX_DATA -A C statement to initialize the target specific fields of fixup @var{fixp}. -These fields are defined with the @code{TC_FIX_TYPE} macro. - -@item TC_FIX_DATA_PRINT (@var{stream}, @var{fixp}) -@cindex TC_FIX_DATA_PRINT -A C statement to output target specific debugging information for -fixup @var{fixp} to @var{stream}. This macro is called by @code{print_fixup}. - -@item TC_FRAG_INIT (@var{fragp}) -@cindex TC_FRAG_INIT -A C statement to initialize the target specific fields of frag @var{fragp}. -These fields are defined with the @code{TC_FRAG_TYPE} macro. - -@item md_number_to_chars -@cindex md_number_to_chars -This should just call either @code{number_to_chars_bigendian} or -@code{number_to_chars_littleendian}, whichever is appropriate. On targets like -the MIPS which support options to change the endianness, which function to call -is a runtime decision. On other targets, @code{md_number_to_chars} can be a -simple macro. - -@item md_reloc_size -@cindex md_reloc_size -This variable is only used in the original version of gas (not -@code{BFD_ASSEMBLER} and not @code{MANY_SEGMENTS}). It holds the size of a -relocation entry. - -@item WORKING_DOT_WORD -@itemx md_short_jump_size -@itemx md_long_jump_size -@itemx md_create_short_jump -@itemx md_create_long_jump -@cindex WORKING_DOT_WORD -@cindex md_short_jump_size -@cindex md_long_jump_size -@cindex md_create_short_jump -@cindex md_create_long_jump -If @code{WORKING_DOT_WORD} is defined, GAS will not do broken word processing -(@pxref{Broken words}). Otherwise, you should set @code{md_short_jump_size} to -the size of a short jump (a jump that is just long enough to jump around a long -jmp) and @code{md_long_jump_size} to the size of a long jump (a jump that can -go anywhere in the function), You should define @code{md_create_short_jump} to -create a short jump around a long jump, and define @code{md_create_long_jump} -to create a long jump. - -@item md_estimate_size_before_relax -@cindex md_estimate_size_before_relax -This function returns an estimate of the size of a @code{rs_machine_dependent} -frag before any relaxing is done. It may also create any necessary -relocations. - -@item md_relax_frag -@cindex md_relax_frag -This macro may be defined to relax a frag. GAS will call this with the frag -and the change in size of all previous frags; @code{md_relax_frag} should -return the change in size of the frag. @xref{Relaxation}. - -@item TC_GENERIC_RELAX_TABLE -@cindex TC_GENERIC_RELAX_TABLE -If you do not define @code{md_relax_frag}, you may define -@code{TC_GENERIC_RELAX_TABLE} as a table of @code{relax_typeS} structures. The -machine independent code knows how to use such a table to relax PC relative -references. See @file{tc-m68k.c} for an example. @xref{Relaxation}. - -@item md_prepare_relax_scan -@cindex md_prepare_relax_scan -If defined, it is a C statement that is invoked prior to scanning -the relax table. - -@item LINKER_RELAXING_SHRINKS_ONLY -@cindex LINKER_RELAXING_SHRINKS_ONLY -If you define this macro, and the global variable @samp{linkrelax} is set -(because of a command line option, or unconditionally in @code{md_begin}), a -@samp{.align} directive will cause extra space to be allocated. The linker can -then discard this space when relaxing the section. - -@item md_convert_frag -@cindex md_convert_frag -GAS will call this for each rs_machine_dependent fragment. -The instruction is completed using the data from the relaxation pass. -It may also create any necessary relocations. -@xref{Relaxation}. - -@item md_apply_fix -@cindex md_apply_fix -GAS will call this for each fixup. It should store the correct value in the -object file. - -@item TC_HANDLES_FX_DONE -@cindex TC_HANDLES_FX_DONE -If this macro is defined, it means that @code{md_apply_fix} correctly sets the -@code{fx_done} field in the fixup. - -@item tc_gen_reloc -@cindex tc_gen_reloc -A @code{BFD_ASSEMBLER} GAS will call this to generate a reloc. GAS will pass -the resulting reloc to @code{bfd_install_relocation}. This currently works -poorly, as @code{bfd_install_relocation} often does the wrong thing, and -instances of @code{tc_gen_reloc} have been written to work around the problems, -which in turns makes it difficult to fix @code{bfd_install_relocation}. - -@item RELOC_EXPANSION_POSSIBLE -@cindex RELOC_EXPANSION_POSSIBLE -If you define this macro, it means that @code{tc_gen_reloc} may return multiple -relocation entries for a single fixup. In this case, the return value of -@code{tc_gen_reloc} is a pointer to a null terminated array. - -@item MAX_RELOC_EXPANSION -@cindex MAX_RELOC_EXPANSION -You must define this if @code{RELOC_EXPANSION_POSSIBLE} is defined; it -indicates the largest number of relocs which @code{tc_gen_reloc} may return for -a single fixup. - -@item tc_fix_adjustable -@cindex tc_fix_adjustable -You may define this macro to indicate whether a fixup against a locally defined -symbol should be adjusted to be against the section symbol. It should return a -non-zero value if the adjustment is acceptable. - -@item MD_PCREL_FROM_SECTION -@cindex MD_PCREL_FROM_SECTION -If you define this macro, it should return the offset between the address of a -PC relative fixup and the position from which the PC relative adjustment should -be made. On many processors, the base of a PC relative instruction is the next -instruction, so this macro would return the length of an instruction. - -@item md_pcrel_from -@cindex md_pcrel_from -This is the default value of @code{MD_PCREL_FROM_SECTION}. The difference is -that @code{md_pcrel_from} does not take a section argument. - -@item tc_frob_label -@cindex tc_frob_label -If you define this macro, GAS will call it each time a label is defined. - -@item md_section_align -@cindex md_section_align -GAS will call this function for each section at the end of the assembly, to -permit the CPU backend to adjust the alignment of a section. - -@item tc_frob_section -@cindex tc_frob_section -If you define this macro, a @code{BFD_ASSEMBLER} GAS will call it for each -section at the end of the assembly. - -@item tc_frob_file_before_adjust -@cindex tc_frob_file_before_adjust -If you define this macro, GAS will call it after the symbol values are -resolved, but before the fixups have been changed from local symbols to section -symbols. - -@item tc_frob_symbol -@cindex tc_frob_symbol -If you define this macro, GAS will call it for each symbol. You can indicate -that the symbol should not be included in the object file by definining this -macro to set its second argument to a non-zero value. - -@item tc_frob_file -@cindex tc_frob_file -If you define this macro, GAS will call it after the symbol table has been -completed, but before the relocations have been generated. - -@item tc_frob_file_after_relocs -If you define this macro, GAS will call it after the relocs have been -generated. - -@item LISTING_HEADER -A string to use on the header line of a listing. The default value is simply -@code{"GAS LISTING"}. - -@item LISTING_WORD_SIZE -The number of bytes to put into a word in a listing. This affects the way the -bytes are clumped together in the listing. For example, a value of 2 might -print @samp{1234 5678} where a value of 1 would print @samp{12 34 56 78}. The -default value is 4. - -@item LISTING_LHS_WIDTH -The number of words of data to print on the first line of a listing for a -particular source line, where each word is @code{LISTING_WORD_SIZE} bytes. The -default value is 1. - -@item LISTING_LHS_WIDTH_SECOND -Like @code{LISTING_LHS_WIDTH}, but applying to the second and subsequent line -of the data printed for a particular source line. The default value is 1. - -@item LISTING_LHS_CONT_LINES -The maximum number of continuation lines to print in a listing for a particular -source line. The default value is 4. - -@item LISTING_RHS_WIDTH -The maximum number of characters to print from one line of the input file. The -default value is 100. -@end table - -@node Object format backend -@subsection Writing an object format backend -@cindex object format backend -@cindex @file{obj-@var{fmt}} - -As with the CPU backend, the object format backend must define a few things, -and may define some other things. The interface to the object format backend -is generally simpler; most of the support for an object file format consists of -defining a number of pseudo-ops. - -The object format @file{.h} file must include @file{targ-cpu.h}. - -This section will only define the @code{BFD_ASSEMBLER} version of GAS. It is -impossible to support a new object file format using any other version anyhow, -as the original GAS version only supports a.out, and the @code{MANY_SEGMENTS} -GAS version only supports COFF. - -@table @code -@item OBJ_@var{format} -@cindex OBJ_@var{format} -By convention, you should define this macro in the @file{.h} file. For -example, @file{obj-elf.h} defines @code{OBJ_ELF}. You might have to use this -if it is necessary to add object file format specific code to the CPU file. - -@item obj_begin -If you define this macro, GAS will call it at the start of the assembly, after -the command line arguments have been parsed and all the machine independent -initializations have been completed. - -@item obj_app_file -@cindex obj_app_file -If you define this macro, GAS will invoke it when it sees a @code{.file} -pseudo-op or a @samp{#} line as used by the C preprocessor. - -@item OBJ_COPY_SYMBOL_ATTRIBUTES -@cindex OBJ_COPY_SYMBOL_ATTRIBUTES -You should define this macro to copy object format specific information from -one symbol to another. GAS will call it when one symbol is equated to -another. - -@item obj_fix_adjustable -@cindex obj_fix_adjustable -You may define this macro to indicate whether a fixup against a locally defined -symbol should be adjusted to be against the section symbol. It should return a -non-zero value if the adjustment is acceptable. - -@item obj_sec_sym_ok_for_reloc -@cindex obj_sec_sym_ok_for_reloc -You may define this macro to indicate that it is OK to use a section symbol in -a relocateion entry. If it is not, GAS will define a new symbol at the start -of a section. - -@item EMIT_SECTION_SYMBOLS -@cindex EMIT_SECTION_SYMBOLS -You should define this macro with a zero value if you do not want to include -section symbols in the output symbol table. The default value for this macro -is one. - -@item obj_adjust_symtab -@cindex obj_adjust_symtab -If you define this macro, GAS will invoke it just before setting the symbol -table of the output BFD. For example, the COFF support uses this macro to -generate a @code{.file} symbol if none was generated previously. - -@item SEPARATE_STAB_SECTIONS -@cindex SEPARATE_STAB_SECTIONS -You may define this macro to indicate that stabs should be placed in separate -sections, as in ELF. - -@item INIT_STAB_SECTION -@cindex INIT_STAB_SECTION -You may define this macro to initialize the stabs section in the output file. - -@item OBJ_PROCESS_STAB -@cindex OBJ_PROCESS_STAB -You may define this macro to do specific processing on a stabs entry. - -@item obj_frob_section -@cindex obj_frob_section -If you define this macro, GAS will call it for each section at the end of the -assembly. - -@item obj_frob_file_before_adjust -@cindex obj_frob_file_before_adjust -If you define this macro, GAS will call it after the symbol values are -resolved, but before the fixups have been changed from local symbols to section -symbols. - -@item obj_frob_symbol -@cindex obj_frob_symbol -If you define this macro, GAS will call it for each symbol. You can indicate -that the symbol should not be included in the object file by definining this -macro to set its second argument to a non-zero value. - -@item obj_frob_file -@cindex obj_frob_file -If you define this macro, GAS will call it after the symbol table has been -completed, but before the relocations have been generated. - -@item obj_frob_file_after_relocs -If you define this macro, GAS will call it after the relocs have been -generated. -@end table - -@node Emulations -@subsection Writing emulation files - -Normally you do not have to write an emulation file. You can just use -@file{te-generic.h}. - -If you do write your own emulation file, it must include @file{obj-format.h}. - -An emulation file will often define @code{TE_@var{EM}}; this may then be used -in other files to change the output. - -@node Relaxation -@section Relaxation -@cindex relaxation - -@dfn{Relaxation} is a generic term used when the size of some instruction or -data depends upon the value of some symbol or other data. - -GAS knows to relax a particular type of PC relative relocation using a table. -You can also define arbitrarily complex forms of relaxation yourself. - -@menu -* Relaxing with a table:: Relaxing with a table -* General relaxing:: General relaxing -@end menu - -@node Relaxing with a table -@subsection Relaxing with a table - -If you do not define @code{md_relax_frag}, and you do define -@code{TC_GENERIC_RELAX_TABLE}, GAS will relax @code{rs_machine_dependent} frags -based on the frag subtype and the displacement to some specified target -address. The basic idea is that several machines have different addressing -modes for instructions that can specify different ranges of values, with -successive modes able to access wider ranges, including the entirety of the -previous range. Smaller ranges are assumed to be more desirable (perhaps the -instruction requires one word instead of two or three); if this is not the -case, don't describe the smaller-range, inferior mode. - -The @code{fr_subtype} field of a frag is an index into a CPU-specific -relaxation table. That table entry indicates the range of values that can be -stored, the number of bytes that will have to be added to the frag to -accomodate the addressing mode, and the index of the next entry to examine if -the value to be stored is outside the range accessible by the current -addressing mode. The @code{fr_symbol} field of the frag indicates what symbol -is to be accessed; the @code{fr_offset} field is added in. - -If the @code{TC_PCREL_ADJUST} macro is defined, which currently should only happen -for the NS32k family, the @code{TC_PCREL_ADJUST} macro is called on the frag to -compute an adjustment to be made to the displacement. - -The value fitted by the relaxation code is always assumed to be a displacement -from the current frag. (More specifically, from @code{fr_fix} bytes into the -frag.) -@ignore -This seems kinda silly. What about fitting small absolute values? I suppose -@code{md_assemble} is supposed to take care of that, but if the operand is a -difference between symbols, it might not be able to, if the difference was not -computable yet. -@end ignore - -The end of the relaxation sequence is indicated by a ``next'' value of 0. This -means that the first entry in the table can't be used. - -For some configurations, the linker can do relaxing within a section of an -object file. If call instructions of various sizes exist, the linker can -determine which should be used in each instance, when a symbol's value is -resolved. In order for the linker to avoid wasting space and having to insert -no-op instructions, it must be able to expand or shrink the section contents -while still preserving intra-section references and meeting alignment -requirements. - -For the i960 using b.out format, no expansion is done; instead, each -@samp{.align} directive causes extra space to be allocated, enough that when -the linker is relaxing a section and removing unneeded space, it can discard -some or all of this extra padding and cause the following data to be correctly -aligned. - -For the H8/300, I think the linker expands calls that can't reach, and doesn't -worry about alignment issues; the cpu probably never needs any significant -alignment beyond the instruction size. - -The relaxation table type contains these fields: - -@table @code -@item long rlx_forward -Forward reach, must be non-negative. -@item long rlx_backward -Backward reach, must be zero or negative. -@item rlx_length -Length in bytes of this addressing mode. -@item rlx_more -Index of the next-longer relax state, or zero if there is no next relax state. -@end table - -The relaxation is done in @code{relax_segment} in @file{write.c}. The -difference in the length fields between the original mode and the one finally -chosen by the relaxing code is taken as the size by which the current frag will -be increased in size. For example, if the initial relaxing mode has a length -of 2 bytes, and because of the size of the displacement, it gets upgraded to a -mode with a size of 6 bytes, it is assumed that the frag will grow by 4 bytes. -(The initial two bytes should have been part of the fixed portion of the frag, -since it is already known that they will be output.) This growth must be -effected by @code{md_convert_frag}; it should increase the @code{fr_fix} field -by the appropriate size, and fill in the appropriate bytes of the frag. -(Enough space for the maximum growth should have been allocated in the call to -frag_var as the second argument.) - -If relocation records are needed, they should be emitted by -@code{md_estimate_size_before_relax}. This function should examine the target -symbol of the supplied frag and correct the @code{fr_subtype} of the frag if -needed. When this function is called, if the symbol has not yet been defined, -it will not become defined later; however, its value may still change if the -section it is in gets relaxed. - -Usually, if the symbol is in the same section as the frag (given by the -@var{sec} argument), the narrowest likely relaxation mode is stored in -@code{fr_subtype}, and that's that. - -If the symbol is undefined, or in a different section (and therefore moveable -to an arbitrarily large distance), the largest available relaxation mode is -specified, @code{fix_new} is called to produce the relocation record, -@code{fr_fix} is increased to include the relocated field (remember, this -storage was allocated when @code{frag_var} was called), and @code{frag_wane} is -called to convert the frag to an @code{rs_fill} frag with no variant part. -Sometimes changing addressing modes may also require rewriting the instruction. -It can be accessed via @code{fr_opcode} or @code{fr_fix}. - -Sometimes @code{fr_var} is increased instead, and @code{frag_wane} is not -called. I'm not sure, but I think this is to keep @code{fr_fix} referring to -an earlier byte, and @code{fr_subtype} set to @code{rs_machine_dependent} so -that @code{md_convert_frag} will get called. - -@node General relaxing -@subsection General relaxing - -If using a simple table is not suitable, you may implement arbitrarily complex -relaxation semantics yourself. For example, the MIPS backend uses this to emit -different instruction sequences depending upon the size of the symbol being -accessed. - -When you assemble an instruction that may need relaxation, you should allocate -a frag using @code{frag_var} or @code{frag_variant} with a type of -@code{rs_machine_dependent}. You should store some sort of information in the -@code{fr_subtype} field so that you can figure out what to do with the frag -later. - -When GAS reaches the end of the input file, it will look through the frags and -work out their final sizes. - -GAS will first call @code{md_estimate_size_before_relax} on each -@code{rs_machine_dependent} frag. This function must return an estimated size -for the frag. - -GAS will then loop over the frags, calling @code{md_relax_frag} on each -@code{rs_machine_dependent} frag. This function should return the change in -size of the frag. GAS will keep looping over the frags until none of the frags -changes size. - -@node Broken words -@section Broken words -@cindex internals, broken words -@cindex broken words - -Some compilers, including GCC, will sometimes emit switch tables specifying -16-bit @code{.word} displacements to branch targets, and branch instructions -that load entries from that table to compute the target address. If this is -done on a 32-bit machine, there is a chance (at least with really large -functions) that the displacement will not fit in 16 bits. The assembler -handles this using a concept called @dfn{broken words}. This idea is well -named, since there is an implied promise that the 16-bit field will in fact -hold the specified displacement. - -If broken word processing is enabled, and a situation like this is encountered, -the assembler will insert a jump instruction into the instruction stream, close -enough to be reached with the 16-bit displacement. This jump instruction will -transfer to the real desired target address. Thus, as long as the @code{.word} -value really is used as a displacement to compute an address to jump to, the -net effect will be correct (minus a very small efficiency cost). If -@code{.word} directives with label differences for values are used for other -purposes, however, things may not work properly. For targets which use broken -words, the @samp{-K} option will warn when a broken word is discovered. - -The broken word code is turned off by the @code{WORKING_DOT_WORD} macro. It -isn't needed if @code{.word} emits a value large enough to contain an address -(or, more correctly, any possible difference between two addresses). - -@node Internal functions -@section Internal functions - -This section describes basic internal functions used by GAS. - -@menu -* Warning and error messages:: Warning and error messages -* Hash tables:: Hash tables -@end menu - -@node Warning and error messages -@subsection Warning and error messages - -@deftypefun @{@} int had_warnings (void) -@deftypefunx @{@} int had_errors (void) -Returns non-zero if any warnings or errors, respectively, have been printed -during this invocation. -@end deftypefun - -@deftypefun @{@} void as_perror (const char *@var{gripe}, const char *@var{filename}) -Displays a BFD or system error, then clears the error status. -@end deftypefun - -@deftypefun @{@} void as_tsktsk (const char *@var{format}, ...) -@deftypefunx @{@} void as_warn (const char *@var{format}, ...) -@deftypefunx @{@} void as_bad (const char *@var{format}, ...) -@deftypefunx @{@} void as_fatal (const char *@var{format}, ...) -These functions display messages about something amiss with the input file, or -internal problems in the assembler itself. The current file name and line -number are printed, followed by the supplied message, formatted using -@code{vfprintf}, and a final newline. - -An error indicated by @code{as_bad} will result in a non-zero exit status when -the assembler has finished. Calling @code{as_fatal} will result in immediate -termination of the assembler process. -@end deftypefun - -@deftypefun @{@} void as_warn_where (char *@var{file}, unsigned int @var{line}, const char *@var{format}, ...) -@deftypefunx @{@} void as_bad_where (char *@var{file}, unsigned int @var{line}, const char *@var{format}, ...) -These variants permit specification of the file name and line number, and are -used when problems are detected when reprocessing information saved away when -processing some earlier part of the file. For example, fixups are processed -after all input has been read, but messages about fixups should refer to the -original filename and line number that they are applicable to. -@end deftypefun - -@deftypefun @{@} void fprint_value (FILE *@var{file}, valueT @var{val}) -@deftypefunx @{@} void sprint_value (char *@var{buf}, valueT @var{val}) -These functions are helpful for converting a @code{valueT} value into printable -format, in case it's wider than modes that @code{*printf} can handle. If the -type is narrow enough, a decimal number will be produced; otherwise, it will be -in hexadecimal. The value itself is not examined to make this determination. -@end deftypefun - -@node Hash tables -@subsection Hash tables -@cindex hash tables - -@deftypefun @{@} @{struct hash_control *@} hash_new (void) -Creates the hash table control structure. -@end deftypefun - -@deftypefun @{@} void hash_die (struct hash_control *) -Destroy a hash table. -@end deftypefun - -@deftypefun @{@} PTR hash_delete (struct hash_control *, const char *) -Deletes entry from the hash table, returns the value it had. -@end deftypefun - -@deftypefun @{@} PTR hash_replace (struct hash_control *, const char *, PTR) -Updates the value for an entry already in the table, returning the old value. -If no entry was found, just returns NULL. -@end deftypefun - -@deftypefun @{@} @{const char *@} hash_insert (struct hash_control *, const char *, PTR) -Inserting a value already in the table is an error. -Returns an error message or NULL. -@end deftypefun - -@deftypefun @{@} @{const char *@} hash_jam (struct hash_control *, const char *, PTR) -Inserts if the value isn't already present, updates it if it is. -@end deftypefun - -@node Test suite -@section Test suite -@cindex test suite - -The test suite is kind of lame for most processors. Often it only checks to -see if a couple of files can be assembled without the assembler reporting any -errors. For more complete testing, write a test which either examines the -assembler listing, or runs @code{objdump} and examines its output. For the -latter, the TCL procedure @code{run_dump_test} may come in handy. It takes the -base name of a file, and looks for @file{@var{file}.d}. This file should -contain as its initial lines a set of variable settings in @samp{#} comments, -in the form: - -@example - #@var{varname}: @var{value} -@end example - -The @var{varname} may be @code{objdump}, @code{nm}, or @code{as}, in which case -it specifies the options to be passed to the specified programs. Exactly one -of @code{objdump} or @code{nm} must be specified, as that also specifies which -program to run after the assembler has finished. If @var{varname} is -@code{source}, it specifies the name of the source file; otherwise, -@file{@var{file}.s} is used. If @var{varname} is @code{name}, it specifies the -name of the test to be used in the @code{pass} or @code{fail} messages. - -The non-commented parts of the file are interpreted as regular expressions, one -per line. Blank lines in the @code{objdump} or @code{nm} output are skipped, -as are blank lines in the @code{.d} file; the other lines are tested to see if -the regular expression matches the program output. If it does not, the test -fails. - -Note that this means the tests must be modified if the @code{objdump} output -style is changed. - -@bye -@c Local Variables: -@c fill-column: 79 -@c End: |