xref: /dflybsd-src/contrib/binutils-2.27/gas/doc/as.texinfo (revision e656dc90e3d65d744d534af2f5ea88cf8101ebcf)
1*a9fa9459Szrj\input texinfo @c                               -*-Texinfo-*-
2*a9fa9459Szrj@c  Copyright (C) 1991-2016 Free Software Foundation, Inc.
3*a9fa9459Szrj@c UPDATE!!  On future updates--
4*a9fa9459Szrj@c   (1)   check for new machine-dep cmdline options in
5*a9fa9459Szrj@c         md_parse_option definitions in config/tc-*.c
6*a9fa9459Szrj@c   (2)   for platform-specific directives, examine md_pseudo_op
7*a9fa9459Szrj@c         in config/tc-*.c
8*a9fa9459Szrj@c   (3)   for object-format specific directives, examine obj_pseudo_op
9*a9fa9459Szrj@c         in config/obj-*.c
10*a9fa9459Szrj@c   (4)   portable directives in potable[] in read.c
11*a9fa9459Szrj@c %**start of header
12*a9fa9459Szrj@setfilename as.info
13*a9fa9459Szrj@c ---config---
14*a9fa9459Szrj@macro gcctabopt{body}
15*a9fa9459Szrj@code{\body\}
16*a9fa9459Szrj@end macro
17*a9fa9459Szrj@c defaults, config file may override:
18*a9fa9459Szrj@set have-stabs
19*a9fa9459Szrj@c ---
20*a9fa9459Szrj@c man begin NAME
21*a9fa9459Szrj@c ---
22*a9fa9459Szrj@include asconfig.texi
23*a9fa9459Szrj@include bfdver.texi
24*a9fa9459Szrj@c ---
25*a9fa9459Szrj@c man end
26*a9fa9459Szrj@c ---
27*a9fa9459Szrj@c common OR combinations of conditions
28*a9fa9459Szrj@ifset COFF
29*a9fa9459Szrj@set COFF-ELF
30*a9fa9459Szrj@end ifset
31*a9fa9459Szrj@ifset ELF
32*a9fa9459Szrj@set COFF-ELF
33*a9fa9459Szrj@end ifset
34*a9fa9459Szrj@ifset AOUT
35*a9fa9459Szrj@set aout-bout
36*a9fa9459Szrj@end ifset
37*a9fa9459Szrj@ifset ARM/Thumb
38*a9fa9459Szrj@set ARM
39*a9fa9459Szrj@end ifset
40*a9fa9459Szrj@ifset Blackfin
41*a9fa9459Szrj@set Blackfin
42*a9fa9459Szrj@end ifset
43*a9fa9459Szrj@ifset BOUT
44*a9fa9459Szrj@set aout-bout
45*a9fa9459Szrj@end ifset
46*a9fa9459Szrj@ifset H8/300
47*a9fa9459Szrj@set H8
48*a9fa9459Szrj@end ifset
49*a9fa9459Szrj@ifset SH
50*a9fa9459Szrj@set H8
51*a9fa9459Szrj@end ifset
52*a9fa9459Szrj@ifset HPPA
53*a9fa9459Szrj@set abnormal-separator
54*a9fa9459Szrj@end ifset
55*a9fa9459Szrj@c ------------
56*a9fa9459Szrj@ifset GENERIC
57*a9fa9459Szrj@settitle Using @value{AS}
58*a9fa9459Szrj@end ifset
59*a9fa9459Szrj@ifclear GENERIC
60*a9fa9459Szrj@settitle Using @value{AS} (@value{TARGET})
61*a9fa9459Szrj@end ifclear
62*a9fa9459Szrj@setchapternewpage odd
63*a9fa9459Szrj@c %**end of header
64*a9fa9459Szrj
65*a9fa9459Szrj@c @smallbook
66*a9fa9459Szrj@c @set SMALL
67*a9fa9459Szrj@c WARE! Some of the machine-dependent sections contain tables of machine
68*a9fa9459Szrj@c instructions.  Except in multi-column format, these tables look silly.
69*a9fa9459Szrj@c Unfortunately, Texinfo doesn't have a general-purpose multi-col format, so
70*a9fa9459Szrj@c the multi-col format is faked within @example sections.
71*a9fa9459Szrj@c
72*a9fa9459Szrj@c Again unfortunately, the natural size that fits on a page, for these tables,
73*a9fa9459Szrj@c is different depending on whether or not smallbook is turned on.
74*a9fa9459Szrj@c This matters, because of order: text flow switches columns at each page
75*a9fa9459Szrj@c break.
76*a9fa9459Szrj@c
77*a9fa9459Szrj@c The format faked in this source works reasonably well for smallbook,
78*a9fa9459Szrj@c not well for the default large-page format.  This manual expects that if you
79*a9fa9459Szrj@c turn on @smallbook, you will also uncomment the "@set SMALL" to enable the
80*a9fa9459Szrj@c tables in question.  You can turn on one without the other at your
81*a9fa9459Szrj@c discretion, of course.
82*a9fa9459Szrj@ifinfo
83*a9fa9459Szrj@set SMALL
84*a9fa9459Szrj@c the insn tables look just as silly in info files regardless of smallbook,
85*a9fa9459Szrj@c might as well show 'em anyways.
86*a9fa9459Szrj@end ifinfo
87*a9fa9459Szrj
88*a9fa9459Szrj@ifnottex
89*a9fa9459Szrj@dircategory Software development
90*a9fa9459Szrj@direntry
91*a9fa9459Szrj* As: (as).                     The GNU assembler.
92*a9fa9459Szrj* Gas: (as).                    The GNU assembler.
93*a9fa9459Szrj@end direntry
94*a9fa9459Szrj@end ifnottex
95*a9fa9459Szrj
96*a9fa9459Szrj@finalout
97*a9fa9459Szrj@syncodeindex ky cp
98*a9fa9459Szrj
99*a9fa9459Szrj@copying
100*a9fa9459SzrjThis file documents the GNU Assembler "@value{AS}".
101*a9fa9459Szrj
102*a9fa9459Szrj@c man begin COPYRIGHT
103*a9fa9459SzrjCopyright @copyright{} 1991-2016 Free Software Foundation, Inc.
104*a9fa9459Szrj
105*a9fa9459SzrjPermission is granted to copy, distribute and/or modify this document
106*a9fa9459Szrjunder the terms of the GNU Free Documentation License, Version 1.3
107*a9fa9459Szrjor any later version published by the Free Software Foundation;
108*a9fa9459Szrjwith no Invariant Sections, with no Front-Cover Texts, and with no
109*a9fa9459SzrjBack-Cover Texts.  A copy of the license is included in the
110*a9fa9459Szrjsection entitled ``GNU Free Documentation License''.
111*a9fa9459Szrj
112*a9fa9459Szrj@c man end
113*a9fa9459Szrj@end copying
114*a9fa9459Szrj
115*a9fa9459Szrj@titlepage
116*a9fa9459Szrj@title Using @value{AS}
117*a9fa9459Szrj@subtitle The @sc{gnu} Assembler
118*a9fa9459Szrj@ifclear GENERIC
119*a9fa9459Szrj@subtitle for the @value{TARGET} family
120*a9fa9459Szrj@end ifclear
121*a9fa9459Szrj@ifset VERSION_PACKAGE
122*a9fa9459Szrj@sp 1
123*a9fa9459Szrj@subtitle @value{VERSION_PACKAGE}
124*a9fa9459Szrj@end ifset
125*a9fa9459Szrj@sp 1
126*a9fa9459Szrj@subtitle Version @value{VERSION}
127*a9fa9459Szrj@sp 1
128*a9fa9459Szrj@sp 13
129*a9fa9459SzrjThe Free Software Foundation Inc.@: thanks The Nice Computer
130*a9fa9459SzrjCompany of Australia for loaning Dean Elsner to write the
131*a9fa9459Szrjfirst (Vax) version of @command{as} for Project @sc{gnu}.
132*a9fa9459SzrjThe proprietors, management and staff of TNCCA thank FSF for
133*a9fa9459Szrjdistracting the boss while they got some work
134*a9fa9459Szrjdone.
135*a9fa9459Szrj@sp 3
136*a9fa9459Szrj@author Dean Elsner, Jay Fenlason & friends
137*a9fa9459Szrj@page
138*a9fa9459Szrj@tex
139*a9fa9459Szrj{\parskip=0pt
140*a9fa9459Szrj\hfill {\it Using {\tt @value{AS}}}\par
141*a9fa9459Szrj\hfill Edited by Cygnus Support\par
142*a9fa9459Szrj}
143*a9fa9459Szrj%"boxit" macro for figures:
144*a9fa9459Szrj%Modified from Knuth's ``boxit'' macro from TeXbook (answer to exercise 21.3)
145*a9fa9459Szrj\gdef\boxit#1#2{\vbox{\hrule\hbox{\vrule\kern3pt
146*a9fa9459Szrj     \vbox{\parindent=0pt\parskip=0pt\hsize=#1\kern3pt\strut\hfil
147*a9fa9459Szrj#2\hfil\strut\kern3pt}\kern3pt\vrule}\hrule}}%box with visible outline
148*a9fa9459Szrj\gdef\ibox#1#2{\hbox to #1{#2\hfil}\kern8pt}% invisible box
149*a9fa9459Szrj@end tex
150*a9fa9459Szrj
151*a9fa9459Szrj@vskip 0pt plus 1filll
152*a9fa9459SzrjCopyright @copyright{} 1991-2016 Free Software Foundation, Inc.
153*a9fa9459Szrj
154*a9fa9459Szrj      Permission is granted to copy, distribute and/or modify this document
155*a9fa9459Szrj      under the terms of the GNU Free Documentation License, Version 1.3
156*a9fa9459Szrj      or any later version published by the Free Software Foundation;
157*a9fa9459Szrj      with no Invariant Sections, with no Front-Cover Texts, and with no
158*a9fa9459Szrj      Back-Cover Texts.  A copy of the license is included in the
159*a9fa9459Szrj      section entitled ``GNU Free Documentation License''.
160*a9fa9459Szrj
161*a9fa9459Szrj@end titlepage
162*a9fa9459Szrj@contents
163*a9fa9459Szrj
164*a9fa9459Szrj@ifnottex
165*a9fa9459Szrj@node Top
166*a9fa9459Szrj@top Using @value{AS}
167*a9fa9459Szrj
168*a9fa9459SzrjThis file is a user guide to the @sc{gnu} assembler @command{@value{AS}}
169*a9fa9459Szrj@ifset VERSION_PACKAGE
170*a9fa9459Szrj@value{VERSION_PACKAGE}
171*a9fa9459Szrj@end ifset
172*a9fa9459Szrjversion @value{VERSION}.
173*a9fa9459Szrj@ifclear GENERIC
174*a9fa9459SzrjThis version of the file describes @command{@value{AS}} configured to generate
175*a9fa9459Szrjcode for @value{TARGET} architectures.
176*a9fa9459Szrj@end ifclear
177*a9fa9459Szrj
178*a9fa9459SzrjThis document is distributed under the terms of the GNU Free
179*a9fa9459SzrjDocumentation License.  A copy of the license is included in the
180*a9fa9459Szrjsection entitled ``GNU Free Documentation License''.
181*a9fa9459Szrj
182*a9fa9459Szrj@menu
183*a9fa9459Szrj* Overview::                    Overview
184*a9fa9459Szrj* Invoking::                    Command-Line Options
185*a9fa9459Szrj* Syntax::                      Syntax
186*a9fa9459Szrj* Sections::                    Sections and Relocation
187*a9fa9459Szrj* Symbols::                     Symbols
188*a9fa9459Szrj* Expressions::                 Expressions
189*a9fa9459Szrj* Pseudo Ops::                  Assembler Directives
190*a9fa9459Szrj@ifset ELF
191*a9fa9459Szrj* Object Attributes::           Object Attributes
192*a9fa9459Szrj@end ifset
193*a9fa9459Szrj* Machine Dependencies::        Machine Dependent Features
194*a9fa9459Szrj* Reporting Bugs::              Reporting Bugs
195*a9fa9459Szrj* Acknowledgements::            Who Did What
196*a9fa9459Szrj* GNU Free Documentation License::  GNU Free Documentation License
197*a9fa9459Szrj* AS Index::                    AS Index
198*a9fa9459Szrj@end menu
199*a9fa9459Szrj@end ifnottex
200*a9fa9459Szrj
201*a9fa9459Szrj@node Overview
202*a9fa9459Szrj@chapter Overview
203*a9fa9459Szrj@iftex
204*a9fa9459SzrjThis manual is a user guide to the @sc{gnu} assembler @command{@value{AS}}.
205*a9fa9459Szrj@ifclear GENERIC
206*a9fa9459SzrjThis version of the manual describes @command{@value{AS}} configured to generate
207*a9fa9459Szrjcode for @value{TARGET} architectures.
208*a9fa9459Szrj@end ifclear
209*a9fa9459Szrj@end iftex
210*a9fa9459Szrj
211*a9fa9459Szrj@cindex invocation summary
212*a9fa9459Szrj@cindex option summary
213*a9fa9459Szrj@cindex summary of options
214*a9fa9459SzrjHere is a brief summary of how to invoke @command{@value{AS}}.  For details,
215*a9fa9459Szrjsee @ref{Invoking,,Command-Line Options}.
216*a9fa9459Szrj
217*a9fa9459Szrj@c man title AS the portable GNU assembler.
218*a9fa9459Szrj
219*a9fa9459Szrj@ignore
220*a9fa9459Szrj@c man begin SEEALSO
221*a9fa9459Szrjgcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
222*a9fa9459Szrj@c man end
223*a9fa9459Szrj@end ignore
224*a9fa9459Szrj
225*a9fa9459Szrj@c We don't use deffn and friends for the following because they seem
226*a9fa9459Szrj@c to be limited to one line for the header.
227*a9fa9459Szrj@smallexample
228*a9fa9459Szrj@c man begin SYNOPSIS
229*a9fa9459Szrj@value{AS} [@b{-a}[@b{cdghlns}][=@var{file}]] [@b{--alternate}] [@b{-D}]
230*a9fa9459Szrj [@b{--compress-debug-sections}]  [@b{--nocompress-debug-sections}]
231*a9fa9459Szrj [@b{--debug-prefix-map} @var{old}=@var{new}]
232*a9fa9459Szrj [@b{--defsym} @var{sym}=@var{val}] [@b{-f}] [@b{-g}] [@b{--gstabs}]
233*a9fa9459Szrj [@b{--gstabs+}] [@b{--gdwarf-2}] [@b{--gdwarf-sections}]
234*a9fa9459Szrj [@b{--help}] [@b{-I} @var{dir}] [@b{-J}]
235*a9fa9459Szrj [@b{-K}] [@b{-L}] [@b{--listing-lhs-width}=@var{NUM}]
236*a9fa9459Szrj [@b{--listing-lhs-width2}=@var{NUM}] [@b{--listing-rhs-width}=@var{NUM}]
237*a9fa9459Szrj [@b{--listing-cont-lines}=@var{NUM}] [@b{--keep-locals}]
238*a9fa9459Szrj [@b{--no-pad-sections}]
239*a9fa9459Szrj [@b{-o} @var{objfile}] [@b{-R}]
240*a9fa9459Szrj [@b{--hash-size}=@var{NUM}] [@b{--reduce-memory-overheads}]
241*a9fa9459Szrj [@b{--statistics}]
242*a9fa9459Szrj [@b{-v}] [@b{-version}] [@b{--version}]
243*a9fa9459Szrj [@b{-W}] [@b{--warn}] [@b{--fatal-warnings}] [@b{-w}] [@b{-x}]
244*a9fa9459Szrj [@b{-Z}] [@b{@@@var{FILE}}]
245*a9fa9459Szrj [@b{--sectname-subst}] [@b{--size-check=[error|warning]}]
246*a9fa9459Szrj [@b{--elf-stt-common=[no|yes]}]
247*a9fa9459Szrj [@b{--target-help}] [@var{target-options}]
248*a9fa9459Szrj [@b{--}|@var{files} @dots{}]
249*a9fa9459Szrj@c
250*a9fa9459Szrj@c man end
251*a9fa9459Szrj@c Target dependent options are listed below.  Keep the list sorted.
252*a9fa9459Szrj@c Add an empty line for separation.
253*a9fa9459Szrj@c man begin TARGET
254*a9fa9459Szrj@ifset AARCH64
255*a9fa9459Szrj
256*a9fa9459Szrj@emph{Target AArch64 options:}
257*a9fa9459Szrj   [@b{-EB}|@b{-EL}]
258*a9fa9459Szrj   [@b{-mabi}=@var{ABI}]
259*a9fa9459Szrj@end ifset
260*a9fa9459Szrj@ifset ALPHA
261*a9fa9459Szrj
262*a9fa9459Szrj@emph{Target Alpha options:}
263*a9fa9459Szrj   [@b{-m@var{cpu}}]
264*a9fa9459Szrj   [@b{-mdebug} | @b{-no-mdebug}]
265*a9fa9459Szrj   [@b{-replace} | @b{-noreplace}]
266*a9fa9459Szrj   [@b{-relax}] [@b{-g}] [@b{-G@var{size}}]
267*a9fa9459Szrj   [@b{-F}] [@b{-32addr}]
268*a9fa9459Szrj@end ifset
269*a9fa9459Szrj@ifset ARC
270*a9fa9459Szrj
271*a9fa9459Szrj@emph{Target ARC options:}
272*a9fa9459Szrj   [@b{-mcpu=@var{cpu}}]
273*a9fa9459Szrj   [@b{-mA6}|@b{-mARC600}|@b{-mARC601}|@b{-mA7}|@b{-mARC700}|@b{-mEM}|@b{-mHS}]
274*a9fa9459Szrj   [@b{-mcode-density}]
275*a9fa9459Szrj   [@b{-mrelax}]
276*a9fa9459Szrj   [@b{-EB}|@b{-EL}]
277*a9fa9459Szrj@end ifset
278*a9fa9459Szrj@ifset ARM
279*a9fa9459Szrj
280*a9fa9459Szrj@emph{Target ARM options:}
281*a9fa9459Szrj@c Don't document the deprecated options
282*a9fa9459Szrj   [@b{-mcpu}=@var{processor}[+@var{extension}@dots{}]]
283*a9fa9459Szrj   [@b{-march}=@var{architecture}[+@var{extension}@dots{}]]
284*a9fa9459Szrj   [@b{-mfpu}=@var{floating-point-format}]
285*a9fa9459Szrj   [@b{-mfloat-abi}=@var{abi}]
286*a9fa9459Szrj   [@b{-meabi}=@var{ver}]
287*a9fa9459Szrj   [@b{-mthumb}]
288*a9fa9459Szrj   [@b{-EB}|@b{-EL}]
289*a9fa9459Szrj   [@b{-mapcs-32}|@b{-mapcs-26}|@b{-mapcs-float}|
290*a9fa9459Szrj    @b{-mapcs-reentrant}]
291*a9fa9459Szrj   [@b{-mthumb-interwork}] [@b{-k}]
292*a9fa9459Szrj@end ifset
293*a9fa9459Szrj@ifset Blackfin
294*a9fa9459Szrj
295*a9fa9459Szrj@emph{Target Blackfin options:}
296*a9fa9459Szrj   [@b{-mcpu}=@var{processor}[-@var{sirevision}]]
297*a9fa9459Szrj   [@b{-mfdpic}]
298*a9fa9459Szrj   [@b{-mno-fdpic}]
299*a9fa9459Szrj   [@b{-mnopic}]
300*a9fa9459Szrj@end ifset
301*a9fa9459Szrj@ifset CRIS
302*a9fa9459Szrj
303*a9fa9459Szrj@emph{Target CRIS options:}
304*a9fa9459Szrj   [@b{--underscore} | @b{--no-underscore}]
305*a9fa9459Szrj   [@b{--pic}] [@b{-N}]
306*a9fa9459Szrj   [@b{--emulation=criself} | @b{--emulation=crisaout}]
307*a9fa9459Szrj   [@b{--march=v0_v10} | @b{--march=v10} | @b{--march=v32} | @b{--march=common_v10_v32}]
308*a9fa9459Szrj@c Deprecated -- deliberately not documented.
309*a9fa9459Szrj@c [@b{-h}] [@b{-H}]
310*a9fa9459Szrj@end ifset
311*a9fa9459Szrj@ifset D10V
312*a9fa9459Szrj
313*a9fa9459Szrj@emph{Target D10V options:}
314*a9fa9459Szrj   [@b{-O}]
315*a9fa9459Szrj@end ifset
316*a9fa9459Szrj@ifset D30V
317*a9fa9459Szrj
318*a9fa9459Szrj@emph{Target D30V options:}
319*a9fa9459Szrj   [@b{-O}|@b{-n}|@b{-N}]
320*a9fa9459Szrj@end ifset
321*a9fa9459Szrj@ifset EPIPHANY
322*a9fa9459Szrj
323*a9fa9459Szrj@emph{Target EPIPHANY options:}
324*a9fa9459Szrj   [@b{-mepiphany}|@b{-mepiphany16}]
325*a9fa9459Szrj@end ifset
326*a9fa9459Szrj@ifset H8
327*a9fa9459Szrj
328*a9fa9459Szrj@emph{Target H8/300 options:}
329*a9fa9459Szrj   [-h-tick-hex]
330*a9fa9459Szrj@end ifset
331*a9fa9459Szrj@ifset HPPA
332*a9fa9459Szrj@c HPPA has no machine-dependent assembler options (yet).
333*a9fa9459Szrj@end ifset
334*a9fa9459Szrj@ifset I80386
335*a9fa9459Szrj
336*a9fa9459Szrj@emph{Target i386 options:}
337*a9fa9459Szrj   [@b{--32}|@b{--x32}|@b{--64}] [@b{-n}]
338*a9fa9459Szrj   [@b{-march}=@var{CPU}[+@var{EXTENSION}@dots{}]] [@b{-mtune}=@var{CPU}]
339*a9fa9459Szrj@end ifset
340*a9fa9459Szrj@ifset I960
341*a9fa9459Szrj
342*a9fa9459Szrj@emph{Target i960 options:}
343*a9fa9459Szrj@c see md_parse_option in tc-i960.c
344*a9fa9459Szrj   [@b{-ACA}|@b{-ACA_A}|@b{-ACB}|@b{-ACC}|@b{-AKA}|@b{-AKB}|
345*a9fa9459Szrj    @b{-AKC}|@b{-AMC}]
346*a9fa9459Szrj   [@b{-b}] [@b{-no-relax}]
347*a9fa9459Szrj@end ifset
348*a9fa9459Szrj@ifset IA64
349*a9fa9459Szrj
350*a9fa9459Szrj@emph{Target IA-64 options:}
351*a9fa9459Szrj   [@b{-mconstant-gp}|@b{-mauto-pic}]
352*a9fa9459Szrj   [@b{-milp32}|@b{-milp64}|@b{-mlp64}|@b{-mp64}]
353*a9fa9459Szrj   [@b{-mle}|@b{mbe}]
354*a9fa9459Szrj   [@b{-mtune=itanium1}|@b{-mtune=itanium2}]
355*a9fa9459Szrj   [@b{-munwind-check=warning}|@b{-munwind-check=error}]
356*a9fa9459Szrj   [@b{-mhint.b=ok}|@b{-mhint.b=warning}|@b{-mhint.b=error}]
357*a9fa9459Szrj   [@b{-x}|@b{-xexplicit}] [@b{-xauto}] [@b{-xdebug}]
358*a9fa9459Szrj@end ifset
359*a9fa9459Szrj@ifset IP2K
360*a9fa9459Szrj
361*a9fa9459Szrj@emph{Target IP2K options:}
362*a9fa9459Szrj   [@b{-mip2022}|@b{-mip2022ext}]
363*a9fa9459Szrj@end ifset
364*a9fa9459Szrj@ifset M32C
365*a9fa9459Szrj
366*a9fa9459Szrj@emph{Target M32C options:}
367*a9fa9459Szrj   [@b{-m32c}|@b{-m16c}] [-relax] [-h-tick-hex]
368*a9fa9459Szrj@end ifset
369*a9fa9459Szrj@ifset M32R
370*a9fa9459Szrj
371*a9fa9459Szrj@emph{Target M32R options:}
372*a9fa9459Szrj   [@b{--m32rx}|@b{--[no-]warn-explicit-parallel-conflicts}|
373*a9fa9459Szrj   @b{--W[n]p}]
374*a9fa9459Szrj@end ifset
375*a9fa9459Szrj@ifset M680X0
376*a9fa9459Szrj
377*a9fa9459Szrj@emph{Target M680X0 options:}
378*a9fa9459Szrj   [@b{-l}] [@b{-m68000}|@b{-m68010}|@b{-m68020}|@dots{}]
379*a9fa9459Szrj@end ifset
380*a9fa9459Szrj@ifset M68HC11
381*a9fa9459Szrj
382*a9fa9459Szrj@emph{Target M68HC11 options:}
383*a9fa9459Szrj   [@b{-m68hc11}|@b{-m68hc12}|@b{-m68hcs12}|@b{-mm9s12x}|@b{-mm9s12xg}]
384*a9fa9459Szrj   [@b{-mshort}|@b{-mlong}]
385*a9fa9459Szrj   [@b{-mshort-double}|@b{-mlong-double}]
386*a9fa9459Szrj   [@b{--force-long-branches}] [@b{--short-branches}]
387*a9fa9459Szrj   [@b{--strict-direct-mode}] [@b{--print-insn-syntax}]
388*a9fa9459Szrj   [@b{--print-opcodes}] [@b{--generate-example}]
389*a9fa9459Szrj@end ifset
390*a9fa9459Szrj@ifset MCORE
391*a9fa9459Szrj
392*a9fa9459Szrj@emph{Target MCORE options:}
393*a9fa9459Szrj   [@b{-jsri2bsr}] [@b{-sifilter}] [@b{-relax}]
394*a9fa9459Szrj   [@b{-mcpu=[210|340]}]
395*a9fa9459Szrj@end ifset
396*a9fa9459Szrj@ifset METAG
397*a9fa9459Szrj
398*a9fa9459Szrj@emph{Target Meta options:}
399*a9fa9459Szrj   [@b{-mcpu=@var{cpu}}] [@b{-mfpu=@var{cpu}}] [@b{-mdsp=@var{cpu}}]
400*a9fa9459Szrj@end ifset
401*a9fa9459Szrj@ifset MICROBLAZE
402*a9fa9459Szrj@emph{Target MICROBLAZE options:}
403*a9fa9459Szrj@c MicroBlaze has no machine-dependent assembler options.
404*a9fa9459Szrj@end ifset
405*a9fa9459Szrj@ifset MIPS
406*a9fa9459Szrj
407*a9fa9459Szrj@emph{Target MIPS options:}
408*a9fa9459Szrj   [@b{-nocpp}] [@b{-EL}] [@b{-EB}] [@b{-O}[@var{optimization level}]]
409*a9fa9459Szrj   [@b{-g}[@var{debug level}]] [@b{-G} @var{num}] [@b{-KPIC}] [@b{-call_shared}]
410*a9fa9459Szrj   [@b{-non_shared}] [@b{-xgot} [@b{-mvxworks-pic}]
411*a9fa9459Szrj   [@b{-mabi}=@var{ABI}] [@b{-32}] [@b{-n32}] [@b{-64}] [@b{-mfp32}] [@b{-mgp32}]
412*a9fa9459Szrj   [@b{-mfp64}] [@b{-mgp64}] [@b{-mfpxx}]
413*a9fa9459Szrj   [@b{-modd-spreg}] [@b{-mno-odd-spreg}]
414*a9fa9459Szrj   [@b{-march}=@var{CPU}] [@b{-mtune}=@var{CPU}] [@b{-mips1}] [@b{-mips2}]
415*a9fa9459Szrj   [@b{-mips3}] [@b{-mips4}] [@b{-mips5}] [@b{-mips32}] [@b{-mips32r2}]
416*a9fa9459Szrj   [@b{-mips32r3}] [@b{-mips32r5}] [@b{-mips32r6}] [@b{-mips64}] [@b{-mips64r2}]
417*a9fa9459Szrj   [@b{-mips64r3}] [@b{-mips64r5}] [@b{-mips64r6}]
418*a9fa9459Szrj   [@b{-construct-floats}] [@b{-no-construct-floats}]
419*a9fa9459Szrj   [@b{-mnan=@var{encoding}}]
420*a9fa9459Szrj   [@b{-trap}] [@b{-no-break}] [@b{-break}] [@b{-no-trap}]
421*a9fa9459Szrj   [@b{-mips16}] [@b{-no-mips16}]
422*a9fa9459Szrj   [@b{-mmicromips}] [@b{-mno-micromips}]
423*a9fa9459Szrj   [@b{-msmartmips}] [@b{-mno-smartmips}]
424*a9fa9459Szrj   [@b{-mips3d}] [@b{-no-mips3d}]
425*a9fa9459Szrj   [@b{-mdmx}] [@b{-no-mdmx}]
426*a9fa9459Szrj   [@b{-mdsp}] [@b{-mno-dsp}]
427*a9fa9459Szrj   [@b{-mdspr2}] [@b{-mno-dspr2}]
428*a9fa9459Szrj   [@b{-mdspr3}] [@b{-mno-dspr3}]
429*a9fa9459Szrj   [@b{-mmsa}] [@b{-mno-msa}]
430*a9fa9459Szrj   [@b{-mxpa}] [@b{-mno-xpa}]
431*a9fa9459Szrj   [@b{-mmt}] [@b{-mno-mt}]
432*a9fa9459Szrj   [@b{-mmcu}] [@b{-mno-mcu}]
433*a9fa9459Szrj   [@b{-minsn32}] [@b{-mno-insn32}]
434*a9fa9459Szrj   [@b{-mfix7000}] [@b{-mno-fix7000}]
435*a9fa9459Szrj   [@b{-mfix-rm7000}] [@b{-mno-fix-rm7000}]
436*a9fa9459Szrj   [@b{-mfix-vr4120}] [@b{-mno-fix-vr4120}]
437*a9fa9459Szrj   [@b{-mfix-vr4130}] [@b{-mno-fix-vr4130}]
438*a9fa9459Szrj   [@b{-mdebug}] [@b{-no-mdebug}]
439*a9fa9459Szrj   [@b{-mpdr}] [@b{-mno-pdr}]
440*a9fa9459Szrj@end ifset
441*a9fa9459Szrj@ifset MMIX
442*a9fa9459Szrj
443*a9fa9459Szrj@emph{Target MMIX options:}
444*a9fa9459Szrj   [@b{--fixed-special-register-names}] [@b{--globalize-symbols}]
445*a9fa9459Szrj   [@b{--gnu-syntax}] [@b{--relax}] [@b{--no-predefined-symbols}]
446*a9fa9459Szrj   [@b{--no-expand}] [@b{--no-merge-gregs}] [@b{-x}]
447*a9fa9459Szrj   [@b{--linker-allocated-gregs}]
448*a9fa9459Szrj@end ifset
449*a9fa9459Szrj@ifset NIOSII
450*a9fa9459Szrj
451*a9fa9459Szrj@emph{Target Nios II options:}
452*a9fa9459Szrj   [@b{-relax-all}] [@b{-relax-section}] [@b{-no-relax}]
453*a9fa9459Szrj   [@b{-EB}] [@b{-EL}]
454*a9fa9459Szrj@end ifset
455*a9fa9459Szrj@ifset NDS32
456*a9fa9459Szrj
457*a9fa9459Szrj@emph{Target NDS32 options:}
458*a9fa9459Szrj    [@b{-EL}] [@b{-EB}] [@b{-O}] [@b{-Os}] [@b{-mcpu=@var{cpu}}]
459*a9fa9459Szrj    [@b{-misa=@var{isa}}] [@b{-mabi=@var{abi}}] [@b{-mall-ext}]
460*a9fa9459Szrj    [@b{-m[no-]16-bit}]  [@b{-m[no-]perf-ext}] [@b{-m[no-]perf2-ext}]
461*a9fa9459Szrj    [@b{-m[no-]string-ext}] [@b{-m[no-]dsp-ext}] [@b{-m[no-]mac}] [@b{-m[no-]div}]
462*a9fa9459Szrj    [@b{-m[no-]audio-isa-ext}] [@b{-m[no-]fpu-sp-ext}] [@b{-m[no-]fpu-dp-ext}]
463*a9fa9459Szrj    [@b{-m[no-]fpu-fma}] [@b{-mfpu-freg=@var{FREG}}] [@b{-mreduced-regs}]
464*a9fa9459Szrj    [@b{-mfull-regs}] [@b{-m[no-]dx-regs}] [@b{-mpic}] [@b{-mno-relax}]
465*a9fa9459Szrj    [@b{-mb2bb}]
466*a9fa9459Szrj@end ifset
467*a9fa9459Szrj@ifset PDP11
468*a9fa9459Szrj
469*a9fa9459Szrj@emph{Target PDP11 options:}
470*a9fa9459Szrj   [@b{-mpic}|@b{-mno-pic}] [@b{-mall}] [@b{-mno-extensions}]
471*a9fa9459Szrj   [@b{-m}@var{extension}|@b{-mno-}@var{extension}]
472*a9fa9459Szrj   [@b{-m}@var{cpu}] [@b{-m}@var{machine}]
473*a9fa9459Szrj@end ifset
474*a9fa9459Szrj@ifset PJ
475*a9fa9459Szrj
476*a9fa9459Szrj@emph{Target picoJava options:}
477*a9fa9459Szrj   [@b{-mb}|@b{-me}]
478*a9fa9459Szrj@end ifset
479*a9fa9459Szrj@ifset PPC
480*a9fa9459Szrj
481*a9fa9459Szrj@emph{Target PowerPC options:}
482*a9fa9459Szrj   [@b{-a32}|@b{-a64}]
483*a9fa9459Szrj   [@b{-mpwrx}|@b{-mpwr2}|@b{-mpwr}|@b{-m601}|@b{-mppc}|@b{-mppc32}|@b{-m603}|@b{-m604}|@b{-m403}|@b{-m405}|
484*a9fa9459Szrj    @b{-m440}|@b{-m464}|@b{-m476}|@b{-m7400}|@b{-m7410}|@b{-m7450}|@b{-m7455}|@b{-m750cl}|@b{-mppc64}|
485*a9fa9459Szrj    @b{-m620}|@b{-me500}|@b{-e500x2}|@b{-me500mc}|@b{-me500mc64}|@b{-me5500}|@b{-me6500}|@b{-mppc64bridge}|
486*a9fa9459Szrj    @b{-mbooke}|@b{-mpower4}|@b{-mpwr4}|@b{-mpower5}|@b{-mpwr5}|@b{-mpwr5x}|@b{-mpower6}|@b{-mpwr6}|
487*a9fa9459Szrj    @b{-mpower7}|@b{-mpwr7}|@b{-mpower8}|@b{-mpwr8}|@b{-mpower9}|@b{-mpwr9}@b{-ma2}|
488*a9fa9459Szrj    @b{-mcell}|@b{-mspe}|@b{-mtitan}|@b{-me300}|@b{-mcom}]
489*a9fa9459Szrj   [@b{-many}] [@b{-maltivec}|@b{-mvsx}|@b{-mhtm}|@b{-mvle}]
490*a9fa9459Szrj   [@b{-mregnames}|@b{-mno-regnames}]
491*a9fa9459Szrj   [@b{-mrelocatable}|@b{-mrelocatable-lib}|@b{-K PIC}] [@b{-memb}]
492*a9fa9459Szrj   [@b{-mlittle}|@b{-mlittle-endian}|@b{-le}|@b{-mbig}|@b{-mbig-endian}|@b{-be}]
493*a9fa9459Szrj   [@b{-msolaris}|@b{-mno-solaris}]
494*a9fa9459Szrj   [@b{-nops=@var{count}}]
495*a9fa9459Szrj@end ifset
496*a9fa9459Szrj@ifset RL78
497*a9fa9459Szrj
498*a9fa9459Szrj@emph{Target RL78 options:}
499*a9fa9459Szrj   [@b{-mg10}]
500*a9fa9459Szrj   [@b{-m32bit-doubles}|@b{-m64bit-doubles}]
501*a9fa9459Szrj@end ifset
502*a9fa9459Szrj@ifset RX
503*a9fa9459Szrj
504*a9fa9459Szrj@emph{Target RX options:}
505*a9fa9459Szrj   [@b{-mlittle-endian}|@b{-mbig-endian}]
506*a9fa9459Szrj   [@b{-m32bit-doubles}|@b{-m64bit-doubles}]
507*a9fa9459Szrj   [@b{-muse-conventional-section-names}]
508*a9fa9459Szrj   [@b{-msmall-data-limit}]
509*a9fa9459Szrj   [@b{-mpid}]
510*a9fa9459Szrj   [@b{-mrelax}]
511*a9fa9459Szrj   [@b{-mint-register=@var{number}}]
512*a9fa9459Szrj   [@b{-mgcc-abi}|@b{-mrx-abi}]
513*a9fa9459Szrj@end ifset
514*a9fa9459Szrj@ifset S390
515*a9fa9459Szrj
516*a9fa9459Szrj@emph{Target s390 options:}
517*a9fa9459Szrj   [@b{-m31}|@b{-m64}] [@b{-mesa}|@b{-mzarch}] [@b{-march}=@var{CPU}]
518*a9fa9459Szrj   [@b{-mregnames}|@b{-mno-regnames}]
519*a9fa9459Szrj   [@b{-mwarn-areg-zero}]
520*a9fa9459Szrj@end ifset
521*a9fa9459Szrj@ifset SCORE
522*a9fa9459Szrj
523*a9fa9459Szrj@emph{Target SCORE options:}
524*a9fa9459Szrj   [@b{-EB}][@b{-EL}][@b{-FIXDD}][@b{-NWARN}]
525*a9fa9459Szrj   [@b{-SCORE5}][@b{-SCORE5U}][@b{-SCORE7}][@b{-SCORE3}]
526*a9fa9459Szrj   [@b{-march=score7}][@b{-march=score3}]
527*a9fa9459Szrj   [@b{-USE_R1}][@b{-KPIC}][@b{-O0}][@b{-G} @var{num}][@b{-V}]
528*a9fa9459Szrj@end ifset
529*a9fa9459Szrj@ifset SPARC
530*a9fa9459Szrj
531*a9fa9459Szrj@emph{Target SPARC options:}
532*a9fa9459Szrj@c The order here is important.  See c-sparc.texi.
533*a9fa9459Szrj   [@b{-Av6}|@b{-Av7}|@b{-Av8}|@b{-Asparclet}|@b{-Asparclite}
534*a9fa9459Szrj    @b{-Av8plus}|@b{-Av8plusa}|@b{-Av9}|@b{-Av9a}]
535*a9fa9459Szrj   [@b{-xarch=v8plus}|@b{-xarch=v8plusa}] [@b{-bump}]
536*a9fa9459Szrj   [@b{-32}|@b{-64}]
537*a9fa9459Szrj@end ifset
538*a9fa9459Szrj@ifset TIC54X
539*a9fa9459Szrj
540*a9fa9459Szrj@emph{Target TIC54X options:}
541*a9fa9459Szrj [@b{-mcpu=54[123589]}|@b{-mcpu=54[56]lp}] [@b{-mfar-mode}|@b{-mf}]
542*a9fa9459Szrj [@b{-merrors-to-file} @var{<filename>}|@b{-me} @var{<filename>}]
543*a9fa9459Szrj@end ifset
544*a9fa9459Szrj@ifset TIC6X
545*a9fa9459Szrj
546*a9fa9459Szrj@emph{Target TIC6X options:}
547*a9fa9459Szrj   [@b{-march=@var{arch}}] [@b{-mbig-endian}|@b{-mlittle-endian}]
548*a9fa9459Szrj   [@b{-mdsbt}|@b{-mno-dsbt}] [@b{-mpid=no}|@b{-mpid=near}|@b{-mpid=far}]
549*a9fa9459Szrj   [@b{-mpic}|@b{-mno-pic}]
550*a9fa9459Szrj@end ifset
551*a9fa9459Szrj@ifset TILEGX
552*a9fa9459Szrj
553*a9fa9459Szrj@emph{Target TILE-Gx options:}
554*a9fa9459Szrj   [@b{-m32}|@b{-m64}][@b{-EB}][@b{-EL}]
555*a9fa9459Szrj@end ifset
556*a9fa9459Szrj@ifset TILEPRO
557*a9fa9459Szrj@c TILEPro has no machine-dependent assembler options
558*a9fa9459Szrj@end ifset
559*a9fa9459Szrj@ifset VISIUM
560*a9fa9459Szrj
561*a9fa9459Szrj@emph{Target Visium options:}
562*a9fa9459Szrj   [@b{-mtune=@var{arch}}]
563*a9fa9459Szrj@end ifset
564*a9fa9459Szrj@ifset XTENSA
565*a9fa9459Szrj
566*a9fa9459Szrj@emph{Target Xtensa options:}
567*a9fa9459Szrj [@b{--[no-]text-section-literals}] [@b{--[no-]auto-litpools}]
568*a9fa9459Szrj [@b{--[no-]absolute-literals}]
569*a9fa9459Szrj [@b{--[no-]target-align}] [@b{--[no-]longcalls}]
570*a9fa9459Szrj [@b{--[no-]transform}]
571*a9fa9459Szrj [@b{--rename-section} @var{oldname}=@var{newname}]
572*a9fa9459Szrj [@b{--[no-]trampolines}]
573*a9fa9459Szrj@end ifset
574*a9fa9459Szrj@ifset Z80
575*a9fa9459Szrj
576*a9fa9459Szrj@emph{Target Z80 options:}
577*a9fa9459Szrj  [@b{-z80}] [@b{-r800}]
578*a9fa9459Szrj  [@b{ -ignore-undocumented-instructions}] [@b{-Wnud}]
579*a9fa9459Szrj  [@b{ -ignore-unportable-instructions}] [@b{-Wnup}]
580*a9fa9459Szrj  [@b{ -warn-undocumented-instructions}] [@b{-Wud}]
581*a9fa9459Szrj  [@b{ -warn-unportable-instructions}] [@b{-Wup}]
582*a9fa9459Szrj  [@b{ -forbid-undocumented-instructions}] [@b{-Fud}]
583*a9fa9459Szrj  [@b{ -forbid-unportable-instructions}] [@b{-Fup}]
584*a9fa9459Szrj@end ifset
585*a9fa9459Szrj@ifset Z8000
586*a9fa9459Szrj
587*a9fa9459Szrj@c Z8000 has no machine-dependent assembler options
588*a9fa9459Szrj@end ifset
589*a9fa9459Szrj
590*a9fa9459Szrj@c man end
591*a9fa9459Szrj@end smallexample
592*a9fa9459Szrj
593*a9fa9459Szrj@c man begin OPTIONS
594*a9fa9459Szrj
595*a9fa9459Szrj@table @gcctabopt
596*a9fa9459Szrj@include at-file.texi
597*a9fa9459Szrj
598*a9fa9459Szrj@item -a[cdghlmns]
599*a9fa9459SzrjTurn on listings, in any of a variety of ways:
600*a9fa9459Szrj
601*a9fa9459Szrj@table @gcctabopt
602*a9fa9459Szrj@item -ac
603*a9fa9459Szrjomit false conditionals
604*a9fa9459Szrj
605*a9fa9459Szrj@item -ad
606*a9fa9459Szrjomit debugging directives
607*a9fa9459Szrj
608*a9fa9459Szrj@item -ag
609*a9fa9459Szrjinclude general information, like @value{AS} version and options passed
610*a9fa9459Szrj
611*a9fa9459Szrj@item -ah
612*a9fa9459Szrjinclude high-level source
613*a9fa9459Szrj
614*a9fa9459Szrj@item -al
615*a9fa9459Szrjinclude assembly
616*a9fa9459Szrj
617*a9fa9459Szrj@item -am
618*a9fa9459Szrjinclude macro expansions
619*a9fa9459Szrj
620*a9fa9459Szrj@item -an
621*a9fa9459Szrjomit forms processing
622*a9fa9459Szrj
623*a9fa9459Szrj@item -as
624*a9fa9459Szrjinclude symbols
625*a9fa9459Szrj
626*a9fa9459Szrj@item =file
627*a9fa9459Szrjset the name of the listing file
628*a9fa9459Szrj@end table
629*a9fa9459Szrj
630*a9fa9459SzrjYou may combine these options; for example, use @samp{-aln} for assembly
631*a9fa9459Szrjlisting without forms processing.  The @samp{=file} option, if used, must be
632*a9fa9459Szrjthe last one.  By itself, @samp{-a} defaults to @samp{-ahls}.
633*a9fa9459Szrj
634*a9fa9459Szrj@item --alternate
635*a9fa9459SzrjBegin in alternate macro mode.
636*a9fa9459Szrj@ifclear man
637*a9fa9459Szrj@xref{Altmacro,,@code{.altmacro}}.
638*a9fa9459Szrj@end ifclear
639*a9fa9459Szrj
640*a9fa9459Szrj@item --compress-debug-sections
641*a9fa9459SzrjCompress DWARF debug sections using zlib with SHF_COMPRESSED from the
642*a9fa9459SzrjELF ABI.  The resulting object file may not be compatible with older
643*a9fa9459Szrjlinkers and object file utilities.  Note if compression would make a
644*a9fa9459Szrjgiven section @emph{larger} then it is not compressed.
645*a9fa9459Szrj
646*a9fa9459Szrj@ifset ELF
647*a9fa9459Szrj@cindex @samp{--compress-debug-sections=} option
648*a9fa9459Szrj@item --compress-debug-sections=none
649*a9fa9459Szrj@itemx --compress-debug-sections=zlib
650*a9fa9459Szrj@itemx --compress-debug-sections=zlib-gnu
651*a9fa9459Szrj@itemx --compress-debug-sections=zlib-gabi
652*a9fa9459SzrjThese options control how DWARF debug sections are compressed.
653*a9fa9459Szrj@option{--compress-debug-sections=none} is equivalent to
654*a9fa9459Szrj@option{--nocompress-debug-sections}.
655*a9fa9459Szrj@option{--compress-debug-sections=zlib} and
656*a9fa9459Szrj@option{--compress-debug-sections=zlib-gabi} are equivalent to
657*a9fa9459Szrj@option{--compress-debug-sections}.
658*a9fa9459Szrj@option{--compress-debug-sections=zlib-gnu} compresses DWARF debug
659*a9fa9459Szrjsections using zlib.  The debug sections are renamed to begin with
660*a9fa9459Szrj@samp{.zdebug}.  Note if compression would make a given section
661*a9fa9459Szrj@emph{larger} then it is not compressed nor renamed.
662*a9fa9459Szrj
663*a9fa9459Szrj@end ifset
664*a9fa9459Szrj
665*a9fa9459Szrj@item --nocompress-debug-sections
666*a9fa9459SzrjDo not compress DWARF debug sections.  This is usually the default for all
667*a9fa9459Szrjtargets except the x86/x86_64, but a configure time option can be used to
668*a9fa9459Szrjoverride this.
669*a9fa9459Szrj
670*a9fa9459Szrj@item -D
671*a9fa9459SzrjIgnored.  This option is accepted for script compatibility with calls to
672*a9fa9459Szrjother assemblers.
673*a9fa9459Szrj
674*a9fa9459Szrj@item --debug-prefix-map @var{old}=@var{new}
675*a9fa9459SzrjWhen assembling files in directory @file{@var{old}}, record debugging
676*a9fa9459Szrjinformation describing them as in @file{@var{new}} instead.
677*a9fa9459Szrj
678*a9fa9459Szrj@item --defsym @var{sym}=@var{value}
679*a9fa9459SzrjDefine the symbol @var{sym} to be @var{value} before assembling the input file.
680*a9fa9459Szrj@var{value} must be an integer constant.  As in C, a leading @samp{0x}
681*a9fa9459Szrjindicates a hexadecimal value, and a leading @samp{0} indicates an octal
682*a9fa9459Szrjvalue.  The value of the symbol can be overridden inside a source file via the
683*a9fa9459Szrjuse of a @code{.set} pseudo-op.
684*a9fa9459Szrj
685*a9fa9459Szrj@item -f
686*a9fa9459Szrj``fast''---skip whitespace and comment preprocessing (assume source is
687*a9fa9459Szrjcompiler output).
688*a9fa9459Szrj
689*a9fa9459Szrj@item -g
690*a9fa9459Szrj@itemx --gen-debug
691*a9fa9459SzrjGenerate debugging information for each assembler source line using whichever
692*a9fa9459Szrjdebug format is preferred by the target.  This currently means either STABS,
693*a9fa9459SzrjECOFF or DWARF2.
694*a9fa9459Szrj
695*a9fa9459Szrj@item --gstabs
696*a9fa9459SzrjGenerate stabs debugging information for each assembler line.  This
697*a9fa9459Szrjmay help debugging assembler code, if the debugger can handle it.
698*a9fa9459Szrj
699*a9fa9459Szrj@item --gstabs+
700*a9fa9459SzrjGenerate stabs debugging information for each assembler line, with GNU
701*a9fa9459Szrjextensions that probably only gdb can handle, and that could make other
702*a9fa9459Szrjdebuggers crash or refuse to read your program.  This
703*a9fa9459Szrjmay help debugging assembler code.  Currently the only GNU extension is
704*a9fa9459Szrjthe location of the current working directory at assembling time.
705*a9fa9459Szrj
706*a9fa9459Szrj@item --gdwarf-2
707*a9fa9459SzrjGenerate DWARF2 debugging information for each assembler line.  This
708*a9fa9459Szrjmay help debugging assembler code, if the debugger can handle it.  Note---this
709*a9fa9459Szrjoption is only supported by some targets, not all of them.
710*a9fa9459Szrj
711*a9fa9459Szrj@item --gdwarf-sections
712*a9fa9459SzrjInstead of creating a .debug_line section, create a series of
713*a9fa9459Szrj.debug_line.@var{foo} sections where @var{foo} is the name of the
714*a9fa9459Szrjcorresponding code section.  For example a code section called @var{.text.func}
715*a9fa9459Szrjwill have its dwarf line number information placed into a section called
716*a9fa9459Szrj@var{.debug_line.text.func}.  If the code section is just called @var{.text}
717*a9fa9459Szrjthen debug line section will still be called just @var{.debug_line} without any
718*a9fa9459Szrjsuffix.
719*a9fa9459Szrj
720*a9fa9459Szrj@ifset ELF
721*a9fa9459Szrj@item --size-check=error
722*a9fa9459Szrj@itemx --size-check=warning
723*a9fa9459SzrjIssue an error or warning for invalid ELF .size directive.
724*a9fa9459Szrj
725*a9fa9459Szrj@item --elf-stt-common=no
726*a9fa9459Szrj@itemx --elf-stt-common=yes
727*a9fa9459SzrjThese options control whether the ELF assembler should generate common
728*a9fa9459Szrjsymbols with the @code{STT_COMMON} type.  The default can be controlled
729*a9fa9459Szrjby a configure option @option{--enable-elf-stt-common}.
730*a9fa9459Szrj@end ifset
731*a9fa9459Szrj
732*a9fa9459Szrj@item --help
733*a9fa9459SzrjPrint a summary of the command line options and exit.
734*a9fa9459Szrj
735*a9fa9459Szrj@item --target-help
736*a9fa9459SzrjPrint a summary of all target specific options and exit.
737*a9fa9459Szrj
738*a9fa9459Szrj@item -I @var{dir}
739*a9fa9459SzrjAdd directory @var{dir} to the search list for @code{.include} directives.
740*a9fa9459Szrj
741*a9fa9459Szrj@item -J
742*a9fa9459SzrjDon't warn about signed overflow.
743*a9fa9459Szrj
744*a9fa9459Szrj@item -K
745*a9fa9459Szrj@ifclear DIFF-TBL-KLUGE
746*a9fa9459SzrjThis option is accepted but has no effect on the @value{TARGET} family.
747*a9fa9459Szrj@end ifclear
748*a9fa9459Szrj@ifset DIFF-TBL-KLUGE
749*a9fa9459SzrjIssue warnings when difference tables altered for long displacements.
750*a9fa9459Szrj@end ifset
751*a9fa9459Szrj
752*a9fa9459Szrj@item -L
753*a9fa9459Szrj@itemx --keep-locals
754*a9fa9459SzrjKeep (in the symbol table) local symbols.  These symbols start with
755*a9fa9459Szrjsystem-specific local label prefixes, typically @samp{.L} for ELF systems
756*a9fa9459Szrjor @samp{L} for traditional a.out systems.
757*a9fa9459Szrj@ifclear man
758*a9fa9459Szrj@xref{Symbol Names}.
759*a9fa9459Szrj@end ifclear
760*a9fa9459Szrj
761*a9fa9459Szrj@item --listing-lhs-width=@var{number}
762*a9fa9459SzrjSet the maximum width, in words, of the output data column for an assembler
763*a9fa9459Szrjlisting to @var{number}.
764*a9fa9459Szrj
765*a9fa9459Szrj@item --listing-lhs-width2=@var{number}
766*a9fa9459SzrjSet the maximum width, in words, of the output data column for continuation
767*a9fa9459Szrjlines in an assembler listing to @var{number}.
768*a9fa9459Szrj
769*a9fa9459Szrj@item --listing-rhs-width=@var{number}
770*a9fa9459SzrjSet the maximum width of an input source line, as displayed in a listing, to
771*a9fa9459Szrj@var{number} bytes.
772*a9fa9459Szrj
773*a9fa9459Szrj@item --listing-cont-lines=@var{number}
774*a9fa9459SzrjSet the maximum number of lines printed in a listing for a single line of input
775*a9fa9459Szrjto @var{number} + 1.
776*a9fa9459Szrj
777*a9fa9459Szrj@item --no-pad-sections
778*a9fa9459SzrjStop the assembler for padding the ends of output sections to the alignment
779*a9fa9459Szrjof that section.  The default is to pad the sections, but this can waste space
780*a9fa9459Szrjwhich might be needed on targets which have tight memory constraints.
781*a9fa9459Szrj
782*a9fa9459Szrj@item -o @var{objfile}
783*a9fa9459SzrjName the object-file output from @command{@value{AS}} @var{objfile}.
784*a9fa9459Szrj
785*a9fa9459Szrj@item -R
786*a9fa9459SzrjFold the data section into the text section.
787*a9fa9459Szrj
788*a9fa9459Szrj@item --hash-size=@var{number}
789*a9fa9459SzrjSet the default size of GAS's hash tables to a prime number close to
790*a9fa9459Szrj@var{number}.  Increasing this value can reduce the length of time it takes the
791*a9fa9459Szrjassembler to perform its tasks, at the expense of increasing the assembler's
792*a9fa9459Szrjmemory requirements.  Similarly reducing this value can reduce the memory
793*a9fa9459Szrjrequirements at the expense of speed.
794*a9fa9459Szrj
795*a9fa9459Szrj@item --reduce-memory-overheads
796*a9fa9459SzrjThis option reduces GAS's memory requirements, at the expense of making the
797*a9fa9459Szrjassembly processes slower.  Currently this switch is a synonym for
798*a9fa9459Szrj@samp{--hash-size=4051}, but in the future it may have other effects as well.
799*a9fa9459Szrj
800*a9fa9459Szrj@ifset ELF
801*a9fa9459Szrj@item --sectname-subst
802*a9fa9459SzrjHonor substitution sequences in section names.
803*a9fa9459Szrj@ifclear man
804*a9fa9459Szrj@xref{Section Name Substitutions,,@code{.section @var{name}}}.
805*a9fa9459Szrj@end ifclear
806*a9fa9459Szrj@end ifset
807*a9fa9459Szrj
808*a9fa9459Szrj@item --statistics
809*a9fa9459SzrjPrint the maximum space (in bytes) and total time (in seconds) used by
810*a9fa9459Szrjassembly.
811*a9fa9459Szrj
812*a9fa9459Szrj@item --strip-local-absolute
813*a9fa9459SzrjRemove local absolute symbols from the outgoing symbol table.
814*a9fa9459Szrj
815*a9fa9459Szrj@item -v
816*a9fa9459Szrj@itemx -version
817*a9fa9459SzrjPrint the @command{as} version.
818*a9fa9459Szrj
819*a9fa9459Szrj@item --version
820*a9fa9459SzrjPrint the @command{as} version and exit.
821*a9fa9459Szrj
822*a9fa9459Szrj@item -W
823*a9fa9459Szrj@itemx --no-warn
824*a9fa9459SzrjSuppress warning messages.
825*a9fa9459Szrj
826*a9fa9459Szrj@item --fatal-warnings
827*a9fa9459SzrjTreat warnings as errors.
828*a9fa9459Szrj
829*a9fa9459Szrj@item --warn
830*a9fa9459SzrjDon't suppress warning messages or treat them as errors.
831*a9fa9459Szrj
832*a9fa9459Szrj@item -w
833*a9fa9459SzrjIgnored.
834*a9fa9459Szrj
835*a9fa9459Szrj@item -x
836*a9fa9459SzrjIgnored.
837*a9fa9459Szrj
838*a9fa9459Szrj@item -Z
839*a9fa9459SzrjGenerate an object file even after errors.
840*a9fa9459Szrj
841*a9fa9459Szrj@item -- | @var{files} @dots{}
842*a9fa9459SzrjStandard input, or source files to assemble.
843*a9fa9459Szrj
844*a9fa9459Szrj@end table
845*a9fa9459Szrj@c man end
846*a9fa9459Szrj
847*a9fa9459Szrj@ifset AARCH64
848*a9fa9459Szrj
849*a9fa9459Szrj@ifclear man
850*a9fa9459Szrj@xref{AArch64 Options}, for the options available when @value{AS} is configured
851*a9fa9459Szrjfor the 64-bit mode of the ARM Architecture (AArch64).
852*a9fa9459Szrj@end ifclear
853*a9fa9459Szrj
854*a9fa9459Szrj@ifset man
855*a9fa9459Szrj@c man begin OPTIONS
856*a9fa9459SzrjThe following options are available when @value{AS} is configured for the
857*a9fa9459Szrj64-bit mode of the ARM Architecture (AArch64).
858*a9fa9459Szrj@c man end
859*a9fa9459Szrj@c man begin INCLUDE
860*a9fa9459Szrj@include c-aarch64.texi
861*a9fa9459Szrj@c ended inside the included file
862*a9fa9459Szrj@end ifset
863*a9fa9459Szrj
864*a9fa9459Szrj@end ifset
865*a9fa9459Szrj
866*a9fa9459Szrj@ifset ALPHA
867*a9fa9459Szrj
868*a9fa9459Szrj@ifclear man
869*a9fa9459Szrj@xref{Alpha Options}, for the options available when @value{AS} is configured
870*a9fa9459Szrjfor an Alpha processor.
871*a9fa9459Szrj@end ifclear
872*a9fa9459Szrj
873*a9fa9459Szrj@ifset man
874*a9fa9459Szrj@c man begin OPTIONS
875*a9fa9459SzrjThe following options are available when @value{AS} is configured for an Alpha
876*a9fa9459Szrjprocessor.
877*a9fa9459Szrj@c man end
878*a9fa9459Szrj@c man begin INCLUDE
879*a9fa9459Szrj@include c-alpha.texi
880*a9fa9459Szrj@c ended inside the included file
881*a9fa9459Szrj@end ifset
882*a9fa9459Szrj
883*a9fa9459Szrj@end ifset
884*a9fa9459Szrj
885*a9fa9459Szrj@c man begin OPTIONS
886*a9fa9459Szrj@ifset ARC
887*a9fa9459SzrjThe following options are available when @value{AS} is configured for an ARC
888*a9fa9459Szrjprocessor.
889*a9fa9459Szrj
890*a9fa9459Szrj@table @gcctabopt
891*a9fa9459Szrj@item -mcpu=@var{cpu}
892*a9fa9459SzrjThis option selects the core processor variant.
893*a9fa9459Szrj@item -EB | -EL
894*a9fa9459SzrjSelect either big-endian (-EB) or little-endian (-EL) output.
895*a9fa9459Szrj@item -mcode-density
896*a9fa9459SzrjEnable Code Density extenssion instructions.
897*a9fa9459Szrj@end table
898*a9fa9459Szrj@end ifset
899*a9fa9459Szrj
900*a9fa9459Szrj@ifset ARM
901*a9fa9459SzrjThe following options are available when @value{AS} is configured for the ARM
902*a9fa9459Szrjprocessor family.
903*a9fa9459Szrj
904*a9fa9459Szrj@table @gcctabopt
905*a9fa9459Szrj@item -mcpu=@var{processor}[+@var{extension}@dots{}]
906*a9fa9459SzrjSpecify which ARM processor variant is the target.
907*a9fa9459Szrj@item -march=@var{architecture}[+@var{extension}@dots{}]
908*a9fa9459SzrjSpecify which ARM architecture variant is used by the target.
909*a9fa9459Szrj@item -mfpu=@var{floating-point-format}
910*a9fa9459SzrjSelect which Floating Point architecture is the target.
911*a9fa9459Szrj@item -mfloat-abi=@var{abi}
912*a9fa9459SzrjSelect which floating point ABI is in use.
913*a9fa9459Szrj@item -mthumb
914*a9fa9459SzrjEnable Thumb only instruction decoding.
915*a9fa9459Szrj@item -mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant
916*a9fa9459SzrjSelect which procedure calling convention is in use.
917*a9fa9459Szrj@item -EB | -EL
918*a9fa9459SzrjSelect either big-endian (-EB) or little-endian (-EL) output.
919*a9fa9459Szrj@item -mthumb-interwork
920*a9fa9459SzrjSpecify that the code has been generated with interworking between Thumb and
921*a9fa9459SzrjARM code in mind.
922*a9fa9459Szrj@item -mccs
923*a9fa9459SzrjTurns on CodeComposer Studio assembly syntax compatibility mode.
924*a9fa9459Szrj@item -k
925*a9fa9459SzrjSpecify that PIC code has been generated.
926*a9fa9459Szrj@end table
927*a9fa9459Szrj@end ifset
928*a9fa9459Szrj@c man end
929*a9fa9459Szrj
930*a9fa9459Szrj@ifset Blackfin
931*a9fa9459Szrj
932*a9fa9459Szrj@ifclear man
933*a9fa9459Szrj@xref{Blackfin Options}, for the options available when @value{AS} is
934*a9fa9459Szrjconfigured for the Blackfin processor family.
935*a9fa9459Szrj@end ifclear
936*a9fa9459Szrj
937*a9fa9459Szrj@ifset man
938*a9fa9459Szrj@c man begin OPTIONS
939*a9fa9459SzrjThe following options are available when @value{AS} is configured for
940*a9fa9459Szrjthe Blackfin processor family.
941*a9fa9459Szrj@c man end
942*a9fa9459Szrj@c man begin INCLUDE
943*a9fa9459Szrj@include c-bfin.texi
944*a9fa9459Szrj@c ended inside the included file
945*a9fa9459Szrj@end ifset
946*a9fa9459Szrj
947*a9fa9459Szrj@end ifset
948*a9fa9459Szrj
949*a9fa9459Szrj@c man begin OPTIONS
950*a9fa9459Szrj@ifset CRIS
951*a9fa9459SzrjSee the info pages for documentation of the CRIS-specific options.
952*a9fa9459Szrj@end ifset
953*a9fa9459Szrj
954*a9fa9459Szrj@ifset D10V
955*a9fa9459SzrjThe following options are available when @value{AS} is configured for
956*a9fa9459Szrja D10V processor.
957*a9fa9459Szrj@table @gcctabopt
958*a9fa9459Szrj@cindex D10V optimization
959*a9fa9459Szrj@cindex optimization, D10V
960*a9fa9459Szrj@item -O
961*a9fa9459SzrjOptimize output by parallelizing instructions.
962*a9fa9459Szrj@end table
963*a9fa9459Szrj@end ifset
964*a9fa9459Szrj
965*a9fa9459Szrj@ifset D30V
966*a9fa9459SzrjThe following options are available when @value{AS} is configured for a D30V
967*a9fa9459Szrjprocessor.
968*a9fa9459Szrj@table @gcctabopt
969*a9fa9459Szrj@cindex D30V optimization
970*a9fa9459Szrj@cindex optimization, D30V
971*a9fa9459Szrj@item -O
972*a9fa9459SzrjOptimize output by parallelizing instructions.
973*a9fa9459Szrj
974*a9fa9459Szrj@cindex D30V nops
975*a9fa9459Szrj@item -n
976*a9fa9459SzrjWarn when nops are generated.
977*a9fa9459Szrj
978*a9fa9459Szrj@cindex D30V nops after 32-bit multiply
979*a9fa9459Szrj@item -N
980*a9fa9459SzrjWarn when a nop after a 32-bit multiply instruction is generated.
981*a9fa9459Szrj@end table
982*a9fa9459Szrj@end ifset
983*a9fa9459Szrj@c man end
984*a9fa9459Szrj
985*a9fa9459Szrj@ifset EPIPHANY
986*a9fa9459SzrjThe following options are available when @value{AS} is configured for the
987*a9fa9459SzrjAdapteva EPIPHANY series.
988*a9fa9459Szrj
989*a9fa9459Szrj@ifclear man
990*a9fa9459Szrj@xref{Epiphany Options}, for the options available when @value{AS} is
991*a9fa9459Szrjconfigured for an Epiphany processor.
992*a9fa9459Szrj@end ifclear
993*a9fa9459Szrj
994*a9fa9459Szrj@ifset man
995*a9fa9459Szrj@c man begin OPTIONS
996*a9fa9459SzrjThe following options are available when @value{AS} is configured for
997*a9fa9459Szrjan Epiphany processor.
998*a9fa9459Szrj@c man end
999*a9fa9459Szrj@c man begin INCLUDE
1000*a9fa9459Szrj@include c-epiphany.texi
1001*a9fa9459Szrj@c ended inside the included file
1002*a9fa9459Szrj@end ifset
1003*a9fa9459Szrj
1004*a9fa9459Szrj@end ifset
1005*a9fa9459Szrj
1006*a9fa9459Szrj@ifset H8300
1007*a9fa9459Szrj
1008*a9fa9459Szrj@ifclear man
1009*a9fa9459Szrj@xref{H8/300 Options}, for the options available when @value{AS} is configured
1010*a9fa9459Szrjfor an H8/300 processor.
1011*a9fa9459Szrj@end ifclear
1012*a9fa9459Szrj
1013*a9fa9459Szrj@ifset man
1014*a9fa9459Szrj@c man begin OPTIONS
1015*a9fa9459SzrjThe following options are available when @value{AS} is configured for an H8/300
1016*a9fa9459Szrjprocessor.
1017*a9fa9459Szrj@c man end
1018*a9fa9459Szrj@c man begin INCLUDE
1019*a9fa9459Szrj@include c-h8300.texi
1020*a9fa9459Szrj@c ended inside the included file
1021*a9fa9459Szrj@end ifset
1022*a9fa9459Szrj
1023*a9fa9459Szrj@end ifset
1024*a9fa9459Szrj
1025*a9fa9459Szrj@ifset I80386
1026*a9fa9459Szrj
1027*a9fa9459Szrj@ifclear man
1028*a9fa9459Szrj@xref{i386-Options}, for the options available when @value{AS} is
1029*a9fa9459Szrjconfigured for an i386 processor.
1030*a9fa9459Szrj@end ifclear
1031*a9fa9459Szrj
1032*a9fa9459Szrj@ifset man
1033*a9fa9459Szrj@c man begin OPTIONS
1034*a9fa9459SzrjThe following options are available when @value{AS} is configured for
1035*a9fa9459Szrjan i386 processor.
1036*a9fa9459Szrj@c man end
1037*a9fa9459Szrj@c man begin INCLUDE
1038*a9fa9459Szrj@include c-i386.texi
1039*a9fa9459Szrj@c ended inside the included file
1040*a9fa9459Szrj@end ifset
1041*a9fa9459Szrj
1042*a9fa9459Szrj@end ifset
1043*a9fa9459Szrj
1044*a9fa9459Szrj@c man begin OPTIONS
1045*a9fa9459Szrj@ifset I960
1046*a9fa9459SzrjThe following options are available when @value{AS} is configured for the
1047*a9fa9459SzrjIntel 80960 processor.
1048*a9fa9459Szrj
1049*a9fa9459Szrj@table @gcctabopt
1050*a9fa9459Szrj@item -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC
1051*a9fa9459SzrjSpecify which variant of the 960 architecture is the target.
1052*a9fa9459Szrj
1053*a9fa9459Szrj@item -b
1054*a9fa9459SzrjAdd code to collect statistics about branches taken.
1055*a9fa9459Szrj
1056*a9fa9459Szrj@item -no-relax
1057*a9fa9459SzrjDo not alter compare-and-branch instructions for long displacements;
1058*a9fa9459Szrjerror if necessary.
1059*a9fa9459Szrj
1060*a9fa9459Szrj@end table
1061*a9fa9459Szrj@end ifset
1062*a9fa9459Szrj
1063*a9fa9459Szrj@ifset IP2K
1064*a9fa9459SzrjThe following options are available when @value{AS} is configured for the
1065*a9fa9459SzrjUbicom IP2K series.
1066*a9fa9459Szrj
1067*a9fa9459Szrj@table @gcctabopt
1068*a9fa9459Szrj
1069*a9fa9459Szrj@item -mip2022ext
1070*a9fa9459SzrjSpecifies that the extended IP2022 instructions are allowed.
1071*a9fa9459Szrj
1072*a9fa9459Szrj@item -mip2022
1073*a9fa9459SzrjRestores the default behaviour, which restricts the permitted instructions to
1074*a9fa9459Szrjjust the basic IP2022 ones.
1075*a9fa9459Szrj
1076*a9fa9459Szrj@end table
1077*a9fa9459Szrj@end ifset
1078*a9fa9459Szrj
1079*a9fa9459Szrj@ifset M32C
1080*a9fa9459SzrjThe following options are available when @value{AS} is configured for the
1081*a9fa9459SzrjRenesas M32C and M16C processors.
1082*a9fa9459Szrj
1083*a9fa9459Szrj@table @gcctabopt
1084*a9fa9459Szrj
1085*a9fa9459Szrj@item -m32c
1086*a9fa9459SzrjAssemble M32C instructions.
1087*a9fa9459Szrj
1088*a9fa9459Szrj@item -m16c
1089*a9fa9459SzrjAssemble M16C instructions (the default).
1090*a9fa9459Szrj
1091*a9fa9459Szrj@item -relax
1092*a9fa9459SzrjEnable support for link-time relaxations.
1093*a9fa9459Szrj
1094*a9fa9459Szrj@item -h-tick-hex
1095*a9fa9459SzrjSupport H'00 style hex constants in addition to 0x00 style.
1096*a9fa9459Szrj
1097*a9fa9459Szrj@end table
1098*a9fa9459Szrj@end ifset
1099*a9fa9459Szrj
1100*a9fa9459Szrj@ifset M32R
1101*a9fa9459SzrjThe following options are available when @value{AS} is configured for the
1102*a9fa9459SzrjRenesas M32R (formerly Mitsubishi M32R) series.
1103*a9fa9459Szrj
1104*a9fa9459Szrj@table @gcctabopt
1105*a9fa9459Szrj
1106*a9fa9459Szrj@item --m32rx
1107*a9fa9459SzrjSpecify which processor in the M32R family is the target.  The default
1108*a9fa9459Szrjis normally the M32R, but this option changes it to the M32RX.
1109*a9fa9459Szrj
1110*a9fa9459Szrj@item --warn-explicit-parallel-conflicts or --Wp
1111*a9fa9459SzrjProduce warning messages when questionable parallel constructs are
1112*a9fa9459Szrjencountered.
1113*a9fa9459Szrj
1114*a9fa9459Szrj@item --no-warn-explicit-parallel-conflicts or --Wnp
1115*a9fa9459SzrjDo not produce warning messages when questionable parallel constructs are
1116*a9fa9459Szrjencountered.
1117*a9fa9459Szrj
1118*a9fa9459Szrj@end table
1119*a9fa9459Szrj@end ifset
1120*a9fa9459Szrj
1121*a9fa9459Szrj@ifset M680X0
1122*a9fa9459SzrjThe following options are available when @value{AS} is configured for the
1123*a9fa9459SzrjMotorola 68000 series.
1124*a9fa9459Szrj
1125*a9fa9459Szrj@table @gcctabopt
1126*a9fa9459Szrj
1127*a9fa9459Szrj@item -l
1128*a9fa9459SzrjShorten references to undefined symbols, to one word instead of two.
1129*a9fa9459Szrj
1130*a9fa9459Szrj@item -m68000 | -m68008 | -m68010 | -m68020 | -m68030
1131*a9fa9459Szrj@itemx | -m68040 | -m68060 | -m68302 | -m68331 | -m68332
1132*a9fa9459Szrj@itemx | -m68333 | -m68340 | -mcpu32 | -m5200
1133*a9fa9459SzrjSpecify what processor in the 68000 family is the target.  The default
1134*a9fa9459Szrjis normally the 68020, but this can be changed at configuration time.
1135*a9fa9459Szrj
1136*a9fa9459Szrj@item -m68881 | -m68882 | -mno-68881 | -mno-68882
1137*a9fa9459SzrjThe target machine does (or does not) have a floating-point coprocessor.
1138*a9fa9459SzrjThe default is to assume a coprocessor for 68020, 68030, and cpu32.  Although
1139*a9fa9459Szrjthe basic 68000 is not compatible with the 68881, a combination of the
1140*a9fa9459Szrjtwo can be specified, since it's possible to do emulation of the
1141*a9fa9459Szrjcoprocessor instructions with the main processor.
1142*a9fa9459Szrj
1143*a9fa9459Szrj@item -m68851 | -mno-68851
1144*a9fa9459SzrjThe target machine does (or does not) have a memory-management
1145*a9fa9459Szrjunit coprocessor.  The default is to assume an MMU for 68020 and up.
1146*a9fa9459Szrj
1147*a9fa9459Szrj@end table
1148*a9fa9459Szrj@end ifset
1149*a9fa9459Szrj
1150*a9fa9459Szrj@ifset NIOSII
1151*a9fa9459Szrj
1152*a9fa9459Szrj@ifclear man
1153*a9fa9459Szrj@xref{Nios II Options}, for the options available when @value{AS} is configured
1154*a9fa9459Szrjfor an Altera Nios II processor.
1155*a9fa9459Szrj@end ifclear
1156*a9fa9459Szrj
1157*a9fa9459Szrj@ifset man
1158*a9fa9459Szrj@c man begin OPTIONS
1159*a9fa9459SzrjThe following options are available when @value{AS} is configured for an
1160*a9fa9459SzrjAltera Nios II processor.
1161*a9fa9459Szrj@c man end
1162*a9fa9459Szrj@c man begin INCLUDE
1163*a9fa9459Szrj@include c-nios2.texi
1164*a9fa9459Szrj@c ended inside the included file
1165*a9fa9459Szrj@end ifset
1166*a9fa9459Szrj@end ifset
1167*a9fa9459Szrj
1168*a9fa9459Szrj@ifset PDP11
1169*a9fa9459Szrj
1170*a9fa9459SzrjFor details about the PDP-11 machine dependent features options,
1171*a9fa9459Szrjsee @ref{PDP-11-Options}.
1172*a9fa9459Szrj
1173*a9fa9459Szrj@table @gcctabopt
1174*a9fa9459Szrj@item -mpic | -mno-pic
1175*a9fa9459SzrjGenerate position-independent (or position-dependent) code.  The
1176*a9fa9459Szrjdefault is @option{-mpic}.
1177*a9fa9459Szrj
1178*a9fa9459Szrj@item -mall
1179*a9fa9459Szrj@itemx -mall-extensions
1180*a9fa9459SzrjEnable all instruction set extensions.  This is the default.
1181*a9fa9459Szrj
1182*a9fa9459Szrj@item -mno-extensions
1183*a9fa9459SzrjDisable all instruction set extensions.
1184*a9fa9459Szrj
1185*a9fa9459Szrj@item -m@var{extension} | -mno-@var{extension}
1186*a9fa9459SzrjEnable (or disable) a particular instruction set extension.
1187*a9fa9459Szrj
1188*a9fa9459Szrj@item -m@var{cpu}
1189*a9fa9459SzrjEnable the instruction set extensions supported by a particular CPU, and
1190*a9fa9459Szrjdisable all other extensions.
1191*a9fa9459Szrj
1192*a9fa9459Szrj@item -m@var{machine}
1193*a9fa9459SzrjEnable the instruction set extensions supported by a particular machine
1194*a9fa9459Szrjmodel, and disable all other extensions.
1195*a9fa9459Szrj@end table
1196*a9fa9459Szrj
1197*a9fa9459Szrj@end ifset
1198*a9fa9459Szrj
1199*a9fa9459Szrj@ifset PJ
1200*a9fa9459SzrjThe following options are available when @value{AS} is configured for
1201*a9fa9459Szrja picoJava processor.
1202*a9fa9459Szrj
1203*a9fa9459Szrj@table @gcctabopt
1204*a9fa9459Szrj
1205*a9fa9459Szrj@cindex PJ endianness
1206*a9fa9459Szrj@cindex endianness, PJ
1207*a9fa9459Szrj@cindex big endian output, PJ
1208*a9fa9459Szrj@item -mb
1209*a9fa9459SzrjGenerate ``big endian'' format output.
1210*a9fa9459Szrj
1211*a9fa9459Szrj@cindex little endian output, PJ
1212*a9fa9459Szrj@item -ml
1213*a9fa9459SzrjGenerate ``little endian'' format output.
1214*a9fa9459Szrj
1215*a9fa9459Szrj@end table
1216*a9fa9459Szrj@end ifset
1217*a9fa9459Szrj
1218*a9fa9459Szrj@ifset M68HC11
1219*a9fa9459SzrjThe following options are available when @value{AS} is configured for the
1220*a9fa9459SzrjMotorola 68HC11 or 68HC12 series.
1221*a9fa9459Szrj
1222*a9fa9459Szrj@table @gcctabopt
1223*a9fa9459Szrj
1224*a9fa9459Szrj@item -m68hc11 | -m68hc12 | -m68hcs12 | -mm9s12x | -mm9s12xg
1225*a9fa9459SzrjSpecify what processor is the target.  The default is
1226*a9fa9459Szrjdefined by the configuration option when building the assembler.
1227*a9fa9459Szrj
1228*a9fa9459Szrj@item --xgate-ramoffset
1229*a9fa9459SzrjInstruct the linker to offset RAM addresses from S12X address space into
1230*a9fa9459SzrjXGATE address space.
1231*a9fa9459Szrj
1232*a9fa9459Szrj@item -mshort
1233*a9fa9459SzrjSpecify to use the 16-bit integer ABI.
1234*a9fa9459Szrj
1235*a9fa9459Szrj@item -mlong
1236*a9fa9459SzrjSpecify to use the 32-bit integer ABI.
1237*a9fa9459Szrj
1238*a9fa9459Szrj@item -mshort-double
1239*a9fa9459SzrjSpecify to use the 32-bit double ABI.
1240*a9fa9459Szrj
1241*a9fa9459Szrj@item -mlong-double
1242*a9fa9459SzrjSpecify to use the 64-bit double ABI.
1243*a9fa9459Szrj
1244*a9fa9459Szrj@item --force-long-branches
1245*a9fa9459SzrjRelative branches are turned into absolute ones. This concerns
1246*a9fa9459Szrjconditional branches, unconditional branches and branches to a
1247*a9fa9459Szrjsub routine.
1248*a9fa9459Szrj
1249*a9fa9459Szrj@item -S | --short-branches
1250*a9fa9459SzrjDo not turn relative branches into absolute ones
1251*a9fa9459Szrjwhen the offset is out of range.
1252*a9fa9459Szrj
1253*a9fa9459Szrj@item --strict-direct-mode
1254*a9fa9459SzrjDo not turn the direct addressing mode into extended addressing mode
1255*a9fa9459Szrjwhen the instruction does not support direct addressing mode.
1256*a9fa9459Szrj
1257*a9fa9459Szrj@item --print-insn-syntax
1258*a9fa9459SzrjPrint the syntax of instruction in case of error.
1259*a9fa9459Szrj
1260*a9fa9459Szrj@item --print-opcodes
1261*a9fa9459SzrjPrint the list of instructions with syntax and then exit.
1262*a9fa9459Szrj
1263*a9fa9459Szrj@item --generate-example
1264*a9fa9459SzrjPrint an example of instruction for each possible instruction and then exit.
1265*a9fa9459SzrjThis option is only useful for testing @command{@value{AS}}.
1266*a9fa9459Szrj
1267*a9fa9459Szrj@end table
1268*a9fa9459Szrj@end ifset
1269*a9fa9459Szrj
1270*a9fa9459Szrj@ifset SPARC
1271*a9fa9459SzrjThe following options are available when @command{@value{AS}} is configured
1272*a9fa9459Szrjfor the SPARC architecture:
1273*a9fa9459Szrj
1274*a9fa9459Szrj@table @gcctabopt
1275*a9fa9459Szrj@item -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite
1276*a9fa9459Szrj@itemx -Av8plus | -Av8plusa | -Av9 | -Av9a
1277*a9fa9459SzrjExplicitly select a variant of the SPARC architecture.
1278*a9fa9459Szrj
1279*a9fa9459Szrj@samp{-Av8plus} and @samp{-Av8plusa} select a 32 bit environment.
1280*a9fa9459Szrj@samp{-Av9} and @samp{-Av9a} select a 64 bit environment.
1281*a9fa9459Szrj
1282*a9fa9459Szrj@samp{-Av8plusa} and @samp{-Av9a} enable the SPARC V9 instruction set with
1283*a9fa9459SzrjUltraSPARC extensions.
1284*a9fa9459Szrj
1285*a9fa9459Szrj@item -xarch=v8plus | -xarch=v8plusa
1286*a9fa9459SzrjFor compatibility with the Solaris v9 assembler.  These options are
1287*a9fa9459Szrjequivalent to -Av8plus and -Av8plusa, respectively.
1288*a9fa9459Szrj
1289*a9fa9459Szrj@item -bump
1290*a9fa9459SzrjWarn when the assembler switches to another architecture.
1291*a9fa9459Szrj@end table
1292*a9fa9459Szrj@end ifset
1293*a9fa9459Szrj
1294*a9fa9459Szrj@ifset TIC54X
1295*a9fa9459SzrjThe following options are available when @value{AS} is configured for the 'c54x
1296*a9fa9459Szrjarchitecture.
1297*a9fa9459Szrj
1298*a9fa9459Szrj@table @gcctabopt
1299*a9fa9459Szrj@item -mfar-mode
1300*a9fa9459SzrjEnable extended addressing mode.  All addresses and relocations will assume
1301*a9fa9459Szrjextended addressing (usually 23 bits).
1302*a9fa9459Szrj@item -mcpu=@var{CPU_VERSION}
1303*a9fa9459SzrjSets the CPU version being compiled for.
1304*a9fa9459Szrj@item -merrors-to-file @var{FILENAME}
1305*a9fa9459SzrjRedirect error output to a file, for broken systems which don't support such
1306*a9fa9459Szrjbehaviour in the shell.
1307*a9fa9459Szrj@end table
1308*a9fa9459Szrj@end ifset
1309*a9fa9459Szrj
1310*a9fa9459Szrj@ifset MIPS
1311*a9fa9459SzrjThe following options are available when @value{AS} is configured for
1312*a9fa9459Szrja MIPS processor.
1313*a9fa9459Szrj
1314*a9fa9459Szrj@table @gcctabopt
1315*a9fa9459Szrj@item -G @var{num}
1316*a9fa9459SzrjThis option sets the largest size of an object that can be referenced
1317*a9fa9459Szrjimplicitly with the @code{gp} register.  It is only accepted for targets that
1318*a9fa9459Szrjuse ECOFF format, such as a DECstation running Ultrix.  The default value is 8.
1319*a9fa9459Szrj
1320*a9fa9459Szrj@cindex MIPS endianness
1321*a9fa9459Szrj@cindex endianness, MIPS
1322*a9fa9459Szrj@cindex big endian output, MIPS
1323*a9fa9459Szrj@item -EB
1324*a9fa9459SzrjGenerate ``big endian'' format output.
1325*a9fa9459Szrj
1326*a9fa9459Szrj@cindex little endian output, MIPS
1327*a9fa9459Szrj@item -EL
1328*a9fa9459SzrjGenerate ``little endian'' format output.
1329*a9fa9459Szrj
1330*a9fa9459Szrj@cindex MIPS ISA
1331*a9fa9459Szrj@item -mips1
1332*a9fa9459Szrj@itemx -mips2
1333*a9fa9459Szrj@itemx -mips3
1334*a9fa9459Szrj@itemx -mips4
1335*a9fa9459Szrj@itemx -mips5
1336*a9fa9459Szrj@itemx -mips32
1337*a9fa9459Szrj@itemx -mips32r2
1338*a9fa9459Szrj@itemx -mips32r3
1339*a9fa9459Szrj@itemx -mips32r5
1340*a9fa9459Szrj@itemx -mips32r6
1341*a9fa9459Szrj@itemx -mips64
1342*a9fa9459Szrj@itemx -mips64r2
1343*a9fa9459Szrj@itemx -mips64r3
1344*a9fa9459Szrj@itemx -mips64r5
1345*a9fa9459Szrj@itemx -mips64r6
1346*a9fa9459SzrjGenerate code for a particular MIPS Instruction Set Architecture level.
1347*a9fa9459Szrj@samp{-mips1} is an alias for @samp{-march=r3000}, @samp{-mips2} is an
1348*a9fa9459Szrjalias for @samp{-march=r6000}, @samp{-mips3} is an alias for
1349*a9fa9459Szrj@samp{-march=r4000} and @samp{-mips4} is an alias for @samp{-march=r8000}.
1350*a9fa9459Szrj@samp{-mips5}, @samp{-mips32}, @samp{-mips32r2}, @samp{-mips32r3},
1351*a9fa9459Szrj@samp{-mips32r5}, @samp{-mips32r6}, @samp{-mips64}, @samp{-mips64r2},
1352*a9fa9459Szrj@samp{-mips64r3}, @samp{-mips64r5}, and @samp{-mips64r6} correspond to generic
1353*a9fa9459SzrjMIPS V, MIPS32, MIPS32 Release 2, MIPS32 Release 3, MIPS32 Release 5, MIPS32
1354*a9fa9459SzrjRelease 6, MIPS64, MIPS64 Release 2, MIPS64 Release 3, MIPS64 Release 5, and
1355*a9fa9459SzrjMIPS64 Release 6 ISA processors, respectively.
1356*a9fa9459Szrj
1357*a9fa9459Szrj@item -march=@var{cpu}
1358*a9fa9459SzrjGenerate code for a particular MIPS CPU.
1359*a9fa9459Szrj
1360*a9fa9459Szrj@item -mtune=@var{cpu}
1361*a9fa9459SzrjSchedule and tune for a particular MIPS CPU.
1362*a9fa9459Szrj
1363*a9fa9459Szrj@item -mfix7000
1364*a9fa9459Szrj@itemx -mno-fix7000
1365*a9fa9459SzrjCause nops to be inserted if the read of the destination register
1366*a9fa9459Szrjof an mfhi or mflo instruction occurs in the following two instructions.
1367*a9fa9459Szrj
1368*a9fa9459Szrj@item -mfix-rm7000
1369*a9fa9459Szrj@itemx -mno-fix-rm7000
1370*a9fa9459SzrjCause nops to be inserted if a dmult or dmultu instruction is
1371*a9fa9459Szrjfollowed by a load instruction.
1372*a9fa9459Szrj
1373*a9fa9459Szrj@item -mdebug
1374*a9fa9459Szrj@itemx -no-mdebug
1375*a9fa9459SzrjCause stabs-style debugging output to go into an ECOFF-style .mdebug
1376*a9fa9459Szrjsection instead of the standard ELF .stabs sections.
1377*a9fa9459Szrj
1378*a9fa9459Szrj@item -mpdr
1379*a9fa9459Szrj@itemx -mno-pdr
1380*a9fa9459SzrjControl generation of @code{.pdr} sections.
1381*a9fa9459Szrj
1382*a9fa9459Szrj@item -mgp32
1383*a9fa9459Szrj@itemx -mfp32
1384*a9fa9459SzrjThe register sizes are normally inferred from the ISA and ABI, but these
1385*a9fa9459Szrjflags force a certain group of registers to be treated as 32 bits wide at
1386*a9fa9459Szrjall times.  @samp{-mgp32} controls the size of general-purpose registers
1387*a9fa9459Szrjand @samp{-mfp32} controls the size of floating-point registers.
1388*a9fa9459Szrj
1389*a9fa9459Szrj@item -mgp64
1390*a9fa9459Szrj@itemx -mfp64
1391*a9fa9459SzrjThe register sizes are normally inferred from the ISA and ABI, but these
1392*a9fa9459Szrjflags force a certain group of registers to be treated as 64 bits wide at
1393*a9fa9459Szrjall times.  @samp{-mgp64} controls the size of general-purpose registers
1394*a9fa9459Szrjand @samp{-mfp64} controls the size of floating-point registers.
1395*a9fa9459Szrj
1396*a9fa9459Szrj@item -mfpxx
1397*a9fa9459SzrjThe register sizes are normally inferred from the ISA and ABI, but using
1398*a9fa9459Szrjthis flag in combination with @samp{-mabi=32} enables an ABI variant
1399*a9fa9459Szrjwhich will operate correctly with floating-point registers which are
1400*a9fa9459Szrj32 or 64 bits wide.
1401*a9fa9459Szrj
1402*a9fa9459Szrj@item -modd-spreg
1403*a9fa9459Szrj@itemx -mno-odd-spreg
1404*a9fa9459SzrjEnable use of floating-point operations on odd-numbered single-precision
1405*a9fa9459Szrjregisters when supported by the ISA.  @samp{-mfpxx} implies
1406*a9fa9459Szrj@samp{-mno-odd-spreg}, otherwise the default is @samp{-modd-spreg}.
1407*a9fa9459Szrj
1408*a9fa9459Szrj@item -mips16
1409*a9fa9459Szrj@itemx -no-mips16
1410*a9fa9459SzrjGenerate code for the MIPS 16 processor.  This is equivalent to putting
1411*a9fa9459Szrj@code{.set mips16} at the start of the assembly file.  @samp{-no-mips16}
1412*a9fa9459Szrjturns off this option.
1413*a9fa9459Szrj
1414*a9fa9459Szrj@item -mmicromips
1415*a9fa9459Szrj@itemx -mno-micromips
1416*a9fa9459SzrjGenerate code for the microMIPS processor.  This is equivalent to putting
1417*a9fa9459Szrj@code{.set micromips} at the start of the assembly file.  @samp{-mno-micromips}
1418*a9fa9459Szrjturns off this option.  This is equivalent to putting @code{.set nomicromips}
1419*a9fa9459Szrjat the start of the assembly file.
1420*a9fa9459Szrj
1421*a9fa9459Szrj@item -msmartmips
1422*a9fa9459Szrj@itemx -mno-smartmips
1423*a9fa9459SzrjEnables the SmartMIPS extension to the MIPS32 instruction set. This is
1424*a9fa9459Szrjequivalent to putting @code{.set smartmips} at the start of the assembly file.
1425*a9fa9459Szrj@samp{-mno-smartmips} turns off this option.
1426*a9fa9459Szrj
1427*a9fa9459Szrj@item -mips3d
1428*a9fa9459Szrj@itemx -no-mips3d
1429*a9fa9459SzrjGenerate code for the MIPS-3D Application Specific Extension.
1430*a9fa9459SzrjThis tells the assembler to accept MIPS-3D instructions.
1431*a9fa9459Szrj@samp{-no-mips3d} turns off this option.
1432*a9fa9459Szrj
1433*a9fa9459Szrj@item -mdmx
1434*a9fa9459Szrj@itemx -no-mdmx
1435*a9fa9459SzrjGenerate code for the MDMX Application Specific Extension.
1436*a9fa9459SzrjThis tells the assembler to accept MDMX instructions.
1437*a9fa9459Szrj@samp{-no-mdmx} turns off this option.
1438*a9fa9459Szrj
1439*a9fa9459Szrj@item -mdsp
1440*a9fa9459Szrj@itemx -mno-dsp
1441*a9fa9459SzrjGenerate code for the DSP Release 1 Application Specific Extension.
1442*a9fa9459SzrjThis tells the assembler to accept DSP Release 1 instructions.
1443*a9fa9459Szrj@samp{-mno-dsp} turns off this option.
1444*a9fa9459Szrj
1445*a9fa9459Szrj@item -mdspr2
1446*a9fa9459Szrj@itemx -mno-dspr2
1447*a9fa9459SzrjGenerate code for the DSP Release 2 Application Specific Extension.
1448*a9fa9459SzrjThis option implies @samp{-mdsp}.
1449*a9fa9459SzrjThis tells the assembler to accept DSP Release 2 instructions.
1450*a9fa9459Szrj@samp{-mno-dspr2} turns off this option.
1451*a9fa9459Szrj
1452*a9fa9459Szrj@item -mdspr3
1453*a9fa9459Szrj@itemx -mno-dspr3
1454*a9fa9459SzrjGenerate code for the DSP Release 3 Application Specific Extension.
1455*a9fa9459SzrjThis option implies @samp{-mdsp} and @samp{-mdspr2}.
1456*a9fa9459SzrjThis tells the assembler to accept DSP Release 3 instructions.
1457*a9fa9459Szrj@samp{-mno-dspr3} turns off this option.
1458*a9fa9459Szrj
1459*a9fa9459Szrj@item -mmsa
1460*a9fa9459Szrj@itemx -mno-msa
1461*a9fa9459SzrjGenerate code for the MIPS SIMD Architecture Extension.
1462*a9fa9459SzrjThis tells the assembler to accept MSA instructions.
1463*a9fa9459Szrj@samp{-mno-msa} turns off this option.
1464*a9fa9459Szrj
1465*a9fa9459Szrj@item -mxpa
1466*a9fa9459Szrj@itemx -mno-xpa
1467*a9fa9459SzrjGenerate code for the MIPS eXtended Physical Address (XPA) Extension.
1468*a9fa9459SzrjThis tells the assembler to accept XPA instructions.
1469*a9fa9459Szrj@samp{-mno-xpa} turns off this option.
1470*a9fa9459Szrj
1471*a9fa9459Szrj@item -mmt
1472*a9fa9459Szrj@itemx -mno-mt
1473*a9fa9459SzrjGenerate code for the MT Application Specific Extension.
1474*a9fa9459SzrjThis tells the assembler to accept MT instructions.
1475*a9fa9459Szrj@samp{-mno-mt} turns off this option.
1476*a9fa9459Szrj
1477*a9fa9459Szrj@item -mmcu
1478*a9fa9459Szrj@itemx -mno-mcu
1479*a9fa9459SzrjGenerate code for the MCU Application Specific Extension.
1480*a9fa9459SzrjThis tells the assembler to accept MCU instructions.
1481*a9fa9459Szrj@samp{-mno-mcu} turns off this option.
1482*a9fa9459Szrj
1483*a9fa9459Szrj@item -minsn32
1484*a9fa9459Szrj@itemx -mno-insn32
1485*a9fa9459SzrjOnly use 32-bit instruction encodings when generating code for the
1486*a9fa9459SzrjmicroMIPS processor.  This option inhibits the use of any 16-bit
1487*a9fa9459Szrjinstructions.  This is equivalent to putting @code{.set insn32} at
1488*a9fa9459Szrjthe start of the assembly file.  @samp{-mno-insn32} turns off this
1489*a9fa9459Szrjoption.  This is equivalent to putting @code{.set noinsn32} at the
1490*a9fa9459Szrjstart of the assembly file.  By default @samp{-mno-insn32} is
1491*a9fa9459Szrjselected, allowing all instructions to be used.
1492*a9fa9459Szrj
1493*a9fa9459Szrj@item --construct-floats
1494*a9fa9459Szrj@itemx --no-construct-floats
1495*a9fa9459SzrjThe @samp{--no-construct-floats} option disables the construction of
1496*a9fa9459Szrjdouble width floating point constants by loading the two halves of the
1497*a9fa9459Szrjvalue into the two single width floating point registers that make up
1498*a9fa9459Szrjthe double width register.  By default @samp{--construct-floats} is
1499*a9fa9459Szrjselected, allowing construction of these floating point constants.
1500*a9fa9459Szrj
1501*a9fa9459Szrj@item --relax-branch
1502*a9fa9459Szrj@itemx --no-relax-branch
1503*a9fa9459SzrjThe @samp{--relax-branch} option enables the relaxation of out-of-range
1504*a9fa9459Szrjbranches.  By default @samp{--no-relax-branch} is selected, causing any
1505*a9fa9459Szrjout-of-range branches to produce an error.
1506*a9fa9459Szrj
1507*a9fa9459Szrj@item -mnan=@var{encoding}
1508*a9fa9459SzrjSelect between the IEEE 754-2008 (@option{-mnan=2008}) or the legacy
1509*a9fa9459Szrj(@option{-mnan=legacy}) NaN encoding format.  The latter is the default.
1510*a9fa9459Szrj
1511*a9fa9459Szrj@cindex emulation
1512*a9fa9459Szrj@item --emulation=@var{name}
1513*a9fa9459SzrjThis option was formerly used to switch between ELF and ECOFF output
1514*a9fa9459Szrjon targets like IRIX 5 that supported both.  MIPS ECOFF support was
1515*a9fa9459Szrjremoved in GAS 2.24, so the option now serves little purpose.
1516*a9fa9459SzrjIt is retained for backwards compatibility.
1517*a9fa9459Szrj
1518*a9fa9459SzrjThe available configuration names are: @samp{mipself}, @samp{mipslelf} and
1519*a9fa9459Szrj@samp{mipsbelf}.  Choosing @samp{mipself} now has no effect, since the output
1520*a9fa9459Szrjis always ELF.  @samp{mipslelf} and @samp{mipsbelf} select little- and
1521*a9fa9459Szrjbig-endian output respectively, but @samp{-EL} and @samp{-EB} are now the
1522*a9fa9459Szrjpreferred options instead.
1523*a9fa9459Szrj
1524*a9fa9459Szrj@item -nocpp
1525*a9fa9459Szrj@command{@value{AS}} ignores this option.  It is accepted for compatibility with
1526*a9fa9459Szrjthe native tools.
1527*a9fa9459Szrj
1528*a9fa9459Szrj@item --trap
1529*a9fa9459Szrj@itemx --no-trap
1530*a9fa9459Szrj@itemx --break
1531*a9fa9459Szrj@itemx --no-break
1532*a9fa9459SzrjControl how to deal with multiplication overflow and division by zero.
1533*a9fa9459Szrj@samp{--trap} or @samp{--no-break} (which are synonyms) take a trap exception
1534*a9fa9459Szrj(and only work for Instruction Set Architecture level 2 and higher);
1535*a9fa9459Szrj@samp{--break} or @samp{--no-trap} (also synonyms, and the default) take a
1536*a9fa9459Szrjbreak exception.
1537*a9fa9459Szrj
1538*a9fa9459Szrj@item -n
1539*a9fa9459SzrjWhen this option is used, @command{@value{AS}} will issue a warning every
1540*a9fa9459Szrjtime it generates a nop instruction from a macro.
1541*a9fa9459Szrj@end table
1542*a9fa9459Szrj@end ifset
1543*a9fa9459Szrj
1544*a9fa9459Szrj@ifset MCORE
1545*a9fa9459SzrjThe following options are available when @value{AS} is configured for
1546*a9fa9459Szrjan MCore processor.
1547*a9fa9459Szrj
1548*a9fa9459Szrj@table @gcctabopt
1549*a9fa9459Szrj@item -jsri2bsr
1550*a9fa9459Szrj@itemx -nojsri2bsr
1551*a9fa9459SzrjEnable or disable the JSRI to BSR transformation.  By default this is enabled.
1552*a9fa9459SzrjThe command line option @samp{-nojsri2bsr} can be used to disable it.
1553*a9fa9459Szrj
1554*a9fa9459Szrj@item -sifilter
1555*a9fa9459Szrj@itemx -nosifilter
1556*a9fa9459SzrjEnable or disable the silicon filter behaviour.  By default this is disabled.
1557*a9fa9459SzrjThe default can be overridden by the @samp{-sifilter} command line option.
1558*a9fa9459Szrj
1559*a9fa9459Szrj@item -relax
1560*a9fa9459SzrjAlter jump instructions for long displacements.
1561*a9fa9459Szrj
1562*a9fa9459Szrj@item -mcpu=[210|340]
1563*a9fa9459SzrjSelect the cpu type on the target hardware.  This controls which instructions
1564*a9fa9459Szrjcan be assembled.
1565*a9fa9459Szrj
1566*a9fa9459Szrj@item -EB
1567*a9fa9459SzrjAssemble for a big endian target.
1568*a9fa9459Szrj
1569*a9fa9459Szrj@item -EL
1570*a9fa9459SzrjAssemble for a little endian target.
1571*a9fa9459Szrj
1572*a9fa9459Szrj@end table
1573*a9fa9459Szrj@end ifset
1574*a9fa9459Szrj@c man end
1575*a9fa9459Szrj
1576*a9fa9459Szrj@ifset METAG
1577*a9fa9459Szrj
1578*a9fa9459Szrj@ifclear man
1579*a9fa9459Szrj@xref{Meta Options}, for the options available when @value{AS} is configured
1580*a9fa9459Szrjfor a Meta processor.
1581*a9fa9459Szrj@end ifclear
1582*a9fa9459Szrj
1583*a9fa9459Szrj@ifset man
1584*a9fa9459Szrj@c man begin OPTIONS
1585*a9fa9459SzrjThe following options are available when @value{AS} is configured for a
1586*a9fa9459SzrjMeta processor.
1587*a9fa9459Szrj@c man end
1588*a9fa9459Szrj@c man begin INCLUDE
1589*a9fa9459Szrj@include c-metag.texi
1590*a9fa9459Szrj@c ended inside the included file
1591*a9fa9459Szrj@end ifset
1592*a9fa9459Szrj
1593*a9fa9459Szrj@end ifset
1594*a9fa9459Szrj
1595*a9fa9459Szrj@c man begin OPTIONS
1596*a9fa9459Szrj@ifset MMIX
1597*a9fa9459SzrjSee the info pages for documentation of the MMIX-specific options.
1598*a9fa9459Szrj@end ifset
1599*a9fa9459Szrj
1600*a9fa9459Szrj@ifset NDS32
1601*a9fa9459Szrj
1602*a9fa9459Szrj@ifclear man
1603*a9fa9459Szrj@xref{NDS32 Options}, for the options available when @value{AS} is configured
1604*a9fa9459Szrjfor a NDS32 processor.
1605*a9fa9459Szrj@end ifclear
1606*a9fa9459Szrj@c ended inside the included file
1607*a9fa9459Szrj@end ifset
1608*a9fa9459Szrj
1609*a9fa9459Szrj@ifset man
1610*a9fa9459Szrj@c man begin OPTIONS
1611*a9fa9459SzrjThe following options are available when @value{AS} is configured for a
1612*a9fa9459SzrjNDS32 processor.
1613*a9fa9459Szrj@c man end
1614*a9fa9459Szrj@c man begin INCLUDE
1615*a9fa9459Szrj@include c-nds32.texi
1616*a9fa9459Szrj@c ended inside the included file
1617*a9fa9459Szrj@end ifset
1618*a9fa9459Szrj
1619*a9fa9459Szrj@c man end
1620*a9fa9459Szrj@ifset PPC
1621*a9fa9459Szrj
1622*a9fa9459Szrj@ifclear man
1623*a9fa9459Szrj@xref{PowerPC-Opts}, for the options available when @value{AS} is configured
1624*a9fa9459Szrjfor a PowerPC processor.
1625*a9fa9459Szrj@end ifclear
1626*a9fa9459Szrj
1627*a9fa9459Szrj@ifset man
1628*a9fa9459Szrj@c man begin OPTIONS
1629*a9fa9459SzrjThe following options are available when @value{AS} is configured for a
1630*a9fa9459SzrjPowerPC processor.
1631*a9fa9459Szrj@c man end
1632*a9fa9459Szrj@c man begin INCLUDE
1633*a9fa9459Szrj@include c-ppc.texi
1634*a9fa9459Szrj@c ended inside the included file
1635*a9fa9459Szrj@end ifset
1636*a9fa9459Szrj
1637*a9fa9459Szrj@end ifset
1638*a9fa9459Szrj
1639*a9fa9459Szrj@c man begin OPTIONS
1640*a9fa9459Szrj@ifset RX
1641*a9fa9459SzrjSee the info pages for documentation of the RX-specific options.
1642*a9fa9459Szrj@end ifset
1643*a9fa9459Szrj
1644*a9fa9459Szrj@ifset S390
1645*a9fa9459SzrjThe following options are available when @value{AS} is configured for the s390
1646*a9fa9459Szrjprocessor family.
1647*a9fa9459Szrj
1648*a9fa9459Szrj@table @gcctabopt
1649*a9fa9459Szrj@item -m31
1650*a9fa9459Szrj@itemx -m64
1651*a9fa9459SzrjSelect the word size, either 31/32 bits or 64 bits.
1652*a9fa9459Szrj@item -mesa
1653*a9fa9459Szrj@item -mzarch
1654*a9fa9459SzrjSelect the architecture mode, either the Enterprise System
1655*a9fa9459SzrjArchitecture (esa) or the z/Architecture mode (zarch).
1656*a9fa9459Szrj@item -march=@var{processor}
1657*a9fa9459SzrjSpecify which s390 processor variant is the target, @samp{g6}, @samp{g6},
1658*a9fa9459Szrj@samp{z900}, @samp{z990}, @samp{z9-109}, @samp{z9-ec}, @samp{z10},
1659*a9fa9459Szrj@samp{z196}, @samp{zEC12}, or @samp{z13}.
1660*a9fa9459Szrj@item -mregnames
1661*a9fa9459Szrj@itemx -mno-regnames
1662*a9fa9459SzrjAllow or disallow symbolic names for registers.
1663*a9fa9459Szrj@item -mwarn-areg-zero
1664*a9fa9459SzrjWarn whenever the operand for a base or index register has been specified
1665*a9fa9459Szrjbut evaluates to zero.
1666*a9fa9459Szrj@end table
1667*a9fa9459Szrj@end ifset
1668*a9fa9459Szrj@c man end
1669*a9fa9459Szrj
1670*a9fa9459Szrj@ifset TIC6X
1671*a9fa9459Szrj
1672*a9fa9459Szrj@ifclear man
1673*a9fa9459Szrj@xref{TIC6X Options}, for the options available when @value{AS} is configured
1674*a9fa9459Szrjfor a TMS320C6000 processor.
1675*a9fa9459Szrj@end ifclear
1676*a9fa9459Szrj
1677*a9fa9459Szrj@ifset man
1678*a9fa9459Szrj@c man begin OPTIONS
1679*a9fa9459SzrjThe following options are available when @value{AS} is configured for a
1680*a9fa9459SzrjTMS320C6000 processor.
1681*a9fa9459Szrj@c man end
1682*a9fa9459Szrj@c man begin INCLUDE
1683*a9fa9459Szrj@include c-tic6x.texi
1684*a9fa9459Szrj@c ended inside the included file
1685*a9fa9459Szrj@end ifset
1686*a9fa9459Szrj
1687*a9fa9459Szrj@end ifset
1688*a9fa9459Szrj
1689*a9fa9459Szrj@ifset TILEGX
1690*a9fa9459Szrj
1691*a9fa9459Szrj@ifclear man
1692*a9fa9459Szrj@xref{TILE-Gx Options}, for the options available when @value{AS} is configured
1693*a9fa9459Szrjfor a TILE-Gx processor.
1694*a9fa9459Szrj@end ifclear
1695*a9fa9459Szrj
1696*a9fa9459Szrj@ifset man
1697*a9fa9459Szrj@c man begin OPTIONS
1698*a9fa9459SzrjThe following options are available when @value{AS} is configured for a TILE-Gx
1699*a9fa9459Szrjprocessor.
1700*a9fa9459Szrj@c man end
1701*a9fa9459Szrj@c man begin INCLUDE
1702*a9fa9459Szrj@include c-tilegx.texi
1703*a9fa9459Szrj@c ended inside the included file
1704*a9fa9459Szrj@end ifset
1705*a9fa9459Szrj
1706*a9fa9459Szrj@end ifset
1707*a9fa9459Szrj
1708*a9fa9459Szrj@ifset VISIUM
1709*a9fa9459Szrj
1710*a9fa9459Szrj@ifclear man
1711*a9fa9459Szrj@xref{Visium Options}, for the options available when @value{AS} is configured
1712*a9fa9459Szrjfor a Visium processor.
1713*a9fa9459Szrj@end ifclear
1714*a9fa9459Szrj
1715*a9fa9459Szrj@ifset man
1716*a9fa9459Szrj@c man begin OPTIONS
1717*a9fa9459SzrjThe following option is available when @value{AS} is configured for a Visium
1718*a9fa9459Szrjprocessor.
1719*a9fa9459Szrj@c man end
1720*a9fa9459Szrj@c man begin INCLUDE
1721*a9fa9459Szrj@include c-visium.texi
1722*a9fa9459Szrj@c ended inside the included file
1723*a9fa9459Szrj@end ifset
1724*a9fa9459Szrj
1725*a9fa9459Szrj@end ifset
1726*a9fa9459Szrj
1727*a9fa9459Szrj@ifset XTENSA
1728*a9fa9459Szrj
1729*a9fa9459Szrj@ifclear man
1730*a9fa9459Szrj@xref{Xtensa Options}, for the options available when @value{AS} is configured
1731*a9fa9459Szrjfor an Xtensa processor.
1732*a9fa9459Szrj@end ifclear
1733*a9fa9459Szrj
1734*a9fa9459Szrj@ifset man
1735*a9fa9459Szrj@c man begin OPTIONS
1736*a9fa9459SzrjThe following options are available when @value{AS} is configured for an
1737*a9fa9459SzrjXtensa processor.
1738*a9fa9459Szrj@c man end
1739*a9fa9459Szrj@c man begin INCLUDE
1740*a9fa9459Szrj@include c-xtensa.texi
1741*a9fa9459Szrj@c ended inside the included file
1742*a9fa9459Szrj@end ifset
1743*a9fa9459Szrj
1744*a9fa9459Szrj@end ifset
1745*a9fa9459Szrj
1746*a9fa9459Szrj@c man begin OPTIONS
1747*a9fa9459Szrj
1748*a9fa9459Szrj@ifset Z80
1749*a9fa9459SzrjThe following options are available when @value{AS} is configured for
1750*a9fa9459Szrja Z80 family processor.
1751*a9fa9459Szrj@table @gcctabopt
1752*a9fa9459Szrj@item -z80
1753*a9fa9459SzrjAssemble for Z80 processor.
1754*a9fa9459Szrj@item -r800
1755*a9fa9459SzrjAssemble for R800 processor.
1756*a9fa9459Szrj@item  -ignore-undocumented-instructions
1757*a9fa9459Szrj@itemx -Wnud
1758*a9fa9459SzrjAssemble undocumented Z80 instructions that also work on R800 without warning.
1759*a9fa9459Szrj@item  -ignore-unportable-instructions
1760*a9fa9459Szrj@itemx -Wnup
1761*a9fa9459SzrjAssemble all undocumented Z80 instructions without warning.
1762*a9fa9459Szrj@item  -warn-undocumented-instructions
1763*a9fa9459Szrj@itemx -Wud
1764*a9fa9459SzrjIssue a warning for undocumented Z80 instructions that also work on R800.
1765*a9fa9459Szrj@item  -warn-unportable-instructions
1766*a9fa9459Szrj@itemx -Wup
1767*a9fa9459SzrjIssue a warning for undocumented Z80 instructions that do not work on R800.
1768*a9fa9459Szrj@item  -forbid-undocumented-instructions
1769*a9fa9459Szrj@itemx -Fud
1770*a9fa9459SzrjTreat all undocumented instructions as errors.
1771*a9fa9459Szrj@item  -forbid-unportable-instructions
1772*a9fa9459Szrj@itemx -Fup
1773*a9fa9459SzrjTreat undocumented Z80 instructions that do not work on R800 as errors.
1774*a9fa9459Szrj@end table
1775*a9fa9459Szrj@end ifset
1776*a9fa9459Szrj
1777*a9fa9459Szrj@c man end
1778*a9fa9459Szrj
1779*a9fa9459Szrj@menu
1780*a9fa9459Szrj* Manual::                      Structure of this Manual
1781*a9fa9459Szrj* GNU Assembler::               The GNU Assembler
1782*a9fa9459Szrj* Object Formats::              Object File Formats
1783*a9fa9459Szrj* Command Line::                Command Line
1784*a9fa9459Szrj* Input Files::                 Input Files
1785*a9fa9459Szrj* Object::                      Output (Object) File
1786*a9fa9459Szrj* Errors::                      Error and Warning Messages
1787*a9fa9459Szrj@end menu
1788*a9fa9459Szrj
1789*a9fa9459Szrj@node Manual
1790*a9fa9459Szrj@section Structure of this Manual
1791*a9fa9459Szrj
1792*a9fa9459Szrj@cindex manual, structure and purpose
1793*a9fa9459SzrjThis manual is intended to describe what you need to know to use
1794*a9fa9459Szrj@sc{gnu} @command{@value{AS}}.  We cover the syntax expected in source files, including
1795*a9fa9459Szrjnotation for symbols, constants, and expressions; the directives that
1796*a9fa9459Szrj@command{@value{AS}} understands; and of course how to invoke @command{@value{AS}}.
1797*a9fa9459Szrj
1798*a9fa9459Szrj@ifclear GENERIC
1799*a9fa9459SzrjWe also cover special features in the @value{TARGET}
1800*a9fa9459Szrjconfiguration of @command{@value{AS}}, including assembler directives.
1801*a9fa9459Szrj@end ifclear
1802*a9fa9459Szrj@ifset GENERIC
1803*a9fa9459SzrjThis manual also describes some of the machine-dependent features of
1804*a9fa9459Szrjvarious flavors of the assembler.
1805*a9fa9459Szrj@end ifset
1806*a9fa9459Szrj
1807*a9fa9459Szrj@cindex machine instructions (not covered)
1808*a9fa9459SzrjOn the other hand, this manual is @emph{not} intended as an introduction
1809*a9fa9459Szrjto programming in assembly language---let alone programming in general!
1810*a9fa9459SzrjIn a similar vein, we make no attempt to introduce the machine
1811*a9fa9459Szrjarchitecture; we do @emph{not} describe the instruction set, standard
1812*a9fa9459Szrjmnemonics, registers or addressing modes that are standard to a
1813*a9fa9459Szrjparticular architecture.
1814*a9fa9459Szrj@ifset GENERIC
1815*a9fa9459SzrjYou may want to consult the manufacturer's
1816*a9fa9459Szrjmachine architecture manual for this information.
1817*a9fa9459Szrj@end ifset
1818*a9fa9459Szrj@ifclear GENERIC
1819*a9fa9459Szrj@ifset H8/300
1820*a9fa9459SzrjFor information on the H8/300 machine instruction set, see @cite{H8/300
1821*a9fa9459SzrjSeries Programming Manual}.  For the H8/300H, see @cite{H8/300H Series
1822*a9fa9459SzrjProgramming Manual} (Renesas).
1823*a9fa9459Szrj@end ifset
1824*a9fa9459Szrj@ifset SH
1825*a9fa9459SzrjFor information on the Renesas (formerly Hitachi) / SuperH SH machine instruction set,
1826*a9fa9459Szrjsee @cite{SH-Microcomputer User's Manual} (Renesas) or
1827*a9fa9459Szrj@cite{SH-4 32-bit CPU Core Architecture} (SuperH) and
1828*a9fa9459Szrj@cite{SuperH (SH) 64-Bit RISC Series} (SuperH).
1829*a9fa9459Szrj@end ifset
1830*a9fa9459Szrj@ifset Z8000
1831*a9fa9459SzrjFor information on the Z8000 machine instruction set, see @cite{Z8000 CPU Technical Manual}
1832*a9fa9459Szrj@end ifset
1833*a9fa9459Szrj@end ifclear
1834*a9fa9459Szrj
1835*a9fa9459Szrj@c I think this is premature---doc@cygnus.com, 17jan1991
1836*a9fa9459Szrj@ignore
1837*a9fa9459SzrjThroughout this manual, we assume that you are running @dfn{GNU},
1838*a9fa9459Szrjthe portable operating system from the @dfn{Free Software
1839*a9fa9459SzrjFoundation, Inc.}.  This restricts our attention to certain kinds of
1840*a9fa9459Szrjcomputer (in particular, the kinds of computers that @sc{gnu} can run on);
1841*a9fa9459Szrjonce this assumption is granted examples and definitions need less
1842*a9fa9459Szrjqualification.
1843*a9fa9459Szrj
1844*a9fa9459Szrj@command{@value{AS}} is part of a team of programs that turn a high-level
1845*a9fa9459Szrjhuman-readable series of instructions into a low-level
1846*a9fa9459Szrjcomputer-readable series of instructions.  Different versions of
1847*a9fa9459Szrj@command{@value{AS}} are used for different kinds of computer.
1848*a9fa9459Szrj@end ignore
1849*a9fa9459Szrj
1850*a9fa9459Szrj@c There used to be a section "Terminology" here, which defined
1851*a9fa9459Szrj@c "contents", "byte", "word", and "long".  Defining "word" to any
1852*a9fa9459Szrj@c particular size is confusing when the .word directive may generate 16
1853*a9fa9459Szrj@c bits on one machine and 32 bits on another; in general, for the user
1854*a9fa9459Szrj@c version of this manual, none of these terms seem essential to define.
1855*a9fa9459Szrj@c They were used very little even in the former draft of the manual;
1856*a9fa9459Szrj@c this draft makes an effort to avoid them (except in names of
1857*a9fa9459Szrj@c directives).
1858*a9fa9459Szrj
1859*a9fa9459Szrj@node GNU Assembler
1860*a9fa9459Szrj@section The GNU Assembler
1861*a9fa9459Szrj
1862*a9fa9459Szrj@c man begin DESCRIPTION
1863*a9fa9459Szrj
1864*a9fa9459Szrj@sc{gnu} @command{as} is really a family of assemblers.
1865*a9fa9459Szrj@ifclear GENERIC
1866*a9fa9459SzrjThis manual describes @command{@value{AS}}, a member of that family which is
1867*a9fa9459Szrjconfigured for the @value{TARGET} architectures.
1868*a9fa9459Szrj@end ifclear
1869*a9fa9459SzrjIf you use (or have used) the @sc{gnu} assembler on one architecture, you
1870*a9fa9459Szrjshould find a fairly similar environment when you use it on another
1871*a9fa9459Szrjarchitecture.  Each version has much in common with the others,
1872*a9fa9459Szrjincluding object file formats, most assembler directives (often called
1873*a9fa9459Szrj@dfn{pseudo-ops}) and assembler syntax.@refill
1874*a9fa9459Szrj
1875*a9fa9459Szrj@cindex purpose of @sc{gnu} assembler
1876*a9fa9459Szrj@command{@value{AS}} is primarily intended to assemble the output of the
1877*a9fa9459Szrj@sc{gnu} C compiler @code{@value{GCC}} for use by the linker
1878*a9fa9459Szrj@code{@value{LD}}.  Nevertheless, we've tried to make @command{@value{AS}}
1879*a9fa9459Szrjassemble correctly everything that other assemblers for the same
1880*a9fa9459Szrjmachine would assemble.
1881*a9fa9459Szrj@ifset VAX
1882*a9fa9459SzrjAny exceptions are documented explicitly (@pxref{Machine Dependencies}).
1883*a9fa9459Szrj@end ifset
1884*a9fa9459Szrj@ifset M680X0
1885*a9fa9459Szrj@c This remark should appear in generic version of manual; assumption
1886*a9fa9459Szrj@c here is that generic version sets M680x0.
1887*a9fa9459SzrjThis doesn't mean @command{@value{AS}} always uses the same syntax as another
1888*a9fa9459Szrjassembler for the same architecture; for example, we know of several
1889*a9fa9459Szrjincompatible versions of 680x0 assembly language syntax.
1890*a9fa9459Szrj@end ifset
1891*a9fa9459Szrj
1892*a9fa9459Szrj@c man end
1893*a9fa9459Szrj
1894*a9fa9459SzrjUnlike older assemblers, @command{@value{AS}} is designed to assemble a source
1895*a9fa9459Szrjprogram in one pass of the source file.  This has a subtle impact on the
1896*a9fa9459Szrj@kbd{.org} directive (@pxref{Org,,@code{.org}}).
1897*a9fa9459Szrj
1898*a9fa9459Szrj@node Object Formats
1899*a9fa9459Szrj@section Object File Formats
1900*a9fa9459Szrj
1901*a9fa9459Szrj@cindex object file format
1902*a9fa9459SzrjThe @sc{gnu} assembler can be configured to produce several alternative
1903*a9fa9459Szrjobject file formats.  For the most part, this does not affect how you
1904*a9fa9459Szrjwrite assembly language programs; but directives for debugging symbols
1905*a9fa9459Szrjare typically different in different file formats.  @xref{Symbol
1906*a9fa9459SzrjAttributes,,Symbol Attributes}.
1907*a9fa9459Szrj@ifclear GENERIC
1908*a9fa9459Szrj@ifclear MULTI-OBJ
1909*a9fa9459SzrjFor the @value{TARGET} target, @command{@value{AS}} is configured to produce
1910*a9fa9459Szrj@value{OBJ-NAME} format object files.
1911*a9fa9459Szrj@end ifclear
1912*a9fa9459Szrj@c The following should exhaust all configs that set MULTI-OBJ, ideally
1913*a9fa9459Szrj@ifset I960
1914*a9fa9459SzrjOn the @value{TARGET}, @command{@value{AS}} can be configured to produce either
1915*a9fa9459Szrj@code{b.out} or COFF format object files.
1916*a9fa9459Szrj@end ifset
1917*a9fa9459Szrj@ifset HPPA
1918*a9fa9459SzrjOn the @value{TARGET}, @command{@value{AS}} can be configured to produce either
1919*a9fa9459SzrjSOM or ELF format object files.
1920*a9fa9459Szrj@end ifset
1921*a9fa9459Szrj@end ifclear
1922*a9fa9459Szrj
1923*a9fa9459Szrj@node Command Line
1924*a9fa9459Szrj@section Command Line
1925*a9fa9459Szrj
1926*a9fa9459Szrj@cindex command line conventions
1927*a9fa9459Szrj
1928*a9fa9459SzrjAfter the program name @command{@value{AS}}, the command line may contain
1929*a9fa9459Szrjoptions and file names.  Options may appear in any order, and may be
1930*a9fa9459Szrjbefore, after, or between file names.  The order of file names is
1931*a9fa9459Szrjsignificant.
1932*a9fa9459Szrj
1933*a9fa9459Szrj@cindex standard input, as input file
1934*a9fa9459Szrj@kindex --
1935*a9fa9459Szrj@file{--} (two hyphens) by itself names the standard input file
1936*a9fa9459Szrjexplicitly, as one of the files for @command{@value{AS}} to assemble.
1937*a9fa9459Szrj
1938*a9fa9459Szrj@cindex options, command line
1939*a9fa9459SzrjExcept for @samp{--} any command line argument that begins with a
1940*a9fa9459Szrjhyphen (@samp{-}) is an option.  Each option changes the behavior of
1941*a9fa9459Szrj@command{@value{AS}}.  No option changes the way another option works.  An
1942*a9fa9459Szrjoption is a @samp{-} followed by one or more letters; the case of
1943*a9fa9459Szrjthe letter is important.   All options are optional.
1944*a9fa9459Szrj
1945*a9fa9459SzrjSome options expect exactly one file name to follow them.  The file
1946*a9fa9459Szrjname may either immediately follow the option's letter (compatible
1947*a9fa9459Szrjwith older assemblers) or it may be the next command argument (@sc{gnu}
1948*a9fa9459Szrjstandard).  These two command lines are equivalent:
1949*a9fa9459Szrj
1950*a9fa9459Szrj@smallexample
1951*a9fa9459Szrj@value{AS} -o my-object-file.o mumble.s
1952*a9fa9459Szrj@value{AS} -omy-object-file.o mumble.s
1953*a9fa9459Szrj@end smallexample
1954*a9fa9459Szrj
1955*a9fa9459Szrj@node Input Files
1956*a9fa9459Szrj@section Input Files
1957*a9fa9459Szrj
1958*a9fa9459Szrj@cindex input
1959*a9fa9459Szrj@cindex source program
1960*a9fa9459Szrj@cindex files, input
1961*a9fa9459SzrjWe use the phrase @dfn{source program}, abbreviated @dfn{source}, to
1962*a9fa9459Szrjdescribe the program input to one run of @command{@value{AS}}.  The program may
1963*a9fa9459Szrjbe in one or more files; how the source is partitioned into files
1964*a9fa9459Szrjdoesn't change the meaning of the source.
1965*a9fa9459Szrj
1966*a9fa9459Szrj@c I added "con" prefix to "catenation" just to prove I can overcome my
1967*a9fa9459Szrj@c APL training...   doc@cygnus.com
1968*a9fa9459SzrjThe source program is a concatenation of the text in all the files, in the
1969*a9fa9459Szrjorder specified.
1970*a9fa9459Szrj
1971*a9fa9459Szrj@c man begin DESCRIPTION
1972*a9fa9459SzrjEach time you run @command{@value{AS}} it assembles exactly one source
1973*a9fa9459Szrjprogram.  The source program is made up of one or more files.
1974*a9fa9459Szrj(The standard input is also a file.)
1975*a9fa9459Szrj
1976*a9fa9459SzrjYou give @command{@value{AS}} a command line that has zero or more input file
1977*a9fa9459Szrjnames.  The input files are read (from left file name to right).  A
1978*a9fa9459Szrjcommand line argument (in any position) that has no special meaning
1979*a9fa9459Szrjis taken to be an input file name.
1980*a9fa9459Szrj
1981*a9fa9459SzrjIf you give @command{@value{AS}} no file names it attempts to read one input file
1982*a9fa9459Szrjfrom the @command{@value{AS}} standard input, which is normally your terminal.  You
1983*a9fa9459Szrjmay have to type @key{ctl-D} to tell @command{@value{AS}} there is no more program
1984*a9fa9459Szrjto assemble.
1985*a9fa9459Szrj
1986*a9fa9459SzrjUse @samp{--} if you need to explicitly name the standard input file
1987*a9fa9459Szrjin your command line.
1988*a9fa9459Szrj
1989*a9fa9459SzrjIf the source is empty, @command{@value{AS}} produces a small, empty object
1990*a9fa9459Szrjfile.
1991*a9fa9459Szrj
1992*a9fa9459Szrj@c man end
1993*a9fa9459Szrj
1994*a9fa9459Szrj@subheading Filenames and Line-numbers
1995*a9fa9459Szrj
1996*a9fa9459Szrj@cindex input file linenumbers
1997*a9fa9459Szrj@cindex line numbers, in input files
1998*a9fa9459SzrjThere are two ways of locating a line in the input file (or files) and
1999*a9fa9459Szrjeither may be used in reporting error messages.  One way refers to a line
2000*a9fa9459Szrjnumber in a physical file; the other refers to a line number in a
2001*a9fa9459Szrj``logical'' file.  @xref{Errors, ,Error and Warning Messages}.
2002*a9fa9459Szrj
2003*a9fa9459Szrj@dfn{Physical files} are those files named in the command line given
2004*a9fa9459Szrjto @command{@value{AS}}.
2005*a9fa9459Szrj
2006*a9fa9459Szrj@dfn{Logical files} are simply names declared explicitly by assembler
2007*a9fa9459Szrjdirectives; they bear no relation to physical files.  Logical file names help
2008*a9fa9459Szrjerror messages reflect the original source file, when @command{@value{AS}} source
2009*a9fa9459Szrjis itself synthesized from other files.  @command{@value{AS}} understands the
2010*a9fa9459Szrj@samp{#} directives emitted by the @code{@value{GCC}} preprocessor.  See also
2011*a9fa9459Szrj@ref{File,,@code{.file}}.
2012*a9fa9459Szrj
2013*a9fa9459Szrj@node Object
2014*a9fa9459Szrj@section Output (Object) File
2015*a9fa9459Szrj
2016*a9fa9459Szrj@cindex object file
2017*a9fa9459Szrj@cindex output file
2018*a9fa9459Szrj@kindex a.out
2019*a9fa9459Szrj@kindex .o
2020*a9fa9459SzrjEvery time you run @command{@value{AS}} it produces an output file, which is
2021*a9fa9459Szrjyour assembly language program translated into numbers.  This file
2022*a9fa9459Szrjis the object file.  Its default name is
2023*a9fa9459Szrj@ifclear BOUT
2024*a9fa9459Szrj@code{a.out}.
2025*a9fa9459Szrj@end ifclear
2026*a9fa9459Szrj@ifset BOUT
2027*a9fa9459Szrj@ifset GENERIC
2028*a9fa9459Szrj@code{a.out}, or
2029*a9fa9459Szrj@end ifset
2030*a9fa9459Szrj@code{b.out} when @command{@value{AS}} is configured for the Intel 80960.
2031*a9fa9459Szrj@end ifset
2032*a9fa9459SzrjYou can give it another name by using the @option{-o} option.  Conventionally,
2033*a9fa9459Szrjobject file names end with @file{.o}.  The default name is used for historical
2034*a9fa9459Szrjreasons: older assemblers were capable of assembling self-contained programs
2035*a9fa9459Szrjdirectly into a runnable program.  (For some formats, this isn't currently
2036*a9fa9459Szrjpossible, but it can be done for the @code{a.out} format.)
2037*a9fa9459Szrj
2038*a9fa9459Szrj@cindex linker
2039*a9fa9459Szrj@kindex ld
2040*a9fa9459SzrjThe object file is meant for input to the linker @code{@value{LD}}.  It contains
2041*a9fa9459Szrjassembled program code, information to help @code{@value{LD}} integrate
2042*a9fa9459Szrjthe assembled program into a runnable file, and (optionally) symbolic
2043*a9fa9459Szrjinformation for the debugger.
2044*a9fa9459Szrj
2045*a9fa9459Szrj@c link above to some info file(s) like the description of a.out.
2046*a9fa9459Szrj@c don't forget to describe @sc{gnu} info as well as Unix lossage.
2047*a9fa9459Szrj
2048*a9fa9459Szrj@node Errors
2049*a9fa9459Szrj@section Error and Warning Messages
2050*a9fa9459Szrj
2051*a9fa9459Szrj@c man begin DESCRIPTION
2052*a9fa9459Szrj
2053*a9fa9459Szrj@cindex error messages
2054*a9fa9459Szrj@cindex warning messages
2055*a9fa9459Szrj@cindex messages from assembler
2056*a9fa9459Szrj@command{@value{AS}} may write warnings and error messages to the standard error
2057*a9fa9459Szrjfile (usually your terminal).  This should not happen when  a compiler
2058*a9fa9459Szrjruns @command{@value{AS}} automatically.  Warnings report an assumption made so
2059*a9fa9459Szrjthat @command{@value{AS}} could keep assembling a flawed program; errors report a
2060*a9fa9459Szrjgrave problem that stops the assembly.
2061*a9fa9459Szrj
2062*a9fa9459Szrj@c man end
2063*a9fa9459Szrj
2064*a9fa9459Szrj@cindex format of warning messages
2065*a9fa9459SzrjWarning messages have the format
2066*a9fa9459Szrj
2067*a9fa9459Szrj@smallexample
2068*a9fa9459Szrjfile_name:@b{NNN}:Warning Message Text
2069*a9fa9459Szrj@end smallexample
2070*a9fa9459Szrj
2071*a9fa9459Szrj@noindent
2072*a9fa9459Szrj@cindex file names and line numbers, in warnings/errors
2073*a9fa9459Szrj(where @b{NNN} is a line number).  If both a logical file name
2074*a9fa9459Szrj(@pxref{File,,@code{.file}}) and a logical line number
2075*a9fa9459Szrj@ifset GENERIC
2076*a9fa9459Szrj(@pxref{Line,,@code{.line}})
2077*a9fa9459Szrj@end ifset
2078*a9fa9459Szrjhave been given then they will be used, otherwise the file name and line number
2079*a9fa9459Szrjin the current assembler source file will be used.  The message text is
2080*a9fa9459Szrjintended to be self explanatory (in the grand Unix tradition).
2081*a9fa9459Szrj
2082*a9fa9459SzrjNote the file name must be set via the logical version of the @code{.file}
2083*a9fa9459Szrjdirective, not the DWARF2 version of the @code{.file} directive.  For example:
2084*a9fa9459Szrj
2085*a9fa9459Szrj@smallexample
2086*a9fa9459Szrj  .file 2 "bar.c"
2087*a9fa9459Szrj     error_assembler_source
2088*a9fa9459Szrj  .file "foo.c"
2089*a9fa9459Szrj  .line 30
2090*a9fa9459Szrj      error_c_source
2091*a9fa9459Szrj@end smallexample
2092*a9fa9459Szrj
2093*a9fa9459Szrjproduces this output:
2094*a9fa9459Szrj
2095*a9fa9459Szrj@smallexample
2096*a9fa9459Szrj  Assembler messages:
2097*a9fa9459Szrj  asm.s:2: Error: no such instruction: `error_assembler_source'
2098*a9fa9459Szrj  foo.c:31: Error: no such instruction: `error_c_source'
2099*a9fa9459Szrj@end smallexample
2100*a9fa9459Szrj
2101*a9fa9459Szrj@cindex format of error messages
2102*a9fa9459SzrjError messages have the format
2103*a9fa9459Szrj
2104*a9fa9459Szrj@smallexample
2105*a9fa9459Szrjfile_name:@b{NNN}:FATAL:Error Message Text
2106*a9fa9459Szrj@end smallexample
2107*a9fa9459Szrj
2108*a9fa9459SzrjThe file name and line number are derived as for warning
2109*a9fa9459Szrjmessages.  The actual message text may be rather less explanatory
2110*a9fa9459Szrjbecause many of them aren't supposed to happen.
2111*a9fa9459Szrj
2112*a9fa9459Szrj@node Invoking
2113*a9fa9459Szrj@chapter Command-Line Options
2114*a9fa9459Szrj
2115*a9fa9459Szrj@cindex options, all versions of assembler
2116*a9fa9459SzrjThis chapter describes command-line options available in @emph{all}
2117*a9fa9459Szrjversions of the @sc{gnu} assembler; see @ref{Machine Dependencies},
2118*a9fa9459Szrjfor options specific
2119*a9fa9459Szrj@ifclear GENERIC
2120*a9fa9459Szrjto the @value{TARGET} target.
2121*a9fa9459Szrj@end ifclear
2122*a9fa9459Szrj@ifset GENERIC
2123*a9fa9459Szrjto particular machine architectures.
2124*a9fa9459Szrj@end ifset
2125*a9fa9459Szrj
2126*a9fa9459Szrj@c man begin DESCRIPTION
2127*a9fa9459Szrj
2128*a9fa9459SzrjIf you are invoking @command{@value{AS}} via the @sc{gnu} C compiler,
2129*a9fa9459Szrjyou can use the @samp{-Wa} option to pass arguments through to the assembler.
2130*a9fa9459SzrjThe assembler arguments must be separated from each other (and the @samp{-Wa})
2131*a9fa9459Szrjby commas.  For example:
2132*a9fa9459Szrj
2133*a9fa9459Szrj@smallexample
2134*a9fa9459Szrjgcc -c -g -O -Wa,-alh,-L file.c
2135*a9fa9459Szrj@end smallexample
2136*a9fa9459Szrj
2137*a9fa9459Szrj@noindent
2138*a9fa9459SzrjThis passes two options to the assembler: @samp{-alh} (emit a listing to
2139*a9fa9459Szrjstandard output with high-level and assembly source) and @samp{-L} (retain
2140*a9fa9459Szrjlocal symbols in the symbol table).
2141*a9fa9459Szrj
2142*a9fa9459SzrjUsually you do not need to use this @samp{-Wa} mechanism, since many compiler
2143*a9fa9459Szrjcommand-line options are automatically passed to the assembler by the compiler.
2144*a9fa9459Szrj(You can call the @sc{gnu} compiler driver with the @samp{-v} option to see
2145*a9fa9459Szrjprecisely what options it passes to each compilation pass, including the
2146*a9fa9459Szrjassembler.)
2147*a9fa9459Szrj
2148*a9fa9459Szrj@c man end
2149*a9fa9459Szrj
2150*a9fa9459Szrj@menu
2151*a9fa9459Szrj* a::             -a[cdghlns] enable listings
2152*a9fa9459Szrj* alternate::     --alternate enable alternate macro syntax
2153*a9fa9459Szrj* D::             -D for compatibility
2154*a9fa9459Szrj* f::             -f to work faster
2155*a9fa9459Szrj* I::             -I for .include search path
2156*a9fa9459Szrj@ifclear DIFF-TBL-KLUGE
2157*a9fa9459Szrj* K::             -K for compatibility
2158*a9fa9459Szrj@end ifclear
2159*a9fa9459Szrj@ifset DIFF-TBL-KLUGE
2160*a9fa9459Szrj* K::             -K for difference tables
2161*a9fa9459Szrj@end ifset
2162*a9fa9459Szrj
2163*a9fa9459Szrj* L::             -L to retain local symbols
2164*a9fa9459Szrj* listing::       --listing-XXX to configure listing output
2165*a9fa9459Szrj* M::		  -M or --mri to assemble in MRI compatibility mode
2166*a9fa9459Szrj* MD::            --MD for dependency tracking
2167*a9fa9459Szrj* no-pad-sections:: --no-pad-sections to stop section padding
2168*a9fa9459Szrj* o::             -o to name the object file
2169*a9fa9459Szrj* R::             -R to join data and text sections
2170*a9fa9459Szrj* statistics::    --statistics to see statistics about assembly
2171*a9fa9459Szrj* traditional-format:: --traditional-format for compatible output
2172*a9fa9459Szrj* v::             -v to announce version
2173*a9fa9459Szrj* W::             -W, --no-warn, --warn, --fatal-warnings to control warnings
2174*a9fa9459Szrj* Z::             -Z to make object file even after errors
2175*a9fa9459Szrj@end menu
2176*a9fa9459Szrj
2177*a9fa9459Szrj@node a
2178*a9fa9459Szrj@section Enable Listings: @option{-a[cdghlns]}
2179*a9fa9459Szrj
2180*a9fa9459Szrj@kindex -a
2181*a9fa9459Szrj@kindex -ac
2182*a9fa9459Szrj@kindex -ad
2183*a9fa9459Szrj@kindex -ag
2184*a9fa9459Szrj@kindex -ah
2185*a9fa9459Szrj@kindex -al
2186*a9fa9459Szrj@kindex -an
2187*a9fa9459Szrj@kindex -as
2188*a9fa9459Szrj@cindex listings, enabling
2189*a9fa9459Szrj@cindex assembly listings, enabling
2190*a9fa9459Szrj
2191*a9fa9459SzrjThese options enable listing output from the assembler.  By itself,
2192*a9fa9459Szrj@samp{-a} requests high-level, assembly, and symbols listing.
2193*a9fa9459SzrjYou can use other letters to select specific options for the list:
2194*a9fa9459Szrj@samp{-ah} requests a high-level language listing,
2195*a9fa9459Szrj@samp{-al} requests an output-program assembly listing, and
2196*a9fa9459Szrj@samp{-as} requests a symbol table listing.
2197*a9fa9459SzrjHigh-level listings require that a compiler debugging option like
2198*a9fa9459Szrj@samp{-g} be used, and that assembly listings (@samp{-al}) be requested
2199*a9fa9459Szrjalso.
2200*a9fa9459Szrj
2201*a9fa9459SzrjUse the @samp{-ag} option to print a first section with general assembly
2202*a9fa9459Szrjinformation, like @value{AS} version, switches passed, or time stamp.
2203*a9fa9459Szrj
2204*a9fa9459SzrjUse the @samp{-ac} option to omit false conditionals from a listing.  Any lines
2205*a9fa9459Szrjwhich are not assembled because of a false @code{.if} (or @code{.ifdef}, or any
2206*a9fa9459Szrjother conditional), or a true @code{.if} followed by an @code{.else}, will be
2207*a9fa9459Szrjomitted from the listing.
2208*a9fa9459Szrj
2209*a9fa9459SzrjUse the @samp{-ad} option to omit debugging directives from the
2210*a9fa9459Szrjlisting.
2211*a9fa9459Szrj
2212*a9fa9459SzrjOnce you have specified one of these options, you can further control
2213*a9fa9459Szrjlisting output and its appearance using the directives @code{.list},
2214*a9fa9459Szrj@code{.nolist}, @code{.psize}, @code{.eject}, @code{.title}, and
2215*a9fa9459Szrj@code{.sbttl}.
2216*a9fa9459SzrjThe @samp{-an} option turns off all forms processing.
2217*a9fa9459SzrjIf you do not request listing output with one of the @samp{-a} options, the
2218*a9fa9459Szrjlisting-control directives have no effect.
2219*a9fa9459Szrj
2220*a9fa9459SzrjThe letters after @samp{-a} may be combined into one option,
2221*a9fa9459Szrj@emph{e.g.}, @samp{-aln}.
2222*a9fa9459Szrj
2223*a9fa9459SzrjNote if the assembler source is coming from the standard input (e.g.,
2224*a9fa9459Szrjbecause it
2225*a9fa9459Szrjis being created by @code{@value{GCC}} and the @samp{-pipe} command line switch
2226*a9fa9459Szrjis being used) then the listing will not contain any comments or preprocessor
2227*a9fa9459Szrjdirectives.  This is because the listing code buffers input source lines from
2228*a9fa9459Szrjstdin only after they have been preprocessed by the assembler.  This reduces
2229*a9fa9459Szrjmemory usage and makes the code more efficient.
2230*a9fa9459Szrj
2231*a9fa9459Szrj@node alternate
2232*a9fa9459Szrj@section @option{--alternate}
2233*a9fa9459Szrj
2234*a9fa9459Szrj@kindex --alternate
2235*a9fa9459SzrjBegin in alternate macro mode, see @ref{Altmacro,,@code{.altmacro}}.
2236*a9fa9459Szrj
2237*a9fa9459Szrj@node D
2238*a9fa9459Szrj@section @option{-D}
2239*a9fa9459Szrj
2240*a9fa9459Szrj@kindex -D
2241*a9fa9459SzrjThis option has no effect whatsoever, but it is accepted to make it more
2242*a9fa9459Szrjlikely that scripts written for other assemblers also work with
2243*a9fa9459Szrj@command{@value{AS}}.
2244*a9fa9459Szrj
2245*a9fa9459Szrj@node f
2246*a9fa9459Szrj@section Work Faster: @option{-f}
2247*a9fa9459Szrj
2248*a9fa9459Szrj@kindex -f
2249*a9fa9459Szrj@cindex trusted compiler
2250*a9fa9459Szrj@cindex faster processing (@option{-f})
2251*a9fa9459Szrj@samp{-f} should only be used when assembling programs written by a
2252*a9fa9459Szrj(trusted) compiler.  @samp{-f} stops the assembler from doing whitespace
2253*a9fa9459Szrjand comment preprocessing on
2254*a9fa9459Szrjthe input file(s) before assembling them.  @xref{Preprocessing,
2255*a9fa9459Szrj,Preprocessing}.
2256*a9fa9459Szrj
2257*a9fa9459Szrj@quotation
2258*a9fa9459Szrj@emph{Warning:} if you use @samp{-f} when the files actually need to be
2259*a9fa9459Szrjpreprocessed (if they contain comments, for example), @command{@value{AS}} does
2260*a9fa9459Szrjnot work correctly.
2261*a9fa9459Szrj@end quotation
2262*a9fa9459Szrj
2263*a9fa9459Szrj@node I
2264*a9fa9459Szrj@section @code{.include} Search Path: @option{-I} @var{path}
2265*a9fa9459Szrj
2266*a9fa9459Szrj@kindex -I @var{path}
2267*a9fa9459Szrj@cindex paths for @code{.include}
2268*a9fa9459Szrj@cindex search path for @code{.include}
2269*a9fa9459Szrj@cindex @code{include} directive search path
2270*a9fa9459SzrjUse this option to add a @var{path} to the list of directories
2271*a9fa9459Szrj@command{@value{AS}} searches for files specified in @code{.include}
2272*a9fa9459Szrjdirectives (@pxref{Include,,@code{.include}}).  You may use @option{-I} as
2273*a9fa9459Szrjmany times as necessary to include a variety of paths.  The current
2274*a9fa9459Szrjworking directory is always searched first; after that, @command{@value{AS}}
2275*a9fa9459Szrjsearches any @samp{-I} directories in the same order as they were
2276*a9fa9459Szrjspecified (left to right) on the command line.
2277*a9fa9459Szrj
2278*a9fa9459Szrj@node K
2279*a9fa9459Szrj@section Difference Tables: @option{-K}
2280*a9fa9459Szrj
2281*a9fa9459Szrj@kindex -K
2282*a9fa9459Szrj@ifclear DIFF-TBL-KLUGE
2283*a9fa9459SzrjOn the @value{TARGET} family, this option is allowed, but has no effect.  It is
2284*a9fa9459Szrjpermitted for compatibility with the @sc{gnu} assembler on other platforms,
2285*a9fa9459Szrjwhere it can be used to warn when the assembler alters the machine code
2286*a9fa9459Szrjgenerated for @samp{.word} directives in difference tables.  The @value{TARGET}
2287*a9fa9459Szrjfamily does not have the addressing limitations that sometimes lead to this
2288*a9fa9459Szrjalteration on other platforms.
2289*a9fa9459Szrj@end ifclear
2290*a9fa9459Szrj
2291*a9fa9459Szrj@ifset DIFF-TBL-KLUGE
2292*a9fa9459Szrj@cindex difference tables, warning
2293*a9fa9459Szrj@cindex warning for altered difference tables
2294*a9fa9459Szrj@command{@value{AS}} sometimes alters the code emitted for directives of the
2295*a9fa9459Szrjform @samp{.word @var{sym1}-@var{sym2}}.  @xref{Word,,@code{.word}}.
2296*a9fa9459SzrjYou can use the @samp{-K} option if you want a warning issued when this
2297*a9fa9459Szrjis done.
2298*a9fa9459Szrj@end ifset
2299*a9fa9459Szrj
2300*a9fa9459Szrj@node L
2301*a9fa9459Szrj@section Include Local Symbols: @option{-L}
2302*a9fa9459Szrj
2303*a9fa9459Szrj@kindex -L
2304*a9fa9459Szrj@cindex local symbols, retaining in output
2305*a9fa9459SzrjSymbols beginning with system-specific local label prefixes, typically
2306*a9fa9459Szrj@samp{.L} for ELF systems or @samp{L} for traditional a.out systems, are
2307*a9fa9459Szrjcalled @dfn{local symbols}.  @xref{Symbol Names}.  Normally you do not see
2308*a9fa9459Szrjsuch symbols when debugging, because they are intended for the use of
2309*a9fa9459Szrjprograms (like compilers) that compose assembler programs, not for your
2310*a9fa9459Szrjnotice.  Normally both @command{@value{AS}} and @code{@value{LD}} discard
2311*a9fa9459Szrjsuch symbols, so you do not normally debug with them.
2312*a9fa9459Szrj
2313*a9fa9459SzrjThis option tells @command{@value{AS}} to retain those local symbols
2314*a9fa9459Szrjin the object file.  Usually if you do this you also tell the linker
2315*a9fa9459Szrj@code{@value{LD}} to preserve those symbols.
2316*a9fa9459Szrj
2317*a9fa9459Szrj@node listing
2318*a9fa9459Szrj@section Configuring listing output: @option{--listing}
2319*a9fa9459Szrj
2320*a9fa9459SzrjThe listing feature of the assembler can be enabled via the command line switch
2321*a9fa9459Szrj@samp{-a} (@pxref{a}).  This feature combines the input source file(s) with a
2322*a9fa9459Szrjhex dump of the corresponding locations in the output object file, and displays
2323*a9fa9459Szrjthem as a listing file.  The format of this listing can be controlled by
2324*a9fa9459Szrjdirectives inside the assembler source (i.e., @code{.list} (@pxref{List}),
2325*a9fa9459Szrj@code{.title} (@pxref{Title}), @code{.sbttl} (@pxref{Sbttl}),
2326*a9fa9459Szrj@code{.psize} (@pxref{Psize}), and
2327*a9fa9459Szrj@code{.eject} (@pxref{Eject}) and also by the following switches:
2328*a9fa9459Szrj
2329*a9fa9459Szrj@table @gcctabopt
2330*a9fa9459Szrj@item --listing-lhs-width=@samp{number}
2331*a9fa9459Szrj@kindex --listing-lhs-width
2332*a9fa9459Szrj@cindex Width of first line disassembly output
2333*a9fa9459SzrjSets the maximum width, in words, of the first line of the hex byte dump.  This
2334*a9fa9459Szrjdump appears on the left hand side of the listing output.
2335*a9fa9459Szrj
2336*a9fa9459Szrj@item --listing-lhs-width2=@samp{number}
2337*a9fa9459Szrj@kindex --listing-lhs-width2
2338*a9fa9459Szrj@cindex Width of continuation lines of disassembly output
2339*a9fa9459SzrjSets the maximum width, in words, of any further lines of the hex byte dump for
2340*a9fa9459Szrja given input source line.  If this value is not specified, it defaults to being
2341*a9fa9459Szrjthe same as the value specified for @samp{--listing-lhs-width}.  If neither
2342*a9fa9459Szrjswitch is used the default is to one.
2343*a9fa9459Szrj
2344*a9fa9459Szrj@item --listing-rhs-width=@samp{number}
2345*a9fa9459Szrj@kindex --listing-rhs-width
2346*a9fa9459Szrj@cindex Width of source line output
2347*a9fa9459SzrjSets the maximum width, in characters, of the source line that is displayed
2348*a9fa9459Szrjalongside the hex dump.  The default value for this parameter is 100.  The
2349*a9fa9459Szrjsource line is displayed on the right hand side of the listing output.
2350*a9fa9459Szrj
2351*a9fa9459Szrj@item --listing-cont-lines=@samp{number}
2352*a9fa9459Szrj@kindex --listing-cont-lines
2353*a9fa9459Szrj@cindex Maximum number of continuation lines
2354*a9fa9459SzrjSets the maximum number of continuation lines of hex dump that will be
2355*a9fa9459Szrjdisplayed for a given single line of source input.  The default value is 4.
2356*a9fa9459Szrj@end table
2357*a9fa9459Szrj
2358*a9fa9459Szrj@node M
2359*a9fa9459Szrj@section Assemble in MRI Compatibility Mode: @option{-M}
2360*a9fa9459Szrj
2361*a9fa9459Szrj@kindex -M
2362*a9fa9459Szrj@cindex MRI compatibility mode
2363*a9fa9459SzrjThe @option{-M} or @option{--mri} option selects MRI compatibility mode.  This
2364*a9fa9459Szrjchanges the syntax and pseudo-op handling of @command{@value{AS}} to make it
2365*a9fa9459Szrjcompatible with the @code{ASM68K} or the @code{ASM960} (depending upon the
2366*a9fa9459Szrjconfigured target) assembler from Microtec Research.  The exact nature of the
2367*a9fa9459SzrjMRI syntax will not be documented here; see the MRI manuals for more
2368*a9fa9459Szrjinformation.  Note in particular that the handling of macros and macro
2369*a9fa9459Szrjarguments is somewhat different.  The purpose of this option is to permit
2370*a9fa9459Szrjassembling existing MRI assembler code using @command{@value{AS}}.
2371*a9fa9459Szrj
2372*a9fa9459SzrjThe MRI compatibility is not complete.  Certain operations of the MRI assembler
2373*a9fa9459Szrjdepend upon its object file format, and can not be supported using other object
2374*a9fa9459Szrjfile formats.  Supporting these would require enhancing each object file format
2375*a9fa9459Szrjindividually.  These are:
2376*a9fa9459Szrj
2377*a9fa9459Szrj@itemize @bullet
2378*a9fa9459Szrj@item global symbols in common section
2379*a9fa9459Szrj
2380*a9fa9459SzrjThe m68k MRI assembler supports common sections which are merged by the linker.
2381*a9fa9459SzrjOther object file formats do not support this.  @command{@value{AS}} handles
2382*a9fa9459Szrjcommon sections by treating them as a single common symbol.  It permits local
2383*a9fa9459Szrjsymbols to be defined within a common section, but it can not support global
2384*a9fa9459Szrjsymbols, since it has no way to describe them.
2385*a9fa9459Szrj
2386*a9fa9459Szrj@item complex relocations
2387*a9fa9459Szrj
2388*a9fa9459SzrjThe MRI assemblers support relocations against a negated section address, and
2389*a9fa9459Szrjrelocations which combine the start addresses of two or more sections.  These
2390*a9fa9459Szrjare not support by other object file formats.
2391*a9fa9459Szrj
2392*a9fa9459Szrj@item @code{END} pseudo-op specifying start address
2393*a9fa9459Szrj
2394*a9fa9459SzrjThe MRI @code{END} pseudo-op permits the specification of a start address.
2395*a9fa9459SzrjThis is not supported by other object file formats.  The start address may
2396*a9fa9459Szrjinstead be specified using the @option{-e} option to the linker, or in a linker
2397*a9fa9459Szrjscript.
2398*a9fa9459Szrj
2399*a9fa9459Szrj@item @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops
2400*a9fa9459Szrj
2401*a9fa9459SzrjThe MRI @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops assign a module
2402*a9fa9459Szrjname to the output file.  This is not supported by other object file formats.
2403*a9fa9459Szrj
2404*a9fa9459Szrj@item @code{ORG} pseudo-op
2405*a9fa9459Szrj
2406*a9fa9459SzrjThe m68k MRI @code{ORG} pseudo-op begins an absolute section at a given
2407*a9fa9459Szrjaddress.  This differs from the usual @command{@value{AS}} @code{.org} pseudo-op,
2408*a9fa9459Szrjwhich changes the location within the current section.  Absolute sections are
2409*a9fa9459Szrjnot supported by other object file formats.  The address of a section may be
2410*a9fa9459Szrjassigned within a linker script.
2411*a9fa9459Szrj@end itemize
2412*a9fa9459Szrj
2413*a9fa9459SzrjThere are some other features of the MRI assembler which are not supported by
2414*a9fa9459Szrj@command{@value{AS}}, typically either because they are difficult or because they
2415*a9fa9459Szrjseem of little consequence.  Some of these may be supported in future releases.
2416*a9fa9459Szrj
2417*a9fa9459Szrj@itemize @bullet
2418*a9fa9459Szrj
2419*a9fa9459Szrj@item EBCDIC strings
2420*a9fa9459Szrj
2421*a9fa9459SzrjEBCDIC strings are not supported.
2422*a9fa9459Szrj
2423*a9fa9459Szrj@item packed binary coded decimal
2424*a9fa9459Szrj
2425*a9fa9459SzrjPacked binary coded decimal is not supported.  This means that the @code{DC.P}
2426*a9fa9459Szrjand @code{DCB.P} pseudo-ops are not supported.
2427*a9fa9459Szrj
2428*a9fa9459Szrj@item @code{FEQU} pseudo-op
2429*a9fa9459Szrj
2430*a9fa9459SzrjThe m68k @code{FEQU} pseudo-op is not supported.
2431*a9fa9459Szrj
2432*a9fa9459Szrj@item @code{NOOBJ} pseudo-op
2433*a9fa9459Szrj
2434*a9fa9459SzrjThe m68k @code{NOOBJ} pseudo-op is not supported.
2435*a9fa9459Szrj
2436*a9fa9459Szrj@item @code{OPT} branch control options
2437*a9fa9459Szrj
2438*a9fa9459SzrjThe m68k @code{OPT} branch control options---@code{B}, @code{BRS}, @code{BRB},
2439*a9fa9459Szrj@code{BRL}, and @code{BRW}---are ignored.  @command{@value{AS}} automatically
2440*a9fa9459Szrjrelaxes all branches, whether forward or backward, to an appropriate size, so
2441*a9fa9459Szrjthese options serve no purpose.
2442*a9fa9459Szrj
2443*a9fa9459Szrj@item @code{OPT} list control options
2444*a9fa9459Szrj
2445*a9fa9459SzrjThe following m68k @code{OPT} list control options are ignored: @code{C},
2446*a9fa9459Szrj@code{CEX}, @code{CL}, @code{CRE}, @code{E}, @code{G}, @code{I}, @code{M},
2447*a9fa9459Szrj@code{MEX}, @code{MC}, @code{MD}, @code{X}.
2448*a9fa9459Szrj
2449*a9fa9459Szrj@item other @code{OPT} options
2450*a9fa9459Szrj
2451*a9fa9459SzrjThe following m68k @code{OPT} options are ignored: @code{NEST}, @code{O},
2452*a9fa9459Szrj@code{OLD}, @code{OP}, @code{P}, @code{PCO}, @code{PCR}, @code{PCS}, @code{R}.
2453*a9fa9459Szrj
2454*a9fa9459Szrj@item @code{OPT} @code{D} option is default
2455*a9fa9459Szrj
2456*a9fa9459SzrjThe m68k @code{OPT} @code{D} option is the default, unlike the MRI assembler.
2457*a9fa9459Szrj@code{OPT NOD} may be used to turn it off.
2458*a9fa9459Szrj
2459*a9fa9459Szrj@item @code{XREF} pseudo-op.
2460*a9fa9459Szrj
2461*a9fa9459SzrjThe m68k @code{XREF} pseudo-op is ignored.
2462*a9fa9459Szrj
2463*a9fa9459Szrj@item @code{.debug} pseudo-op
2464*a9fa9459Szrj
2465*a9fa9459SzrjThe i960 @code{.debug} pseudo-op is not supported.
2466*a9fa9459Szrj
2467*a9fa9459Szrj@item @code{.extended} pseudo-op
2468*a9fa9459Szrj
2469*a9fa9459SzrjThe i960 @code{.extended} pseudo-op is not supported.
2470*a9fa9459Szrj
2471*a9fa9459Szrj@item @code{.list} pseudo-op.
2472*a9fa9459Szrj
2473*a9fa9459SzrjThe various options of the i960 @code{.list} pseudo-op are not supported.
2474*a9fa9459Szrj
2475*a9fa9459Szrj@item @code{.optimize} pseudo-op
2476*a9fa9459Szrj
2477*a9fa9459SzrjThe i960 @code{.optimize} pseudo-op is not supported.
2478*a9fa9459Szrj
2479*a9fa9459Szrj@item @code{.output} pseudo-op
2480*a9fa9459Szrj
2481*a9fa9459SzrjThe i960 @code{.output} pseudo-op is not supported.
2482*a9fa9459Szrj
2483*a9fa9459Szrj@item @code{.setreal} pseudo-op
2484*a9fa9459Szrj
2485*a9fa9459SzrjThe i960 @code{.setreal} pseudo-op is not supported.
2486*a9fa9459Szrj
2487*a9fa9459Szrj@end itemize
2488*a9fa9459Szrj
2489*a9fa9459Szrj@node MD
2490*a9fa9459Szrj@section Dependency Tracking: @option{--MD}
2491*a9fa9459Szrj
2492*a9fa9459Szrj@kindex --MD
2493*a9fa9459Szrj@cindex dependency tracking
2494*a9fa9459Szrj@cindex make rules
2495*a9fa9459Szrj
2496*a9fa9459Szrj@command{@value{AS}} can generate a dependency file for the file it creates.  This
2497*a9fa9459Szrjfile consists of a single rule suitable for @code{make} describing the
2498*a9fa9459Szrjdependencies of the main source file.
2499*a9fa9459Szrj
2500*a9fa9459SzrjThe rule is written to the file named in its argument.
2501*a9fa9459Szrj
2502*a9fa9459SzrjThis feature is used in the automatic updating of makefiles.
2503*a9fa9459Szrj
2504*a9fa9459Szrj@node no-pad-sections
2505*a9fa9459Szrj@section Output Section Padding
2506*a9fa9459Szrj@kindex --no-pad-sections
2507*a9fa9459Szrj@cindex output section padding
2508*a9fa9459SzrjNormally the assembler will pad the end of each output section up to its
2509*a9fa9459Szrjalignment boundary.  But this can waste space, which can be significant on
2510*a9fa9459Szrjmemory constrained targets.  So the @option{--no-pad-sections} option will
2511*a9fa9459Szrjdisable this behaviour.
2512*a9fa9459Szrj
2513*a9fa9459Szrj@node o
2514*a9fa9459Szrj@section Name the Object File: @option{-o}
2515*a9fa9459Szrj
2516*a9fa9459Szrj@kindex -o
2517*a9fa9459Szrj@cindex naming object file
2518*a9fa9459Szrj@cindex object file name
2519*a9fa9459SzrjThere is always one object file output when you run @command{@value{AS}}.  By
2520*a9fa9459Szrjdefault it has the name
2521*a9fa9459Szrj@ifset GENERIC
2522*a9fa9459Szrj@ifset I960
2523*a9fa9459Szrj@file{a.out} (or @file{b.out}, for Intel 960 targets only).
2524*a9fa9459Szrj@end ifset
2525*a9fa9459Szrj@ifclear I960
2526*a9fa9459Szrj@file{a.out}.
2527*a9fa9459Szrj@end ifclear
2528*a9fa9459Szrj@end ifset
2529*a9fa9459Szrj@ifclear GENERIC
2530*a9fa9459Szrj@ifset I960
2531*a9fa9459Szrj@file{b.out}.
2532*a9fa9459Szrj@end ifset
2533*a9fa9459Szrj@ifclear I960
2534*a9fa9459Szrj@file{a.out}.
2535*a9fa9459Szrj@end ifclear
2536*a9fa9459Szrj@end ifclear
2537*a9fa9459SzrjYou use this option (which takes exactly one filename) to give the
2538*a9fa9459Szrjobject file a different name.
2539*a9fa9459Szrj
2540*a9fa9459SzrjWhatever the object file is called, @command{@value{AS}} overwrites any
2541*a9fa9459Szrjexisting file of the same name.
2542*a9fa9459Szrj
2543*a9fa9459Szrj@node R
2544*a9fa9459Szrj@section Join Data and Text Sections: @option{-R}
2545*a9fa9459Szrj
2546*a9fa9459Szrj@kindex -R
2547*a9fa9459Szrj@cindex data and text sections, joining
2548*a9fa9459Szrj@cindex text and data sections, joining
2549*a9fa9459Szrj@cindex joining text and data sections
2550*a9fa9459Szrj@cindex merging text and data sections
2551*a9fa9459Szrj@option{-R} tells @command{@value{AS}} to write the object file as if all
2552*a9fa9459Szrjdata-section data lives in the text section.  This is only done at
2553*a9fa9459Szrjthe very last moment:  your binary data are the same, but data
2554*a9fa9459Szrjsection parts are relocated differently.  The data section part of
2555*a9fa9459Szrjyour object file is zero bytes long because all its bytes are
2556*a9fa9459Szrjappended to the text section.  (@xref{Sections,,Sections and Relocation}.)
2557*a9fa9459Szrj
2558*a9fa9459SzrjWhen you specify @option{-R} it would be possible to generate shorter
2559*a9fa9459Szrjaddress displacements (because we do not have to cross between text and
2560*a9fa9459Szrjdata section).  We refrain from doing this simply for compatibility with
2561*a9fa9459Szrjolder versions of @command{@value{AS}}.  In future, @option{-R} may work this way.
2562*a9fa9459Szrj
2563*a9fa9459Szrj@ifset COFF-ELF
2564*a9fa9459SzrjWhen @command{@value{AS}} is configured for COFF or ELF output,
2565*a9fa9459Szrjthis option is only useful if you use sections named @samp{.text} and
2566*a9fa9459Szrj@samp{.data}.
2567*a9fa9459Szrj@end ifset
2568*a9fa9459Szrj
2569*a9fa9459Szrj@ifset HPPA
2570*a9fa9459Szrj@option{-R} is not supported for any of the HPPA targets.  Using
2571*a9fa9459Szrj@option{-R} generates a warning from @command{@value{AS}}.
2572*a9fa9459Szrj@end ifset
2573*a9fa9459Szrj
2574*a9fa9459Szrj@node statistics
2575*a9fa9459Szrj@section Display Assembly Statistics: @option{--statistics}
2576*a9fa9459Szrj
2577*a9fa9459Szrj@kindex --statistics
2578*a9fa9459Szrj@cindex statistics, about assembly
2579*a9fa9459Szrj@cindex time, total for assembly
2580*a9fa9459Szrj@cindex space used, maximum for assembly
2581*a9fa9459SzrjUse @samp{--statistics} to display two statistics about the resources used by
2582*a9fa9459Szrj@command{@value{AS}}: the maximum amount of space allocated during the assembly
2583*a9fa9459Szrj(in bytes), and the total execution time taken for the assembly (in @sc{cpu}
2584*a9fa9459Szrjseconds).
2585*a9fa9459Szrj
2586*a9fa9459Szrj@node traditional-format
2587*a9fa9459Szrj@section Compatible Output: @option{--traditional-format}
2588*a9fa9459Szrj
2589*a9fa9459Szrj@kindex --traditional-format
2590*a9fa9459SzrjFor some targets, the output of @command{@value{AS}} is different in some ways
2591*a9fa9459Szrjfrom the output of some existing assembler.  This switch requests
2592*a9fa9459Szrj@command{@value{AS}} to use the traditional format instead.
2593*a9fa9459Szrj
2594*a9fa9459SzrjFor example, it disables the exception frame optimizations which
2595*a9fa9459Szrj@command{@value{AS}} normally does by default on @code{@value{GCC}} output.
2596*a9fa9459Szrj
2597*a9fa9459Szrj@node v
2598*a9fa9459Szrj@section Announce Version: @option{-v}
2599*a9fa9459Szrj
2600*a9fa9459Szrj@kindex -v
2601*a9fa9459Szrj@kindex -version
2602*a9fa9459Szrj@cindex assembler version
2603*a9fa9459Szrj@cindex version of assembler
2604*a9fa9459SzrjYou can find out what version of as is running by including the
2605*a9fa9459Szrjoption @samp{-v} (which you can also spell as @samp{-version}) on the
2606*a9fa9459Szrjcommand line.
2607*a9fa9459Szrj
2608*a9fa9459Szrj@node W
2609*a9fa9459Szrj@section Control Warnings: @option{-W}, @option{--warn}, @option{--no-warn}, @option{--fatal-warnings}
2610*a9fa9459Szrj
2611*a9fa9459Szrj@command{@value{AS}} should never give a warning or error message when
2612*a9fa9459Szrjassembling compiler output.  But programs written by people often
2613*a9fa9459Szrjcause @command{@value{AS}} to give a warning that a particular assumption was
2614*a9fa9459Szrjmade.  All such warnings are directed to the standard error file.
2615*a9fa9459Szrj
2616*a9fa9459Szrj@kindex -W
2617*a9fa9459Szrj@kindex --no-warn
2618*a9fa9459Szrj@cindex suppressing warnings
2619*a9fa9459Szrj@cindex warnings, suppressing
2620*a9fa9459SzrjIf you use the @option{-W} and @option{--no-warn} options, no warnings are issued.
2621*a9fa9459SzrjThis only affects the warning messages: it does not change any particular of
2622*a9fa9459Szrjhow @command{@value{AS}} assembles your file.  Errors, which stop the assembly,
2623*a9fa9459Szrjare still reported.
2624*a9fa9459Szrj
2625*a9fa9459Szrj@kindex --fatal-warnings
2626*a9fa9459Szrj@cindex errors, caused by warnings
2627*a9fa9459Szrj@cindex warnings, causing error
2628*a9fa9459SzrjIf you use the @option{--fatal-warnings} option, @command{@value{AS}} considers
2629*a9fa9459Szrjfiles that generate warnings to be in error.
2630*a9fa9459Szrj
2631*a9fa9459Szrj@kindex --warn
2632*a9fa9459Szrj@cindex warnings, switching on
2633*a9fa9459SzrjYou can switch these options off again by specifying @option{--warn}, which
2634*a9fa9459Szrjcauses warnings to be output as usual.
2635*a9fa9459Szrj
2636*a9fa9459Szrj@node Z
2637*a9fa9459Szrj@section Generate Object File in Spite of Errors: @option{-Z}
2638*a9fa9459Szrj@cindex object file, after errors
2639*a9fa9459Szrj@cindex errors, continuing after
2640*a9fa9459SzrjAfter an error message, @command{@value{AS}} normally produces no output.  If for
2641*a9fa9459Szrjsome reason you are interested in object file output even after
2642*a9fa9459Szrj@command{@value{AS}} gives an error message on your program, use the @samp{-Z}
2643*a9fa9459Szrjoption.  If there are any errors, @command{@value{AS}} continues anyways, and
2644*a9fa9459Szrjwrites an object file after a final warning message of the form @samp{@var{n}
2645*a9fa9459Szrjerrors, @var{m} warnings, generating bad object file.}
2646*a9fa9459Szrj
2647*a9fa9459Szrj@node Syntax
2648*a9fa9459Szrj@chapter Syntax
2649*a9fa9459Szrj
2650*a9fa9459Szrj@cindex machine-independent syntax
2651*a9fa9459Szrj@cindex syntax, machine-independent
2652*a9fa9459SzrjThis chapter describes the machine-independent syntax allowed in a
2653*a9fa9459Szrjsource file.  @command{@value{AS}} syntax is similar to what many other
2654*a9fa9459Szrjassemblers use; it is inspired by the BSD 4.2
2655*a9fa9459Szrj@ifclear VAX
2656*a9fa9459Szrjassembler.
2657*a9fa9459Szrj@end ifclear
2658*a9fa9459Szrj@ifset VAX
2659*a9fa9459Szrjassembler, except that @command{@value{AS}} does not assemble Vax bit-fields.
2660*a9fa9459Szrj@end ifset
2661*a9fa9459Szrj
2662*a9fa9459Szrj@menu
2663*a9fa9459Szrj* Preprocessing::               Preprocessing
2664*a9fa9459Szrj* Whitespace::                  Whitespace
2665*a9fa9459Szrj* Comments::                    Comments
2666*a9fa9459Szrj* Symbol Intro::                Symbols
2667*a9fa9459Szrj* Statements::                  Statements
2668*a9fa9459Szrj* Constants::                   Constants
2669*a9fa9459Szrj@end menu
2670*a9fa9459Szrj
2671*a9fa9459Szrj@node Preprocessing
2672*a9fa9459Szrj@section Preprocessing
2673*a9fa9459Szrj
2674*a9fa9459Szrj@cindex preprocessing
2675*a9fa9459SzrjThe @command{@value{AS}} internal preprocessor:
2676*a9fa9459Szrj@itemize @bullet
2677*a9fa9459Szrj@cindex whitespace, removed by preprocessor
2678*a9fa9459Szrj@item
2679*a9fa9459Szrjadjusts and removes extra whitespace.  It leaves one space or tab before
2680*a9fa9459Szrjthe keywords on a line, and turns any other whitespace on the line into
2681*a9fa9459Szrja single space.
2682*a9fa9459Szrj
2683*a9fa9459Szrj@cindex comments, removed by preprocessor
2684*a9fa9459Szrj@item
2685*a9fa9459Szrjremoves all comments, replacing them with a single space, or an
2686*a9fa9459Szrjappropriate number of newlines.
2687*a9fa9459Szrj
2688*a9fa9459Szrj@cindex constants, converted by preprocessor
2689*a9fa9459Szrj@item
2690*a9fa9459Szrjconverts character constants into the appropriate numeric values.
2691*a9fa9459Szrj@end itemize
2692*a9fa9459Szrj
2693*a9fa9459SzrjIt does not do macro processing, include file handling, or
2694*a9fa9459Szrjanything else you may get from your C compiler's preprocessor.  You can
2695*a9fa9459Szrjdo include file processing with the @code{.include} directive
2696*a9fa9459Szrj(@pxref{Include,,@code{.include}}).  You can use the @sc{gnu} C compiler driver
2697*a9fa9459Szrjto get other ``CPP'' style preprocessing by giving the input file a
2698*a9fa9459Szrj@samp{.S} suffix.  @xref{Overall Options, ,Options Controlling the Kind of
2699*a9fa9459SzrjOutput, gcc info, Using GNU CC}.
2700*a9fa9459Szrj
2701*a9fa9459SzrjExcess whitespace, comments, and character constants
2702*a9fa9459Szrjcannot be used in the portions of the input text that are not
2703*a9fa9459Szrjpreprocessed.
2704*a9fa9459Szrj
2705*a9fa9459Szrj@cindex turning preprocessing on and off
2706*a9fa9459Szrj@cindex preprocessing, turning on and off
2707*a9fa9459Szrj@kindex #NO_APP
2708*a9fa9459Szrj@kindex #APP
2709*a9fa9459SzrjIf the first line of an input file is @code{#NO_APP} or if you use the
2710*a9fa9459Szrj@samp{-f} option, whitespace and comments are not removed from the input file.
2711*a9fa9459SzrjWithin an input file, you can ask for whitespace and comment removal in
2712*a9fa9459Szrjspecific portions of the by putting a line that says @code{#APP} before the
2713*a9fa9459Szrjtext that may contain whitespace or comments, and putting a line that says
2714*a9fa9459Szrj@code{#NO_APP} after this text.  This feature is mainly intend to support
2715*a9fa9459Szrj@code{asm} statements in compilers whose output is otherwise free of comments
2716*a9fa9459Szrjand whitespace.
2717*a9fa9459Szrj
2718*a9fa9459Szrj@node Whitespace
2719*a9fa9459Szrj@section Whitespace
2720*a9fa9459Szrj
2721*a9fa9459Szrj@cindex whitespace
2722*a9fa9459Szrj@dfn{Whitespace} is one or more blanks or tabs, in any order.
2723*a9fa9459SzrjWhitespace is used to separate symbols, and to make programs neater for
2724*a9fa9459Szrjpeople to read.  Unless within character constants
2725*a9fa9459Szrj(@pxref{Characters,,Character Constants}), any whitespace means the same
2726*a9fa9459Szrjas exactly one space.
2727*a9fa9459Szrj
2728*a9fa9459Szrj@node Comments
2729*a9fa9459Szrj@section Comments
2730*a9fa9459Szrj
2731*a9fa9459Szrj@cindex comments
2732*a9fa9459SzrjThere are two ways of rendering comments to @command{@value{AS}}.  In both
2733*a9fa9459Szrjcases the comment is equivalent to one space.
2734*a9fa9459Szrj
2735*a9fa9459SzrjAnything from @samp{/*} through the next @samp{*/} is a comment.
2736*a9fa9459SzrjThis means you may not nest these comments.
2737*a9fa9459Szrj
2738*a9fa9459Szrj@smallexample
2739*a9fa9459Szrj/*
2740*a9fa9459Szrj  The only way to include a newline ('\n') in a comment
2741*a9fa9459Szrj  is to use this sort of comment.
2742*a9fa9459Szrj*/
2743*a9fa9459Szrj
2744*a9fa9459Szrj/* This sort of comment does not nest. */
2745*a9fa9459Szrj@end smallexample
2746*a9fa9459Szrj
2747*a9fa9459Szrj@cindex line comment character
2748*a9fa9459SzrjAnything from a @dfn{line comment} character up to the next newline is
2749*a9fa9459Szrjconsidered a comment and is ignored.  The line comment character is target
2750*a9fa9459Szrjspecific, and some targets multiple comment characters.  Some targets also have
2751*a9fa9459Szrjline comment characters that only work if they are the first character on a
2752*a9fa9459Szrjline.  Some targets use a sequence of two characters to introduce a line
2753*a9fa9459Szrjcomment.  Some targets can also change their line comment characters depending
2754*a9fa9459Szrjupon command line options that have been used.  For more details see the
2755*a9fa9459Szrj@emph{Syntax} section in the documentation for individual targets.
2756*a9fa9459Szrj
2757*a9fa9459SzrjIf the line comment character is the hash sign (@samp{#}) then it still has the
2758*a9fa9459Szrjspecial ability to enable and disable preprocessing (@pxref{Preprocessing}) and
2759*a9fa9459Szrjto specify logical line numbers:
2760*a9fa9459Szrj
2761*a9fa9459Szrj@kindex #
2762*a9fa9459Szrj@cindex lines starting with @code{#}
2763*a9fa9459Szrj@cindex logical line numbers
2764*a9fa9459SzrjTo be compatible with past assemblers, lines that begin with @samp{#} have a
2765*a9fa9459Szrjspecial interpretation.  Following the @samp{#} should be an absolute
2766*a9fa9459Szrjexpression (@pxref{Expressions}): the logical line number of the @emph{next}
2767*a9fa9459Szrjline.  Then a string (@pxref{Strings, ,Strings}) is allowed: if present it is a
2768*a9fa9459Szrjnew logical file name.  The rest of the line, if any, should be whitespace.
2769*a9fa9459Szrj
2770*a9fa9459SzrjIf the first non-whitespace characters on the line are not numeric,
2771*a9fa9459Szrjthe line is ignored.  (Just like a comment.)
2772*a9fa9459Szrj
2773*a9fa9459Szrj@smallexample
2774*a9fa9459Szrj                          # This is an ordinary comment.
2775*a9fa9459Szrj# 42-6 "new_file_name"    # New logical file name
2776*a9fa9459Szrj                          # This is logical line # 36.
2777*a9fa9459Szrj@end smallexample
2778*a9fa9459SzrjThis feature is deprecated, and may disappear from future versions
2779*a9fa9459Szrjof @command{@value{AS}}.
2780*a9fa9459Szrj
2781*a9fa9459Szrj@node Symbol Intro
2782*a9fa9459Szrj@section Symbols
2783*a9fa9459Szrj
2784*a9fa9459Szrj@cindex characters used in symbols
2785*a9fa9459Szrj@ifclear SPECIAL-SYMS
2786*a9fa9459SzrjA @dfn{symbol} is one or more characters chosen from the set of all
2787*a9fa9459Szrjletters (both upper and lower case), digits and the three characters
2788*a9fa9459Szrj@samp{_.$}.
2789*a9fa9459Szrj@end ifclear
2790*a9fa9459Szrj@ifset SPECIAL-SYMS
2791*a9fa9459Szrj@ifclear GENERIC
2792*a9fa9459Szrj@ifset H8
2793*a9fa9459SzrjA @dfn{symbol} is one or more characters chosen from the set of all
2794*a9fa9459Szrjletters (both upper and lower case), digits and the three characters
2795*a9fa9459Szrj@samp{._$}.  (Save that, on the H8/300 only, you may not use @samp{$} in
2796*a9fa9459Szrjsymbol names.)
2797*a9fa9459Szrj@end ifset
2798*a9fa9459Szrj@end ifclear
2799*a9fa9459Szrj@end ifset
2800*a9fa9459Szrj@ifset GENERIC
2801*a9fa9459SzrjOn most machines, you can also use @code{$} in symbol names; exceptions
2802*a9fa9459Szrjare noted in @ref{Machine Dependencies}.
2803*a9fa9459Szrj@end ifset
2804*a9fa9459SzrjNo symbol may begin with a digit.  Case is significant.
2805*a9fa9459SzrjThere is no length limit; all characters are significant.  Multibyte characters
2806*a9fa9459Szrjare supported.  Symbols are delimited by characters not in that set, or by the
2807*a9fa9459Szrjbeginning of a file (since the source program must end with a newline, the end
2808*a9fa9459Szrjof a file is not a possible symbol delimiter).  @xref{Symbols}.
2809*a9fa9459Szrj
2810*a9fa9459SzrjSymbol names may also be enclosed in double quote @code{"} characters.  In such
2811*a9fa9459Szrjcases any characters are allowed, except for the NUL character.  If a double
2812*a9fa9459Szrjquote character is to be included in the symbol name it must be preceeded by a
2813*a9fa9459Szrjbackslash @code{\} character.
2814*a9fa9459Szrj@cindex length of symbols
2815*a9fa9459Szrj
2816*a9fa9459Szrj@node Statements
2817*a9fa9459Szrj@section Statements
2818*a9fa9459Szrj
2819*a9fa9459Szrj@cindex statements, structure of
2820*a9fa9459Szrj@cindex line separator character
2821*a9fa9459Szrj@cindex statement separator character
2822*a9fa9459Szrj
2823*a9fa9459SzrjA @dfn{statement} ends at a newline character (@samp{\n}) or a
2824*a9fa9459Szrj@dfn{line separator character}.  The line separator character is target
2825*a9fa9459Szrjspecific and described in the @emph{Syntax} section of each
2826*a9fa9459Szrjtarget's documentation.  Not all targets support a line separator character.
2827*a9fa9459SzrjThe newline or line separator character is considered to be part of the
2828*a9fa9459Szrjpreceding statement.  Newlines and separators within character constants are an
2829*a9fa9459Szrjexception: they do not end statements.
2830*a9fa9459Szrj
2831*a9fa9459Szrj@cindex newline, required at file end
2832*a9fa9459Szrj@cindex EOF, newline must precede
2833*a9fa9459SzrjIt is an error to end any statement with end-of-file:  the last
2834*a9fa9459Szrjcharacter of any input file should be a newline.@refill
2835*a9fa9459Szrj
2836*a9fa9459SzrjAn empty statement is allowed, and may include whitespace.  It is ignored.
2837*a9fa9459Szrj
2838*a9fa9459Szrj@cindex instructions and directives
2839*a9fa9459Szrj@cindex directives and instructions
2840*a9fa9459Szrj@c "key symbol" is not used elsewhere in the document; seems pedantic to
2841*a9fa9459Szrj@c @defn{} it in that case, as was done previously...  doc@cygnus.com,
2842*a9fa9459Szrj@c 13feb91.
2843*a9fa9459SzrjA statement begins with zero or more labels, optionally followed by a
2844*a9fa9459Szrjkey symbol which determines what kind of statement it is.  The key
2845*a9fa9459Szrjsymbol determines the syntax of the rest of the statement.  If the
2846*a9fa9459Szrjsymbol begins with a dot @samp{.} then the statement is an assembler
2847*a9fa9459Szrjdirective: typically valid for any computer.  If the symbol begins with
2848*a9fa9459Szrja letter the statement is an assembly language @dfn{instruction}: it
2849*a9fa9459Szrjassembles into a machine language instruction.
2850*a9fa9459Szrj@ifset GENERIC
2851*a9fa9459SzrjDifferent versions of @command{@value{AS}} for different computers
2852*a9fa9459Szrjrecognize different instructions.  In fact, the same symbol may
2853*a9fa9459Szrjrepresent a different instruction in a different computer's assembly
2854*a9fa9459Szrjlanguage.@refill
2855*a9fa9459Szrj@end ifset
2856*a9fa9459Szrj
2857*a9fa9459Szrj@cindex @code{:} (label)
2858*a9fa9459Szrj@cindex label (@code{:})
2859*a9fa9459SzrjA label is a symbol immediately followed by a colon (@code{:}).
2860*a9fa9459SzrjWhitespace before a label or after a colon is permitted, but you may not
2861*a9fa9459Szrjhave whitespace between a label's symbol and its colon. @xref{Labels}.
2862*a9fa9459Szrj
2863*a9fa9459Szrj@ifset HPPA
2864*a9fa9459SzrjFor HPPA targets, labels need not be immediately followed by a colon, but
2865*a9fa9459Szrjthe definition of a label must begin in column zero.  This also implies that
2866*a9fa9459Szrjonly one label may be defined on each line.
2867*a9fa9459Szrj@end ifset
2868*a9fa9459Szrj
2869*a9fa9459Szrj@smallexample
2870*a9fa9459Szrjlabel:     .directive    followed by something
2871*a9fa9459Szrjanother_label:           # This is an empty statement.
2872*a9fa9459Szrj           instruction   operand_1, operand_2, @dots{}
2873*a9fa9459Szrj@end smallexample
2874*a9fa9459Szrj
2875*a9fa9459Szrj@node Constants
2876*a9fa9459Szrj@section Constants
2877*a9fa9459Szrj
2878*a9fa9459Szrj@cindex constants
2879*a9fa9459SzrjA constant is a number, written so that its value is known by
2880*a9fa9459Szrjinspection, without knowing any context.  Like this:
2881*a9fa9459Szrj@smallexample
2882*a9fa9459Szrj@group
2883*a9fa9459Szrj.byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
2884*a9fa9459Szrj.ascii "Ring the bell\7"                  # A string constant.
2885*a9fa9459Szrj.octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
2886*a9fa9459Szrj.float 0f-314159265358979323846264338327\
2887*a9fa9459Szrj95028841971.693993751E-40                 # - pi, a flonum.
2888*a9fa9459Szrj@end group
2889*a9fa9459Szrj@end smallexample
2890*a9fa9459Szrj
2891*a9fa9459Szrj@menu
2892*a9fa9459Szrj* Characters::                  Character Constants
2893*a9fa9459Szrj* Numbers::                     Number Constants
2894*a9fa9459Szrj@end menu
2895*a9fa9459Szrj
2896*a9fa9459Szrj@node Characters
2897*a9fa9459Szrj@subsection Character Constants
2898*a9fa9459Szrj
2899*a9fa9459Szrj@cindex character constants
2900*a9fa9459Szrj@cindex constants, character
2901*a9fa9459SzrjThere are two kinds of character constants.  A @dfn{character} stands
2902*a9fa9459Szrjfor one character in one byte and its value may be used in
2903*a9fa9459Szrjnumeric expressions.  String constants (properly called string
2904*a9fa9459Szrj@emph{literals}) are potentially many bytes and their values may not be
2905*a9fa9459Szrjused in arithmetic expressions.
2906*a9fa9459Szrj
2907*a9fa9459Szrj@menu
2908*a9fa9459Szrj* Strings::                     Strings
2909*a9fa9459Szrj* Chars::                       Characters
2910*a9fa9459Szrj@end menu
2911*a9fa9459Szrj
2912*a9fa9459Szrj@node Strings
2913*a9fa9459Szrj@subsubsection Strings
2914*a9fa9459Szrj
2915*a9fa9459Szrj@cindex string constants
2916*a9fa9459Szrj@cindex constants, string
2917*a9fa9459SzrjA @dfn{string} is written between double-quotes.  It may contain
2918*a9fa9459Szrjdouble-quotes or null characters.  The way to get special characters
2919*a9fa9459Szrjinto a string is to @dfn{escape} these characters: precede them with
2920*a9fa9459Szrja backslash @samp{\} character.  For example @samp{\\} represents
2921*a9fa9459Szrjone backslash:  the first @code{\} is an escape which tells
2922*a9fa9459Szrj@command{@value{AS}} to interpret the second character literally as a backslash
2923*a9fa9459Szrj(which prevents @command{@value{AS}} from recognizing the second @code{\} as an
2924*a9fa9459Szrjescape character).  The complete list of escapes follows.
2925*a9fa9459Szrj
2926*a9fa9459Szrj@cindex escape codes, character
2927*a9fa9459Szrj@cindex character escape codes
2928*a9fa9459Szrj@c NOTE: Cindex entries must not start with a backlash character.
2929*a9fa9459Szrj@c NOTE: This confuses the pdf2texi script when it is creating the
2930*a9fa9459Szrj@c NOTE: index based upon the first character and so it generates:
2931*a9fa9459Szrj@c NOTE:   \initial {\\}
2932*a9fa9459Szrj@c NOTE: which then results in the error message:
2933*a9fa9459Szrj@c NOTE:   Argument of \\ has an extra }.
2934*a9fa9459Szrj@c NOTE: So in the index entries below a space character has been
2935*a9fa9459Szrj@c NOTE: prepended to avoid this problem.
2936*a9fa9459Szrj@table @kbd
2937*a9fa9459Szrj@c      @item \a
2938*a9fa9459Szrj@c      Mnemonic for ACKnowledge; for ASCII this is octal code 007.
2939*a9fa9459Szrj@c
2940*a9fa9459Szrj@cindex @code{ \b} (backspace character)
2941*a9fa9459Szrj@cindex backspace (@code{\b})
2942*a9fa9459Szrj@item \b
2943*a9fa9459SzrjMnemonic for backspace; for ASCII this is octal code 010.
2944*a9fa9459Szrj
2945*a9fa9459Szrj@c      @item \e
2946*a9fa9459Szrj@c      Mnemonic for EOText; for ASCII this is octal code 004.
2947*a9fa9459Szrj@c
2948*a9fa9459Szrj@cindex @code{ \f} (formfeed character)
2949*a9fa9459Szrj@cindex formfeed (@code{\f})
2950*a9fa9459Szrj@item backslash-f
2951*a9fa9459SzrjMnemonic for FormFeed; for ASCII this is octal code 014.
2952*a9fa9459Szrj
2953*a9fa9459Szrj@cindex @code{ \n} (newline character)
2954*a9fa9459Szrj@cindex newline (@code{\n})
2955*a9fa9459Szrj@item \n
2956*a9fa9459SzrjMnemonic for newline; for ASCII this is octal code 012.
2957*a9fa9459Szrj
2958*a9fa9459Szrj@c      @item \p
2959*a9fa9459Szrj@c      Mnemonic for prefix; for ASCII this is octal code 033, usually known as @code{escape}.
2960*a9fa9459Szrj@c
2961*a9fa9459Szrj@cindex @code{ \r} (carriage return character)
2962*a9fa9459Szrj@cindex carriage return (@code{backslash-r})
2963*a9fa9459Szrj@item \r
2964*a9fa9459SzrjMnemonic for carriage-Return; for ASCII this is octal code 015.
2965*a9fa9459Szrj
2966*a9fa9459Szrj@c      @item \s
2967*a9fa9459Szrj@c      Mnemonic for space; for ASCII this is octal code 040.  Included for compliance with
2968*a9fa9459Szrj@c      other assemblers.
2969*a9fa9459Szrj@c
2970*a9fa9459Szrj@cindex @code{ \t} (tab)
2971*a9fa9459Szrj@cindex tab (@code{\t})
2972*a9fa9459Szrj@item \t
2973*a9fa9459SzrjMnemonic for horizontal Tab; for ASCII this is octal code 011.
2974*a9fa9459Szrj
2975*a9fa9459Szrj@c      @item \v
2976*a9fa9459Szrj@c      Mnemonic for Vertical tab; for ASCII this is octal code 013.
2977*a9fa9459Szrj@c      @item \x @var{digit} @var{digit} @var{digit}
2978*a9fa9459Szrj@c      A hexadecimal character code.  The numeric code is 3 hexadecimal digits.
2979*a9fa9459Szrj@c
2980*a9fa9459Szrj@cindex @code{ \@var{ddd}} (octal character code)
2981*a9fa9459Szrj@cindex octal character code (@code{\@var{ddd}})
2982*a9fa9459Szrj@item \ @var{digit} @var{digit} @var{digit}
2983*a9fa9459SzrjAn octal character code.  The numeric code is 3 octal digits.
2984*a9fa9459SzrjFor compatibility with other Unix systems, 8 and 9 are accepted as digits:
2985*a9fa9459Szrjfor example, @code{\008} has the value 010, and @code{\009} the value 011.
2986*a9fa9459Szrj
2987*a9fa9459Szrj@cindex @code{ \@var{xd...}} (hex character code)
2988*a9fa9459Szrj@cindex hex character code (@code{\@var{xd...}})
2989*a9fa9459Szrj@item \@code{x} @var{hex-digits...}
2990*a9fa9459SzrjA hex character code.  All trailing hex digits are combined.  Either upper or
2991*a9fa9459Szrjlower case @code{x} works.
2992*a9fa9459Szrj
2993*a9fa9459Szrj@cindex @code{ \\} (@samp{\} character)
2994*a9fa9459Szrj@cindex backslash (@code{\\})
2995*a9fa9459Szrj@item \\
2996*a9fa9459SzrjRepresents one @samp{\} character.
2997*a9fa9459Szrj
2998*a9fa9459Szrj@c      @item \'
2999*a9fa9459Szrj@c      Represents one @samp{'} (accent acute) character.
3000*a9fa9459Szrj@c      This is needed in single character literals
3001*a9fa9459Szrj@c      (@xref{Characters,,Character Constants}.) to represent
3002*a9fa9459Szrj@c      a @samp{'}.
3003*a9fa9459Szrj@c
3004*a9fa9459Szrj@cindex @code{ \"} (doublequote character)
3005*a9fa9459Szrj@cindex doublequote (@code{\"})
3006*a9fa9459Szrj@item \"
3007*a9fa9459SzrjRepresents one @samp{"} character.  Needed in strings to represent
3008*a9fa9459Szrjthis character, because an unescaped @samp{"} would end the string.
3009*a9fa9459Szrj
3010*a9fa9459Szrj@item \ @var{anything-else}
3011*a9fa9459SzrjAny other character when escaped by @kbd{\} gives a warning, but
3012*a9fa9459Szrjassembles as if the @samp{\} was not present.  The idea is that if
3013*a9fa9459Szrjyou used an escape sequence you clearly didn't want the literal
3014*a9fa9459Szrjinterpretation of the following character.  However @command{@value{AS}} has no
3015*a9fa9459Szrjother interpretation, so @command{@value{AS}} knows it is giving you the wrong
3016*a9fa9459Szrjcode and warns you of the fact.
3017*a9fa9459Szrj@end table
3018*a9fa9459Szrj
3019*a9fa9459SzrjWhich characters are escapable, and what those escapes represent,
3020*a9fa9459Szrjvaries widely among assemblers.  The current set is what we think
3021*a9fa9459Szrjthe BSD 4.2 assembler recognizes, and is a subset of what most C
3022*a9fa9459Szrjcompilers recognize.  If you are in doubt, do not use an escape
3023*a9fa9459Szrjsequence.
3024*a9fa9459Szrj
3025*a9fa9459Szrj@node Chars
3026*a9fa9459Szrj@subsubsection Characters
3027*a9fa9459Szrj
3028*a9fa9459Szrj@cindex single character constant
3029*a9fa9459Szrj@cindex character, single
3030*a9fa9459Szrj@cindex constant, single character
3031*a9fa9459SzrjA single character may be written as a single quote immediately
3032*a9fa9459Szrjfollowed by that character.  The same escapes apply to characters as
3033*a9fa9459Szrjto strings.  So if you want to write the character backslash, you
3034*a9fa9459Szrjmust write @kbd{'\\} where the first @code{\} escapes the second
3035*a9fa9459Szrj@code{\}.  As you can see, the quote is an acute accent, not a
3036*a9fa9459Szrjgrave accent.  A newline
3037*a9fa9459Szrj@ifclear GENERIC
3038*a9fa9459Szrj@ifclear abnormal-separator
3039*a9fa9459Szrj(or semicolon @samp{;})
3040*a9fa9459Szrj@end ifclear
3041*a9fa9459Szrj@ifset abnormal-separator
3042*a9fa9459Szrj@ifset H8
3043*a9fa9459Szrj(or dollar sign @samp{$}, for the H8/300; or semicolon @samp{;} for the
3044*a9fa9459SzrjRenesas SH)
3045*a9fa9459Szrj@end ifset
3046*a9fa9459Szrj@end ifset
3047*a9fa9459Szrj@end ifclear
3048*a9fa9459Szrjimmediately following an acute accent is taken as a literal character
3049*a9fa9459Szrjand does not count as the end of a statement.  The value of a character
3050*a9fa9459Szrjconstant in a numeric expression is the machine's byte-wide code for
3051*a9fa9459Szrjthat character.  @command{@value{AS}} assumes your character code is ASCII:
3052*a9fa9459Szrj@kbd{'A} means 65, @kbd{'B} means 66, and so on. @refill
3053*a9fa9459Szrj
3054*a9fa9459Szrj@node Numbers
3055*a9fa9459Szrj@subsection Number Constants
3056*a9fa9459Szrj
3057*a9fa9459Szrj@cindex constants, number
3058*a9fa9459Szrj@cindex number constants
3059*a9fa9459Szrj@command{@value{AS}} distinguishes three kinds of numbers according to how they
3060*a9fa9459Szrjare stored in the target machine.  @emph{Integers} are numbers that
3061*a9fa9459Szrjwould fit into an @code{int} in the C language.  @emph{Bignums} are
3062*a9fa9459Szrjintegers, but they are stored in more than 32 bits.  @emph{Flonums}
3063*a9fa9459Szrjare floating point numbers, described below.
3064*a9fa9459Szrj
3065*a9fa9459Szrj@menu
3066*a9fa9459Szrj* Integers::                    Integers
3067*a9fa9459Szrj* Bignums::                     Bignums
3068*a9fa9459Szrj* Flonums::                     Flonums
3069*a9fa9459Szrj@ifclear GENERIC
3070*a9fa9459Szrj@ifset I960
3071*a9fa9459Szrj* Bit Fields::                  Bit Fields
3072*a9fa9459Szrj@end ifset
3073*a9fa9459Szrj@end ifclear
3074*a9fa9459Szrj@end menu
3075*a9fa9459Szrj
3076*a9fa9459Szrj@node Integers
3077*a9fa9459Szrj@subsubsection Integers
3078*a9fa9459Szrj@cindex integers
3079*a9fa9459Szrj@cindex constants, integer
3080*a9fa9459Szrj
3081*a9fa9459Szrj@cindex binary integers
3082*a9fa9459Szrj@cindex integers, binary
3083*a9fa9459SzrjA binary integer is @samp{0b} or @samp{0B} followed by zero or more of
3084*a9fa9459Szrjthe binary digits @samp{01}.
3085*a9fa9459Szrj
3086*a9fa9459Szrj@cindex octal integers
3087*a9fa9459Szrj@cindex integers, octal
3088*a9fa9459SzrjAn octal integer is @samp{0} followed by zero or more of the octal
3089*a9fa9459Szrjdigits (@samp{01234567}).
3090*a9fa9459Szrj
3091*a9fa9459Szrj@cindex decimal integers
3092*a9fa9459Szrj@cindex integers, decimal
3093*a9fa9459SzrjA decimal integer starts with a non-zero digit followed by zero or
3094*a9fa9459Szrjmore digits (@samp{0123456789}).
3095*a9fa9459Szrj
3096*a9fa9459Szrj@cindex hexadecimal integers
3097*a9fa9459Szrj@cindex integers, hexadecimal
3098*a9fa9459SzrjA hexadecimal integer is @samp{0x} or @samp{0X} followed by one or
3099*a9fa9459Szrjmore hexadecimal digits chosen from @samp{0123456789abcdefABCDEF}.
3100*a9fa9459Szrj
3101*a9fa9459SzrjIntegers have the usual values.  To denote a negative integer, use
3102*a9fa9459Szrjthe prefix operator @samp{-} discussed under expressions
3103*a9fa9459Szrj(@pxref{Prefix Ops,,Prefix Operators}).
3104*a9fa9459Szrj
3105*a9fa9459Szrj@node Bignums
3106*a9fa9459Szrj@subsubsection Bignums
3107*a9fa9459Szrj
3108*a9fa9459Szrj@cindex bignums
3109*a9fa9459Szrj@cindex constants, bignum
3110*a9fa9459SzrjA @dfn{bignum} has the same syntax and semantics as an integer
3111*a9fa9459Szrjexcept that the number (or its negative) takes more than 32 bits to
3112*a9fa9459Szrjrepresent in binary.  The distinction is made because in some places
3113*a9fa9459Szrjintegers are permitted while bignums are not.
3114*a9fa9459Szrj
3115*a9fa9459Szrj@node Flonums
3116*a9fa9459Szrj@subsubsection Flonums
3117*a9fa9459Szrj@cindex flonums
3118*a9fa9459Szrj@cindex floating point numbers
3119*a9fa9459Szrj@cindex constants, floating point
3120*a9fa9459Szrj
3121*a9fa9459Szrj@cindex precision, floating point
3122*a9fa9459SzrjA @dfn{flonum} represents a floating point number.  The translation is
3123*a9fa9459Szrjindirect: a decimal floating point number from the text is converted by
3124*a9fa9459Szrj@command{@value{AS}} to a generic binary floating point number of more than
3125*a9fa9459Szrjsufficient precision.  This generic floating point number is converted
3126*a9fa9459Szrjto a particular computer's floating point format (or formats) by a
3127*a9fa9459Szrjportion of @command{@value{AS}} specialized to that computer.
3128*a9fa9459Szrj
3129*a9fa9459SzrjA flonum is written by writing (in order)
3130*a9fa9459Szrj@itemize @bullet
3131*a9fa9459Szrj@item
3132*a9fa9459SzrjThe digit @samp{0}.
3133*a9fa9459Szrj@ifset HPPA
3134*a9fa9459Szrj(@samp{0} is optional on the HPPA.)
3135*a9fa9459Szrj@end ifset
3136*a9fa9459Szrj
3137*a9fa9459Szrj@item
3138*a9fa9459SzrjA letter, to tell @command{@value{AS}} the rest of the number is a flonum.
3139*a9fa9459Szrj@ifset GENERIC
3140*a9fa9459Szrj@kbd{e} is recommended.  Case is not important.
3141*a9fa9459Szrj@ignore
3142*a9fa9459Szrj@c FIXME: verify if flonum syntax really this vague for most cases
3143*a9fa9459Szrj(Any otherwise illegal letter works here, but that might be changed.  Vax BSD
3144*a9fa9459Szrj4.2 assembler seems to allow any of @samp{defghDEFGH}.)
3145*a9fa9459Szrj@end ignore
3146*a9fa9459Szrj
3147*a9fa9459SzrjOn the H8/300, Renesas / SuperH SH,
3148*a9fa9459Szrjand AMD 29K architectures, the letter must be
3149*a9fa9459Szrjone of the letters @samp{DFPRSX} (in upper or lower case).
3150*a9fa9459Szrj
3151*a9fa9459SzrjOn the ARC, the letter must be one of the letters @samp{DFRS}
3152*a9fa9459Szrj(in upper or lower case).
3153*a9fa9459Szrj
3154*a9fa9459SzrjOn the Intel 960 architecture, the letter must be
3155*a9fa9459Szrjone of the letters @samp{DFT} (in upper or lower case).
3156*a9fa9459Szrj
3157*a9fa9459SzrjOn the HPPA architecture, the letter must be @samp{E} (upper case only).
3158*a9fa9459Szrj@end ifset
3159*a9fa9459Szrj@ifclear GENERIC
3160*a9fa9459Szrj@ifset ARC
3161*a9fa9459SzrjOne of the letters @samp{DFRS} (in upper or lower case).
3162*a9fa9459Szrj@end ifset
3163*a9fa9459Szrj@ifset H8
3164*a9fa9459SzrjOne of the letters @samp{DFPRSX} (in upper or lower case).
3165*a9fa9459Szrj@end ifset
3166*a9fa9459Szrj@ifset HPPA
3167*a9fa9459SzrjThe letter @samp{E} (upper case only).
3168*a9fa9459Szrj@end ifset
3169*a9fa9459Szrj@ifset I960
3170*a9fa9459SzrjOne of the letters @samp{DFT} (in upper or lower case).
3171*a9fa9459Szrj@end ifset
3172*a9fa9459Szrj@end ifclear
3173*a9fa9459Szrj
3174*a9fa9459Szrj@item
3175*a9fa9459SzrjAn optional sign: either @samp{+} or @samp{-}.
3176*a9fa9459Szrj
3177*a9fa9459Szrj@item
3178*a9fa9459SzrjAn optional @dfn{integer part}: zero or more decimal digits.
3179*a9fa9459Szrj
3180*a9fa9459Szrj@item
3181*a9fa9459SzrjAn optional @dfn{fractional part}: @samp{.} followed by zero
3182*a9fa9459Szrjor more decimal digits.
3183*a9fa9459Szrj
3184*a9fa9459Szrj@item
3185*a9fa9459SzrjAn optional exponent, consisting of:
3186*a9fa9459Szrj
3187*a9fa9459Szrj@itemize @bullet
3188*a9fa9459Szrj@item
3189*a9fa9459SzrjAn @samp{E} or @samp{e}.
3190*a9fa9459Szrj@c I can't find a config where "EXP_CHARS" is other than 'eE', but in
3191*a9fa9459Szrj@c principle this can perfectly well be different on different targets.
3192*a9fa9459Szrj@item
3193*a9fa9459SzrjOptional sign: either @samp{+} or @samp{-}.
3194*a9fa9459Szrj@item
3195*a9fa9459SzrjOne or more decimal digits.
3196*a9fa9459Szrj@end itemize
3197*a9fa9459Szrj
3198*a9fa9459Szrj@end itemize
3199*a9fa9459Szrj
3200*a9fa9459SzrjAt least one of the integer part or the fractional part must be
3201*a9fa9459Szrjpresent.  The floating point number has the usual base-10 value.
3202*a9fa9459Szrj
3203*a9fa9459Szrj@command{@value{AS}} does all processing using integers.  Flonums are computed
3204*a9fa9459Szrjindependently of any floating point hardware in the computer running
3205*a9fa9459Szrj@command{@value{AS}}.
3206*a9fa9459Szrj
3207*a9fa9459Szrj@ifclear GENERIC
3208*a9fa9459Szrj@ifset I960
3209*a9fa9459Szrj@c Bit fields are written as a general facility but are also controlled
3210*a9fa9459Szrj@c by a conditional-compilation flag---which is as of now (21mar91)
3211*a9fa9459Szrj@c turned on only by the i960 config of GAS.
3212*a9fa9459Szrj@node Bit Fields
3213*a9fa9459Szrj@subsubsection Bit Fields
3214*a9fa9459Szrj
3215*a9fa9459Szrj@cindex bit fields
3216*a9fa9459Szrj@cindex constants, bit field
3217*a9fa9459SzrjYou can also define numeric constants as @dfn{bit fields}.
3218*a9fa9459SzrjSpecify two numbers separated by a colon---
3219*a9fa9459Szrj@example
3220*a9fa9459Szrj@var{mask}:@var{value}
3221*a9fa9459Szrj@end example
3222*a9fa9459Szrj@noindent
3223*a9fa9459Szrj@command{@value{AS}} applies a bitwise @sc{and} between @var{mask} and
3224*a9fa9459Szrj@var{value}.
3225*a9fa9459Szrj
3226*a9fa9459SzrjThe resulting number is then packed
3227*a9fa9459Szrj@ifset GENERIC
3228*a9fa9459Szrj@c this conditional paren in case bit fields turned on elsewhere than 960
3229*a9fa9459Szrj(in host-dependent byte order)
3230*a9fa9459Szrj@end ifset
3231*a9fa9459Szrjinto a field whose width depends on which assembler directive has the
3232*a9fa9459Szrjbit-field as its argument.  Overflow (a result from the bitwise and
3233*a9fa9459Szrjrequiring more binary digits to represent) is not an error; instead,
3234*a9fa9459Szrjmore constants are generated, of the specified width, beginning with the
3235*a9fa9459Szrjleast significant digits.@refill
3236*a9fa9459Szrj
3237*a9fa9459SzrjThe directives @code{.byte}, @code{.hword}, @code{.int}, @code{.long},
3238*a9fa9459Szrj@code{.short}, and @code{.word} accept bit-field arguments.
3239*a9fa9459Szrj@end ifset
3240*a9fa9459Szrj@end ifclear
3241*a9fa9459Szrj
3242*a9fa9459Szrj@node Sections
3243*a9fa9459Szrj@chapter Sections and Relocation
3244*a9fa9459Szrj@cindex sections
3245*a9fa9459Szrj@cindex relocation
3246*a9fa9459Szrj
3247*a9fa9459Szrj@menu
3248*a9fa9459Szrj* Secs Background::             Background
3249*a9fa9459Szrj* Ld Sections::                 Linker Sections
3250*a9fa9459Szrj* As Sections::                 Assembler Internal Sections
3251*a9fa9459Szrj* Sub-Sections::                Sub-Sections
3252*a9fa9459Szrj* bss::                         bss Section
3253*a9fa9459Szrj@end menu
3254*a9fa9459Szrj
3255*a9fa9459Szrj@node Secs Background
3256*a9fa9459Szrj@section Background
3257*a9fa9459Szrj
3258*a9fa9459SzrjRoughly, a section is a range of addresses, with no gaps; all data
3259*a9fa9459Szrj``in'' those addresses is treated the same for some particular purpose.
3260*a9fa9459SzrjFor example there may be a ``read only'' section.
3261*a9fa9459Szrj
3262*a9fa9459Szrj@cindex linker, and assembler
3263*a9fa9459Szrj@cindex assembler, and linker
3264*a9fa9459SzrjThe linker @code{@value{LD}} reads many object files (partial programs) and
3265*a9fa9459Szrjcombines their contents to form a runnable program.  When @command{@value{AS}}
3266*a9fa9459Szrjemits an object file, the partial program is assumed to start at address 0.
3267*a9fa9459Szrj@code{@value{LD}} assigns the final addresses for the partial program, so that
3268*a9fa9459Szrjdifferent partial programs do not overlap.  This is actually an
3269*a9fa9459Szrjoversimplification, but it suffices to explain how @command{@value{AS}} uses
3270*a9fa9459Szrjsections.
3271*a9fa9459Szrj
3272*a9fa9459Szrj@code{@value{LD}} moves blocks of bytes of your program to their run-time
3273*a9fa9459Szrjaddresses.  These blocks slide to their run-time addresses as rigid
3274*a9fa9459Szrjunits; their length does not change and neither does the order of bytes
3275*a9fa9459Szrjwithin them.  Such a rigid unit is called a @emph{section}.  Assigning
3276*a9fa9459Szrjrun-time addresses to sections is called @dfn{relocation}.  It includes
3277*a9fa9459Szrjthe task of adjusting mentions of object-file addresses so they refer to
3278*a9fa9459Szrjthe proper run-time addresses.
3279*a9fa9459Szrj@ifset H8
3280*a9fa9459SzrjFor the H8/300, and for the Renesas / SuperH SH,
3281*a9fa9459Szrj@command{@value{AS}} pads sections if needed to
3282*a9fa9459Szrjensure they end on a word (sixteen bit) boundary.
3283*a9fa9459Szrj@end ifset
3284*a9fa9459Szrj
3285*a9fa9459Szrj@cindex standard assembler sections
3286*a9fa9459SzrjAn object file written by @command{@value{AS}} has at least three sections, any
3287*a9fa9459Szrjof which may be empty.  These are named @dfn{text}, @dfn{data} and
3288*a9fa9459Szrj@dfn{bss} sections.
3289*a9fa9459Szrj
3290*a9fa9459Szrj@ifset COFF-ELF
3291*a9fa9459Szrj@ifset GENERIC
3292*a9fa9459SzrjWhen it generates COFF or ELF output,
3293*a9fa9459Szrj@end ifset
3294*a9fa9459Szrj@command{@value{AS}} can also generate whatever other named sections you specify
3295*a9fa9459Szrjusing the @samp{.section} directive (@pxref{Section,,@code{.section}}).
3296*a9fa9459SzrjIf you do not use any directives that place output in the @samp{.text}
3297*a9fa9459Szrjor @samp{.data} sections, these sections still exist, but are empty.
3298*a9fa9459Szrj@end ifset
3299*a9fa9459Szrj
3300*a9fa9459Szrj@ifset HPPA
3301*a9fa9459Szrj@ifset GENERIC
3302*a9fa9459SzrjWhen @command{@value{AS}} generates SOM or ELF output for the HPPA,
3303*a9fa9459Szrj@end ifset
3304*a9fa9459Szrj@command{@value{AS}} can also generate whatever other named sections you
3305*a9fa9459Szrjspecify using the @samp{.space} and @samp{.subspace} directives.  See
3306*a9fa9459Szrj@cite{HP9000 Series 800 Assembly Language Reference Manual}
3307*a9fa9459Szrj(HP 92432-90001) for details on the @samp{.space} and @samp{.subspace}
3308*a9fa9459Szrjassembler directives.
3309*a9fa9459Szrj
3310*a9fa9459Szrj@ifset SOM
3311*a9fa9459SzrjAdditionally, @command{@value{AS}} uses different names for the standard
3312*a9fa9459Szrjtext, data, and bss sections when generating SOM output.  Program text
3313*a9fa9459Szrjis placed into the @samp{$CODE$} section, data into @samp{$DATA$}, and
3314*a9fa9459SzrjBSS into @samp{$BSS$}.
3315*a9fa9459Szrj@end ifset
3316*a9fa9459Szrj@end ifset
3317*a9fa9459Szrj
3318*a9fa9459SzrjWithin the object file, the text section starts at address @code{0}, the
3319*a9fa9459Szrjdata section follows, and the bss section follows the data section.
3320*a9fa9459Szrj
3321*a9fa9459Szrj@ifset HPPA
3322*a9fa9459SzrjWhen generating either SOM or ELF output files on the HPPA, the text
3323*a9fa9459Szrjsection starts at address @code{0}, the data section at address
3324*a9fa9459Szrj@code{0x4000000}, and the bss section follows the data section.
3325*a9fa9459Szrj@end ifset
3326*a9fa9459Szrj
3327*a9fa9459SzrjTo let @code{@value{LD}} know which data changes when the sections are
3328*a9fa9459Szrjrelocated, and how to change that data, @command{@value{AS}} also writes to the
3329*a9fa9459Szrjobject file details of the relocation needed.  To perform relocation
3330*a9fa9459Szrj@code{@value{LD}} must know, each time an address in the object
3331*a9fa9459Szrjfile is mentioned:
3332*a9fa9459Szrj@itemize @bullet
3333*a9fa9459Szrj@item
3334*a9fa9459SzrjWhere in the object file is the beginning of this reference to
3335*a9fa9459Szrjan address?
3336*a9fa9459Szrj@item
3337*a9fa9459SzrjHow long (in bytes) is this reference?
3338*a9fa9459Szrj@item
3339*a9fa9459SzrjWhich section does the address refer to?  What is the numeric value of
3340*a9fa9459Szrj@display
3341*a9fa9459Szrj(@var{address}) @minus{} (@var{start-address of section})?
3342*a9fa9459Szrj@end display
3343*a9fa9459Szrj@item
3344*a9fa9459SzrjIs the reference to an address ``Program-Counter relative''?
3345*a9fa9459Szrj@end itemize
3346*a9fa9459Szrj
3347*a9fa9459Szrj@cindex addresses, format of
3348*a9fa9459Szrj@cindex section-relative addressing
3349*a9fa9459SzrjIn fact, every address @command{@value{AS}} ever uses is expressed as
3350*a9fa9459Szrj@display
3351*a9fa9459Szrj(@var{section}) + (@var{offset into section})
3352*a9fa9459Szrj@end display
3353*a9fa9459Szrj@noindent
3354*a9fa9459SzrjFurther, most expressions @command{@value{AS}} computes have this section-relative
3355*a9fa9459Szrjnature.
3356*a9fa9459Szrj@ifset SOM
3357*a9fa9459Szrj(For some object formats, such as SOM for the HPPA, some expressions are
3358*a9fa9459Szrjsymbol-relative instead.)
3359*a9fa9459Szrj@end ifset
3360*a9fa9459Szrj
3361*a9fa9459SzrjIn this manual we use the notation @{@var{secname} @var{N}@} to mean ``offset
3362*a9fa9459Szrj@var{N} into section @var{secname}.''
3363*a9fa9459Szrj
3364*a9fa9459SzrjApart from text, data and bss sections you need to know about the
3365*a9fa9459Szrj@dfn{absolute} section.  When @code{@value{LD}} mixes partial programs,
3366*a9fa9459Szrjaddresses in the absolute section remain unchanged.  For example, address
3367*a9fa9459Szrj@code{@{absolute 0@}} is ``relocated'' to run-time address 0 by
3368*a9fa9459Szrj@code{@value{LD}}.  Although the linker never arranges two partial programs'
3369*a9fa9459Szrjdata sections with overlapping addresses after linking, @emph{by definition}
3370*a9fa9459Szrjtheir absolute sections must overlap.  Address @code{@{absolute@ 239@}} in one
3371*a9fa9459Szrjpart of a program is always the same address when the program is running as
3372*a9fa9459Szrjaddress @code{@{absolute@ 239@}} in any other part of the program.
3373*a9fa9459Szrj
3374*a9fa9459SzrjThe idea of sections is extended to the @dfn{undefined} section.  Any
3375*a9fa9459Szrjaddress whose section is unknown at assembly time is by definition
3376*a9fa9459Szrjrendered @{undefined @var{U}@}---where @var{U} is filled in later.
3377*a9fa9459SzrjSince numbers are always defined, the only way to generate an undefined
3378*a9fa9459Szrjaddress is to mention an undefined symbol.  A reference to a named
3379*a9fa9459Szrjcommon block would be such a symbol: its value is unknown at assembly
3380*a9fa9459Szrjtime so it has section @emph{undefined}.
3381*a9fa9459Szrj
3382*a9fa9459SzrjBy analogy the word @emph{section} is used to describe groups of sections in
3383*a9fa9459Szrjthe linked program.  @code{@value{LD}} puts all partial programs' text
3384*a9fa9459Szrjsections in contiguous addresses in the linked program.  It is
3385*a9fa9459Szrjcustomary to refer to the @emph{text section} of a program, meaning all
3386*a9fa9459Szrjthe addresses of all partial programs' text sections.  Likewise for
3387*a9fa9459Szrjdata and bss sections.
3388*a9fa9459Szrj
3389*a9fa9459SzrjSome sections are manipulated by @code{@value{LD}}; others are invented for
3390*a9fa9459Szrjuse of @command{@value{AS}} and have no meaning except during assembly.
3391*a9fa9459Szrj
3392*a9fa9459Szrj@node Ld Sections
3393*a9fa9459Szrj@section Linker Sections
3394*a9fa9459Szrj@code{@value{LD}} deals with just four kinds of sections, summarized below.
3395*a9fa9459Szrj
3396*a9fa9459Szrj@table @strong
3397*a9fa9459Szrj
3398*a9fa9459Szrj@ifset COFF-ELF
3399*a9fa9459Szrj@cindex named sections
3400*a9fa9459Szrj@cindex sections, named
3401*a9fa9459Szrj@item named sections
3402*a9fa9459Szrj@end ifset
3403*a9fa9459Szrj@ifset aout-bout
3404*a9fa9459Szrj@cindex text section
3405*a9fa9459Szrj@cindex data section
3406*a9fa9459Szrj@itemx text section
3407*a9fa9459Szrj@itemx data section
3408*a9fa9459Szrj@end ifset
3409*a9fa9459SzrjThese sections hold your program.  @command{@value{AS}} and @code{@value{LD}} treat them as
3410*a9fa9459Szrjseparate but equal sections.  Anything you can say of one section is
3411*a9fa9459Szrjtrue of another.
3412*a9fa9459Szrj@c @ifset aout-bout
3413*a9fa9459SzrjWhen the program is running, however, it is
3414*a9fa9459Szrjcustomary for the text section to be unalterable.  The
3415*a9fa9459Szrjtext section is often shared among processes: it contains
3416*a9fa9459Szrjinstructions, constants and the like.  The data section of a running
3417*a9fa9459Szrjprogram is usually alterable: for example, C variables would be stored
3418*a9fa9459Szrjin the data section.
3419*a9fa9459Szrj@c @end ifset
3420*a9fa9459Szrj
3421*a9fa9459Szrj@cindex bss section
3422*a9fa9459Szrj@item bss section
3423*a9fa9459SzrjThis section contains zeroed bytes when your program begins running.  It
3424*a9fa9459Szrjis used to hold uninitialized variables or common storage.  The length of
3425*a9fa9459Szrjeach partial program's bss section is important, but because it starts
3426*a9fa9459Szrjout containing zeroed bytes there is no need to store explicit zero
3427*a9fa9459Szrjbytes in the object file.  The bss section was invented to eliminate
3428*a9fa9459Szrjthose explicit zeros from object files.
3429*a9fa9459Szrj
3430*a9fa9459Szrj@cindex absolute section
3431*a9fa9459Szrj@item absolute section
3432*a9fa9459SzrjAddress 0 of this section is always ``relocated'' to runtime address 0.
3433*a9fa9459SzrjThis is useful if you want to refer to an address that @code{@value{LD}} must
3434*a9fa9459Szrjnot change when relocating.  In this sense we speak of absolute
3435*a9fa9459Szrjaddresses being ``unrelocatable'': they do not change during relocation.
3436*a9fa9459Szrj
3437*a9fa9459Szrj@cindex undefined section
3438*a9fa9459Szrj@item undefined section
3439*a9fa9459SzrjThis ``section'' is a catch-all for address references to objects not in
3440*a9fa9459Szrjthe preceding sections.
3441*a9fa9459Szrj@c FIXME: ref to some other doc on obj-file formats could go here.
3442*a9fa9459Szrj@end table
3443*a9fa9459Szrj
3444*a9fa9459Szrj@cindex relocation example
3445*a9fa9459SzrjAn idealized example of three relocatable sections follows.
3446*a9fa9459Szrj@ifset COFF-ELF
3447*a9fa9459SzrjThe example uses the traditional section names @samp{.text} and @samp{.data}.
3448*a9fa9459Szrj@end ifset
3449*a9fa9459SzrjMemory addresses are on the horizontal axis.
3450*a9fa9459Szrj
3451*a9fa9459Szrj@c TEXI2ROFF-KILL
3452*a9fa9459Szrj@ifnottex
3453*a9fa9459Szrj@c END TEXI2ROFF-KILL
3454*a9fa9459Szrj@smallexample
3455*a9fa9459Szrj                      +-----+----+--+
3456*a9fa9459Szrjpartial program # 1:  |ttttt|dddd|00|
3457*a9fa9459Szrj                      +-----+----+--+
3458*a9fa9459Szrj
3459*a9fa9459Szrj                      text   data bss
3460*a9fa9459Szrj                      seg.   seg. seg.
3461*a9fa9459Szrj
3462*a9fa9459Szrj                      +---+---+---+
3463*a9fa9459Szrjpartial program # 2:  |TTT|DDD|000|
3464*a9fa9459Szrj                      +---+---+---+
3465*a9fa9459Szrj
3466*a9fa9459Szrj                      +--+---+-----+--+----+---+-----+~~
3467*a9fa9459Szrjlinked program:       |  |TTT|ttttt|  |dddd|DDD|00000|
3468*a9fa9459Szrj                      +--+---+-----+--+----+---+-----+~~
3469*a9fa9459Szrj
3470*a9fa9459Szrj    addresses:        0 @dots{}
3471*a9fa9459Szrj@end smallexample
3472*a9fa9459Szrj@c TEXI2ROFF-KILL
3473*a9fa9459Szrj@end ifnottex
3474*a9fa9459Szrj@need 5000
3475*a9fa9459Szrj@tex
3476*a9fa9459Szrj\bigskip
3477*a9fa9459Szrj\line{\it Partial program \#1: \hfil}
3478*a9fa9459Szrj\line{\ibox{2.5cm}{\tt text}\ibox{2cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
3479*a9fa9459Szrj\line{\boxit{2.5cm}{\tt ttttt}\boxit{2cm}{\tt dddd}\boxit{1cm}{\tt 00}\hfil}
3480*a9fa9459Szrj
3481*a9fa9459Szrj\line{\it Partial program \#2: \hfil}
3482*a9fa9459Szrj\line{\ibox{1cm}{\tt text}\ibox{1.5cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
3483*a9fa9459Szrj\line{\boxit{1cm}{\tt TTT}\boxit{1.5cm}{\tt DDDD}\boxit{1cm}{\tt 000}\hfil}
3484*a9fa9459Szrj
3485*a9fa9459Szrj\line{\it linked program: \hfil}
3486*a9fa9459Szrj\line{\ibox{.5cm}{}\ibox{1cm}{\tt text}\ibox{2.5cm}{}\ibox{.75cm}{}\ibox{2cm}{\tt data}\ibox{1.5cm}{}\ibox{2cm}{\tt bss}\hfil}
3487*a9fa9459Szrj\line{\boxit{.5cm}{}\boxit{1cm}{\tt TTT}\boxit{2.5cm}{\tt
3488*a9fa9459Szrjttttt}\boxit{.75cm}{}\boxit{2cm}{\tt dddd}\boxit{1.5cm}{\tt
3489*a9fa9459SzrjDDDD}\boxit{2cm}{\tt 00000}\ \dots\hfil}
3490*a9fa9459Szrj
3491*a9fa9459Szrj\line{\it addresses: \hfil}
3492*a9fa9459Szrj\line{0\dots\hfil}
3493*a9fa9459Szrj
3494*a9fa9459Szrj@end tex
3495*a9fa9459Szrj@c END TEXI2ROFF-KILL
3496*a9fa9459Szrj
3497*a9fa9459Szrj@node As Sections
3498*a9fa9459Szrj@section Assembler Internal Sections
3499*a9fa9459Szrj
3500*a9fa9459Szrj@cindex internal assembler sections
3501*a9fa9459Szrj@cindex sections in messages, internal
3502*a9fa9459SzrjThese sections are meant only for the internal use of @command{@value{AS}}.  They
3503*a9fa9459Szrjhave no meaning at run-time.  You do not really need to know about these
3504*a9fa9459Szrjsections for most purposes; but they can be mentioned in @command{@value{AS}}
3505*a9fa9459Szrjwarning messages, so it might be helpful to have an idea of their
3506*a9fa9459Szrjmeanings to @command{@value{AS}}.  These sections are used to permit the
3507*a9fa9459Szrjvalue of every expression in your assembly language program to be a
3508*a9fa9459Szrjsection-relative address.
3509*a9fa9459Szrj
3510*a9fa9459Szrj@table @b
3511*a9fa9459Szrj@cindex assembler internal logic error
3512*a9fa9459Szrj@item ASSEMBLER-INTERNAL-LOGIC-ERROR!
3513*a9fa9459SzrjAn internal assembler logic error has been found.  This means there is a
3514*a9fa9459Szrjbug in the assembler.
3515*a9fa9459Szrj
3516*a9fa9459Szrj@cindex expr (internal section)
3517*a9fa9459Szrj@item expr section
3518*a9fa9459SzrjThe assembler stores complex expression internally as combinations of
3519*a9fa9459Szrjsymbols.  When it needs to represent an expression as a symbol, it puts
3520*a9fa9459Szrjit in the expr section.
3521*a9fa9459Szrj@c FIXME item debug
3522*a9fa9459Szrj@c FIXME item transfer[t] vector preload
3523*a9fa9459Szrj@c FIXME item transfer[t] vector postload
3524*a9fa9459Szrj@c FIXME item register
3525*a9fa9459Szrj@end table
3526*a9fa9459Szrj
3527*a9fa9459Szrj@node Sub-Sections
3528*a9fa9459Szrj@section Sub-Sections
3529*a9fa9459Szrj
3530*a9fa9459Szrj@cindex numbered subsections
3531*a9fa9459Szrj@cindex grouping data
3532*a9fa9459Szrj@ifset aout-bout
3533*a9fa9459SzrjAssembled bytes
3534*a9fa9459Szrj@ifset COFF-ELF
3535*a9fa9459Szrjconventionally
3536*a9fa9459Szrj@end ifset
3537*a9fa9459Szrjfall into two sections: text and data.
3538*a9fa9459Szrj@end ifset
3539*a9fa9459SzrjYou may have separate groups of
3540*a9fa9459Szrj@ifset GENERIC
3541*a9fa9459Szrjdata in named sections
3542*a9fa9459Szrj@end ifset
3543*a9fa9459Szrj@ifclear GENERIC
3544*a9fa9459Szrj@ifclear aout-bout
3545*a9fa9459Szrjdata in named sections
3546*a9fa9459Szrj@end ifclear
3547*a9fa9459Szrj@ifset aout-bout
3548*a9fa9459Szrjtext or data
3549*a9fa9459Szrj@end ifset
3550*a9fa9459Szrj@end ifclear
3551*a9fa9459Szrjthat you want to end up near to each other in the object file, even though they
3552*a9fa9459Szrjare not contiguous in the assembler source.  @command{@value{AS}} allows you to
3553*a9fa9459Szrjuse @dfn{subsections} for this purpose.  Within each section, there can be
3554*a9fa9459Szrjnumbered subsections with values from 0 to 8192.  Objects assembled into the
3555*a9fa9459Szrjsame subsection go into the object file together with other objects in the same
3556*a9fa9459Szrjsubsection.  For example, a compiler might want to store constants in the text
3557*a9fa9459Szrjsection, but might not want to have them interspersed with the program being
3558*a9fa9459Szrjassembled.  In this case, the compiler could issue a @samp{.text 0} before each
3559*a9fa9459Szrjsection of code being output, and a @samp{.text 1} before each group of
3560*a9fa9459Szrjconstants being output.
3561*a9fa9459Szrj
3562*a9fa9459SzrjSubsections are optional.  If you do not use subsections, everything
3563*a9fa9459Szrjgoes in subsection number zero.
3564*a9fa9459Szrj
3565*a9fa9459Szrj@ifset GENERIC
3566*a9fa9459SzrjEach subsection is zero-padded up to a multiple of four bytes.
3567*a9fa9459Szrj(Subsections may be padded a different amount on different flavors
3568*a9fa9459Szrjof @command{@value{AS}}.)
3569*a9fa9459Szrj@end ifset
3570*a9fa9459Szrj@ifclear GENERIC
3571*a9fa9459Szrj@ifset H8
3572*a9fa9459SzrjOn the H8/300 platform, each subsection is zero-padded to a word
3573*a9fa9459Szrjboundary (two bytes).
3574*a9fa9459SzrjThe same is true on the Renesas SH.
3575*a9fa9459Szrj@end ifset
3576*a9fa9459Szrj@ifset I960
3577*a9fa9459Szrj@c FIXME section padding (alignment)?
3578*a9fa9459Szrj@c Rich Pixley says padding here depends on target obj code format; that
3579*a9fa9459Szrj@c doesn't seem particularly useful to say without further elaboration,
3580*a9fa9459Szrj@c so for now I say nothing about it.  If this is a generic BFD issue,
3581*a9fa9459Szrj@c these paragraphs might need to vanish from this manual, and be
3582*a9fa9459Szrj@c discussed in BFD chapter of binutils (or some such).
3583*a9fa9459Szrj@end ifset
3584*a9fa9459Szrj@end ifclear
3585*a9fa9459Szrj
3586*a9fa9459SzrjSubsections appear in your object file in numeric order, lowest numbered
3587*a9fa9459Szrjto highest.  (All this to be compatible with other people's assemblers.)
3588*a9fa9459SzrjThe object file contains no representation of subsections; @code{@value{LD}} and
3589*a9fa9459Szrjother programs that manipulate object files see no trace of them.
3590*a9fa9459SzrjThey just see all your text subsections as a text section, and all your
3591*a9fa9459Szrjdata subsections as a data section.
3592*a9fa9459Szrj
3593*a9fa9459SzrjTo specify which subsection you want subsequent statements assembled
3594*a9fa9459Szrjinto, use a numeric argument to specify it, in a @samp{.text
3595*a9fa9459Szrj@var{expression}} or a @samp{.data @var{expression}} statement.
3596*a9fa9459Szrj@ifset COFF
3597*a9fa9459Szrj@ifset GENERIC
3598*a9fa9459SzrjWhen generating COFF output, you
3599*a9fa9459Szrj@end ifset
3600*a9fa9459Szrj@ifclear GENERIC
3601*a9fa9459SzrjYou
3602*a9fa9459Szrj@end ifclear
3603*a9fa9459Szrjcan also use an extra subsection
3604*a9fa9459Szrjargument with arbitrary named sections: @samp{.section @var{name},
3605*a9fa9459Szrj@var{expression}}.
3606*a9fa9459Szrj@end ifset
3607*a9fa9459Szrj@ifset ELF
3608*a9fa9459Szrj@ifset GENERIC
3609*a9fa9459SzrjWhen generating ELF output, you
3610*a9fa9459Szrj@end ifset
3611*a9fa9459Szrj@ifclear GENERIC
3612*a9fa9459SzrjYou
3613*a9fa9459Szrj@end ifclear
3614*a9fa9459Szrjcan also use the @code{.subsection} directive (@pxref{SubSection})
3615*a9fa9459Szrjto specify a subsection: @samp{.subsection @var{expression}}.
3616*a9fa9459Szrj@end ifset
3617*a9fa9459Szrj@var{Expression} should be an absolute expression
3618*a9fa9459Szrj(@pxref{Expressions}).  If you just say @samp{.text} then @samp{.text 0}
3619*a9fa9459Szrjis assumed.  Likewise @samp{.data} means @samp{.data 0}.  Assembly
3620*a9fa9459Szrjbegins in @code{text 0}.  For instance:
3621*a9fa9459Szrj@smallexample
3622*a9fa9459Szrj.text 0     # The default subsection is text 0 anyway.
3623*a9fa9459Szrj.ascii "This lives in the first text subsection. *"
3624*a9fa9459Szrj.text 1
3625*a9fa9459Szrj.ascii "But this lives in the second text subsection."
3626*a9fa9459Szrj.data 0
3627*a9fa9459Szrj.ascii "This lives in the data section,"
3628*a9fa9459Szrj.ascii "in the first data subsection."
3629*a9fa9459Szrj.text 0
3630*a9fa9459Szrj.ascii "This lives in the first text section,"
3631*a9fa9459Szrj.ascii "immediately following the asterisk (*)."
3632*a9fa9459Szrj@end smallexample
3633*a9fa9459Szrj
3634*a9fa9459SzrjEach section has a @dfn{location counter} incremented by one for every byte
3635*a9fa9459Szrjassembled into that section.  Because subsections are merely a convenience
3636*a9fa9459Szrjrestricted to @command{@value{AS}} there is no concept of a subsection location
3637*a9fa9459Szrjcounter.  There is no way to directly manipulate a location counter---but the
3638*a9fa9459Szrj@code{.align} directive changes it, and any label definition captures its
3639*a9fa9459Szrjcurrent value.  The location counter of the section where statements are being
3640*a9fa9459Szrjassembled is said to be the @dfn{active} location counter.
3641*a9fa9459Szrj
3642*a9fa9459Szrj@node bss
3643*a9fa9459Szrj@section bss Section
3644*a9fa9459Szrj
3645*a9fa9459Szrj@cindex bss section
3646*a9fa9459Szrj@cindex common variable storage
3647*a9fa9459SzrjThe bss section is used for local common variable storage.
3648*a9fa9459SzrjYou may allocate address space in the bss section, but you may
3649*a9fa9459Szrjnot dictate data to load into it before your program executes.  When
3650*a9fa9459Szrjyour program starts running, all the contents of the bss
3651*a9fa9459Szrjsection are zeroed bytes.
3652*a9fa9459Szrj
3653*a9fa9459SzrjThe @code{.lcomm} pseudo-op defines a symbol in the bss section; see
3654*a9fa9459Szrj@ref{Lcomm,,@code{.lcomm}}.
3655*a9fa9459Szrj
3656*a9fa9459SzrjThe @code{.comm} pseudo-op may be used to declare a common symbol, which is
3657*a9fa9459Szrjanother form of uninitialized symbol; see @ref{Comm,,@code{.comm}}.
3658*a9fa9459Szrj
3659*a9fa9459Szrj@ifset GENERIC
3660*a9fa9459SzrjWhen assembling for a target which supports multiple sections, such as ELF or
3661*a9fa9459SzrjCOFF, you may switch into the @code{.bss} section and define symbols as usual;
3662*a9fa9459Szrjsee @ref{Section,,@code{.section}}.  You may only assemble zero values into the
3663*a9fa9459Szrjsection.  Typically the section will only contain symbol definitions and
3664*a9fa9459Szrj@code{.skip} directives (@pxref{Skip,,@code{.skip}}).
3665*a9fa9459Szrj@end ifset
3666*a9fa9459Szrj
3667*a9fa9459Szrj@node Symbols
3668*a9fa9459Szrj@chapter Symbols
3669*a9fa9459Szrj
3670*a9fa9459Szrj@cindex symbols
3671*a9fa9459SzrjSymbols are a central concept: the programmer uses symbols to name
3672*a9fa9459Szrjthings, the linker uses symbols to link, and the debugger uses symbols
3673*a9fa9459Szrjto debug.
3674*a9fa9459Szrj
3675*a9fa9459Szrj@quotation
3676*a9fa9459Szrj@cindex debuggers, and symbol order
3677*a9fa9459Szrj@emph{Warning:} @command{@value{AS}} does not place symbols in the object file in
3678*a9fa9459Szrjthe same order they were declared.  This may break some debuggers.
3679*a9fa9459Szrj@end quotation
3680*a9fa9459Szrj
3681*a9fa9459Szrj@menu
3682*a9fa9459Szrj* Labels::                      Labels
3683*a9fa9459Szrj* Setting Symbols::             Giving Symbols Other Values
3684*a9fa9459Szrj* Symbol Names::                Symbol Names
3685*a9fa9459Szrj* Dot::                         The Special Dot Symbol
3686*a9fa9459Szrj* Symbol Attributes::           Symbol Attributes
3687*a9fa9459Szrj@end menu
3688*a9fa9459Szrj
3689*a9fa9459Szrj@node Labels
3690*a9fa9459Szrj@section Labels
3691*a9fa9459Szrj
3692*a9fa9459Szrj@cindex labels
3693*a9fa9459SzrjA @dfn{label} is written as a symbol immediately followed by a colon
3694*a9fa9459Szrj@samp{:}.  The symbol then represents the current value of the
3695*a9fa9459Szrjactive location counter, and is, for example, a suitable instruction
3696*a9fa9459Szrjoperand.  You are warned if you use the same symbol to represent two
3697*a9fa9459Szrjdifferent locations: the first definition overrides any other
3698*a9fa9459Szrjdefinitions.
3699*a9fa9459Szrj
3700*a9fa9459Szrj@ifset HPPA
3701*a9fa9459SzrjOn the HPPA, the usual form for a label need not be immediately followed by a
3702*a9fa9459Szrjcolon, but instead must start in column zero.  Only one label may be defined on
3703*a9fa9459Szrja single line.  To work around this, the HPPA version of @command{@value{AS}} also
3704*a9fa9459Szrjprovides a special directive @code{.label} for defining labels more flexibly.
3705*a9fa9459Szrj@end ifset
3706*a9fa9459Szrj
3707*a9fa9459Szrj@node Setting Symbols
3708*a9fa9459Szrj@section Giving Symbols Other Values
3709*a9fa9459Szrj
3710*a9fa9459Szrj@cindex assigning values to symbols
3711*a9fa9459Szrj@cindex symbol values, assigning
3712*a9fa9459SzrjA symbol can be given an arbitrary value by writing a symbol, followed
3713*a9fa9459Szrjby an equals sign @samp{=}, followed by an expression
3714*a9fa9459Szrj(@pxref{Expressions}).  This is equivalent to using the @code{.set}
3715*a9fa9459Szrjdirective.  @xref{Set,,@code{.set}}.  In the same way, using a double
3716*a9fa9459Szrjequals sign @samp{=}@samp{=} here represents an equivalent of the
3717*a9fa9459Szrj@code{.eqv} directive.  @xref{Eqv,,@code{.eqv}}.
3718*a9fa9459Szrj
3719*a9fa9459Szrj@ifset Blackfin
3720*a9fa9459SzrjBlackfin does not support symbol assignment with @samp{=}.
3721*a9fa9459Szrj@end ifset
3722*a9fa9459Szrj
3723*a9fa9459Szrj@node Symbol Names
3724*a9fa9459Szrj@section Symbol Names
3725*a9fa9459Szrj
3726*a9fa9459Szrj@cindex symbol names
3727*a9fa9459Szrj@cindex names, symbol
3728*a9fa9459Szrj@ifclear SPECIAL-SYMS
3729*a9fa9459SzrjSymbol names begin with a letter or with one of @samp{._}.  On most
3730*a9fa9459Szrjmachines, you can also use @code{$} in symbol names; exceptions are
3731*a9fa9459Szrjnoted in @ref{Machine Dependencies}.  That character may be followed by any
3732*a9fa9459Szrjstring of digits, letters, dollar signs (unless otherwise noted for a
3733*a9fa9459Szrjparticular target machine), and underscores.
3734*a9fa9459Szrj@end ifclear
3735*a9fa9459Szrj@ifset SPECIAL-SYMS
3736*a9fa9459Szrj@ifset H8
3737*a9fa9459SzrjSymbol names begin with a letter or with one of @samp{._}.  On the
3738*a9fa9459SzrjRenesas SH you can also use @code{$} in symbol names.  That
3739*a9fa9459Szrjcharacter may be followed by any string of digits, letters, dollar signs (save
3740*a9fa9459Szrjon the H8/300), and underscores.
3741*a9fa9459Szrj@end ifset
3742*a9fa9459Szrj@end ifset
3743*a9fa9459Szrj
3744*a9fa9459SzrjCase of letters is significant: @code{foo} is a different symbol name
3745*a9fa9459Szrjthan @code{Foo}.
3746*a9fa9459Szrj
3747*a9fa9459SzrjSymbol names do not start with a digit.  An exception to this rule is made for
3748*a9fa9459SzrjLocal Labels.  See below.
3749*a9fa9459Szrj
3750*a9fa9459SzrjMultibyte characters are supported.  To generate a symbol name containing
3751*a9fa9459Szrjmultibyte characters enclose it within double quotes and use escape codes. cf
3752*a9fa9459Szrj@xref{Strings}.  Generating a multibyte symbol name from a label is not
3753*a9fa9459Szrjcurrently supported.
3754*a9fa9459Szrj
3755*a9fa9459SzrjEach symbol has exactly one name.  Each name in an assembly language program
3756*a9fa9459Szrjrefers to exactly one symbol.  You may use that symbol name any number of times
3757*a9fa9459Szrjin a program.
3758*a9fa9459Szrj
3759*a9fa9459Szrj@subheading Local Symbol Names
3760*a9fa9459Szrj
3761*a9fa9459Szrj@cindex local symbol names
3762*a9fa9459Szrj@cindex symbol names, local
3763*a9fa9459SzrjA local symbol is any symbol beginning with certain local label prefixes.
3764*a9fa9459SzrjBy default, the local label prefix is @samp{.L} for ELF systems or
3765*a9fa9459Szrj@samp{L} for traditional a.out systems, but each target may have its own
3766*a9fa9459Szrjset of local label prefixes.
3767*a9fa9459Szrj@ifset HPPA
3768*a9fa9459SzrjOn the HPPA local symbols begin with @samp{L$}.
3769*a9fa9459Szrj@end ifset
3770*a9fa9459Szrj
3771*a9fa9459SzrjLocal symbols are defined and used within the assembler, but they are
3772*a9fa9459Szrjnormally not saved in object files.  Thus, they are not visible when debugging.
3773*a9fa9459SzrjYou may use the @samp{-L} option (@pxref{L, ,Include Local Symbols})
3774*a9fa9459Szrjto retain the local symbols in the object files.
3775*a9fa9459Szrj
3776*a9fa9459Szrj@subheading Local Labels
3777*a9fa9459Szrj
3778*a9fa9459Szrj@cindex local labels
3779*a9fa9459Szrj@cindex temporary symbol names
3780*a9fa9459Szrj@cindex symbol names, temporary
3781*a9fa9459SzrjLocal labels are different from local symbols.  Local labels help compilers and
3782*a9fa9459Szrjprogrammers use names temporarily.  They create symbols which are guaranteed to
3783*a9fa9459Szrjbe unique over the entire scope of the input source code and which can be
3784*a9fa9459Szrjreferred to by a simple notation.  To define a local label, write a label of
3785*a9fa9459Szrjthe form @samp{@b{N}:} (where @b{N} represents any non-negative integer).
3786*a9fa9459SzrjTo refer to the most recent previous definition of that label write
3787*a9fa9459Szrj@samp{@b{N}b}, using the same number as when you defined the label.  To refer
3788*a9fa9459Szrjto the next definition of a local label, write @samp{@b{N}f}.  The @samp{b}
3789*a9fa9459Szrjstands for ``backwards'' and the @samp{f} stands for ``forwards''.
3790*a9fa9459Szrj
3791*a9fa9459SzrjThere is no restriction on how you can use these labels, and you can reuse them
3792*a9fa9459Szrjtoo.  So that it is possible to repeatedly define the same local label (using
3793*a9fa9459Szrjthe same number @samp{@b{N}}), although you can only refer to the most recently
3794*a9fa9459Szrjdefined local label of that number (for a backwards reference) or the next
3795*a9fa9459Szrjdefinition of a specific local label for a forward reference.  It is also worth
3796*a9fa9459Szrjnoting that the first 10 local labels (@samp{@b{0:}}@dots{}@samp{@b{9:}}) are
3797*a9fa9459Szrjimplemented in a slightly more efficient manner than the others.
3798*a9fa9459Szrj
3799*a9fa9459SzrjHere is an example:
3800*a9fa9459Szrj
3801*a9fa9459Szrj@smallexample
3802*a9fa9459Szrj1:        branch 1f
3803*a9fa9459Szrj2:        branch 1b
3804*a9fa9459Szrj1:        branch 2f
3805*a9fa9459Szrj2:        branch 1b
3806*a9fa9459Szrj@end smallexample
3807*a9fa9459Szrj
3808*a9fa9459SzrjWhich is the equivalent of:
3809*a9fa9459Szrj
3810*a9fa9459Szrj@smallexample
3811*a9fa9459Szrjlabel_1:  branch label_3
3812*a9fa9459Szrjlabel_2:  branch label_1
3813*a9fa9459Szrjlabel_3:  branch label_4
3814*a9fa9459Szrjlabel_4:  branch label_3
3815*a9fa9459Szrj@end smallexample
3816*a9fa9459Szrj
3817*a9fa9459SzrjLocal label names are only a notational device.  They are immediately
3818*a9fa9459Szrjtransformed into more conventional symbol names before the assembler uses them.
3819*a9fa9459SzrjThe symbol names are stored in the symbol table, appear in error messages, and
3820*a9fa9459Szrjare optionally emitted to the object file.  The names are constructed using
3821*a9fa9459Szrjthese parts:
3822*a9fa9459Szrj
3823*a9fa9459Szrj@table @code
3824*a9fa9459Szrj@item @emph{local label prefix}
3825*a9fa9459SzrjAll local symbols begin with the system-specific local label prefix.
3826*a9fa9459SzrjNormally both @command{@value{AS}} and @code{@value{LD}} forget symbols
3827*a9fa9459Szrjthat start with the local label prefix.  These labels are
3828*a9fa9459Szrjused for symbols you are never intended to see.  If you use the
3829*a9fa9459Szrj@samp{-L} option then @command{@value{AS}} retains these symbols in the
3830*a9fa9459Szrjobject file. If you also instruct @code{@value{LD}} to retain these symbols,
3831*a9fa9459Szrjyou may use them in debugging.
3832*a9fa9459Szrj
3833*a9fa9459Szrj@item @var{number}
3834*a9fa9459SzrjThis is the number that was used in the local label definition.  So if the
3835*a9fa9459Szrjlabel is written @samp{55:} then the number is @samp{55}.
3836*a9fa9459Szrj
3837*a9fa9459Szrj@item @kbd{C-B}
3838*a9fa9459SzrjThis unusual character is included so you do not accidentally invent a symbol
3839*a9fa9459Szrjof the same name.  The character has ASCII value of @samp{\002} (control-B).
3840*a9fa9459Szrj
3841*a9fa9459Szrj@item @emph{ordinal number}
3842*a9fa9459SzrjThis is a serial number to keep the labels distinct.  The first definition of
3843*a9fa9459Szrj@samp{0:} gets the number @samp{1}.  The 15th definition of @samp{0:} gets the
3844*a9fa9459Szrjnumber @samp{15}, and so on.  Likewise the first definition of @samp{1:} gets
3845*a9fa9459Szrjthe number @samp{1} and its 15th definition gets @samp{15} as well.
3846*a9fa9459Szrj@end table
3847*a9fa9459Szrj
3848*a9fa9459SzrjSo for example, the first @code{1:} may be named @code{.L1@kbd{C-B}1}, and
3849*a9fa9459Szrjthe 44th @code{3:} may be named @code{.L3@kbd{C-B}44}.
3850*a9fa9459Szrj
3851*a9fa9459Szrj@subheading Dollar Local Labels
3852*a9fa9459Szrj@cindex dollar local symbols
3853*a9fa9459Szrj
3854*a9fa9459SzrjOn some targets @code{@value{AS}} also supports an even more local form of
3855*a9fa9459Szrjlocal labels called dollar labels.  These labels go out of scope (i.e., they
3856*a9fa9459Szrjbecome undefined) as soon as a non-local label is defined.  Thus they remain
3857*a9fa9459Szrjvalid for only a small region of the input source code.  Normal local labels,
3858*a9fa9459Szrjby contrast, remain in scope for the entire file, or until they are redefined
3859*a9fa9459Szrjby another occurrence of the same local label.
3860*a9fa9459Szrj
3861*a9fa9459SzrjDollar labels are defined in exactly the same way as ordinary local labels,
3862*a9fa9459Szrjexcept that they have a dollar sign suffix to their numeric value, e.g.,
3863*a9fa9459Szrj@samp{@b{55$:}}.
3864*a9fa9459Szrj
3865*a9fa9459SzrjThey can also be distinguished from ordinary local labels by their transformed
3866*a9fa9459Szrjnames which use ASCII character @samp{\001} (control-A) as the magic character
3867*a9fa9459Szrjto distinguish them from ordinary labels.  For example, the fifth definition of
3868*a9fa9459Szrj@samp{6$} may be named @samp{.L6@kbd{C-A}5}.
3869*a9fa9459Szrj
3870*a9fa9459Szrj@node Dot
3871*a9fa9459Szrj@section The Special Dot Symbol
3872*a9fa9459Szrj
3873*a9fa9459Szrj@cindex dot (symbol)
3874*a9fa9459Szrj@cindex @code{.} (symbol)
3875*a9fa9459Szrj@cindex current address
3876*a9fa9459Szrj@cindex location counter
3877*a9fa9459SzrjThe special symbol @samp{.} refers to the current address that
3878*a9fa9459Szrj@command{@value{AS}} is assembling into.  Thus, the expression @samp{melvin:
3879*a9fa9459Szrj.long .} defines @code{melvin} to contain its own address.
3880*a9fa9459SzrjAssigning a value to @code{.} is treated the same as a @code{.org}
3881*a9fa9459Szrjdirective.
3882*a9fa9459Szrj@ifclear no-space-dir
3883*a9fa9459SzrjThus, the expression @samp{.=.+4} is the same as saying
3884*a9fa9459Szrj@samp{.space 4}.
3885*a9fa9459Szrj@end ifclear
3886*a9fa9459Szrj
3887*a9fa9459Szrj@node Symbol Attributes
3888*a9fa9459Szrj@section Symbol Attributes
3889*a9fa9459Szrj
3890*a9fa9459Szrj@cindex symbol attributes
3891*a9fa9459Szrj@cindex attributes, symbol
3892*a9fa9459SzrjEvery symbol has, as well as its name, the attributes ``Value'' and
3893*a9fa9459Szrj``Type''.  Depending on output format, symbols can also have auxiliary
3894*a9fa9459Szrjattributes.
3895*a9fa9459Szrj@ifset INTERNALS
3896*a9fa9459SzrjThe detailed definitions are in @file{a.out.h}.
3897*a9fa9459Szrj@end ifset
3898*a9fa9459Szrj
3899*a9fa9459SzrjIf you use a symbol without defining it, @command{@value{AS}} assumes zero for
3900*a9fa9459Szrjall these attributes, and probably won't warn you.  This makes the
3901*a9fa9459Szrjsymbol an externally defined symbol, which is generally what you
3902*a9fa9459Szrjwould want.
3903*a9fa9459Szrj
3904*a9fa9459Szrj@menu
3905*a9fa9459Szrj* Symbol Value::                Value
3906*a9fa9459Szrj* Symbol Type::                 Type
3907*a9fa9459Szrj@ifset aout-bout
3908*a9fa9459Szrj@ifset GENERIC
3909*a9fa9459Szrj* a.out Symbols::               Symbol Attributes: @code{a.out}
3910*a9fa9459Szrj@end ifset
3911*a9fa9459Szrj@ifclear GENERIC
3912*a9fa9459Szrj@ifclear BOUT
3913*a9fa9459Szrj* a.out Symbols::               Symbol Attributes: @code{a.out}
3914*a9fa9459Szrj@end ifclear
3915*a9fa9459Szrj@ifset BOUT
3916*a9fa9459Szrj* a.out Symbols::               Symbol Attributes: @code{a.out}, @code{b.out}
3917*a9fa9459Szrj@end ifset
3918*a9fa9459Szrj@end ifclear
3919*a9fa9459Szrj@end ifset
3920*a9fa9459Szrj@ifset COFF
3921*a9fa9459Szrj* COFF Symbols::                Symbol Attributes for COFF
3922*a9fa9459Szrj@end ifset
3923*a9fa9459Szrj@ifset SOM
3924*a9fa9459Szrj* SOM Symbols::                Symbol Attributes for SOM
3925*a9fa9459Szrj@end ifset
3926*a9fa9459Szrj@end menu
3927*a9fa9459Szrj
3928*a9fa9459Szrj@node Symbol Value
3929*a9fa9459Szrj@subsection Value
3930*a9fa9459Szrj
3931*a9fa9459Szrj@cindex value of a symbol
3932*a9fa9459Szrj@cindex symbol value
3933*a9fa9459SzrjThe value of a symbol is (usually) 32 bits.  For a symbol which labels a
3934*a9fa9459Szrjlocation in the text, data, bss or absolute sections the value is the
3935*a9fa9459Szrjnumber of addresses from the start of that section to the label.
3936*a9fa9459SzrjNaturally for text, data and bss sections the value of a symbol changes
3937*a9fa9459Szrjas @code{@value{LD}} changes section base addresses during linking.  Absolute
3938*a9fa9459Szrjsymbols' values do not change during linking: that is why they are
3939*a9fa9459Szrjcalled absolute.
3940*a9fa9459Szrj
3941*a9fa9459SzrjThe value of an undefined symbol is treated in a special way.  If it is
3942*a9fa9459Szrj0 then the symbol is not defined in this assembler source file, and
3943*a9fa9459Szrj@code{@value{LD}} tries to determine its value from other files linked into the
3944*a9fa9459Szrjsame program.  You make this kind of symbol simply by mentioning a symbol
3945*a9fa9459Szrjname without defining it.  A non-zero value represents a @code{.comm}
3946*a9fa9459Szrjcommon declaration.  The value is how much common storage to reserve, in
3947*a9fa9459Szrjbytes (addresses).  The symbol refers to the first address of the
3948*a9fa9459Szrjallocated storage.
3949*a9fa9459Szrj
3950*a9fa9459Szrj@node Symbol Type
3951*a9fa9459Szrj@subsection Type
3952*a9fa9459Szrj
3953*a9fa9459Szrj@cindex type of a symbol
3954*a9fa9459Szrj@cindex symbol type
3955*a9fa9459SzrjThe type attribute of a symbol contains relocation (section)
3956*a9fa9459Szrjinformation, any flag settings indicating that a symbol is external, and
3957*a9fa9459Szrj(optionally), other information for linkers and debuggers.  The exact
3958*a9fa9459Szrjformat depends on the object-code output format in use.
3959*a9fa9459Szrj
3960*a9fa9459Szrj@ifset aout-bout
3961*a9fa9459Szrj@ifclear GENERIC
3962*a9fa9459Szrj@ifset BOUT
3963*a9fa9459Szrj@c The following avoids a "widow" subsection title.  @group would be
3964*a9fa9459Szrj@c better if it were available outside examples.
3965*a9fa9459Szrj@need 1000
3966*a9fa9459Szrj@node a.out Symbols
3967*a9fa9459Szrj@subsection Symbol Attributes: @code{a.out}, @code{b.out}
3968*a9fa9459Szrj
3969*a9fa9459Szrj@cindex @code{b.out} symbol attributes
3970*a9fa9459Szrj@cindex symbol attributes, @code{b.out}
3971*a9fa9459SzrjThese symbol attributes appear only when @command{@value{AS}} is configured for
3972*a9fa9459Szrjone of the Berkeley-descended object output formats---@code{a.out} or
3973*a9fa9459Szrj@code{b.out}.
3974*a9fa9459Szrj
3975*a9fa9459Szrj@end ifset
3976*a9fa9459Szrj@ifclear BOUT
3977*a9fa9459Szrj@node a.out Symbols
3978*a9fa9459Szrj@subsection Symbol Attributes: @code{a.out}
3979*a9fa9459Szrj
3980*a9fa9459Szrj@cindex @code{a.out} symbol attributes
3981*a9fa9459Szrj@cindex symbol attributes, @code{a.out}
3982*a9fa9459Szrj
3983*a9fa9459Szrj@end ifclear
3984*a9fa9459Szrj@end ifclear
3985*a9fa9459Szrj@ifset GENERIC
3986*a9fa9459Szrj@node a.out Symbols
3987*a9fa9459Szrj@subsection Symbol Attributes: @code{a.out}
3988*a9fa9459Szrj
3989*a9fa9459Szrj@cindex @code{a.out} symbol attributes
3990*a9fa9459Szrj@cindex symbol attributes, @code{a.out}
3991*a9fa9459Szrj
3992*a9fa9459Szrj@end ifset
3993*a9fa9459Szrj@menu
3994*a9fa9459Szrj* Symbol Desc::                 Descriptor
3995*a9fa9459Szrj* Symbol Other::                Other
3996*a9fa9459Szrj@end menu
3997*a9fa9459Szrj
3998*a9fa9459Szrj@node Symbol Desc
3999*a9fa9459Szrj@subsubsection Descriptor
4000*a9fa9459Szrj
4001*a9fa9459Szrj@cindex descriptor, of @code{a.out} symbol
4002*a9fa9459SzrjThis is an arbitrary 16-bit value.  You may establish a symbol's
4003*a9fa9459Szrjdescriptor value by using a @code{.desc} statement
4004*a9fa9459Szrj(@pxref{Desc,,@code{.desc}}).  A descriptor value means nothing to
4005*a9fa9459Szrj@command{@value{AS}}.
4006*a9fa9459Szrj
4007*a9fa9459Szrj@node Symbol Other
4008*a9fa9459Szrj@subsubsection Other
4009*a9fa9459Szrj
4010*a9fa9459Szrj@cindex other attribute, of @code{a.out} symbol
4011*a9fa9459SzrjThis is an arbitrary 8-bit value.  It means nothing to @command{@value{AS}}.
4012*a9fa9459Szrj@end ifset
4013*a9fa9459Szrj
4014*a9fa9459Szrj@ifset COFF
4015*a9fa9459Szrj@node COFF Symbols
4016*a9fa9459Szrj@subsection Symbol Attributes for COFF
4017*a9fa9459Szrj
4018*a9fa9459Szrj@cindex COFF symbol attributes
4019*a9fa9459Szrj@cindex symbol attributes, COFF
4020*a9fa9459Szrj
4021*a9fa9459SzrjThe COFF format supports a multitude of auxiliary symbol attributes;
4022*a9fa9459Szrjlike the primary symbol attributes, they are set between @code{.def} and
4023*a9fa9459Szrj@code{.endef} directives.
4024*a9fa9459Szrj
4025*a9fa9459Szrj@subsubsection Primary Attributes
4026*a9fa9459Szrj
4027*a9fa9459Szrj@cindex primary attributes, COFF symbols
4028*a9fa9459SzrjThe symbol name is set with @code{.def}; the value and type,
4029*a9fa9459Szrjrespectively, with @code{.val} and @code{.type}.
4030*a9fa9459Szrj
4031*a9fa9459Szrj@subsubsection Auxiliary Attributes
4032*a9fa9459Szrj
4033*a9fa9459Szrj@cindex auxiliary attributes, COFF symbols
4034*a9fa9459SzrjThe @command{@value{AS}} directives @code{.dim}, @code{.line}, @code{.scl},
4035*a9fa9459Szrj@code{.size}, @code{.tag}, and @code{.weak} can generate auxiliary symbol
4036*a9fa9459Szrjtable information for COFF.
4037*a9fa9459Szrj@end ifset
4038*a9fa9459Szrj
4039*a9fa9459Szrj@ifset SOM
4040*a9fa9459Szrj@node SOM Symbols
4041*a9fa9459Szrj@subsection Symbol Attributes for SOM
4042*a9fa9459Szrj
4043*a9fa9459Szrj@cindex SOM symbol attributes
4044*a9fa9459Szrj@cindex symbol attributes, SOM
4045*a9fa9459Szrj
4046*a9fa9459SzrjThe SOM format for the HPPA supports a multitude of symbol attributes set with
4047*a9fa9459Szrjthe @code{.EXPORT} and @code{.IMPORT} directives.
4048*a9fa9459Szrj
4049*a9fa9459SzrjThe attributes are described in @cite{HP9000 Series 800 Assembly
4050*a9fa9459SzrjLanguage Reference Manual} (HP 92432-90001) under the @code{IMPORT} and
4051*a9fa9459Szrj@code{EXPORT} assembler directive documentation.
4052*a9fa9459Szrj@end ifset
4053*a9fa9459Szrj
4054*a9fa9459Szrj@node Expressions
4055*a9fa9459Szrj@chapter Expressions
4056*a9fa9459Szrj
4057*a9fa9459Szrj@cindex expressions
4058*a9fa9459Szrj@cindex addresses
4059*a9fa9459Szrj@cindex numeric values
4060*a9fa9459SzrjAn @dfn{expression} specifies an address or numeric value.
4061*a9fa9459SzrjWhitespace may precede and/or follow an expression.
4062*a9fa9459Szrj
4063*a9fa9459SzrjThe result of an expression must be an absolute number, or else an offset into
4064*a9fa9459Szrja particular section.  If an expression is not absolute, and there is not
4065*a9fa9459Szrjenough information when @command{@value{AS}} sees the expression to know its
4066*a9fa9459Szrjsection, a second pass over the source program might be necessary to interpret
4067*a9fa9459Szrjthe expression---but the second pass is currently not implemented.
4068*a9fa9459Szrj@command{@value{AS}} aborts with an error message in this situation.
4069*a9fa9459Szrj
4070*a9fa9459Szrj@menu
4071*a9fa9459Szrj* Empty Exprs::                 Empty Expressions
4072*a9fa9459Szrj* Integer Exprs::               Integer Expressions
4073*a9fa9459Szrj@end menu
4074*a9fa9459Szrj
4075*a9fa9459Szrj@node Empty Exprs
4076*a9fa9459Szrj@section Empty Expressions
4077*a9fa9459Szrj
4078*a9fa9459Szrj@cindex empty expressions
4079*a9fa9459Szrj@cindex expressions, empty
4080*a9fa9459SzrjAn empty expression has no value: it is just whitespace or null.
4081*a9fa9459SzrjWherever an absolute expression is required, you may omit the
4082*a9fa9459Szrjexpression, and @command{@value{AS}} assumes a value of (absolute) 0.  This
4083*a9fa9459Szrjis compatible with other assemblers.
4084*a9fa9459Szrj
4085*a9fa9459Szrj@node Integer Exprs
4086*a9fa9459Szrj@section Integer Expressions
4087*a9fa9459Szrj
4088*a9fa9459Szrj@cindex integer expressions
4089*a9fa9459Szrj@cindex expressions, integer
4090*a9fa9459SzrjAn @dfn{integer expression} is one or more @emph{arguments} delimited
4091*a9fa9459Szrjby @emph{operators}.
4092*a9fa9459Szrj
4093*a9fa9459Szrj@menu
4094*a9fa9459Szrj* Arguments::                   Arguments
4095*a9fa9459Szrj* Operators::                   Operators
4096*a9fa9459Szrj* Prefix Ops::                  Prefix Operators
4097*a9fa9459Szrj* Infix Ops::                   Infix Operators
4098*a9fa9459Szrj@end menu
4099*a9fa9459Szrj
4100*a9fa9459Szrj@node Arguments
4101*a9fa9459Szrj@subsection Arguments
4102*a9fa9459Szrj
4103*a9fa9459Szrj@cindex expression arguments
4104*a9fa9459Szrj@cindex arguments in expressions
4105*a9fa9459Szrj@cindex operands in expressions
4106*a9fa9459Szrj@cindex arithmetic operands
4107*a9fa9459Szrj@dfn{Arguments} are symbols, numbers or subexpressions.  In other
4108*a9fa9459Szrjcontexts arguments are sometimes called ``arithmetic operands''.  In
4109*a9fa9459Szrjthis manual, to avoid confusing them with the ``instruction operands'' of
4110*a9fa9459Szrjthe machine language, we use the term ``argument'' to refer to parts of
4111*a9fa9459Szrjexpressions only, reserving the word ``operand'' to refer only to machine
4112*a9fa9459Szrjinstruction operands.
4113*a9fa9459Szrj
4114*a9fa9459SzrjSymbols are evaluated to yield @{@var{section} @var{NNN}@} where
4115*a9fa9459Szrj@var{section} is one of text, data, bss, absolute,
4116*a9fa9459Szrjor undefined.  @var{NNN} is a signed, 2's complement 32 bit
4117*a9fa9459Szrjinteger.
4118*a9fa9459Szrj
4119*a9fa9459SzrjNumbers are usually integers.
4120*a9fa9459Szrj
4121*a9fa9459SzrjA number can be a flonum or bignum.  In this case, you are warned
4122*a9fa9459Szrjthat only the low order 32 bits are used, and @command{@value{AS}} pretends
4123*a9fa9459Szrjthese 32 bits are an integer.  You may write integer-manipulating
4124*a9fa9459Szrjinstructions that act on exotic constants, compatible with other
4125*a9fa9459Szrjassemblers.
4126*a9fa9459Szrj
4127*a9fa9459Szrj@cindex subexpressions
4128*a9fa9459SzrjSubexpressions are a left parenthesis @samp{(} followed by an integer
4129*a9fa9459Szrjexpression, followed by a right parenthesis @samp{)}; or a prefix
4130*a9fa9459Szrjoperator followed by an argument.
4131*a9fa9459Szrj
4132*a9fa9459Szrj@node Operators
4133*a9fa9459Szrj@subsection Operators
4134*a9fa9459Szrj
4135*a9fa9459Szrj@cindex operators, in expressions
4136*a9fa9459Szrj@cindex arithmetic functions
4137*a9fa9459Szrj@cindex functions, in expressions
4138*a9fa9459Szrj@dfn{Operators} are arithmetic functions, like @code{+} or @code{%}.  Prefix
4139*a9fa9459Szrjoperators are followed by an argument.  Infix operators appear
4140*a9fa9459Szrjbetween their arguments.  Operators may be preceded and/or followed by
4141*a9fa9459Szrjwhitespace.
4142*a9fa9459Szrj
4143*a9fa9459Szrj@node Prefix Ops
4144*a9fa9459Szrj@subsection Prefix Operator
4145*a9fa9459Szrj
4146*a9fa9459Szrj@cindex prefix operators
4147*a9fa9459Szrj@command{@value{AS}} has the following @dfn{prefix operators}.  They each take
4148*a9fa9459Szrjone argument, which must be absolute.
4149*a9fa9459Szrj
4150*a9fa9459Szrj@c the tex/end tex stuff surrounding this small table is meant to make
4151*a9fa9459Szrj@c it align, on the printed page, with the similar table in the next
4152*a9fa9459Szrj@c section (which is inside an enumerate).
4153*a9fa9459Szrj@tex
4154*a9fa9459Szrj\global\advance\leftskip by \itemindent
4155*a9fa9459Szrj@end tex
4156*a9fa9459Szrj
4157*a9fa9459Szrj@table @code
4158*a9fa9459Szrj@item -
4159*a9fa9459Szrj@dfn{Negation}.  Two's complement negation.
4160*a9fa9459Szrj@item ~
4161*a9fa9459Szrj@dfn{Complementation}.  Bitwise not.
4162*a9fa9459Szrj@end table
4163*a9fa9459Szrj
4164*a9fa9459Szrj@tex
4165*a9fa9459Szrj\global\advance\leftskip by -\itemindent
4166*a9fa9459Szrj@end tex
4167*a9fa9459Szrj
4168*a9fa9459Szrj@node Infix Ops
4169*a9fa9459Szrj@subsection Infix Operators
4170*a9fa9459Szrj
4171*a9fa9459Szrj@cindex infix operators
4172*a9fa9459Szrj@cindex operators, permitted arguments
4173*a9fa9459Szrj@dfn{Infix operators} take two arguments, one on either side.  Operators
4174*a9fa9459Szrjhave precedence, but operations with equal precedence are performed left
4175*a9fa9459Szrjto right.  Apart from @code{+} or @option{-}, both arguments must be
4176*a9fa9459Szrjabsolute, and the result is absolute.
4177*a9fa9459Szrj
4178*a9fa9459Szrj@enumerate
4179*a9fa9459Szrj@cindex operator precedence
4180*a9fa9459Szrj@cindex precedence of operators
4181*a9fa9459Szrj
4182*a9fa9459Szrj@item
4183*a9fa9459SzrjHighest Precedence
4184*a9fa9459Szrj
4185*a9fa9459Szrj@table @code
4186*a9fa9459Szrj@item *
4187*a9fa9459Szrj@dfn{Multiplication}.
4188*a9fa9459Szrj
4189*a9fa9459Szrj@item /
4190*a9fa9459Szrj@dfn{Division}.  Truncation is the same as the C operator @samp{/}
4191*a9fa9459Szrj
4192*a9fa9459Szrj@item %
4193*a9fa9459Szrj@dfn{Remainder}.
4194*a9fa9459Szrj
4195*a9fa9459Szrj@item <<
4196*a9fa9459Szrj@dfn{Shift Left}.  Same as the C operator @samp{<<}.
4197*a9fa9459Szrj
4198*a9fa9459Szrj@item >>
4199*a9fa9459Szrj@dfn{Shift Right}.  Same as the C operator @samp{>>}.
4200*a9fa9459Szrj@end table
4201*a9fa9459Szrj
4202*a9fa9459Szrj@item
4203*a9fa9459SzrjIntermediate precedence
4204*a9fa9459Szrj
4205*a9fa9459Szrj@table @code
4206*a9fa9459Szrj@item |
4207*a9fa9459Szrj
4208*a9fa9459Szrj@dfn{Bitwise Inclusive Or}.
4209*a9fa9459Szrj
4210*a9fa9459Szrj@item &
4211*a9fa9459Szrj@dfn{Bitwise And}.
4212*a9fa9459Szrj
4213*a9fa9459Szrj@item ^
4214*a9fa9459Szrj@dfn{Bitwise Exclusive Or}.
4215*a9fa9459Szrj
4216*a9fa9459Szrj@item !
4217*a9fa9459Szrj@dfn{Bitwise Or Not}.
4218*a9fa9459Szrj@end table
4219*a9fa9459Szrj
4220*a9fa9459Szrj@item
4221*a9fa9459SzrjLow Precedence
4222*a9fa9459Szrj
4223*a9fa9459Szrj@table @code
4224*a9fa9459Szrj@cindex addition, permitted arguments
4225*a9fa9459Szrj@cindex plus, permitted arguments
4226*a9fa9459Szrj@cindex arguments for addition
4227*a9fa9459Szrj@item +
4228*a9fa9459Szrj@dfn{Addition}.  If either argument is absolute, the result has the section of
4229*a9fa9459Szrjthe other argument.  You may not add together arguments from different
4230*a9fa9459Szrjsections.
4231*a9fa9459Szrj
4232*a9fa9459Szrj@cindex subtraction, permitted arguments
4233*a9fa9459Szrj@cindex minus, permitted arguments
4234*a9fa9459Szrj@cindex arguments for subtraction
4235*a9fa9459Szrj@item -
4236*a9fa9459Szrj@dfn{Subtraction}.  If the right argument is absolute, the
4237*a9fa9459Szrjresult has the section of the left argument.
4238*a9fa9459SzrjIf both arguments are in the same section, the result is absolute.
4239*a9fa9459SzrjYou may not subtract arguments from different sections.
4240*a9fa9459Szrj@c FIXME is there still something useful to say about undefined - undefined ?
4241*a9fa9459Szrj
4242*a9fa9459Szrj@cindex comparison expressions
4243*a9fa9459Szrj@cindex expressions, comparison
4244*a9fa9459Szrj@item  ==
4245*a9fa9459Szrj@dfn{Is Equal To}
4246*a9fa9459Szrj@item <>
4247*a9fa9459Szrj@itemx !=
4248*a9fa9459Szrj@dfn{Is Not Equal To}
4249*a9fa9459Szrj@item <
4250*a9fa9459Szrj@dfn{Is Less Than}
4251*a9fa9459Szrj@item >
4252*a9fa9459Szrj@dfn{Is Greater Than}
4253*a9fa9459Szrj@item >=
4254*a9fa9459Szrj@dfn{Is Greater Than Or Equal To}
4255*a9fa9459Szrj@item <=
4256*a9fa9459Szrj@dfn{Is Less Than Or Equal To}
4257*a9fa9459Szrj
4258*a9fa9459SzrjThe comparison operators can be used as infix operators.  A true results has a
4259*a9fa9459Szrjvalue of -1 whereas a false result has a value of 0.   Note, these operators
4260*a9fa9459Szrjperform signed comparisons.
4261*a9fa9459Szrj@end table
4262*a9fa9459Szrj
4263*a9fa9459Szrj@item Lowest Precedence
4264*a9fa9459Szrj
4265*a9fa9459Szrj@table @code
4266*a9fa9459Szrj@item &&
4267*a9fa9459Szrj@dfn{Logical And}.
4268*a9fa9459Szrj
4269*a9fa9459Szrj@item ||
4270*a9fa9459Szrj@dfn{Logical Or}.
4271*a9fa9459Szrj
4272*a9fa9459SzrjThese two logical operations can be used to combine the results of sub
4273*a9fa9459Szrjexpressions.  Note, unlike the comparison operators a true result returns a
4274*a9fa9459Szrjvalue of 1 but a false results does still return 0.  Also note that the logical
4275*a9fa9459Szrjor operator has a slightly lower precedence than logical and.
4276*a9fa9459Szrj
4277*a9fa9459Szrj@end table
4278*a9fa9459Szrj@end enumerate
4279*a9fa9459Szrj
4280*a9fa9459SzrjIn short, it's only meaningful to add or subtract the @emph{offsets} in an
4281*a9fa9459Szrjaddress; you can only have a defined section in one of the two arguments.
4282*a9fa9459Szrj
4283*a9fa9459Szrj@node Pseudo Ops
4284*a9fa9459Szrj@chapter Assembler Directives
4285*a9fa9459Szrj
4286*a9fa9459Szrj@cindex directives, machine independent
4287*a9fa9459Szrj@cindex pseudo-ops, machine independent
4288*a9fa9459Szrj@cindex machine independent directives
4289*a9fa9459SzrjAll assembler directives have names that begin with a period (@samp{.}).
4290*a9fa9459SzrjThe names are case insensitive for most targets, and usually written
4291*a9fa9459Szrjin lower case.
4292*a9fa9459Szrj
4293*a9fa9459SzrjThis chapter discusses directives that are available regardless of the
4294*a9fa9459Szrjtarget machine configuration for the @sc{gnu} assembler.
4295*a9fa9459Szrj@ifset GENERIC
4296*a9fa9459SzrjSome machine configurations provide additional directives.
4297*a9fa9459Szrj@xref{Machine Dependencies}.
4298*a9fa9459Szrj@end ifset
4299*a9fa9459Szrj@ifclear GENERIC
4300*a9fa9459Szrj@ifset machine-directives
4301*a9fa9459Szrj@xref{Machine Dependencies}, for additional directives.
4302*a9fa9459Szrj@end ifset
4303*a9fa9459Szrj@end ifclear
4304*a9fa9459Szrj
4305*a9fa9459Szrj@menu
4306*a9fa9459Szrj* Abort::                       @code{.abort}
4307*a9fa9459Szrj@ifset COFF
4308*a9fa9459Szrj* ABORT (COFF)::                @code{.ABORT}
4309*a9fa9459Szrj@end ifset
4310*a9fa9459Szrj
4311*a9fa9459Szrj* Align::                       @code{.align @var{abs-expr} , @var{abs-expr}}
4312*a9fa9459Szrj* Altmacro::                    @code{.altmacro}
4313*a9fa9459Szrj* Ascii::                       @code{.ascii "@var{string}"}@dots{}
4314*a9fa9459Szrj* Asciz::                       @code{.asciz "@var{string}"}@dots{}
4315*a9fa9459Szrj* Balign::                      @code{.balign @var{abs-expr} , @var{abs-expr}}
4316*a9fa9459Szrj* Bundle directives::           @code{.bundle_align_mode @var{abs-expr}}, etc
4317*a9fa9459Szrj* Byte::                        @code{.byte @var{expressions}}
4318*a9fa9459Szrj* CFI directives::		@code{.cfi_startproc [simple]}, @code{.cfi_endproc}, etc.
4319*a9fa9459Szrj* Comm::                        @code{.comm @var{symbol} , @var{length} }
4320*a9fa9459Szrj* Data::                        @code{.data @var{subsection}}
4321*a9fa9459Szrj@ifset COFF
4322*a9fa9459Szrj* Def::                         @code{.def @var{name}}
4323*a9fa9459Szrj@end ifset
4324*a9fa9459Szrj@ifset aout-bout
4325*a9fa9459Szrj* Desc::                        @code{.desc @var{symbol}, @var{abs-expression}}
4326*a9fa9459Szrj@end ifset
4327*a9fa9459Szrj@ifset COFF
4328*a9fa9459Szrj* Dim::                         @code{.dim}
4329*a9fa9459Szrj@end ifset
4330*a9fa9459Szrj
4331*a9fa9459Szrj* Double::                      @code{.double @var{flonums}}
4332*a9fa9459Szrj* Eject::                       @code{.eject}
4333*a9fa9459Szrj* Else::                        @code{.else}
4334*a9fa9459Szrj* Elseif::                      @code{.elseif}
4335*a9fa9459Szrj* End::				@code{.end}
4336*a9fa9459Szrj@ifset COFF
4337*a9fa9459Szrj* Endef::                       @code{.endef}
4338*a9fa9459Szrj@end ifset
4339*a9fa9459Szrj
4340*a9fa9459Szrj* Endfunc::                     @code{.endfunc}
4341*a9fa9459Szrj* Endif::                       @code{.endif}
4342*a9fa9459Szrj* Equ::                         @code{.equ @var{symbol}, @var{expression}}
4343*a9fa9459Szrj* Equiv::                       @code{.equiv @var{symbol}, @var{expression}}
4344*a9fa9459Szrj* Eqv::                         @code{.eqv @var{symbol}, @var{expression}}
4345*a9fa9459Szrj* Err::				@code{.err}
4346*a9fa9459Szrj* Error::			@code{.error @var{string}}
4347*a9fa9459Szrj* Exitm::			@code{.exitm}
4348*a9fa9459Szrj* Extern::                      @code{.extern}
4349*a9fa9459Szrj* Fail::			@code{.fail}
4350*a9fa9459Szrj* File::                        @code{.file}
4351*a9fa9459Szrj* Fill::                        @code{.fill @var{repeat} , @var{size} , @var{value}}
4352*a9fa9459Szrj* Float::                       @code{.float @var{flonums}}
4353*a9fa9459Szrj* Func::                        @code{.func}
4354*a9fa9459Szrj* Global::                      @code{.global @var{symbol}}, @code{.globl @var{symbol}}
4355*a9fa9459Szrj@ifset ELF
4356*a9fa9459Szrj* Gnu_attribute::               @code{.gnu_attribute @var{tag},@var{value}}
4357*a9fa9459Szrj* Hidden::                      @code{.hidden @var{names}}
4358*a9fa9459Szrj@end ifset
4359*a9fa9459Szrj
4360*a9fa9459Szrj* hword::                       @code{.hword @var{expressions}}
4361*a9fa9459Szrj* Ident::                       @code{.ident}
4362*a9fa9459Szrj* If::                          @code{.if @var{absolute expression}}
4363*a9fa9459Szrj* Incbin::                      @code{.incbin "@var{file}"[,@var{skip}[,@var{count}]]}
4364*a9fa9459Szrj* Include::                     @code{.include "@var{file}"}
4365*a9fa9459Szrj* Int::                         @code{.int @var{expressions}}
4366*a9fa9459Szrj@ifset ELF
4367*a9fa9459Szrj* Internal::                    @code{.internal @var{names}}
4368*a9fa9459Szrj@end ifset
4369*a9fa9459Szrj
4370*a9fa9459Szrj* Irp::				@code{.irp @var{symbol},@var{values}}@dots{}
4371*a9fa9459Szrj* Irpc::			@code{.irpc @var{symbol},@var{values}}@dots{}
4372*a9fa9459Szrj* Lcomm::                       @code{.lcomm @var{symbol} , @var{length}}
4373*a9fa9459Szrj* Lflags::                      @code{.lflags}
4374*a9fa9459Szrj@ifclear no-line-dir
4375*a9fa9459Szrj* Line::                        @code{.line @var{line-number}}
4376*a9fa9459Szrj@end ifclear
4377*a9fa9459Szrj
4378*a9fa9459Szrj* Linkonce::			@code{.linkonce [@var{type}]}
4379*a9fa9459Szrj* List::                        @code{.list}
4380*a9fa9459Szrj* Ln::                          @code{.ln @var{line-number}}
4381*a9fa9459Szrj* Loc::                         @code{.loc @var{fileno} @var{lineno}}
4382*a9fa9459Szrj* Loc_mark_labels::             @code{.loc_mark_labels @var{enable}}
4383*a9fa9459Szrj@ifset ELF
4384*a9fa9459Szrj* Local::                       @code{.local @var{names}}
4385*a9fa9459Szrj@end ifset
4386*a9fa9459Szrj
4387*a9fa9459Szrj* Long::                        @code{.long @var{expressions}}
4388*a9fa9459Szrj@ignore
4389*a9fa9459Szrj* Lsym::                        @code{.lsym @var{symbol}, @var{expression}}
4390*a9fa9459Szrj@end ignore
4391*a9fa9459Szrj
4392*a9fa9459Szrj* Macro::			@code{.macro @var{name} @var{args}}@dots{}
4393*a9fa9459Szrj* MRI::				@code{.mri @var{val}}
4394*a9fa9459Szrj* Noaltmacro::                  @code{.noaltmacro}
4395*a9fa9459Szrj* Nolist::                      @code{.nolist}
4396*a9fa9459Szrj* Octa::                        @code{.octa @var{bignums}}
4397*a9fa9459Szrj* Offset::			@code{.offset @var{loc}}
4398*a9fa9459Szrj* Org::                         @code{.org @var{new-lc}, @var{fill}}
4399*a9fa9459Szrj* P2align::                     @code{.p2align @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
4400*a9fa9459Szrj@ifset ELF
4401*a9fa9459Szrj* PopSection::                  @code{.popsection}
4402*a9fa9459Szrj* Previous::                    @code{.previous}
4403*a9fa9459Szrj@end ifset
4404*a9fa9459Szrj
4405*a9fa9459Szrj* Print::			@code{.print @var{string}}
4406*a9fa9459Szrj@ifset ELF
4407*a9fa9459Szrj* Protected::                   @code{.protected @var{names}}
4408*a9fa9459Szrj@end ifset
4409*a9fa9459Szrj
4410*a9fa9459Szrj* Psize::                       @code{.psize @var{lines}, @var{columns}}
4411*a9fa9459Szrj* Purgem::			@code{.purgem @var{name}}
4412*a9fa9459Szrj@ifset ELF
4413*a9fa9459Szrj* PushSection::                 @code{.pushsection @var{name}}
4414*a9fa9459Szrj@end ifset
4415*a9fa9459Szrj
4416*a9fa9459Szrj* Quad::                        @code{.quad @var{bignums}}
4417*a9fa9459Szrj* Reloc::			@code{.reloc @var{offset}, @var{reloc_name}[, @var{expression}]}
4418*a9fa9459Szrj* Rept::			@code{.rept @var{count}}
4419*a9fa9459Szrj* Sbttl::                       @code{.sbttl "@var{subheading}"}
4420*a9fa9459Szrj@ifset COFF
4421*a9fa9459Szrj* Scl::                         @code{.scl @var{class}}
4422*a9fa9459Szrj@end ifset
4423*a9fa9459Szrj@ifset COFF-ELF
4424*a9fa9459Szrj* Section::                     @code{.section @var{name}[, @var{flags}]}
4425*a9fa9459Szrj@end ifset
4426*a9fa9459Szrj
4427*a9fa9459Szrj* Set::                         @code{.set @var{symbol}, @var{expression}}
4428*a9fa9459Szrj* Short::                       @code{.short @var{expressions}}
4429*a9fa9459Szrj* Single::                      @code{.single @var{flonums}}
4430*a9fa9459Szrj@ifset COFF-ELF
4431*a9fa9459Szrj* Size::                        @code{.size [@var{name} , @var{expression}]}
4432*a9fa9459Szrj@end ifset
4433*a9fa9459Szrj@ifclear no-space-dir
4434*a9fa9459Szrj* Skip::                        @code{.skip @var{size} , @var{fill}}
4435*a9fa9459Szrj@end ifclear
4436*a9fa9459Szrj
4437*a9fa9459Szrj* Sleb128::			@code{.sleb128 @var{expressions}}
4438*a9fa9459Szrj@ifclear no-space-dir
4439*a9fa9459Szrj* Space::                       @code{.space @var{size} , @var{fill}}
4440*a9fa9459Szrj@end ifclear
4441*a9fa9459Szrj@ifset have-stabs
4442*a9fa9459Szrj* Stab::                        @code{.stabd, .stabn, .stabs}
4443*a9fa9459Szrj@end ifset
4444*a9fa9459Szrj
4445*a9fa9459Szrj* String::                      @code{.string "@var{str}"}, @code{.string8 "@var{str}"}, @code{.string16 "@var{str}"}, @code{.string32 "@var{str}"}, @code{.string64 "@var{str}"}
4446*a9fa9459Szrj* Struct::			@code{.struct @var{expression}}
4447*a9fa9459Szrj@ifset ELF
4448*a9fa9459Szrj* SubSection::                  @code{.subsection}
4449*a9fa9459Szrj* Symver::                      @code{.symver @var{name},@var{name2@@nodename}}
4450*a9fa9459Szrj@end ifset
4451*a9fa9459Szrj
4452*a9fa9459Szrj@ifset COFF
4453*a9fa9459Szrj* Tag::                         @code{.tag @var{structname}}
4454*a9fa9459Szrj@end ifset
4455*a9fa9459Szrj
4456*a9fa9459Szrj* Text::                        @code{.text @var{subsection}}
4457*a9fa9459Szrj* Title::                       @code{.title "@var{heading}"}
4458*a9fa9459Szrj@ifset COFF-ELF
4459*a9fa9459Szrj* Type::                        @code{.type <@var{int} | @var{name} , @var{type description}>}
4460*a9fa9459Szrj@end ifset
4461*a9fa9459Szrj
4462*a9fa9459Szrj* Uleb128::                     @code{.uleb128 @var{expressions}}
4463*a9fa9459Szrj@ifset COFF
4464*a9fa9459Szrj* Val::                         @code{.val @var{addr}}
4465*a9fa9459Szrj@end ifset
4466*a9fa9459Szrj
4467*a9fa9459Szrj@ifset ELF
4468*a9fa9459Szrj* Version::                     @code{.version "@var{string}"}
4469*a9fa9459Szrj* VTableEntry::                 @code{.vtable_entry @var{table}, @var{offset}}
4470*a9fa9459Szrj* VTableInherit::               @code{.vtable_inherit @var{child}, @var{parent}}
4471*a9fa9459Szrj@end ifset
4472*a9fa9459Szrj
4473*a9fa9459Szrj* Warning::			@code{.warning @var{string}}
4474*a9fa9459Szrj* Weak::                        @code{.weak @var{names}}
4475*a9fa9459Szrj* Weakref::                     @code{.weakref @var{alias}, @var{symbol}}
4476*a9fa9459Szrj* Word::                        @code{.word @var{expressions}}
4477*a9fa9459Szrj@ifclear no-space-dir
4478*a9fa9459Szrj* Zero::                        @code{.zero @var{size}}
4479*a9fa9459Szrj@end ifclear
4480*a9fa9459Szrj* Deprecated::                  Deprecated Directives
4481*a9fa9459Szrj@end menu
4482*a9fa9459Szrj
4483*a9fa9459Szrj@node Abort
4484*a9fa9459Szrj@section @code{.abort}
4485*a9fa9459Szrj
4486*a9fa9459Szrj@cindex @code{abort} directive
4487*a9fa9459Szrj@cindex stopping the assembly
4488*a9fa9459SzrjThis directive stops the assembly immediately.  It is for
4489*a9fa9459Szrjcompatibility with other assemblers.  The original idea was that the
4490*a9fa9459Szrjassembly language source would be piped into the assembler.  If the sender
4491*a9fa9459Szrjof the source quit, it could use this directive tells @command{@value{AS}} to
4492*a9fa9459Szrjquit also.  One day @code{.abort} will not be supported.
4493*a9fa9459Szrj
4494*a9fa9459Szrj@ifset COFF
4495*a9fa9459Szrj@node ABORT (COFF)
4496*a9fa9459Szrj@section @code{.ABORT} (COFF)
4497*a9fa9459Szrj
4498*a9fa9459Szrj@cindex @code{ABORT} directive
4499*a9fa9459SzrjWhen producing COFF output, @command{@value{AS}} accepts this directive as a
4500*a9fa9459Szrjsynonym for @samp{.abort}.
4501*a9fa9459Szrj
4502*a9fa9459Szrj@ifset BOUT
4503*a9fa9459SzrjWhen producing @code{b.out} output, @command{@value{AS}} accepts this directive,
4504*a9fa9459Szrjbut ignores it.
4505*a9fa9459Szrj@end ifset
4506*a9fa9459Szrj@end ifset
4507*a9fa9459Szrj
4508*a9fa9459Szrj@node Align
4509*a9fa9459Szrj@section @code{.align @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
4510*a9fa9459Szrj
4511*a9fa9459Szrj@cindex padding the location counter
4512*a9fa9459Szrj@cindex @code{align} directive
4513*a9fa9459SzrjPad the location counter (in the current subsection) to a particular storage
4514*a9fa9459Szrjboundary.  The first expression (which must be absolute) is the alignment
4515*a9fa9459Szrjrequired, as described below.
4516*a9fa9459Szrj
4517*a9fa9459SzrjThe second expression (also absolute) gives the fill value to be stored in the
4518*a9fa9459Szrjpadding bytes.  It (and the comma) may be omitted.  If it is omitted, the
4519*a9fa9459Szrjpadding bytes are normally zero.  However, on some systems, if the section is
4520*a9fa9459Szrjmarked as containing code and the fill value is omitted, the space is filled
4521*a9fa9459Szrjwith no-op instructions.
4522*a9fa9459Szrj
4523*a9fa9459SzrjThe third expression is also absolute, and is also optional.  If it is present,
4524*a9fa9459Szrjit is the maximum number of bytes that should be skipped by this alignment
4525*a9fa9459Szrjdirective.  If doing the alignment would require skipping more bytes than the
4526*a9fa9459Szrjspecified maximum, then the alignment is not done at all.  You can omit the
4527*a9fa9459Szrjfill value (the second argument) entirely by simply using two commas after the
4528*a9fa9459Szrjrequired alignment; this can be useful if you want the alignment to be filled
4529*a9fa9459Szrjwith no-op instructions when appropriate.
4530*a9fa9459Szrj
4531*a9fa9459SzrjThe way the required alignment is specified varies from system to system.
4532*a9fa9459SzrjFor the arc, hppa, i386 using ELF, i860, iq2000, m68k, or1k,
4533*a9fa9459Szrjs390, sparc, tic4x, tic80 and xtensa, the first expression is the
4534*a9fa9459Szrjalignment request in bytes.  For example @samp{.align 8} advances
4535*a9fa9459Szrjthe location counter until it is a multiple of 8.  If the location counter
4536*a9fa9459Szrjis already a multiple of 8, no change is needed.  For the tic54x, the
4537*a9fa9459Szrjfirst expression is the alignment request in words.
4538*a9fa9459Szrj
4539*a9fa9459SzrjFor other systems, including ppc, i386 using a.out format, arm and
4540*a9fa9459Szrjstrongarm, it is the
4541*a9fa9459Szrjnumber of low-order zero bits the location counter must have after
4542*a9fa9459Szrjadvancement.  For example @samp{.align 3} advances the location
4543*a9fa9459Szrjcounter until it a multiple of 8.  If the location counter is already a
4544*a9fa9459Szrjmultiple of 8, no change is needed.
4545*a9fa9459Szrj
4546*a9fa9459SzrjThis inconsistency is due to the different behaviors of the various
4547*a9fa9459Szrjnative assemblers for these systems which GAS must emulate.
4548*a9fa9459SzrjGAS also provides @code{.balign} and @code{.p2align} directives,
4549*a9fa9459Szrjdescribed later, which have a consistent behavior across all
4550*a9fa9459Szrjarchitectures (but are specific to GAS).
4551*a9fa9459Szrj
4552*a9fa9459Szrj@node Altmacro
4553*a9fa9459Szrj@section @code{.altmacro}
4554*a9fa9459SzrjEnable alternate macro mode, enabling:
4555*a9fa9459Szrj
4556*a9fa9459Szrj@ftable @code
4557*a9fa9459Szrj@item LOCAL @var{name} [ , @dots{} ]
4558*a9fa9459SzrjOne additional directive, @code{LOCAL}, is available.  It is used to
4559*a9fa9459Szrjgenerate a string replacement for each of the @var{name} arguments, and
4560*a9fa9459Szrjreplace any instances of @var{name} in each macro expansion.  The
4561*a9fa9459Szrjreplacement string is unique in the assembly, and different for each
4562*a9fa9459Szrjseparate macro expansion.  @code{LOCAL} allows you to write macros that
4563*a9fa9459Szrjdefine symbols, without fear of conflict between separate macro expansions.
4564*a9fa9459Szrj
4565*a9fa9459Szrj@item String delimiters
4566*a9fa9459SzrjYou can write strings delimited in these other ways besides
4567*a9fa9459Szrj@code{"@var{string}"}:
4568*a9fa9459Szrj
4569*a9fa9459Szrj@table @code
4570*a9fa9459Szrj@item '@var{string}'
4571*a9fa9459SzrjYou can delimit strings with single-quote characters.
4572*a9fa9459Szrj
4573*a9fa9459Szrj@item <@var{string}>
4574*a9fa9459SzrjYou can delimit strings with matching angle brackets.
4575*a9fa9459Szrj@end table
4576*a9fa9459Szrj
4577*a9fa9459Szrj@item single-character string escape
4578*a9fa9459SzrjTo include any single character literally in a string (even if the
4579*a9fa9459Szrjcharacter would otherwise have some special meaning), you can prefix the
4580*a9fa9459Szrjcharacter with @samp{!} (an exclamation mark).  For example, you can
4581*a9fa9459Szrjwrite @samp{<4.3 !> 5.4!!>} to get the literal text @samp{4.3 > 5.4!}.
4582*a9fa9459Szrj
4583*a9fa9459Szrj@item Expression results as strings
4584*a9fa9459SzrjYou can write @samp{%@var{expr}} to evaluate the expression @var{expr}
4585*a9fa9459Szrjand use the result as a string.
4586*a9fa9459Szrj@end ftable
4587*a9fa9459Szrj
4588*a9fa9459Szrj@node Ascii
4589*a9fa9459Szrj@section @code{.ascii "@var{string}"}@dots{}
4590*a9fa9459Szrj
4591*a9fa9459Szrj@cindex @code{ascii} directive
4592*a9fa9459Szrj@cindex string literals
4593*a9fa9459Szrj@code{.ascii} expects zero or more string literals (@pxref{Strings})
4594*a9fa9459Szrjseparated by commas.  It assembles each string (with no automatic
4595*a9fa9459Szrjtrailing zero byte) into consecutive addresses.
4596*a9fa9459Szrj
4597*a9fa9459Szrj@node Asciz
4598*a9fa9459Szrj@section @code{.asciz "@var{string}"}@dots{}
4599*a9fa9459Szrj
4600*a9fa9459Szrj@cindex @code{asciz} directive
4601*a9fa9459Szrj@cindex zero-terminated strings
4602*a9fa9459Szrj@cindex null-terminated strings
4603*a9fa9459Szrj@code{.asciz} is just like @code{.ascii}, but each string is followed by
4604*a9fa9459Szrja zero byte.  The ``z'' in @samp{.asciz} stands for ``zero''.
4605*a9fa9459Szrj
4606*a9fa9459Szrj@node Balign
4607*a9fa9459Szrj@section @code{.balign[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
4608*a9fa9459Szrj
4609*a9fa9459Szrj@cindex padding the location counter given number of bytes
4610*a9fa9459Szrj@cindex @code{balign} directive
4611*a9fa9459SzrjPad the location counter (in the current subsection) to a particular
4612*a9fa9459Szrjstorage boundary.  The first expression (which must be absolute) is the
4613*a9fa9459Szrjalignment request in bytes.  For example @samp{.balign 8} advances
4614*a9fa9459Szrjthe location counter until it is a multiple of 8.  If the location counter
4615*a9fa9459Szrjis already a multiple of 8, no change is needed.
4616*a9fa9459Szrj
4617*a9fa9459SzrjThe second expression (also absolute) gives the fill value to be stored in the
4618*a9fa9459Szrjpadding bytes.  It (and the comma) may be omitted.  If it is omitted, the
4619*a9fa9459Szrjpadding bytes are normally zero.  However, on some systems, if the section is
4620*a9fa9459Szrjmarked as containing code and the fill value is omitted, the space is filled
4621*a9fa9459Szrjwith no-op instructions.
4622*a9fa9459Szrj
4623*a9fa9459SzrjThe third expression is also absolute, and is also optional.  If it is present,
4624*a9fa9459Szrjit is the maximum number of bytes that should be skipped by this alignment
4625*a9fa9459Szrjdirective.  If doing the alignment would require skipping more bytes than the
4626*a9fa9459Szrjspecified maximum, then the alignment is not done at all.  You can omit the
4627*a9fa9459Szrjfill value (the second argument) entirely by simply using two commas after the
4628*a9fa9459Szrjrequired alignment; this can be useful if you want the alignment to be filled
4629*a9fa9459Szrjwith no-op instructions when appropriate.
4630*a9fa9459Szrj
4631*a9fa9459Szrj@cindex @code{balignw} directive
4632*a9fa9459Szrj@cindex @code{balignl} directive
4633*a9fa9459SzrjThe @code{.balignw} and @code{.balignl} directives are variants of the
4634*a9fa9459Szrj@code{.balign} directive.  The @code{.balignw} directive treats the fill
4635*a9fa9459Szrjpattern as a two byte word value.  The @code{.balignl} directives treats the
4636*a9fa9459Szrjfill pattern as a four byte longword value.  For example, @code{.balignw
4637*a9fa9459Szrj4,0x368d} will align to a multiple of 4.  If it skips two bytes, they will be
4638*a9fa9459Szrjfilled in with the value 0x368d (the exact placement of the bytes depends upon
4639*a9fa9459Szrjthe endianness of the processor).  If it skips 1 or 3 bytes, the fill value is
4640*a9fa9459Szrjundefined.
4641*a9fa9459Szrj
4642*a9fa9459Szrj@node Bundle directives
4643*a9fa9459Szrj@section Bundle directives
4644*a9fa9459Szrj@subsection @code{.bundle_align_mode @var{abs-expr}}
4645*a9fa9459Szrj@cindex @code{bundle_align_mode} directive
4646*a9fa9459Szrj@cindex bundle
4647*a9fa9459Szrj@cindex instruction bundle
4648*a9fa9459Szrj@cindex aligned instruction bundle
4649*a9fa9459Szrj@code{.bundle_align_mode} enables or disables @dfn{aligned instruction
4650*a9fa9459Szrjbundle} mode.  In this mode, sequences of adjacent instructions are grouped
4651*a9fa9459Szrjinto fixed-sized @dfn{bundles}.  If the argument is zero, this mode is
4652*a9fa9459Szrjdisabled (which is the default state).  If the argument it not zero, it
4653*a9fa9459Szrjgives the size of an instruction bundle as a power of two (as for the
4654*a9fa9459Szrj@code{.p2align} directive, @pxref{P2align}).
4655*a9fa9459Szrj
4656*a9fa9459SzrjFor some targets, it's an ABI requirement that no instruction may span a
4657*a9fa9459Szrjcertain aligned boundary.  A @dfn{bundle} is simply a sequence of
4658*a9fa9459Szrjinstructions that starts on an aligned boundary.  For example, if
4659*a9fa9459Szrj@var{abs-expr} is @code{5} then the bundle size is 32, so each aligned
4660*a9fa9459Szrjchunk of 32 bytes is a bundle.  When aligned instruction bundle mode is in
4661*a9fa9459Szrjeffect, no single instruction may span a boundary between bundles.  If an
4662*a9fa9459Szrjinstruction would start too close to the end of a bundle for the length of
4663*a9fa9459Szrjthat particular instruction to fit within the bundle, then the space at the
4664*a9fa9459Szrjend of that bundle is filled with no-op instructions so the instruction
4665*a9fa9459Szrjstarts in the next bundle.  As a corollary, it's an error if any single
4666*a9fa9459Szrjinstruction's encoding is longer than the bundle size.
4667*a9fa9459Szrj
4668*a9fa9459Szrj@subsection @code{.bundle_lock} and @code{.bundle_unlock}
4669*a9fa9459Szrj@cindex @code{bundle_lock} directive
4670*a9fa9459Szrj@cindex @code{bundle_unlock} directive
4671*a9fa9459SzrjThe @code{.bundle_lock} and directive @code{.bundle_unlock} directives
4672*a9fa9459Szrjallow explicit control over instruction bundle padding.  These directives
4673*a9fa9459Szrjare only valid when @code{.bundle_align_mode} has been used to enable
4674*a9fa9459Szrjaligned instruction bundle mode.  It's an error if they appear when
4675*a9fa9459Szrj@code{.bundle_align_mode} has not been used at all, or when the last
4676*a9fa9459Szrjdirective was @w{@code{.bundle_align_mode 0}}.
4677*a9fa9459Szrj
4678*a9fa9459Szrj@cindex bundle-locked
4679*a9fa9459SzrjFor some targets, it's an ABI requirement that certain instructions may
4680*a9fa9459Szrjappear only as part of specified permissible sequences of multiple
4681*a9fa9459Szrjinstructions, all within the same bundle.  A pair of @code{.bundle_lock}
4682*a9fa9459Szrjand @code{.bundle_unlock} directives define a @dfn{bundle-locked}
4683*a9fa9459Szrjinstruction sequence.  For purposes of aligned instruction bundle mode, a
4684*a9fa9459Szrjsequence starting with @code{.bundle_lock} and ending with
4685*a9fa9459Szrj@code{.bundle_unlock} is treated as a single instruction.  That is, the
4686*a9fa9459Szrjentire sequence must fit into a single bundle and may not span a bundle
4687*a9fa9459Szrjboundary.  If necessary, no-op instructions will be inserted before the
4688*a9fa9459Szrjfirst instruction of the sequence so that the whole sequence starts on an
4689*a9fa9459Szrjaligned bundle boundary.  It's an error if the sequence is longer than the
4690*a9fa9459Szrjbundle size.
4691*a9fa9459Szrj
4692*a9fa9459SzrjFor convenience when using @code{.bundle_lock} and @code{.bundle_unlock}
4693*a9fa9459Szrjinside assembler macros (@pxref{Macro}), bundle-locked sequences may be
4694*a9fa9459Szrjnested.  That is, a second @code{.bundle_lock} directive before the next
4695*a9fa9459Szrj@code{.bundle_unlock} directive has no effect except that it must be
4696*a9fa9459Szrjmatched by another closing @code{.bundle_unlock} so that there is the
4697*a9fa9459Szrjsame number of @code{.bundle_lock} and @code{.bundle_unlock} directives.
4698*a9fa9459Szrj
4699*a9fa9459Szrj@node Byte
4700*a9fa9459Szrj@section @code{.byte @var{expressions}}
4701*a9fa9459Szrj
4702*a9fa9459Szrj@cindex @code{byte} directive
4703*a9fa9459Szrj@cindex integers, one byte
4704*a9fa9459Szrj@code{.byte} expects zero or more expressions, separated by commas.
4705*a9fa9459SzrjEach expression is assembled into the next byte.
4706*a9fa9459Szrj
4707*a9fa9459Szrj@node CFI directives
4708*a9fa9459Szrj@section CFI directives
4709*a9fa9459Szrj@subsection @code{.cfi_sections @var{section_list}}
4710*a9fa9459Szrj@cindex @code{cfi_sections} directive
4711*a9fa9459Szrj@code{.cfi_sections} may be used to specify whether CFI directives
4712*a9fa9459Szrjshould emit @code{.eh_frame} section and/or @code{.debug_frame} section.
4713*a9fa9459SzrjIf @var{section_list} is @code{.eh_frame}, @code{.eh_frame} is emitted,
4714*a9fa9459Szrjif @var{section_list} is @code{.debug_frame}, @code{.debug_frame} is emitted.
4715*a9fa9459SzrjTo emit both use @code{.eh_frame, .debug_frame}.  The default if this
4716*a9fa9459Szrjdirective is not used is @code{.cfi_sections .eh_frame}.
4717*a9fa9459Szrj
4718*a9fa9459SzrjOn targets that support compact unwinding tables these can be generated
4719*a9fa9459Szrjby specifying @code{.eh_frame_entry} instead of @code{.eh_frame}.
4720*a9fa9459Szrj
4721*a9fa9459SzrjSome targets may support an additional name, such as @code{.c6xabi.exidx}
4722*a9fa9459Szrjwhich is used by the @value{TIC6X} target.
4723*a9fa9459Szrj
4724*a9fa9459SzrjThe @code{.cfi_sections} directive can be repeated, with the same or different
4725*a9fa9459Szrjarguments, provided that CFI generation has not yet started.  Once CFI
4726*a9fa9459Szrjgeneration has started however the section list is fixed and any attempts to
4727*a9fa9459Szrjredefine it will result in an error.
4728*a9fa9459Szrj
4729*a9fa9459Szrj@subsection @code{.cfi_startproc [simple]}
4730*a9fa9459Szrj@cindex @code{cfi_startproc} directive
4731*a9fa9459Szrj@code{.cfi_startproc} is used at the beginning of each function that
4732*a9fa9459Szrjshould have an entry in @code{.eh_frame}. It initializes some internal
4733*a9fa9459Szrjdata structures. Don't forget to close the function by
4734*a9fa9459Szrj@code{.cfi_endproc}.
4735*a9fa9459Szrj
4736*a9fa9459SzrjUnless @code{.cfi_startproc} is used along with parameter @code{simple}
4737*a9fa9459Szrjit also emits some architecture dependent initial CFI instructions.
4738*a9fa9459Szrj
4739*a9fa9459Szrj@subsection @code{.cfi_endproc}
4740*a9fa9459Szrj@cindex @code{cfi_endproc} directive
4741*a9fa9459Szrj@code{.cfi_endproc} is used at the end of a function where it closes its
4742*a9fa9459Szrjunwind entry previously opened by
4743*a9fa9459Szrj@code{.cfi_startproc}, and emits it to @code{.eh_frame}.
4744*a9fa9459Szrj
4745*a9fa9459Szrj@subsection @code{.cfi_personality @var{encoding} [, @var{exp}]}
4746*a9fa9459Szrj@cindex @code{cfi_personality} directive
4747*a9fa9459Szrj@code{.cfi_personality} defines personality routine and its encoding.
4748*a9fa9459Szrj@var{encoding} must be a constant determining how the personality
4749*a9fa9459Szrjshould be encoded.  If it is 255 (@code{DW_EH_PE_omit}), second
4750*a9fa9459Szrjargument is not present, otherwise second argument should be
4751*a9fa9459Szrja constant or a symbol name.  When using indirect encodings,
4752*a9fa9459Szrjthe symbol provided should be the location where personality
4753*a9fa9459Szrjcan be loaded from, not the personality routine itself.
4754*a9fa9459SzrjThe default after @code{.cfi_startproc} is @code{.cfi_personality 0xff},
4755*a9fa9459Szrjno personality routine.
4756*a9fa9459Szrj
4757*a9fa9459Szrj@subsection @code{.cfi_personality_id @var{id}}
4758*a9fa9459Szrj@cindex @code{cfi_personality_id} directive
4759*a9fa9459Szrj@code{cfi_personality_id} defines a personality routine by its index as
4760*a9fa9459Szrjdefined in a compact unwinding format.
4761*a9fa9459SzrjOnly valid when generating compact EH frames (i.e.
4762*a9fa9459Szrjwith @code{.cfi_sections eh_frame_entry}.
4763*a9fa9459Szrj
4764*a9fa9459Szrj@subsection @code{.cfi_fde_data [@var{opcode1} [, @dots{}]]}
4765*a9fa9459Szrj@cindex @code{cfi_fde_data} directive
4766*a9fa9459Szrj@code{cfi_fde_data} is used to describe the compact unwind opcodes to be
4767*a9fa9459Szrjused for the current function.  These are emitted inline in the
4768*a9fa9459Szrj@code{.eh_frame_entry} section if small enough and there is no LSDA, or
4769*a9fa9459Szrjin the @code{.gnu.extab} section otherwise.
4770*a9fa9459SzrjOnly valid when generating compact EH frames (i.e.
4771*a9fa9459Szrjwith @code{.cfi_sections eh_frame_entry}.
4772*a9fa9459Szrj
4773*a9fa9459Szrj@subsection @code{.cfi_lsda @var{encoding} [, @var{exp}]}
4774*a9fa9459Szrj@code{.cfi_lsda} defines LSDA and its encoding.
4775*a9fa9459Szrj@var{encoding} must be a constant determining how the LSDA
4776*a9fa9459Szrjshould be encoded.  If it is 255 (@code{DW_EH_PE_omit}), the second
4777*a9fa9459Szrjargument is not present, otherwise the second argument should be a constant
4778*a9fa9459Szrjor a symbol name.  The default after @code{.cfi_startproc} is @code{.cfi_lsda 0xff},
4779*a9fa9459Szrjmeaning that no LSDA is present.
4780*a9fa9459Szrj
4781*a9fa9459Szrj@subsection @code{.cfi_inline_lsda} [@var{align}]
4782*a9fa9459Szrj@code{.cfi_inline_lsda} marks the start of a LSDA data section and
4783*a9fa9459Szrjswitches to the corresponding @code{.gnu.extab} section.
4784*a9fa9459SzrjMust be preceded by a CFI block containing a @code{.cfi_lsda} directive.
4785*a9fa9459SzrjOnly valid when generating compact EH frames (i.e.
4786*a9fa9459Szrjwith @code{.cfi_sections eh_frame_entry}.
4787*a9fa9459Szrj
4788*a9fa9459SzrjThe table header and unwinding opcodes will be generated at this point,
4789*a9fa9459Szrjso that they are immediately followed by the LSDA data.  The symbol
4790*a9fa9459Szrjreferenced by the @code{.cfi_lsda} directive should still be defined
4791*a9fa9459Szrjin case a fallback FDE based encoding is used.  The LSDA data is terminated
4792*a9fa9459Szrjby a section directive.
4793*a9fa9459Szrj
4794*a9fa9459SzrjThe optional @var{align} argument specifies the alignment required.
4795*a9fa9459SzrjThe alignment is specified as a power of two, as with the
4796*a9fa9459Szrj@code{.p2align} directive.
4797*a9fa9459Szrj
4798*a9fa9459Szrj@subsection @code{.cfi_def_cfa @var{register}, @var{offset}}
4799*a9fa9459Szrj@code{.cfi_def_cfa} defines a rule for computing CFA as: @i{take
4800*a9fa9459Szrjaddress from @var{register} and add @var{offset} to it}.
4801*a9fa9459Szrj
4802*a9fa9459Szrj@subsection @code{.cfi_def_cfa_register @var{register}}
4803*a9fa9459Szrj@code{.cfi_def_cfa_register} modifies a rule for computing CFA. From
4804*a9fa9459Szrjnow on @var{register} will be used instead of the old one. Offset
4805*a9fa9459Szrjremains the same.
4806*a9fa9459Szrj
4807*a9fa9459Szrj@subsection @code{.cfi_def_cfa_offset @var{offset}}
4808*a9fa9459Szrj@code{.cfi_def_cfa_offset} modifies a rule for computing CFA. Register
4809*a9fa9459Szrjremains the same, but @var{offset} is new. Note that it is the
4810*a9fa9459Szrjabsolute offset that will be added to a defined register to compute
4811*a9fa9459SzrjCFA address.
4812*a9fa9459Szrj
4813*a9fa9459Szrj@subsection @code{.cfi_adjust_cfa_offset @var{offset}}
4814*a9fa9459SzrjSame as @code{.cfi_def_cfa_offset} but @var{offset} is a relative
4815*a9fa9459Szrjvalue that is added/substracted from the previous offset.
4816*a9fa9459Szrj
4817*a9fa9459Szrj@subsection @code{.cfi_offset @var{register}, @var{offset}}
4818*a9fa9459SzrjPrevious value of @var{register} is saved at offset @var{offset} from
4819*a9fa9459SzrjCFA.
4820*a9fa9459Szrj
4821*a9fa9459Szrj@subsection @code{.cfi_rel_offset @var{register}, @var{offset}}
4822*a9fa9459SzrjPrevious value of @var{register} is saved at offset @var{offset} from
4823*a9fa9459Szrjthe current CFA register.  This is transformed to @code{.cfi_offset}
4824*a9fa9459Szrjusing the known displacement of the CFA register from the CFA.
4825*a9fa9459SzrjThis is often easier to use, because the number will match the
4826*a9fa9459Szrjcode it's annotating.
4827*a9fa9459Szrj
4828*a9fa9459Szrj@subsection @code{.cfi_register @var{register1}, @var{register2}}
4829*a9fa9459SzrjPrevious value of @var{register1} is saved in register @var{register2}.
4830*a9fa9459Szrj
4831*a9fa9459Szrj@subsection @code{.cfi_restore @var{register}}
4832*a9fa9459Szrj@code{.cfi_restore} says that the rule for @var{register} is now the
4833*a9fa9459Szrjsame as it was at the beginning of the function, after all initial
4834*a9fa9459Szrjinstruction added by @code{.cfi_startproc} were executed.
4835*a9fa9459Szrj
4836*a9fa9459Szrj@subsection @code{.cfi_undefined @var{register}}
4837*a9fa9459SzrjFrom now on the previous value of @var{register} can't be restored anymore.
4838*a9fa9459Szrj
4839*a9fa9459Szrj@subsection @code{.cfi_same_value @var{register}}
4840*a9fa9459SzrjCurrent value of @var{register} is the same like in the previous frame,
4841*a9fa9459Szrji.e. no restoration needed.
4842*a9fa9459Szrj
4843*a9fa9459Szrj@subsection @code{.cfi_remember_state} and @code{.cfi_restore_state}
4844*a9fa9459Szrj@code{.cfi_remember_state} pushes the set of rules for every register onto an
4845*a9fa9459Szrjimplicit stack, while @code{.cfi_restore_state} pops them off the stack and
4846*a9fa9459Szrjplaces them in the current row.  This is useful for situations where you have
4847*a9fa9459Szrjmultiple @code{.cfi_*} directives that need to be undone due to the control
4848*a9fa9459Szrjflow of the program.  For example, we could have something like this (assuming
4849*a9fa9459Szrjthe CFA is the value of @code{rbp}):
4850*a9fa9459Szrj
4851*a9fa9459Szrj@smallexample
4852*a9fa9459Szrj        je label
4853*a9fa9459Szrj        popq %rbx
4854*a9fa9459Szrj        .cfi_restore %rbx
4855*a9fa9459Szrj        popq %r12
4856*a9fa9459Szrj        .cfi_restore %r12
4857*a9fa9459Szrj        popq %rbp
4858*a9fa9459Szrj        .cfi_restore %rbp
4859*a9fa9459Szrj        .cfi_def_cfa %rsp, 8
4860*a9fa9459Szrj        ret
4861*a9fa9459Szrjlabel:
4862*a9fa9459Szrj        /* Do something else */
4863*a9fa9459Szrj@end smallexample
4864*a9fa9459Szrj
4865*a9fa9459SzrjHere, we want the @code{.cfi} directives to affect only the rows corresponding
4866*a9fa9459Szrjto the instructions before @code{label}.  This means we'd have to add multiple
4867*a9fa9459Szrj@code{.cfi} directives after @code{label} to recreate the original save
4868*a9fa9459Szrjlocations of the registers, as well as setting the CFA back to the value of
4869*a9fa9459Szrj@code{rbp}.  This would be clumsy, and result in a larger binary size. Instead,
4870*a9fa9459Szrjwe can write:
4871*a9fa9459Szrj
4872*a9fa9459Szrj@smallexample
4873*a9fa9459Szrj        je label
4874*a9fa9459Szrj        popq %rbx
4875*a9fa9459Szrj        .cfi_remember_state
4876*a9fa9459Szrj        .cfi_restore %rbx
4877*a9fa9459Szrj        popq %r12
4878*a9fa9459Szrj        .cfi_restore %r12
4879*a9fa9459Szrj        popq %rbp
4880*a9fa9459Szrj        .cfi_restore %rbp
4881*a9fa9459Szrj        .cfi_def_cfa %rsp, 8
4882*a9fa9459Szrj        ret
4883*a9fa9459Szrjlabel:
4884*a9fa9459Szrj        .cfi_restore_state
4885*a9fa9459Szrj        /* Do something else */
4886*a9fa9459Szrj@end smallexample
4887*a9fa9459Szrj
4888*a9fa9459SzrjThat way, the rules for the instructions after @code{label} will be the same
4889*a9fa9459Szrjas before the first @code{.cfi_restore} without having to use multiple
4890*a9fa9459Szrj@code{.cfi} directives.
4891*a9fa9459Szrj
4892*a9fa9459Szrj@subsection @code{.cfi_return_column @var{register}}
4893*a9fa9459SzrjChange return column @var{register}, i.e. the return address is either
4894*a9fa9459Szrjdirectly in @var{register} or can be accessed by rules for @var{register}.
4895*a9fa9459Szrj
4896*a9fa9459Szrj@subsection @code{.cfi_signal_frame}
4897*a9fa9459SzrjMark current function as signal trampoline.
4898*a9fa9459Szrj
4899*a9fa9459Szrj@subsection @code{.cfi_window_save}
4900*a9fa9459SzrjSPARC register window has been saved.
4901*a9fa9459Szrj
4902*a9fa9459Szrj@subsection @code{.cfi_escape} @var{expression}[, @dots{}]
4903*a9fa9459SzrjAllows the user to add arbitrary bytes to the unwind info.  One
4904*a9fa9459Szrjmight use this to add OS-specific CFI opcodes, or generic CFI
4905*a9fa9459Szrjopcodes that GAS does not yet support.
4906*a9fa9459Szrj
4907*a9fa9459Szrj@subsection @code{.cfi_val_encoded_addr @var{register}, @var{encoding}, @var{label}}
4908*a9fa9459SzrjThe current value of @var{register} is @var{label}.  The value of @var{label}
4909*a9fa9459Szrjwill be encoded in the output file according to @var{encoding}; see the
4910*a9fa9459Szrjdescription of @code{.cfi_personality} for details on this encoding.
4911*a9fa9459Szrj
4912*a9fa9459SzrjThe usefulness of equating a register to a fixed label is probably
4913*a9fa9459Szrjlimited to the return address register.  Here, it can be useful to
4914*a9fa9459Szrjmark a code segment that has only one return address which is reached
4915*a9fa9459Szrjby a direct branch and no copy of the return address exists in memory
4916*a9fa9459Szrjor another register.
4917*a9fa9459Szrj
4918*a9fa9459Szrj@node Comm
4919*a9fa9459Szrj@section @code{.comm @var{symbol} , @var{length} }
4920*a9fa9459Szrj
4921*a9fa9459Szrj@cindex @code{comm} directive
4922*a9fa9459Szrj@cindex symbol, common
4923*a9fa9459Szrj@code{.comm} declares a common symbol named @var{symbol}.  When linking, a
4924*a9fa9459Szrjcommon symbol in one object file may be merged with a defined or common symbol
4925*a9fa9459Szrjof the same name in another object file.  If @code{@value{LD}} does not see a
4926*a9fa9459Szrjdefinition for the symbol--just one or more common symbols--then it will
4927*a9fa9459Szrjallocate @var{length} bytes of uninitialized memory.  @var{length} must be an
4928*a9fa9459Szrjabsolute expression.  If @code{@value{LD}} sees multiple common symbols with
4929*a9fa9459Szrjthe same name, and they do not all have the same size, it will allocate space
4930*a9fa9459Szrjusing the largest size.
4931*a9fa9459Szrj
4932*a9fa9459Szrj@ifset COFF-ELF
4933*a9fa9459SzrjWhen using ELF or (as a GNU extension) PE, the @code{.comm} directive takes
4934*a9fa9459Szrjan optional third argument.  This is the desired alignment of the symbol,
4935*a9fa9459Szrjspecified for ELF as a byte boundary (for example, an alignment of 16 means
4936*a9fa9459Szrjthat the least significant 4 bits of the address should be zero), and for PE
4937*a9fa9459Szrjas a power of two (for example, an alignment of 5 means aligned to a 32-byte
4938*a9fa9459Szrjboundary).  The alignment must be an absolute expression, and it must be a
4939*a9fa9459Szrjpower of two.  If @code{@value{LD}} allocates uninitialized memory for the
4940*a9fa9459Szrjcommon symbol, it will use the alignment when placing the symbol.  If no
4941*a9fa9459Szrjalignment is specified, @command{@value{AS}} will set the alignment to the
4942*a9fa9459Szrjlargest power of two less than or equal to the size of the symbol, up to a
4943*a9fa9459Szrjmaximum of 16 on ELF, or the default section alignment of 4 on PE@footnote{This
4944*a9fa9459Szrjis not the same as the executable image file alignment controlled by @code{@value{LD}}'s
4945*a9fa9459Szrj@samp{--section-alignment} option; image file sections in PE are aligned to
4946*a9fa9459Szrjmultiples of 4096, which is far too large an alignment for ordinary variables.
4947*a9fa9459SzrjIt is rather the default alignment for (non-debug) sections within object
4948*a9fa9459Szrj(@samp{*.o}) files, which are less strictly aligned.}.
4949*a9fa9459Szrj@end ifset
4950*a9fa9459Szrj
4951*a9fa9459Szrj@ifset HPPA
4952*a9fa9459SzrjThe syntax for @code{.comm} differs slightly on the HPPA.  The syntax is
4953*a9fa9459Szrj@samp{@var{symbol} .comm, @var{length}}; @var{symbol} is optional.
4954*a9fa9459Szrj@end ifset
4955*a9fa9459Szrj
4956*a9fa9459Szrj@node Data
4957*a9fa9459Szrj@section @code{.data @var{subsection}}
4958*a9fa9459Szrj
4959*a9fa9459Szrj@cindex @code{data} directive
4960*a9fa9459Szrj@code{.data} tells @command{@value{AS}} to assemble the following statements onto the
4961*a9fa9459Szrjend of the data subsection numbered @var{subsection} (which is an
4962*a9fa9459Szrjabsolute expression).  If @var{subsection} is omitted, it defaults
4963*a9fa9459Szrjto zero.
4964*a9fa9459Szrj
4965*a9fa9459Szrj@ifset COFF
4966*a9fa9459Szrj@node Def
4967*a9fa9459Szrj@section @code{.def @var{name}}
4968*a9fa9459Szrj
4969*a9fa9459Szrj@cindex @code{def} directive
4970*a9fa9459Szrj@cindex COFF symbols, debugging
4971*a9fa9459Szrj@cindex debugging COFF symbols
4972*a9fa9459SzrjBegin defining debugging information for a symbol @var{name}; the
4973*a9fa9459Szrjdefinition extends until the @code{.endef} directive is encountered.
4974*a9fa9459Szrj@ifset BOUT
4975*a9fa9459Szrj
4976*a9fa9459SzrjThis directive is only observed when @command{@value{AS}} is configured for COFF
4977*a9fa9459Szrjformat output; when producing @code{b.out}, @samp{.def} is recognized,
4978*a9fa9459Szrjbut ignored.
4979*a9fa9459Szrj@end ifset
4980*a9fa9459Szrj@end ifset
4981*a9fa9459Szrj
4982*a9fa9459Szrj@ifset aout-bout
4983*a9fa9459Szrj@node Desc
4984*a9fa9459Szrj@section @code{.desc @var{symbol}, @var{abs-expression}}
4985*a9fa9459Szrj
4986*a9fa9459Szrj@cindex @code{desc} directive
4987*a9fa9459Szrj@cindex COFF symbol descriptor
4988*a9fa9459Szrj@cindex symbol descriptor, COFF
4989*a9fa9459SzrjThis directive sets the descriptor of the symbol (@pxref{Symbol Attributes})
4990*a9fa9459Szrjto the low 16 bits of an absolute expression.
4991*a9fa9459Szrj
4992*a9fa9459Szrj@ifset COFF
4993*a9fa9459SzrjThe @samp{.desc} directive is not available when @command{@value{AS}} is
4994*a9fa9459Szrjconfigured for COFF output; it is only for @code{a.out} or @code{b.out}
4995*a9fa9459Szrjobject format.  For the sake of compatibility, @command{@value{AS}} accepts
4996*a9fa9459Szrjit, but produces no output, when configured for COFF.
4997*a9fa9459Szrj@end ifset
4998*a9fa9459Szrj@end ifset
4999*a9fa9459Szrj
5000*a9fa9459Szrj@ifset COFF
5001*a9fa9459Szrj@node Dim
5002*a9fa9459Szrj@section @code{.dim}
5003*a9fa9459Szrj
5004*a9fa9459Szrj@cindex @code{dim} directive
5005*a9fa9459Szrj@cindex COFF auxiliary symbol information
5006*a9fa9459Szrj@cindex auxiliary symbol information, COFF
5007*a9fa9459SzrjThis directive is generated by compilers to include auxiliary debugging
5008*a9fa9459Szrjinformation in the symbol table.  It is only permitted inside
5009*a9fa9459Szrj@code{.def}/@code{.endef} pairs.
5010*a9fa9459Szrj@ifset BOUT
5011*a9fa9459Szrj
5012*a9fa9459Szrj@samp{.dim} is only meaningful when generating COFF format output; when
5013*a9fa9459Szrj@command{@value{AS}} is generating @code{b.out}, it accepts this directive but
5014*a9fa9459Szrjignores it.
5015*a9fa9459Szrj@end ifset
5016*a9fa9459Szrj@end ifset
5017*a9fa9459Szrj
5018*a9fa9459Szrj@node Double
5019*a9fa9459Szrj@section @code{.double @var{flonums}}
5020*a9fa9459Szrj
5021*a9fa9459Szrj@cindex @code{double} directive
5022*a9fa9459Szrj@cindex floating point numbers (double)
5023*a9fa9459Szrj@code{.double} expects zero or more flonums, separated by commas.  It
5024*a9fa9459Szrjassembles floating point numbers.
5025*a9fa9459Szrj@ifset GENERIC
5026*a9fa9459SzrjThe exact kind of floating point numbers emitted depends on how
5027*a9fa9459Szrj@command{@value{AS}} is configured.  @xref{Machine Dependencies}.
5028*a9fa9459Szrj@end ifset
5029*a9fa9459Szrj@ifclear GENERIC
5030*a9fa9459Szrj@ifset IEEEFLOAT
5031*a9fa9459SzrjOn the @value{TARGET} family @samp{.double} emits 64-bit floating-point numbers
5032*a9fa9459Szrjin @sc{ieee} format.
5033*a9fa9459Szrj@end ifset
5034*a9fa9459Szrj@end ifclear
5035*a9fa9459Szrj
5036*a9fa9459Szrj@node Eject
5037*a9fa9459Szrj@section @code{.eject}
5038*a9fa9459Szrj
5039*a9fa9459Szrj@cindex @code{eject} directive
5040*a9fa9459Szrj@cindex new page, in listings
5041*a9fa9459Szrj@cindex page, in listings
5042*a9fa9459Szrj@cindex listing control: new page
5043*a9fa9459SzrjForce a page break at this point, when generating assembly listings.
5044*a9fa9459Szrj
5045*a9fa9459Szrj@node Else
5046*a9fa9459Szrj@section @code{.else}
5047*a9fa9459Szrj
5048*a9fa9459Szrj@cindex @code{else} directive
5049*a9fa9459Szrj@code{.else} is part of the @command{@value{AS}} support for conditional
5050*a9fa9459Szrjassembly; see @ref{If,,@code{.if}}.  It marks the beginning of a section
5051*a9fa9459Szrjof code to be assembled if the condition for the preceding @code{.if}
5052*a9fa9459Szrjwas false.
5053*a9fa9459Szrj
5054*a9fa9459Szrj@node Elseif
5055*a9fa9459Szrj@section @code{.elseif}
5056*a9fa9459Szrj
5057*a9fa9459Szrj@cindex @code{elseif} directive
5058*a9fa9459Szrj@code{.elseif} is part of the @command{@value{AS}} support for conditional
5059*a9fa9459Szrjassembly; see @ref{If,,@code{.if}}.  It is shorthand for beginning a new
5060*a9fa9459Szrj@code{.if} block that would otherwise fill the entire @code{.else} section.
5061*a9fa9459Szrj
5062*a9fa9459Szrj@node End
5063*a9fa9459Szrj@section @code{.end}
5064*a9fa9459Szrj
5065*a9fa9459Szrj@cindex @code{end} directive
5066*a9fa9459Szrj@code{.end} marks the end of the assembly file.  @command{@value{AS}} does not
5067*a9fa9459Szrjprocess anything in the file past the @code{.end} directive.
5068*a9fa9459Szrj
5069*a9fa9459Szrj@ifset COFF
5070*a9fa9459Szrj@node Endef
5071*a9fa9459Szrj@section @code{.endef}
5072*a9fa9459Szrj
5073*a9fa9459Szrj@cindex @code{endef} directive
5074*a9fa9459SzrjThis directive flags the end of a symbol definition begun with
5075*a9fa9459Szrj@code{.def}.
5076*a9fa9459Szrj@ifset BOUT
5077*a9fa9459Szrj
5078*a9fa9459Szrj@samp{.endef} is only meaningful when generating COFF format output; if
5079*a9fa9459Szrj@command{@value{AS}} is configured to generate @code{b.out}, it accepts this
5080*a9fa9459Szrjdirective but ignores it.
5081*a9fa9459Szrj@end ifset
5082*a9fa9459Szrj@end ifset
5083*a9fa9459Szrj
5084*a9fa9459Szrj@node Endfunc
5085*a9fa9459Szrj@section @code{.endfunc}
5086*a9fa9459Szrj@cindex @code{endfunc} directive
5087*a9fa9459Szrj@code{.endfunc} marks the end of a function specified with @code{.func}.
5088*a9fa9459Szrj
5089*a9fa9459Szrj@node Endif
5090*a9fa9459Szrj@section @code{.endif}
5091*a9fa9459Szrj
5092*a9fa9459Szrj@cindex @code{endif} directive
5093*a9fa9459Szrj@code{.endif} is part of the @command{@value{AS}} support for conditional assembly;
5094*a9fa9459Szrjit marks the end of a block of code that is only assembled
5095*a9fa9459Szrjconditionally.  @xref{If,,@code{.if}}.
5096*a9fa9459Szrj
5097*a9fa9459Szrj@node Equ
5098*a9fa9459Szrj@section @code{.equ @var{symbol}, @var{expression}}
5099*a9fa9459Szrj
5100*a9fa9459Szrj@cindex @code{equ} directive
5101*a9fa9459Szrj@cindex assigning values to symbols
5102*a9fa9459Szrj@cindex symbols, assigning values to
5103*a9fa9459SzrjThis directive sets the value of @var{symbol} to @var{expression}.
5104*a9fa9459SzrjIt is synonymous with @samp{.set}; see @ref{Set,,@code{.set}}.
5105*a9fa9459Szrj
5106*a9fa9459Szrj@ifset HPPA
5107*a9fa9459SzrjThe syntax for @code{equ} on the HPPA is
5108*a9fa9459Szrj@samp{@var{symbol} .equ @var{expression}}.
5109*a9fa9459Szrj@end ifset
5110*a9fa9459Szrj
5111*a9fa9459Szrj@ifset Z80
5112*a9fa9459SzrjThe syntax for @code{equ} on the Z80 is
5113*a9fa9459Szrj@samp{@var{symbol} equ @var{expression}}.
5114*a9fa9459SzrjOn the Z80 it is an eror if @var{symbol} is already defined,
5115*a9fa9459Szrjbut the symbol is not protected from later redefinition.
5116*a9fa9459SzrjCompare @ref{Equiv}.
5117*a9fa9459Szrj@end ifset
5118*a9fa9459Szrj
5119*a9fa9459Szrj@node Equiv
5120*a9fa9459Szrj@section @code{.equiv @var{symbol}, @var{expression}}
5121*a9fa9459Szrj@cindex @code{equiv} directive
5122*a9fa9459SzrjThe @code{.equiv} directive is like @code{.equ} and @code{.set}, except that
5123*a9fa9459Szrjthe assembler will signal an error if @var{symbol} is already defined.  Note a
5124*a9fa9459Szrjsymbol which has been referenced but not actually defined is considered to be
5125*a9fa9459Szrjundefined.
5126*a9fa9459Szrj
5127*a9fa9459SzrjExcept for the contents of the error message, this is roughly equivalent to
5128*a9fa9459Szrj@smallexample
5129*a9fa9459Szrj.ifdef SYM
5130*a9fa9459Szrj.err
5131*a9fa9459Szrj.endif
5132*a9fa9459Szrj.equ SYM,VAL
5133*a9fa9459Szrj@end smallexample
5134*a9fa9459Szrjplus it protects the symbol from later redefinition.
5135*a9fa9459Szrj
5136*a9fa9459Szrj@node Eqv
5137*a9fa9459Szrj@section @code{.eqv @var{symbol}, @var{expression}}
5138*a9fa9459Szrj@cindex @code{eqv} directive
5139*a9fa9459SzrjThe @code{.eqv} directive is like @code{.equiv}, but no attempt is made to
5140*a9fa9459Szrjevaluate the expression or any part of it immediately.  Instead each time
5141*a9fa9459Szrjthe resulting symbol is used in an expression, a snapshot of its current
5142*a9fa9459Szrjvalue is taken.
5143*a9fa9459Szrj
5144*a9fa9459Szrj@node Err
5145*a9fa9459Szrj@section @code{.err}
5146*a9fa9459Szrj@cindex @code{err} directive
5147*a9fa9459SzrjIf @command{@value{AS}} assembles a @code{.err} directive, it will print an error
5148*a9fa9459Szrjmessage and, unless the @option{-Z} option was used, it will not generate an
5149*a9fa9459Szrjobject file.  This can be used to signal an error in conditionally compiled code.
5150*a9fa9459Szrj
5151*a9fa9459Szrj@node Error
5152*a9fa9459Szrj@section @code{.error "@var{string}"}
5153*a9fa9459Szrj@cindex error directive
5154*a9fa9459Szrj
5155*a9fa9459SzrjSimilarly to @code{.err}, this directive emits an error, but you can specify a
5156*a9fa9459Szrjstring that will be emitted as the error message.  If you don't specify the
5157*a9fa9459Szrjmessage, it defaults to @code{".error directive invoked in source file"}.
5158*a9fa9459Szrj@xref{Errors, ,Error and Warning Messages}.
5159*a9fa9459Szrj
5160*a9fa9459Szrj@smallexample
5161*a9fa9459Szrj .error "This code has not been assembled and tested."
5162*a9fa9459Szrj@end smallexample
5163*a9fa9459Szrj
5164*a9fa9459Szrj@node Exitm
5165*a9fa9459Szrj@section @code{.exitm}
5166*a9fa9459SzrjExit early from the current macro definition.  @xref{Macro}.
5167*a9fa9459Szrj
5168*a9fa9459Szrj@node Extern
5169*a9fa9459Szrj@section @code{.extern}
5170*a9fa9459Szrj
5171*a9fa9459Szrj@cindex @code{extern} directive
5172*a9fa9459Szrj@code{.extern} is accepted in the source program---for compatibility
5173*a9fa9459Szrjwith other assemblers---but it is ignored.  @command{@value{AS}} treats
5174*a9fa9459Szrjall undefined symbols as external.
5175*a9fa9459Szrj
5176*a9fa9459Szrj@node Fail
5177*a9fa9459Szrj@section @code{.fail @var{expression}}
5178*a9fa9459Szrj
5179*a9fa9459Szrj@cindex @code{fail} directive
5180*a9fa9459SzrjGenerates an error or a warning.  If the value of the @var{expression} is 500
5181*a9fa9459Szrjor more, @command{@value{AS}} will print a warning message.  If the value is less
5182*a9fa9459Szrjthan 500, @command{@value{AS}} will print an error message.  The message will
5183*a9fa9459Szrjinclude the value of @var{expression}.  This can occasionally be useful inside
5184*a9fa9459Szrjcomplex nested macros or conditional assembly.
5185*a9fa9459Szrj
5186*a9fa9459Szrj@node File
5187*a9fa9459Szrj@section @code{.file}
5188*a9fa9459Szrj@cindex @code{file} directive
5189*a9fa9459Szrj
5190*a9fa9459Szrj@ifclear no-file-dir
5191*a9fa9459SzrjThere are two different versions of the @code{.file} directive.  Targets
5192*a9fa9459Szrjthat support DWARF2 line number information use the DWARF2 version of
5193*a9fa9459Szrj@code{.file}.  Other targets use the default version.
5194*a9fa9459Szrj
5195*a9fa9459Szrj@subheading Default Version
5196*a9fa9459Szrj
5197*a9fa9459Szrj@cindex logical file name
5198*a9fa9459Szrj@cindex file name, logical
5199*a9fa9459SzrjThis version of the @code{.file} directive tells @command{@value{AS}} that we
5200*a9fa9459Szrjare about to start a new logical file.  The syntax is:
5201*a9fa9459Szrj
5202*a9fa9459Szrj@smallexample
5203*a9fa9459Szrj.file @var{string}
5204*a9fa9459Szrj@end smallexample
5205*a9fa9459Szrj
5206*a9fa9459Szrj@var{string} is the new file name.  In general, the filename is
5207*a9fa9459Szrjrecognized whether or not it is surrounded by quotes @samp{"}; but if you wish
5208*a9fa9459Szrjto specify an empty file name, you must give the quotes--@code{""}.  This
5209*a9fa9459Szrjstatement may go away in future: it is only recognized to be compatible with
5210*a9fa9459Szrjold @command{@value{AS}} programs.
5211*a9fa9459Szrj
5212*a9fa9459Szrj@subheading DWARF2 Version
5213*a9fa9459Szrj@end ifclear
5214*a9fa9459Szrj
5215*a9fa9459SzrjWhen emitting DWARF2 line number information, @code{.file} assigns filenames
5216*a9fa9459Szrjto the @code{.debug_line} file name table.  The syntax is:
5217*a9fa9459Szrj
5218*a9fa9459Szrj@smallexample
5219*a9fa9459Szrj.file @var{fileno} @var{filename}
5220*a9fa9459Szrj@end smallexample
5221*a9fa9459Szrj
5222*a9fa9459SzrjThe @var{fileno} operand should be a unique positive integer to use as the
5223*a9fa9459Szrjindex of the entry in the table.  The @var{filename} operand is a C string
5224*a9fa9459Szrjliteral.
5225*a9fa9459Szrj
5226*a9fa9459SzrjThe detail of filename indices is exposed to the user because the filename
5227*a9fa9459Szrjtable is shared with the @code{.debug_info} section of the DWARF2 debugging
5228*a9fa9459Szrjinformation, and thus the user must know the exact indices that table
5229*a9fa9459Szrjentries will have.
5230*a9fa9459Szrj
5231*a9fa9459Szrj@node Fill
5232*a9fa9459Szrj@section @code{.fill @var{repeat} , @var{size} , @var{value}}
5233*a9fa9459Szrj
5234*a9fa9459Szrj@cindex @code{fill} directive
5235*a9fa9459Szrj@cindex writing patterns in memory
5236*a9fa9459Szrj@cindex patterns, writing in memory
5237*a9fa9459Szrj@var{repeat}, @var{size} and @var{value} are absolute expressions.
5238*a9fa9459SzrjThis emits @var{repeat} copies of @var{size} bytes.  @var{Repeat}
5239*a9fa9459Szrjmay be zero or more.  @var{Size} may be zero or more, but if it is
5240*a9fa9459Szrjmore than 8, then it is deemed to have the value 8, compatible with
5241*a9fa9459Szrjother people's assemblers.  The contents of each @var{repeat} bytes
5242*a9fa9459Szrjis taken from an 8-byte number.  The highest order 4 bytes are
5243*a9fa9459Szrjzero.  The lowest order 4 bytes are @var{value} rendered in the
5244*a9fa9459Szrjbyte-order of an integer on the computer @command{@value{AS}} is assembling for.
5245*a9fa9459SzrjEach @var{size} bytes in a repetition is taken from the lowest order
5246*a9fa9459Szrj@var{size} bytes of this number.  Again, this bizarre behavior is
5247*a9fa9459Szrjcompatible with other people's assemblers.
5248*a9fa9459Szrj
5249*a9fa9459Szrj@var{size} and @var{value} are optional.
5250*a9fa9459SzrjIf the second comma and @var{value} are absent, @var{value} is
5251*a9fa9459Szrjassumed zero.  If the first comma and following tokens are absent,
5252*a9fa9459Szrj@var{size} is assumed to be 1.
5253*a9fa9459Szrj
5254*a9fa9459Szrj@node Float
5255*a9fa9459Szrj@section @code{.float @var{flonums}}
5256*a9fa9459Szrj
5257*a9fa9459Szrj@cindex floating point numbers (single)
5258*a9fa9459Szrj@cindex @code{float} directive
5259*a9fa9459SzrjThis directive assembles zero or more flonums, separated by commas.  It
5260*a9fa9459Szrjhas the same effect as @code{.single}.
5261*a9fa9459Szrj@ifset GENERIC
5262*a9fa9459SzrjThe exact kind of floating point numbers emitted depends on how
5263*a9fa9459Szrj@command{@value{AS}} is configured.
5264*a9fa9459Szrj@xref{Machine Dependencies}.
5265*a9fa9459Szrj@end ifset
5266*a9fa9459Szrj@ifclear GENERIC
5267*a9fa9459Szrj@ifset IEEEFLOAT
5268*a9fa9459SzrjOn the @value{TARGET} family, @code{.float} emits 32-bit floating point numbers
5269*a9fa9459Szrjin @sc{ieee} format.
5270*a9fa9459Szrj@end ifset
5271*a9fa9459Szrj@end ifclear
5272*a9fa9459Szrj
5273*a9fa9459Szrj@node Func
5274*a9fa9459Szrj@section @code{.func @var{name}[,@var{label}]}
5275*a9fa9459Szrj@cindex @code{func} directive
5276*a9fa9459Szrj@code{.func} emits debugging information to denote function @var{name}, and
5277*a9fa9459Szrjis ignored unless the file is assembled with debugging enabled.
5278*a9fa9459SzrjOnly @samp{--gstabs[+]} is currently supported.
5279*a9fa9459Szrj@var{label} is the entry point of the function and if omitted @var{name}
5280*a9fa9459Szrjprepended with the @samp{leading char} is used.
5281*a9fa9459Szrj@samp{leading char} is usually @code{_} or nothing, depending on the target.
5282*a9fa9459SzrjAll functions are currently defined to have @code{void} return type.
5283*a9fa9459SzrjThe function must be terminated with @code{.endfunc}.
5284*a9fa9459Szrj
5285*a9fa9459Szrj@node Global
5286*a9fa9459Szrj@section @code{.global @var{symbol}}, @code{.globl @var{symbol}}
5287*a9fa9459Szrj
5288*a9fa9459Szrj@cindex @code{global} directive
5289*a9fa9459Szrj@cindex symbol, making visible to linker
5290*a9fa9459Szrj@code{.global} makes the symbol visible to @code{@value{LD}}.  If you define
5291*a9fa9459Szrj@var{symbol} in your partial program, its value is made available to
5292*a9fa9459Szrjother partial programs that are linked with it.  Otherwise,
5293*a9fa9459Szrj@var{symbol} takes its attributes from a symbol of the same name
5294*a9fa9459Szrjfrom another file linked into the same program.
5295*a9fa9459Szrj
5296*a9fa9459SzrjBoth spellings (@samp{.globl} and @samp{.global}) are accepted, for
5297*a9fa9459Szrjcompatibility with other assemblers.
5298*a9fa9459Szrj
5299*a9fa9459Szrj@ifset HPPA
5300*a9fa9459SzrjOn the HPPA, @code{.global} is not always enough to make it accessible to other
5301*a9fa9459Szrjpartial programs.  You may need the HPPA-only @code{.EXPORT} directive as well.
5302*a9fa9459Szrj@xref{HPPA Directives, ,HPPA Assembler Directives}.
5303*a9fa9459Szrj@end ifset
5304*a9fa9459Szrj
5305*a9fa9459Szrj@ifset ELF
5306*a9fa9459Szrj@node Gnu_attribute
5307*a9fa9459Szrj@section @code{.gnu_attribute @var{tag},@var{value}}
5308*a9fa9459SzrjRecord a @sc{gnu} object attribute for this file.  @xref{Object Attributes}.
5309*a9fa9459Szrj
5310*a9fa9459Szrj@node Hidden
5311*a9fa9459Szrj@section @code{.hidden @var{names}}
5312*a9fa9459Szrj
5313*a9fa9459Szrj@cindex @code{hidden} directive
5314*a9fa9459Szrj@cindex visibility
5315*a9fa9459SzrjThis is one of the ELF visibility directives.  The other two are
5316*a9fa9459Szrj@code{.internal} (@pxref{Internal,,@code{.internal}}) and
5317*a9fa9459Szrj@code{.protected} (@pxref{Protected,,@code{.protected}}).
5318*a9fa9459Szrj
5319*a9fa9459SzrjThis directive overrides the named symbols default visibility (which is set by
5320*a9fa9459Szrjtheir binding: local, global or weak).  The directive sets the visibility to
5321*a9fa9459Szrj@code{hidden} which means that the symbols are not visible to other components.
5322*a9fa9459SzrjSuch symbols are always considered to be @code{protected} as well.
5323*a9fa9459Szrj@end ifset
5324*a9fa9459Szrj
5325*a9fa9459Szrj@node hword
5326*a9fa9459Szrj@section @code{.hword @var{expressions}}
5327*a9fa9459Szrj
5328*a9fa9459Szrj@cindex @code{hword} directive
5329*a9fa9459Szrj@cindex integers, 16-bit
5330*a9fa9459Szrj@cindex numbers, 16-bit
5331*a9fa9459Szrj@cindex sixteen bit integers
5332*a9fa9459SzrjThis expects zero or more @var{expressions}, and emits
5333*a9fa9459Szrja 16 bit number for each.
5334*a9fa9459Szrj
5335*a9fa9459Szrj@ifset GENERIC
5336*a9fa9459SzrjThis directive is a synonym for @samp{.short}; depending on the target
5337*a9fa9459Szrjarchitecture, it may also be a synonym for @samp{.word}.
5338*a9fa9459Szrj@end ifset
5339*a9fa9459Szrj@ifclear GENERIC
5340*a9fa9459Szrj@ifset W32
5341*a9fa9459SzrjThis directive is a synonym for @samp{.short}.
5342*a9fa9459Szrj@end ifset
5343*a9fa9459Szrj@ifset W16
5344*a9fa9459SzrjThis directive is a synonym for both @samp{.short} and @samp{.word}.
5345*a9fa9459Szrj@end ifset
5346*a9fa9459Szrj@end ifclear
5347*a9fa9459Szrj
5348*a9fa9459Szrj@node Ident
5349*a9fa9459Szrj@section @code{.ident}
5350*a9fa9459Szrj
5351*a9fa9459Szrj@cindex @code{ident} directive
5352*a9fa9459Szrj
5353*a9fa9459SzrjThis directive is used by some assemblers to place tags in object files.  The
5354*a9fa9459Szrjbehavior of this directive varies depending on the target.  When using the
5355*a9fa9459Szrja.out object file format, @command{@value{AS}} simply accepts the directive for
5356*a9fa9459Szrjsource-file compatibility with existing assemblers, but does not emit anything
5357*a9fa9459Szrjfor it.  When using COFF, comments are emitted to the @code{.comment} or
5358*a9fa9459Szrj@code{.rdata} section, depending on the target.  When using ELF, comments are
5359*a9fa9459Szrjemitted to the @code{.comment} section.
5360*a9fa9459Szrj
5361*a9fa9459Szrj@node If
5362*a9fa9459Szrj@section @code{.if @var{absolute expression}}
5363*a9fa9459Szrj
5364*a9fa9459Szrj@cindex conditional assembly
5365*a9fa9459Szrj@cindex @code{if} directive
5366*a9fa9459Szrj@code{.if} marks the beginning of a section of code which is only
5367*a9fa9459Szrjconsidered part of the source program being assembled if the argument
5368*a9fa9459Szrj(which must be an @var{absolute expression}) is non-zero.  The end of
5369*a9fa9459Szrjthe conditional section of code must be marked by @code{.endif}
5370*a9fa9459Szrj(@pxref{Endif,,@code{.endif}}); optionally, you may include code for the
5371*a9fa9459Szrjalternative condition, flagged by @code{.else} (@pxref{Else,,@code{.else}}).
5372*a9fa9459SzrjIf you have several conditions to check, @code{.elseif} may be used to avoid
5373*a9fa9459Szrjnesting blocks if/else within each subsequent @code{.else} block.
5374*a9fa9459Szrj
5375*a9fa9459SzrjThe following variants of @code{.if} are also supported:
5376*a9fa9459Szrj@table @code
5377*a9fa9459Szrj@cindex @code{ifdef} directive
5378*a9fa9459Szrj@item .ifdef @var{symbol}
5379*a9fa9459SzrjAssembles the following section of code if the specified @var{symbol}
5380*a9fa9459Szrjhas been defined.  Note a symbol which has been referenced but not yet defined
5381*a9fa9459Szrjis considered to be undefined.
5382*a9fa9459Szrj
5383*a9fa9459Szrj@cindex @code{ifb} directive
5384*a9fa9459Szrj@item .ifb @var{text}
5385*a9fa9459SzrjAssembles the following section of code if the operand is blank (empty).
5386*a9fa9459Szrj
5387*a9fa9459Szrj@cindex @code{ifc} directive
5388*a9fa9459Szrj@item .ifc @var{string1},@var{string2}
5389*a9fa9459SzrjAssembles the following section of code if the two strings are the same.  The
5390*a9fa9459Szrjstrings may be optionally quoted with single quotes.  If they are not quoted,
5391*a9fa9459Szrjthe first string stops at the first comma, and the second string stops at the
5392*a9fa9459Szrjend of the line.  Strings which contain whitespace should be quoted.  The
5393*a9fa9459Szrjstring comparison is case sensitive.
5394*a9fa9459Szrj
5395*a9fa9459Szrj@cindex @code{ifeq} directive
5396*a9fa9459Szrj@item .ifeq @var{absolute expression}
5397*a9fa9459SzrjAssembles the following section of code if the argument is zero.
5398*a9fa9459Szrj
5399*a9fa9459Szrj@cindex @code{ifeqs} directive
5400*a9fa9459Szrj@item .ifeqs @var{string1},@var{string2}
5401*a9fa9459SzrjAnother form of @code{.ifc}.  The strings must be quoted using double quotes.
5402*a9fa9459Szrj
5403*a9fa9459Szrj@cindex @code{ifge} directive
5404*a9fa9459Szrj@item .ifge @var{absolute expression}
5405*a9fa9459SzrjAssembles the following section of code if the argument is greater than or
5406*a9fa9459Szrjequal to zero.
5407*a9fa9459Szrj
5408*a9fa9459Szrj@cindex @code{ifgt} directive
5409*a9fa9459Szrj@item .ifgt @var{absolute expression}
5410*a9fa9459SzrjAssembles the following section of code if the argument is greater than zero.
5411*a9fa9459Szrj
5412*a9fa9459Szrj@cindex @code{ifle} directive
5413*a9fa9459Szrj@item .ifle @var{absolute expression}
5414*a9fa9459SzrjAssembles the following section of code if the argument is less than or equal
5415*a9fa9459Szrjto zero.
5416*a9fa9459Szrj
5417*a9fa9459Szrj@cindex @code{iflt} directive
5418*a9fa9459Szrj@item .iflt @var{absolute expression}
5419*a9fa9459SzrjAssembles the following section of code if the argument is less than zero.
5420*a9fa9459Szrj
5421*a9fa9459Szrj@cindex @code{ifnb} directive
5422*a9fa9459Szrj@item .ifnb @var{text}
5423*a9fa9459SzrjLike @code{.ifb}, but the sense of the test is reversed: this assembles the
5424*a9fa9459Szrjfollowing section of code if the operand is non-blank (non-empty).
5425*a9fa9459Szrj
5426*a9fa9459Szrj@cindex @code{ifnc} directive
5427*a9fa9459Szrj@item .ifnc @var{string1},@var{string2}.
5428*a9fa9459SzrjLike @code{.ifc}, but the sense of the test is reversed: this assembles the
5429*a9fa9459Szrjfollowing section of code if the two strings are not the same.
5430*a9fa9459Szrj
5431*a9fa9459Szrj@cindex @code{ifndef} directive
5432*a9fa9459Szrj@cindex @code{ifnotdef} directive
5433*a9fa9459Szrj@item .ifndef @var{symbol}
5434*a9fa9459Szrj@itemx .ifnotdef @var{symbol}
5435*a9fa9459SzrjAssembles the following section of code if the specified @var{symbol}
5436*a9fa9459Szrjhas not been defined.  Both spelling variants are equivalent.  Note a symbol
5437*a9fa9459Szrjwhich has been referenced but not yet defined is considered to be undefined.
5438*a9fa9459Szrj
5439*a9fa9459Szrj@cindex @code{ifne} directive
5440*a9fa9459Szrj@item .ifne @var{absolute expression}
5441*a9fa9459SzrjAssembles the following section of code if the argument is not equal to zero
5442*a9fa9459Szrj(in other words, this is equivalent to @code{.if}).
5443*a9fa9459Szrj
5444*a9fa9459Szrj@cindex @code{ifnes} directive
5445*a9fa9459Szrj@item .ifnes @var{string1},@var{string2}
5446*a9fa9459SzrjLike @code{.ifeqs}, but the sense of the test is reversed: this assembles the
5447*a9fa9459Szrjfollowing section of code if the two strings are not the same.
5448*a9fa9459Szrj@end table
5449*a9fa9459Szrj
5450*a9fa9459Szrj@node Incbin
5451*a9fa9459Szrj@section @code{.incbin "@var{file}"[,@var{skip}[,@var{count}]]}
5452*a9fa9459Szrj
5453*a9fa9459Szrj@cindex @code{incbin} directive
5454*a9fa9459Szrj@cindex binary files, including
5455*a9fa9459SzrjThe @code{incbin} directive includes @var{file} verbatim at the current
5456*a9fa9459Szrjlocation. You can control the search paths used with the @samp{-I} command-line
5457*a9fa9459Szrjoption (@pxref{Invoking,,Command-Line Options}).  Quotation marks are required
5458*a9fa9459Szrjaround @var{file}.
5459*a9fa9459Szrj
5460*a9fa9459SzrjThe @var{skip} argument skips a number of bytes from the start of the
5461*a9fa9459Szrj@var{file}.  The @var{count} argument indicates the maximum number of bytes to
5462*a9fa9459Szrjread.  Note that the data is not aligned in any way, so it is the user's
5463*a9fa9459Szrjresponsibility to make sure that proper alignment is provided both before and
5464*a9fa9459Szrjafter the @code{incbin} directive.
5465*a9fa9459Szrj
5466*a9fa9459Szrj@node Include
5467*a9fa9459Szrj@section @code{.include "@var{file}"}
5468*a9fa9459Szrj
5469*a9fa9459Szrj@cindex @code{include} directive
5470*a9fa9459Szrj@cindex supporting files, including
5471*a9fa9459Szrj@cindex files, including
5472*a9fa9459SzrjThis directive provides a way to include supporting files at specified
5473*a9fa9459Szrjpoints in your source program.  The code from @var{file} is assembled as
5474*a9fa9459Szrjif it followed the point of the @code{.include}; when the end of the
5475*a9fa9459Szrjincluded file is reached, assembly of the original file continues.  You
5476*a9fa9459Szrjcan control the search paths used with the @samp{-I} command-line option
5477*a9fa9459Szrj(@pxref{Invoking,,Command-Line Options}).  Quotation marks are required
5478*a9fa9459Szrjaround @var{file}.
5479*a9fa9459Szrj
5480*a9fa9459Szrj@node Int
5481*a9fa9459Szrj@section @code{.int @var{expressions}}
5482*a9fa9459Szrj
5483*a9fa9459Szrj@cindex @code{int} directive
5484*a9fa9459Szrj@cindex integers, 32-bit
5485*a9fa9459SzrjExpect zero or more @var{expressions}, of any section, separated by commas.
5486*a9fa9459SzrjFor each expression, emit a number that, at run time, is the value of that
5487*a9fa9459Szrjexpression.  The byte order and bit size of the number depends on what kind
5488*a9fa9459Szrjof target the assembly is for.
5489*a9fa9459Szrj
5490*a9fa9459Szrj@ifclear GENERIC
5491*a9fa9459Szrj@ifset H8
5492*a9fa9459SzrjOn most forms of the H8/300, @code{.int} emits 16-bit
5493*a9fa9459Szrjintegers.  On the H8/300H and the Renesas SH, however, @code{.int} emits
5494*a9fa9459Szrj32-bit integers.
5495*a9fa9459Szrj@end ifset
5496*a9fa9459Szrj@end ifclear
5497*a9fa9459Szrj
5498*a9fa9459Szrj@ifset ELF
5499*a9fa9459Szrj@node Internal
5500*a9fa9459Szrj@section @code{.internal @var{names}}
5501*a9fa9459Szrj
5502*a9fa9459Szrj@cindex @code{internal} directive
5503*a9fa9459Szrj@cindex visibility
5504*a9fa9459SzrjThis is one of the ELF visibility directives.  The other two are
5505*a9fa9459Szrj@code{.hidden} (@pxref{Hidden,,@code{.hidden}}) and
5506*a9fa9459Szrj@code{.protected} (@pxref{Protected,,@code{.protected}}).
5507*a9fa9459Szrj
5508*a9fa9459SzrjThis directive overrides the named symbols default visibility (which is set by
5509*a9fa9459Szrjtheir binding: local, global or weak).  The directive sets the visibility to
5510*a9fa9459Szrj@code{internal} which means that the symbols are considered to be @code{hidden}
5511*a9fa9459Szrj(i.e., not visible to other components), and that some extra, processor specific
5512*a9fa9459Szrjprocessing must also be performed upon the  symbols as well.
5513*a9fa9459Szrj@end ifset
5514*a9fa9459Szrj
5515*a9fa9459Szrj@node Irp
5516*a9fa9459Szrj@section @code{.irp @var{symbol},@var{values}}@dots{}
5517*a9fa9459Szrj
5518*a9fa9459Szrj@cindex @code{irp} directive
5519*a9fa9459SzrjEvaluate a sequence of statements assigning different values to @var{symbol}.
5520*a9fa9459SzrjThe sequence of statements starts at the @code{.irp} directive, and is
5521*a9fa9459Szrjterminated by an @code{.endr} directive.  For each @var{value}, @var{symbol} is
5522*a9fa9459Szrjset to @var{value}, and the sequence of statements is assembled.  If no
5523*a9fa9459Szrj@var{value} is listed, the sequence of statements is assembled once, with
5524*a9fa9459Szrj@var{symbol} set to the null string.  To refer to @var{symbol} within the
5525*a9fa9459Szrjsequence of statements, use @var{\symbol}.
5526*a9fa9459Szrj
5527*a9fa9459SzrjFor example, assembling
5528*a9fa9459Szrj
5529*a9fa9459Szrj@example
5530*a9fa9459Szrj        .irp    param,1,2,3
5531*a9fa9459Szrj        move    d\param,sp@@-
5532*a9fa9459Szrj        .endr
5533*a9fa9459Szrj@end example
5534*a9fa9459Szrj
5535*a9fa9459Szrjis equivalent to assembling
5536*a9fa9459Szrj
5537*a9fa9459Szrj@example
5538*a9fa9459Szrj        move    d1,sp@@-
5539*a9fa9459Szrj        move    d2,sp@@-
5540*a9fa9459Szrj        move    d3,sp@@-
5541*a9fa9459Szrj@end example
5542*a9fa9459Szrj
5543*a9fa9459SzrjFor some caveats with the spelling of @var{symbol}, see also @ref{Macro}.
5544*a9fa9459Szrj
5545*a9fa9459Szrj@node Irpc
5546*a9fa9459Szrj@section @code{.irpc @var{symbol},@var{values}}@dots{}
5547*a9fa9459Szrj
5548*a9fa9459Szrj@cindex @code{irpc} directive
5549*a9fa9459SzrjEvaluate a sequence of statements assigning different values to @var{symbol}.
5550*a9fa9459SzrjThe sequence of statements starts at the @code{.irpc} directive, and is
5551*a9fa9459Szrjterminated by an @code{.endr} directive.  For each character in @var{value},
5552*a9fa9459Szrj@var{symbol} is set to the character, and the sequence of statements is
5553*a9fa9459Szrjassembled.  If no @var{value} is listed, the sequence of statements is
5554*a9fa9459Szrjassembled once, with @var{symbol} set to the null string.  To refer to
5555*a9fa9459Szrj@var{symbol} within the sequence of statements, use @var{\symbol}.
5556*a9fa9459Szrj
5557*a9fa9459SzrjFor example, assembling
5558*a9fa9459Szrj
5559*a9fa9459Szrj@example
5560*a9fa9459Szrj        .irpc    param,123
5561*a9fa9459Szrj        move    d\param,sp@@-
5562*a9fa9459Szrj        .endr
5563*a9fa9459Szrj@end example
5564*a9fa9459Szrj
5565*a9fa9459Szrjis equivalent to assembling
5566*a9fa9459Szrj
5567*a9fa9459Szrj@example
5568*a9fa9459Szrj        move    d1,sp@@-
5569*a9fa9459Szrj        move    d2,sp@@-
5570*a9fa9459Szrj        move    d3,sp@@-
5571*a9fa9459Szrj@end example
5572*a9fa9459Szrj
5573*a9fa9459SzrjFor some caveats with the spelling of @var{symbol}, see also the discussion
5574*a9fa9459Szrjat @xref{Macro}.
5575*a9fa9459Szrj
5576*a9fa9459Szrj@node Lcomm
5577*a9fa9459Szrj@section @code{.lcomm @var{symbol} , @var{length}}
5578*a9fa9459Szrj
5579*a9fa9459Szrj@cindex @code{lcomm} directive
5580*a9fa9459Szrj@cindex local common symbols
5581*a9fa9459Szrj@cindex symbols, local common
5582*a9fa9459SzrjReserve @var{length} (an absolute expression) bytes for a local common
5583*a9fa9459Szrjdenoted by @var{symbol}.  The section and value of @var{symbol} are
5584*a9fa9459Szrjthose of the new local common.  The addresses are allocated in the bss
5585*a9fa9459Szrjsection, so that at run-time the bytes start off zeroed.  @var{Symbol}
5586*a9fa9459Szrjis not declared global (@pxref{Global,,@code{.global}}), so is normally
5587*a9fa9459Szrjnot visible to @code{@value{LD}}.
5588*a9fa9459Szrj
5589*a9fa9459Szrj@ifset GENERIC
5590*a9fa9459SzrjSome targets permit a third argument to be used with @code{.lcomm}.  This
5591*a9fa9459Szrjargument specifies the desired alignment of the symbol in the bss section.
5592*a9fa9459Szrj@end ifset
5593*a9fa9459Szrj
5594*a9fa9459Szrj@ifset HPPA
5595*a9fa9459SzrjThe syntax for @code{.lcomm} differs slightly on the HPPA.  The syntax is
5596*a9fa9459Szrj@samp{@var{symbol} .lcomm, @var{length}}; @var{symbol} is optional.
5597*a9fa9459Szrj@end ifset
5598*a9fa9459Szrj
5599*a9fa9459Szrj@node Lflags
5600*a9fa9459Szrj@section @code{.lflags}
5601*a9fa9459Szrj
5602*a9fa9459Szrj@cindex @code{lflags} directive (ignored)
5603*a9fa9459Szrj@command{@value{AS}} accepts this directive, for compatibility with other
5604*a9fa9459Szrjassemblers, but ignores it.
5605*a9fa9459Szrj
5606*a9fa9459Szrj@ifclear no-line-dir
5607*a9fa9459Szrj@node Line
5608*a9fa9459Szrj@section @code{.line @var{line-number}}
5609*a9fa9459Szrj
5610*a9fa9459Szrj@cindex @code{line} directive
5611*a9fa9459Szrj@cindex logical line number
5612*a9fa9459Szrj@ifset aout-bout
5613*a9fa9459SzrjChange the logical line number.  @var{line-number} must be an absolute
5614*a9fa9459Szrjexpression.  The next line has that logical line number.  Therefore any other
5615*a9fa9459Szrjstatements on the current line (after a statement separator character) are
5616*a9fa9459Szrjreported as on logical line number @var{line-number} @minus{} 1.  One day
5617*a9fa9459Szrj@command{@value{AS}} will no longer support this directive: it is recognized only
5618*a9fa9459Szrjfor compatibility with existing assembler programs.
5619*a9fa9459Szrj@end ifset
5620*a9fa9459Szrj
5621*a9fa9459SzrjEven though this is a directive associated with the @code{a.out} or
5622*a9fa9459Szrj@code{b.out} object-code formats, @command{@value{AS}} still recognizes it
5623*a9fa9459Szrjwhen producing COFF output, and treats @samp{.line} as though it
5624*a9fa9459Szrjwere the COFF @samp{.ln} @emph{if} it is found outside a
5625*a9fa9459Szrj@code{.def}/@code{.endef} pair.
5626*a9fa9459Szrj
5627*a9fa9459SzrjInside a @code{.def}, @samp{.line} is, instead, one of the directives
5628*a9fa9459Szrjused by compilers to generate auxiliary symbol information for
5629*a9fa9459Szrjdebugging.
5630*a9fa9459Szrj@end ifclear
5631*a9fa9459Szrj
5632*a9fa9459Szrj@node Linkonce
5633*a9fa9459Szrj@section @code{.linkonce [@var{type}]}
5634*a9fa9459Szrj@cindex COMDAT
5635*a9fa9459Szrj@cindex @code{linkonce} directive
5636*a9fa9459Szrj@cindex common sections
5637*a9fa9459SzrjMark the current section so that the linker only includes a single copy of it.
5638*a9fa9459SzrjThis may be used to include the same section in several different object files,
5639*a9fa9459Szrjbut ensure that the linker will only include it once in the final output file.
5640*a9fa9459SzrjThe @code{.linkonce} pseudo-op must be used for each instance of the section.
5641*a9fa9459SzrjDuplicate sections are detected based on the section name, so it should be
5642*a9fa9459Szrjunique.
5643*a9fa9459Szrj
5644*a9fa9459SzrjThis directive is only supported by a few object file formats; as of this
5645*a9fa9459Szrjwriting, the only object file format which supports it is the Portable
5646*a9fa9459SzrjExecutable format used on Windows NT.
5647*a9fa9459Szrj
5648*a9fa9459SzrjThe @var{type} argument is optional.  If specified, it must be one of the
5649*a9fa9459Szrjfollowing strings.  For example:
5650*a9fa9459Szrj@smallexample
5651*a9fa9459Szrj.linkonce same_size
5652*a9fa9459Szrj@end smallexample
5653*a9fa9459SzrjNot all types may be supported on all object file formats.
5654*a9fa9459Szrj
5655*a9fa9459Szrj@table @code
5656*a9fa9459Szrj@item discard
5657*a9fa9459SzrjSilently discard duplicate sections.  This is the default.
5658*a9fa9459Szrj
5659*a9fa9459Szrj@item one_only
5660*a9fa9459SzrjWarn if there are duplicate sections, but still keep only one copy.
5661*a9fa9459Szrj
5662*a9fa9459Szrj@item same_size
5663*a9fa9459SzrjWarn if any of the duplicates have different sizes.
5664*a9fa9459Szrj
5665*a9fa9459Szrj@item same_contents
5666*a9fa9459SzrjWarn if any of the duplicates do not have exactly the same contents.
5667*a9fa9459Szrj@end table
5668*a9fa9459Szrj
5669*a9fa9459Szrj@node List
5670*a9fa9459Szrj@section @code{.list}
5671*a9fa9459Szrj
5672*a9fa9459Szrj@cindex @code{list} directive
5673*a9fa9459Szrj@cindex listing control, turning on
5674*a9fa9459SzrjControl (in conjunction with the @code{.nolist} directive) whether or
5675*a9fa9459Szrjnot assembly listings are generated.  These two directives maintain an
5676*a9fa9459Szrjinternal counter (which is zero initially).   @code{.list} increments the
5677*a9fa9459Szrjcounter, and @code{.nolist} decrements it.  Assembly listings are
5678*a9fa9459Szrjgenerated whenever the counter is greater than zero.
5679*a9fa9459Szrj
5680*a9fa9459SzrjBy default, listings are disabled.  When you enable them (with the
5681*a9fa9459Szrj@samp{-a} command line option; @pxref{Invoking,,Command-Line Options}),
5682*a9fa9459Szrjthe initial value of the listing counter is one.
5683*a9fa9459Szrj
5684*a9fa9459Szrj@node Ln
5685*a9fa9459Szrj@section @code{.ln @var{line-number}}
5686*a9fa9459Szrj
5687*a9fa9459Szrj@cindex @code{ln} directive
5688*a9fa9459Szrj@ifclear no-line-dir
5689*a9fa9459Szrj@samp{.ln} is a synonym for @samp{.line}.
5690*a9fa9459Szrj@end ifclear
5691*a9fa9459Szrj@ifset no-line-dir
5692*a9fa9459SzrjTell @command{@value{AS}} to change the logical line number.  @var{line-number}
5693*a9fa9459Szrjmust be an absolute expression.  The next line has that logical
5694*a9fa9459Szrjline number, so any other statements on the current line (after a
5695*a9fa9459Szrjstatement separator character @code{;}) are reported as on logical
5696*a9fa9459Szrjline number @var{line-number} @minus{} 1.
5697*a9fa9459Szrj@ifset BOUT
5698*a9fa9459Szrj
5699*a9fa9459SzrjThis directive is accepted, but ignored, when @command{@value{AS}} is
5700*a9fa9459Szrjconfigured for @code{b.out}; its effect is only associated with COFF
5701*a9fa9459Szrjoutput format.
5702*a9fa9459Szrj@end ifset
5703*a9fa9459Szrj@end ifset
5704*a9fa9459Szrj
5705*a9fa9459Szrj@node Loc
5706*a9fa9459Szrj@section @code{.loc @var{fileno} @var{lineno} [@var{column}] [@var{options}]}
5707*a9fa9459Szrj@cindex @code{loc} directive
5708*a9fa9459SzrjWhen emitting DWARF2 line number information,
5709*a9fa9459Szrjthe @code{.loc} directive will add a row to the @code{.debug_line} line
5710*a9fa9459Szrjnumber matrix corresponding to the immediately following assembly
5711*a9fa9459Szrjinstruction.  The @var{fileno}, @var{lineno}, and optional @var{column}
5712*a9fa9459Szrjarguments will be applied to the @code{.debug_line} state machine before
5713*a9fa9459Szrjthe row is added.
5714*a9fa9459Szrj
5715*a9fa9459SzrjThe @var{options} are a sequence of the following tokens in any order:
5716*a9fa9459Szrj
5717*a9fa9459Szrj@table @code
5718*a9fa9459Szrj@item basic_block
5719*a9fa9459SzrjThis option will set the @code{basic_block} register in the
5720*a9fa9459Szrj@code{.debug_line} state machine to @code{true}.
5721*a9fa9459Szrj
5722*a9fa9459Szrj@item prologue_end
5723*a9fa9459SzrjThis option will set the @code{prologue_end} register in the
5724*a9fa9459Szrj@code{.debug_line} state machine to @code{true}.
5725*a9fa9459Szrj
5726*a9fa9459Szrj@item epilogue_begin
5727*a9fa9459SzrjThis option will set the @code{epilogue_begin} register in the
5728*a9fa9459Szrj@code{.debug_line} state machine to @code{true}.
5729*a9fa9459Szrj
5730*a9fa9459Szrj@item is_stmt @var{value}
5731*a9fa9459SzrjThis option will set the @code{is_stmt} register in the
5732*a9fa9459Szrj@code{.debug_line} state machine to @code{value}, which must be
5733*a9fa9459Szrjeither 0 or 1.
5734*a9fa9459Szrj
5735*a9fa9459Szrj@item isa @var{value}
5736*a9fa9459SzrjThis directive will set the @code{isa} register in the @code{.debug_line}
5737*a9fa9459Szrjstate machine to @var{value}, which must be an unsigned integer.
5738*a9fa9459Szrj
5739*a9fa9459Szrj@item discriminator @var{value}
5740*a9fa9459SzrjThis directive will set the @code{discriminator} register in the @code{.debug_line}
5741*a9fa9459Szrjstate machine to @var{value}, which must be an unsigned integer.
5742*a9fa9459Szrj
5743*a9fa9459Szrj@end table
5744*a9fa9459Szrj
5745*a9fa9459Szrj@node Loc_mark_labels
5746*a9fa9459Szrj@section @code{.loc_mark_labels @var{enable}}
5747*a9fa9459Szrj@cindex @code{loc_mark_labels} directive
5748*a9fa9459SzrjWhen emitting DWARF2 line number information,
5749*a9fa9459Szrjthe @code{.loc_mark_labels} directive makes the assembler emit an entry
5750*a9fa9459Szrjto the @code{.debug_line} line number matrix with the @code{basic_block}
5751*a9fa9459Szrjregister in the state machine set whenever a code label is seen.
5752*a9fa9459SzrjThe @var{enable} argument should be either 1 or 0, to enable or disable
5753*a9fa9459Szrjthis function respectively.
5754*a9fa9459Szrj
5755*a9fa9459Szrj@ifset ELF
5756*a9fa9459Szrj@node Local
5757*a9fa9459Szrj@section @code{.local @var{names}}
5758*a9fa9459Szrj
5759*a9fa9459Szrj@cindex @code{local} directive
5760*a9fa9459SzrjThis directive, which is available for ELF targets, marks each symbol in
5761*a9fa9459Szrjthe comma-separated list of @code{names} as a local symbol so that it
5762*a9fa9459Szrjwill not be externally visible.  If the symbols do not already exist,
5763*a9fa9459Szrjthey will be created.
5764*a9fa9459Szrj
5765*a9fa9459SzrjFor targets where the @code{.lcomm} directive (@pxref{Lcomm}) does not
5766*a9fa9459Szrjaccept an alignment argument, which is the case for most ELF targets,
5767*a9fa9459Szrjthe @code{.local} directive can be used in combination with @code{.comm}
5768*a9fa9459Szrj(@pxref{Comm}) to define aligned local common data.
5769*a9fa9459Szrj@end ifset
5770*a9fa9459Szrj
5771*a9fa9459Szrj@node Long
5772*a9fa9459Szrj@section @code{.long @var{expressions}}
5773*a9fa9459Szrj
5774*a9fa9459Szrj@cindex @code{long} directive
5775*a9fa9459Szrj@code{.long} is the same as @samp{.int}.  @xref{Int,,@code{.int}}.
5776*a9fa9459Szrj
5777*a9fa9459Szrj@ignore
5778*a9fa9459Szrj@c no one seems to know what this is for or whether this description is
5779*a9fa9459Szrj@c what it really ought to do
5780*a9fa9459Szrj@node Lsym
5781*a9fa9459Szrj@section @code{.lsym @var{symbol}, @var{expression}}
5782*a9fa9459Szrj
5783*a9fa9459Szrj@cindex @code{lsym} directive
5784*a9fa9459Szrj@cindex symbol, not referenced in assembly
5785*a9fa9459Szrj@code{.lsym} creates a new symbol named @var{symbol}, but does not put it in
5786*a9fa9459Szrjthe hash table, ensuring it cannot be referenced by name during the
5787*a9fa9459Szrjrest of the assembly.  This sets the attributes of the symbol to be
5788*a9fa9459Szrjthe same as the expression value:
5789*a9fa9459Szrj@smallexample
5790*a9fa9459Szrj@var{other} = @var{descriptor} = 0
5791*a9fa9459Szrj@var{type} = @r{(section of @var{expression})}
5792*a9fa9459Szrj@var{value} = @var{expression}
5793*a9fa9459Szrj@end smallexample
5794*a9fa9459Szrj@noindent
5795*a9fa9459SzrjThe new symbol is not flagged as external.
5796*a9fa9459Szrj@end ignore
5797*a9fa9459Szrj
5798*a9fa9459Szrj@node Macro
5799*a9fa9459Szrj@section @code{.macro}
5800*a9fa9459Szrj
5801*a9fa9459Szrj@cindex macros
5802*a9fa9459SzrjThe commands @code{.macro} and @code{.endm} allow you to define macros that
5803*a9fa9459Szrjgenerate assembly output.  For example, this definition specifies a macro
5804*a9fa9459Szrj@code{sum} that puts a sequence of numbers into memory:
5805*a9fa9459Szrj
5806*a9fa9459Szrj@example
5807*a9fa9459Szrj        .macro  sum from=0, to=5
5808*a9fa9459Szrj        .long   \from
5809*a9fa9459Szrj        .if     \to-\from
5810*a9fa9459Szrj        sum     "(\from+1)",\to
5811*a9fa9459Szrj        .endif
5812*a9fa9459Szrj        .endm
5813*a9fa9459Szrj@end example
5814*a9fa9459Szrj
5815*a9fa9459Szrj@noindent
5816*a9fa9459SzrjWith that definition, @samp{SUM 0,5} is equivalent to this assembly input:
5817*a9fa9459Szrj
5818*a9fa9459Szrj@example
5819*a9fa9459Szrj        .long   0
5820*a9fa9459Szrj        .long   1
5821*a9fa9459Szrj        .long   2
5822*a9fa9459Szrj        .long   3
5823*a9fa9459Szrj        .long   4
5824*a9fa9459Szrj        .long   5
5825*a9fa9459Szrj@end example
5826*a9fa9459Szrj
5827*a9fa9459Szrj@ftable @code
5828*a9fa9459Szrj@item .macro @var{macname}
5829*a9fa9459Szrj@itemx .macro @var{macname} @var{macargs} @dots{}
5830*a9fa9459Szrj@cindex @code{macro} directive
5831*a9fa9459SzrjBegin the definition of a macro called @var{macname}.  If your macro
5832*a9fa9459Szrjdefinition requires arguments, specify their names after the macro name,
5833*a9fa9459Szrjseparated by commas or spaces.  You can qualify the macro argument to
5834*a9fa9459Szrjindicate whether all invocations must specify a non-blank value (through
5835*a9fa9459Szrj@samp{:@code{req}}), or whether it takes all of the remaining arguments
5836*a9fa9459Szrj(through @samp{:@code{vararg}}).  You can supply a default value for any
5837*a9fa9459Szrjmacro argument by following the name with @samp{=@var{deflt}}.  You
5838*a9fa9459Szrjcannot define two macros with the same @var{macname} unless it has been
5839*a9fa9459Szrjsubject to the @code{.purgem} directive (@pxref{Purgem}) between the two
5840*a9fa9459Szrjdefinitions.  For example, these are all valid @code{.macro} statements:
5841*a9fa9459Szrj
5842*a9fa9459Szrj@table @code
5843*a9fa9459Szrj@item .macro comm
5844*a9fa9459SzrjBegin the definition of a macro called @code{comm}, which takes no
5845*a9fa9459Szrjarguments.
5846*a9fa9459Szrj
5847*a9fa9459Szrj@item  .macro plus1 p, p1
5848*a9fa9459Szrj@itemx .macro plus1 p p1
5849*a9fa9459SzrjEither statement begins the definition of a macro called @code{plus1},
5850*a9fa9459Szrjwhich takes two arguments; within the macro definition, write
5851*a9fa9459Szrj@samp{\p} or @samp{\p1} to evaluate the arguments.
5852*a9fa9459Szrj
5853*a9fa9459Szrj@item .macro reserve_str p1=0 p2
5854*a9fa9459SzrjBegin the definition of a macro called @code{reserve_str}, with two
5855*a9fa9459Szrjarguments.  The first argument has a default value, but not the second.
5856*a9fa9459SzrjAfter the definition is complete, you can call the macro either as
5857*a9fa9459Szrj@samp{reserve_str @var{a},@var{b}} (with @samp{\p1} evaluating to
5858*a9fa9459Szrj@var{a} and @samp{\p2} evaluating to @var{b}), or as @samp{reserve_str
5859*a9fa9459Szrj,@var{b}} (with @samp{\p1} evaluating as the default, in this case
5860*a9fa9459Szrj@samp{0}, and @samp{\p2} evaluating to @var{b}).
5861*a9fa9459Szrj
5862*a9fa9459Szrj@item .macro m p1:req, p2=0, p3:vararg
5863*a9fa9459SzrjBegin the definition of a macro called @code{m}, with at least three
5864*a9fa9459Szrjarguments.  The first argument must always have a value specified, but
5865*a9fa9459Szrjnot the second, which instead has a default value. The third formal
5866*a9fa9459Szrjwill get assigned all remaining arguments specified at invocation time.
5867*a9fa9459Szrj
5868*a9fa9459SzrjWhen you call a macro, you can specify the argument values either by
5869*a9fa9459Szrjposition, or by keyword.  For example, @samp{sum 9,17} is equivalent to
5870*a9fa9459Szrj@samp{sum to=17, from=9}.
5871*a9fa9459Szrj
5872*a9fa9459Szrj@end table
5873*a9fa9459Szrj
5874*a9fa9459SzrjNote that since each of the @var{macargs} can be an identifier exactly
5875*a9fa9459Szrjas any other one permitted by the target architecture, there may be
5876*a9fa9459Szrjoccasional problems if the target hand-crafts special meanings to certain
5877*a9fa9459Szrjcharacters when they occur in a special position.  For example, if the colon
5878*a9fa9459Szrj(@code{:}) is generally permitted to be part of a symbol name, but the
5879*a9fa9459Szrjarchitecture specific code special-cases it when occurring as the final
5880*a9fa9459Szrjcharacter of a symbol (to denote a label), then the macro parameter
5881*a9fa9459Szrjreplacement code will have no way of knowing that and consider the whole
5882*a9fa9459Szrjconstruct (including the colon) an identifier, and check only this
5883*a9fa9459Szrjidentifier for being the subject to parameter substitution.  So for example
5884*a9fa9459Szrjthis macro definition:
5885*a9fa9459Szrj
5886*a9fa9459Szrj@example
5887*a9fa9459Szrj	.macro label l
5888*a9fa9459Szrj\l:
5889*a9fa9459Szrj	.endm
5890*a9fa9459Szrj@end example
5891*a9fa9459Szrj
5892*a9fa9459Szrjmight not work as expected.  Invoking @samp{label foo} might not create a label
5893*a9fa9459Szrjcalled @samp{foo} but instead just insert the text @samp{\l:} into the
5894*a9fa9459Szrjassembler source, probably generating an error about an unrecognised
5895*a9fa9459Szrjidentifier.
5896*a9fa9459Szrj
5897*a9fa9459SzrjSimilarly problems might occur with the period character (@samp{.})
5898*a9fa9459Szrjwhich is often allowed inside opcode names (and hence identifier names).  So
5899*a9fa9459Szrjfor example constructing a macro to build an opcode from a base name and a
5900*a9fa9459Szrjlength specifier like this:
5901*a9fa9459Szrj
5902*a9fa9459Szrj@example
5903*a9fa9459Szrj	.macro opcode base length
5904*a9fa9459Szrj        \base.\length
5905*a9fa9459Szrj	.endm
5906*a9fa9459Szrj@end example
5907*a9fa9459Szrj
5908*a9fa9459Szrjand invoking it as @samp{opcode store l} will not create a @samp{store.l}
5909*a9fa9459Szrjinstruction but instead generate some kind of error as the assembler tries to
5910*a9fa9459Szrjinterpret the text @samp{\base.\length}.
5911*a9fa9459Szrj
5912*a9fa9459SzrjThere are several possible ways around this problem:
5913*a9fa9459Szrj
5914*a9fa9459Szrj@table @code
5915*a9fa9459Szrj@item Insert white space
5916*a9fa9459SzrjIf it is possible to use white space characters then this is the simplest
5917*a9fa9459Szrjsolution.  eg:
5918*a9fa9459Szrj
5919*a9fa9459Szrj@example
5920*a9fa9459Szrj	.macro label l
5921*a9fa9459Szrj\l :
5922*a9fa9459Szrj	.endm
5923*a9fa9459Szrj@end example
5924*a9fa9459Szrj
5925*a9fa9459Szrj@item Use @samp{\()}
5926*a9fa9459SzrjThe string @samp{\()} can be used to separate the end of a macro argument from
5927*a9fa9459Szrjthe following text.  eg:
5928*a9fa9459Szrj
5929*a9fa9459Szrj@example
5930*a9fa9459Szrj	.macro opcode base length
5931*a9fa9459Szrj        \base\().\length
5932*a9fa9459Szrj	.endm
5933*a9fa9459Szrj@end example
5934*a9fa9459Szrj
5935*a9fa9459Szrj@item Use the alternate macro syntax mode
5936*a9fa9459SzrjIn the alternative macro syntax mode the ampersand character (@samp{&}) can be
5937*a9fa9459Szrjused as a separator.  eg:
5938*a9fa9459Szrj
5939*a9fa9459Szrj@example
5940*a9fa9459Szrj	.altmacro
5941*a9fa9459Szrj	.macro label l
5942*a9fa9459Szrjl&:
5943*a9fa9459Szrj	.endm
5944*a9fa9459Szrj@end example
5945*a9fa9459Szrj@end table
5946*a9fa9459Szrj
5947*a9fa9459SzrjNote: this problem of correctly identifying string parameters to pseudo ops
5948*a9fa9459Szrjalso applies to the identifiers used in @code{.irp} (@pxref{Irp})
5949*a9fa9459Szrjand @code{.irpc} (@pxref{Irpc}) as well.
5950*a9fa9459Szrj
5951*a9fa9459Szrj@item .endm
5952*a9fa9459Szrj@cindex @code{endm} directive
5953*a9fa9459SzrjMark the end of a macro definition.
5954*a9fa9459Szrj
5955*a9fa9459Szrj@item .exitm
5956*a9fa9459Szrj@cindex @code{exitm} directive
5957*a9fa9459SzrjExit early from the current macro definition.
5958*a9fa9459Szrj
5959*a9fa9459Szrj@cindex number of macros executed
5960*a9fa9459Szrj@cindex macros, count executed
5961*a9fa9459Szrj@item \@@
5962*a9fa9459Szrj@command{@value{AS}} maintains a counter of how many macros it has
5963*a9fa9459Szrjexecuted in this pseudo-variable; you can copy that number to your
5964*a9fa9459Szrjoutput with @samp{\@@}, but @emph{only within a macro definition}.
5965*a9fa9459Szrj
5966*a9fa9459Szrj@item LOCAL @var{name} [ , @dots{} ]
5967*a9fa9459Szrj@emph{Warning: @code{LOCAL} is only available if you select ``alternate
5968*a9fa9459Szrjmacro syntax'' with @samp{--alternate} or @code{.altmacro}.}
5969*a9fa9459Szrj@xref{Altmacro,,@code{.altmacro}}.
5970*a9fa9459Szrj@end ftable
5971*a9fa9459Szrj
5972*a9fa9459Szrj@node MRI
5973*a9fa9459Szrj@section @code{.mri @var{val}}
5974*a9fa9459Szrj
5975*a9fa9459Szrj@cindex @code{mri} directive
5976*a9fa9459Szrj@cindex MRI mode, temporarily
5977*a9fa9459SzrjIf @var{val} is non-zero, this tells @command{@value{AS}} to enter MRI mode.  If
5978*a9fa9459Szrj@var{val} is zero, this tells @command{@value{AS}} to exit MRI mode.  This change
5979*a9fa9459Szrjaffects code assembled until the next @code{.mri} directive, or until the end
5980*a9fa9459Szrjof the file.  @xref{M, MRI mode, MRI mode}.
5981*a9fa9459Szrj
5982*a9fa9459Szrj@node Noaltmacro
5983*a9fa9459Szrj@section @code{.noaltmacro}
5984*a9fa9459SzrjDisable alternate macro mode.  @xref{Altmacro}.
5985*a9fa9459Szrj
5986*a9fa9459Szrj@node Nolist
5987*a9fa9459Szrj@section @code{.nolist}
5988*a9fa9459Szrj
5989*a9fa9459Szrj@cindex @code{nolist} directive
5990*a9fa9459Szrj@cindex listing control, turning off
5991*a9fa9459SzrjControl (in conjunction with the @code{.list} directive) whether or
5992*a9fa9459Szrjnot assembly listings are generated.  These two directives maintain an
5993*a9fa9459Szrjinternal counter (which is zero initially).   @code{.list} increments the
5994*a9fa9459Szrjcounter, and @code{.nolist} decrements it.  Assembly listings are
5995*a9fa9459Szrjgenerated whenever the counter is greater than zero.
5996*a9fa9459Szrj
5997*a9fa9459Szrj@node Octa
5998*a9fa9459Szrj@section @code{.octa @var{bignums}}
5999*a9fa9459Szrj
6000*a9fa9459Szrj@c FIXME: double size emitted for "octa" on i960, others?  Or warn?
6001*a9fa9459Szrj@cindex @code{octa} directive
6002*a9fa9459Szrj@cindex integer, 16-byte
6003*a9fa9459Szrj@cindex sixteen byte integer
6004*a9fa9459SzrjThis directive expects zero or more bignums, separated by commas.  For each
6005*a9fa9459Szrjbignum, it emits a 16-byte integer.
6006*a9fa9459Szrj
6007*a9fa9459SzrjThe term ``octa'' comes from contexts in which a ``word'' is two bytes;
6008*a9fa9459Szrjhence @emph{octa}-word for 16 bytes.
6009*a9fa9459Szrj
6010*a9fa9459Szrj@node Offset
6011*a9fa9459Szrj@section @code{.offset @var{loc}}
6012*a9fa9459Szrj
6013*a9fa9459Szrj@cindex @code{offset} directive
6014*a9fa9459SzrjSet the location counter to @var{loc} in the absolute section.  @var{loc} must
6015*a9fa9459Szrjbe an absolute expression.  This directive may be useful for defining
6016*a9fa9459Szrjsymbols with absolute values.  Do not confuse it with the @code{.org}
6017*a9fa9459Szrjdirective.
6018*a9fa9459Szrj
6019*a9fa9459Szrj@node Org
6020*a9fa9459Szrj@section @code{.org @var{new-lc} , @var{fill}}
6021*a9fa9459Szrj
6022*a9fa9459Szrj@cindex @code{org} directive
6023*a9fa9459Szrj@cindex location counter, advancing
6024*a9fa9459Szrj@cindex advancing location counter
6025*a9fa9459Szrj@cindex current address, advancing
6026*a9fa9459SzrjAdvance the location counter of the current section to
6027*a9fa9459Szrj@var{new-lc}.  @var{new-lc} is either an absolute expression or an
6028*a9fa9459Szrjexpression with the same section as the current subsection.  That is,
6029*a9fa9459Szrjyou can't use @code{.org} to cross sections: if @var{new-lc} has the
6030*a9fa9459Szrjwrong section, the @code{.org} directive is ignored.  To be compatible
6031*a9fa9459Szrjwith former assemblers, if the section of @var{new-lc} is absolute,
6032*a9fa9459Szrj@command{@value{AS}} issues a warning, then pretends the section of @var{new-lc}
6033*a9fa9459Szrjis the same as the current subsection.
6034*a9fa9459Szrj
6035*a9fa9459Szrj@code{.org} may only increase the location counter, or leave it
6036*a9fa9459Szrjunchanged; you cannot use @code{.org} to move the location counter
6037*a9fa9459Szrjbackwards.
6038*a9fa9459Szrj
6039*a9fa9459Szrj@c double negative used below "not undefined" because this is a specific
6040*a9fa9459Szrj@c reference to "undefined" (as SEG_UNKNOWN is called in this manual)
6041*a9fa9459Szrj@c section. doc@cygnus.com 18feb91
6042*a9fa9459SzrjBecause @command{@value{AS}} tries to assemble programs in one pass, @var{new-lc}
6043*a9fa9459Szrjmay not be undefined.  If you really detest this restriction we eagerly await
6044*a9fa9459Szrja chance to share your improved assembler.
6045*a9fa9459Szrj
6046*a9fa9459SzrjBeware that the origin is relative to the start of the section, not
6047*a9fa9459Szrjto the start of the subsection.  This is compatible with other
6048*a9fa9459Szrjpeople's assemblers.
6049*a9fa9459Szrj
6050*a9fa9459SzrjWhen the location counter (of the current subsection) is advanced, the
6051*a9fa9459Szrjintervening bytes are filled with @var{fill} which should be an
6052*a9fa9459Szrjabsolute expression.  If the comma and @var{fill} are omitted,
6053*a9fa9459Szrj@var{fill} defaults to zero.
6054*a9fa9459Szrj
6055*a9fa9459Szrj@node P2align
6056*a9fa9459Szrj@section @code{.p2align[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
6057*a9fa9459Szrj
6058*a9fa9459Szrj@cindex padding the location counter given a power of two
6059*a9fa9459Szrj@cindex @code{p2align} directive
6060*a9fa9459SzrjPad the location counter (in the current subsection) to a particular
6061*a9fa9459Szrjstorage boundary.  The first expression (which must be absolute) is the
6062*a9fa9459Szrjnumber of low-order zero bits the location counter must have after
6063*a9fa9459Szrjadvancement.  For example @samp{.p2align 3} advances the location
6064*a9fa9459Szrjcounter until it a multiple of 8.  If the location counter is already a
6065*a9fa9459Szrjmultiple of 8, no change is needed.
6066*a9fa9459Szrj
6067*a9fa9459SzrjThe second expression (also absolute) gives the fill value to be stored in the
6068*a9fa9459Szrjpadding bytes.  It (and the comma) may be omitted.  If it is omitted, the
6069*a9fa9459Szrjpadding bytes are normally zero.  However, on some systems, if the section is
6070*a9fa9459Szrjmarked as containing code and the fill value is omitted, the space is filled
6071*a9fa9459Szrjwith no-op instructions.
6072*a9fa9459Szrj
6073*a9fa9459SzrjThe third expression is also absolute, and is also optional.  If it is present,
6074*a9fa9459Szrjit is the maximum number of bytes that should be skipped by this alignment
6075*a9fa9459Szrjdirective.  If doing the alignment would require skipping more bytes than the
6076*a9fa9459Szrjspecified maximum, then the alignment is not done at all.  You can omit the
6077*a9fa9459Szrjfill value (the second argument) entirely by simply using two commas after the
6078*a9fa9459Szrjrequired alignment; this can be useful if you want the alignment to be filled
6079*a9fa9459Szrjwith no-op instructions when appropriate.
6080*a9fa9459Szrj
6081*a9fa9459Szrj@cindex @code{p2alignw} directive
6082*a9fa9459Szrj@cindex @code{p2alignl} directive
6083*a9fa9459SzrjThe @code{.p2alignw} and @code{.p2alignl} directives are variants of the
6084*a9fa9459Szrj@code{.p2align} directive.  The @code{.p2alignw} directive treats the fill
6085*a9fa9459Szrjpattern as a two byte word value.  The @code{.p2alignl} directives treats the
6086*a9fa9459Szrjfill pattern as a four byte longword value.  For example, @code{.p2alignw
6087*a9fa9459Szrj2,0x368d} will align to a multiple of 4.  If it skips two bytes, they will be
6088*a9fa9459Szrjfilled in with the value 0x368d (the exact placement of the bytes depends upon
6089*a9fa9459Szrjthe endianness of the processor).  If it skips 1 or 3 bytes, the fill value is
6090*a9fa9459Szrjundefined.
6091*a9fa9459Szrj
6092*a9fa9459Szrj@ifset ELF
6093*a9fa9459Szrj@node PopSection
6094*a9fa9459Szrj@section @code{.popsection}
6095*a9fa9459Szrj
6096*a9fa9459Szrj@cindex @code{popsection} directive
6097*a9fa9459Szrj@cindex Section Stack
6098*a9fa9459SzrjThis is one of the ELF section stack manipulation directives.  The others are
6099*a9fa9459Szrj@code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}),
6100*a9fa9459Szrj@code{.pushsection} (@pxref{PushSection}), and @code{.previous}
6101*a9fa9459Szrj(@pxref{Previous}).
6102*a9fa9459Szrj
6103*a9fa9459SzrjThis directive replaces the current section (and subsection) with the top
6104*a9fa9459Szrjsection (and subsection) on the section stack.  This section is popped off the
6105*a9fa9459Szrjstack.
6106*a9fa9459Szrj@end ifset
6107*a9fa9459Szrj
6108*a9fa9459Szrj@ifset ELF
6109*a9fa9459Szrj@node Previous
6110*a9fa9459Szrj@section @code{.previous}
6111*a9fa9459Szrj
6112*a9fa9459Szrj@cindex @code{previous} directive
6113*a9fa9459Szrj@cindex Section Stack
6114*a9fa9459SzrjThis is one of the ELF section stack manipulation directives.  The others are
6115*a9fa9459Szrj@code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}),
6116*a9fa9459Szrj@code{.pushsection} (@pxref{PushSection}), and @code{.popsection}
6117*a9fa9459Szrj(@pxref{PopSection}).
6118*a9fa9459Szrj
6119*a9fa9459SzrjThis directive swaps the current section (and subsection) with most recently
6120*a9fa9459Szrjreferenced section/subsection pair prior to this one.  Multiple
6121*a9fa9459Szrj@code{.previous} directives in a row will flip between two sections (and their
6122*a9fa9459Szrjsubsections).  For example:
6123*a9fa9459Szrj
6124*a9fa9459Szrj@smallexample
6125*a9fa9459Szrj.section A
6126*a9fa9459Szrj .subsection 1
6127*a9fa9459Szrj  .word 0x1234
6128*a9fa9459Szrj .subsection 2
6129*a9fa9459Szrj  .word 0x5678
6130*a9fa9459Szrj.previous
6131*a9fa9459Szrj .word 0x9abc
6132*a9fa9459Szrj@end smallexample
6133*a9fa9459Szrj
6134*a9fa9459SzrjWill place 0x1234 and 0x9abc into subsection 1 and 0x5678 into subsection 2 of
6135*a9fa9459Szrjsection A.  Whilst:
6136*a9fa9459Szrj
6137*a9fa9459Szrj@smallexample
6138*a9fa9459Szrj.section A
6139*a9fa9459Szrj.subsection 1
6140*a9fa9459Szrj  # Now in section A subsection 1
6141*a9fa9459Szrj  .word 0x1234
6142*a9fa9459Szrj.section B
6143*a9fa9459Szrj.subsection 0
6144*a9fa9459Szrj  # Now in section B subsection 0
6145*a9fa9459Szrj  .word 0x5678
6146*a9fa9459Szrj.subsection 1
6147*a9fa9459Szrj  # Now in section B subsection 1
6148*a9fa9459Szrj  .word 0x9abc
6149*a9fa9459Szrj.previous
6150*a9fa9459Szrj  # Now in section B subsection 0
6151*a9fa9459Szrj  .word 0xdef0
6152*a9fa9459Szrj@end smallexample
6153*a9fa9459Szrj
6154*a9fa9459SzrjWill place 0x1234 into section A, 0x5678 and 0xdef0 into subsection 0 of
6155*a9fa9459Szrjsection B and 0x9abc into subsection 1 of section B.
6156*a9fa9459Szrj
6157*a9fa9459SzrjIn terms of the section stack, this directive swaps the current section with
6158*a9fa9459Szrjthe top section on the section stack.
6159*a9fa9459Szrj@end ifset
6160*a9fa9459Szrj
6161*a9fa9459Szrj@node Print
6162*a9fa9459Szrj@section @code{.print @var{string}}
6163*a9fa9459Szrj
6164*a9fa9459Szrj@cindex @code{print} directive
6165*a9fa9459Szrj@command{@value{AS}} will print @var{string} on the standard output during
6166*a9fa9459Szrjassembly.  You must put @var{string} in double quotes.
6167*a9fa9459Szrj
6168*a9fa9459Szrj@ifset ELF
6169*a9fa9459Szrj@node Protected
6170*a9fa9459Szrj@section @code{.protected @var{names}}
6171*a9fa9459Szrj
6172*a9fa9459Szrj@cindex @code{protected} directive
6173*a9fa9459Szrj@cindex visibility
6174*a9fa9459SzrjThis is one of the ELF visibility directives.  The other two are
6175*a9fa9459Szrj@code{.hidden} (@pxref{Hidden}) and @code{.internal} (@pxref{Internal}).
6176*a9fa9459Szrj
6177*a9fa9459SzrjThis directive overrides the named symbols default visibility (which is set by
6178*a9fa9459Szrjtheir binding: local, global or weak).  The directive sets the visibility to
6179*a9fa9459Szrj@code{protected} which means that any references to the symbols from within the
6180*a9fa9459Szrjcomponents that defines them must be resolved to the definition in that
6181*a9fa9459Szrjcomponent, even if a definition in another component would normally preempt
6182*a9fa9459Szrjthis.
6183*a9fa9459Szrj@end ifset
6184*a9fa9459Szrj
6185*a9fa9459Szrj@node Psize
6186*a9fa9459Szrj@section @code{.psize @var{lines} , @var{columns}}
6187*a9fa9459Szrj
6188*a9fa9459Szrj@cindex @code{psize} directive
6189*a9fa9459Szrj@cindex listing control: paper size
6190*a9fa9459Szrj@cindex paper size, for listings
6191*a9fa9459SzrjUse this directive to declare the number of lines---and, optionally, the
6192*a9fa9459Szrjnumber of columns---to use for each page, when generating listings.
6193*a9fa9459Szrj
6194*a9fa9459SzrjIf you do not use @code{.psize}, listings use a default line-count
6195*a9fa9459Szrjof 60.  You may omit the comma and @var{columns} specification; the
6196*a9fa9459Szrjdefault width is 200 columns.
6197*a9fa9459Szrj
6198*a9fa9459Szrj@command{@value{AS}} generates formfeeds whenever the specified number of
6199*a9fa9459Szrjlines is exceeded (or whenever you explicitly request one, using
6200*a9fa9459Szrj@code{.eject}).
6201*a9fa9459Szrj
6202*a9fa9459SzrjIf you specify @var{lines} as @code{0}, no formfeeds are generated save
6203*a9fa9459Szrjthose explicitly specified with @code{.eject}.
6204*a9fa9459Szrj
6205*a9fa9459Szrj@node Purgem
6206*a9fa9459Szrj@section @code{.purgem @var{name}}
6207*a9fa9459Szrj
6208*a9fa9459Szrj@cindex @code{purgem} directive
6209*a9fa9459SzrjUndefine the macro @var{name}, so that later uses of the string will not be
6210*a9fa9459Szrjexpanded.  @xref{Macro}.
6211*a9fa9459Szrj
6212*a9fa9459Szrj@ifset ELF
6213*a9fa9459Szrj@node PushSection
6214*a9fa9459Szrj@section @code{.pushsection @var{name} [, @var{subsection}] [, "@var{flags}"[, @@@var{type}[,@var{arguments}]]]}
6215*a9fa9459Szrj
6216*a9fa9459Szrj@cindex @code{pushsection} directive
6217*a9fa9459Szrj@cindex Section Stack
6218*a9fa9459SzrjThis is one of the ELF section stack manipulation directives.  The others are
6219*a9fa9459Szrj@code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}),
6220*a9fa9459Szrj@code{.popsection} (@pxref{PopSection}), and @code{.previous}
6221*a9fa9459Szrj(@pxref{Previous}).
6222*a9fa9459Szrj
6223*a9fa9459SzrjThis directive pushes the current section (and subsection) onto the
6224*a9fa9459Szrjtop of the section stack, and then replaces the current section and
6225*a9fa9459Szrjsubsection with @code{name} and @code{subsection}. The optional
6226*a9fa9459Szrj@code{flags}, @code{type} and @code{arguments} are treated the same
6227*a9fa9459Szrjas in the @code{.section} (@pxref{Section}) directive.
6228*a9fa9459Szrj@end ifset
6229*a9fa9459Szrj
6230*a9fa9459Szrj@node Quad
6231*a9fa9459Szrj@section @code{.quad @var{bignums}}
6232*a9fa9459Szrj
6233*a9fa9459Szrj@cindex @code{quad} directive
6234*a9fa9459Szrj@code{.quad} expects zero or more bignums, separated by commas.  For
6235*a9fa9459Szrjeach bignum, it emits
6236*a9fa9459Szrj@ifclear bignum-16
6237*a9fa9459Szrjan 8-byte integer.  If the bignum won't fit in 8 bytes, it prints a
6238*a9fa9459Szrjwarning message; and just takes the lowest order 8 bytes of the bignum.
6239*a9fa9459Szrj@cindex eight-byte integer
6240*a9fa9459Szrj@cindex integer, 8-byte
6241*a9fa9459Szrj
6242*a9fa9459SzrjThe term ``quad'' comes from contexts in which a ``word'' is two bytes;
6243*a9fa9459Szrjhence @emph{quad}-word for 8 bytes.
6244*a9fa9459Szrj@end ifclear
6245*a9fa9459Szrj@ifset bignum-16
6246*a9fa9459Szrja 16-byte integer.  If the bignum won't fit in 16 bytes, it prints a
6247*a9fa9459Szrjwarning message; and just takes the lowest order 16 bytes of the bignum.
6248*a9fa9459Szrj@cindex sixteen-byte integer
6249*a9fa9459Szrj@cindex integer, 16-byte
6250*a9fa9459Szrj@end ifset
6251*a9fa9459Szrj
6252*a9fa9459Szrj@node Reloc
6253*a9fa9459Szrj@section @code{.reloc @var{offset}, @var{reloc_name}[, @var{expression}]}
6254*a9fa9459Szrj
6255*a9fa9459Szrj@cindex @code{reloc} directive
6256*a9fa9459SzrjGenerate a relocation at @var{offset} of type @var{reloc_name} with value
6257*a9fa9459Szrj@var{expression}.  If @var{offset} is a number, the relocation is generated in
6258*a9fa9459Szrjthe current section.  If @var{offset} is an expression that resolves to a
6259*a9fa9459Szrjsymbol plus offset, the relocation is generated in the given symbol's section.
6260*a9fa9459Szrj@var{expression}, if present, must resolve to a symbol plus addend or to an
6261*a9fa9459Szrjabsolute value, but note that not all targets support an addend.  e.g. ELF REL
6262*a9fa9459Szrjtargets such as i386 store an addend in the section contents rather than in the
6263*a9fa9459Szrjrelocation.  This low level interface does not support addends stored in the
6264*a9fa9459Szrjsection.
6265*a9fa9459Szrj
6266*a9fa9459Szrj@node Rept
6267*a9fa9459Szrj@section @code{.rept @var{count}}
6268*a9fa9459Szrj
6269*a9fa9459Szrj@cindex @code{rept} directive
6270*a9fa9459SzrjRepeat the sequence of lines between the @code{.rept} directive and the next
6271*a9fa9459Szrj@code{.endr} directive @var{count} times.
6272*a9fa9459Szrj
6273*a9fa9459SzrjFor example, assembling
6274*a9fa9459Szrj
6275*a9fa9459Szrj@example
6276*a9fa9459Szrj        .rept   3
6277*a9fa9459Szrj        .long   0
6278*a9fa9459Szrj        .endr
6279*a9fa9459Szrj@end example
6280*a9fa9459Szrj
6281*a9fa9459Szrjis equivalent to assembling
6282*a9fa9459Szrj
6283*a9fa9459Szrj@example
6284*a9fa9459Szrj        .long   0
6285*a9fa9459Szrj        .long   0
6286*a9fa9459Szrj        .long   0
6287*a9fa9459Szrj@end example
6288*a9fa9459Szrj
6289*a9fa9459Szrj@node Sbttl
6290*a9fa9459Szrj@section @code{.sbttl "@var{subheading}"}
6291*a9fa9459Szrj
6292*a9fa9459Szrj@cindex @code{sbttl} directive
6293*a9fa9459Szrj@cindex subtitles for listings
6294*a9fa9459Szrj@cindex listing control: subtitle
6295*a9fa9459SzrjUse @var{subheading} as the title (third line, immediately after the
6296*a9fa9459Szrjtitle line) when generating assembly listings.
6297*a9fa9459Szrj
6298*a9fa9459SzrjThis directive affects subsequent pages, as well as the current page if
6299*a9fa9459Szrjit appears within ten lines of the top of a page.
6300*a9fa9459Szrj
6301*a9fa9459Szrj@ifset COFF
6302*a9fa9459Szrj@node Scl
6303*a9fa9459Szrj@section @code{.scl @var{class}}
6304*a9fa9459Szrj
6305*a9fa9459Szrj@cindex @code{scl} directive
6306*a9fa9459Szrj@cindex symbol storage class (COFF)
6307*a9fa9459Szrj@cindex COFF symbol storage class
6308*a9fa9459SzrjSet the storage-class value for a symbol.  This directive may only be
6309*a9fa9459Szrjused inside a @code{.def}/@code{.endef} pair.  Storage class may flag
6310*a9fa9459Szrjwhether a symbol is static or external, or it may record further
6311*a9fa9459Szrjsymbolic debugging information.
6312*a9fa9459Szrj@ifset BOUT
6313*a9fa9459Szrj
6314*a9fa9459SzrjThe @samp{.scl} directive is primarily associated with COFF output; when
6315*a9fa9459Szrjconfigured to generate @code{b.out} output format, @command{@value{AS}}
6316*a9fa9459Szrjaccepts this directive but ignores it.
6317*a9fa9459Szrj@end ifset
6318*a9fa9459Szrj@end ifset
6319*a9fa9459Szrj
6320*a9fa9459Szrj@ifset COFF-ELF
6321*a9fa9459Szrj@node Section
6322*a9fa9459Szrj@section @code{.section @var{name}}
6323*a9fa9459Szrj
6324*a9fa9459Szrj@cindex named section
6325*a9fa9459SzrjUse the @code{.section} directive to assemble the following code into a section
6326*a9fa9459Szrjnamed @var{name}.
6327*a9fa9459Szrj
6328*a9fa9459SzrjThis directive is only supported for targets that actually support arbitrarily
6329*a9fa9459Szrjnamed sections; on @code{a.out} targets, for example, it is not accepted, even
6330*a9fa9459Szrjwith a standard @code{a.out} section name.
6331*a9fa9459Szrj
6332*a9fa9459Szrj@ifset COFF
6333*a9fa9459Szrj@ifset ELF
6334*a9fa9459Szrj@c only print the extra heading if both COFF and ELF are set
6335*a9fa9459Szrj@subheading COFF Version
6336*a9fa9459Szrj@end ifset
6337*a9fa9459Szrj
6338*a9fa9459Szrj@cindex @code{section} directive (COFF version)
6339*a9fa9459SzrjFor COFF targets, the @code{.section} directive is used in one of the following
6340*a9fa9459Szrjways:
6341*a9fa9459Szrj
6342*a9fa9459Szrj@smallexample
6343*a9fa9459Szrj.section @var{name}[, "@var{flags}"]
6344*a9fa9459Szrj.section @var{name}[, @var{subsection}]
6345*a9fa9459Szrj@end smallexample
6346*a9fa9459Szrj
6347*a9fa9459SzrjIf the optional argument is quoted, it is taken as flags to use for the
6348*a9fa9459Szrjsection.  Each flag is a single character.  The following flags are recognized:
6349*a9fa9459Szrj
6350*a9fa9459Szrj@table @code
6351*a9fa9459Szrj@item b
6352*a9fa9459Szrjbss section (uninitialized data)
6353*a9fa9459Szrj@item n
6354*a9fa9459Szrjsection is not loaded
6355*a9fa9459Szrj@item w
6356*a9fa9459Szrjwritable section
6357*a9fa9459Szrj@item d
6358*a9fa9459Szrjdata section
6359*a9fa9459Szrj@item e
6360*a9fa9459Szrjexclude section from linking
6361*a9fa9459Szrj@item r
6362*a9fa9459Szrjread-only section
6363*a9fa9459Szrj@item x
6364*a9fa9459Szrjexecutable section
6365*a9fa9459Szrj@item s
6366*a9fa9459Szrjshared section (meaningful for PE targets)
6367*a9fa9459Szrj@item a
6368*a9fa9459Szrjignored.  (For compatibility with the ELF version)
6369*a9fa9459Szrj@item y
6370*a9fa9459Szrjsection is not readable (meaningful for PE targets)
6371*a9fa9459Szrj@item 0-9
6372*a9fa9459Szrjsingle-digit power-of-two section alignment (GNU extension)
6373*a9fa9459Szrj@end table
6374*a9fa9459Szrj
6375*a9fa9459SzrjIf no flags are specified, the default flags depend upon the section name.  If
6376*a9fa9459Szrjthe section name is not recognized, the default will be for the section to be
6377*a9fa9459Szrjloaded and writable.  Note the @code{n} and @code{w} flags remove attributes
6378*a9fa9459Szrjfrom the section, rather than adding them, so if they are used on their own it
6379*a9fa9459Szrjwill be as if no flags had been specified at all.
6380*a9fa9459Szrj
6381*a9fa9459SzrjIf the optional argument to the @code{.section} directive is not quoted, it is
6382*a9fa9459Szrjtaken as a subsection number (@pxref{Sub-Sections}).
6383*a9fa9459Szrj@end ifset
6384*a9fa9459Szrj
6385*a9fa9459Szrj@ifset ELF
6386*a9fa9459Szrj@ifset COFF
6387*a9fa9459Szrj@c only print the extra heading if both COFF and ELF are set
6388*a9fa9459Szrj@subheading ELF Version
6389*a9fa9459Szrj@end ifset
6390*a9fa9459Szrj
6391*a9fa9459Szrj@cindex Section Stack
6392*a9fa9459SzrjThis is one of the ELF section stack manipulation directives.  The others are
6393*a9fa9459Szrj@code{.subsection} (@pxref{SubSection}), @code{.pushsection}
6394*a9fa9459Szrj(@pxref{PushSection}), @code{.popsection} (@pxref{PopSection}), and
6395*a9fa9459Szrj@code{.previous} (@pxref{Previous}).
6396*a9fa9459Szrj
6397*a9fa9459Szrj@cindex @code{section} directive (ELF version)
6398*a9fa9459SzrjFor ELF targets, the @code{.section} directive is used like this:
6399*a9fa9459Szrj
6400*a9fa9459Szrj@smallexample
6401*a9fa9459Szrj.section @var{name} [, "@var{flags}"[, @@@var{type}[,@var{flag_specific_arguments}]]]
6402*a9fa9459Szrj@end smallexample
6403*a9fa9459Szrj
6404*a9fa9459Szrj@anchor{Section Name Substitutions}
6405*a9fa9459Szrj@kindex --sectname-subst
6406*a9fa9459Szrj@cindex section name substitution
6407*a9fa9459SzrjIf the @samp{--sectname-subst} command-line option is provided, the @var{name}
6408*a9fa9459Szrjargument may contain a substitution sequence. Only @code{%S} is supported
6409*a9fa9459Szrjat the moment, and substitutes the current section name. For example:
6410*a9fa9459Szrj
6411*a9fa9459Szrj@smallexample
6412*a9fa9459Szrj.macro exception_code
6413*a9fa9459Szrj.section %S.exception
6414*a9fa9459Szrj[exception code here]
6415*a9fa9459Szrj.previous
6416*a9fa9459Szrj.endm
6417*a9fa9459Szrj
6418*a9fa9459Szrj.text
6419*a9fa9459Szrj[code]
6420*a9fa9459Szrjexception_code
6421*a9fa9459Szrj[...]
6422*a9fa9459Szrj
6423*a9fa9459Szrj.section .init
6424*a9fa9459Szrj[init code]
6425*a9fa9459Szrjexception_code
6426*a9fa9459Szrj[...]
6427*a9fa9459Szrj@end smallexample
6428*a9fa9459Szrj
6429*a9fa9459SzrjThe two @code{exception_code} invocations above would create the
6430*a9fa9459Szrj@code{.text.exception} and @code{.init.exception} sections respectively.
6431*a9fa9459SzrjThis is useful e.g. to discriminate between anciliary sections that are
6432*a9fa9459Szrjtied to setup code to be discarded after use from anciliary sections that
6433*a9fa9459Szrjneed to stay resident without having to define multiple @code{exception_code}
6434*a9fa9459Szrjmacros just for that purpose.
6435*a9fa9459Szrj
6436*a9fa9459SzrjThe optional @var{flags} argument is a quoted string which may contain any
6437*a9fa9459Szrjcombination of the following characters:
6438*a9fa9459Szrj
6439*a9fa9459Szrj@table @code
6440*a9fa9459Szrj@item a
6441*a9fa9459Szrjsection is allocatable
6442*a9fa9459Szrj@item e
6443*a9fa9459Szrjsection is excluded from executable and shared library.
6444*a9fa9459Szrj@item w
6445*a9fa9459Szrjsection is writable
6446*a9fa9459Szrj@item x
6447*a9fa9459Szrjsection is executable
6448*a9fa9459Szrj@item M
6449*a9fa9459Szrjsection is mergeable
6450*a9fa9459Szrj@item S
6451*a9fa9459Szrjsection contains zero terminated strings
6452*a9fa9459Szrj@item G
6453*a9fa9459Szrjsection is a member of a section group
6454*a9fa9459Szrj@item T
6455*a9fa9459Szrjsection is used for thread-local-storage
6456*a9fa9459Szrj@item ?
6457*a9fa9459Szrjsection is a member of the previously-current section's group, if any
6458*a9fa9459Szrj@item @code{<number>}
6459*a9fa9459Szrja numeric value indicating the bits to be set in the ELF section header's flags
6460*a9fa9459Szrjfield.  Note - if one or more of the alphabetic characters described above is
6461*a9fa9459Szrjalso included in the flags field, their bit values will be ORed into the
6462*a9fa9459Szrjresulting value.
6463*a9fa9459Szrj@item @code{<target specific>}
6464*a9fa9459Szrjsome targets extend this list with their own flag characters
6465*a9fa9459Szrj@end table
6466*a9fa9459Szrj
6467*a9fa9459SzrjNote - once a section's flags have been set they cannot be changed.  There are
6468*a9fa9459Szrja few exceptions to this rule however.  Processor and application specific
6469*a9fa9459Szrjflags can be added to an already defined section.  The @code{.interp},
6470*a9fa9459Szrj@code{.strtab} and @code{.symtab} sections can have the allocate flag
6471*a9fa9459Szrj(@code{a}) set after they are initially defined, and the @code{.note-GNU-stack}
6472*a9fa9459Szrjsection may have the executable (@code{x}) flag added.
6473*a9fa9459Szrj
6474*a9fa9459SzrjThe optional @var{type} argument may contain one of the following constants:
6475*a9fa9459Szrj
6476*a9fa9459Szrj@table @code
6477*a9fa9459Szrj@item @@progbits
6478*a9fa9459Szrjsection contains data
6479*a9fa9459Szrj@item @@nobits
6480*a9fa9459Szrjsection does not contain data (i.e., section only occupies space)
6481*a9fa9459Szrj@item @@note
6482*a9fa9459Szrjsection contains data which is used by things other than the program
6483*a9fa9459Szrj@item @@init_array
6484*a9fa9459Szrjsection contains an array of pointers to init functions
6485*a9fa9459Szrj@item @@fini_array
6486*a9fa9459Szrjsection contains an array of pointers to finish functions
6487*a9fa9459Szrj@item @@preinit_array
6488*a9fa9459Szrjsection contains an array of pointers to pre-init functions
6489*a9fa9459Szrj@item @@@code{<number>}
6490*a9fa9459Szrja numeric value to be set as the ELF section header's type field.
6491*a9fa9459Szrj@item @@@code{<target specific>}
6492*a9fa9459Szrjsome targets extend this list with their own types
6493*a9fa9459Szrj@end table
6494*a9fa9459Szrj
6495*a9fa9459SzrjMany targets only support the first three section types.  The type may be
6496*a9fa9459Szrjenclosed in double quotes if necessary.
6497*a9fa9459Szrj
6498*a9fa9459SzrjNote on targets where the @code{@@} character is the start of a comment (eg
6499*a9fa9459SzrjARM) then another character is used instead.  For example the ARM port uses the
6500*a9fa9459Szrj@code{%} character.
6501*a9fa9459Szrj
6502*a9fa9459SzrjNote - some sections, eg @code{.text} and @code{.data} are considered to be
6503*a9fa9459Szrjspecial and have fixed types.  Any attempt to declare them with a different
6504*a9fa9459Szrjtype will generate an error from the assembler.
6505*a9fa9459Szrj
6506*a9fa9459SzrjIf @var{flags} contains the @code{M} symbol then the @var{type} argument must
6507*a9fa9459Szrjbe specified as well as an extra argument---@var{entsize}---like this:
6508*a9fa9459Szrj
6509*a9fa9459Szrj@smallexample
6510*a9fa9459Szrj.section @var{name} , "@var{flags}"M, @@@var{type}, @var{entsize}
6511*a9fa9459Szrj@end smallexample
6512*a9fa9459Szrj
6513*a9fa9459SzrjSections with the @code{M} flag but not @code{S} flag must contain fixed size
6514*a9fa9459Szrjconstants, each @var{entsize} octets long. Sections with both @code{M} and
6515*a9fa9459Szrj@code{S} must contain zero terminated strings where each character is
6516*a9fa9459Szrj@var{entsize} bytes long. The linker may remove duplicates within sections with
6517*a9fa9459Szrjthe same name, same entity size and same flags.  @var{entsize} must be an
6518*a9fa9459Szrjabsolute expression.  For sections with both @code{M} and @code{S}, a string
6519*a9fa9459Szrjwhich is a suffix of a larger string is considered a duplicate.  Thus
6520*a9fa9459Szrj@code{"def"} will be merged with @code{"abcdef"};  A reference to the first
6521*a9fa9459Szrj@code{"def"} will be changed to a reference to @code{"abcdef"+3}.
6522*a9fa9459Szrj
6523*a9fa9459SzrjIf @var{flags} contains the @code{G} symbol then the @var{type} argument must
6524*a9fa9459Szrjbe present along with an additional field like this:
6525*a9fa9459Szrj
6526*a9fa9459Szrj@smallexample
6527*a9fa9459Szrj.section @var{name} , "@var{flags}"G, @@@var{type}, @var{GroupName}[, @var{linkage}]
6528*a9fa9459Szrj@end smallexample
6529*a9fa9459Szrj
6530*a9fa9459SzrjThe @var{GroupName} field specifies the name of the section group to which this
6531*a9fa9459Szrjparticular section belongs.  The optional linkage field can contain:
6532*a9fa9459Szrj
6533*a9fa9459Szrj@table @code
6534*a9fa9459Szrj@item comdat
6535*a9fa9459Szrjindicates that only one copy of this section should be retained
6536*a9fa9459Szrj@item .gnu.linkonce
6537*a9fa9459Szrjan alias for comdat
6538*a9fa9459Szrj@end table
6539*a9fa9459Szrj
6540*a9fa9459SzrjNote: if both the @var{M} and @var{G} flags are present then the fields for
6541*a9fa9459Szrjthe Merge flag should come first, like this:
6542*a9fa9459Szrj
6543*a9fa9459Szrj@smallexample
6544*a9fa9459Szrj.section @var{name} , "@var{flags}"MG, @@@var{type}, @var{entsize}, @var{GroupName}[, @var{linkage}]
6545*a9fa9459Szrj@end smallexample
6546*a9fa9459Szrj
6547*a9fa9459SzrjIf @var{flags} contains the @code{?} symbol then it may not also contain the
6548*a9fa9459Szrj@code{G} symbol and the @var{GroupName} or @var{linkage} fields should not be
6549*a9fa9459Szrjpresent.  Instead, @code{?} says to consider the section that's current before
6550*a9fa9459Szrjthis directive.  If that section used @code{G}, then the new section will use
6551*a9fa9459Szrj@code{G} with those same @var{GroupName} and @var{linkage} fields implicitly.
6552*a9fa9459SzrjIf not, then the @code{?} symbol has no effect.
6553*a9fa9459Szrj
6554*a9fa9459SzrjIf no flags are specified, the default flags depend upon the section name.  If
6555*a9fa9459Szrjthe section name is not recognized, the default will be for the section to have
6556*a9fa9459Szrjnone of the above flags: it will not be allocated in memory, nor writable, nor
6557*a9fa9459Szrjexecutable.  The section will contain data.
6558*a9fa9459Szrj
6559*a9fa9459SzrjFor ELF targets, the assembler supports another type of @code{.section}
6560*a9fa9459Szrjdirective for compatibility with the Solaris assembler:
6561*a9fa9459Szrj
6562*a9fa9459Szrj@smallexample
6563*a9fa9459Szrj.section "@var{name}"[, @var{flags}...]
6564*a9fa9459Szrj@end smallexample
6565*a9fa9459Szrj
6566*a9fa9459SzrjNote that the section name is quoted.  There may be a sequence of comma
6567*a9fa9459Szrjseparated flags:
6568*a9fa9459Szrj
6569*a9fa9459Szrj@table @code
6570*a9fa9459Szrj@item #alloc
6571*a9fa9459Szrjsection is allocatable
6572*a9fa9459Szrj@item #write
6573*a9fa9459Szrjsection is writable
6574*a9fa9459Szrj@item #execinstr
6575*a9fa9459Szrjsection is executable
6576*a9fa9459Szrj@item #exclude
6577*a9fa9459Szrjsection is excluded from executable and shared library.
6578*a9fa9459Szrj@item #tls
6579*a9fa9459Szrjsection is used for thread local storage
6580*a9fa9459Szrj@end table
6581*a9fa9459Szrj
6582*a9fa9459SzrjThis directive replaces the current section and subsection.  See the
6583*a9fa9459Szrjcontents of the gas testsuite directory @code{gas/testsuite/gas/elf} for
6584*a9fa9459Szrjsome examples of how this directive and the other section stack directives
6585*a9fa9459Szrjwork.
6586*a9fa9459Szrj@end ifset
6587*a9fa9459Szrj@end ifset
6588*a9fa9459Szrj
6589*a9fa9459Szrj@node Set
6590*a9fa9459Szrj@section @code{.set @var{symbol}, @var{expression}}
6591*a9fa9459Szrj
6592*a9fa9459Szrj@cindex @code{set} directive
6593*a9fa9459Szrj@cindex symbol value, setting
6594*a9fa9459SzrjSet the value of @var{symbol} to @var{expression}.  This
6595*a9fa9459Szrjchanges @var{symbol}'s value and type to conform to
6596*a9fa9459Szrj@var{expression}.  If @var{symbol} was flagged as external, it remains
6597*a9fa9459Szrjflagged (@pxref{Symbol Attributes}).
6598*a9fa9459Szrj
6599*a9fa9459SzrjYou may @code{.set} a symbol many times in the same assembly provided that the
6600*a9fa9459Szrjvalues given to the symbol are constants.  Values that are based on expressions
6601*a9fa9459Szrjinvolving other symbols are allowed, but some targets may restrict this to only
6602*a9fa9459Szrjbeing done once per assembly.  This is because those targets do not set the
6603*a9fa9459Szrjaddresses of symbols at assembly time, but rather delay the assignment until a
6604*a9fa9459Szrjfinal link is performed.  This allows the linker a chance to change the code in
6605*a9fa9459Szrjthe files, changing the location of, and the relative distance between, various
6606*a9fa9459Szrjdifferent symbols.
6607*a9fa9459Szrj
6608*a9fa9459SzrjIf you @code{.set} a global symbol, the value stored in the object
6609*a9fa9459Szrjfile is the last value stored into it.
6610*a9fa9459Szrj
6611*a9fa9459Szrj@ifset Z80
6612*a9fa9459SzrjOn Z80 @code{set} is a real instruction, use
6613*a9fa9459Szrj@samp{@var{symbol} defl @var{expression}} instead.
6614*a9fa9459Szrj@end ifset
6615*a9fa9459Szrj
6616*a9fa9459Szrj@node Short
6617*a9fa9459Szrj@section @code{.short @var{expressions}}
6618*a9fa9459Szrj
6619*a9fa9459Szrj@cindex @code{short} directive
6620*a9fa9459Szrj@ifset GENERIC
6621*a9fa9459Szrj@code{.short} is normally the same as @samp{.word}.
6622*a9fa9459Szrj@xref{Word,,@code{.word}}.
6623*a9fa9459Szrj
6624*a9fa9459SzrjIn some configurations, however, @code{.short} and @code{.word} generate
6625*a9fa9459Szrjnumbers of different lengths.  @xref{Machine Dependencies}.
6626*a9fa9459Szrj@end ifset
6627*a9fa9459Szrj@ifclear GENERIC
6628*a9fa9459Szrj@ifset W16
6629*a9fa9459Szrj@code{.short} is the same as @samp{.word}.  @xref{Word,,@code{.word}}.
6630*a9fa9459Szrj@end ifset
6631*a9fa9459Szrj@ifset W32
6632*a9fa9459SzrjThis expects zero or more @var{expressions}, and emits
6633*a9fa9459Szrja 16 bit number for each.
6634*a9fa9459Szrj@end ifset
6635*a9fa9459Szrj@end ifclear
6636*a9fa9459Szrj
6637*a9fa9459Szrj@node Single
6638*a9fa9459Szrj@section @code{.single @var{flonums}}
6639*a9fa9459Szrj
6640*a9fa9459Szrj@cindex @code{single} directive
6641*a9fa9459Szrj@cindex floating point numbers (single)
6642*a9fa9459SzrjThis directive assembles zero or more flonums, separated by commas.  It
6643*a9fa9459Szrjhas the same effect as @code{.float}.
6644*a9fa9459Szrj@ifset GENERIC
6645*a9fa9459SzrjThe exact kind of floating point numbers emitted depends on how
6646*a9fa9459Szrj@command{@value{AS}} is configured.  @xref{Machine Dependencies}.
6647*a9fa9459Szrj@end ifset
6648*a9fa9459Szrj@ifclear GENERIC
6649*a9fa9459Szrj@ifset IEEEFLOAT
6650*a9fa9459SzrjOn the @value{TARGET} family, @code{.single} emits 32-bit floating point
6651*a9fa9459Szrjnumbers in @sc{ieee} format.
6652*a9fa9459Szrj@end ifset
6653*a9fa9459Szrj@end ifclear
6654*a9fa9459Szrj
6655*a9fa9459Szrj@ifset COFF-ELF
6656*a9fa9459Szrj@node Size
6657*a9fa9459Szrj@section @code{.size}
6658*a9fa9459Szrj
6659*a9fa9459SzrjThis directive is used to set the size associated with a symbol.
6660*a9fa9459Szrj
6661*a9fa9459Szrj@ifset COFF
6662*a9fa9459Szrj@ifset ELF
6663*a9fa9459Szrj@c only print the extra heading if both COFF and ELF are set
6664*a9fa9459Szrj@subheading COFF Version
6665*a9fa9459Szrj@end ifset
6666*a9fa9459Szrj
6667*a9fa9459Szrj@cindex @code{size} directive (COFF version)
6668*a9fa9459SzrjFor COFF targets, the @code{.size} directive is only permitted inside
6669*a9fa9459Szrj@code{.def}/@code{.endef} pairs.  It is used like this:
6670*a9fa9459Szrj
6671*a9fa9459Szrj@smallexample
6672*a9fa9459Szrj.size @var{expression}
6673*a9fa9459Szrj@end smallexample
6674*a9fa9459Szrj
6675*a9fa9459Szrj@ifset BOUT
6676*a9fa9459Szrj@samp{.size} is only meaningful when generating COFF format output; when
6677*a9fa9459Szrj@command{@value{AS}} is generating @code{b.out}, it accepts this directive but
6678*a9fa9459Szrjignores it.
6679*a9fa9459Szrj@end ifset
6680*a9fa9459Szrj@end ifset
6681*a9fa9459Szrj
6682*a9fa9459Szrj@ifset ELF
6683*a9fa9459Szrj@ifset COFF
6684*a9fa9459Szrj@c only print the extra heading if both COFF and ELF are set
6685*a9fa9459Szrj@subheading ELF Version
6686*a9fa9459Szrj@end ifset
6687*a9fa9459Szrj
6688*a9fa9459Szrj@cindex @code{size} directive (ELF version)
6689*a9fa9459SzrjFor ELF targets, the @code{.size} directive is used like this:
6690*a9fa9459Szrj
6691*a9fa9459Szrj@smallexample
6692*a9fa9459Szrj.size @var{name} , @var{expression}
6693*a9fa9459Szrj@end smallexample
6694*a9fa9459Szrj
6695*a9fa9459SzrjThis directive sets the size associated with a symbol @var{name}.
6696*a9fa9459SzrjThe size in bytes is computed from @var{expression} which can make use of label
6697*a9fa9459Szrjarithmetic.  This directive is typically used to set the size of function
6698*a9fa9459Szrjsymbols.
6699*a9fa9459Szrj@end ifset
6700*a9fa9459Szrj@end ifset
6701*a9fa9459Szrj
6702*a9fa9459Szrj@ifclear no-space-dir
6703*a9fa9459Szrj@node Skip
6704*a9fa9459Szrj@section @code{.skip @var{size} , @var{fill}}
6705*a9fa9459Szrj
6706*a9fa9459Szrj@cindex @code{skip} directive
6707*a9fa9459Szrj@cindex filling memory
6708*a9fa9459SzrjThis directive emits @var{size} bytes, each of value @var{fill}.  Both
6709*a9fa9459Szrj@var{size} and @var{fill} are absolute expressions.  If the comma and
6710*a9fa9459Szrj@var{fill} are omitted, @var{fill} is assumed to be zero.  This is the same as
6711*a9fa9459Szrj@samp{.space}.
6712*a9fa9459Szrj@end ifclear
6713*a9fa9459Szrj
6714*a9fa9459Szrj@node Sleb128
6715*a9fa9459Szrj@section @code{.sleb128 @var{expressions}}
6716*a9fa9459Szrj
6717*a9fa9459Szrj@cindex @code{sleb128} directive
6718*a9fa9459Szrj@var{sleb128} stands for ``signed little endian base 128.''  This is a
6719*a9fa9459Szrjcompact, variable length representation of numbers used by the DWARF
6720*a9fa9459Szrjsymbolic debugging format.  @xref{Uleb128, ,@code{.uleb128}}.
6721*a9fa9459Szrj
6722*a9fa9459Szrj@ifclear no-space-dir
6723*a9fa9459Szrj@node Space
6724*a9fa9459Szrj@section @code{.space @var{size} , @var{fill}}
6725*a9fa9459Szrj
6726*a9fa9459Szrj@cindex @code{space} directive
6727*a9fa9459Szrj@cindex filling memory
6728*a9fa9459SzrjThis directive emits @var{size} bytes, each of value @var{fill}.  Both
6729*a9fa9459Szrj@var{size} and @var{fill} are absolute expressions.  If the comma
6730*a9fa9459Szrjand @var{fill} are omitted, @var{fill} is assumed to be zero.  This is the same
6731*a9fa9459Szrjas @samp{.skip}.
6732*a9fa9459Szrj
6733*a9fa9459Szrj@ifset HPPA
6734*a9fa9459Szrj@quotation
6735*a9fa9459Szrj@emph{Warning:} @code{.space} has a completely different meaning for HPPA
6736*a9fa9459Szrjtargets; use @code{.block} as a substitute.  See @cite{HP9000 Series 800
6737*a9fa9459SzrjAssembly Language Reference Manual} (HP 92432-90001) for the meaning of the
6738*a9fa9459Szrj@code{.space} directive.  @xref{HPPA Directives,,HPPA Assembler Directives},
6739*a9fa9459Szrjfor a summary.
6740*a9fa9459Szrj@end quotation
6741*a9fa9459Szrj@end ifset
6742*a9fa9459Szrj@end ifclear
6743*a9fa9459Szrj
6744*a9fa9459Szrj@ifset have-stabs
6745*a9fa9459Szrj@node Stab
6746*a9fa9459Szrj@section @code{.stabd, .stabn, .stabs}
6747*a9fa9459Szrj
6748*a9fa9459Szrj@cindex symbolic debuggers, information for
6749*a9fa9459Szrj@cindex @code{stab@var{x}} directives
6750*a9fa9459SzrjThere are three directives that begin @samp{.stab}.
6751*a9fa9459SzrjAll emit symbols (@pxref{Symbols}), for use by symbolic debuggers.
6752*a9fa9459SzrjThe symbols are not entered in the @command{@value{AS}} hash table: they
6753*a9fa9459Szrjcannot be referenced elsewhere in the source file.
6754*a9fa9459SzrjUp to five fields are required:
6755*a9fa9459Szrj
6756*a9fa9459Szrj@table @var
6757*a9fa9459Szrj@item string
6758*a9fa9459SzrjThis is the symbol's name.  It may contain any character except
6759*a9fa9459Szrj@samp{\000}, so is more general than ordinary symbol names.  Some
6760*a9fa9459Szrjdebuggers used to code arbitrarily complex structures into symbol names
6761*a9fa9459Szrjusing this field.
6762*a9fa9459Szrj
6763*a9fa9459Szrj@item type
6764*a9fa9459SzrjAn absolute expression.  The symbol's type is set to the low 8 bits of
6765*a9fa9459Szrjthis expression.  Any bit pattern is permitted, but @code{@value{LD}}
6766*a9fa9459Szrjand debuggers choke on silly bit patterns.
6767*a9fa9459Szrj
6768*a9fa9459Szrj@item other
6769*a9fa9459SzrjAn absolute expression.  The symbol's ``other'' attribute is set to the
6770*a9fa9459Szrjlow 8 bits of this expression.
6771*a9fa9459Szrj
6772*a9fa9459Szrj@item desc
6773*a9fa9459SzrjAn absolute expression.  The symbol's descriptor is set to the low 16
6774*a9fa9459Szrjbits of this expression.
6775*a9fa9459Szrj
6776*a9fa9459Szrj@item value
6777*a9fa9459SzrjAn absolute expression which becomes the symbol's value.
6778*a9fa9459Szrj@end table
6779*a9fa9459Szrj
6780*a9fa9459SzrjIf a warning is detected while reading a @code{.stabd}, @code{.stabn},
6781*a9fa9459Szrjor @code{.stabs} statement, the symbol has probably already been created;
6782*a9fa9459Szrjyou get a half-formed symbol in your object file.  This is
6783*a9fa9459Szrjcompatible with earlier assemblers!
6784*a9fa9459Szrj
6785*a9fa9459Szrj@table @code
6786*a9fa9459Szrj@cindex @code{stabd} directive
6787*a9fa9459Szrj@item .stabd @var{type} , @var{other} , @var{desc}
6788*a9fa9459Szrj
6789*a9fa9459SzrjThe ``name'' of the symbol generated is not even an empty string.
6790*a9fa9459SzrjIt is a null pointer, for compatibility.  Older assemblers used a
6791*a9fa9459Szrjnull pointer so they didn't waste space in object files with empty
6792*a9fa9459Szrjstrings.
6793*a9fa9459Szrj
6794*a9fa9459SzrjThe symbol's value is set to the location counter,
6795*a9fa9459Szrjrelocatably.  When your program is linked, the value of this symbol
6796*a9fa9459Szrjis the address of the location counter when the @code{.stabd} was
6797*a9fa9459Szrjassembled.
6798*a9fa9459Szrj
6799*a9fa9459Szrj@cindex @code{stabn} directive
6800*a9fa9459Szrj@item .stabn @var{type} , @var{other} , @var{desc} , @var{value}
6801*a9fa9459SzrjThe name of the symbol is set to the empty string @code{""}.
6802*a9fa9459Szrj
6803*a9fa9459Szrj@cindex @code{stabs} directive
6804*a9fa9459Szrj@item .stabs @var{string} ,  @var{type} , @var{other} , @var{desc} , @var{value}
6805*a9fa9459SzrjAll five fields are specified.
6806*a9fa9459Szrj@end table
6807*a9fa9459Szrj@end ifset
6808*a9fa9459Szrj@c end     have-stabs
6809*a9fa9459Szrj
6810*a9fa9459Szrj@node String
6811*a9fa9459Szrj@section @code{.string} "@var{str}", @code{.string8} "@var{str}", @code{.string16}
6812*a9fa9459Szrj"@var{str}", @code{.string32} "@var{str}", @code{.string64} "@var{str}"
6813*a9fa9459Szrj
6814*a9fa9459Szrj@cindex string, copying to object file
6815*a9fa9459Szrj@cindex string8, copying to object file
6816*a9fa9459Szrj@cindex string16, copying to object file
6817*a9fa9459Szrj@cindex string32, copying to object file
6818*a9fa9459Szrj@cindex string64, copying to object file
6819*a9fa9459Szrj@cindex @code{string} directive
6820*a9fa9459Szrj@cindex @code{string8} directive
6821*a9fa9459Szrj@cindex @code{string16} directive
6822*a9fa9459Szrj@cindex @code{string32} directive
6823*a9fa9459Szrj@cindex @code{string64} directive
6824*a9fa9459Szrj
6825*a9fa9459SzrjCopy the characters in @var{str} to the object file.  You may specify more than
6826*a9fa9459Szrjone string to copy, separated by commas.  Unless otherwise specified for a
6827*a9fa9459Szrjparticular machine, the assembler marks the end of each string with a 0 byte.
6828*a9fa9459SzrjYou can use any of the escape sequences described in @ref{Strings,,Strings}.
6829*a9fa9459Szrj
6830*a9fa9459SzrjThe variants @code{string16}, @code{string32} and @code{string64} differ from
6831*a9fa9459Szrjthe @code{string} pseudo opcode in that each 8-bit character from @var{str} is
6832*a9fa9459Szrjcopied and expanded to 16, 32 or 64 bits respectively.  The expanded characters
6833*a9fa9459Szrjare stored in target endianness byte order.
6834*a9fa9459Szrj
6835*a9fa9459SzrjExample:
6836*a9fa9459Szrj@smallexample
6837*a9fa9459Szrj	.string32 "BYE"
6838*a9fa9459Szrjexpands to:
6839*a9fa9459Szrj	.string   "B\0\0\0Y\0\0\0E\0\0\0"  /* On little endian targets.  */
6840*a9fa9459Szrj	.string   "\0\0\0B\0\0\0Y\0\0\0E"  /* On big endian targets.  */
6841*a9fa9459Szrj@end smallexample
6842*a9fa9459Szrj
6843*a9fa9459Szrj
6844*a9fa9459Szrj@node Struct
6845*a9fa9459Szrj@section @code{.struct @var{expression}}
6846*a9fa9459Szrj
6847*a9fa9459Szrj@cindex @code{struct} directive
6848*a9fa9459SzrjSwitch to the absolute section, and set the section offset to @var{expression},
6849*a9fa9459Szrjwhich must be an absolute expression.  You might use this as follows:
6850*a9fa9459Szrj@smallexample
6851*a9fa9459Szrj        .struct 0
6852*a9fa9459Szrjfield1:
6853*a9fa9459Szrj        .struct field1 + 4
6854*a9fa9459Szrjfield2:
6855*a9fa9459Szrj        .struct field2 + 4
6856*a9fa9459Szrjfield3:
6857*a9fa9459Szrj@end smallexample
6858*a9fa9459SzrjThis would define the symbol @code{field1} to have the value 0, the symbol
6859*a9fa9459Szrj@code{field2} to have the value 4, and the symbol @code{field3} to have the
6860*a9fa9459Szrjvalue 8.  Assembly would be left in the absolute section, and you would need to
6861*a9fa9459Szrjuse a @code{.section} directive of some sort to change to some other section
6862*a9fa9459Szrjbefore further assembly.
6863*a9fa9459Szrj
6864*a9fa9459Szrj@ifset ELF
6865*a9fa9459Szrj@node SubSection
6866*a9fa9459Szrj@section @code{.subsection @var{name}}
6867*a9fa9459Szrj
6868*a9fa9459Szrj@cindex @code{subsection} directive
6869*a9fa9459Szrj@cindex Section Stack
6870*a9fa9459SzrjThis is one of the ELF section stack manipulation directives.  The others are
6871*a9fa9459Szrj@code{.section} (@pxref{Section}), @code{.pushsection} (@pxref{PushSection}),
6872*a9fa9459Szrj@code{.popsection} (@pxref{PopSection}), and @code{.previous}
6873*a9fa9459Szrj(@pxref{Previous}).
6874*a9fa9459Szrj
6875*a9fa9459SzrjThis directive replaces the current subsection with @code{name}.  The current
6876*a9fa9459Szrjsection is not changed.  The replaced subsection is put onto the section stack
6877*a9fa9459Szrjin place of the then current top of stack subsection.
6878*a9fa9459Szrj@end ifset
6879*a9fa9459Szrj
6880*a9fa9459Szrj@ifset ELF
6881*a9fa9459Szrj@node Symver
6882*a9fa9459Szrj@section @code{.symver}
6883*a9fa9459Szrj@cindex @code{symver} directive
6884*a9fa9459Szrj@cindex symbol versioning
6885*a9fa9459Szrj@cindex versions of symbols
6886*a9fa9459SzrjUse the @code{.symver} directive to bind symbols to specific version nodes
6887*a9fa9459Szrjwithin a source file.  This is only supported on ELF platforms, and is
6888*a9fa9459Szrjtypically used when assembling files to be linked into a shared library.
6889*a9fa9459SzrjThere are cases where it may make sense to use this in objects to be bound
6890*a9fa9459Szrjinto an application itself so as to override a versioned symbol from a
6891*a9fa9459Szrjshared library.
6892*a9fa9459Szrj
6893*a9fa9459SzrjFor ELF targets, the @code{.symver} directive can be used like this:
6894*a9fa9459Szrj@smallexample
6895*a9fa9459Szrj.symver @var{name}, @var{name2@@nodename}
6896*a9fa9459Szrj@end smallexample
6897*a9fa9459SzrjIf the symbol @var{name} is defined within the file
6898*a9fa9459Szrjbeing assembled, the @code{.symver} directive effectively creates a symbol
6899*a9fa9459Szrjalias with the name @var{name2@@nodename}, and in fact the main reason that we
6900*a9fa9459Szrjjust don't try and create a regular alias is that the @var{@@} character isn't
6901*a9fa9459Szrjpermitted in symbol names.  The @var{name2} part of the name is the actual name
6902*a9fa9459Szrjof the symbol by which it will be externally referenced.  The name @var{name}
6903*a9fa9459Szrjitself is merely a name of convenience that is used so that it is possible to
6904*a9fa9459Szrjhave definitions for multiple versions of a function within a single source
6905*a9fa9459Szrjfile, and so that the compiler can unambiguously know which version of a
6906*a9fa9459Szrjfunction is being mentioned.  The @var{nodename} portion of the alias should be
6907*a9fa9459Szrjthe name of a node specified in the version script supplied to the linker when
6908*a9fa9459Szrjbuilding a shared library.  If you are attempting to override a versioned
6909*a9fa9459Szrjsymbol from a shared library, then @var{nodename} should correspond to the
6910*a9fa9459Szrjnodename of the symbol you are trying to override.
6911*a9fa9459Szrj
6912*a9fa9459SzrjIf the symbol @var{name} is not defined within the file being assembled, all
6913*a9fa9459Szrjreferences to @var{name} will be changed to @var{name2@@nodename}.  If no
6914*a9fa9459Szrjreference to @var{name} is made, @var{name2@@nodename} will be removed from the
6915*a9fa9459Szrjsymbol table.
6916*a9fa9459Szrj
6917*a9fa9459SzrjAnother usage of the @code{.symver} directive is:
6918*a9fa9459Szrj@smallexample
6919*a9fa9459Szrj.symver @var{name}, @var{name2@@@@nodename}
6920*a9fa9459Szrj@end smallexample
6921*a9fa9459SzrjIn this case, the symbol @var{name} must exist and be defined within
6922*a9fa9459Szrjthe file being assembled. It is similar to @var{name2@@nodename}. The
6923*a9fa9459Szrjdifference is @var{name2@@@@nodename} will also be used to resolve
6924*a9fa9459Szrjreferences to @var{name2} by the linker.
6925*a9fa9459Szrj
6926*a9fa9459SzrjThe third usage of the @code{.symver} directive is:
6927*a9fa9459Szrj@smallexample
6928*a9fa9459Szrj.symver @var{name}, @var{name2@@@@@@nodename}
6929*a9fa9459Szrj@end smallexample
6930*a9fa9459SzrjWhen @var{name} is not defined within the
6931*a9fa9459Szrjfile being assembled, it is treated as @var{name2@@nodename}. When
6932*a9fa9459Szrj@var{name} is defined within the file being assembled, the symbol
6933*a9fa9459Szrjname, @var{name}, will be changed to @var{name2@@@@nodename}.
6934*a9fa9459Szrj@end ifset
6935*a9fa9459Szrj
6936*a9fa9459Szrj@ifset COFF
6937*a9fa9459Szrj@node Tag
6938*a9fa9459Szrj@section @code{.tag @var{structname}}
6939*a9fa9459Szrj
6940*a9fa9459Szrj@cindex COFF structure debugging
6941*a9fa9459Szrj@cindex structure debugging, COFF
6942*a9fa9459Szrj@cindex @code{tag} directive
6943*a9fa9459SzrjThis directive is generated by compilers to include auxiliary debugging
6944*a9fa9459Szrjinformation in the symbol table.  It is only permitted inside
6945*a9fa9459Szrj@code{.def}/@code{.endef} pairs.  Tags are used to link structure
6946*a9fa9459Szrjdefinitions in the symbol table with instances of those structures.
6947*a9fa9459Szrj@ifset BOUT
6948*a9fa9459Szrj
6949*a9fa9459Szrj@samp{.tag} is only used when generating COFF format output; when
6950*a9fa9459Szrj@command{@value{AS}} is generating @code{b.out}, it accepts this directive but
6951*a9fa9459Szrjignores it.
6952*a9fa9459Szrj@end ifset
6953*a9fa9459Szrj@end ifset
6954*a9fa9459Szrj
6955*a9fa9459Szrj@node Text
6956*a9fa9459Szrj@section @code{.text @var{subsection}}
6957*a9fa9459Szrj
6958*a9fa9459Szrj@cindex @code{text} directive
6959*a9fa9459SzrjTells @command{@value{AS}} to assemble the following statements onto the end of
6960*a9fa9459Szrjthe text subsection numbered @var{subsection}, which is an absolute
6961*a9fa9459Szrjexpression.  If @var{subsection} is omitted, subsection number zero
6962*a9fa9459Szrjis used.
6963*a9fa9459Szrj
6964*a9fa9459Szrj@node Title
6965*a9fa9459Szrj@section @code{.title "@var{heading}"}
6966*a9fa9459Szrj
6967*a9fa9459Szrj@cindex @code{title} directive
6968*a9fa9459Szrj@cindex listing control: title line
6969*a9fa9459SzrjUse @var{heading} as the title (second line, immediately after the
6970*a9fa9459Szrjsource file name and pagenumber) when generating assembly listings.
6971*a9fa9459Szrj
6972*a9fa9459SzrjThis directive affects subsequent pages, as well as the current page if
6973*a9fa9459Szrjit appears within ten lines of the top of a page.
6974*a9fa9459Szrj
6975*a9fa9459Szrj@ifset COFF-ELF
6976*a9fa9459Szrj@node Type
6977*a9fa9459Szrj@section @code{.type}
6978*a9fa9459Szrj
6979*a9fa9459SzrjThis directive is used to set the type of a symbol.
6980*a9fa9459Szrj
6981*a9fa9459Szrj@ifset COFF
6982*a9fa9459Szrj@ifset ELF
6983*a9fa9459Szrj@c only print the extra heading if both COFF and ELF are set
6984*a9fa9459Szrj@subheading COFF Version
6985*a9fa9459Szrj@end ifset
6986*a9fa9459Szrj
6987*a9fa9459Szrj@cindex COFF symbol type
6988*a9fa9459Szrj@cindex symbol type, COFF
6989*a9fa9459Szrj@cindex @code{type} directive (COFF version)
6990*a9fa9459SzrjFor COFF targets, this directive is permitted only within
6991*a9fa9459Szrj@code{.def}/@code{.endef} pairs.  It is used like this:
6992*a9fa9459Szrj
6993*a9fa9459Szrj@smallexample
6994*a9fa9459Szrj.type @var{int}
6995*a9fa9459Szrj@end smallexample
6996*a9fa9459Szrj
6997*a9fa9459SzrjThis records the integer @var{int} as the type attribute of a symbol table
6998*a9fa9459Szrjentry.
6999*a9fa9459Szrj
7000*a9fa9459Szrj@ifset BOUT
7001*a9fa9459Szrj@samp{.type} is associated only with COFF format output; when
7002*a9fa9459Szrj@command{@value{AS}} is configured for @code{b.out} output, it accepts this
7003*a9fa9459Szrjdirective but ignores it.
7004*a9fa9459Szrj@end ifset
7005*a9fa9459Szrj@end ifset
7006*a9fa9459Szrj
7007*a9fa9459Szrj@ifset ELF
7008*a9fa9459Szrj@ifset COFF
7009*a9fa9459Szrj@c only print the extra heading if both COFF and ELF are set
7010*a9fa9459Szrj@subheading ELF Version
7011*a9fa9459Szrj@end ifset
7012*a9fa9459Szrj
7013*a9fa9459Szrj@cindex ELF symbol type
7014*a9fa9459Szrj@cindex symbol type, ELF
7015*a9fa9459Szrj@cindex @code{type} directive (ELF version)
7016*a9fa9459SzrjFor ELF targets, the @code{.type} directive is used like this:
7017*a9fa9459Szrj
7018*a9fa9459Szrj@smallexample
7019*a9fa9459Szrj.type @var{name} , @var{type description}
7020*a9fa9459Szrj@end smallexample
7021*a9fa9459Szrj
7022*a9fa9459SzrjThis sets the type of symbol @var{name} to be either a
7023*a9fa9459Szrjfunction symbol or an object symbol.  There are five different syntaxes
7024*a9fa9459Szrjsupported for the @var{type description} field, in order to provide
7025*a9fa9459Szrjcompatibility with various other assemblers.
7026*a9fa9459Szrj
7027*a9fa9459SzrjBecause some of the characters used in these syntaxes (such as @samp{@@} and
7028*a9fa9459Szrj@samp{#}) are comment characters for some architectures, some of the syntaxes
7029*a9fa9459Szrjbelow do not work on all architectures.  The first variant will be accepted by
7030*a9fa9459Szrjthe GNU assembler on all architectures so that variant should be used for
7031*a9fa9459Szrjmaximum portability, if you do not need to assemble your code with other
7032*a9fa9459Szrjassemblers.
7033*a9fa9459Szrj
7034*a9fa9459SzrjThe syntaxes supported are:
7035*a9fa9459Szrj
7036*a9fa9459Szrj@smallexample
7037*a9fa9459Szrj  .type <name> STT_<TYPE_IN_UPPER_CASE>
7038*a9fa9459Szrj  .type <name>,#<type>
7039*a9fa9459Szrj  .type <name>,@@<type>
7040*a9fa9459Szrj  .type <name>,%<type>
7041*a9fa9459Szrj  .type <name>,"<type>"
7042*a9fa9459Szrj@end smallexample
7043*a9fa9459Szrj
7044*a9fa9459SzrjThe types supported are:
7045*a9fa9459Szrj
7046*a9fa9459Szrj@table @gcctabopt
7047*a9fa9459Szrj@item STT_FUNC
7048*a9fa9459Szrj@itemx function
7049*a9fa9459SzrjMark the symbol as being a function name.
7050*a9fa9459Szrj
7051*a9fa9459Szrj@item STT_GNU_IFUNC
7052*a9fa9459Szrj@itemx gnu_indirect_function
7053*a9fa9459SzrjMark the symbol as an indirect function when evaluated during reloc
7054*a9fa9459Szrjprocessing.  (This is only supported on assemblers targeting GNU systems).
7055*a9fa9459Szrj
7056*a9fa9459Szrj@item STT_OBJECT
7057*a9fa9459Szrj@itemx object
7058*a9fa9459SzrjMark the symbol as being a data object.
7059*a9fa9459Szrj
7060*a9fa9459Szrj@item STT_TLS
7061*a9fa9459Szrj@itemx tls_object
7062*a9fa9459SzrjMark the symbol as being a thead-local data object.
7063*a9fa9459Szrj
7064*a9fa9459Szrj@item STT_COMMON
7065*a9fa9459Szrj@itemx common
7066*a9fa9459SzrjMark the symbol as being a common data object.
7067*a9fa9459Szrj
7068*a9fa9459Szrj@item STT_NOTYPE
7069*a9fa9459Szrj@itemx notype
7070*a9fa9459SzrjDoes not mark the symbol in any way.  It is supported just for completeness.
7071*a9fa9459Szrj
7072*a9fa9459Szrj@item gnu_unique_object
7073*a9fa9459SzrjMarks the symbol as being a globally unique data object.  The dynamic linker
7074*a9fa9459Szrjwill make sure that in the entire process there is just one symbol with this
7075*a9fa9459Szrjname and type in use.  (This is only supported on assemblers targeting GNU
7076*a9fa9459Szrjsystems).
7077*a9fa9459Szrj
7078*a9fa9459Szrj@end table
7079*a9fa9459Szrj
7080*a9fa9459SzrjNote: Some targets support extra types in addition to those listed above.
7081*a9fa9459Szrj
7082*a9fa9459Szrj@end ifset
7083*a9fa9459Szrj@end ifset
7084*a9fa9459Szrj
7085*a9fa9459Szrj@node Uleb128
7086*a9fa9459Szrj@section @code{.uleb128 @var{expressions}}
7087*a9fa9459Szrj
7088*a9fa9459Szrj@cindex @code{uleb128} directive
7089*a9fa9459Szrj@var{uleb128} stands for ``unsigned little endian base 128.''  This is a
7090*a9fa9459Szrjcompact, variable length representation of numbers used by the DWARF
7091*a9fa9459Szrjsymbolic debugging format.  @xref{Sleb128, ,@code{.sleb128}}.
7092*a9fa9459Szrj
7093*a9fa9459Szrj@ifset COFF
7094*a9fa9459Szrj@node Val
7095*a9fa9459Szrj@section @code{.val @var{addr}}
7096*a9fa9459Szrj
7097*a9fa9459Szrj@cindex @code{val} directive
7098*a9fa9459Szrj@cindex COFF value attribute
7099*a9fa9459Szrj@cindex value attribute, COFF
7100*a9fa9459SzrjThis directive, permitted only within @code{.def}/@code{.endef} pairs,
7101*a9fa9459Szrjrecords the address @var{addr} as the value attribute of a symbol table
7102*a9fa9459Szrjentry.
7103*a9fa9459Szrj@ifset BOUT
7104*a9fa9459Szrj
7105*a9fa9459Szrj@samp{.val} is used only for COFF output; when @command{@value{AS}} is
7106*a9fa9459Szrjconfigured for @code{b.out}, it accepts this directive but ignores it.
7107*a9fa9459Szrj@end ifset
7108*a9fa9459Szrj@end ifset
7109*a9fa9459Szrj
7110*a9fa9459Szrj@ifset ELF
7111*a9fa9459Szrj@node Version
7112*a9fa9459Szrj@section @code{.version "@var{string}"}
7113*a9fa9459Szrj
7114*a9fa9459Szrj@cindex @code{version} directive
7115*a9fa9459SzrjThis directive creates a @code{.note} section and places into it an ELF
7116*a9fa9459Szrjformatted note of type NT_VERSION.  The note's name is set to @code{string}.
7117*a9fa9459Szrj@end ifset
7118*a9fa9459Szrj
7119*a9fa9459Szrj@ifset ELF
7120*a9fa9459Szrj@node VTableEntry
7121*a9fa9459Szrj@section @code{.vtable_entry @var{table}, @var{offset}}
7122*a9fa9459Szrj
7123*a9fa9459Szrj@cindex @code{vtable_entry} directive
7124*a9fa9459SzrjThis directive finds or creates a symbol @code{table} and creates a
7125*a9fa9459Szrj@code{VTABLE_ENTRY} relocation for it with an addend of @code{offset}.
7126*a9fa9459Szrj
7127*a9fa9459Szrj@node VTableInherit
7128*a9fa9459Szrj@section @code{.vtable_inherit @var{child}, @var{parent}}
7129*a9fa9459Szrj
7130*a9fa9459Szrj@cindex @code{vtable_inherit} directive
7131*a9fa9459SzrjThis directive finds the symbol @code{child} and finds or creates the symbol
7132*a9fa9459Szrj@code{parent} and then creates a @code{VTABLE_INHERIT} relocation for the
7133*a9fa9459Szrjparent whose addend is the value of the child symbol.  As a special case the
7134*a9fa9459Szrjparent name of @code{0} is treated as referring to the @code{*ABS*} section.
7135*a9fa9459Szrj@end ifset
7136*a9fa9459Szrj
7137*a9fa9459Szrj@node Warning
7138*a9fa9459Szrj@section @code{.warning "@var{string}"}
7139*a9fa9459Szrj@cindex warning directive
7140*a9fa9459SzrjSimilar to the directive @code{.error}
7141*a9fa9459Szrj(@pxref{Error,,@code{.error "@var{string}"}}), but just emits a warning.
7142*a9fa9459Szrj
7143*a9fa9459Szrj@node Weak
7144*a9fa9459Szrj@section @code{.weak @var{names}}
7145*a9fa9459Szrj
7146*a9fa9459Szrj@cindex @code{weak} directive
7147*a9fa9459SzrjThis directive sets the weak attribute on the comma separated list of symbol
7148*a9fa9459Szrj@code{names}.  If the symbols do not already exist, they will be created.
7149*a9fa9459Szrj
7150*a9fa9459SzrjOn COFF targets other than PE, weak symbols are a GNU extension.  This
7151*a9fa9459Szrjdirective sets the weak attribute on the comma separated list of symbol
7152*a9fa9459Szrj@code{names}.  If the symbols do not already exist, they will be created.
7153*a9fa9459Szrj
7154*a9fa9459SzrjOn the PE target, weak symbols are supported natively as weak aliases.
7155*a9fa9459SzrjWhen a weak symbol is created that is not an alias, GAS creates an
7156*a9fa9459Szrjalternate symbol to hold the default value.
7157*a9fa9459Szrj
7158*a9fa9459Szrj@node Weakref
7159*a9fa9459Szrj@section @code{.weakref @var{alias}, @var{target}}
7160*a9fa9459Szrj
7161*a9fa9459Szrj@cindex @code{weakref} directive
7162*a9fa9459SzrjThis directive creates an alias to the target symbol that enables the symbol to
7163*a9fa9459Szrjbe referenced with weak-symbol semantics, but without actually making it weak.
7164*a9fa9459SzrjIf direct references or definitions of the symbol are present, then the symbol
7165*a9fa9459Szrjwill not be weak, but if all references to it are through weak references, the
7166*a9fa9459Szrjsymbol will be marked as weak in the symbol table.
7167*a9fa9459Szrj
7168*a9fa9459SzrjThe effect is equivalent to moving all references to the alias to a separate
7169*a9fa9459Szrjassembly source file, renaming the alias to the symbol in it, declaring the
7170*a9fa9459Szrjsymbol as weak there, and running a reloadable link to merge the object files
7171*a9fa9459Szrjresulting from the assembly of the new source file and the old source file that
7172*a9fa9459Szrjhad the references to the alias removed.
7173*a9fa9459Szrj
7174*a9fa9459SzrjThe alias itself never makes to the symbol table, and is entirely handled
7175*a9fa9459Szrjwithin the assembler.
7176*a9fa9459Szrj
7177*a9fa9459Szrj@node Word
7178*a9fa9459Szrj@section @code{.word @var{expressions}}
7179*a9fa9459Szrj
7180*a9fa9459Szrj@cindex @code{word} directive
7181*a9fa9459SzrjThis directive expects zero or more @var{expressions}, of any section,
7182*a9fa9459Szrjseparated by commas.
7183*a9fa9459Szrj@ifclear GENERIC
7184*a9fa9459Szrj@ifset W32
7185*a9fa9459SzrjFor each expression, @command{@value{AS}} emits a 32-bit number.
7186*a9fa9459Szrj@end ifset
7187*a9fa9459Szrj@ifset W16
7188*a9fa9459SzrjFor each expression, @command{@value{AS}} emits a 16-bit number.
7189*a9fa9459Szrj@end ifset
7190*a9fa9459Szrj@end ifclear
7191*a9fa9459Szrj@ifset GENERIC
7192*a9fa9459Szrj
7193*a9fa9459SzrjThe size of the number emitted, and its byte order,
7194*a9fa9459Szrjdepend on what target computer the assembly is for.
7195*a9fa9459Szrj@end ifset
7196*a9fa9459Szrj
7197*a9fa9459Szrj@c on amd29k, i960, sparc the "special treatment to support compilers" doesn't
7198*a9fa9459Szrj@c happen---32-bit addressability, period; no long/short jumps.
7199*a9fa9459Szrj@ifset DIFF-TBL-KLUGE
7200*a9fa9459Szrj@cindex difference tables altered
7201*a9fa9459Szrj@cindex altered difference tables
7202*a9fa9459Szrj@quotation
7203*a9fa9459Szrj@emph{Warning: Special Treatment to support Compilers}
7204*a9fa9459Szrj@end quotation
7205*a9fa9459Szrj
7206*a9fa9459Szrj@ifset GENERIC
7207*a9fa9459SzrjMachines with a 32-bit address space, but that do less than 32-bit
7208*a9fa9459Szrjaddressing, require the following special treatment.  If the machine of
7209*a9fa9459Szrjinterest to you does 32-bit addressing (or doesn't require it;
7210*a9fa9459Szrj@pxref{Machine Dependencies}), you can ignore this issue.
7211*a9fa9459Szrj
7212*a9fa9459Szrj@end ifset
7213*a9fa9459SzrjIn order to assemble compiler output into something that works,
7214*a9fa9459Szrj@command{@value{AS}} occasionally does strange things to @samp{.word} directives.
7215*a9fa9459SzrjDirectives of the form @samp{.word sym1-sym2} are often emitted by
7216*a9fa9459Szrjcompilers as part of jump tables.  Therefore, when @command{@value{AS}} assembles a
7217*a9fa9459Szrjdirective of the form @samp{.word sym1-sym2}, and the difference between
7218*a9fa9459Szrj@code{sym1} and @code{sym2} does not fit in 16 bits, @command{@value{AS}}
7219*a9fa9459Szrjcreates a @dfn{secondary jump table}, immediately before the next label.
7220*a9fa9459SzrjThis secondary jump table is preceded by a short-jump to the
7221*a9fa9459Szrjfirst byte after the secondary table.  This short-jump prevents the flow
7222*a9fa9459Szrjof control from accidentally falling into the new table.  Inside the
7223*a9fa9459Szrjtable is a long-jump to @code{sym2}.  The original @samp{.word}
7224*a9fa9459Szrjcontains @code{sym1} minus the address of the long-jump to
7225*a9fa9459Szrj@code{sym2}.
7226*a9fa9459Szrj
7227*a9fa9459SzrjIf there were several occurrences of @samp{.word sym1-sym2} before the
7228*a9fa9459Szrjsecondary jump table, all of them are adjusted.  If there was a
7229*a9fa9459Szrj@samp{.word sym3-sym4}, that also did not fit in sixteen bits, a
7230*a9fa9459Szrjlong-jump to @code{sym4} is included in the secondary jump table,
7231*a9fa9459Szrjand the @code{.word} directives are adjusted to contain @code{sym3}
7232*a9fa9459Szrjminus the address of the long-jump to @code{sym4}; and so on, for as many
7233*a9fa9459Szrjentries in the original jump table as necessary.
7234*a9fa9459Szrj
7235*a9fa9459Szrj@ifset INTERNALS
7236*a9fa9459Szrj@emph{This feature may be disabled by compiling @command{@value{AS}} with the
7237*a9fa9459Szrj@samp{-DWORKING_DOT_WORD} option.} This feature is likely to confuse
7238*a9fa9459Szrjassembly language programmers.
7239*a9fa9459Szrj@end ifset
7240*a9fa9459Szrj@end ifset
7241*a9fa9459Szrj@c end     DIFF-TBL-KLUGE
7242*a9fa9459Szrj
7243*a9fa9459Szrj@ifclear no-space-dir
7244*a9fa9459Szrj@node Zero
7245*a9fa9459Szrj@section @code{.zero @var{size}}
7246*a9fa9459Szrj
7247*a9fa9459Szrj@cindex @code{zero} directive
7248*a9fa9459Szrj@cindex filling memory with zero bytes
7249*a9fa9459SzrjThis directive emits @var{size} 0-valued bytes.  @var{size} must be an absolute
7250*a9fa9459Szrjexpression.  This directive is actually an alias for the @samp{.skip} directive
7251*a9fa9459Szrjso in can take an optional second argument of the value to store in the bytes
7252*a9fa9459Szrjinstead of zero.  Using @samp{.zero} in this way would be confusing however.
7253*a9fa9459Szrj@end ifclear
7254*a9fa9459Szrj
7255*a9fa9459Szrj@node Deprecated
7256*a9fa9459Szrj@section Deprecated Directives
7257*a9fa9459Szrj
7258*a9fa9459Szrj@cindex deprecated directives
7259*a9fa9459Szrj@cindex obsolescent directives
7260*a9fa9459SzrjOne day these directives won't work.
7261*a9fa9459SzrjThey are included for compatibility with older assemblers.
7262*a9fa9459Szrj@table @t
7263*a9fa9459Szrj@item .abort
7264*a9fa9459Szrj@item .line
7265*a9fa9459Szrj@end table
7266*a9fa9459Szrj
7267*a9fa9459Szrj@ifset ELF
7268*a9fa9459Szrj@node Object Attributes
7269*a9fa9459Szrj@chapter Object Attributes
7270*a9fa9459Szrj@cindex object attributes
7271*a9fa9459Szrj
7272*a9fa9459Szrj@command{@value{AS}} assembles source files written for a specific architecture
7273*a9fa9459Szrjinto object files for that architecture.  But not all object files are alike.
7274*a9fa9459SzrjMany architectures support incompatible variations.  For instance, floating
7275*a9fa9459Szrjpoint arguments might be passed in floating point registers if the object file
7276*a9fa9459Szrjrequires hardware floating point support---or floating point arguments might be
7277*a9fa9459Szrjpassed in integer registers if the object file supports processors with no
7278*a9fa9459Szrjhardware floating point unit.  Or, if two objects are built for different
7279*a9fa9459Szrjgenerations of the same architecture, the combination may require the
7280*a9fa9459Szrjnewer generation at run-time.
7281*a9fa9459Szrj
7282*a9fa9459SzrjThis information is useful during and after linking.  At link time,
7283*a9fa9459Szrj@command{@value{LD}} can warn about incompatible object files.  After link
7284*a9fa9459Szrjtime, tools like @command{gdb} can use it to process the linked file
7285*a9fa9459Szrjcorrectly.
7286*a9fa9459Szrj
7287*a9fa9459SzrjCompatibility information is recorded as a series of object attributes.  Each
7288*a9fa9459Szrjattribute has a @dfn{vendor}, @dfn{tag}, and @dfn{value}.  The vendor is a
7289*a9fa9459Szrjstring, and indicates who sets the meaning of the tag.  The tag is an integer,
7290*a9fa9459Szrjand indicates what property the attribute describes.  The value may be a string
7291*a9fa9459Szrjor an integer, and indicates how the property affects this object.  Missing
7292*a9fa9459Szrjattributes are the same as attributes with a zero value or empty string value.
7293*a9fa9459Szrj
7294*a9fa9459SzrjObject attributes were developed as part of the ABI for the ARM Architecture.
7295*a9fa9459SzrjThe file format is documented in @cite{ELF for the ARM Architecture}.
7296*a9fa9459Szrj
7297*a9fa9459Szrj@menu
7298*a9fa9459Szrj* GNU Object Attributes::               @sc{gnu} Object Attributes
7299*a9fa9459Szrj* Defining New Object Attributes::      Defining New Object Attributes
7300*a9fa9459Szrj@end menu
7301*a9fa9459Szrj
7302*a9fa9459Szrj@node GNU Object Attributes
7303*a9fa9459Szrj@section @sc{gnu} Object Attributes
7304*a9fa9459Szrj
7305*a9fa9459SzrjThe @code{.gnu_attribute} directive records an object attribute
7306*a9fa9459Szrjwith vendor @samp{gnu}.
7307*a9fa9459Szrj
7308*a9fa9459SzrjExcept for @samp{Tag_compatibility}, which has both an integer and a string for
7309*a9fa9459Szrjits value, @sc{gnu} attributes have a string value if the tag number is odd and
7310*a9fa9459Szrjan integer value if the tag number is even.  The second bit (@code{@var{tag} &
7311*a9fa9459Szrj2} is set for architecture-independent attributes and clear for
7312*a9fa9459Szrjarchitecture-dependent ones.
7313*a9fa9459Szrj
7314*a9fa9459Szrj@subsection Common @sc{gnu} attributes
7315*a9fa9459Szrj
7316*a9fa9459SzrjThese attributes are valid on all architectures.
7317*a9fa9459Szrj
7318*a9fa9459Szrj@table @r
7319*a9fa9459Szrj@item Tag_compatibility (32)
7320*a9fa9459SzrjThe compatibility attribute takes an integer flag value and a vendor name.  If
7321*a9fa9459Szrjthe flag value is 0, the file is compatible with other toolchains.  If it is 1,
7322*a9fa9459Szrjthen the file is only compatible with the named toolchain.  If it is greater
7323*a9fa9459Szrjthan 1, the file can only be processed by other toolchains under some private
7324*a9fa9459Szrjarrangement indicated by the flag value and the vendor name.
7325*a9fa9459Szrj@end table
7326*a9fa9459Szrj
7327*a9fa9459Szrj@subsection MIPS Attributes
7328*a9fa9459Szrj
7329*a9fa9459Szrj@table @r
7330*a9fa9459Szrj@item Tag_GNU_MIPS_ABI_FP (4)
7331*a9fa9459SzrjThe floating-point ABI used by this object file.  The value will be:
7332*a9fa9459Szrj
7333*a9fa9459Szrj@itemize @bullet
7334*a9fa9459Szrj@item
7335*a9fa9459Szrj0 for files not affected by the floating-point ABI.
7336*a9fa9459Szrj@item
7337*a9fa9459Szrj1 for files using the hardware floating-point ABI with a standard
7338*a9fa9459Szrjdouble-precision FPU.
7339*a9fa9459Szrj@item
7340*a9fa9459Szrj2 for files using the hardware floating-point ABI with a single-precision FPU.
7341*a9fa9459Szrj@item
7342*a9fa9459Szrj3 for files using the software floating-point ABI.
7343*a9fa9459Szrj@item
7344*a9fa9459Szrj4 for files using the deprecated hardware floating-point ABI which used 64-bit
7345*a9fa9459Szrjfloating-point registers, 32-bit general-purpose registers and increased the
7346*a9fa9459Szrjnumber of callee-saved floating-point registers.
7347*a9fa9459Szrj@item
7348*a9fa9459Szrj5 for files using the hardware floating-point ABI with a double-precision FPU
7349*a9fa9459Szrjwith either 32-bit or 64-bit floating-point registers and 32-bit
7350*a9fa9459Szrjgeneral-purpose registers.
7351*a9fa9459Szrj@item
7352*a9fa9459Szrj6 for files using the hardware floating-point ABI with 64-bit floating-point
7353*a9fa9459Szrjregisters and 32-bit general-purpose registers.
7354*a9fa9459Szrj@item
7355*a9fa9459Szrj7 for files using the hardware floating-point ABI with 64-bit floating-point
7356*a9fa9459Szrjregisters, 32-bit general-purpose registers and a rule that forbids the
7357*a9fa9459Szrjdirect use of odd-numbered single-precision floating-point registers.
7358*a9fa9459Szrj@end itemize
7359*a9fa9459Szrj@end table
7360*a9fa9459Szrj
7361*a9fa9459Szrj@subsection PowerPC Attributes
7362*a9fa9459Szrj
7363*a9fa9459Szrj@table @r
7364*a9fa9459Szrj@item Tag_GNU_Power_ABI_FP (4)
7365*a9fa9459SzrjThe floating-point ABI used by this object file.  The value will be:
7366*a9fa9459Szrj
7367*a9fa9459Szrj@itemize @bullet
7368*a9fa9459Szrj@item
7369*a9fa9459Szrj0 for files not affected by the floating-point ABI.
7370*a9fa9459Szrj@item
7371*a9fa9459Szrj1 for files using double-precision hardware floating-point ABI.
7372*a9fa9459Szrj@item
7373*a9fa9459Szrj2 for files using the software floating-point ABI.
7374*a9fa9459Szrj@item
7375*a9fa9459Szrj3 for files using single-precision hardware floating-point ABI.
7376*a9fa9459Szrj@end itemize
7377*a9fa9459Szrj
7378*a9fa9459Szrj@item Tag_GNU_Power_ABI_Vector (8)
7379*a9fa9459SzrjThe vector ABI used by this object file.  The value will be:
7380*a9fa9459Szrj
7381*a9fa9459Szrj@itemize @bullet
7382*a9fa9459Szrj@item
7383*a9fa9459Szrj0 for files not affected by the vector ABI.
7384*a9fa9459Szrj@item
7385*a9fa9459Szrj1 for files using general purpose registers to pass vectors.
7386*a9fa9459Szrj@item
7387*a9fa9459Szrj2 for files using AltiVec registers to pass vectors.
7388*a9fa9459Szrj@item
7389*a9fa9459Szrj3 for files using SPE registers to pass vectors.
7390*a9fa9459Szrj@end itemize
7391*a9fa9459Szrj@end table
7392*a9fa9459Szrj
7393*a9fa9459Szrj@subsection IBM z Systems Attributes
7394*a9fa9459Szrj
7395*a9fa9459Szrj@table @r
7396*a9fa9459Szrj@item Tag_GNU_S390_ABI_Vector (8)
7397*a9fa9459SzrjThe vector ABI used by this object file.  The value will be:
7398*a9fa9459Szrj
7399*a9fa9459Szrj@itemize @bullet
7400*a9fa9459Szrj@item
7401*a9fa9459Szrj0 for files not affected by the vector ABI.
7402*a9fa9459Szrj@item
7403*a9fa9459Szrj1 for files using software vector ABI.
7404*a9fa9459Szrj@item
7405*a9fa9459Szrj2 for files using hardware vector ABI.
7406*a9fa9459Szrj@end itemize
7407*a9fa9459Szrj@end table
7408*a9fa9459Szrj
7409*a9fa9459Szrj@node Defining New Object Attributes
7410*a9fa9459Szrj@section Defining New Object Attributes
7411*a9fa9459Szrj
7412*a9fa9459SzrjIf you want to define a new @sc{gnu} object attribute, here are the places you
7413*a9fa9459Szrjwill need to modify.  New attributes should be discussed on the @samp{binutils}
7414*a9fa9459Szrjmailing list.
7415*a9fa9459Szrj
7416*a9fa9459Szrj@itemize @bullet
7417*a9fa9459Szrj@item
7418*a9fa9459SzrjThis manual, which is the official register of attributes.
7419*a9fa9459Szrj@item
7420*a9fa9459SzrjThe header for your architecture @file{include/elf}, to define the tag.
7421*a9fa9459Szrj@item
7422*a9fa9459SzrjThe @file{bfd} support file for your architecture, to merge the attribute
7423*a9fa9459Szrjand issue any appropriate link warnings.
7424*a9fa9459Szrj@item
7425*a9fa9459SzrjTest cases in @file{ld/testsuite} for merging and link warnings.
7426*a9fa9459Szrj@item
7427*a9fa9459Szrj@file{binutils/readelf.c} to display your attribute.
7428*a9fa9459Szrj@item
7429*a9fa9459SzrjGCC, if you want the compiler to mark the attribute automatically.
7430*a9fa9459Szrj@end itemize
7431*a9fa9459Szrj
7432*a9fa9459Szrj@end ifset
7433*a9fa9459Szrj
7434*a9fa9459Szrj@ifset GENERIC
7435*a9fa9459Szrj@node Machine Dependencies
7436*a9fa9459Szrj@chapter Machine Dependent Features
7437*a9fa9459Szrj
7438*a9fa9459Szrj@cindex machine dependencies
7439*a9fa9459SzrjThe machine instruction sets are (almost by definition) different on
7440*a9fa9459Szrjeach machine where @command{@value{AS}} runs.  Floating point representations
7441*a9fa9459Szrjvary as well, and @command{@value{AS}} often supports a few additional
7442*a9fa9459Szrjdirectives or command-line options for compatibility with other
7443*a9fa9459Szrjassemblers on a particular platform.  Finally, some versions of
7444*a9fa9459Szrj@command{@value{AS}} support special pseudo-instructions for branch
7445*a9fa9459Szrjoptimization.
7446*a9fa9459Szrj
7447*a9fa9459SzrjThis chapter discusses most of these differences, though it does not
7448*a9fa9459Szrjinclude details on any machine's instruction set.  For details on that
7449*a9fa9459Szrjsubject, see the hardware manufacturer's manual.
7450*a9fa9459Szrj
7451*a9fa9459Szrj@menu
7452*a9fa9459Szrj@ifset AARCH64
7453*a9fa9459Szrj* AArch64-Dependent::		AArch64 Dependent Features
7454*a9fa9459Szrj@end ifset
7455*a9fa9459Szrj@ifset ALPHA
7456*a9fa9459Szrj* Alpha-Dependent::		Alpha Dependent Features
7457*a9fa9459Szrj@end ifset
7458*a9fa9459Szrj@ifset ARC
7459*a9fa9459Szrj* ARC-Dependent::               ARC Dependent Features
7460*a9fa9459Szrj@end ifset
7461*a9fa9459Szrj@ifset ARM
7462*a9fa9459Szrj* ARM-Dependent::               ARM Dependent Features
7463*a9fa9459Szrj@end ifset
7464*a9fa9459Szrj@ifset AVR
7465*a9fa9459Szrj* AVR-Dependent::               AVR Dependent Features
7466*a9fa9459Szrj@end ifset
7467*a9fa9459Szrj@ifset Blackfin
7468*a9fa9459Szrj* Blackfin-Dependent::		Blackfin Dependent Features
7469*a9fa9459Szrj@end ifset
7470*a9fa9459Szrj@ifset CR16
7471*a9fa9459Szrj* CR16-Dependent::              CR16 Dependent Features
7472*a9fa9459Szrj@end ifset
7473*a9fa9459Szrj@ifset CRIS
7474*a9fa9459Szrj* CRIS-Dependent::              CRIS Dependent Features
7475*a9fa9459Szrj@end ifset
7476*a9fa9459Szrj@ifset D10V
7477*a9fa9459Szrj* D10V-Dependent::              D10V Dependent Features
7478*a9fa9459Szrj@end ifset
7479*a9fa9459Szrj@ifset D30V
7480*a9fa9459Szrj* D30V-Dependent::              D30V Dependent Features
7481*a9fa9459Szrj@end ifset
7482*a9fa9459Szrj@ifset EPIPHANY
7483*a9fa9459Szrj* Epiphany-Dependent::          EPIPHANY Dependent Features
7484*a9fa9459Szrj@end ifset
7485*a9fa9459Szrj@ifset H8/300
7486*a9fa9459Szrj* H8/300-Dependent::            Renesas H8/300 Dependent Features
7487*a9fa9459Szrj@end ifset
7488*a9fa9459Szrj@ifset HPPA
7489*a9fa9459Szrj* HPPA-Dependent::              HPPA Dependent Features
7490*a9fa9459Szrj@end ifset
7491*a9fa9459Szrj@ifset I370
7492*a9fa9459Szrj* ESA/390-Dependent::           IBM ESA/390 Dependent Features
7493*a9fa9459Szrj@end ifset
7494*a9fa9459Szrj@ifset I80386
7495*a9fa9459Szrj* i386-Dependent::              Intel 80386 and AMD x86-64 Dependent Features
7496*a9fa9459Szrj@end ifset
7497*a9fa9459Szrj@ifset I860
7498*a9fa9459Szrj* i860-Dependent::              Intel 80860 Dependent Features
7499*a9fa9459Szrj@end ifset
7500*a9fa9459Szrj@ifset I960
7501*a9fa9459Szrj* i960-Dependent::              Intel 80960 Dependent Features
7502*a9fa9459Szrj@end ifset
7503*a9fa9459Szrj@ifset IA64
7504*a9fa9459Szrj* IA-64-Dependent::             Intel IA-64 Dependent Features
7505*a9fa9459Szrj@end ifset
7506*a9fa9459Szrj@ifset IP2K
7507*a9fa9459Szrj* IP2K-Dependent::              IP2K Dependent Features
7508*a9fa9459Szrj@end ifset
7509*a9fa9459Szrj@ifset LM32
7510*a9fa9459Szrj* LM32-Dependent::              LM32 Dependent Features
7511*a9fa9459Szrj@end ifset
7512*a9fa9459Szrj@ifset M32C
7513*a9fa9459Szrj* M32C-Dependent::              M32C Dependent Features
7514*a9fa9459Szrj@end ifset
7515*a9fa9459Szrj@ifset M32R
7516*a9fa9459Szrj* M32R-Dependent::              M32R Dependent Features
7517*a9fa9459Szrj@end ifset
7518*a9fa9459Szrj@ifset M680X0
7519*a9fa9459Szrj* M68K-Dependent::              M680x0 Dependent Features
7520*a9fa9459Szrj@end ifset
7521*a9fa9459Szrj@ifset M68HC11
7522*a9fa9459Szrj* M68HC11-Dependent::           M68HC11 and 68HC12 Dependent Features
7523*a9fa9459Szrj@end ifset
7524*a9fa9459Szrj@ifset METAG
7525*a9fa9459Szrj* Meta-Dependent ::             Meta Dependent Features
7526*a9fa9459Szrj@end ifset
7527*a9fa9459Szrj@ifset MICROBLAZE
7528*a9fa9459Szrj* MicroBlaze-Dependent::	MICROBLAZE Dependent Features
7529*a9fa9459Szrj@end ifset
7530*a9fa9459Szrj@ifset MIPS
7531*a9fa9459Szrj* MIPS-Dependent::              MIPS Dependent Features
7532*a9fa9459Szrj@end ifset
7533*a9fa9459Szrj@ifset MMIX
7534*a9fa9459Szrj* MMIX-Dependent::              MMIX Dependent Features
7535*a9fa9459Szrj@end ifset
7536*a9fa9459Szrj@ifset MSP430
7537*a9fa9459Szrj* MSP430-Dependent::		MSP430 Dependent Features
7538*a9fa9459Szrj@end ifset
7539*a9fa9459Szrj@ifset NDS32
7540*a9fa9459Szrj* NDS32-Dependent::             Andes NDS32 Dependent Features
7541*a9fa9459Szrj@end ifset
7542*a9fa9459Szrj@ifset NIOSII
7543*a9fa9459Szrj* NiosII-Dependent::            Altera Nios II Dependent Features
7544*a9fa9459Szrj@end ifset
7545*a9fa9459Szrj@ifset NS32K
7546*a9fa9459Szrj* NS32K-Dependent::		NS32K Dependent Features
7547*a9fa9459Szrj@end ifset
7548*a9fa9459Szrj@ifset PDP11
7549*a9fa9459Szrj* PDP-11-Dependent::            PDP-11 Dependent Features
7550*a9fa9459Szrj@end ifset
7551*a9fa9459Szrj@ifset PJ
7552*a9fa9459Szrj* PJ-Dependent::                picoJava Dependent Features
7553*a9fa9459Szrj@end ifset
7554*a9fa9459Szrj@ifset PPC
7555*a9fa9459Szrj* PPC-Dependent::               PowerPC Dependent Features
7556*a9fa9459Szrj@end ifset
7557*a9fa9459Szrj@ifset RL78
7558*a9fa9459Szrj* RL78-Dependent::              RL78 Dependent Features
7559*a9fa9459Szrj@end ifset
7560*a9fa9459Szrj@ifset RX
7561*a9fa9459Szrj* RX-Dependent::                RX Dependent Features
7562*a9fa9459Szrj@end ifset
7563*a9fa9459Szrj@ifset S390
7564*a9fa9459Szrj* S/390-Dependent::             IBM S/390 Dependent Features
7565*a9fa9459Szrj@end ifset
7566*a9fa9459Szrj@ifset SCORE
7567*a9fa9459Szrj* SCORE-Dependent::             SCORE Dependent Features
7568*a9fa9459Szrj@end ifset
7569*a9fa9459Szrj@ifset SH
7570*a9fa9459Szrj* SH-Dependent::                Renesas / SuperH SH Dependent Features
7571*a9fa9459Szrj* SH64-Dependent::              SuperH SH64 Dependent Features
7572*a9fa9459Szrj@end ifset
7573*a9fa9459Szrj@ifset SPARC
7574*a9fa9459Szrj* Sparc-Dependent::             SPARC Dependent Features
7575*a9fa9459Szrj@end ifset
7576*a9fa9459Szrj@ifset TIC54X
7577*a9fa9459Szrj* TIC54X-Dependent::            TI TMS320C54x Dependent Features
7578*a9fa9459Szrj@end ifset
7579*a9fa9459Szrj@ifset TIC6X
7580*a9fa9459Szrj* TIC6X-Dependent ::            TI TMS320C6x Dependent Features
7581*a9fa9459Szrj@end ifset
7582*a9fa9459Szrj@ifset TILEGX
7583*a9fa9459Szrj* TILE-Gx-Dependent ::          Tilera TILE-Gx Dependent Features
7584*a9fa9459Szrj@end ifset
7585*a9fa9459Szrj@ifset TILEPRO
7586*a9fa9459Szrj* TILEPro-Dependent ::          Tilera TILEPro Dependent Features
7587*a9fa9459Szrj@end ifset
7588*a9fa9459Szrj@ifset V850
7589*a9fa9459Szrj* V850-Dependent::              V850 Dependent Features
7590*a9fa9459Szrj@end ifset
7591*a9fa9459Szrj@ifset VAX
7592*a9fa9459Szrj* Vax-Dependent::               VAX Dependent Features
7593*a9fa9459Szrj@end ifset
7594*a9fa9459Szrj@ifset VISIUM
7595*a9fa9459Szrj* Visium-Dependent::            Visium Dependent Features
7596*a9fa9459Szrj@end ifset
7597*a9fa9459Szrj@ifset XGATE
7598*a9fa9459Szrj* XGATE-Dependent::             XGATE Features
7599*a9fa9459Szrj@end ifset
7600*a9fa9459Szrj@ifset XSTORMY16
7601*a9fa9459Szrj* XSTORMY16-Dependent::         XStormy16 Dependent Features
7602*a9fa9459Szrj@end ifset
7603*a9fa9459Szrj@ifset XTENSA
7604*a9fa9459Szrj* Xtensa-Dependent::            Xtensa Dependent Features
7605*a9fa9459Szrj@end ifset
7606*a9fa9459Szrj@ifset Z80
7607*a9fa9459Szrj* Z80-Dependent::               Z80 Dependent Features
7608*a9fa9459Szrj@end ifset
7609*a9fa9459Szrj@ifset Z8000
7610*a9fa9459Szrj* Z8000-Dependent::             Z8000 Dependent Features
7611*a9fa9459Szrj@end ifset
7612*a9fa9459Szrj@end menu
7613*a9fa9459Szrj
7614*a9fa9459Szrj@lowersections
7615*a9fa9459Szrj@end ifset
7616*a9fa9459Szrj
7617*a9fa9459Szrj@c The following major nodes are *sections* in the GENERIC version, *chapters*
7618*a9fa9459Szrj@c in single-cpu versions.  This is mainly achieved by @lowersections.  There is a
7619*a9fa9459Szrj@c peculiarity: to preserve cross-references, there must be a node called
7620*a9fa9459Szrj@c "Machine Dependencies".  Hence the conditional nodenames in each
7621*a9fa9459Szrj@c major node below.  Node defaulting in makeinfo requires adjacency of
7622*a9fa9459Szrj@c node and sectioning commands; hence the repetition of @chapter BLAH
7623*a9fa9459Szrj@c in both conditional blocks.
7624*a9fa9459Szrj
7625*a9fa9459Szrj@ifset AARCH64
7626*a9fa9459Szrj@include c-aarch64.texi
7627*a9fa9459Szrj@end ifset
7628*a9fa9459Szrj
7629*a9fa9459Szrj@ifset ALPHA
7630*a9fa9459Szrj@include c-alpha.texi
7631*a9fa9459Szrj@end ifset
7632*a9fa9459Szrj
7633*a9fa9459Szrj@ifset ARC
7634*a9fa9459Szrj@include c-arc.texi
7635*a9fa9459Szrj@end ifset
7636*a9fa9459Szrj
7637*a9fa9459Szrj@ifset ARM
7638*a9fa9459Szrj@include c-arm.texi
7639*a9fa9459Szrj@end ifset
7640*a9fa9459Szrj
7641*a9fa9459Szrj@ifset AVR
7642*a9fa9459Szrj@include c-avr.texi
7643*a9fa9459Szrj@end ifset
7644*a9fa9459Szrj
7645*a9fa9459Szrj@ifset Blackfin
7646*a9fa9459Szrj@include c-bfin.texi
7647*a9fa9459Szrj@end ifset
7648*a9fa9459Szrj
7649*a9fa9459Szrj@ifset CR16
7650*a9fa9459Szrj@include c-cr16.texi
7651*a9fa9459Szrj@end ifset
7652*a9fa9459Szrj
7653*a9fa9459Szrj@ifset CRIS
7654*a9fa9459Szrj@include c-cris.texi
7655*a9fa9459Szrj@end ifset
7656*a9fa9459Szrj
7657*a9fa9459Szrj@ifset Renesas-all
7658*a9fa9459Szrj@ifclear GENERIC
7659*a9fa9459Szrj@node Machine Dependencies
7660*a9fa9459Szrj@chapter Machine Dependent Features
7661*a9fa9459Szrj
7662*a9fa9459SzrjThe machine instruction sets are different on each Renesas chip family,
7663*a9fa9459Szrjand there are also some syntax differences among the families.  This
7664*a9fa9459Szrjchapter describes the specific @command{@value{AS}} features for each
7665*a9fa9459Szrjfamily.
7666*a9fa9459Szrj
7667*a9fa9459Szrj@menu
7668*a9fa9459Szrj* H8/300-Dependent::            Renesas H8/300 Dependent Features
7669*a9fa9459Szrj* SH-Dependent::                Renesas SH Dependent Features
7670*a9fa9459Szrj@end menu
7671*a9fa9459Szrj@lowersections
7672*a9fa9459Szrj@end ifclear
7673*a9fa9459Szrj@end ifset
7674*a9fa9459Szrj
7675*a9fa9459Szrj@ifset D10V
7676*a9fa9459Szrj@include c-d10v.texi
7677*a9fa9459Szrj@end ifset
7678*a9fa9459Szrj
7679*a9fa9459Szrj@ifset D30V
7680*a9fa9459Szrj@include c-d30v.texi
7681*a9fa9459Szrj@end ifset
7682*a9fa9459Szrj
7683*a9fa9459Szrj@ifset EPIPHANY
7684*a9fa9459Szrj@include c-epiphany.texi
7685*a9fa9459Szrj@end ifset
7686*a9fa9459Szrj
7687*a9fa9459Szrj@ifset H8/300
7688*a9fa9459Szrj@include c-h8300.texi
7689*a9fa9459Szrj@end ifset
7690*a9fa9459Szrj
7691*a9fa9459Szrj@ifset HPPA
7692*a9fa9459Szrj@include c-hppa.texi
7693*a9fa9459Szrj@end ifset
7694*a9fa9459Szrj
7695*a9fa9459Szrj@ifset I370
7696*a9fa9459Szrj@include c-i370.texi
7697*a9fa9459Szrj@end ifset
7698*a9fa9459Szrj
7699*a9fa9459Szrj@ifset I80386
7700*a9fa9459Szrj@include c-i386.texi
7701*a9fa9459Szrj@end ifset
7702*a9fa9459Szrj
7703*a9fa9459Szrj@ifset I860
7704*a9fa9459Szrj@include c-i860.texi
7705*a9fa9459Szrj@end ifset
7706*a9fa9459Szrj
7707*a9fa9459Szrj@ifset I960
7708*a9fa9459Szrj@include c-i960.texi
7709*a9fa9459Szrj@end ifset
7710*a9fa9459Szrj
7711*a9fa9459Szrj@ifset IA64
7712*a9fa9459Szrj@include c-ia64.texi
7713*a9fa9459Szrj@end ifset
7714*a9fa9459Szrj
7715*a9fa9459Szrj@ifset IP2K
7716*a9fa9459Szrj@include c-ip2k.texi
7717*a9fa9459Szrj@end ifset
7718*a9fa9459Szrj
7719*a9fa9459Szrj@ifset LM32
7720*a9fa9459Szrj@include c-lm32.texi
7721*a9fa9459Szrj@end ifset
7722*a9fa9459Szrj
7723*a9fa9459Szrj@ifset M32C
7724*a9fa9459Szrj@include c-m32c.texi
7725*a9fa9459Szrj@end ifset
7726*a9fa9459Szrj
7727*a9fa9459Szrj@ifset M32R
7728*a9fa9459Szrj@include c-m32r.texi
7729*a9fa9459Szrj@end ifset
7730*a9fa9459Szrj
7731*a9fa9459Szrj@ifset M680X0
7732*a9fa9459Szrj@include c-m68k.texi
7733*a9fa9459Szrj@end ifset
7734*a9fa9459Szrj
7735*a9fa9459Szrj@ifset M68HC11
7736*a9fa9459Szrj@include c-m68hc11.texi
7737*a9fa9459Szrj@end ifset
7738*a9fa9459Szrj
7739*a9fa9459Szrj@ifset METAG
7740*a9fa9459Szrj@include c-metag.texi
7741*a9fa9459Szrj@end ifset
7742*a9fa9459Szrj
7743*a9fa9459Szrj@ifset MICROBLAZE
7744*a9fa9459Szrj@include c-microblaze.texi
7745*a9fa9459Szrj@end ifset
7746*a9fa9459Szrj
7747*a9fa9459Szrj@ifset MIPS
7748*a9fa9459Szrj@include c-mips.texi
7749*a9fa9459Szrj@end ifset
7750*a9fa9459Szrj
7751*a9fa9459Szrj@ifset MMIX
7752*a9fa9459Szrj@include c-mmix.texi
7753*a9fa9459Szrj@end ifset
7754*a9fa9459Szrj
7755*a9fa9459Szrj@ifset MSP430
7756*a9fa9459Szrj@include c-msp430.texi
7757*a9fa9459Szrj@end ifset
7758*a9fa9459Szrj
7759*a9fa9459Szrj@ifset NDS32
7760*a9fa9459Szrj@include c-nds32.texi
7761*a9fa9459Szrj@end ifset
7762*a9fa9459Szrj
7763*a9fa9459Szrj@ifset NIOSII
7764*a9fa9459Szrj@include c-nios2.texi
7765*a9fa9459Szrj@end ifset
7766*a9fa9459Szrj
7767*a9fa9459Szrj@ifset NS32K
7768*a9fa9459Szrj@include c-ns32k.texi
7769*a9fa9459Szrj@end ifset
7770*a9fa9459Szrj
7771*a9fa9459Szrj@ifset PDP11
7772*a9fa9459Szrj@include c-pdp11.texi
7773*a9fa9459Szrj@end ifset
7774*a9fa9459Szrj
7775*a9fa9459Szrj@ifset PJ
7776*a9fa9459Szrj@include c-pj.texi
7777*a9fa9459Szrj@end ifset
7778*a9fa9459Szrj
7779*a9fa9459Szrj@ifset PPC
7780*a9fa9459Szrj@include c-ppc.texi
7781*a9fa9459Szrj@end ifset
7782*a9fa9459Szrj
7783*a9fa9459Szrj@ifset RL78
7784*a9fa9459Szrj@include c-rl78.texi
7785*a9fa9459Szrj@end ifset
7786*a9fa9459Szrj
7787*a9fa9459Szrj@ifset RX
7788*a9fa9459Szrj@include c-rx.texi
7789*a9fa9459Szrj@end ifset
7790*a9fa9459Szrj
7791*a9fa9459Szrj@ifset S390
7792*a9fa9459Szrj@include c-s390.texi
7793*a9fa9459Szrj@end ifset
7794*a9fa9459Szrj
7795*a9fa9459Szrj@ifset SCORE
7796*a9fa9459Szrj@include c-score.texi
7797*a9fa9459Szrj@end ifset
7798*a9fa9459Szrj
7799*a9fa9459Szrj@ifset SH
7800*a9fa9459Szrj@include c-sh.texi
7801*a9fa9459Szrj@include c-sh64.texi
7802*a9fa9459Szrj@end ifset
7803*a9fa9459Szrj
7804*a9fa9459Szrj@ifset SPARC
7805*a9fa9459Szrj@include c-sparc.texi
7806*a9fa9459Szrj@end ifset
7807*a9fa9459Szrj
7808*a9fa9459Szrj@ifset TIC54X
7809*a9fa9459Szrj@include c-tic54x.texi
7810*a9fa9459Szrj@end ifset
7811*a9fa9459Szrj
7812*a9fa9459Szrj@ifset TIC6X
7813*a9fa9459Szrj@include c-tic6x.texi
7814*a9fa9459Szrj@end ifset
7815*a9fa9459Szrj
7816*a9fa9459Szrj@ifset TILEGX
7817*a9fa9459Szrj@include c-tilegx.texi
7818*a9fa9459Szrj@end ifset
7819*a9fa9459Szrj
7820*a9fa9459Szrj@ifset TILEPRO
7821*a9fa9459Szrj@include c-tilepro.texi
7822*a9fa9459Szrj@end ifset
7823*a9fa9459Szrj
7824*a9fa9459Szrj@ifset V850
7825*a9fa9459Szrj@include c-v850.texi
7826*a9fa9459Szrj@end ifset
7827*a9fa9459Szrj
7828*a9fa9459Szrj@ifset VAX
7829*a9fa9459Szrj@include c-vax.texi
7830*a9fa9459Szrj@end ifset
7831*a9fa9459Szrj
7832*a9fa9459Szrj@ifset VISIUM
7833*a9fa9459Szrj@include c-visium.texi
7834*a9fa9459Szrj@end ifset
7835*a9fa9459Szrj
7836*a9fa9459Szrj@ifset XGATE
7837*a9fa9459Szrj@include c-xgate.texi
7838*a9fa9459Szrj@end ifset
7839*a9fa9459Szrj
7840*a9fa9459Szrj@ifset XSTORMY16
7841*a9fa9459Szrj@include c-xstormy16.texi
7842*a9fa9459Szrj@end ifset
7843*a9fa9459Szrj
7844*a9fa9459Szrj@ifset XTENSA
7845*a9fa9459Szrj@include c-xtensa.texi
7846*a9fa9459Szrj@end ifset
7847*a9fa9459Szrj
7848*a9fa9459Szrj@ifset Z80
7849*a9fa9459Szrj@include c-z80.texi
7850*a9fa9459Szrj@end ifset
7851*a9fa9459Szrj
7852*a9fa9459Szrj@ifset Z8000
7853*a9fa9459Szrj@include c-z8k.texi
7854*a9fa9459Szrj@end ifset
7855*a9fa9459Szrj
7856*a9fa9459Szrj@ifset GENERIC
7857*a9fa9459Szrj@c reverse effect of @down at top of generic Machine-Dep chapter
7858*a9fa9459Szrj@raisesections
7859*a9fa9459Szrj@end ifset
7860*a9fa9459Szrj
7861*a9fa9459Szrj@node Reporting Bugs
7862*a9fa9459Szrj@chapter Reporting Bugs
7863*a9fa9459Szrj@cindex bugs in assembler
7864*a9fa9459Szrj@cindex reporting bugs in assembler
7865*a9fa9459Szrj
7866*a9fa9459SzrjYour bug reports play an essential role in making @command{@value{AS}} reliable.
7867*a9fa9459Szrj
7868*a9fa9459SzrjReporting a bug may help you by bringing a solution to your problem, or it may
7869*a9fa9459Szrjnot.  But in any case the principal function of a bug report is to help the
7870*a9fa9459Szrjentire community by making the next version of @command{@value{AS}} work better.
7871*a9fa9459SzrjBug reports are your contribution to the maintenance of @command{@value{AS}}.
7872*a9fa9459Szrj
7873*a9fa9459SzrjIn order for a bug report to serve its purpose, you must include the
7874*a9fa9459Szrjinformation that enables us to fix the bug.
7875*a9fa9459Szrj
7876*a9fa9459Szrj@menu
7877*a9fa9459Szrj* Bug Criteria::                Have you found a bug?
7878*a9fa9459Szrj* Bug Reporting::               How to report bugs
7879*a9fa9459Szrj@end menu
7880*a9fa9459Szrj
7881*a9fa9459Szrj@node Bug Criteria
7882*a9fa9459Szrj@section Have You Found a Bug?
7883*a9fa9459Szrj@cindex bug criteria
7884*a9fa9459Szrj
7885*a9fa9459SzrjIf you are not sure whether you have found a bug, here are some guidelines:
7886*a9fa9459Szrj
7887*a9fa9459Szrj@itemize @bullet
7888*a9fa9459Szrj@cindex fatal signal
7889*a9fa9459Szrj@cindex assembler crash
7890*a9fa9459Szrj@cindex crash of assembler
7891*a9fa9459Szrj@item
7892*a9fa9459SzrjIf the assembler gets a fatal signal, for any input whatever, that is a
7893*a9fa9459Szrj@command{@value{AS}} bug.  Reliable assemblers never crash.
7894*a9fa9459Szrj
7895*a9fa9459Szrj@cindex error on valid input
7896*a9fa9459Szrj@item
7897*a9fa9459SzrjIf @command{@value{AS}} produces an error message for valid input, that is a bug.
7898*a9fa9459Szrj
7899*a9fa9459Szrj@cindex invalid input
7900*a9fa9459Szrj@item
7901*a9fa9459SzrjIf @command{@value{AS}} does not produce an error message for invalid input, that
7902*a9fa9459Szrjis a bug.  However, you should note that your idea of ``invalid input'' might
7903*a9fa9459Szrjbe our idea of ``an extension'' or ``support for traditional practice''.
7904*a9fa9459Szrj
7905*a9fa9459Szrj@item
7906*a9fa9459SzrjIf you are an experienced user of assemblers, your suggestions for improvement
7907*a9fa9459Szrjof @command{@value{AS}} are welcome in any case.
7908*a9fa9459Szrj@end itemize
7909*a9fa9459Szrj
7910*a9fa9459Szrj@node Bug Reporting
7911*a9fa9459Szrj@section How to Report Bugs
7912*a9fa9459Szrj@cindex bug reports
7913*a9fa9459Szrj@cindex assembler bugs, reporting
7914*a9fa9459Szrj
7915*a9fa9459SzrjA number of companies and individuals offer support for @sc{gnu} products.  If
7916*a9fa9459Szrjyou obtained @command{@value{AS}} from a support organization, we recommend you
7917*a9fa9459Szrjcontact that organization first.
7918*a9fa9459Szrj
7919*a9fa9459SzrjYou can find contact information for many support companies and
7920*a9fa9459Szrjindividuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
7921*a9fa9459Szrjdistribution.
7922*a9fa9459Szrj
7923*a9fa9459Szrj@ifset BUGURL
7924*a9fa9459SzrjIn any event, we also recommend that you send bug reports for @command{@value{AS}}
7925*a9fa9459Szrjto @value{BUGURL}.
7926*a9fa9459Szrj@end ifset
7927*a9fa9459Szrj
7928*a9fa9459SzrjThe fundamental principle of reporting bugs usefully is this:
7929*a9fa9459Szrj@strong{report all the facts}.  If you are not sure whether to state a
7930*a9fa9459Szrjfact or leave it out, state it!
7931*a9fa9459Szrj
7932*a9fa9459SzrjOften people omit facts because they think they know what causes the problem
7933*a9fa9459Szrjand assume that some details do not matter.  Thus, you might assume that the
7934*a9fa9459Szrjname of a symbol you use in an example does not matter.  Well, probably it does
7935*a9fa9459Szrjnot, but one cannot be sure.  Perhaps the bug is a stray memory reference which
7936*a9fa9459Szrjhappens to fetch from the location where that name is stored in memory;
7937*a9fa9459Szrjperhaps, if the name were different, the contents of that location would fool
7938*a9fa9459Szrjthe assembler into doing the right thing despite the bug.  Play it safe and
7939*a9fa9459Szrjgive a specific, complete example.  That is the easiest thing for you to do,
7940*a9fa9459Szrjand the most helpful.
7941*a9fa9459Szrj
7942*a9fa9459SzrjKeep in mind that the purpose of a bug report is to enable us to fix the bug if
7943*a9fa9459Szrjit is new to us.  Therefore, always write your bug reports on the assumption
7944*a9fa9459Szrjthat the bug has not been reported previously.
7945*a9fa9459Szrj
7946*a9fa9459SzrjSometimes people give a few sketchy facts and ask, ``Does this ring a
7947*a9fa9459Szrjbell?''  This cannot help us fix a bug, so it is basically useless.  We
7948*a9fa9459Szrjrespond by asking for enough details to enable us to investigate.
7949*a9fa9459SzrjYou might as well expedite matters by sending them to begin with.
7950*a9fa9459Szrj
7951*a9fa9459SzrjTo enable us to fix the bug, you should include all these things:
7952*a9fa9459Szrj
7953*a9fa9459Szrj@itemize @bullet
7954*a9fa9459Szrj@item
7955*a9fa9459SzrjThe version of @command{@value{AS}}.  @command{@value{AS}} announces it if you start
7956*a9fa9459Szrjit with the @samp{--version} argument.
7957*a9fa9459Szrj
7958*a9fa9459SzrjWithout this, we will not know whether there is any point in looking for
7959*a9fa9459Szrjthe bug in the current version of @command{@value{AS}}.
7960*a9fa9459Szrj
7961*a9fa9459Szrj@item
7962*a9fa9459SzrjAny patches you may have applied to the @command{@value{AS}} source.
7963*a9fa9459Szrj
7964*a9fa9459Szrj@item
7965*a9fa9459SzrjThe type of machine you are using, and the operating system name and
7966*a9fa9459Szrjversion number.
7967*a9fa9459Szrj
7968*a9fa9459Szrj@item
7969*a9fa9459SzrjWhat compiler (and its version) was used to compile @command{@value{AS}}---e.g.
7970*a9fa9459Szrj``@code{gcc-2.7}''.
7971*a9fa9459Szrj
7972*a9fa9459Szrj@item
7973*a9fa9459SzrjThe command arguments you gave the assembler to assemble your example and
7974*a9fa9459Szrjobserve the bug.  To guarantee you will not omit something important, list them
7975*a9fa9459Szrjall.  A copy of the Makefile (or the output from make) is sufficient.
7976*a9fa9459Szrj
7977*a9fa9459SzrjIf we were to try to guess the arguments, we would probably guess wrong
7978*a9fa9459Szrjand then we might not encounter the bug.
7979*a9fa9459Szrj
7980*a9fa9459Szrj@item
7981*a9fa9459SzrjA complete input file that will reproduce the bug.  If the bug is observed when
7982*a9fa9459Szrjthe assembler is invoked via a compiler, send the assembler source, not the
7983*a9fa9459Szrjhigh level language source.  Most compilers will produce the assembler source
7984*a9fa9459Szrjwhen run with the @samp{-S} option.  If you are using @code{@value{GCC}}, use
7985*a9fa9459Szrjthe options @samp{-v --save-temps}; this will save the assembler source in a
7986*a9fa9459Szrjfile with an extension of @file{.s}, and also show you exactly how
7987*a9fa9459Szrj@command{@value{AS}} is being run.
7988*a9fa9459Szrj
7989*a9fa9459Szrj@item
7990*a9fa9459SzrjA description of what behavior you observe that you believe is
7991*a9fa9459Szrjincorrect.  For example, ``It gets a fatal signal.''
7992*a9fa9459Szrj
7993*a9fa9459SzrjOf course, if the bug is that @command{@value{AS}} gets a fatal signal, then we
7994*a9fa9459Szrjwill certainly notice it.  But if the bug is incorrect output, we might not
7995*a9fa9459Szrjnotice unless it is glaringly wrong.  You might as well not give us a chance to
7996*a9fa9459Szrjmake a mistake.
7997*a9fa9459Szrj
7998*a9fa9459SzrjEven if the problem you experience is a fatal signal, you should still say so
7999*a9fa9459Szrjexplicitly.  Suppose something strange is going on, such as, your copy of
8000*a9fa9459Szrj@command{@value{AS}} is out of sync, or you have encountered a bug in the C
8001*a9fa9459Szrjlibrary on your system.  (This has happened!)  Your copy might crash and ours
8002*a9fa9459Szrjwould not.  If you told us to expect a crash, then when ours fails to crash, we
8003*a9fa9459Szrjwould know that the bug was not happening for us.  If you had not told us to
8004*a9fa9459Szrjexpect a crash, then we would not be able to draw any conclusion from our
8005*a9fa9459Szrjobservations.
8006*a9fa9459Szrj
8007*a9fa9459Szrj@item
8008*a9fa9459SzrjIf you wish to suggest changes to the @command{@value{AS}} source, send us context
8009*a9fa9459Szrjdiffs, as generated by @code{diff} with the @samp{-u}, @samp{-c}, or @samp{-p}
8010*a9fa9459Szrjoption.  Always send diffs from the old file to the new file.  If you even
8011*a9fa9459Szrjdiscuss something in the @command{@value{AS}} source, refer to it by context, not
8012*a9fa9459Szrjby line number.
8013*a9fa9459Szrj
8014*a9fa9459SzrjThe line numbers in our development sources will not match those in your
8015*a9fa9459Szrjsources.  Your line numbers would convey no useful information to us.
8016*a9fa9459Szrj@end itemize
8017*a9fa9459Szrj
8018*a9fa9459SzrjHere are some things that are not necessary:
8019*a9fa9459Szrj
8020*a9fa9459Szrj@itemize @bullet
8021*a9fa9459Szrj@item
8022*a9fa9459SzrjA description of the envelope of the bug.
8023*a9fa9459Szrj
8024*a9fa9459SzrjOften people who encounter a bug spend a lot of time investigating
8025*a9fa9459Szrjwhich changes to the input file will make the bug go away and which
8026*a9fa9459Szrjchanges will not affect it.
8027*a9fa9459Szrj
8028*a9fa9459SzrjThis is often time consuming and not very useful, because the way we
8029*a9fa9459Szrjwill find the bug is by running a single example under the debugger
8030*a9fa9459Szrjwith breakpoints, not by pure deduction from a series of examples.
8031*a9fa9459SzrjWe recommend that you save your time for something else.
8032*a9fa9459Szrj
8033*a9fa9459SzrjOf course, if you can find a simpler example to report @emph{instead}
8034*a9fa9459Szrjof the original one, that is a convenience for us.  Errors in the
8035*a9fa9459Szrjoutput will be easier to spot, running under the debugger will take
8036*a9fa9459Szrjless time, and so on.
8037*a9fa9459Szrj
8038*a9fa9459SzrjHowever, simplification is not vital; if you do not want to do this,
8039*a9fa9459Szrjreport the bug anyway and send us the entire test case you used.
8040*a9fa9459Szrj
8041*a9fa9459Szrj@item
8042*a9fa9459SzrjA patch for the bug.
8043*a9fa9459Szrj
8044*a9fa9459SzrjA patch for the bug does help us if it is a good one.  But do not omit
8045*a9fa9459Szrjthe necessary information, such as the test case, on the assumption that
8046*a9fa9459Szrja patch is all we need.  We might see problems with your patch and decide
8047*a9fa9459Szrjto fix the problem another way, or we might not understand it at all.
8048*a9fa9459Szrj
8049*a9fa9459SzrjSometimes with a program as complicated as @command{@value{AS}} it is very hard to
8050*a9fa9459Szrjconstruct an example that will make the program follow a certain path through
8051*a9fa9459Szrjthe code.  If you do not send us the example, we will not be able to construct
8052*a9fa9459Szrjone, so we will not be able to verify that the bug is fixed.
8053*a9fa9459Szrj
8054*a9fa9459SzrjAnd if we cannot understand what bug you are trying to fix, or why your
8055*a9fa9459Szrjpatch should be an improvement, we will not install it.  A test case will
8056*a9fa9459Szrjhelp us to understand.
8057*a9fa9459Szrj
8058*a9fa9459Szrj@item
8059*a9fa9459SzrjA guess about what the bug is or what it depends on.
8060*a9fa9459Szrj
8061*a9fa9459SzrjSuch guesses are usually wrong.  Even we cannot guess right about such
8062*a9fa9459Szrjthings without first using the debugger to find the facts.
8063*a9fa9459Szrj@end itemize
8064*a9fa9459Szrj
8065*a9fa9459Szrj@node Acknowledgements
8066*a9fa9459Szrj@chapter Acknowledgements
8067*a9fa9459Szrj
8068*a9fa9459SzrjIf you have contributed to GAS and your name isn't listed here,
8069*a9fa9459Szrjit is not meant as a slight.  We just don't know about it.  Send mail to the
8070*a9fa9459Szrjmaintainer, and we'll correct the situation.  Currently
8071*a9fa9459Szrj@c (October 2012),
8072*a9fa9459Szrjthe maintainer is Nick Clifton (email address @code{nickc@@redhat.com}).
8073*a9fa9459Szrj
8074*a9fa9459SzrjDean Elsner wrote the original @sc{gnu} assembler for the VAX.@footnote{Any
8075*a9fa9459Szrjmore details?}
8076*a9fa9459Szrj
8077*a9fa9459SzrjJay Fenlason maintained GAS for a while, adding support for GDB-specific debug
8078*a9fa9459Szrjinformation and the 68k series machines, most of the preprocessing pass, and
8079*a9fa9459Szrjextensive changes in @file{messages.c}, @file{input-file.c}, @file{write.c}.
8080*a9fa9459Szrj
8081*a9fa9459SzrjK. Richard Pixley maintained GAS for a while, adding various enhancements and
8082*a9fa9459Szrjmany bug fixes, including merging support for several processors, breaking GAS
8083*a9fa9459Szrjup to handle multiple object file format back ends (including heavy rewrite,
8084*a9fa9459Szrjtesting, an integration of the coff and b.out back ends), adding configuration
8085*a9fa9459Szrjincluding heavy testing and verification of cross assemblers and file splits
8086*a9fa9459Szrjand renaming, converted GAS to strictly ANSI C including full prototypes, added
8087*a9fa9459Szrjsupport for m680[34]0 and cpu32, did considerable work on i960 including a COFF
8088*a9fa9459Szrjport (including considerable amounts of reverse engineering), a SPARC opcode
8089*a9fa9459Szrjfile rewrite, DECstation, rs6000, and hp300hpux host ports, updated ``know''
8090*a9fa9459Szrjassertions and made them work, much other reorganization, cleanup, and lint.
8091*a9fa9459Szrj
8092*a9fa9459SzrjKen Raeburn wrote the high-level BFD interface code to replace most of the code
8093*a9fa9459Szrjin format-specific I/O modules.
8094*a9fa9459Szrj
8095*a9fa9459SzrjThe original VMS support was contributed by David L. Kashtan.  Eric Youngdale
8096*a9fa9459Szrjhas done much work with it since.
8097*a9fa9459Szrj
8098*a9fa9459SzrjThe Intel 80386 machine description was written by Eliot Dresselhaus.
8099*a9fa9459Szrj
8100*a9fa9459SzrjMinh Tran-Le at IntelliCorp contributed some AIX 386 support.
8101*a9fa9459Szrj
8102*a9fa9459SzrjThe Motorola 88k machine description was contributed by Devon Bowen of Buffalo
8103*a9fa9459SzrjUniversity and Torbjorn Granlund of the Swedish Institute of Computer Science.
8104*a9fa9459Szrj
8105*a9fa9459SzrjKeith Knowles at the Open Software Foundation wrote the original MIPS back end
8106*a9fa9459Szrj(@file{tc-mips.c}, @file{tc-mips.h}), and contributed Rose format support
8107*a9fa9459Szrj(which hasn't been merged in yet).  Ralph Campbell worked with the MIPS code to
8108*a9fa9459Szrjsupport a.out format.
8109*a9fa9459Szrj
8110*a9fa9459SzrjSupport for the Zilog Z8k and Renesas H8/300 processors (tc-z8k,
8111*a9fa9459Szrjtc-h8300), and IEEE 695 object file format (obj-ieee), was written by
8112*a9fa9459SzrjSteve Chamberlain of Cygnus Support.  Steve also modified the COFF back end to
8113*a9fa9459Szrjuse BFD for some low-level operations, for use with the H8/300 and AMD 29k
8114*a9fa9459Szrjtargets.
8115*a9fa9459Szrj
8116*a9fa9459SzrjJohn Gilmore built the AMD 29000 support, added @code{.include} support, and
8117*a9fa9459Szrjsimplified the configuration of which versions accept which directives.  He
8118*a9fa9459Szrjupdated the 68k machine description so that Motorola's opcodes always produced
8119*a9fa9459Szrjfixed-size instructions (e.g., @code{jsr}), while synthetic instructions
8120*a9fa9459Szrjremained shrinkable (@code{jbsr}).  John fixed many bugs, including true tested
8121*a9fa9459Szrjcross-compilation support, and one bug in relaxation that took a week and
8122*a9fa9459Szrjrequired the proverbial one-bit fix.
8123*a9fa9459Szrj
8124*a9fa9459SzrjIan Lance Taylor of Cygnus Support merged the Motorola and MIT syntax for the
8125*a9fa9459Szrj68k, completed support for some COFF targets (68k, i386 SVR3, and SCO Unix),
8126*a9fa9459Szrjadded support for MIPS ECOFF and ELF targets, wrote the initial RS/6000 and
8127*a9fa9459SzrjPowerPC assembler, and made a few other minor patches.
8128*a9fa9459Szrj
8129*a9fa9459SzrjSteve Chamberlain made GAS able to generate listings.
8130*a9fa9459Szrj
8131*a9fa9459SzrjHewlett-Packard contributed support for the HP9000/300.
8132*a9fa9459Szrj
8133*a9fa9459SzrjJeff Law wrote GAS and BFD support for the native HPPA object format (SOM)
8134*a9fa9459Szrjalong with a fairly extensive HPPA testsuite (for both SOM and ELF object
8135*a9fa9459Szrjformats).  This work was supported by both the Center for Software Science at
8136*a9fa9459Szrjthe University of Utah and Cygnus Support.
8137*a9fa9459Szrj
8138*a9fa9459SzrjSupport for ELF format files has been worked on by Mark Eichin of Cygnus
8139*a9fa9459SzrjSupport (original, incomplete implementation for SPARC), Pete Hoogenboom and
8140*a9fa9459SzrjJeff Law at the University of Utah (HPPA mainly), Michael Meissner of the Open
8141*a9fa9459SzrjSoftware Foundation (i386 mainly), and Ken Raeburn of Cygnus Support (sparc,
8142*a9fa9459Szrjand some initial 64-bit support).
8143*a9fa9459Szrj
8144*a9fa9459SzrjLinas Vepstas added GAS support for the ESA/390 ``IBM 370'' architecture.
8145*a9fa9459Szrj
8146*a9fa9459SzrjRichard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote GAS and BFD
8147*a9fa9459Szrjsupport for openVMS/Alpha.
8148*a9fa9459Szrj
8149*a9fa9459SzrjTimothy Wall, Michael Hayes, and Greg Smart contributed to the various tic*
8150*a9fa9459Szrjflavors.
8151*a9fa9459Szrj
8152*a9fa9459SzrjDavid Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from Tensilica,
8153*a9fa9459SzrjInc.@: added support for Xtensa processors.
8154*a9fa9459Szrj
8155*a9fa9459SzrjSeveral engineers at Cygnus Support have also provided many small bug fixes and
8156*a9fa9459Szrjconfiguration enhancements.
8157*a9fa9459Szrj
8158*a9fa9459SzrjJon Beniston added support for the Lattice Mico32 architecture.
8159*a9fa9459Szrj
8160*a9fa9459SzrjMany others have contributed large or small bugfixes and enhancements.  If
8161*a9fa9459Szrjyou have contributed significant work and are not mentioned on this list, and
8162*a9fa9459Szrjwant to be, let us know.  Some of the history has been lost; we are not
8163*a9fa9459Szrjintentionally leaving anyone out.
8164*a9fa9459Szrj
8165*a9fa9459Szrj@node GNU Free Documentation License
8166*a9fa9459Szrj@appendix GNU Free Documentation License
8167*a9fa9459Szrj@include fdl.texi
8168*a9fa9459Szrj
8169*a9fa9459Szrj@node AS Index
8170*a9fa9459Szrj@unnumbered AS Index
8171*a9fa9459Szrj
8172*a9fa9459Szrj@printindex cp
8173*a9fa9459Szrj
8174*a9fa9459Szrj@bye
8175*a9fa9459Szrj@c Local Variables:
8176*a9fa9459Szrj@c fill-column: 79
8177*a9fa9459Szrj@c End:
8178