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