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