2002-03-07 Daniel Jacobowitz <drow@mvista.com>
[deliverable/binutils-gdb.git] / gas / doc / as.texinfo
CommitLineData
252b5132 1\input texinfo @c -*-Texinfo-*-
f7e42eb4 2@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
973eb340 3@c 2001, 2002
252b5132
RH
4@c Free Software Foundation, Inc.
5@c UPDATE!! On future updates--
6@c (1) check for new machine-dep cmdline options in
7@c md_parse_option definitions in config/tc-*.c
8@c (2) for platform-specific directives, examine md_pseudo_op
9@c in config/tc-*.c
10@c (3) for object-format specific directives, examine obj_pseudo_op
11@c in config/obj-*.c
12@c (4) portable directives in potable[] in read.c
13@c %**start of header
14@setfilename as.info
15@c ---config---
a4fb0134
SC
16@macro gcctabopt{body}
17@code{\body\}
18@end macro
252b5132
RH
19@c defaults, config file may override:
20@set have-stabs
21@c ---
22@include asconfig.texi
23@include gasver.texi
24@c ---
0285c67d
NC
25@c man begin NAME
26@ifset man
27@c Configure for the generation of man pages
28@set AS as
29@set TARGET TARGET
30@set GENERIC
31@set A29K
625e1353 32@set ALPHA
0285c67d
NC
33@set ARC
34@set ARM
328eb32e 35@set CRIS
0285c67d
NC
36@set D10V
37@set D30V
38@set H8/300
39@set H8/500
40@set HPPA
41@set I370
42@set I80386
43@set I860
44@set I960
9e32ca89 45@set IA-64
0285c67d
NC
46@set M32R
47@set M68HC11
48@set M680X0
81b0b3f1 49@set M880X0
0285c67d
NC
50@set MCORE
51@set MIPS
3c3bdf30 52@set MMIX
0285c67d
NC
53@set PDP11
54@set PJ
418c1742 55@set PPC
0285c67d
NC
56@set SH
57@set SPARC
58@set C54X
59@set V850
60@set VAX
61@end ifset
62@c man end
252b5132
RH
63@c common OR combinations of conditions
64@ifset AOUT
65@set aout-bout
66@end ifset
67@ifset ARM/Thumb
68@set ARM
69@end ifset
70@ifset BOUT
71@set aout-bout
72@end ifset
73@ifset H8/300
74@set H8
75@end ifset
76@ifset H8/500
77@set H8
78@end ifset
79@ifset SH
80@set H8
81@end ifset
82@ifset HPPA
83@set abnormal-separator
84@end ifset
85@c ------------
86@ifset GENERIC
87@settitle Using @value{AS}
88@end ifset
89@ifclear GENERIC
90@settitle Using @value{AS} (@value{TARGET})
91@end ifclear
92@setchapternewpage odd
93@c %**end of header
94
95@c @smallbook
96@c @set SMALL
97@c WARE! Some of the machine-dependent sections contain tables of machine
98@c instructions. Except in multi-column format, these tables look silly.
99@c Unfortunately, Texinfo doesn't have a general-purpose multi-col format, so
100@c the multi-col format is faked within @example sections.
101@c
102@c Again unfortunately, the natural size that fits on a page, for these tables,
103@c is different depending on whether or not smallbook is turned on.
104@c This matters, because of order: text flow switches columns at each page
105@c break.
106@c
107@c The format faked in this source works reasonably well for smallbook,
108@c not well for the default large-page format. This manual expects that if you
109@c turn on @smallbook, you will also uncomment the "@set SMALL" to enable the
110@c tables in question. You can turn on one without the other at your
111@c discretion, of course.
112@ifinfo
113@set SMALL
114@c the insn tables look just as silly in info files regardless of smallbook,
115@c might as well show 'em anyways.
116@end ifinfo
117
118@ifinfo
119@format
120START-INFO-DIR-ENTRY
121* As: (as). The GNU assembler.
59455fb1 122* Gas: (as). The GNU assembler.
252b5132
RH
123END-INFO-DIR-ENTRY
124@end format
125@end ifinfo
126
127@finalout
128@syncodeindex ky cp
129
130@ifinfo
131This file documents the GNU Assembler "@value{AS}".
132
0285c67d 133@c man begin COPYRIGHT
973eb340 134Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002 Free Software Foundation, Inc.
252b5132 135
0285c67d
NC
136Permission is granted to copy, distribute and/or modify this document
137under the terms of the GNU Free Documentation License, Version 1.1
138or any later version published by the Free Software Foundation;
139with no Invariant Sections, with no Front-Cover Texts, and with no
140Back-Cover Texts. A copy of the license is included in the
141section entitled "GNU Free Documentation License".
142
143@c man end
252b5132
RH
144
145@ignore
146Permission is granted to process this file through Tex and print the
147results, provided the printed document carries copying permission
148notice identical to this one except for the removal of this paragraph
149(this paragraph not being relevant to the printed manual).
150
151@end ignore
252b5132
RH
152@end ifinfo
153
154@titlepage
155@title Using @value{AS}
156@subtitle The @sc{gnu} Assembler
157@ifclear GENERIC
158@subtitle for the @value{TARGET} family
159@end ifclear
160@sp 1
161@subtitle Version @value{VERSION}
162@sp 1
163@sp 13
164The Free Software Foundation Inc. thanks The Nice Computer
165Company of Australia for loaning Dean Elsner to write the
a4fb0134 166first (Vax) version of @command{as} for Project @sc{gnu}.
252b5132
RH
167The proprietors, management and staff of TNCCA thank FSF for
168distracting the boss while they got some work
169done.
170@sp 3
171@author Dean Elsner, Jay Fenlason & friends
172@page
173@tex
174{\parskip=0pt
175\hfill {\it Using {\tt @value{AS}}}\par
176\hfill Edited by Cygnus Support\par
177}
178%"boxit" macro for figures:
179%Modified from Knuth's ``boxit'' macro from TeXbook (answer to exercise 21.3)
180\gdef\boxit#1#2{\vbox{\hrule\hbox{\vrule\kern3pt
181 \vbox{\parindent=0pt\parskip=0pt\hsize=#1\kern3pt\strut\hfil
182#2\hfil\strut\kern3pt}\kern3pt\vrule}\hrule}}%box with visible outline
183\gdef\ibox#1#2{\hbox to #1{#2\hfil}\kern8pt}% invisible box
184@end tex
185
186@vskip 0pt plus 1filll
973eb340 187Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002 Free Software Foundation, Inc.
252b5132 188
cf055d54
NC
189 Permission is granted to copy, distribute and/or modify this document
190 under the terms of the GNU Free Documentation License, Version 1.1
191 or any later version published by the Free Software Foundation;
192 with no Invariant Sections, with no Front-Cover Texts, and with no
193 Back-Cover Texts. A copy of the license is included in the
194 section entitled "GNU Free Documentation License".
252b5132 195
252b5132
RH
196@end titlepage
197
198@ifinfo
199@node Top
200@top Using @value{AS}
201
a4fb0134 202This file is a user guide to the @sc{gnu} assembler @command{@value{AS}} version
252b5132
RH
203@value{VERSION}.
204@ifclear GENERIC
a4fb0134 205This version of the file describes @command{@value{AS}} configured to generate
252b5132
RH
206code for @value{TARGET} architectures.
207@end ifclear
cf055d54
NC
208
209This document is distributed under the terms of the GNU Free
210Documentation License. A copy of the license is included in the
211section entitled "GNU Free Documentation License".
212
252b5132
RH
213@menu
214* Overview:: Overview
215* Invoking:: Command-Line Options
216* Syntax:: Syntax
217* Sections:: Sections and Relocation
218* Symbols:: Symbols
219* Expressions:: Expressions
220* Pseudo Ops:: Assembler Directives
221* Machine Dependencies:: Machine Dependent Features
222* Reporting Bugs:: Reporting Bugs
223* Acknowledgements:: Who Did What
cf055d54 224* GNU Free Documentation License:: GNU Free Documentation License
252b5132
RH
225* Index:: Index
226@end menu
227@end ifinfo
228
229@node Overview
230@chapter Overview
231@iftex
a4fb0134 232This manual is a user guide to the @sc{gnu} assembler @command{@value{AS}}.
252b5132 233@ifclear GENERIC
a4fb0134 234This version of the manual describes @command{@value{AS}} configured to generate
252b5132
RH
235code for @value{TARGET} architectures.
236@end ifclear
237@end iftex
238
239@cindex invocation summary
240@cindex option summary
241@cindex summary of options
a4fb0134 242Here is a brief summary of how to invoke @command{@value{AS}}. For details,
252b5132
RH
243@pxref{Invoking,,Comand-Line Options}.
244
0285c67d
NC
245@c man title AS the portable GNU assembler.
246
a4fb0134 247@ignore
0285c67d
NC
248@c man begin SEEALSO
249gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
250@c man end
a4fb0134 251@end ignore
0285c67d 252
252b5132
RH
253@c We don't use deffn and friends for the following because they seem
254@c to be limited to one line for the header.
255@smallexample
0285c67d 256@c man begin SYNOPSIS
a4fb0134
SC
257@value{AS} [@b{-a}[@b{cdhlns}][=@var{file}]] [@b{-D}] [@b{--defsym} @var{sym}=@var{val}]
258 [@b{-f}] [@b{--gstabs}] [@b{--gdwarf2}] [@b{--help}] [@b{-I} @var{dir}]
259 [@b{-J}] [@b{-K}] [@b{-L}]
260 [@b{--listing-lhs-width}=@var{NUM}] [@b{--listing-lhs-width2}=@var{NUM}]
261 [@b{--listing-rhs-width}=@var{NUM}] [@b{--listing-cont-lines}=@var{NUM}]
262 [@b{--keep-locals}] [@b{-o} @var{objfile}] [@b{-R}] [@b{--statistics}] [@b{-v}]
263 [@b{-version}] [@b{--version}] [@b{-W}] [@b{--warn}] [@b{--fatal-warnings}]
264 [@b{-w}] [@b{-x}] [@b{-Z}] [@b{--target-help}] [@var{target-options}]
265 [@b{--}|@var{files} @dots{}]
266@c
267@c Target dependent options are listed below. Keep the list sorted.
268@c Add an empty line for separation.
252b5132
RH
269@ifset A29K
270@c am29k has no machine-dependent assembler options
271@end ifset
625e1353
RH
272@ifset ALPHA
273
274@emph{Target Alpha options:}
275 [@b{-m@var{cpu}}]
276 [@b{-mdebug} | @b{-no-mdebug}]
277 [@b{-relax}] [@b{-g}] [@b{-G@var{size}}]
278 [@b{-F}] [@b{-32addr}]
279@end ifset
252b5132 280@ifset ARC
a4fb0134
SC
281
282@emph{Target ARC options:}
283 [@b{-marc[5|6|7|8]}]
284 [@b{-EB}|@b{-EL}]
252b5132
RH
285@end ifset
286@ifset ARM
a4fb0134
SC
287
288@emph{Target ARM options:}
03b1477f 289@c Don't document the deprecated options
92081f48
HPN
290 [@b{-mcpu}=@var{processor}[+@var{extension}@dots{}]]
291 [@b{-march}=@var{architecture}[+@var{extension}@dots{}]]
03b1477f
RE
292 [@b{-mfpu}=@var{floating-point-fromat}]
293 [@b{-mthumb}]
a4fb0134
SC
294 [@b{-EB}|@b{-EL}]
295 [@b{-mapcs-32}|@b{-mapcs-26}|@b{-mapcs-float}|
296 @b{-mapcs-reentrant}]
297 [@b{-mthumb-interwork}] [@b{-moabi}] [@b{-k}]
252b5132 298@end ifset
328eb32e
HPN
299@ifset CRIS
300
301@emph{Target CRIS options:}
302 [@b{--underscore} | @b{--no-underscore}]
303 [@b{--pic}] [@b{-N}]
304 [@b{--emulation=criself} | @b{--emulation=crisaout}]
305@c Deprecated -- deliberately not documented.
306@c [@b{-h}] [@b{-H}]
307@end ifset
252b5132 308@ifset D10V
a4fb0134
SC
309
310@emph{Target D10V options:}
311 [@b{-O}]
252b5132
RH
312@end ifset
313@ifset D30V
a4fb0134
SC
314
315@emph{Target D30V options:}
316 [@b{-O}|@b{-n}|@b{-N}]
252b5132
RH
317@end ifset
318@ifset H8
319@c Hitachi family chips have no machine-dependent assembler options
320@end ifset
321@ifset HPPA
322@c HPPA has no machine-dependent assembler options (yet).
323@end ifset
a4fb0134
SC
324@ifset I80386
325
326@emph{Target i386 options:}
327 [@b{--32}|@b{--64}]
252b5132
RH
328@end ifset
329@ifset I960
a4fb0134
SC
330
331@emph{Target i960 options:}
252b5132 332@c see md_parse_option in tc-i960.c
a4fb0134
SC
333 [@b{-ACA}|@b{-ACA_A}|@b{-ACB}|@b{-ACC}|@b{-AKA}|@b{-AKB}|
334 @b{-AKC}|@b{-AMC}]
335 [@b{-b}] [@b{-no-relax}]
252b5132 336@end ifset
587fe2b3 337@ifset IA64
a4fb0134 338
9e32ca89
NC
339@emph{Target IA-64 options:}
340 [@b{-mconstant-gp}|@b{-mauto-pic}]
341 [@b{-milp32}|@b{-milp64}|@b{-mlp64}|@b{-mp64}]
342 [@b{-mle}|@b{mbe}]
343 [@b{-x}|@b{-xexplicit}] [@b{-xauto}] [@b{-xdebug}]
344@end ifset
587fe2b3 345@ifset M32R
9e32ca89 346
a4fb0134
SC
347@emph{Target M32R options:}
348 [@b{--m32rx}|@b{--[no-]warn-explicit-parallel-conflicts}|
587fe2b3 349 @b{--W[n]p}]
ec694b89 350@end ifset
252b5132 351@ifset M680X0
a4fb0134
SC
352
353@emph{Target M680X0 options:}
354 [@b{-l}] [@b{-m68000}|@b{-m68010}|@b{-m68020}|@dots{}]
252b5132 355@end ifset
60bcf0fa 356@ifset M68HC11
a4fb0134
SC
357
358@emph{Target M68HC11 options:}
359 [@b{-m68hc11}|@b{-m68hc12}]
360 [@b{--force-long-branchs}] [@b{--short-branchs}]
361 [@b{--strict-direct-mode}] [@b{--print-insn-syntax}]
362 [@b{--print-opcodes}] [@b{--generate-example}]
363@end ifset
364@ifset MCORE
365
366@emph{Target MCORE options:}
367 [@b{-jsri2bsr}] [@b{-sifilter}] [@b{-relax}]
368 [@b{-mcpu=[210|340]}]
60bcf0fa 369@end ifset
252b5132 370@ifset MIPS
a4fb0134
SC
371
372@emph{Target MIPS options:}
373 [@b{-nocpp}] [@b{-EL}] [@b{-EB}] [@b{-G} @var{num}] [@b{-mcpu}=@var{CPU} ]
374 [@b{-mips1}] [@b{-mips2}] [@b{-mips3}] [@b{-mips4}] [@b{-mips5}]
375 [@b{-mips32}] [@b{-mips64}]
376 [@b{-m4650}] [@b{-no-m4650}]
377 [@b{--trap}] [@b{--break}] [@b{-n}]
378 [@b{--emulation}=@var{name} ]
3c3bdf30
NC
379@end ifset
380@ifset MMIX
a4fb0134
SC
381
382@emph{Target MMIX options:}
383 [@b{--fixed-special-register-names}] [@b{--globalize-symbols}]
384 [@b{--gnu-syntax}] [@b{--relax}] [@b{--no-predefined-symbols}]
385 [@b{--no-expand}] [@b{--no-merge-gregs}] [@b{-x}]
973eb340 386 [@b{--linker-allocated-gregs}]
a4fb0134
SC
387@end ifset
388@ifset PDP11
389
390@emph{Target PDP11 options:}
391 [@b{-mpic}|@b{-mno-pic}] [@b{-mall}] [@b{-mno-extensions}]
392 [@b{-m}@var{extension}|@b{-mno-}@var{extension}]
393 [@b{-m}@var{cpu}] [@b{-m}@var{machine}]
394@end ifset
395@ifset PJ
396
397@emph{Target picoJava options:}
398 [@b{-mb}|@b{-me}]
399@end ifset
400@ifset PPC
401
402@emph{Target PowerPC options:}
403 [@b{-mpwrx}|@b{-mpwr2}|@b{-mpwr}|@b{-m601}|@b{-mppc}|@b{-mppc32}|@b{-m603}|@b{-m604}|
404 @b{-m403}|@b{-m405}|@b{-mppc64}|@b{-m620}|@b{-mppc64bridge}|@b{-mbooke}|
405 @b{-mbooke32}|@b{-mbooke64}]
406 [@b{-mcom}|@b{-many}|@b{-maltivec}] [@b{-memb}]
407 [@b{-mregnames}|@b{-mno-regnames}]
408 [@b{-mrelocatable}|@b{-mrelocatable-lib}]
409 [@b{-mlittle}|@b{-mlittle-endian}|@b{-mbig}|@b{-mbig-endian}]
410 [@b{-msolaris}|@b{-mno-solaris}]
411@end ifset
412@ifset SPARC
413
414@emph{Target SPARC options:}
415@c The order here is important. See c-sparc.texi.
416 [@b{-Av6}|@b{-Av7}|@b{-Av8}|@b{-Asparclet}|@b{-Asparclite}
417 @b{-Av8plus}|@b{-Av8plusa}|@b{-Av9}|@b{-Av9a}]
418 [@b{-xarch=v8plus}|@b{-xarch=v8plusa}] [@b{-bump}]
419 [@b{-32}|@b{-64}]
420@end ifset
421@ifset TIC54X
422
423@emph{Target TIC54X options:}
424 [@b{-mcpu=54[123589]}|@b{-mcpu=54[56]lp}] [@b{-mfar-mode}|@b{-mf}]
425 [@b{-merrors-to-file} @var{<filename>}|@b{-me} @var{<filename>}]
426@end ifset
427@ifset Z8000
428@c Z8000 has no machine-dependent assembler options
252b5132 429@end ifset
0285c67d 430@c man end
252b5132
RH
431@end smallexample
432
0285c67d
NC
433@c man begin OPTIONS
434
a4fb0134 435@table @gcctabopt
252b5132
RH
436@item -a[cdhlmns]
437Turn on listings, in any of a variety of ways:
438
a4fb0134 439@table @gcctabopt
252b5132
RH
440@item -ac
441omit false conditionals
442
443@item -ad
444omit debugging directives
445
446@item -ah
447include high-level source
448
449@item -al
450include assembly
451
452@item -am
453include macro expansions
454
455@item -an
456omit forms processing
457
458@item -as
459include symbols
460
461@item =file
462set the name of the listing file
463@end table
464
465You may combine these options; for example, use @samp{-aln} for assembly
466listing without forms processing. The @samp{=file} option, if used, must be
467the last one. By itself, @samp{-a} defaults to @samp{-ahls}.
468
469@item -D
470Ignored. This option is accepted for script compatibility with calls to
471other assemblers.
472
473@item --defsym @var{sym}=@var{value}
474Define the symbol @var{sym} to be @var{value} before assembling the input file.
475@var{value} must be an integer constant. As in C, a leading @samp{0x}
476indicates a hexadecimal value, and a leading @samp{0} indicates an octal value.
477
478@item -f
479``fast''---skip whitespace and comment preprocessing (assume source is
480compiler output).
481
482@item --gstabs
483Generate stabs debugging information for each assembler line. This
484may help debugging assembler code, if the debugger can handle it.
485
cdf82bcf
NC
486@item --gdwarf2
487Generate DWARF2 debugging information for each assembler line. This
85a39694
NC
488may help debugging assembler code, if the debugger can handle it. Note - this
489option is only supported by some targets, not all of them.
cdf82bcf 490
252b5132
RH
491@item --help
492Print a summary of the command line options and exit.
493
ea20a7da
CC
494@item --target-help
495Print a summary of all target specific options and exit.
496
252b5132
RH
497@item -I @var{dir}
498Add directory @var{dir} to the search list for @code{.include} directives.
499
500@item -J
501Don't warn about signed overflow.
502
503@item -K
504@ifclear DIFF-TBL-KLUGE
505This option is accepted but has no effect on the @value{TARGET} family.
506@end ifclear
507@ifset DIFF-TBL-KLUGE
508Issue warnings when difference tables altered for long displacements.
509@end ifset
510
511@item -L
512@itemx --keep-locals
513Keep (in the symbol table) local symbols. On traditional a.out systems
514these start with @samp{L}, but different systems have different local
515label prefixes.
516
c3a27914
NC
517@item --listing-lhs-width=@var{number}
518Set the maximum width, in words, of the output data column for an assembler
519listing to @var{number}.
520
521@item --listing-lhs-width2=@var{number}
522Set the maximum width, in words, of the output data column for continuation
523lines in an assembler listing to @var{number}.
524
525@item --listing-rhs-width=@var{number}
526Set the maximum width of an input source line, as displayed in a listing, to
527@var{number} bytes.
528
529@item --listing-cont-lines=@var{number}
530Set the maximum number of lines printed in a listing for a single line of input
531to @var{number} + 1.
532
252b5132 533@item -o @var{objfile}
a4fb0134 534Name the object-file output from @command{@value{AS}} @var{objfile}.
252b5132
RH
535
536@item -R
537Fold the data section into the text section.
538
539@item --statistics
540Print the maximum space (in bytes) and total time (in seconds) used by
541assembly.
542
543@item --strip-local-absolute
544Remove local absolute symbols from the outgoing symbol table.
545
546@item -v
547@itemx -version
a4fb0134 548Print the @command{as} version.
252b5132
RH
549
550@item --version
a4fb0134 551Print the @command{as} version and exit.
252b5132
RH
552
553@item -W
2bdd6cf5 554@itemx --no-warn
252b5132
RH
555Suppress warning messages.
556
2bdd6cf5
GK
557@item --fatal-warnings
558Treat warnings as errors.
559
560@item --warn
561Don't suppress warning messages or treat them as errors.
562
252b5132
RH
563@item -w
564Ignored.
565
566@item -x
567Ignored.
568
569@item -Z
570Generate an object file even after errors.
571
572@item -- | @var{files} @dots{}
573Standard input, or source files to assemble.
574
575@end table
576
577@ifset ARC
578The following options are available when @value{AS} is configured for
579an ARC processor.
580
a4fb0134 581@table @gcctabopt
0d2bcfaf
NC
582@item -marc[5|6|7|8]
583This option selects the core processor variant.
584@item -EB | -EL
585Select either big-endian (-EB) or little-endian (-EL) output.
252b5132
RH
586@end table
587@end ifset
588
589@ifset ARM
590The following options are available when @value{AS} is configured for the ARM
591processor family.
592
a4fb0134 593@table @gcctabopt
92081f48 594@item -mcpu=@var{processor}[+@var{extension}@dots{}]
cdf82bcf 595Specify which ARM processor variant is the target.
92081f48 596@item -march=@var{architecture}[+@var{extension}@dots{}]
cdf82bcf 597Specify which ARM architecture variant is used by the target.
03b1477f 598@item -mfpu=@var{floating-point-format}
a349d9dd 599Select which Floating Point architecture is the target.
03b1477f
RE
600@item -mthumb
601Enable Thumb only instruction decoding.
cdf82bcf 602@item -mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant | -moabi
252b5132
RH
603Select which procedure calling convention is in use.
604@item -EB | -EL
605Select either big-endian (-EB) or little-endian (-EL) output.
cdf82bcf
NC
606@item -mthumb-interwork
607Specify that the code has been generated with interworking between Thumb and
608ARM code in mind.
609@item -k
610Specify that PIC code has been generated.
252b5132
RH
611@end table
612@end ifset
613
328eb32e
HPN
614@ifset CRIS
615See the info pages for documentation of the CRIS-specific options.
616@end ifset
617
252b5132
RH
618@ifset D10V
619The following options are available when @value{AS} is configured for
620a D10V processor.
a4fb0134 621@table @gcctabopt
252b5132
RH
622@cindex D10V optimization
623@cindex optimization, D10V
624@item -O
625Optimize output by parallelizing instructions.
626@end table
627@end ifset
628
629@ifset D30V
630The following options are available when @value{AS} is configured for a D30V
631processor.
a4fb0134 632@table @gcctabopt
252b5132
RH
633@cindex D30V optimization
634@cindex optimization, D30V
635@item -O
636Optimize output by parallelizing instructions.
637
638@cindex D30V nops
639@item -n
640Warn when nops are generated.
641
642@cindex D30V nops after 32-bit multiply
643@item -N
644Warn when a nop after a 32-bit multiply instruction is generated.
645@end table
646@end ifset
647
648@ifset I960
649The following options are available when @value{AS} is configured for the
650Intel 80960 processor.
651
a4fb0134 652@table @gcctabopt
252b5132
RH
653@item -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC
654Specify which variant of the 960 architecture is the target.
655
656@item -b
657Add code to collect statistics about branches taken.
658
659@item -no-relax
660Do not alter compare-and-branch instructions for long displacements;
661error if necessary.
662
663@end table
664@end ifset
665
ec694b89
NC
666@ifset M32R
667The following options are available when @value{AS} is configured for the
668Mitsubishi M32R series.
669
a4fb0134 670@table @gcctabopt
ec694b89
NC
671
672@item --m32rx
673Specify which processor in the M32R family is the target. The default
674is normally the M32R, but this option changes it to the M32RX.
675
676@item --warn-explicit-parallel-conflicts or --Wp
677Produce warning messages when questionable parallel constructs are
678encountered.
679
680@item --no-warn-explicit-parallel-conflicts or --Wnp
681Do not produce warning messages when questionable parallel constructs are
682encountered.
683
684@end table
685@end ifset
252b5132
RH
686
687@ifset M680X0
688The following options are available when @value{AS} is configured for the
689Motorola 68000 series.
690
a4fb0134 691@table @gcctabopt
252b5132
RH
692
693@item -l
694Shorten references to undefined symbols, to one word instead of two.
695
0285c67d
NC
696@item -m68000 | -m68008 | -m68010 | -m68020 | -m68030
697@itemx | -m68040 | -m68060 | -m68302 | -m68331 | -m68332
698@itemx | -m68333 | -m68340 | -mcpu32 | -m5200
252b5132
RH
699Specify what processor in the 68000 family is the target. The default
700is normally the 68020, but this can be changed at configuration time.
701
702@item -m68881 | -m68882 | -mno-68881 | -mno-68882
703The target machine does (or does not) have a floating-point coprocessor.
704The default is to assume a coprocessor for 68020, 68030, and cpu32. Although
705the basic 68000 is not compatible with the 68881, a combination of the
706two can be specified, since it's possible to do emulation of the
707coprocessor instructions with the main processor.
708
709@item -m68851 | -mno-68851
710The target machine does (or does not) have a memory-management
711unit coprocessor. The default is to assume an MMU for 68020 and up.
712
713@end table
714@end ifset
715
e135f41b
NC
716@ifset PDP11
717
718For details about the PDP-11 machine dependent features options,
719see @ref{PDP-11-Options}.
720
a4fb0134 721@table @gcctabopt
e135f41b
NC
722@item -mpic | -mno-pic
723Generate position-independent (or position-dependent) code. The
a4fb0134 724default is @option{-mpic}.
e135f41b
NC
725
726@item -mall
727@itemx -mall-extensions
728Enable all instruction set extensions. This is the default.
729
730@item -mno-extensions
731Disable all instruction set extensions.
732
733@item -m@var{extension} | -mno-@var{extension}
734Enable (or disable) a particular instruction set extension.
735
736@item -m@var{cpu}
737Enable the instruction set extensions supported by a particular CPU, and
738disable all other extensions.
739
740@item -m@var{machine}
741Enable the instruction set extensions supported by a particular machine
742model, and disable all other extensions.
743@end table
744
745@end ifset
746
041dd5a9
ILT
747@ifset PJ
748The following options are available when @value{AS} is configured for
749a picoJava processor.
750
a4fb0134 751@table @gcctabopt
041dd5a9
ILT
752
753@cindex PJ endianness
754@cindex endianness, PJ
755@cindex big endian output, PJ
756@item -mb
757Generate ``big endian'' format output.
758
759@cindex little endian output, PJ
760@item -ml
761Generate ``little endian'' format output.
762
763@end table
764@end ifset
765
60bcf0fa
NC
766@ifset M68HC11
767The following options are available when @value{AS} is configured for the
768Motorola 68HC11 or 68HC12 series.
769
a4fb0134 770@table @gcctabopt
60bcf0fa
NC
771
772@item -m68hc11 | -m68hc12
773Specify what processor is the target. The default is
774defined by the configuration option when building the assembler.
775
776@item --force-long-branchs
777Relative branches are turned into absolute ones. This concerns
778conditional branches, unconditional branches and branches to a
779sub routine.
780
781@item -S | --short-branchs
782Do not turn relative branchs into absolute ones
783when the offset is out of range.
784
785@item --strict-direct-mode
786Do not turn the direct addressing mode into extended addressing mode
787when the instruction does not support direct addressing mode.
788
789@item --print-insn-syntax
790Print the syntax of instruction in case of error.
791
792@item --print-opcodes
793print the list of instructions with syntax and then exit.
794
795@item --generate-example
796print an example of instruction for each possible instruction and then exit.
a4fb0134 797This option is only useful for testing @command{@value{AS}}.
60bcf0fa
NC
798
799@end table
800@end ifset
801
252b5132 802@ifset SPARC
a4fb0134 803The following options are available when @command{@value{AS}} is configured
252b5132
RH
804for the SPARC architecture:
805
a4fb0134 806@table @gcctabopt
252b5132
RH
807@item -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite
808@itemx -Av8plus | -Av8plusa | -Av9 | -Av9a
809Explicitly select a variant of the SPARC architecture.
810
811@samp{-Av8plus} and @samp{-Av8plusa} select a 32 bit environment.
812@samp{-Av9} and @samp{-Av9a} select a 64 bit environment.
813
814@samp{-Av8plusa} and @samp{-Av9a} enable the SPARC V9 instruction set with
815UltraSPARC extensions.
816
817@item -xarch=v8plus | -xarch=v8plusa
818For compatibility with the Solaris v9 assembler. These options are
819equivalent to -Av8plus and -Av8plusa, respectively.
820
821@item -bump
822Warn when the assembler switches to another architecture.
823@end table
824@end ifset
825
39bec121
TW
826@ifset TIC54X
827The following options are available when @value{AS} is configured for the 'c54x
828architecture.
829
a4fb0134 830@table @gcctabopt
39bec121
TW
831@item -mfar-mode
832Enable extended addressing mode. All addresses and relocations will assume
833extended addressing (usually 23 bits).
834@item -mcpu=@var{CPU_VERSION}
835Sets the CPU version being compiled for.
836@item -merrors-to-file @var{FILENAME}
837Redirect error output to a file, for broken systems which don't support such
838behaviour in the shell.
839@end table
840@end ifset
841
252b5132
RH
842@ifset MIPS
843The following options are available when @value{AS} is configured for
844a MIPS processor.
845
a4fb0134 846@table @gcctabopt
252b5132
RH
847@item -G @var{num}
848This option sets the largest size of an object that can be referenced
849implicitly with the @code{gp} register. It is only accepted for targets that
850use ECOFF format, such as a DECstation running Ultrix. The default value is 8.
851
852@cindex MIPS endianness
853@cindex endianness, MIPS
854@cindex big endian output, MIPS
855@item -EB
856Generate ``big endian'' format output.
857
858@cindex little endian output, MIPS
859@item -EL
860Generate ``little endian'' format output.
861
862@cindex MIPS ISA
863@item -mips1
864@itemx -mips2
865@itemx -mips3
e7af610e
NC
866@itemx -mips4
867@itemx -mips32
4058e45f 868@itemx -mips64
252b5132
RH
869Generate code for a particular MIPS Instruction Set Architecture level.
870@samp{-mips1} corresponds to the @sc{r2000} and @sc{r3000} processors,
84ea6cf2
NC
871@samp{-mips2} to the @sc{r6000} processor, and @samp{-mips3} to the @sc{r4000}
872processor.
873@samp{-mips5}, @samp{-mips32}, and @samp{-mips64} correspond
874to generic @sc{MIPS V}, @sc{MIPS32}, and @sc{MIPS64} ISA
875processors, respectively.
252b5132
RH
876
877@item -m4650
878@itemx -no-m4650
879Generate code for the MIPS @sc{r4650} chip. This tells the assembler to accept
880the @samp{mad} and @samp{madu} instruction, and to not schedule @samp{nop}
881instructions around accesses to the @samp{HI} and @samp{LO} registers.
882@samp{-no-m4650} turns off this option.
883
884@item -mcpu=@var{CPU}
c6c98b38
NC
885Generate code for a particular MIPS cpu. It is exactly equivalent to
886@samp{-m@var{cpu}}, except that there are more value of @var{cpu}
887understood.
252b5132
RH
888
889@cindex emulation
890@item --emulation=@var{name}
a4fb0134 891This option causes @command{@value{AS}} to emulate @command{@value{AS}} configured
252b5132
RH
892for some other target, in all respects, including output format (choosing
893between ELF and ECOFF only), handling of pseudo-opcodes which may generate
894debugging information or store symbol table information, and default
895endianness. The available configuration names are: @samp{mipsecoff},
896@samp{mipself}, @samp{mipslecoff}, @samp{mipsbecoff}, @samp{mipslelf},
897@samp{mipsbelf}. The first two do not alter the default endianness from that
898of the primary target for which the assembler was configured; the others change
899the default to little- or big-endian as indicated by the @samp{b} or @samp{l}
900in the name. Using @samp{-EB} or @samp{-EL} will override the endianness
901selection in any case.
902
903This option is currently supported only when the primary target
a4fb0134 904@command{@value{AS}} is configured for is a MIPS ELF or ECOFF target.
252b5132
RH
905Furthermore, the primary target or others specified with
906@samp{--enable-targets=@dots{}} at configuration time must include support for
907the other format, if both are to be available. For example, the Irix 5
908configuration includes support for both.
909
910Eventually, this option will support more configurations, with more
911fine-grained control over the assembler's behavior, and will be supported for
912more processors.
913
914@item -nocpp
a4fb0134 915@command{@value{AS}} ignores this option. It is accepted for compatibility with
252b5132
RH
916the native tools.
917
918@need 900
919@item --trap
920@itemx --no-trap
921@itemx --break
922@itemx --no-break
923Control how to deal with multiplication overflow and division by zero.
924@samp{--trap} or @samp{--no-break} (which are synonyms) take a trap exception
925(and only work for Instruction Set Architecture level 2 and higher);
926@samp{--break} or @samp{--no-trap} (also synonyms, and the default) take a
927break exception.
63486801
L
928
929@item -n
a4fb0134 930When this option is used, @command{@value{AS}} will issue a warning every
63486801 931time it generates a nop instruction from a macro.
252b5132
RH
932@end table
933@end ifset
934
935@ifset MCORE
936The following options are available when @value{AS} is configured for
937an MCore processor.
938
a4fb0134 939@table @gcctabopt
252b5132
RH
940@item -jsri2bsr
941@itemx -nojsri2bsr
942Enable or disable the JSRI to BSR transformation. By default this is enabled.
943The command line option @samp{-nojsri2bsr} can be used to disable it.
944
945@item -sifilter
946@itemx -nosifilter
947Enable or disable the silicon filter behaviour. By default this is disabled.
a349d9dd 948The default can be overridden by the @samp{-sifilter} command line option.
252b5132
RH
949
950@item -relax
951Alter jump instructions for long displacements.
952
ec694b89
NC
953@item -mcpu=[210|340]
954Select the cpu type on the target hardware. This controls which instructions
955can be assembled.
956
957@item -EB
958Assemble for a big endian target.
959
960@item -EL
961Assemble for a little endian target.
252b5132
RH
962
963@end table
964@end ifset
965
3c3bdf30
NC
966@ifset MMIX
967See the info pages for documentation of the MMIX-specific options.
968@end ifset
969
0285c67d
NC
970@c man end
971
252b5132
RH
972@menu
973* Manual:: Structure of this Manual
974* GNU Assembler:: The GNU Assembler
975* Object Formats:: Object File Formats
976* Command Line:: Command Line
977* Input Files:: Input Files
978* Object:: Output (Object) File
979* Errors:: Error and Warning Messages
980@end menu
981
982@node Manual
983@section Structure of this Manual
984
985@cindex manual, structure and purpose
986This manual is intended to describe what you need to know to use
a4fb0134 987@sc{gnu} @command{@value{AS}}. We cover the syntax expected in source files, including
252b5132 988notation for symbols, constants, and expressions; the directives that
a4fb0134 989@command{@value{AS}} understands; and of course how to invoke @command{@value{AS}}.
252b5132
RH
990
991@ifclear GENERIC
992We also cover special features in the @value{TARGET}
a4fb0134 993configuration of @command{@value{AS}}, including assembler directives.
252b5132
RH
994@end ifclear
995@ifset GENERIC
996This manual also describes some of the machine-dependent features of
997various flavors of the assembler.
998@end ifset
999
1000@cindex machine instructions (not covered)
1001On the other hand, this manual is @emph{not} intended as an introduction
1002to programming in assembly language---let alone programming in general!
1003In a similar vein, we make no attempt to introduce the machine
1004architecture; we do @emph{not} describe the instruction set, standard
1005mnemonics, registers or addressing modes that are standard to a
1006particular architecture.
1007@ifset GENERIC
1008You may want to consult the manufacturer's
1009machine architecture manual for this information.
1010@end ifset
1011@ifclear GENERIC
1012@ifset H8/300
1013For information on the H8/300 machine instruction set, see @cite{H8/300
1014Series Programming Manual} (Hitachi ADE--602--025). For the H8/300H,
1015see @cite{H8/300H Series Programming Manual} (Hitachi).
1016@end ifset
1017@ifset H8/500
1018For information on the H8/500 machine instruction set, see @cite{H8/500
1019Series Programming Manual} (Hitachi M21T001).
1020@end ifset
1021@ifset SH
1022For information on the Hitachi SH machine instruction set, see
1023@cite{SH-Microcomputer User's Manual} (Hitachi Micro Systems, Inc.).
1024@end ifset
1025@ifset Z8000
1026For information on the Z8000 machine instruction set, see @cite{Z8000 CPU Technical Manual}
1027@end ifset
1028@end ifclear
1029
1030@c I think this is premature---doc@cygnus.com, 17jan1991
1031@ignore
1032Throughout this manual, we assume that you are running @dfn{GNU},
1033the portable operating system from the @dfn{Free Software
1034Foundation, Inc.}. This restricts our attention to certain kinds of
1035computer (in particular, the kinds of computers that @sc{gnu} can run on);
1036once this assumption is granted examples and definitions need less
1037qualification.
1038
a4fb0134 1039@command{@value{AS}} is part of a team of programs that turn a high-level
252b5132
RH
1040human-readable series of instructions into a low-level
1041computer-readable series of instructions. Different versions of
a4fb0134 1042@command{@value{AS}} are used for different kinds of computer.
252b5132
RH
1043@end ignore
1044
1045@c There used to be a section "Terminology" here, which defined
1046@c "contents", "byte", "word", and "long". Defining "word" to any
1047@c particular size is confusing when the .word directive may generate 16
1048@c bits on one machine and 32 bits on another; in general, for the user
1049@c version of this manual, none of these terms seem essential to define.
1050@c They were used very little even in the former draft of the manual;
1051@c this draft makes an effort to avoid them (except in names of
1052@c directives).
1053
1054@node GNU Assembler
1055@section The GNU Assembler
1056
0285c67d
NC
1057@c man begin DESCRIPTION
1058
a4fb0134 1059@sc{gnu} @command{as} is really a family of assemblers.
252b5132 1060@ifclear GENERIC
a4fb0134 1061This manual describes @command{@value{AS}}, a member of that family which is
252b5132
RH
1062configured for the @value{TARGET} architectures.
1063@end ifclear
1064If you use (or have used) the @sc{gnu} assembler on one architecture, you
1065should find a fairly similar environment when you use it on another
1066architecture. Each version has much in common with the others,
1067including object file formats, most assembler directives (often called
1068@dfn{pseudo-ops}) and assembler syntax.@refill
1069
1070@cindex purpose of @sc{gnu} assembler
a4fb0134 1071@command{@value{AS}} is primarily intended to assemble the output of the
252b5132 1072@sc{gnu} C compiler @code{@value{GCC}} for use by the linker
a4fb0134 1073@code{@value{LD}}. Nevertheless, we've tried to make @command{@value{AS}}
252b5132
RH
1074assemble correctly everything that other assemblers for the same
1075machine would assemble.
1076@ifset VAX
1077Any exceptions are documented explicitly (@pxref{Machine Dependencies}).
1078@end ifset
1079@ifset M680X0
1080@c This remark should appear in generic version of manual; assumption
1081@c here is that generic version sets M680x0.
a4fb0134 1082This doesn't mean @command{@value{AS}} always uses the same syntax as another
252b5132
RH
1083assembler for the same architecture; for example, we know of several
1084incompatible versions of 680x0 assembly language syntax.
1085@end ifset
1086
0285c67d
NC
1087@c man end
1088
a4fb0134 1089Unlike older assemblers, @command{@value{AS}} is designed to assemble a source
252b5132
RH
1090program in one pass of the source file. This has a subtle impact on the
1091@kbd{.org} directive (@pxref{Org,,@code{.org}}).
1092
1093@node Object Formats
1094@section Object File Formats
1095
1096@cindex object file format
1097The @sc{gnu} assembler can be configured to produce several alternative
1098object file formats. For the most part, this does not affect how you
1099write assembly language programs; but directives for debugging symbols
1100are typically different in different file formats. @xref{Symbol
1101Attributes,,Symbol Attributes}.
1102@ifclear GENERIC
1103@ifclear MULTI-OBJ
a4fb0134 1104On the @value{TARGET}, @command{@value{AS}} is configured to produce
252b5132
RH
1105@value{OBJ-NAME} format object files.
1106@end ifclear
1107@c The following should exhaust all configs that set MULTI-OBJ, ideally
1108@ifset A29K
a4fb0134 1109On the @value{TARGET}, @command{@value{AS}} can be configured to produce either
252b5132
RH
1110@code{a.out} or COFF format object files.
1111@end ifset
1112@ifset I960
a4fb0134 1113On the @value{TARGET}, @command{@value{AS}} can be configured to produce either
252b5132
RH
1114@code{b.out} or COFF format object files.
1115@end ifset
1116@ifset HPPA
a4fb0134 1117On the @value{TARGET}, @command{@value{AS}} can be configured to produce either
252b5132
RH
1118SOM or ELF format object files.
1119@end ifset
1120@end ifclear
1121
1122@node Command Line
1123@section Command Line
1124
1125@cindex command line conventions
0285c67d 1126
a4fb0134 1127After the program name @command{@value{AS}}, the command line may contain
252b5132
RH
1128options and file names. Options may appear in any order, and may be
1129before, after, or between file names. The order of file names is
1130significant.
1131
1132@cindex standard input, as input file
1133@kindex --
1134@file{--} (two hyphens) by itself names the standard input file
a4fb0134 1135explicitly, as one of the files for @command{@value{AS}} to assemble.
252b5132
RH
1136
1137@cindex options, command line
1138Except for @samp{--} any command line argument that begins with a
1139hyphen (@samp{-}) is an option. Each option changes the behavior of
a4fb0134 1140@command{@value{AS}}. No option changes the way another option works. An
252b5132
RH
1141option is a @samp{-} followed by one or more letters; the case of
1142the letter is important. All options are optional.
1143
1144Some options expect exactly one file name to follow them. The file
1145name may either immediately follow the option's letter (compatible
1146with older assemblers) or it may be the next command argument (@sc{gnu}
1147standard). These two command lines are equivalent:
1148
1149@smallexample
1150@value{AS} -o my-object-file.o mumble.s
1151@value{AS} -omy-object-file.o mumble.s
1152@end smallexample
1153
1154@node Input Files
1155@section Input Files
1156
1157@cindex input
1158@cindex source program
1159@cindex files, input
1160We use the phrase @dfn{source program}, abbreviated @dfn{source}, to
a4fb0134 1161describe the program input to one run of @command{@value{AS}}. The program may
252b5132
RH
1162be in one or more files; how the source is partitioned into files
1163doesn't change the meaning of the source.
1164
1165@c I added "con" prefix to "catenation" just to prove I can overcome my
1166@c APL training... doc@cygnus.com
1167The source program is a concatenation of the text in all the files, in the
1168order specified.
1169
0285c67d 1170@c man begin DESCRIPTION
a4fb0134 1171Each time you run @command{@value{AS}} it assembles exactly one source
252b5132
RH
1172program. The source program is made up of one or more files.
1173(The standard input is also a file.)
1174
a4fb0134 1175You give @command{@value{AS}} a command line that has zero or more input file
252b5132
RH
1176names. The input files are read (from left file name to right). A
1177command line argument (in any position) that has no special meaning
1178is taken to be an input file name.
1179
a4fb0134
SC
1180If you give @command{@value{AS}} no file names it attempts to read one input file
1181from the @command{@value{AS}} standard input, which is normally your terminal. You
1182may have to type @key{ctl-D} to tell @command{@value{AS}} there is no more program
252b5132
RH
1183to assemble.
1184
1185Use @samp{--} if you need to explicitly name the standard input file
1186in your command line.
1187
a4fb0134 1188If the source is empty, @command{@value{AS}} produces a small, empty object
252b5132
RH
1189file.
1190
0285c67d
NC
1191@c man end
1192
252b5132
RH
1193@subheading Filenames and Line-numbers
1194
1195@cindex input file linenumbers
1196@cindex line numbers, in input files
1197There are two ways of locating a line in the input file (or files) and
1198either may be used in reporting error messages. One way refers to a line
1199number in a physical file; the other refers to a line number in a
1200``logical'' file. @xref{Errors, ,Error and Warning Messages}.
1201
1202@dfn{Physical files} are those files named in the command line given
a4fb0134 1203to @command{@value{AS}}.
252b5132
RH
1204
1205@dfn{Logical files} are simply names declared explicitly by assembler
1206directives; they bear no relation to physical files. Logical file names help
a4fb0134
SC
1207error messages reflect the original source file, when @command{@value{AS}} source
1208is itself synthesized from other files. @command{@value{AS}} understands the
252b5132
RH
1209@samp{#} directives emitted by the @code{@value{GCC}} preprocessor. See also
1210@ref{File,,@code{.file}}.
1211
1212@node Object
1213@section Output (Object) File
1214
1215@cindex object file
1216@cindex output file
1217@kindex a.out
1218@kindex .o
a4fb0134 1219Every time you run @command{@value{AS}} it produces an output file, which is
252b5132
RH
1220your assembly language program translated into numbers. This file
1221is the object file. Its default name is
1222@ifclear BOUT
1223@code{a.out}.
1224@end ifclear
1225@ifset BOUT
1226@ifset GENERIC
1227@code{a.out}, or
1228@end ifset
a4fb0134 1229@code{b.out} when @command{@value{AS}} is configured for the Intel 80960.
252b5132 1230@end ifset
a4fb0134 1231You can give it another name by using the @option{-o} option. Conventionally,
252b5132
RH
1232object file names end with @file{.o}. The default name is used for historical
1233reasons: older assemblers were capable of assembling self-contained programs
1234directly into a runnable program. (For some formats, this isn't currently
1235possible, but it can be done for the @code{a.out} format.)
1236
1237@cindex linker
1238@kindex ld
1239The object file is meant for input to the linker @code{@value{LD}}. It contains
1240assembled program code, information to help @code{@value{LD}} integrate
1241the assembled program into a runnable file, and (optionally) symbolic
1242information for the debugger.
1243
1244@c link above to some info file(s) like the description of a.out.
1245@c don't forget to describe @sc{gnu} info as well as Unix lossage.
1246
1247@node Errors
1248@section Error and Warning Messages
1249
0285c67d
NC
1250@c man begin DESCRIPTION
1251
a349d9dd 1252@cindex error messages
252b5132
RH
1253@cindex warning messages
1254@cindex messages from assembler
a4fb0134 1255@command{@value{AS}} may write warnings and error messages to the standard error
252b5132 1256file (usually your terminal). This should not happen when a compiler
a4fb0134
SC
1257runs @command{@value{AS}} automatically. Warnings report an assumption made so
1258that @command{@value{AS}} could keep assembling a flawed program; errors report a
252b5132
RH
1259grave problem that stops the assembly.
1260
0285c67d
NC
1261@c man end
1262
252b5132
RH
1263@cindex format of warning messages
1264Warning messages have the format
1265
1266@smallexample
1267file_name:@b{NNN}:Warning Message Text
1268@end smallexample
1269
1270@noindent
1271@cindex line numbers, in warnings/errors
1272(where @b{NNN} is a line number). If a logical file name has been given
1273(@pxref{File,,@code{.file}}) it is used for the filename, otherwise the name of
1274the current input file is used. If a logical line number was given
1275@ifset GENERIC
1276(@pxref{Line,,@code{.line}})
1277@end ifset
1278@ifclear GENERIC
1279@ifclear A29K
1280(@pxref{Line,,@code{.line}})
1281@end ifclear
1282@ifset A29K
1283(@pxref{Ln,,@code{.ln}})
1284@end ifset
1285@end ifclear
1286then it is used to calculate the number printed,
1287otherwise the actual line in the current source file is printed. The
1288message text is intended to be self explanatory (in the grand Unix
1289tradition).
1290
1291@cindex format of error messages
1292Error messages have the format
1293@smallexample
1294file_name:@b{NNN}:FATAL:Error Message Text
1295@end smallexample
1296The file name and line number are derived as for warning
1297messages. The actual message text may be rather less explanatory
1298because many of them aren't supposed to happen.
1299
1300@node Invoking
1301@chapter Command-Line Options
1302
1303@cindex options, all versions of assembler
1304This chapter describes command-line options available in @emph{all}
1305versions of the @sc{gnu} assembler; @pxref{Machine Dependencies}, for options specific
1306@ifclear GENERIC
1307to the @value{TARGET}.
1308@end ifclear
1309@ifset GENERIC
1310to particular machine architectures.
1311@end ifset
1312
0285c67d
NC
1313@c man begin DESCRIPTION
1314
a4fb0134 1315If you are invoking @command{@value{AS}} via the @sc{gnu} C compiler (version 2),
252b5132
RH
1316you can use the @samp{-Wa} option to pass arguments through to the assembler.
1317The assembler arguments must be separated from each other (and the @samp{-Wa})
1318by commas. For example:
1319
1320@smallexample
1321gcc -c -g -O -Wa,-alh,-L file.c
1322@end smallexample
1323
1324@noindent
1325This passes two options to the assembler: @samp{-alh} (emit a listing to
1326standard output with with high-level and assembly source) and @samp{-L} (retain
1327local symbols in the symbol table).
1328
1329Usually you do not need to use this @samp{-Wa} mechanism, since many compiler
1330command-line options are automatically passed to the assembler by the compiler.
1331(You can call the @sc{gnu} compiler driver with the @samp{-v} option to see
1332precisely what options it passes to each compilation pass, including the
1333assembler.)
1334
0285c67d
NC
1335@c man end
1336
252b5132
RH
1337@menu
1338* a:: -a[cdhlns] enable listings
1339* D:: -D for compatibility
1340* f:: -f to work faster
1341* I:: -I for .include search path
1342@ifclear DIFF-TBL-KLUGE
1343* K:: -K for compatibility
1344@end ifclear
1345@ifset DIFF-TBL-KLUGE
1346* K:: -K for difference tables
1347@end ifset
1348
1349* L:: -L to retain local labels
c3a27914 1350* listing:: --listing-XXX to configure listing output
252b5132
RH
1351* M:: -M or --mri to assemble in MRI compatibility mode
1352* MD:: --MD for dependency tracking
1353* o:: -o to name the object file
1354* R:: -R to join data and text sections
1355* statistics:: --statistics to see statistics about assembly
1356* traditional-format:: --traditional-format for compatible output
1357* v:: -v to announce version
2bdd6cf5 1358* W:: -W, --no-warn, --warn, --fatal-warnings to control warnings
252b5132
RH
1359* Z:: -Z to make object file even after errors
1360@end menu
1361
1362@node a
a4fb0134 1363@section Enable Listings: @option{-a[cdhlns]}
252b5132
RH
1364
1365@kindex -a
1366@kindex -ac
1367@kindex -ad
1368@kindex -ah
1369@kindex -al
1370@kindex -an
1371@kindex -as
1372@cindex listings, enabling
1373@cindex assembly listings, enabling
1374
1375These options enable listing output from the assembler. By itself,
1376@samp{-a} requests high-level, assembly, and symbols listing.
1377You can use other letters to select specific options for the list:
1378@samp{-ah} requests a high-level language listing,
1379@samp{-al} requests an output-program assembly listing, and
1380@samp{-as} requests a symbol table listing.
1381High-level listings require that a compiler debugging option like
1382@samp{-g} be used, and that assembly listings (@samp{-al}) be requested
1383also.
1384
1385Use the @samp{-ac} option to omit false conditionals from a listing. Any lines
1386which are not assembled because of a false @code{.if} (or @code{.ifdef}, or any
1387other conditional), or a true @code{.if} followed by an @code{.else}, will be
1388omitted from the listing.
1389
1390Use the @samp{-ad} option to omit debugging directives from the
1391listing.
1392
1393Once you have specified one of these options, you can further control
1394listing output and its appearance using the directives @code{.list},
1395@code{.nolist}, @code{.psize}, @code{.eject}, @code{.title}, and
1396@code{.sbttl}.
1397The @samp{-an} option turns off all forms processing.
1398If you do not request listing output with one of the @samp{-a} options, the
1399listing-control directives have no effect.
1400
1401The letters after @samp{-a} may be combined into one option,
1402@emph{e.g.}, @samp{-aln}.
1403
c3a27914
NC
1404Note if the assembler source is coming from the standard input (eg because it
1405is being created by @code{@value{GCC}} and the @samp{-pipe} command line switch
1406is being used) then the listing will not contain any comments or preprocessor
1407directives. This is because the listing code buffers input source lines from
1408stdin only after they have been preprocessed by the assembler. This reduces
1409memory usage and makes the code more efficient.
1410
252b5132 1411@node D
a4fb0134 1412@section @option{-D}
252b5132
RH
1413
1414@kindex -D
1415This option has no effect whatsoever, but it is accepted to make it more
1416likely that scripts written for other assemblers also work with
a4fb0134 1417@command{@value{AS}}.
252b5132
RH
1418
1419@node f
a4fb0134 1420@section Work Faster: @option{-f}
252b5132
RH
1421
1422@kindex -f
1423@cindex trusted compiler
a4fb0134 1424@cindex faster processing (@option{-f})
252b5132
RH
1425@samp{-f} should only be used when assembling programs written by a
1426(trusted) compiler. @samp{-f} stops the assembler from doing whitespace
1427and comment preprocessing on
1428the input file(s) before assembling them. @xref{Preprocessing,
1429,Preprocessing}.
1430
1431@quotation
1432@emph{Warning:} if you use @samp{-f} when the files actually need to be
a4fb0134 1433preprocessed (if they contain comments, for example), @command{@value{AS}} does
252b5132
RH
1434not work correctly.
1435@end quotation
1436
1437@node I
a4fb0134 1438@section @code{.include} search path: @option{-I} @var{path}
252b5132
RH
1439
1440@kindex -I @var{path}
1441@cindex paths for @code{.include}
1442@cindex search path for @code{.include}
1443@cindex @code{include} directive search path
1444Use this option to add a @var{path} to the list of directories
a4fb0134
SC
1445@command{@value{AS}} searches for files specified in @code{.include}
1446directives (@pxref{Include,,@code{.include}}). You may use @option{-I} as
252b5132 1447many times as necessary to include a variety of paths. The current
a4fb0134 1448working directory is always searched first; after that, @command{@value{AS}}
252b5132
RH
1449searches any @samp{-I} directories in the same order as they were
1450specified (left to right) on the command line.
1451
1452@node K
a4fb0134 1453@section Difference Tables: @option{-K}
252b5132
RH
1454
1455@kindex -K
1456@ifclear DIFF-TBL-KLUGE
1457On the @value{TARGET} family, this option is allowed, but has no effect. It is
1458permitted for compatibility with the @sc{gnu} assembler on other platforms,
1459where it can be used to warn when the assembler alters the machine code
1460generated for @samp{.word} directives in difference tables. The @value{TARGET}
1461family does not have the addressing limitations that sometimes lead to this
1462alteration on other platforms.
1463@end ifclear
1464
1465@ifset DIFF-TBL-KLUGE
1466@cindex difference tables, warning
1467@cindex warning for altered difference tables
a4fb0134 1468@command{@value{AS}} sometimes alters the code emitted for directives of the form
252b5132
RH
1469@samp{.word @var{sym1}-@var{sym2}}; @pxref{Word,,@code{.word}}.
1470You can use the @samp{-K} option if you want a warning issued when this
1471is done.
1472@end ifset
1473
1474@node L
a4fb0134 1475@section Include Local Labels: @option{-L}
252b5132
RH
1476
1477@kindex -L
1478@cindex local labels, retaining in output
1479Labels beginning with @samp{L} (upper case only) are called @dfn{local
1480labels}. @xref{Symbol Names}. Normally you do not see such labels when
1481debugging, because they are intended for the use of programs (like
1482compilers) that compose assembler programs, not for your notice.
a4fb0134 1483Normally both @command{@value{AS}} and @code{@value{LD}} discard such labels, so you do not
252b5132
RH
1484normally debug with them.
1485
a4fb0134 1486This option tells @command{@value{AS}} to retain those @samp{L@dots{}} symbols
252b5132
RH
1487in the object file. Usually if you do this you also tell the linker
1488@code{@value{LD}} to preserve symbols whose names begin with @samp{L}.
1489
1490By default, a local label is any label beginning with @samp{L}, but each
1491target is allowed to redefine the local label prefix.
1492@ifset HPPA
1493On the HPPA local labels begin with @samp{L$}.
1494@end ifset
252b5132 1495
c3a27914 1496@node listing
a4fb0134 1497@section Configuring listing output: @option{--listing}
c3a27914
NC
1498
1499The listing feature of the assembler can be enabled via the command line switch
1500@samp{-a} (@pxref{a}). This feature combines the input source file(s) with a
1501hex dump of the corresponding locations in the output object file, and displays
1502them as a listing file. The format of this listing can be controlled by pseudo
1503ops inside the assembler source (@pxref{List} @pxref{Title} @pxref{Sbttl}
1504@pxref{Psize} @pxref{Eject}) and also by the following switches:
1505
a4fb0134 1506@table @gcctabopt
c3a27914
NC
1507@item --listing-lhs-width=@samp{number}
1508@kindex --listing-lhs-width
1509@cindex Width of first line disassembly output
1510Sets the maximum width, in words, of the first line of the hex byte dump. This
1511dump appears on the left hand side of the listing output.
1512
1513@item --listing-lhs-width2=@samp{number}
1514@kindex --listing-lhs-width2
1515@cindex Width of continuation lines of disassembly output
1516Sets the maximum width, in words, of any further lines of the hex byte dump for
1517a given inut source line. If this value is not specified, it defaults to being
1518the same as the value specified for @samp{--listing-lhs-width}. If neither
1519switch is used the default is to one.
1520
1521@item --listing-rhs-width=@samp{number}
1522@kindex --listing-rhs-width
1523@cindex Width of source line output
1524Sets the maximum width, in characters, of the source line that is displayed
1525alongside the hex dump. The default value for this parameter is 100. The
1526source line is displayed on the right hand side of the listing output.
1527
1528@item --listing-cont-lines=@samp{number}
1529@kindex --listing-cont-lines
1530@cindex Maximum number of continuation lines
1531Sets the maximum number of continuation lines of hex dump that will be
1532displayed for a given single line of source input. The default value is 4.
1533@end table
1534
252b5132 1535@node M
a4fb0134 1536@section Assemble in MRI Compatibility Mode: @option{-M}
252b5132
RH
1537
1538@kindex -M
1539@cindex MRI compatibility mode
a4fb0134
SC
1540The @option{-M} or @option{--mri} option selects MRI compatibility mode. This
1541changes the syntax and pseudo-op handling of @command{@value{AS}} to make it
252b5132
RH
1542compatible with the @code{ASM68K} or the @code{ASM960} (depending upon the
1543configured target) assembler from Microtec Research. The exact nature of the
1544MRI syntax will not be documented here; see the MRI manuals for more
1545information. Note in particular that the handling of macros and macro
1546arguments is somewhat different. The purpose of this option is to permit
a4fb0134 1547assembling existing MRI assembler code using @command{@value{AS}}.
252b5132
RH
1548
1549The MRI compatibility is not complete. Certain operations of the MRI assembler
1550depend upon its object file format, and can not be supported using other object
1551file formats. Supporting these would require enhancing each object file format
1552individually. These are:
1553
1554@itemize @bullet
1555@item global symbols in common section
1556
1557The m68k MRI assembler supports common sections which are merged by the linker.
a4fb0134 1558Other object file formats do not support this. @command{@value{AS}} handles
252b5132
RH
1559common sections by treating them as a single common symbol. It permits local
1560symbols to be defined within a common section, but it can not support global
1561symbols, since it has no way to describe them.
1562
1563@item complex relocations
1564
1565The MRI assemblers support relocations against a negated section address, and
1566relocations which combine the start addresses of two or more sections. These
1567are not support by other object file formats.
1568
1569@item @code{END} pseudo-op specifying start address
1570
1571The MRI @code{END} pseudo-op permits the specification of a start address.
1572This is not supported by other object file formats. The start address may
a4fb0134 1573instead be specified using the @option{-e} option to the linker, or in a linker
252b5132
RH
1574script.
1575
1576@item @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops
1577
1578The MRI @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops assign a module
1579name to the output file. This is not supported by other object file formats.
1580
1581@item @code{ORG} pseudo-op
1582
1583The m68k MRI @code{ORG} pseudo-op begins an absolute section at a given
a4fb0134 1584address. This differs from the usual @command{@value{AS}} @code{.org} pseudo-op,
252b5132
RH
1585which changes the location within the current section. Absolute sections are
1586not supported by other object file formats. The address of a section may be
1587assigned within a linker script.
1588@end itemize
1589
1590There are some other features of the MRI assembler which are not supported by
a4fb0134 1591@command{@value{AS}}, typically either because they are difficult or because they
252b5132
RH
1592seem of little consequence. Some of these may be supported in future releases.
1593
1594@itemize @bullet
1595
1596@item EBCDIC strings
1597
1598EBCDIC strings are not supported.
1599
1600@item packed binary coded decimal
1601
1602Packed binary coded decimal is not supported. This means that the @code{DC.P}
1603and @code{DCB.P} pseudo-ops are not supported.
1604
1605@item @code{FEQU} pseudo-op
1606
1607The m68k @code{FEQU} pseudo-op is not supported.
1608
1609@item @code{NOOBJ} pseudo-op
1610
1611The m68k @code{NOOBJ} pseudo-op is not supported.
1612
1613@item @code{OPT} branch control options
1614
1615The m68k @code{OPT} branch control options---@code{B}, @code{BRS}, @code{BRB},
a4fb0134 1616@code{BRL}, and @code{BRW}---are ignored. @command{@value{AS}} automatically
252b5132
RH
1617relaxes all branches, whether forward or backward, to an appropriate size, so
1618these options serve no purpose.
1619
1620@item @code{OPT} list control options
1621
1622The following m68k @code{OPT} list control options are ignored: @code{C},
1623@code{CEX}, @code{CL}, @code{CRE}, @code{E}, @code{G}, @code{I}, @code{M},
1624@code{MEX}, @code{MC}, @code{MD}, @code{X}.
1625
1626@item other @code{OPT} options
1627
1628The following m68k @code{OPT} options are ignored: @code{NEST}, @code{O},
1629@code{OLD}, @code{OP}, @code{P}, @code{PCO}, @code{PCR}, @code{PCS}, @code{R}.
1630
1631@item @code{OPT} @code{D} option is default
1632
1633The m68k @code{OPT} @code{D} option is the default, unlike the MRI assembler.
1634@code{OPT NOD} may be used to turn it off.
1635
1636@item @code{XREF} pseudo-op.
1637
1638The m68k @code{XREF} pseudo-op is ignored.
1639
1640@item @code{.debug} pseudo-op
1641
1642The i960 @code{.debug} pseudo-op is not supported.
1643
1644@item @code{.extended} pseudo-op
1645
1646The i960 @code{.extended} pseudo-op is not supported.
1647
1648@item @code{.list} pseudo-op.
1649
1650The various options of the i960 @code{.list} pseudo-op are not supported.
1651
1652@item @code{.optimize} pseudo-op
1653
1654The i960 @code{.optimize} pseudo-op is not supported.
1655
1656@item @code{.output} pseudo-op
1657
1658The i960 @code{.output} pseudo-op is not supported.
1659
1660@item @code{.setreal} pseudo-op
1661
1662The i960 @code{.setreal} pseudo-op is not supported.
1663
1664@end itemize
1665
1666@node MD
a4fb0134 1667@section Dependency tracking: @option{--MD}
252b5132
RH
1668
1669@kindex --MD
1670@cindex dependency tracking
1671@cindex make rules
1672
a4fb0134 1673@command{@value{AS}} can generate a dependency file for the file it creates. This
252b5132
RH
1674file consists of a single rule suitable for @code{make} describing the
1675dependencies of the main source file.
1676
1677The rule is written to the file named in its argument.
1678
1679This feature is used in the automatic updating of makefiles.
1680
1681@node o
a4fb0134 1682@section Name the Object File: @option{-o}
252b5132
RH
1683
1684@kindex -o
1685@cindex naming object file
1686@cindex object file name
a4fb0134 1687There is always one object file output when you run @command{@value{AS}}. By
252b5132
RH
1688default it has the name
1689@ifset GENERIC
1690@ifset I960
1691@file{a.out} (or @file{b.out}, for Intel 960 targets only).
1692@end ifset
1693@ifclear I960
1694@file{a.out}.
1695@end ifclear
1696@end ifset
1697@ifclear GENERIC
1698@ifset I960
1699@file{b.out}.
1700@end ifset
1701@ifclear I960
1702@file{a.out}.
1703@end ifclear
1704@end ifclear
1705You use this option (which takes exactly one filename) to give the
1706object file a different name.
1707
a4fb0134 1708Whatever the object file is called, @command{@value{AS}} overwrites any
252b5132
RH
1709existing file of the same name.
1710
1711@node R
a4fb0134 1712@section Join Data and Text Sections: @option{-R}
252b5132
RH
1713
1714@kindex -R
1715@cindex data and text sections, joining
1716@cindex text and data sections, joining
1717@cindex joining text and data sections
1718@cindex merging text and data sections
a4fb0134 1719@option{-R} tells @command{@value{AS}} to write the object file as if all
252b5132
RH
1720data-section data lives in the text section. This is only done at
1721the very last moment: your binary data are the same, but data
1722section parts are relocated differently. The data section part of
1723your object file is zero bytes long because all its bytes are
1724appended to the text section. (@xref{Sections,,Sections and Relocation}.)
1725
a4fb0134 1726When you specify @option{-R} it would be possible to generate shorter
252b5132
RH
1727address displacements (because we do not have to cross between text and
1728data section). We refrain from doing this simply for compatibility with
a4fb0134 1729older versions of @command{@value{AS}}. In future, @option{-R} may work this way.
252b5132
RH
1730
1731@ifset COFF
a4fb0134 1732When @command{@value{AS}} is configured for COFF output,
252b5132
RH
1733this option is only useful if you use sections named @samp{.text} and
1734@samp{.data}.
1735@end ifset
1736
1737@ifset HPPA
a4fb0134
SC
1738@option{-R} is not supported for any of the HPPA targets. Using
1739@option{-R} generates a warning from @command{@value{AS}}.
252b5132
RH
1740@end ifset
1741
1742@node statistics
a4fb0134 1743@section Display Assembly Statistics: @option{--statistics}
252b5132
RH
1744
1745@kindex --statistics
1746@cindex statistics, about assembly
1747@cindex time, total for assembly
1748@cindex space used, maximum for assembly
1749Use @samp{--statistics} to display two statistics about the resources used by
a4fb0134 1750@command{@value{AS}}: the maximum amount of space allocated during the assembly
252b5132
RH
1751(in bytes), and the total execution time taken for the assembly (in @sc{cpu}
1752seconds).
1753
1754@node traditional-format
a4fb0134 1755@section Compatible output: @option{--traditional-format}
252b5132
RH
1756
1757@kindex --traditional-format
a4fb0134 1758For some targets, the output of @command{@value{AS}} is different in some ways
252b5132 1759from the output of some existing assembler. This switch requests
a4fb0134 1760@command{@value{AS}} to use the traditional format instead.
252b5132
RH
1761
1762For example, it disables the exception frame optimizations which
a4fb0134 1763@command{@value{AS}} normally does by default on @code{@value{GCC}} output.
252b5132
RH
1764
1765@node v
a4fb0134 1766@section Announce Version: @option{-v}
252b5132
RH
1767
1768@kindex -v
1769@kindex -version
1770@cindex assembler version
1771@cindex version of assembler
1772You can find out what version of as is running by including the
1773option @samp{-v} (which you can also spell as @samp{-version}) on the
1774command line.
1775
1776@node W
a4fb0134 1777@section Control Warnings: @option{-W}, @option{--warn}, @option{--no-warn}, @option{--fatal-warnings}
252b5132 1778
a4fb0134 1779@command{@value{AS}} should never give a warning or error message when
252b5132 1780assembling compiler output. But programs written by people often
a4fb0134 1781cause @command{@value{AS}} to give a warning that a particular assumption was
252b5132 1782made. All such warnings are directed to the standard error file.
2bdd6cf5
GK
1783
1784@kindex @samp{-W}
1785@kindex @samp{--no-warn}
1786@cindex suppressing warnings
1787@cindex warnings, suppressing
a4fb0134 1788If you use the @option{-W} and @option{--no-warn} options, no warnings are issued.
2bdd6cf5 1789This only affects the warning messages: it does not change any particular of
a4fb0134 1790how @command{@value{AS}} assembles your file. Errors, which stop the assembly,
2bdd6cf5
GK
1791are still reported.
1792
1793@kindex @samp{--fatal-warnings}
1794@cindex errors, caused by warnings
1795@cindex warnings, causing error
a4fb0134 1796If you use the @option{--fatal-warnings} option, @command{@value{AS}} considers
2bdd6cf5
GK
1797files that generate warnings to be in error.
1798
1799@kindex @samp{--warn}
1800@cindex warnings, switching on
a4fb0134 1801You can switch these options off again by specifying @option{--warn}, which
2bdd6cf5 1802causes warnings to be output as usual.
252b5132
RH
1803
1804@node Z
a4fb0134 1805@section Generate Object File in Spite of Errors: @option{-Z}
252b5132
RH
1806@cindex object file, after errors
1807@cindex errors, continuing after
a4fb0134 1808After an error message, @command{@value{AS}} normally produces no output. If for
252b5132 1809some reason you are interested in object file output even after
a4fb0134
SC
1810@command{@value{AS}} gives an error message on your program, use the @samp{-Z}
1811option. If there are any errors, @command{@value{AS}} continues anyways, and
252b5132
RH
1812writes an object file after a final warning message of the form @samp{@var{n}
1813errors, @var{m} warnings, generating bad object file.}
1814
1815@node Syntax
1816@chapter Syntax
1817
1818@cindex machine-independent syntax
1819@cindex syntax, machine-independent
1820This chapter describes the machine-independent syntax allowed in a
a4fb0134 1821source file. @command{@value{AS}} syntax is similar to what many other
252b5132
RH
1822assemblers use; it is inspired by the BSD 4.2
1823@ifclear VAX
1824assembler.
1825@end ifclear
1826@ifset VAX
a4fb0134 1827assembler, except that @command{@value{AS}} does not assemble Vax bit-fields.
252b5132
RH
1828@end ifset
1829
1830@menu
1831* Preprocessing:: Preprocessing
1832* Whitespace:: Whitespace
1833* Comments:: Comments
1834* Symbol Intro:: Symbols
1835* Statements:: Statements
1836* Constants:: Constants
1837@end menu
1838
1839@node Preprocessing
1840@section Preprocessing
1841
1842@cindex preprocessing
a4fb0134 1843The @command{@value{AS}} internal preprocessor:
252b5132
RH
1844@itemize @bullet
1845@cindex whitespace, removed by preprocessor
1846@item
1847adjusts and removes extra whitespace. It leaves one space or tab before
1848the keywords on a line, and turns any other whitespace on the line into
1849a single space.
1850
1851@cindex comments, removed by preprocessor
1852@item
1853removes all comments, replacing them with a single space, or an
1854appropriate number of newlines.
1855
1856@cindex constants, converted by preprocessor
1857@item
1858converts character constants into the appropriate numeric values.
1859@end itemize
1860
1861It does not do macro processing, include file handling, or
1862anything else you may get from your C compiler's preprocessor. You can
1863do include file processing with the @code{.include} directive
1864(@pxref{Include,,@code{.include}}). You can use the @sc{gnu} C compiler driver
1865to get other ``CPP'' style preprocessing, by giving the input file a
1866@samp{.S} suffix. @xref{Overall Options,, Options Controlling the Kind of
1867Output, gcc.info, Using GNU CC}.
1868
1869Excess whitespace, comments, and character constants
1870cannot be used in the portions of the input text that are not
1871preprocessed.
1872
1873@cindex turning preprocessing on and off
1874@cindex preprocessing, turning on and off
1875@kindex #NO_APP
1876@kindex #APP
1877If the first line of an input file is @code{#NO_APP} or if you use the
1878@samp{-f} option, whitespace and comments are not removed from the input file.
1879Within an input file, you can ask for whitespace and comment removal in
1880specific portions of the by putting a line that says @code{#APP} before the
1881text that may contain whitespace or comments, and putting a line that says
1882@code{#NO_APP} after this text. This feature is mainly intend to support
1883@code{asm} statements in compilers whose output is otherwise free of comments
1884and whitespace.
1885
1886@node Whitespace
1887@section Whitespace
1888
1889@cindex whitespace
1890@dfn{Whitespace} is one or more blanks or tabs, in any order.
1891Whitespace is used to separate symbols, and to make programs neater for
1892people to read. Unless within character constants
1893(@pxref{Characters,,Character Constants}), any whitespace means the same
1894as exactly one space.
1895
1896@node Comments
1897@section Comments
1898
1899@cindex comments
a4fb0134 1900There are two ways of rendering comments to @command{@value{AS}}. In both
252b5132
RH
1901cases the comment is equivalent to one space.
1902
1903Anything from @samp{/*} through the next @samp{*/} is a comment.
1904This means you may not nest these comments.
1905
1906@smallexample
1907/*
1908 The only way to include a newline ('\n') in a comment
1909 is to use this sort of comment.
1910*/
1911
1912/* This sort of comment does not nest. */
1913@end smallexample
1914
1915@cindex line comment character
1916Anything from the @dfn{line comment} character to the next newline
1917is considered a comment and is ignored. The line comment character is
1918@ifset A29K
1919@samp{;} for the AMD 29K family;
1920@end ifset
1921@ifset ARC
1922@samp{;} on the ARC;
1923@end ifset
550262c4
NC
1924@ifset ARM
1925@samp{@@} on the ARM;
1926@end ifset
252b5132
RH
1927@ifset H8/300
1928@samp{;} for the H8/300 family;
1929@end ifset
1930@ifset H8/500
1931@samp{!} for the H8/500 family;
1932@end ifset
1933@ifset HPPA
1934@samp{;} for the HPPA;
1935@end ifset
55b62671
AJ
1936@ifset I80386
1937@samp{#} on the i386 and x86-64;
1938@end ifset
252b5132
RH
1939@ifset I960
1940@samp{#} on the i960;
1941@end ifset
e135f41b
NC
1942@ifset PDP11
1943@samp{;} for the PDP-11;
1944@end ifset
041dd5a9
ILT
1945@ifset PJ
1946@samp{;} for picoJava;
1947@end ifset
418c1742
MG
1948@ifset PPC
1949@samp{;} for Motorola PowerPC;
1950@end ifset
252b5132
RH
1951@ifset SH
1952@samp{!} for the Hitachi SH;
1953@end ifset
1954@ifset SPARC
1955@samp{!} on the SPARC;
1956@end ifset
1957@ifset M32R
1958@samp{#} on the m32r;
1959@end ifset
1960@ifset M680X0
1961@samp{|} on the 680x0;
1962@end ifset
60bcf0fa
NC
1963@ifset M68HC11
1964@samp{#} on the 68HC11 and 68HC12;
1965@end ifset
81b0b3f1
BE
1966@ifset M880X0
1967@samp{;} on the M880x0;
1968@end ifset
252b5132
RH
1969@ifset VAX
1970@samp{#} on the Vax;
1971@end ifset
1972@ifset Z8000
1973@samp{!} for the Z8000;
1974@end ifset
1975@ifset V850
1976@samp{#} on the V850;
1977@end ifset
1978see @ref{Machine Dependencies}. @refill
81b0b3f1 1979@c FIXME What about i860?
252b5132
RH
1980
1981@ifset GENERIC
1982On some machines there are two different line comment characters. One
1983character only begins a comment if it is the first non-whitespace character on
1984a line, while the other always begins a comment.
1985@end ifset
1986
1987@ifset V850
1988The V850 assembler also supports a double dash as starting a comment that
1989extends to the end of the line.
1990
1991@samp{--};
1992@end ifset
1993
1994@kindex #
1995@cindex lines starting with @code{#}
1996@cindex logical line numbers
1997To be compatible with past assemblers, lines that begin with @samp{#} have a
1998special interpretation. Following the @samp{#} should be an absolute
1999expression (@pxref{Expressions}): the logical line number of the @emph{next}
2000line. Then a string (@pxref{Strings,, Strings}) is allowed: if present it is a
2001new logical file name. The rest of the line, if any, should be whitespace.
2002
2003If the first non-whitespace characters on the line are not numeric,
2004the line is ignored. (Just like a comment.)
2005
2006@smallexample
2007 # This is an ordinary comment.
2008# 42-6 "new_file_name" # New logical file name
2009 # This is logical line # 36.
2010@end smallexample
2011This feature is deprecated, and may disappear from future versions
a4fb0134 2012of @command{@value{AS}}.
252b5132
RH
2013
2014@node Symbol Intro
2015@section Symbols
2016
2017@cindex characters used in symbols
2018@ifclear SPECIAL-SYMS
2019A @dfn{symbol} is one or more characters chosen from the set of all
2020letters (both upper and lower case), digits and the three characters
2021@samp{_.$}.
2022@end ifclear
2023@ifset SPECIAL-SYMS
2024@ifclear GENERIC
2025@ifset H8
2026A @dfn{symbol} is one or more characters chosen from the set of all
2027letters (both upper and lower case), digits and the three characters
2028@samp{._$}. (Save that, on the H8/300 only, you may not use @samp{$} in
2029symbol names.)
2030@end ifset
2031@end ifclear
2032@end ifset
2033@ifset GENERIC
2034On most machines, you can also use @code{$} in symbol names; exceptions
2035are noted in @ref{Machine Dependencies}.
2036@end ifset
2037No symbol may begin with a digit. Case is significant.
2038There is no length limit: all characters are significant. Symbols are
2039delimited by characters not in that set, or by the beginning of a file
2040(since the source program must end with a newline, the end of a file is
2041not a possible symbol delimiter). @xref{Symbols}.
2042@cindex length of symbols
2043
2044@node Statements
2045@section Statements
2046
2047@cindex statements, structure of
2048@cindex line separator character
2049@cindex statement separator character
2050@ifclear GENERIC
2051@ifclear abnormal-separator
2052A @dfn{statement} ends at a newline character (@samp{\n}) or at a
2053semicolon (@samp{;}). The newline or semicolon is considered part of
2054the preceding statement. Newlines and semicolons within character
2055constants are an exception: they do not end statements.
2056@end ifclear
2057@ifset abnormal-separator
2058@ifset A29K
2059A @dfn{statement} ends at a newline character (@samp{\n}) or an ``at''
2060sign (@samp{@@}). The newline or at sign is considered part of the
2061preceding statement. Newlines and at signs within character constants
2062are an exception: they do not end statements.
2063@end ifset
2064@ifset HPPA
2065A @dfn{statement} ends at a newline character (@samp{\n}) or an exclamation
2066point (@samp{!}). The newline or exclamation point is considered part of the
2067preceding statement. Newlines and exclamation points within character
2068constants are an exception: they do not end statements.
2069@end ifset
2070@ifset H8
2071A @dfn{statement} ends at a newline character (@samp{\n}); or (for the
2072H8/300) a dollar sign (@samp{$}); or (for the
2073Hitachi-SH or the
2074H8/500) a semicolon
2075(@samp{;}). The newline or separator character is considered part of
2076the preceding statement. Newlines and separators within character
2077constants are an exception: they do not end statements.
2078@end ifset
2079@end ifset
2080@end ifclear
2081@ifset GENERIC
2082A @dfn{statement} ends at a newline character (@samp{\n}) or line
2083separator character. (The line separator is usually @samp{;}, unless
2084this conflicts with the comment character; @pxref{Machine Dependencies}.) The
2085newline or separator character is considered part of the preceding
2086statement. Newlines and separators within character constants are an
2087exception: they do not end statements.
2088@end ifset
2089
2090@cindex newline, required at file end
2091@cindex EOF, newline must precede
2092It is an error to end any statement with end-of-file: the last
2093character of any input file should be a newline.@refill
2094
2095An empty statement is allowed, and may include whitespace. It is ignored.
2096
2097@cindex instructions and directives
2098@cindex directives and instructions
2099@c "key symbol" is not used elsewhere in the document; seems pedantic to
2100@c @defn{} it in that case, as was done previously... doc@cygnus.com,
2101@c 13feb91.
2102A statement begins with zero or more labels, optionally followed by a
2103key symbol which determines what kind of statement it is. The key
2104symbol determines the syntax of the rest of the statement. If the
2105symbol begins with a dot @samp{.} then the statement is an assembler
2106directive: typically valid for any computer. If the symbol begins with
2107a letter the statement is an assembly language @dfn{instruction}: it
2108assembles into a machine language instruction.
2109@ifset GENERIC
a4fb0134 2110Different versions of @command{@value{AS}} for different computers
252b5132
RH
2111recognize different instructions. In fact, the same symbol may
2112represent a different instruction in a different computer's assembly
2113language.@refill
2114@end ifset
2115
2116@cindex @code{:} (label)
2117@cindex label (@code{:})
2118A label is a symbol immediately followed by a colon (@code{:}).
2119Whitespace before a label or after a colon is permitted, but you may not
2120have whitespace between a label's symbol and its colon. @xref{Labels}.
2121
2122@ifset HPPA
2123For HPPA targets, labels need not be immediately followed by a colon, but
2124the definition of a label must begin in column zero. This also implies that
2125only one label may be defined on each line.
2126@end ifset
2127
2128@smallexample
2129label: .directive followed by something
2130another_label: # This is an empty statement.
2131 instruction operand_1, operand_2, @dots{}
2132@end smallexample
2133
2134@node Constants
2135@section Constants
2136
2137@cindex constants
2138A constant is a number, written so that its value is known by
2139inspection, without knowing any context. Like this:
2140@smallexample
2141@group
2142.byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
2143.ascii "Ring the bell\7" # A string constant.
2144.octa 0x123456789abcdef0123456789ABCDEF0 # A bignum.
2145.float 0f-314159265358979323846264338327\
214695028841971.693993751E-40 # - pi, a flonum.
2147@end group
2148@end smallexample
2149
2150@menu
2151* Characters:: Character Constants
2152* Numbers:: Number Constants
2153@end menu
2154
2155@node Characters
2156@subsection Character Constants
2157
2158@cindex character constants
2159@cindex constants, character
2160There are two kinds of character constants. A @dfn{character} stands
2161for one character in one byte and its value may be used in
2162numeric expressions. String constants (properly called string
2163@emph{literals}) are potentially many bytes and their values may not be
2164used in arithmetic expressions.
2165
2166@menu
2167* Strings:: Strings
2168* Chars:: Characters
2169@end menu
2170
2171@node Strings
2172@subsubsection Strings
2173
2174@cindex string constants
2175@cindex constants, string
2176A @dfn{string} is written between double-quotes. It may contain
2177double-quotes or null characters. The way to get special characters
2178into a string is to @dfn{escape} these characters: precede them with
2179a backslash @samp{\} character. For example @samp{\\} represents
2180one backslash: the first @code{\} is an escape which tells
a4fb0134
SC
2181@command{@value{AS}} to interpret the second character literally as a backslash
2182(which prevents @command{@value{AS}} from recognizing the second @code{\} as an
252b5132
RH
2183escape character). The complete list of escapes follows.
2184
2185@cindex escape codes, character
2186@cindex character escape codes
2187@table @kbd
2188@c @item \a
2189@c Mnemonic for ACKnowledge; for ASCII this is octal code 007.
2190@c
2191@cindex @code{\b} (backspace character)
2192@cindex backspace (@code{\b})
2193@item \b
2194Mnemonic for backspace; for ASCII this is octal code 010.
2195
2196@c @item \e
2197@c Mnemonic for EOText; for ASCII this is octal code 004.
2198@c
2199@cindex @code{\f} (formfeed character)
2200@cindex formfeed (@code{\f})
2201@item \f
2202Mnemonic for FormFeed; for ASCII this is octal code 014.
2203
2204@cindex @code{\n} (newline character)
2205@cindex newline (@code{\n})
2206@item \n
2207Mnemonic for newline; for ASCII this is octal code 012.
2208
2209@c @item \p
2210@c Mnemonic for prefix; for ASCII this is octal code 033, usually known as @code{escape}.
2211@c
2212@cindex @code{\r} (carriage return character)
2213@cindex carriage return (@code{\r})
2214@item \r
2215Mnemonic for carriage-Return; for ASCII this is octal code 015.
2216
2217@c @item \s
2218@c Mnemonic for space; for ASCII this is octal code 040. Included for compliance with
2219@c other assemblers.
2220@c
2221@cindex @code{\t} (tab)
2222@cindex tab (@code{\t})
2223@item \t
2224Mnemonic for horizontal Tab; for ASCII this is octal code 011.
2225
2226@c @item \v
2227@c Mnemonic for Vertical tab; for ASCII this is octal code 013.
2228@c @item \x @var{digit} @var{digit} @var{digit}
2229@c A hexadecimal character code. The numeric code is 3 hexadecimal digits.
2230@c
2231@cindex @code{\@var{ddd}} (octal character code)
2232@cindex octal character code (@code{\@var{ddd}})
2233@item \ @var{digit} @var{digit} @var{digit}
2234An octal character code. The numeric code is 3 octal digits.
2235For compatibility with other Unix systems, 8 and 9 are accepted as digits:
2236for example, @code{\008} has the value 010, and @code{\009} the value 011.
2237
2238@cindex @code{\@var{xd...}} (hex character code)
2239@cindex hex character code (@code{\@var{xd...}})
2240@item \@code{x} @var{hex-digits...}
2241A hex character code. All trailing hex digits are combined. Either upper or
2242lower case @code{x} works.
2243
2244@cindex @code{\\} (@samp{\} character)
2245@cindex backslash (@code{\\})
2246@item \\
2247Represents one @samp{\} character.
2248
2249@c @item \'
2250@c Represents one @samp{'} (accent acute) character.
2251@c This is needed in single character literals
2252@c (@xref{Characters,,Character Constants}.) to represent
2253@c a @samp{'}.
2254@c
2255@cindex @code{\"} (doublequote character)
2256@cindex doublequote (@code{\"})
2257@item \"
2258Represents one @samp{"} character. Needed in strings to represent
2259this character, because an unescaped @samp{"} would end the string.
2260
2261@item \ @var{anything-else}
2262Any other character when escaped by @kbd{\} gives a warning, but
2263assembles as if the @samp{\} was not present. The idea is that if
2264you used an escape sequence you clearly didn't want the literal
a4fb0134
SC
2265interpretation of the following character. However @command{@value{AS}} has no
2266other interpretation, so @command{@value{AS}} knows it is giving you the wrong
252b5132
RH
2267code and warns you of the fact.
2268@end table
2269
2270Which characters are escapable, and what those escapes represent,
2271varies widely among assemblers. The current set is what we think
2272the BSD 4.2 assembler recognizes, and is a subset of what most C
2273compilers recognize. If you are in doubt, do not use an escape
2274sequence.
2275
2276@node Chars
2277@subsubsection Characters
2278
2279@cindex single character constant
2280@cindex character, single
2281@cindex constant, single character
2282A single character may be written as a single quote immediately
2283followed by that character. The same escapes apply to characters as
2284to strings. So if you want to write the character backslash, you
2285must write @kbd{'\\} where the first @code{\} escapes the second
2286@code{\}. As you can see, the quote is an acute accent, not a
2287grave accent. A newline
2288@ifclear GENERIC
2289@ifclear abnormal-separator
2290(or semicolon @samp{;})
2291@end ifclear
2292@ifset abnormal-separator
2293@ifset A29K
2294(or at sign @samp{@@})
2295@end ifset
2296@ifset H8
2297(or dollar sign @samp{$}, for the H8/300; or semicolon @samp{;} for the
2298Hitachi SH or
2299H8/500)
2300@end ifset
2301@end ifset
2302@end ifclear
2303immediately following an acute accent is taken as a literal character
2304and does not count as the end of a statement. The value of a character
2305constant in a numeric expression is the machine's byte-wide code for
a4fb0134 2306that character. @command{@value{AS}} assumes your character code is ASCII:
252b5132
RH
2307@kbd{'A} means 65, @kbd{'B} means 66, and so on. @refill
2308
2309@node Numbers
2310@subsection Number Constants
2311
2312@cindex constants, number
2313@cindex number constants
a4fb0134 2314@command{@value{AS}} distinguishes three kinds of numbers according to how they
252b5132
RH
2315are stored in the target machine. @emph{Integers} are numbers that
2316would fit into an @code{int} in the C language. @emph{Bignums} are
2317integers, but they are stored in more than 32 bits. @emph{Flonums}
2318are floating point numbers, described below.
2319
2320@menu
2321* Integers:: Integers
2322* Bignums:: Bignums
2323* Flonums:: Flonums
2324@ifclear GENERIC
2325@ifset I960
2326* Bit Fields:: Bit Fields
2327@end ifset
2328@end ifclear
2329@end menu
2330
2331@node Integers
2332@subsubsection Integers
2333@cindex integers
2334@cindex constants, integer
2335
2336@cindex binary integers
2337@cindex integers, binary
2338A binary integer is @samp{0b} or @samp{0B} followed by zero or more of
2339the binary digits @samp{01}.
2340
2341@cindex octal integers
2342@cindex integers, octal
2343An octal integer is @samp{0} followed by zero or more of the octal
2344digits (@samp{01234567}).
2345
2346@cindex decimal integers
2347@cindex integers, decimal
2348A decimal integer starts with a non-zero digit followed by zero or
2349more digits (@samp{0123456789}).
2350
2351@cindex hexadecimal integers
2352@cindex integers, hexadecimal
2353A hexadecimal integer is @samp{0x} or @samp{0X} followed by one or
2354more hexadecimal digits chosen from @samp{0123456789abcdefABCDEF}.
2355
2356Integers have the usual values. To denote a negative integer, use
2357the prefix operator @samp{-} discussed under expressions
2358(@pxref{Prefix Ops,,Prefix Operators}).
2359
2360@node Bignums
2361@subsubsection Bignums
2362
2363@cindex bignums
2364@cindex constants, bignum
2365A @dfn{bignum} has the same syntax and semantics as an integer
2366except that the number (or its negative) takes more than 32 bits to
2367represent in binary. The distinction is made because in some places
2368integers are permitted while bignums are not.
2369
2370@node Flonums
2371@subsubsection Flonums
2372@cindex flonums
2373@cindex floating point numbers
2374@cindex constants, floating point
2375
2376@cindex precision, floating point
2377A @dfn{flonum} represents a floating point number. The translation is
2378indirect: a decimal floating point number from the text is converted by
a4fb0134 2379@command{@value{AS}} to a generic binary floating point number of more than
252b5132
RH
2380sufficient precision. This generic floating point number is converted
2381to a particular computer's floating point format (or formats) by a
a4fb0134 2382portion of @command{@value{AS}} specialized to that computer.
252b5132
RH
2383
2384A flonum is written by writing (in order)
2385@itemize @bullet
2386@item
2387The digit @samp{0}.
2388@ifset HPPA
2389(@samp{0} is optional on the HPPA.)
2390@end ifset
2391
2392@item
a4fb0134 2393A letter, to tell @command{@value{AS}} the rest of the number is a flonum.
252b5132
RH
2394@ifset GENERIC
2395@kbd{e} is recommended. Case is not important.
2396@ignore
2397@c FIXME: verify if flonum syntax really this vague for most cases
2398(Any otherwise illegal letter works here, but that might be changed. Vax BSD
23994.2 assembler seems to allow any of @samp{defghDEFGH}.)
2400@end ignore
2401
2402On the H8/300, H8/500,
2403Hitachi SH,
2404and AMD 29K architectures, the letter must be
2405one of the letters @samp{DFPRSX} (in upper or lower case).
2406
2407On the ARC, the letter must be one of the letters @samp{DFRS}
2408(in upper or lower case).
2409
2410On the Intel 960 architecture, the letter must be
2411one of the letters @samp{DFT} (in upper or lower case).
2412
2413On the HPPA architecture, the letter must be @samp{E} (upper case only).
2414@end ifset
2415@ifclear GENERIC
2416@ifset A29K
2417One of the letters @samp{DFPRSX} (in upper or lower case).
2418@end ifset
2419@ifset ARC
2420One of the letters @samp{DFRS} (in upper or lower case).
2421@end ifset
2422@ifset H8
2423One of the letters @samp{DFPRSX} (in upper or lower case).
2424@end ifset
2425@ifset HPPA
2426The letter @samp{E} (upper case only).
2427@end ifset
2428@ifset I960
2429One of the letters @samp{DFT} (in upper or lower case).
2430@end ifset
2431@end ifclear
2432
2433@item
2434An optional sign: either @samp{+} or @samp{-}.
2435
2436@item
2437An optional @dfn{integer part}: zero or more decimal digits.
2438
2439@item
2440An optional @dfn{fractional part}: @samp{.} followed by zero
2441or more decimal digits.
2442
2443@item
2444An optional exponent, consisting of:
2445
2446@itemize @bullet
2447@item
2448An @samp{E} or @samp{e}.
2449@c I can't find a config where "EXP_CHARS" is other than 'eE', but in
2450@c principle this can perfectly well be different on different targets.
2451@item
2452Optional sign: either @samp{+} or @samp{-}.
2453@item
2454One or more decimal digits.
2455@end itemize
2456
2457@end itemize
2458
2459At least one of the integer part or the fractional part must be
2460present. The floating point number has the usual base-10 value.
2461
a4fb0134 2462@command{@value{AS}} does all processing using integers. Flonums are computed
252b5132 2463independently of any floating point hardware in the computer running
a4fb0134 2464@command{@value{AS}}.
252b5132
RH
2465
2466@ifclear GENERIC
2467@ifset I960
2468@c Bit fields are written as a general facility but are also controlled
2469@c by a conditional-compilation flag---which is as of now (21mar91)
2470@c turned on only by the i960 config of GAS.
2471@node Bit Fields
2472@subsubsection Bit Fields
2473
2474@cindex bit fields
2475@cindex constants, bit field
2476You can also define numeric constants as @dfn{bit fields}.
2477specify two numbers separated by a colon---
2478@example
2479@var{mask}:@var{value}
2480@end example
2481@noindent
a4fb0134 2482@command{@value{AS}} applies a bitwise @sc{and} between @var{mask} and
252b5132
RH
2483@var{value}.
2484
2485The resulting number is then packed
2486@ifset GENERIC
2487@c this conditional paren in case bit fields turned on elsewhere than 960
2488(in host-dependent byte order)
2489@end ifset
2490into a field whose width depends on which assembler directive has the
2491bit-field as its argument. Overflow (a result from the bitwise and
2492requiring more binary digits to represent) is not an error; instead,
2493more constants are generated, of the specified width, beginning with the
2494least significant digits.@refill
2495
2496The directives @code{.byte}, @code{.hword}, @code{.int}, @code{.long},
2497@code{.short}, and @code{.word} accept bit-field arguments.
2498@end ifset
2499@end ifclear
2500
2501@node Sections
2502@chapter Sections and Relocation
2503@cindex sections
2504@cindex relocation
2505
2506@menu
2507* Secs Background:: Background
2508* Ld Sections:: Linker Sections
2509* As Sections:: Assembler Internal Sections
2510* Sub-Sections:: Sub-Sections
2511* bss:: bss Section
2512@end menu
2513
2514@node Secs Background
2515@section Background
2516
2517Roughly, a section is a range of addresses, with no gaps; all data
2518``in'' those addresses is treated the same for some particular purpose.
2519For example there may be a ``read only'' section.
2520
2521@cindex linker, and assembler
2522@cindex assembler, and linker
2523The linker @code{@value{LD}} reads many object files (partial programs) and
a4fb0134 2524combines their contents to form a runnable program. When @command{@value{AS}}
252b5132
RH
2525emits an object file, the partial program is assumed to start at address 0.
2526@code{@value{LD}} assigns the final addresses for the partial program, so that
2527different partial programs do not overlap. This is actually an
a4fb0134 2528oversimplification, but it suffices to explain how @command{@value{AS}} uses
252b5132
RH
2529sections.
2530
2531@code{@value{LD}} moves blocks of bytes of your program to their run-time
2532addresses. These blocks slide to their run-time addresses as rigid
2533units; their length does not change and neither does the order of bytes
2534within them. Such a rigid unit is called a @emph{section}. Assigning
2535run-time addresses to sections is called @dfn{relocation}. It includes
2536the task of adjusting mentions of object-file addresses so they refer to
2537the proper run-time addresses.
2538@ifset H8
2539For the H8/300 and H8/500,
2540and for the Hitachi SH,
a4fb0134 2541@command{@value{AS}} pads sections if needed to
252b5132
RH
2542ensure they end on a word (sixteen bit) boundary.
2543@end ifset
2544
2545@cindex standard assembler sections
a4fb0134 2546An object file written by @command{@value{AS}} has at least three sections, any
252b5132
RH
2547of which may be empty. These are named @dfn{text}, @dfn{data} and
2548@dfn{bss} sections.
2549
2550@ifset COFF
2551@ifset GENERIC
2552When it generates COFF output,
2553@end ifset
a4fb0134 2554@command{@value{AS}} can also generate whatever other named sections you specify
252b5132
RH
2555using the @samp{.section} directive (@pxref{Section,,@code{.section}}).
2556If you do not use any directives that place output in the @samp{.text}
2557or @samp{.data} sections, these sections still exist, but are empty.
2558@end ifset
2559
2560@ifset HPPA
2561@ifset GENERIC
a4fb0134 2562When @command{@value{AS}} generates SOM or ELF output for the HPPA,
252b5132 2563@end ifset
a4fb0134 2564@command{@value{AS}} can also generate whatever other named sections you
252b5132
RH
2565specify using the @samp{.space} and @samp{.subspace} directives. See
2566@cite{HP9000 Series 800 Assembly Language Reference Manual}
2567(HP 92432-90001) for details on the @samp{.space} and @samp{.subspace}
2568assembler directives.
2569
2570@ifset SOM
a4fb0134 2571Additionally, @command{@value{AS}} uses different names for the standard
252b5132
RH
2572text, data, and bss sections when generating SOM output. Program text
2573is placed into the @samp{$CODE$} section, data into @samp{$DATA$}, and
2574BSS into @samp{$BSS$}.
2575@end ifset
2576@end ifset
2577
2578Within the object file, the text section starts at address @code{0}, the
2579data section follows, and the bss section follows the data section.
2580
2581@ifset HPPA
2582When generating either SOM or ELF output files on the HPPA, the text
2583section starts at address @code{0}, the data section at address
2584@code{0x4000000}, and the bss section follows the data section.
2585@end ifset
2586
2587To let @code{@value{LD}} know which data changes when the sections are
a4fb0134 2588relocated, and how to change that data, @command{@value{AS}} also writes to the
252b5132
RH
2589object file details of the relocation needed. To perform relocation
2590@code{@value{LD}} must know, each time an address in the object
2591file is mentioned:
2592@itemize @bullet
2593@item
2594Where in the object file is the beginning of this reference to
2595an address?
2596@item
2597How long (in bytes) is this reference?
2598@item
2599Which section does the address refer to? What is the numeric value of
2600@display
2601(@var{address}) @minus{} (@var{start-address of section})?
2602@end display
2603@item
2604Is the reference to an address ``Program-Counter relative''?
2605@end itemize
2606
2607@cindex addresses, format of
2608@cindex section-relative addressing
a4fb0134 2609In fact, every address @command{@value{AS}} ever uses is expressed as
252b5132
RH
2610@display
2611(@var{section}) + (@var{offset into section})
2612@end display
2613@noindent
a4fb0134 2614Further, most expressions @command{@value{AS}} computes have this section-relative
252b5132
RH
2615nature.
2616@ifset SOM
2617(For some object formats, such as SOM for the HPPA, some expressions are
2618symbol-relative instead.)
2619@end ifset
2620
2621In this manual we use the notation @{@var{secname} @var{N}@} to mean ``offset
2622@var{N} into section @var{secname}.''
2623
2624Apart from text, data and bss sections you need to know about the
2625@dfn{absolute} section. When @code{@value{LD}} mixes partial programs,
2626addresses in the absolute section remain unchanged. For example, address
2627@code{@{absolute 0@}} is ``relocated'' to run-time address 0 by
2628@code{@value{LD}}. Although the linker never arranges two partial programs'
2629data sections with overlapping addresses after linking, @emph{by definition}
2630their absolute sections must overlap. Address @code{@{absolute@ 239@}} in one
2631part of a program is always the same address when the program is running as
2632address @code{@{absolute@ 239@}} in any other part of the program.
2633
2634The idea of sections is extended to the @dfn{undefined} section. Any
2635address whose section is unknown at assembly time is by definition
2636rendered @{undefined @var{U}@}---where @var{U} is filled in later.
2637Since numbers are always defined, the only way to generate an undefined
2638address is to mention an undefined symbol. A reference to a named
2639common block would be such a symbol: its value is unknown at assembly
2640time so it has section @emph{undefined}.
2641
2642By analogy the word @emph{section} is used to describe groups of sections in
2643the linked program. @code{@value{LD}} puts all partial programs' text
2644sections in contiguous addresses in the linked program. It is
2645customary to refer to the @emph{text section} of a program, meaning all
2646the addresses of all partial programs' text sections. Likewise for
2647data and bss sections.
2648
2649Some sections are manipulated by @code{@value{LD}}; others are invented for
a4fb0134 2650use of @command{@value{AS}} and have no meaning except during assembly.
252b5132
RH
2651
2652@node Ld Sections
2653@section Linker Sections
2654@code{@value{LD}} deals with just four kinds of sections, summarized below.
2655
2656@table @strong
2657
2658@ifset COFF
2659@cindex named sections
2660@cindex sections, named
2661@item named sections
2662@end ifset
2663@ifset aout-bout
2664@cindex text section
2665@cindex data section
2666@itemx text section
2667@itemx data section
2668@end ifset
a4fb0134 2669These sections hold your program. @command{@value{AS}} and @code{@value{LD}} treat them as
252b5132
RH
2670separate but equal sections. Anything you can say of one section is
2671true another.
2672@ifset aout-bout
2673When the program is running, however, it is
2674customary for the text section to be unalterable. The
2675text section is often shared among processes: it contains
2676instructions, constants and the like. The data section of a running
2677program is usually alterable: for example, C variables would be stored
2678in the data section.
2679@end ifset
2680
2681@cindex bss section
2682@item bss section
2683This section contains zeroed bytes when your program begins running. It
a349d9dd 2684is used to hold uninitialized variables or common storage. The length of
252b5132
RH
2685each partial program's bss section is important, but because it starts
2686out containing zeroed bytes there is no need to store explicit zero
2687bytes in the object file. The bss section was invented to eliminate
2688those explicit zeros from object files.
2689
2690@cindex absolute section
2691@item absolute section
2692Address 0 of this section is always ``relocated'' to runtime address 0.
2693This is useful if you want to refer to an address that @code{@value{LD}} must
2694not change when relocating. In this sense we speak of absolute
2695addresses being ``unrelocatable'': they do not change during relocation.
2696
2697@cindex undefined section
2698@item undefined section
2699This ``section'' is a catch-all for address references to objects not in
2700the preceding sections.
2701@c FIXME: ref to some other doc on obj-file formats could go here.
2702@end table
2703
2704@cindex relocation example
2705An idealized example of three relocatable sections follows.
2706@ifset COFF
2707The example uses the traditional section names @samp{.text} and @samp{.data}.
2708@end ifset
2709Memory addresses are on the horizontal axis.
2710
2711@c TEXI2ROFF-KILL
2712@ifinfo
2713@c END TEXI2ROFF-KILL
2714@smallexample
2715 +-----+----+--+
2716partial program # 1: |ttttt|dddd|00|
2717 +-----+----+--+
2718
2719 text data bss
2720 seg. seg. seg.
2721
2722 +---+---+---+
2723partial program # 2: |TTT|DDD|000|
2724 +---+---+---+
2725
2726 +--+---+-----+--+----+---+-----+~~
2727linked program: | |TTT|ttttt| |dddd|DDD|00000|
2728 +--+---+-----+--+----+---+-----+~~
2729
2730 addresses: 0 @dots{}
2731@end smallexample
2732@c TEXI2ROFF-KILL
2733@end ifinfo
2734@need 5000
2735@tex
2736
2737\line{\it Partial program \#1: \hfil}
2738\line{\ibox{2.5cm}{\tt text}\ibox{2cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
2739\line{\boxit{2.5cm}{\tt ttttt}\boxit{2cm}{\tt dddd}\boxit{1cm}{\tt 00}\hfil}
2740
2741\line{\it Partial program \#2: \hfil}
2742\line{\ibox{1cm}{\tt text}\ibox{1.5cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
2743\line{\boxit{1cm}{\tt TTT}\boxit{1.5cm}{\tt DDDD}\boxit{1cm}{\tt 000}\hfil}
2744
2745\line{\it linked program: \hfil}
2746\line{\ibox{.5cm}{}\ibox{1cm}{\tt text}\ibox{2.5cm}{}\ibox{.75cm}{}\ibox{2cm}{\tt data}\ibox{1.5cm}{}\ibox{2cm}{\tt bss}\hfil}
2747\line{\boxit{.5cm}{}\boxit{1cm}{\tt TTT}\boxit{2.5cm}{\tt
2748ttttt}\boxit{.75cm}{}\boxit{2cm}{\tt dddd}\boxit{1.5cm}{\tt
2749DDDD}\boxit{2cm}{\tt 00000}\ \dots\hfil}
2750
2751\line{\it addresses: \hfil}
2752\line{0\dots\hfil}
2753
2754@end tex
2755@c END TEXI2ROFF-KILL
2756
2757@node As Sections
2758@section Assembler Internal Sections
2759
2760@cindex internal assembler sections
2761@cindex sections in messages, internal
a4fb0134 2762These sections are meant only for the internal use of @command{@value{AS}}. They
252b5132 2763have no meaning at run-time. You do not really need to know about these
a4fb0134 2764sections for most purposes; but they can be mentioned in @command{@value{AS}}
252b5132 2765warning messages, so it might be helpful to have an idea of their
a4fb0134 2766meanings to @command{@value{AS}}. These sections are used to permit the
252b5132
RH
2767value of every expression in your assembly language program to be a
2768section-relative address.
2769
2770@table @b
2771@cindex assembler internal logic error
2772@item ASSEMBLER-INTERNAL-LOGIC-ERROR!
2773An internal assembler logic error has been found. This means there is a
2774bug in the assembler.
2775
2776@cindex expr (internal section)
2777@item expr section
2778The assembler stores complex expression internally as combinations of
2779symbols. When it needs to represent an expression as a symbol, it puts
2780it in the expr section.
2781@c FIXME item debug
2782@c FIXME item transfer[t] vector preload
2783@c FIXME item transfer[t] vector postload
2784@c FIXME item register
2785@end table
2786
2787@node Sub-Sections
2788@section Sub-Sections
2789
2790@cindex numbered subsections
2791@cindex grouping data
2792@ifset aout-bout
2793Assembled bytes
2794@ifset COFF
2795conventionally
2796@end ifset
2797fall into two sections: text and data.
2798@end ifset
2799You may have separate groups of
2800@ifset GENERIC
2801data in named sections
2802@end ifset
2803@ifclear GENERIC
2804@ifclear aout-bout
2805data in named sections
2806@end ifclear
2807@ifset aout-bout
2808text or data
2809@end ifset
2810@end ifclear
2811that you want to end up near to each other in the object file, even though they
a4fb0134 2812are not contiguous in the assembler source. @command{@value{AS}} allows you to
252b5132
RH
2813use @dfn{subsections} for this purpose. Within each section, there can be
2814numbered subsections with values from 0 to 8192. Objects assembled into the
2815same subsection go into the object file together with other objects in the same
2816subsection. For example, a compiler might want to store constants in the text
2817section, but might not want to have them interspersed with the program being
2818assembled. In this case, the compiler could issue a @samp{.text 0} before each
2819section of code being output, and a @samp{.text 1} before each group of
2820constants being output.
2821
2822Subsections are optional. If you do not use subsections, everything
2823goes in subsection number zero.
2824
2825@ifset GENERIC
2826Each subsection is zero-padded up to a multiple of four bytes.
2827(Subsections may be padded a different amount on different flavors
a4fb0134 2828of @command{@value{AS}}.)
252b5132
RH
2829@end ifset
2830@ifclear GENERIC
2831@ifset H8
2832On the H8/300 and H8/500 platforms, each subsection is zero-padded to a word
2833boundary (two bytes).
2834The same is true on the Hitachi SH.
2835@end ifset
2836@ifset I960
2837@c FIXME section padding (alignment)?
2838@c Rich Pixley says padding here depends on target obj code format; that
2839@c doesn't seem particularly useful to say without further elaboration,
2840@c so for now I say nothing about it. If this is a generic BFD issue,
2841@c these paragraphs might need to vanish from this manual, and be
2842@c discussed in BFD chapter of binutils (or some such).
2843@end ifset
2844@ifset A29K
2845On the AMD 29K family, no particular padding is added to section or
2846subsection sizes; @value{AS} forces no alignment on this platform.
2847@end ifset
2848@end ifclear
2849
2850Subsections appear in your object file in numeric order, lowest numbered
2851to highest. (All this to be compatible with other people's assemblers.)
2852The object file contains no representation of subsections; @code{@value{LD}} and
2853other programs that manipulate object files see no trace of them.
2854They just see all your text subsections as a text section, and all your
2855data subsections as a data section.
2856
2857To specify which subsection you want subsequent statements assembled
2858into, use a numeric argument to specify it, in a @samp{.text
2859@var{expression}} or a @samp{.data @var{expression}} statement.
2860@ifset COFF
2861@ifset GENERIC
2862When generating COFF output, you
2863@end ifset
2864@ifclear GENERIC
2865You
2866@end ifclear
2867can also use an extra subsection
2868argument with arbitrary named sections: @samp{.section @var{name},
2869@var{expression}}.
2870@end ifset
2871@var{Expression} should be an absolute expression.
2872(@xref{Expressions}.) If you just say @samp{.text} then @samp{.text 0}
2873is assumed. Likewise @samp{.data} means @samp{.data 0}. Assembly
2874begins in @code{text 0}. For instance:
2875@smallexample
2876.text 0 # The default subsection is text 0 anyway.
2877.ascii "This lives in the first text subsection. *"
2878.text 1
2879.ascii "But this lives in the second text subsection."
2880.data 0
2881.ascii "This lives in the data section,"
2882.ascii "in the first data subsection."
2883.text 0
2884.ascii "This lives in the first text section,"
2885.ascii "immediately following the asterisk (*)."
2886@end smallexample
2887
2888Each section has a @dfn{location counter} incremented by one for every byte
2889assembled into that section. Because subsections are merely a convenience
a4fb0134 2890restricted to @command{@value{AS}} there is no concept of a subsection location
252b5132
RH
2891counter. There is no way to directly manipulate a location counter---but the
2892@code{.align} directive changes it, and any label definition captures its
2893current value. The location counter of the section where statements are being
2894assembled is said to be the @dfn{active} location counter.
2895
2896@node bss
2897@section bss Section
2898
2899@cindex bss section
2900@cindex common variable storage
2901The bss section is used for local common variable storage.
2902You may allocate address space in the bss section, but you may
2903not dictate data to load into it before your program executes. When
2904your program starts running, all the contents of the bss
2905section are zeroed bytes.
2906
2907The @code{.lcomm} pseudo-op defines a symbol in the bss section; see
2908@ref{Lcomm,,@code{.lcomm}}.
2909
2910The @code{.comm} pseudo-op may be used to declare a common symbol, which is
2911another form of uninitialized symbol; see @xref{Comm,,@code{.comm}}.
2912
2913@ifset GENERIC
2914When assembling for a target which supports multiple sections, such as ELF or
2915COFF, you may switch into the @code{.bss} section and define symbols as usual;
2916see @ref{Section,,@code{.section}}. You may only assemble zero values into the
2917section. Typically the section will only contain symbol definitions and
2918@code{.skip} directives (@pxref{Skip,,@code{.skip}}).
2919@end ifset
2920
2921@node Symbols
2922@chapter Symbols
2923
2924@cindex symbols
2925Symbols are a central concept: the programmer uses symbols to name
2926things, the linker uses symbols to link, and the debugger uses symbols
2927to debug.
2928
2929@quotation
2930@cindex debuggers, and symbol order
a4fb0134 2931@emph{Warning:} @command{@value{AS}} does not place symbols in the object file in
252b5132
RH
2932the same order they were declared. This may break some debuggers.
2933@end quotation
2934
2935@menu
2936* Labels:: Labels
2937* Setting Symbols:: Giving Symbols Other Values
2938* Symbol Names:: Symbol Names
2939* Dot:: The Special Dot Symbol
2940* Symbol Attributes:: Symbol Attributes
2941@end menu
2942
2943@node Labels
2944@section Labels
2945
2946@cindex labels
2947A @dfn{label} is written as a symbol immediately followed by a colon
2948@samp{:}. The symbol then represents the current value of the
2949active location counter, and is, for example, a suitable instruction
2950operand. You are warned if you use the same symbol to represent two
2951different locations: the first definition overrides any other
2952definitions.
2953
2954@ifset HPPA
2955On the HPPA, the usual form for a label need not be immediately followed by a
2956colon, but instead must start in column zero. Only one label may be defined on
a4fb0134 2957a single line. To work around this, the HPPA version of @command{@value{AS}} also
252b5132
RH
2958provides a special directive @code{.label} for defining labels more flexibly.
2959@end ifset
2960
2961@node Setting Symbols
2962@section Giving Symbols Other Values
2963
2964@cindex assigning values to symbols
2965@cindex symbol values, assigning
2966A symbol can be given an arbitrary value by writing a symbol, followed
2967by an equals sign @samp{=}, followed by an expression
2968(@pxref{Expressions}). This is equivalent to using the @code{.set}
2969directive. @xref{Set,,@code{.set}}.
2970
2971@node Symbol Names
2972@section Symbol Names
2973
2974@cindex symbol names
2975@cindex names, symbol
2976@ifclear SPECIAL-SYMS
2977Symbol names begin with a letter or with one of @samp{._}. On most
2978machines, you can also use @code{$} in symbol names; exceptions are
2979noted in @ref{Machine Dependencies}. That character may be followed by any
2980string of digits, letters, dollar signs (unless otherwise noted in
2981@ref{Machine Dependencies}), and underscores.
2982@end ifclear
2983@ifset A29K
2984For the AMD 29K family, @samp{?} is also allowed in the
2985body of a symbol name, though not at its beginning.
2986@end ifset
2987
2988@ifset SPECIAL-SYMS
2989@ifset H8
2990Symbol names begin with a letter or with one of @samp{._}. On the
2991Hitachi SH or the
2992H8/500, you can also use @code{$} in symbol names. That character may
2993be followed by any string of digits, letters, dollar signs (save on the
2994H8/300), and underscores.
2995@end ifset
2996@end ifset
2997
2998Case of letters is significant: @code{foo} is a different symbol name
2999than @code{Foo}.
3000
3001Each symbol has exactly one name. Each name in an assembly language program
3002refers to exactly one symbol. You may use that symbol name any number of times
3003in a program.
3004
3005@subheading Local Symbol Names
3006
3007@cindex local symbol names
3008@cindex symbol names, local
3009@cindex temporary symbol names
3010@cindex symbol names, temporary
3011Local symbols help compilers and programmers use names temporarily.
2d5aaba0
NC
3012They create symbols which are guaranteed to be unique over the entire scope of
3013the input source code and which can be referred to by a simple notation.
3014To define a local symbol, write a label of the form @samp{@b{N}:} (where @b{N}
3015represents any positive integer). To refer to the most recent previous
3016definition of that symbol write @samp{@b{N}b}, using the same number as when
3017you defined the label. To refer to the next definition of a local label, write
3018@samp{@b{N}f}--- The @samp{b} stands for``backwards'' and the @samp{f} stands
3019for ``forwards''.
3020
3021There is no restriction on how you can use these labels, and you can reuse them
3022too. So that it is possible to repeatedly define the same local label (using
3023the same number @samp{@b{N}}), although you can only refer to the most recently
3024defined local label of that number (for a backwards reference) or the next
3025definition of a specific local label for a forward reference. It is also worth
3026noting that the first 10 local labels (@samp{@b{0:}}@dots{}@samp{@b{9:}}) are
3027implemented in a slightly more efficient manner than the others.
3028
3029Here is an example:
3030
3031@smallexample
30321: branch 1f
30332: branch 1b
30341: branch 2f
30352: branch 1b
3036@end smallexample
3037
3038Which is the equivalent of:
3039
3040@smallexample
3041label_1: branch label_3
3042label_2: branch label_1
3043label_3: branch label_4
3044label_4: branch label_3
3045@end smallexample
3046
3047Local symbol names are only a notational device. They are immediately
3048transformed into more conventional symbol names before the assembler uses them.
3049The symbol names stored in the symbol table, appearing in error messages and
3050optionally emitted to the object file. The names are constructed using these
252b5132
RH
3051parts:
3052
3053@table @code
3054@item L
a4fb0134 3055All local labels begin with @samp{L}. Normally both @command{@value{AS}} and
252b5132
RH
3056@code{@value{LD}} forget symbols that start with @samp{L}. These labels are
3057used for symbols you are never intended to see. If you use the
a4fb0134 3058@samp{-L} option then @command{@value{AS}} retains these symbols in the
252b5132
RH
3059object file. If you also instruct @code{@value{LD}} to retain these symbols,
3060you may use them in debugging.
3061
2d5aaba0
NC
3062@item @var{number}
3063This is the number that was used in the local label definition. So if the
3064label is written @samp{55:} then the number is @samp{55}.
252b5132 3065
2d5aaba0
NC
3066@item @kbd{C-B}
3067This unusual character is included so you do not accidentally invent a symbol
3068of the same name. The character has ASCII value of @samp{\002} (control-B).
252b5132
RH
3069
3070@item @emph{ordinal number}
2d5aaba0
NC
3071This is a serial number to keep the labels distinct. The first definition of
3072@samp{0:} gets the number @samp{1}. The 15th definition of @samp{0:} gets the
3073number @samp{15}, and so on. Likewise the first definition of @samp{1:} gets
3074the number @samp{1} and its 15th defintion gets @samp{15} as well.
252b5132
RH
3075@end table
3076
2d5aaba0
NC
3077So for example, the first @code{1:} is named @code{L1@kbd{C-B}1}, the 44th
3078@code{3:} is named @code{L3@kbd{C-B}44}.
3079
3080@subheading Dollar Local Labels
3081@cindex dollar local symbols
3082
3083@code{@value{AS}} also supports an even more local form of local labels called
3084dollar labels. These labels go out of scope (ie they become undefined) as soon
3085as a non-local label is defined. Thus they remain valid for only a small
3086region of the input source code. Normal local labels, by contrast, remain in
3087scope for the entire file, or until they are redefined by another occurrence of
3088the same local label.
3089
3090Dollar labels are defined in exactly the same way as ordinary local labels,
3091except that instead of being terminated by a colon, they are terminated by a
3092dollar sign. eg @samp{@b{55$}}.
3093
3094They can also be distinguished from ordinary local labels by their transformed
3095name which uses ASCII character @samp{\001} (control-A) as the magic character
3096to distinguish them from ordinary labels. Thus the 5th defintion of @samp{6$}
3097is named @samp{L6@kbd{C-A}5}.
252b5132
RH
3098
3099@node Dot
3100@section The Special Dot Symbol
3101
3102@cindex dot (symbol)
3103@cindex @code{.} (symbol)
3104@cindex current address
3105@cindex location counter
3106The special symbol @samp{.} refers to the current address that
a4fb0134 3107@command{@value{AS}} is assembling into. Thus, the expression @samp{melvin:
252b5132
RH
3108.long .} defines @code{melvin} to contain its own address.
3109Assigning a value to @code{.} is treated the same as a @code{.org}
3110directive. Thus, the expression @samp{.=.+4} is the same as saying
3111@ifclear no-space-dir
3112@samp{.space 4}.
3113@end ifclear
3114@ifset no-space-dir
3115@ifset A29K
3116@samp{.block 4}.
3117@end ifset
3118@end ifset
3119
3120@node Symbol Attributes
3121@section Symbol Attributes
3122
3123@cindex symbol attributes
3124@cindex attributes, symbol
3125Every symbol has, as well as its name, the attributes ``Value'' and
3126``Type''. Depending on output format, symbols can also have auxiliary
3127attributes.
3128@ifset INTERNALS
3129The detailed definitions are in @file{a.out.h}.
3130@end ifset
3131
a4fb0134 3132If you use a symbol without defining it, @command{@value{AS}} assumes zero for
252b5132
RH
3133all these attributes, and probably won't warn you. This makes the
3134symbol an externally defined symbol, which is generally what you
3135would want.
3136
3137@menu
3138* Symbol Value:: Value
3139* Symbol Type:: Type
3140@ifset aout-bout
3141@ifset GENERIC
3142* a.out Symbols:: Symbol Attributes: @code{a.out}
3143@end ifset
3144@ifclear GENERIC
3145@ifclear BOUT
3146* a.out Symbols:: Symbol Attributes: @code{a.out}
3147@end ifclear
3148@ifset BOUT
3149* a.out Symbols:: Symbol Attributes: @code{a.out}, @code{b.out}
3150@end ifset
3151@end ifclear
3152@end ifset
3153@ifset COFF
3154* COFF Symbols:: Symbol Attributes for COFF
3155@end ifset
3156@ifset SOM
3157* SOM Symbols:: Symbol Attributes for SOM
3158@end ifset
3159@end menu
3160
3161@node Symbol Value
3162@subsection Value
3163
3164@cindex value of a symbol
3165@cindex symbol value
3166The value of a symbol is (usually) 32 bits. For a symbol which labels a
3167location in the text, data, bss or absolute sections the value is the
3168number of addresses from the start of that section to the label.
3169Naturally for text, data and bss sections the value of a symbol changes
3170as @code{@value{LD}} changes section base addresses during linking. Absolute
3171symbols' values do not change during linking: that is why they are
3172called absolute.
3173
3174The value of an undefined symbol is treated in a special way. If it is
31750 then the symbol is not defined in this assembler source file, and
3176@code{@value{LD}} tries to determine its value from other files linked into the
3177same program. You make this kind of symbol simply by mentioning a symbol
3178name without defining it. A non-zero value represents a @code{.comm}
3179common declaration. The value is how much common storage to reserve, in
3180bytes (addresses). The symbol refers to the first address of the
3181allocated storage.
3182
3183@node Symbol Type
3184@subsection Type
3185
3186@cindex type of a symbol
3187@cindex symbol type
3188The type attribute of a symbol contains relocation (section)
3189information, any flag settings indicating that a symbol is external, and
3190(optionally), other information for linkers and debuggers. The exact
3191format depends on the object-code output format in use.
3192
3193@ifset aout-bout
3194@ifclear GENERIC
3195@ifset BOUT
3196@c The following avoids a "widow" subsection title. @group would be
3197@c better if it were available outside examples.
3198@need 1000
3199@node a.out Symbols
3200@subsection Symbol Attributes: @code{a.out}, @code{b.out}
3201
3202@cindex @code{b.out} symbol attributes
3203@cindex symbol attributes, @code{b.out}
a4fb0134 3204These symbol attributes appear only when @command{@value{AS}} is configured for
252b5132
RH
3205one of the Berkeley-descended object output formats---@code{a.out} or
3206@code{b.out}.
3207
3208@end ifset
3209@ifclear BOUT
3210@node a.out Symbols
3211@subsection Symbol Attributes: @code{a.out}
3212
3213@cindex @code{a.out} symbol attributes
3214@cindex symbol attributes, @code{a.out}
3215
3216@end ifclear
3217@end ifclear
3218@ifset GENERIC
3219@node a.out Symbols
3220@subsection Symbol Attributes: @code{a.out}
3221
3222@cindex @code{a.out} symbol attributes
3223@cindex symbol attributes, @code{a.out}
3224
3225@end ifset
3226@menu
3227* Symbol Desc:: Descriptor
3228* Symbol Other:: Other
3229@end menu
3230
3231@node Symbol Desc
3232@subsubsection Descriptor
3233
3234@cindex descriptor, of @code{a.out} symbol
3235This is an arbitrary 16-bit value. You may establish a symbol's
3236descriptor value by using a @code{.desc} statement
3237(@pxref{Desc,,@code{.desc}}). A descriptor value means nothing to
a4fb0134 3238@command{@value{AS}}.
252b5132
RH
3239
3240@node Symbol Other
3241@subsubsection Other
3242
3243@cindex other attribute, of @code{a.out} symbol
a4fb0134 3244This is an arbitrary 8-bit value. It means nothing to @command{@value{AS}}.
252b5132
RH
3245@end ifset
3246
3247@ifset COFF
3248@node COFF Symbols
3249@subsection Symbol Attributes for COFF
3250
3251@cindex COFF symbol attributes
3252@cindex symbol attributes, COFF
3253
3254The COFF format supports a multitude of auxiliary symbol attributes;
3255like the primary symbol attributes, they are set between @code{.def} and
3256@code{.endef} directives.
3257
3258@subsubsection Primary Attributes
3259
3260@cindex primary attributes, COFF symbols
3261The symbol name is set with @code{.def}; the value and type,
3262respectively, with @code{.val} and @code{.type}.
3263
3264@subsubsection Auxiliary Attributes
3265
3266@cindex auxiliary attributes, COFF symbols
a4fb0134 3267The @command{@value{AS}} directives @code{.dim}, @code{.line}, @code{.scl},
252b5132
RH
3268@code{.size}, and @code{.tag} can generate auxiliary symbol table
3269information for COFF.
3270@end ifset
3271
3272@ifset SOM
3273@node SOM Symbols
3274@subsection Symbol Attributes for SOM
3275
3276@cindex SOM symbol attributes
3277@cindex symbol attributes, SOM
3278
3279The SOM format for the HPPA supports a multitude of symbol attributes set with
3280the @code{.EXPORT} and @code{.IMPORT} directives.
3281
3282The attributes are described in @cite{HP9000 Series 800 Assembly
3283Language Reference Manual} (HP 92432-90001) under the @code{IMPORT} and
3284@code{EXPORT} assembler directive documentation.
3285@end ifset
3286
3287@node Expressions
3288@chapter Expressions
3289
3290@cindex expressions
3291@cindex addresses
3292@cindex numeric values
3293An @dfn{expression} specifies an address or numeric value.
3294Whitespace may precede and/or follow an expression.
3295
3296The result of an expression must be an absolute number, or else an offset into
3297a particular section. If an expression is not absolute, and there is not
a4fb0134 3298enough information when @command{@value{AS}} sees the expression to know its
252b5132
RH
3299section, a second pass over the source program might be necessary to interpret
3300the expression---but the second pass is currently not implemented.
a4fb0134 3301@command{@value{AS}} aborts with an error message in this situation.
252b5132
RH
3302
3303@menu
3304* Empty Exprs:: Empty Expressions
3305* Integer Exprs:: Integer Expressions
3306@end menu
3307
3308@node Empty Exprs
3309@section Empty Expressions
3310
3311@cindex empty expressions
3312@cindex expressions, empty
3313An empty expression has no value: it is just whitespace or null.
3314Wherever an absolute expression is required, you may omit the
a4fb0134 3315expression, and @command{@value{AS}} assumes a value of (absolute) 0. This
252b5132
RH
3316is compatible with other assemblers.
3317
3318@node Integer Exprs
3319@section Integer Expressions
3320
3321@cindex integer expressions
3322@cindex expressions, integer
3323An @dfn{integer expression} is one or more @emph{arguments} delimited
3324by @emph{operators}.
3325
3326@menu
3327* Arguments:: Arguments
3328* Operators:: Operators
3329* Prefix Ops:: Prefix Operators
3330* Infix Ops:: Infix Operators
3331@end menu
3332
3333@node Arguments
3334@subsection Arguments
3335
3336@cindex expression arguments
3337@cindex arguments in expressions
3338@cindex operands in expressions
3339@cindex arithmetic operands
3340@dfn{Arguments} are symbols, numbers or subexpressions. In other
3341contexts arguments are sometimes called ``arithmetic operands''. In
3342this manual, to avoid confusing them with the ``instruction operands'' of
3343the machine language, we use the term ``argument'' to refer to parts of
3344expressions only, reserving the word ``operand'' to refer only to machine
3345instruction operands.
3346
3347Symbols are evaluated to yield @{@var{section} @var{NNN}@} where
3348@var{section} is one of text, data, bss, absolute,
3349or undefined. @var{NNN} is a signed, 2's complement 32 bit
3350integer.
3351
3352Numbers are usually integers.
3353
3354A number can be a flonum or bignum. In this case, you are warned
a4fb0134 3355that only the low order 32 bits are used, and @command{@value{AS}} pretends
252b5132
RH
3356these 32 bits are an integer. You may write integer-manipulating
3357instructions that act on exotic constants, compatible with other
3358assemblers.
3359
3360@cindex subexpressions
3361Subexpressions are a left parenthesis @samp{(} followed by an integer
3362expression, followed by a right parenthesis @samp{)}; or a prefix
3363operator followed by an argument.
3364
3365@node Operators
3366@subsection Operators
3367
3368@cindex operators, in expressions
3369@cindex arithmetic functions
3370@cindex functions, in expressions
3371@dfn{Operators} are arithmetic functions, like @code{+} or @code{%}. Prefix
3372operators are followed by an argument. Infix operators appear
3373between their arguments. Operators may be preceded and/or followed by
3374whitespace.
3375
3376@node Prefix Ops
3377@subsection Prefix Operator
3378
3379@cindex prefix operators
a4fb0134 3380@command{@value{AS}} has the following @dfn{prefix operators}. They each take
252b5132
RH
3381one argument, which must be absolute.
3382
3383@c the tex/end tex stuff surrounding this small table is meant to make
3384@c it align, on the printed page, with the similar table in the next
3385@c section (which is inside an enumerate).
3386@tex
3387\global\advance\leftskip by \itemindent
3388@end tex
3389
3390@table @code
3391@item -
3392@dfn{Negation}. Two's complement negation.
3393@item ~
3394@dfn{Complementation}. Bitwise not.
3395@end table
3396
3397@tex
3398\global\advance\leftskip by -\itemindent
3399@end tex
3400
3401@node Infix Ops
3402@subsection Infix Operators
3403
3404@cindex infix operators
3405@cindex operators, permitted arguments
3406@dfn{Infix operators} take two arguments, one on either side. Operators
3407have precedence, but operations with equal precedence are performed left
a4fb0134 3408to right. Apart from @code{+} or @option{-}, both arguments must be
252b5132
RH
3409absolute, and the result is absolute.
3410
3411@enumerate
3412@cindex operator precedence
3413@cindex precedence of operators
3414
3415@item
3416Highest Precedence
3417
3418@table @code
3419@item *
3420@dfn{Multiplication}.
3421
3422@item /
3423@dfn{Division}. Truncation is the same as the C operator @samp{/}
3424
3425@item %
3426@dfn{Remainder}.
3427
3428@item <
3429@itemx <<
3430@dfn{Shift Left}. Same as the C operator @samp{<<}.
3431
3432@item >
3433@itemx >>
3434@dfn{Shift Right}. Same as the C operator @samp{>>}.
3435@end table
3436
3437@item
3438Intermediate precedence
3439
3440@table @code
3441@item |
3442
3443@dfn{Bitwise Inclusive Or}.
3444
3445@item &
3446@dfn{Bitwise And}.
3447
3448@item ^
3449@dfn{Bitwise Exclusive Or}.
3450
3451@item !
3452@dfn{Bitwise Or Not}.
3453@end table
3454
3455@item
b131d4dc 3456Low Precedence
252b5132
RH
3457
3458@table @code
3459@cindex addition, permitted arguments
3460@cindex plus, permitted arguments
3461@cindex arguments for addition
3462@item +
3463@dfn{Addition}. If either argument is absolute, the result has the section of
3464the other argument. You may not add together arguments from different
3465sections.
3466
3467@cindex subtraction, permitted arguments
3468@cindex minus, permitted arguments
3469@cindex arguments for subtraction
3470@item -
3471@dfn{Subtraction}. If the right argument is absolute, the
3472result has the section of the left argument.
3473If both arguments are in the same section, the result is absolute.
3474You may not subtract arguments from different sections.
3475@c FIXME is there still something useful to say about undefined - undefined ?
b131d4dc
NC
3476
3477@cindex comparison expressions
3478@cindex expressions, comparison
3479@item ==
3480@dfn{Is Equal To}
3481@item <>
3482@dfn{Is Not Equal To}
3483@item <
3484@dfn{Is Less Than}
3485@itemx >
3486@dfn{Is Greater Than}
3487@itemx >=
3488@dfn{Is Greater Than Or Equal To}
3489@itemx <=
3490@dfn{Is Less Than Or Equal To}
3491
3492The comparison operators can be used as infix operators. A true results has a
3493value of -1 whereas a false result has a value of 0. Note, these operators
3494perform signed comparisons.
3495@end table
3496
3497@item Lowest Precedence
3498
3499@table @code
3500@item &&
3501@dfn{Logical And}.
3502
3503@item ||
3504@dfn{Logical Or}.
3505
3506These two logical operations can be used to combine the results of sub
3507expressions. Note, unlike the comparison operators a true result returns a
3508value of 1 but a false results does still return 0. Also note that the logical
3509or operator has a slightly lower precedence than logical and.
3510
252b5132
RH
3511@end table
3512@end enumerate
3513
3514In short, it's only meaningful to add or subtract the @emph{offsets} in an
3515address; you can only have a defined section in one of the two arguments.
3516
3517@node Pseudo Ops
3518@chapter Assembler Directives
3519
3520@cindex directives, machine independent
3521@cindex pseudo-ops, machine independent
3522@cindex machine independent directives
3523All assembler directives have names that begin with a period (@samp{.}).
3524The rest of the name is letters, usually in lower case.
3525
3526This chapter discusses directives that are available regardless of the
3527target machine configuration for the @sc{gnu} assembler.
3528@ifset GENERIC
3529Some machine configurations provide additional directives.
3530@xref{Machine Dependencies}.
3531@end ifset
3532@ifclear GENERIC
3533@ifset machine-directives
3534@xref{Machine Dependencies} for additional directives.
3535@end ifset
3536@end ifclear
3537
3538@menu
3539* Abort:: @code{.abort}
3540@ifset COFF
3541* ABORT:: @code{.ABORT}
3542@end ifset
f0dc282c 3543
252b5132
RH
3544* Align:: @code{.align @var{abs-expr} , @var{abs-expr}}
3545* Ascii:: @code{.ascii "@var{string}"}@dots{}
3546* Asciz:: @code{.asciz "@var{string}"}@dots{}
3547* Balign:: @code{.balign @var{abs-expr} , @var{abs-expr}}
3548* Byte:: @code{.byte @var{expressions}}
3549* Comm:: @code{.comm @var{symbol} , @var{length} }
3550* Data:: @code{.data @var{subsection}}
3551@ifset COFF
3552* Def:: @code{.def @var{name}}
3553@end ifset
3554@ifset aout-bout
3555* Desc:: @code{.desc @var{symbol}, @var{abs-expression}}
3556@end ifset
3557@ifset COFF
3558* Dim:: @code{.dim}
3559@end ifset
f0dc282c 3560
252b5132
RH
3561* Double:: @code{.double @var{flonums}}
3562* Eject:: @code{.eject}
3563* Else:: @code{.else}
3fd9f047 3564* Elseif:: @code{.elseif}
252b5132
RH
3565* End:: @code{.end}
3566@ifset COFF
3567* Endef:: @code{.endef}
3568@end ifset
f0dc282c 3569
252b5132
RH
3570* Endfunc:: @code{.endfunc}
3571* Endif:: @code{.endif}
3572* Equ:: @code{.equ @var{symbol}, @var{expression}}
3573* Equiv:: @code{.equiv @var{symbol}, @var{expression}}
3574* Err:: @code{.err}
3575* Exitm:: @code{.exitm}
3576* Extern:: @code{.extern}
3577* Fail:: @code{.fail}
3578@ifclear no-file-dir
3579* File:: @code{.file @var{string}}
3580@end ifclear
f0dc282c 3581
252b5132
RH
3582* Fill:: @code{.fill @var{repeat} , @var{size} , @var{value}}
3583* Float:: @code{.float @var{flonums}}
3584* Func:: @code{.func}
3585* Global:: @code{.global @var{symbol}}, @code{.globl @var{symbol}}
c91d2e08
NC
3586@ifset ELF
3587* Hidden:: @code{.hidden @var{names}}
3588@end ifset
f0dc282c 3589
252b5132
RH
3590* hword:: @code{.hword @var{expressions}}
3591* Ident:: @code{.ident}
3592* If:: @code{.if @var{absolute expression}}
7e005732 3593* Incbin:: @code{.incbin "@var{file}"[,@var{skip}[,@var{count}]]}
252b5132
RH
3594* Include:: @code{.include "@var{file}"}
3595* Int:: @code{.int @var{expressions}}
c91d2e08
NC
3596@ifset ELF
3597* Internal:: @code{.internal @var{names}}
3598@end ifset
f0dc282c 3599
252b5132
RH
3600* Irp:: @code{.irp @var{symbol},@var{values}}@dots{}
3601* Irpc:: @code{.irpc @var{symbol},@var{values}}@dots{}
3602* Lcomm:: @code{.lcomm @var{symbol} , @var{length}}
3603* Lflags:: @code{.lflags}
3604@ifclear no-line-dir
3605* Line:: @code{.line @var{line-number}}
3606@end ifclear
f0dc282c 3607
252b5132
RH
3608* Ln:: @code{.ln @var{line-number}}
3609* Linkonce:: @code{.linkonce [@var{type}]}
3610* List:: @code{.list}
3611* Long:: @code{.long @var{expressions}}
3612@ignore
3613* Lsym:: @code{.lsym @var{symbol}, @var{expression}}
3614@end ignore
f0dc282c 3615
252b5132
RH
3616* Macro:: @code{.macro @var{name} @var{args}}@dots{}
3617* MRI:: @code{.mri @var{val}}
252b5132
RH
3618* Nolist:: @code{.nolist}
3619* Octa:: @code{.octa @var{bignums}}
3620* Org:: @code{.org @var{new-lc} , @var{fill}}
3621* P2align:: @code{.p2align @var{abs-expr} , @var{abs-expr}}
c91d2e08
NC
3622@ifset ELF
3623* PopSection:: @code{.popsection}
3624* Previous:: @code{.previous}
3625@end ifset
f0dc282c 3626
252b5132 3627* Print:: @code{.print @var{string}}
c91d2e08
NC
3628@ifset ELF
3629* Protected:: @code{.protected @var{names}}
3630@end ifset
f0dc282c 3631
252b5132
RH
3632* Psize:: @code{.psize @var{lines}, @var{columns}}
3633* Purgem:: @code{.purgem @var{name}}
c91d2e08
NC
3634@ifset ELF
3635* PushSection:: @code{.pushsection @var{name}}
3636@end ifset
f0dc282c 3637
252b5132
RH
3638* Quad:: @code{.quad @var{bignums}}
3639* Rept:: @code{.rept @var{count}}
3640* Sbttl:: @code{.sbttl "@var{subheading}"}
3641@ifset COFF
3642* Scl:: @code{.scl @var{class}}
3643* Section:: @code{.section @var{name}, @var{subsection}}
3644@end ifset
f0dc282c 3645
252b5132
RH
3646* Set:: @code{.set @var{symbol}, @var{expression}}
3647* Short:: @code{.short @var{expressions}}
3648* Single:: @code{.single @var{flonums}}
c91d2e08 3649* Size:: @code{.size [@var{name} , @var{expression}]}
252b5132
RH
3650* Skip:: @code{.skip @var{size} , @var{fill}}
3651* Sleb128:: @code{.sleb128 @var{expressions}}
3652* Space:: @code{.space @var{size} , @var{fill}}
3653@ifset have-stabs
3654* Stab:: @code{.stabd, .stabn, .stabs}
3655@end ifset
f0dc282c 3656
252b5132
RH
3657* String:: @code{.string "@var{str}"}
3658* Struct:: @code{.struct @var{expression}}
3659@ifset ELF
c91d2e08 3660* SubSection:: @code{.subsection}
252b5132
RH
3661* Symver:: @code{.symver @var{name},@var{name2@@nodename}}
3662@end ifset
f0dc282c 3663
252b5132
RH
3664@ifset COFF
3665* Tag:: @code{.tag @var{structname}}
3666@end ifset
f0dc282c 3667
252b5132
RH
3668* Text:: @code{.text @var{subsection}}
3669* Title:: @code{.title "@var{heading}"}
c91d2e08
NC
3670* Type:: @code{.type <@var{int} | @var{name} , @var{type description}>}
3671* Uleb128:: @code{.uleb128 @var{expressions}}
252b5132 3672@ifset COFF
252b5132
RH
3673* Val:: @code{.val @var{addr}}
3674@end ifset
f0dc282c 3675
2e13b764 3676@ifset ELF
c91d2e08 3677* Version:: @code{.version "@var{string}"}
c91d2e08
NC
3678* VTableEntry:: @code{.vtable_entry @var{table}, @var{offset}}
3679* VTableInherit:: @code{.vtable_inherit @var{child}, @var{parent}}
c91d2e08 3680* Weak:: @code{.weak @var{names}}
2e13b764 3681@end ifset
f0dc282c 3682
252b5132
RH
3683* Word:: @code{.word @var{expressions}}
3684* Deprecated:: Deprecated Directives
3685@end menu
3686
3687@node Abort
3688@section @code{.abort}
3689
3690@cindex @code{abort} directive
3691@cindex stopping the assembly
3692This directive stops the assembly immediately. It is for
3693compatibility with other assemblers. The original idea was that the
3694assembly language source would be piped into the assembler. If the sender
a4fb0134 3695of the source quit, it could use this directive tells @command{@value{AS}} to
252b5132
RH
3696quit also. One day @code{.abort} will not be supported.
3697
3698@ifset COFF
3699@node ABORT
3700@section @code{.ABORT}
3701
3702@cindex @code{ABORT} directive
a4fb0134 3703When producing COFF output, @command{@value{AS}} accepts this directive as a
252b5132
RH
3704synonym for @samp{.abort}.
3705
3706@ifset BOUT
a4fb0134 3707When producing @code{b.out} output, @command{@value{AS}} accepts this directive,
252b5132
RH
3708but ignores it.
3709@end ifset
3710@end ifset
3711
3712@node Align
3713@section @code{.align @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
3714
3715@cindex padding the location counter
3716@cindex @code{align} directive
3717Pad the location counter (in the current subsection) to a particular storage
3718boundary. The first expression (which must be absolute) is the alignment
3719required, as described below.
3720
3721The second expression (also absolute) gives the fill value to be stored in the
3722padding bytes. It (and the comma) may be omitted. If it is omitted, the
3723padding bytes are normally zero. However, on some systems, if the section is
3724marked as containing code and the fill value is omitted, the space is filled
3725with no-op instructions.
3726
3727The third expression is also absolute, and is also optional. If it is present,
3728it is the maximum number of bytes that should be skipped by this alignment
3729directive. If doing the alignment would require skipping more bytes than the
3730specified maximum, then the alignment is not done at all. You can omit the
3731fill value (the second argument) entirely by simply using two commas after the
3732required alignment; this can be useful if you want the alignment to be filled
3733with no-op instructions when appropriate.
3734
3735The way the required alignment is specified varies from system to system.
3736For the a29k, hppa, m68k, m88k, w65, sparc, and Hitachi SH, and i386 using ELF
3737format,
3738the first expression is the
3739alignment request in bytes. For example @samp{.align 8} advances
3740the location counter until it is a multiple of 8. If the location counter
3741is already a multiple of 8, no change is needed.
3742
adcf07e6
NC
3743For other systems, including the i386 using a.out format, and the arm and
3744strongarm, it is the
252b5132
RH
3745number of low-order zero bits the location counter must have after
3746advancement. For example @samp{.align 3} advances the location
3747counter until it a multiple of 8. If the location counter is already a
3748multiple of 8, no change is needed.
3749
3750This inconsistency is due to the different behaviors of the various
3751native assemblers for these systems which GAS must emulate.
3752GAS also provides @code{.balign} and @code{.p2align} directives,
3753described later, which have a consistent behavior across all
3754architectures (but are specific to GAS).
3755
3756@node Ascii
3757@section @code{.ascii "@var{string}"}@dots{}
3758
3759@cindex @code{ascii} directive
3760@cindex string literals
3761@code{.ascii} expects zero or more string literals (@pxref{Strings})
3762separated by commas. It assembles each string (with no automatic
3763trailing zero byte) into consecutive addresses.
3764
3765@node Asciz
3766@section @code{.asciz "@var{string}"}@dots{}
3767
3768@cindex @code{asciz} directive
3769@cindex zero-terminated strings
3770@cindex null-terminated strings
3771@code{.asciz} is just like @code{.ascii}, but each string is followed by
3772a zero byte. The ``z'' in @samp{.asciz} stands for ``zero''.
3773
3774@node Balign
3775@section @code{.balign[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
3776
3777@cindex padding the location counter given number of bytes
3778@cindex @code{balign} directive
3779Pad the location counter (in the current subsection) to a particular
3780storage boundary. The first expression (which must be absolute) is the
3781alignment request in bytes. For example @samp{.balign 8} advances
3782the location counter until it is a multiple of 8. If the location counter
3783is already a multiple of 8, no change is needed.
3784
3785The second expression (also absolute) gives the fill value to be stored in the
3786padding bytes. It (and the comma) may be omitted. If it is omitted, the
3787padding bytes are normally zero. However, on some systems, if the section is
3788marked as containing code and the fill value is omitted, the space is filled
3789with no-op instructions.
3790
3791The third expression is also absolute, and is also optional. If it is present,
3792it is the maximum number of bytes that should be skipped by this alignment
3793directive. If doing the alignment would require skipping more bytes than the
3794specified maximum, then the alignment is not done at all. You can omit the
3795fill value (the second argument) entirely by simply using two commas after the
3796required alignment; this can be useful if you want the alignment to be filled
3797with no-op instructions when appropriate.
3798
3799@cindex @code{balignw} directive
3800@cindex @code{balignl} directive
3801The @code{.balignw} and @code{.balignl} directives are variants of the
3802@code{.balign} directive. The @code{.balignw} directive treats the fill
3803pattern as a two byte word value. The @code{.balignl} directives treats the
3804fill pattern as a four byte longword value. For example, @code{.balignw
38054,0x368d} will align to a multiple of 4. If it skips two bytes, they will be
3806filled in with the value 0x368d (the exact placement of the bytes depends upon
3807the endianness of the processor). If it skips 1 or 3 bytes, the fill value is
3808undefined.
3809
3810@node Byte
3811@section @code{.byte @var{expressions}}
3812
3813@cindex @code{byte} directive
3814@cindex integers, one byte
3815@code{.byte} expects zero or more expressions, separated by commas.
3816Each expression is assembled into the next byte.
3817
3818@node Comm
3819@section @code{.comm @var{symbol} , @var{length} }
3820
3821@cindex @code{comm} directive
3822@cindex symbol, common
3823@code{.comm} declares a common symbol named @var{symbol}. When linking, a
3824common symbol in one object file may be merged with a defined or common symbol
3825of the same name in another object file. If @code{@value{LD}} does not see a
3826definition for the symbol--just one or more common symbols--then it will
3827allocate @var{length} bytes of uninitialized memory. @var{length} must be an
3828absolute expression. If @code{@value{LD}} sees multiple common symbols with
3829the same name, and they do not all have the same size, it will allocate space
3830using the largest size.
3831
3832@ifset ELF
3833When using ELF, the @code{.comm} directive takes an optional third argument.
3834This is the desired alignment of the symbol, specified as a byte boundary (for
3835example, an alignment of 16 means that the least significant 4 bits of the
3836address should be zero). The alignment must be an absolute expression, and it
3837must be a power of two. If @code{@value{LD}} allocates uninitialized memory
3838for the common symbol, it will use the alignment when placing the symbol. If
a4fb0134 3839no alignment is specified, @command{@value{AS}} will set the alignment to the
252b5132
RH
3840largest power of two less than or equal to the size of the symbol, up to a
3841maximum of 16.
3842@end ifset
3843
3844@ifset HPPA
3845The syntax for @code{.comm} differs slightly on the HPPA. The syntax is
3846@samp{@var{symbol} .comm, @var{length}}; @var{symbol} is optional.
3847@end ifset
3848
3849@node Data
3850@section @code{.data @var{subsection}}
3851
3852@cindex @code{data} directive
a4fb0134 3853@code{.data} tells @command{@value{AS}} to assemble the following statements onto the
252b5132
RH
3854end of the data subsection numbered @var{subsection} (which is an
3855absolute expression). If @var{subsection} is omitted, it defaults
3856to zero.
3857
3858@ifset COFF
3859@node Def
3860@section @code{.def @var{name}}
3861
3862@cindex @code{def} directive
3863@cindex COFF symbols, debugging
3864@cindex debugging COFF symbols
3865Begin defining debugging information for a symbol @var{name}; the
3866definition extends until the @code{.endef} directive is encountered.
3867@ifset BOUT
3868
a4fb0134 3869This directive is only observed when @command{@value{AS}} is configured for COFF
252b5132
RH
3870format output; when producing @code{b.out}, @samp{.def} is recognized,
3871but ignored.
3872@end ifset
3873@end ifset
3874
3875@ifset aout-bout
3876@node Desc
3877@section @code{.desc @var{symbol}, @var{abs-expression}}
3878
3879@cindex @code{desc} directive
3880@cindex COFF symbol descriptor
3881@cindex symbol descriptor, COFF
3882This directive sets the descriptor of the symbol (@pxref{Symbol Attributes})
3883to the low 16 bits of an absolute expression.
3884
3885@ifset COFF
a4fb0134 3886The @samp{.desc} directive is not available when @command{@value{AS}} is
252b5132 3887configured for COFF output; it is only for @code{a.out} or @code{b.out}
a4fb0134 3888object format. For the sake of compatibility, @command{@value{AS}} accepts
252b5132
RH
3889it, but produces no output, when configured for COFF.
3890@end ifset
3891@end ifset
3892
3893@ifset COFF
3894@node Dim
3895@section @code{.dim}
3896
3897@cindex @code{dim} directive
3898@cindex COFF auxiliary symbol information
3899@cindex auxiliary symbol information, COFF
3900This directive is generated by compilers to include auxiliary debugging
3901information in the symbol table. It is only permitted inside
3902@code{.def}/@code{.endef} pairs.
3903@ifset BOUT
3904
3905@samp{.dim} is only meaningful when generating COFF format output; when
a4fb0134 3906@command{@value{AS}} is generating @code{b.out}, it accepts this directive but
252b5132
RH
3907ignores it.
3908@end ifset
3909@end ifset
3910
3911@node Double
3912@section @code{.double @var{flonums}}
3913
3914@cindex @code{double} directive
3915@cindex floating point numbers (double)
3916@code{.double} expects zero or more flonums, separated by commas. It
3917assembles floating point numbers.
3918@ifset GENERIC
3919The exact kind of floating point numbers emitted depends on how
a4fb0134 3920@command{@value{AS}} is configured. @xref{Machine Dependencies}.
252b5132
RH
3921@end ifset
3922@ifclear GENERIC
3923@ifset IEEEFLOAT
3924On the @value{TARGET} family @samp{.double} emits 64-bit floating-point numbers
3925in @sc{ieee} format.
3926@end ifset
3927@end ifclear
3928
3929@node Eject
3930@section @code{.eject}
3931
3932@cindex @code{eject} directive
3933@cindex new page, in listings
3934@cindex page, in listings
3935@cindex listing control: new page
3936Force a page break at this point, when generating assembly listings.
3937
3938@node Else
3939@section @code{.else}
3940
3941@cindex @code{else} directive
a4fb0134 3942@code{.else} is part of the @command{@value{AS}} support for conditional
252b5132
RH
3943assembly; @pxref{If,,@code{.if}}. It marks the beginning of a section
3944of code to be assembled if the condition for the preceding @code{.if}
3945was false.
3946
3fd9f047
TW
3947@node Elseif
3948@section @code{.elseif}
3949
3950@cindex @code{elseif} directive
a4fb0134 3951@code{.elseif} is part of the @command{@value{AS}} support for conditional
3fd9f047
TW
3952assembly; @pxref{If,,@code{.if}}. It is shorthand for beginning a new
3953@code{.if} block that would otherwise fill the entire @code{.else} section.
3954
252b5132
RH
3955@node End
3956@section @code{.end}
3957
3958@cindex @code{end} directive
a4fb0134 3959@code{.end} marks the end of the assembly file. @command{@value{AS}} does not
252b5132
RH
3960process anything in the file past the @code{.end} directive.
3961
3962@ifset COFF
3963@node Endef
3964@section @code{.endef}
3965
3966@cindex @code{endef} directive
3967This directive flags the end of a symbol definition begun with
3968@code{.def}.
3969@ifset BOUT
3970
3971@samp{.endef} is only meaningful when generating COFF format output; if
a4fb0134 3972@command{@value{AS}} is configured to generate @code{b.out}, it accepts this
252b5132
RH
3973directive but ignores it.
3974@end ifset
3975@end ifset
3976
3977@node Endfunc
3978@section @code{.endfunc}
3979@cindex @code{endfunc} directive
3980@code{.endfunc} marks the end of a function specified with @code{.func}.
3981
3982@node Endif
3983@section @code{.endif}
3984
3985@cindex @code{endif} directive
a4fb0134 3986@code{.endif} is part of the @command{@value{AS}} support for conditional assembly;
252b5132
RH
3987it marks the end of a block of code that is only assembled
3988conditionally. @xref{If,,@code{.if}}.
3989
3990@node Equ
3991@section @code{.equ @var{symbol}, @var{expression}}
3992
3993@cindex @code{equ} directive
3994@cindex assigning values to symbols
3995@cindex symbols, assigning values to
3996This directive sets the value of @var{symbol} to @var{expression}.
3997It is synonymous with @samp{.set}; @pxref{Set,,@code{.set}}.
3998
3999@ifset HPPA
4000The syntax for @code{equ} on the HPPA is
4001@samp{@var{symbol} .equ @var{expression}}.
4002@end ifset
4003
4004@node Equiv
4005@section @code{.equiv @var{symbol}, @var{expression}}
4006@cindex @code{equiv} directive
4007The @code{.equiv} directive is like @code{.equ} and @code{.set}, except that
4008the assembler will signal an error if @var{symbol} is already defined.
4009
4010Except for the contents of the error message, this is roughly equivalent to
4011@smallexample
4012.ifdef SYM
4013.err
4014.endif
4015.equ SYM,VAL
4016@end smallexample
4017
4018@node Err
4019@section @code{.err}
4020@cindex @code{err} directive
a4fb0134
SC
4021If @command{@value{AS}} assembles a @code{.err} directive, it will print an error
4022message and, unless the @option{-Z} option was used, it will not generate an
252b5132
RH
4023object file. This can be used to signal error an conditionally compiled code.
4024
4025@node Exitm
4026@section @code{.exitm}
4027Exit early from the current macro definition. @xref{Macro}.
4028
4029@node Extern
4030@section @code{.extern}
4031
4032@cindex @code{extern} directive
4033@code{.extern} is accepted in the source program---for compatibility
a4fb0134 4034with other assemblers---but it is ignored. @command{@value{AS}} treats
252b5132
RH
4035all undefined symbols as external.
4036
4037@node Fail
4038@section @code{.fail @var{expression}}
4039
4040@cindex @code{fail} directive
4041Generates an error or a warning. If the value of the @var{expression} is 500
a4fb0134
SC
4042or more, @command{@value{AS}} will print a warning message. If the value is less
4043than 500, @command{@value{AS}} will print an error message. The message will
252b5132
RH
4044include the value of @var{expression}. This can occasionally be useful inside
4045complex nested macros or conditional assembly.
4046
4047@ifclear no-file-dir
4048@node File
4049@section @code{.file @var{string}}
4050
4051@cindex @code{file} directive
4052@cindex logical file name
4053@cindex file name, logical
a4fb0134 4054@code{.file} tells @command{@value{AS}} that we are about to start a new logical
252b5132
RH
4055file. @var{string} is the new file name. In general, the filename is
4056recognized whether or not it is surrounded by quotes @samp{"}; but if you wish
4057to specify an empty file name, you must give the quotes--@code{""}. This
4058statement may go away in future: it is only recognized to be compatible with
a4fb0134 4059old @command{@value{AS}} programs.
252b5132 4060@ifset A29K
a4fb0134 4061In some configurations of @command{@value{AS}}, @code{.file} has already been
252b5132
RH
4062removed to avoid conflicts with other assemblers. @xref{Machine Dependencies}.
4063@end ifset
4064@end ifclear
4065
4066@node Fill
4067@section @code{.fill @var{repeat} , @var{size} , @var{value}}
4068
4069@cindex @code{fill} directive
4070@cindex writing patterns in memory
4071@cindex patterns, writing in memory
bc64be0c 4072@var{repeat}, @var{size} and @var{value} are absolute expressions.
252b5132
RH
4073This emits @var{repeat} copies of @var{size} bytes. @var{Repeat}
4074may be zero or more. @var{Size} may be zero or more, but if it is
4075more than 8, then it is deemed to have the value 8, compatible with
4076other people's assemblers. The contents of each @var{repeat} bytes
4077is taken from an 8-byte number. The highest order 4 bytes are
4078zero. The lowest order 4 bytes are @var{value} rendered in the
a4fb0134 4079byte-order of an integer on the computer @command{@value{AS}} is assembling for.
252b5132
RH
4080Each @var{size} bytes in a repetition is taken from the lowest order
4081@var{size} bytes of this number. Again, this bizarre behavior is
4082compatible with other people's assemblers.
4083
4084@var{size} and @var{value} are optional.
4085If the second comma and @var{value} are absent, @var{value} is
4086assumed zero. If the first comma and following tokens are absent,
4087@var{size} is assumed to be 1.
4088
4089@node Float
4090@section @code{.float @var{flonums}}
4091
4092@cindex floating point numbers (single)
4093@cindex @code{float} directive
4094This directive assembles zero or more flonums, separated by commas. It
4095has the same effect as @code{.single}.
4096@ifset GENERIC
4097The exact kind of floating point numbers emitted depends on how
a4fb0134 4098@command{@value{AS}} is configured.
252b5132
RH
4099@xref{Machine Dependencies}.
4100@end ifset
4101@ifclear GENERIC
4102@ifset IEEEFLOAT
4103On the @value{TARGET} family, @code{.float} emits 32-bit floating point numbers
4104in @sc{ieee} format.
4105@end ifset
4106@end ifclear
4107
4108@node Func
4109@section @code{.func @var{name}[,@var{label}]}
4110@cindex @code{func} directive
4111@code{.func} emits debugging information to denote function @var{name}, and
4112is ignored unless the file is assembled with debugging enabled.
4113Only @samp{--gstabs} is currently supported.
4114@var{label} is the entry point of the function and if omitted @var{name}
4115prepended with the @samp{leading char} is used.
4116@samp{leading char} is usually @code{_} or nothing, depending on the target.
4117All functions are currently defined to have @code{void} return type.
4118The function must be terminated with @code{.endfunc}.
4119
4120@node Global
4121@section @code{.global @var{symbol}}, @code{.globl @var{symbol}}
4122
4123@cindex @code{global} directive
4124@cindex symbol, making visible to linker
4125@code{.global} makes the symbol visible to @code{@value{LD}}. If you define
4126@var{symbol} in your partial program, its value is made available to
4127other partial programs that are linked with it. Otherwise,
4128@var{symbol} takes its attributes from a symbol of the same name
4129from another file linked into the same program.
4130
4131Both spellings (@samp{.globl} and @samp{.global}) are accepted, for
4132compatibility with other assemblers.
4133
4134@ifset HPPA
4135On the HPPA, @code{.global} is not always enough to make it accessible to other
4136partial programs. You may need the HPPA-only @code{.EXPORT} directive as well.
4137@xref{HPPA Directives,, HPPA Assembler Directives}.
4138@end ifset
4139
c91d2e08
NC
4140@ifset ELF
4141@node Hidden
4142@section @code{.hidden @var{names}}
4143
4144@cindex @code{.hidden} directive
4145@cindex Visibility
4146This one of the ELF visibility directives. The other two are
a349d9dd
PB
4147@code{.internal} (@pxref{Internal,,@code{.internal}}) and
4148@code{.protected} (@pxref{Protected,,@code{.protected}}).
c91d2e08
NC
4149
4150This directive overrides the named symbols default visibility (which is set by
4151their binding: local, global or weak). The directive sets the visibility to
4152@code{hidden} which means that the symbols are not visible to other components.
4153Such symbols are always considered to be @code{protected} as well.
4154@end ifset
4155
252b5132
RH
4156@node hword
4157@section @code{.hword @var{expressions}}
4158
4159@cindex @code{hword} directive
4160@cindex integers, 16-bit
4161@cindex numbers, 16-bit
4162@cindex sixteen bit integers
4163This expects zero or more @var{expressions}, and emits
4164a 16 bit number for each.
4165
4166@ifset GENERIC
4167This directive is a synonym for @samp{.short}; depending on the target
4168architecture, it may also be a synonym for @samp{.word}.
4169@end ifset
4170@ifclear GENERIC
4171@ifset W32
4172This directive is a synonym for @samp{.short}.
4173@end ifset
4174@ifset W16
4175This directive is a synonym for both @samp{.short} and @samp{.word}.
4176@end ifset
4177@end ifclear
4178
4179@node Ident
4180@section @code{.ident}
4181
4182@cindex @code{ident} directive
4183This directive is used by some assemblers to place tags in object files.
a4fb0134 4184@command{@value{AS}} simply accepts the directive for source-file
252b5132
RH
4185compatibility with such assemblers, but does not actually emit anything
4186for it.
4187
4188@node If
4189@section @code{.if @var{absolute expression}}
4190
4191@cindex conditional assembly
4192@cindex @code{if} directive
4193@code{.if} marks the beginning of a section of code which is only
4194considered part of the source program being assembled if the argument
4195(which must be an @var{absolute expression}) is non-zero. The end of
4196the conditional section of code must be marked by @code{.endif}
4197(@pxref{Endif,,@code{.endif}}); optionally, you may include code for the
4198alternative condition, flagged by @code{.else} (@pxref{Else,,@code{.else}}).
3fd9f047
TW
4199If you have several conditions to check, @code{.elseif} may be used to avoid
4200nesting blocks if/else within each subsequent @code{.else} block.
252b5132
RH
4201
4202The following variants of @code{.if} are also supported:
4203@table @code
4204@cindex @code{ifdef} directive
4205@item .ifdef @var{symbol}
4206Assembles the following section of code if the specified @var{symbol}
4207has been defined.
4208
4209@cindex @code{ifc} directive
4210@item .ifc @var{string1},@var{string2}
4211Assembles the following section of code if the two strings are the same. The
4212strings may be optionally quoted with single quotes. If they are not quoted,
4213the first string stops at the first comma, and the second string stops at the
4214end of the line. Strings which contain whitespace should be quoted. The
4215string comparison is case sensitive.
4216
4217@cindex @code{ifeq} directive
4218@item .ifeq @var{absolute expression}
4219Assembles the following section of code if the argument is zero.
4220
4221@cindex @code{ifeqs} directive
4222@item .ifeqs @var{string1},@var{string2}
4223Another form of @code{.ifc}. The strings must be quoted using double quotes.
4224
4225@cindex @code{ifge} directive
4226@item .ifge @var{absolute expression}
4227Assembles the following section of code if the argument is greater than or
4228equal to zero.
4229
4230@cindex @code{ifgt} directive
4231@item .ifgt @var{absolute expression}
4232Assembles the following section of code if the argument is greater than zero.
4233
4234@cindex @code{ifle} directive
4235@item .ifle @var{absolute expression}
4236Assembles the following section of code if the argument is less than or equal
4237to zero.
4238
4239@cindex @code{iflt} directive
4240@item .iflt @var{absolute expression}
4241Assembles the following section of code if the argument is less than zero.
4242
4243@cindex @code{ifnc} directive
4244@item .ifnc @var{string1},@var{string2}.
4245Like @code{.ifc}, but the sense of the test is reversed: this assembles the
4246following section of code if the two strings are not the same.
4247
4248@cindex @code{ifndef} directive
4249@cindex @code{ifnotdef} directive
4250@item .ifndef @var{symbol}
4251@itemx .ifnotdef @var{symbol}
4252Assembles the following section of code if the specified @var{symbol}
4253has not been defined. Both spelling variants are equivalent.
4254
4255@cindex @code{ifne} directive
4256@item .ifne @var{absolute expression}
4257Assembles the following section of code if the argument is not equal to zero
4258(in other words, this is equivalent to @code{.if}).
4259
4260@cindex @code{ifnes} directive
4261@item .ifnes @var{string1},@var{string2}
4262Like @code{.ifeqs}, but the sense of the test is reversed: this assembles the
4263following section of code if the two strings are not the same.
4264@end table
4265
7e005732
NC
4266@node Incbin
4267@section @code{.incbin "@var{file}"[,@var{skip}[,@var{count}]]}
4268
4269@cindex @code{incbin} directive
4270@cindex binary files, including
4271The @code{incbin} directive includes @var{file} verbatim at the current
4272location. You can control the search paths used with the @samp{-I} command-line
4273option (@pxref{Invoking,,Command-Line Options}). Quotation marks are required
4274around @var{file}.
4275
4276The @var{skip} argument skips a number of bytes from the start of the
4277@var{file}. The @var{count} argument indicates the maximum number of bytes to
15dcfbc3
NC
4278read. Note that the data is not aligned in any way, so it is the user's
4279responsibility to make sure that proper alignment is provided both before and
4280after the @code{incbin} directive.
7e005732 4281
252b5132
RH
4282@node Include
4283@section @code{.include "@var{file}"}
4284
4285@cindex @code{include} directive
4286@cindex supporting files, including
4287@cindex files, including
4288This directive provides a way to include supporting files at specified
4289points in your source program. The code from @var{file} is assembled as
4290if it followed the point of the @code{.include}; when the end of the
4291included file is reached, assembly of the original file continues. You
4292can control the search paths used with the @samp{-I} command-line option
4293(@pxref{Invoking,,Command-Line Options}). Quotation marks are required
4294around @var{file}.
4295
4296@node Int
4297@section @code{.int @var{expressions}}
4298
4299@cindex @code{int} directive
4300@cindex integers, 32-bit
4301Expect zero or more @var{expressions}, of any section, separated by commas.
4302For each expression, emit a number that, at run time, is the value of that
4303expression. The byte order and bit size of the number depends on what kind
4304of target the assembly is for.
4305
4306@ifclear GENERIC
4307@ifset H8
4308On the H8/500 and most forms of the H8/300, @code{.int} emits 16-bit
4309integers. On the H8/300H and the Hitachi SH, however, @code{.int} emits
431032-bit integers.
4311@end ifset
4312@end ifclear
4313
c91d2e08
NC
4314@ifset ELF
4315@node Internal
4316@section @code{.internal @var{names}}
4317
4318@cindex @code{.internal} directive
4319@cindex Visibility
4320This one of the ELF visibility directives. The other two are
a349d9dd
PB
4321@code{.hidden} (@pxref{Hidden,,@code{.hidden}}) and
4322@code{.protected} (@pxref{Protected,,@code{.protected}}).
c91d2e08
NC
4323
4324This directive overrides the named symbols default visibility (which is set by
4325their binding: local, global or weak). The directive sets the visibility to
4326@code{internal} which means that the symbols are considered to be @code{hidden}
4327(ie not visible to other components), and that some extra, processor specific
4328processing must also be performed upon the symbols as well.
4329@end ifset
4330
252b5132
RH
4331@node Irp
4332@section @code{.irp @var{symbol},@var{values}}@dots{}
4333
4334@cindex @code{irp} directive
4335Evaluate a sequence of statements assigning different values to @var{symbol}.
4336The sequence of statements starts at the @code{.irp} directive, and is
4337terminated by an @code{.endr} directive. For each @var{value}, @var{symbol} is
4338set to @var{value}, and the sequence of statements is assembled. If no
4339@var{value} is listed, the sequence of statements is assembled once, with
4340@var{symbol} set to the null string. To refer to @var{symbol} within the
4341sequence of statements, use @var{\symbol}.
4342
4343For example, assembling
4344
4345@example
4346 .irp param,1,2,3
4347 move d\param,sp@@-
4348 .endr
4349@end example
4350
4351is equivalent to assembling
4352
4353@example
4354 move d1,sp@@-
4355 move d2,sp@@-
4356 move d3,sp@@-
4357@end example
4358
4359@node Irpc
4360@section @code{.irpc @var{symbol},@var{values}}@dots{}
4361
4362@cindex @code{irpc} directive
4363Evaluate a sequence of statements assigning different values to @var{symbol}.
4364The sequence of statements starts at the @code{.irpc} directive, and is
4365terminated by an @code{.endr} directive. For each character in @var{value},
4366@var{symbol} is set to the character, and the sequence of statements is
4367assembled. If no @var{value} is listed, the sequence of statements is
4368assembled once, with @var{symbol} set to the null string. To refer to
4369@var{symbol} within the sequence of statements, use @var{\symbol}.
4370
4371For example, assembling
4372
4373@example
4374 .irpc param,123
4375 move d\param,sp@@-
4376 .endr
4377@end example
4378
4379is equivalent to assembling
4380
4381@example
4382 move d1,sp@@-
4383 move d2,sp@@-
4384 move d3,sp@@-
4385@end example
4386
4387@node Lcomm
4388@section @code{.lcomm @var{symbol} , @var{length}}
4389
4390@cindex @code{lcomm} directive
4391@cindex local common symbols
4392@cindex symbols, local common
4393Reserve @var{length} (an absolute expression) bytes for a local common
4394denoted by @var{symbol}. The section and value of @var{symbol} are
4395those of the new local common. The addresses are allocated in the bss
4396section, so that at run-time the bytes start off zeroed. @var{Symbol}
4397is not declared global (@pxref{Global,,@code{.global}}), so is normally
4398not visible to @code{@value{LD}}.
4399
4400@ifset GENERIC
4401Some targets permit a third argument to be used with @code{.lcomm}. This
4402argument specifies the desired alignment of the symbol in the bss section.
4403@end ifset
4404
4405@ifset HPPA
4406The syntax for @code{.lcomm} differs slightly on the HPPA. The syntax is
4407@samp{@var{symbol} .lcomm, @var{length}}; @var{symbol} is optional.
4408@end ifset
4409
4410@node Lflags
4411@section @code{.lflags}
4412
4413@cindex @code{lflags} directive (ignored)
a4fb0134 4414@command{@value{AS}} accepts this directive, for compatibility with other
252b5132
RH
4415assemblers, but ignores it.
4416
4417@ifclear no-line-dir
4418@node Line
4419@section @code{.line @var{line-number}}
4420
4421@cindex @code{line} directive
4422@end ifclear
4423@ifset no-line-dir
4424@node Ln
4425@section @code{.ln @var{line-number}}
4426
4427@cindex @code{ln} directive
4428@end ifset
4429@cindex logical line number
4430@ifset aout-bout
4431Change the logical line number. @var{line-number} must be an absolute
4432expression. The next line has that logical line number. Therefore any other
4433statements on the current line (after a statement separator character) are
4434reported as on logical line number @var{line-number} @minus{} 1. One day
a4fb0134 4435@command{@value{AS}} will no longer support this directive: it is recognized only
252b5132
RH
4436for compatibility with existing assembler programs.
4437
4438@ifset GENERIC
4439@ifset A29K
4440@emph{Warning:} In the AMD29K configuration of @value{AS}, this command is
4441not available; use the synonym @code{.ln} in that context.
4442@end ifset
4443@end ifset
4444@end ifset
4445
4446@ifclear no-line-dir
4447Even though this is a directive associated with the @code{a.out} or
a4fb0134 4448@code{b.out} object-code formats, @command{@value{AS}} still recognizes it
252b5132
RH
4449when producing COFF output, and treats @samp{.line} as though it
4450were the COFF @samp{.ln} @emph{if} it is found outside a
4451@code{.def}/@code{.endef} pair.
4452
4453Inside a @code{.def}, @samp{.line} is, instead, one of the directives
4454used by compilers to generate auxiliary symbol information for
4455debugging.
4456@end ifclear
4457
4458@node Linkonce
4459@section @code{.linkonce [@var{type}]}
4460@cindex COMDAT
4461@cindex @code{linkonce} directive
4462@cindex common sections
4463Mark the current section so that the linker only includes a single copy of it.
4464This may be used to include the same section in several different object files,
4465but ensure that the linker will only include it once in the final output file.
4466The @code{.linkonce} pseudo-op must be used for each instance of the section.
4467Duplicate sections are detected based on the section name, so it should be
4468unique.
4469
4470This directive is only supported by a few object file formats; as of this
4471writing, the only object file format which supports it is the Portable
4472Executable format used on Windows NT.
4473
4474The @var{type} argument is optional. If specified, it must be one of the
4475following strings. For example:
4476@smallexample
4477.linkonce same_size
4478@end smallexample
4479Not all types may be supported on all object file formats.
4480
4481@table @code
4482@item discard
4483Silently discard duplicate sections. This is the default.
4484
4485@item one_only
4486Warn if there are duplicate sections, but still keep only one copy.
4487
4488@item same_size
4489Warn if any of the duplicates have different sizes.
4490
4491@item same_contents
4492Warn if any of the duplicates do not have exactly the same contents.
4493@end table
4494
4495@node Ln
4496@section @code{.ln @var{line-number}}
4497
4498@cindex @code{ln} directive
4499@ifclear no-line-dir
4500@samp{.ln} is a synonym for @samp{.line}.
4501@end ifclear
4502@ifset no-line-dir
a4fb0134 4503Tell @command{@value{AS}} to change the logical line number. @var{line-number}
252b5132
RH
4504must be an absolute expression. The next line has that logical
4505line number, so any other statements on the current line (after a
4506statement separator character @code{;}) are reported as on logical
4507line number @var{line-number} @minus{} 1.
4508@ifset BOUT
4509
a4fb0134 4510This directive is accepted, but ignored, when @command{@value{AS}} is
252b5132
RH
4511configured for @code{b.out}; its effect is only associated with COFF
4512output format.
4513@end ifset
4514@end ifset
4515
4516@node MRI
4517@section @code{.mri @var{val}}
4518
4519@cindex @code{mri} directive
4520@cindex MRI mode, temporarily
a4fb0134
SC
4521If @var{val} is non-zero, this tells @command{@value{AS}} to enter MRI mode. If
4522@var{val} is zero, this tells @command{@value{AS}} to exit MRI mode. This change
252b5132
RH
4523affects code assembled until the next @code{.mri} directive, or until the end
4524of the file. @xref{M, MRI mode, MRI mode}.
4525
4526@node List
4527@section @code{.list}
4528
4529@cindex @code{list} directive
4530@cindex listing control, turning on
4531Control (in conjunction with the @code{.nolist} directive) whether or
4532not assembly listings are generated. These two directives maintain an
4533internal counter (which is zero initially). @code{.list} increments the
4534counter, and @code{.nolist} decrements it. Assembly listings are
4535generated whenever the counter is greater than zero.
4536
4537By default, listings are disabled. When you enable them (with the
4538@samp{-a} command line option; @pxref{Invoking,,Command-Line Options}),
4539the initial value of the listing counter is one.
4540
4541@node Long
4542@section @code{.long @var{expressions}}
4543
4544@cindex @code{long} directive
4545@code{.long} is the same as @samp{.int}, @pxref{Int,,@code{.int}}.
4546
4547@ignore
4548@c no one seems to know what this is for or whether this description is
4549@c what it really ought to do
4550@node Lsym
4551@section @code{.lsym @var{symbol}, @var{expression}}
4552
4553@cindex @code{lsym} directive
4554@cindex symbol, not referenced in assembly
4555@code{.lsym} creates a new symbol named @var{symbol}, but does not put it in
4556the hash table, ensuring it cannot be referenced by name during the
4557rest of the assembly. This sets the attributes of the symbol to be
4558the same as the expression value:
4559@smallexample
4560@var{other} = @var{descriptor} = 0
4561@var{type} = @r{(section of @var{expression})}
4562@var{value} = @var{expression}
4563@end smallexample
4564@noindent
4565The new symbol is not flagged as external.
4566@end ignore
4567
4568@node Macro
4569@section @code{.macro}
4570
4571@cindex macros
4572The commands @code{.macro} and @code{.endm} allow you to define macros that
4573generate assembly output. For example, this definition specifies a macro
4574@code{sum} that puts a sequence of numbers into memory:
4575
4576@example
4577 .macro sum from=0, to=5
4578 .long \from
4579 .if \to-\from
4580 sum "(\from+1)",\to
4581 .endif
4582 .endm
4583@end example
4584
4585@noindent
4586With that definition, @samp{SUM 0,5} is equivalent to this assembly input:
4587
4588@example
4589 .long 0
4590 .long 1
4591 .long 2
4592 .long 3
4593 .long 4
4594 .long 5
4595@end example
4596
4597@ftable @code
4598@item .macro @var{macname}
4599@itemx .macro @var{macname} @var{macargs} @dots{}
4600@cindex @code{macro} directive
4601Begin the definition of a macro called @var{macname}. If your macro
4602definition requires arguments, specify their names after the macro name,
4603separated by commas or spaces. You can supply a default value for any
4604macro argument by following the name with @samp{=@var{deflt}}. For
4605example, these are all valid @code{.macro} statements:
4606
4607@table @code
4608@item .macro comm
4609Begin the definition of a macro called @code{comm}, which takes no
4610arguments.
4611
4612@item .macro plus1 p, p1
4613@itemx .macro plus1 p p1
4614Either statement begins the definition of a macro called @code{plus1},
4615which takes two arguments; within the macro definition, write
4616@samp{\p} or @samp{\p1} to evaluate the arguments.
4617
4618@item .macro reserve_str p1=0 p2
4619Begin the definition of a macro called @code{reserve_str}, with two
4620arguments. The first argument has a default value, but not the second.
4621After the definition is complete, you can call the macro either as
4622@samp{reserve_str @var{a},@var{b}} (with @samp{\p1} evaluating to
4623@var{a} and @samp{\p2} evaluating to @var{b}), or as @samp{reserve_str
4624,@var{b}} (with @samp{\p1} evaluating as the default, in this case
4625@samp{0}, and @samp{\p2} evaluating to @var{b}).
4626@end table
4627
4628When you call a macro, you can specify the argument values either by
4629position, or by keyword. For example, @samp{sum 9,17} is equivalent to
4630@samp{sum to=17, from=9}.
4631
4632@item .endm
4633@cindex @code{endm} directive
4634Mark the end of a macro definition.
4635
4636@item .exitm
4637@cindex @code{exitm} directive
4638Exit early from the current macro definition.
4639
4640@cindex number of macros executed
4641@cindex macros, count executed
4642@item \@@
a4fb0134 4643@command{@value{AS}} maintains a counter of how many macros it has
252b5132
RH
4644executed in this pseudo-variable; you can copy that number to your
4645output with @samp{\@@}, but @emph{only within a macro definition}.
4646
4647@ignore
4648@item LOCAL @var{name} [ , @dots{} ]
4649@emph{Warning: @code{LOCAL} is only available if you select ``alternate
4650macro syntax'' with @samp{-a} or @samp{--alternate}.} @xref{Alternate,,
4651Alternate macro syntax}.
4652
4653Generate a string replacement for each of the @var{name} arguments, and
4654replace any instances of @var{name} in each macro expansion. The
4655replacement string is unique in the assembly, and different for each
4656separate macro expansion. @code{LOCAL} allows you to write macros that
4657define symbols, without fear of conflict between separate macro expansions.
4658@end ignore
4659@end ftable
4660
4661@node Nolist
4662@section @code{.nolist}
4663
4664@cindex @code{nolist} directive
4665@cindex listing control, turning off
4666Control (in conjunction with the @code{.list} directive) whether or
4667not assembly listings are generated. These two directives maintain an
4668internal counter (which is zero initially). @code{.list} increments the
4669counter, and @code{.nolist} decrements it. Assembly listings are
4670generated whenever the counter is greater than zero.
4671
4672@node Octa
4673@section @code{.octa @var{bignums}}
4674
4675@c FIXME: double size emitted for "octa" on i960, others? Or warn?
4676@cindex @code{octa} directive
4677@cindex integer, 16-byte
4678@cindex sixteen byte integer
4679This directive expects zero or more bignums, separated by commas. For each
4680bignum, it emits a 16-byte integer.
4681
4682The term ``octa'' comes from contexts in which a ``word'' is two bytes;
4683hence @emph{octa}-word for 16 bytes.
4684
4685@node Org
4686@section @code{.org @var{new-lc} , @var{fill}}
4687
4688@cindex @code{org} directive
4689@cindex location counter, advancing
4690@cindex advancing location counter
4691@cindex current address, advancing
4692Advance the location counter of the current section to
4693@var{new-lc}. @var{new-lc} is either an absolute expression or an
4694expression with the same section as the current subsection. That is,
4695you can't use @code{.org} to cross sections: if @var{new-lc} has the
4696wrong section, the @code{.org} directive is ignored. To be compatible
4697with former assemblers, if the section of @var{new-lc} is absolute,
a4fb0134 4698@command{@value{AS}} issues a warning, then pretends the section of @var{new-lc}
252b5132
RH
4699is the same as the current subsection.
4700
4701@code{.org} may only increase the location counter, or leave it
4702unchanged; you cannot use @code{.org} to move the location counter
4703backwards.
4704
4705@c double negative used below "not undefined" because this is a specific
4706@c reference to "undefined" (as SEG_UNKNOWN is called in this manual)
4707@c section. doc@cygnus.com 18feb91
a4fb0134 4708Because @command{@value{AS}} tries to assemble programs in one pass, @var{new-lc}
252b5132
RH
4709may not be undefined. If you really detest this restriction we eagerly await
4710a chance to share your improved assembler.
4711
4712Beware that the origin is relative to the start of the section, not
4713to the start of the subsection. This is compatible with other
4714people's assemblers.
4715
4716When the location counter (of the current subsection) is advanced, the
4717intervening bytes are filled with @var{fill} which should be an
4718absolute expression. If the comma and @var{fill} are omitted,
4719@var{fill} defaults to zero.
4720
4721@node P2align
4722@section @code{.p2align[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
4723
4724@cindex padding the location counter given a power of two
4725@cindex @code{p2align} directive
4726Pad the location counter (in the current subsection) to a particular
4727storage boundary. The first expression (which must be absolute) is the
4728number of low-order zero bits the location counter must have after
4729advancement. For example @samp{.p2align 3} advances the location
4730counter until it a multiple of 8. If the location counter is already a
4731multiple of 8, no change is needed.
4732
4733The second expression (also absolute) gives the fill value to be stored in the
4734padding bytes. It (and the comma) may be omitted. If it is omitted, the
4735padding bytes are normally zero. However, on some systems, if the section is
4736marked as containing code and the fill value is omitted, the space is filled
4737with no-op instructions.
4738
4739The third expression is also absolute, and is also optional. If it is present,
4740it is the maximum number of bytes that should be skipped by this alignment
4741directive. If doing the alignment would require skipping more bytes than the
4742specified maximum, then the alignment is not done at all. You can omit the
4743fill value (the second argument) entirely by simply using two commas after the
4744required alignment; this can be useful if you want the alignment to be filled
4745with no-op instructions when appropriate.
4746
4747@cindex @code{p2alignw} directive
4748@cindex @code{p2alignl} directive
4749The @code{.p2alignw} and @code{.p2alignl} directives are variants of the
4750@code{.p2align} directive. The @code{.p2alignw} directive treats the fill
4751pattern as a two byte word value. The @code{.p2alignl} directives treats the
4752fill pattern as a four byte longword value. For example, @code{.p2alignw
47532,0x368d} will align to a multiple of 4. If it skips two bytes, they will be
4754filled in with the value 0x368d (the exact placement of the bytes depends upon
4755the endianness of the processor). If it skips 1 or 3 bytes, the fill value is
4756undefined.
4757
c91d2e08
NC
4758@ifset ELF
4759@node Previous
4760@section @code{.previous}
4761
4762@cindex @code{.previous} directive
4763@cindex Section Stack
4764This is one of the ELF section stack manipulation directives. The others are
a349d9dd
PB
4765@code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}),
4766@code{.pushsection} (@pxref{PushSection}), and @code{.popsection}
4767(@pxref{PopSection}).
c91d2e08
NC
4768
4769This directive swaps the current section (and subsection) with most recently
4770referenced section (and subsection) prior to this one. Multiple
4771@code{.previous} directives in a row will flip between two sections (and their
4772subsections).
4773
4774In terms of the section stack, this directive swaps the current section with
4775the top section on the section stack.
4776@end ifset
4777
4778@ifset ELF
4779@node PopSection
4780@section @code{.popsection}
4781
4782@cindex @code{.popsection} directive
4783@cindex Section Stack
4784This is one of the ELF section stack manipulation directives. The others are
a349d9dd
PB
4785@code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}),
4786@code{.pushsection} (@pxref{PushSection}), and @code{.previous}
4787(@pxref{Previous}).
c91d2e08
NC
4788
4789This directive replaces the current section (and subsection) with the top
4790section (and subsection) on the section stack. This section is popped off the
4791stack.
c91d2e08
NC
4792@end ifset
4793
252b5132
RH
4794@node Print
4795@section @code{.print @var{string}}
4796
4797@cindex @code{print} directive
a4fb0134 4798@command{@value{AS}} will print @var{string} on the standard output during
252b5132
RH
4799assembly. You must put @var{string} in double quotes.
4800
c91d2e08
NC
4801@ifset ELF
4802@node Protected
4803@section @code{.protected @var{names}}
4804
4805@cindex @code{.protected} directive
4806@cindex Visibility
4807This one of the ELF visibility directives. The other two are
a349d9dd 4808@code{.hidden} (@pxref{Hidden}) and @code{.internal} (@pxref{Internal}).
c91d2e08
NC
4809
4810This directive overrides the named symbols default visibility (which is set by
4811their binding: local, global or weak). The directive sets the visibility to
4812@code{protected} which means that any references to the symbols from within the
4813components that defines them must be resolved to the definition in that
4814component, even if a definition in another component would normally preempt
4815this.
4816@end ifset
4817
252b5132
RH
4818@node Psize
4819@section @code{.psize @var{lines} , @var{columns}}
4820
4821@cindex @code{psize} directive
4822@cindex listing control: paper size
4823@cindex paper size, for listings
4824Use this directive to declare the number of lines---and, optionally, the
4825number of columns---to use for each page, when generating listings.
4826
4827If you do not use @code{.psize}, listings use a default line-count
4828of 60. You may omit the comma and @var{columns} specification; the
4829default width is 200 columns.
4830
a4fb0134 4831@command{@value{AS}} generates formfeeds whenever the specified number of
252b5132
RH
4832lines is exceeded (or whenever you explicitly request one, using
4833@code{.eject}).
4834
4835If you specify @var{lines} as @code{0}, no formfeeds are generated save
4836those explicitly specified with @code{.eject}.
4837
4838@node Purgem
4839@section @code{.purgem @var{name}}
4840
4841@cindex @code{purgem} directive
4842Undefine the macro @var{name}, so that later uses of the string will not be
4843expanded. @xref{Macro}.
4844
c91d2e08
NC
4845@ifset ELF
4846@node PushSection
4847@section @code{.pushsection @var{name} , @var{subsection}}
4848
4849@cindex @code{.pushsection} directive
4850@cindex Section Stack
4851This is one of the ELF section stack manipulation directives. The others are
a349d9dd
PB
4852@code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}),
4853@code{.popsection} (@pxref{PopSection}), and @code{.previous}
4854(@pxref{Previous}).
c91d2e08 4855
a349d9dd 4856This directive is a synonym for @code{.section}. It pushes the current section
c91d2e08
NC
4857(and subsection) onto the top of the section stack, and then replaces the
4858current section and subsection with @code{name} and @code{subsection}.
c91d2e08
NC
4859@end ifset
4860
252b5132
RH
4861@node Quad
4862@section @code{.quad @var{bignums}}
4863
4864@cindex @code{quad} directive
4865@code{.quad} expects zero or more bignums, separated by commas. For
4866each bignum, it emits
4867@ifclear bignum-16
4868an 8-byte integer. If the bignum won't fit in 8 bytes, it prints a
4869warning message; and just takes the lowest order 8 bytes of the bignum.
4870@cindex eight-byte integer
4871@cindex integer, 8-byte
4872
4873The term ``quad'' comes from contexts in which a ``word'' is two bytes;
4874hence @emph{quad}-word for 8 bytes.
4875@end ifclear
4876@ifset bignum-16
4877a 16-byte integer. If the bignum won't fit in 16 bytes, it prints a
4878warning message; and just takes the lowest order 16 bytes of the bignum.
4879@cindex sixteen-byte integer
4880@cindex integer, 16-byte
4881@end ifset
4882
4883@node Rept
4884@section @code{.rept @var{count}}
4885
4886@cindex @code{rept} directive
4887Repeat the sequence of lines between the @code{.rept} directive and the next
4888@code{.endr} directive @var{count} times.
4889
4890For example, assembling
4891
4892@example
4893 .rept 3
4894 .long 0
4895 .endr
4896@end example
4897
4898is equivalent to assembling
4899
4900@example
4901 .long 0
4902 .long 0
4903 .long 0
4904@end example
4905
4906@node Sbttl
4907@section @code{.sbttl "@var{subheading}"}
4908
4909@cindex @code{sbttl} directive
4910@cindex subtitles for listings
4911@cindex listing control: subtitle
4912Use @var{subheading} as the title (third line, immediately after the
4913title line) when generating assembly listings.
4914
4915This directive affects subsequent pages, as well as the current page if
4916it appears within ten lines of the top of a page.
4917
4918@ifset COFF
4919@node Scl
4920@section @code{.scl @var{class}}
4921
4922@cindex @code{scl} directive
4923@cindex symbol storage class (COFF)
4924@cindex COFF symbol storage class
4925Set the storage-class value for a symbol. This directive may only be
4926used inside a @code{.def}/@code{.endef} pair. Storage class may flag
4927whether a symbol is static or external, or it may record further
4928symbolic debugging information.
4929@ifset BOUT
4930
4931The @samp{.scl} directive is primarily associated with COFF output; when
a4fb0134 4932configured to generate @code{b.out} output format, @command{@value{AS}}
252b5132
RH
4933accepts this directive but ignores it.
4934@end ifset
4935@end ifset
4936
4937@node Section
c91d2e08 4938@section @code{.section @var{name}} (COFF version)
252b5132
RH
4939
4940@cindex @code{section} directive
4941@cindex named section
4942Use the @code{.section} directive to assemble the following code into a section
4943named @var{name}.
4944
4945This directive is only supported for targets that actually support arbitrarily
4946named sections; on @code{a.out} targets, for example, it is not accepted, even
4947with a standard @code{a.out} section name.
4948
252b5132
RH
4949For COFF targets, the @code{.section} directive is used in one of the following
4950ways:
c91d2e08 4951
252b5132
RH
4952@smallexample
4953.section @var{name}[, "@var{flags}"]
4954.section @var{name}[, @var{subsegment}]
4955@end smallexample
4956
4957If the optional argument is quoted, it is taken as flags to use for the
4958section. Each flag is a single character. The following flags are recognized:
4959@table @code
4960@item b
4961bss section (uninitialized data)
4962@item n
4963section is not loaded
4964@item w
4965writable section
4966@item d
4967data section
4968@item r
4969read-only section
4970@item x
4971executable section
2dcc60be
ILT
4972@item s
4973shared section (meaningful for PE targets)
252b5132
RH
4974@end table
4975
4976If no flags are specified, the default flags depend upon the section name. If
4977the section name is not recognized, the default will be for the section to be
7e84d676
NC
4978loaded and writable. Note the @code{n} and @code{w} flags remove attributes
4979from the section, rather than adding them, so if they are used on their own it
4980will be as if no flags had been specified at all.
252b5132
RH
4981
4982If the optional argument to the @code{.section} directive is not quoted, it is
4983taken as a subsegment number (@pxref{Sub-Sections}).
252b5132 4984
c91d2e08
NC
4985
4986@section @code{.section @var{name}} (ELF version)
4987
4988@cindex @code{section} directive
4989@cindex named section
252b5132 4990@ifset ELF
c91d2e08
NC
4991@cindex Section Stack
4992This is one of the ELF section stack manipulation directives. The others are
a349d9dd
PB
4993@code{.subsection} (@pxref{SubSection}), @code{.pushsection}
4994(@pxref{PushSection}), @code{.popsection} (@pxref{PopSection}), and
4995@code{.previous} (@pxref{Previous}).
c91d2e08
NC
4996@end ifset
4997
252b5132 4998For ELF targets, the @code{.section} directive is used like this:
c91d2e08 4999
252b5132 5000@smallexample
ec38dd05 5001.section @var{name} [, "@var{flags}"[, @@@var{type}[, @@@var{entsize}]]]
252b5132 5002@end smallexample
c91d2e08 5003
252b5132 5004The optional @var{flags} argument is a quoted string which may contain any
a349d9dd 5005combination of the following characters:
252b5132
RH
5006@table @code
5007@item a
5008section is allocatable
5009@item w
5010section is writable
5011@item x
5012section is executable
ec38dd05
JJ
5013@item M
5014section is mergeable
5015@item S
5016section contains zero terminated strings
252b5132
RH
5017@end table
5018
5019The optional @var{type} argument may contain one of the following constants:
5020@table @code
5021@item @@progbits
5022section contains data
5023@item @@nobits
5024section does not contain data (i.e., section only occupies space)
5025@end table
5026
ec38dd05
JJ
5027If @var{flags} contains @code{M} flag, @var{type} argument must be specified
5028as well as @var{entsize} argument. Sections with @code{M} flag but not
5029@code{S} flag must contain fixed size constants, each @var{entsize} octets
5030long. Sections with both @code{M} and @code{S} must contain zero terminated
5031strings where each character is @var{entsize} bytes long. The linker may remove
5032duplicates within sections with the same name, same entity size and same flags.
5033
252b5132
RH
5034If no flags are specified, the default flags depend upon the section name. If
5035the section name is not recognized, the default will be for the section to have
5036none of the above flags: it will not be allocated in memory, nor writable, nor
5037executable. The section will contain data.
5038
5039For ELF targets, the assembler supports another type of @code{.section}
5040directive for compatibility with the Solaris assembler:
c91d2e08 5041
252b5132
RH
5042@smallexample
5043.section "@var{name}"[, @var{flags}...]
5044@end smallexample
c91d2e08 5045
252b5132
RH
5046Note that the section name is quoted. There may be a sequence of comma
5047separated flags:
5048@table @code
5049@item #alloc
5050section is allocatable
5051@item #write
5052section is writable
5053@item #execinstr
5054section is executable
5055@end table
c91d2e08
NC
5056
5057This directive replaces the current section and subsection. The replaced
5058section and subsection are pushed onto the section stack. See the contents of
5059the gas testsuite directory @code{gas/testsuite/gas/elf} for some examples of
5060how this directive and the other section stack directives work.
252b5132
RH
5061
5062@node Set
5063@section @code{.set @var{symbol}, @var{expression}}
5064
5065@cindex @code{set} directive
5066@cindex symbol value, setting
5067Set the value of @var{symbol} to @var{expression}. This
5068changes @var{symbol}'s value and type to conform to
5069@var{expression}. If @var{symbol} was flagged as external, it remains
5070flagged (@pxref{Symbol Attributes}).
5071
5072You may @code{.set} a symbol many times in the same assembly.
5073
5074If you @code{.set} a global symbol, the value stored in the object
5075file is the last value stored into it.
5076
5077@ifset HPPA
5078The syntax for @code{set} on the HPPA is
5079@samp{@var{symbol} .set @var{expression}}.
5080@end ifset
5081
5082@node Short
5083@section @code{.short @var{expressions}}
5084
5085@cindex @code{short} directive
5086@ifset GENERIC
5087@code{.short} is normally the same as @samp{.word}.
5088@xref{Word,,@code{.word}}.
5089
5090In some configurations, however, @code{.short} and @code{.word} generate
5091numbers of different lengths; @pxref{Machine Dependencies}.
5092@end ifset
5093@ifclear GENERIC
5094@ifset W16
5095@code{.short} is the same as @samp{.word}. @xref{Word,,@code{.word}}.
5096@end ifset
5097@ifset W32
5098This expects zero or more @var{expressions}, and emits
5099a 16 bit number for each.
5100@end ifset
5101@end ifclear
5102
5103@node Single
5104@section @code{.single @var{flonums}}
5105
5106@cindex @code{single} directive
5107@cindex floating point numbers (single)
5108This directive assembles zero or more flonums, separated by commas. It
5109has the same effect as @code{.float}.
5110@ifset GENERIC
5111The exact kind of floating point numbers emitted depends on how
a4fb0134 5112@command{@value{AS}} is configured. @xref{Machine Dependencies}.
252b5132
RH
5113@end ifset
5114@ifclear GENERIC
5115@ifset IEEEFLOAT
5116On the @value{TARGET} family, @code{.single} emits 32-bit floating point
5117numbers in @sc{ieee} format.
5118@end ifset
5119@end ifclear
5120
252b5132 5121@node Size
c91d2e08 5122@section @code{.size} (COFF version)
c91d2e08 5123
9a297610 5124@cindex @code{size} directive
252b5132
RH
5125This directive is generated by compilers to include auxiliary debugging
5126information in the symbol table. It is only permitted inside
5127@code{.def}/@code{.endef} pairs.
252b5132 5128
c91d2e08 5129@ifset BOUT
252b5132 5130@samp{.size} is only meaningful when generating COFF format output; when
a4fb0134 5131@command{@value{AS}} is generating @code{b.out}, it accepts this directive but
252b5132
RH
5132ignores it.
5133@end ifset
c91d2e08
NC
5134
5135@section @code{.size @var{name} , @var{expression}} (ELF version)
5136@cindex @code{size} directive
5137
5138This directive is used to set the size associated with a symbol @var{name}.
5139The size in bytes is computed from @var{expression} which can make use of label
5140arithmetic. This directive is typically used to set the size of function
5141symbols.
252b5132
RH
5142
5143@node Sleb128
5144@section @code{.sleb128 @var{expressions}}
5145
5146@cindex @code{sleb128} directive
5147@var{sleb128} stands for ``signed little endian base 128.'' This is a
5148compact, variable length representation of numbers used by the DWARF
5149symbolic debugging format. @xref{Uleb128,@code{.uleb128}}.
5150
5151@ifclear no-space-dir
5152@node Skip
5153@section @code{.skip @var{size} , @var{fill}}
5154
5155@cindex @code{skip} directive
5156@cindex filling memory
5157This directive emits @var{size} bytes, each of value @var{fill}. Both
5158@var{size} and @var{fill} are absolute expressions. If the comma and
5159@var{fill} are omitted, @var{fill} is assumed to be zero. This is the same as
5160@samp{.space}.
5161
5162@node Space
5163@section @code{.space @var{size} , @var{fill}}
5164
5165@cindex @code{space} directive
5166@cindex filling memory
5167This directive emits @var{size} bytes, each of value @var{fill}. Both
5168@var{size} and @var{fill} are absolute expressions. If the comma
5169and @var{fill} are omitted, @var{fill} is assumed to be zero. This is the same
5170as @samp{.skip}.
5171
5172@ifset HPPA
5173@quotation
5174@emph{Warning:} @code{.space} has a completely different meaning for HPPA
5175targets; use @code{.block} as a substitute. See @cite{HP9000 Series 800
5176Assembly Language Reference Manual} (HP 92432-90001) for the meaning of the
5177@code{.space} directive. @xref{HPPA Directives,,HPPA Assembler Directives},
5178for a summary.
5179@end quotation
5180@end ifset
5181@end ifclear
5182
5183@ifset A29K
5184@ifclear GENERIC
5185@node Space
5186@section @code{.space}
5187@cindex @code{space} directive
5188@end ifclear
5189On the AMD 29K, this directive is ignored; it is accepted for
5190compatibility with other AMD 29K assemblers.
5191
5192@quotation
5193@emph{Warning:} In most versions of the @sc{gnu} assembler, the directive
5194@code{.space} has the effect of @code{.block} @xref{Machine Dependencies}.
5195@end quotation
5196@end ifset
5197
5198@ifset have-stabs
5199@node Stab
5200@section @code{.stabd, .stabn, .stabs}
5201
5202@cindex symbolic debuggers, information for
5203@cindex @code{stab@var{x}} directives
5204There are three directives that begin @samp{.stab}.
5205All emit symbols (@pxref{Symbols}), for use by symbolic debuggers.
a4fb0134 5206The symbols are not entered in the @command{@value{AS}} hash table: they
252b5132
RH
5207cannot be referenced elsewhere in the source file.
5208Up to five fields are required:
5209
5210@table @var
5211@item string
5212This is the symbol's name. It may contain any character except
5213@samp{\000}, so is more general than ordinary symbol names. Some
5214debuggers used to code arbitrarily complex structures into symbol names
5215using this field.
5216
5217@item type
5218An absolute expression. The symbol's type is set to the low 8 bits of
5219this expression. Any bit pattern is permitted, but @code{@value{LD}}
5220and debuggers choke on silly bit patterns.
5221
5222@item other
5223An absolute expression. The symbol's ``other'' attribute is set to the
5224low 8 bits of this expression.
5225
5226@item desc
5227An absolute expression. The symbol's descriptor is set to the low 16
5228bits of this expression.
5229
5230@item value
5231An absolute expression which becomes the symbol's value.
5232@end table
5233
5234If a warning is detected while reading a @code{.stabd}, @code{.stabn},
5235or @code{.stabs} statement, the symbol has probably already been created;
5236you get a half-formed symbol in your object file. This is
5237compatible with earlier assemblers!
5238
5239@table @code
5240@cindex @code{stabd} directive
5241@item .stabd @var{type} , @var{other} , @var{desc}
5242
5243The ``name'' of the symbol generated is not even an empty string.
5244It is a null pointer, for compatibility. Older assemblers used a
5245null pointer so they didn't waste space in object files with empty
5246strings.
5247
5248The symbol's value is set to the location counter,
5249relocatably. When your program is linked, the value of this symbol
5250is the address of the location counter when the @code{.stabd} was
5251assembled.
5252
5253@cindex @code{stabn} directive
5254@item .stabn @var{type} , @var{other} , @var{desc} , @var{value}
5255The name of the symbol is set to the empty string @code{""}.
5256
5257@cindex @code{stabs} directive
5258@item .stabs @var{string} , @var{type} , @var{other} , @var{desc} , @var{value}
5259All five fields are specified.
5260@end table
5261@end ifset
5262@c end have-stabs
5263
5264@node String
5265@section @code{.string} "@var{str}"
5266
5267@cindex string, copying to object file
5268@cindex @code{string} directive
5269
5270Copy the characters in @var{str} to the object file. You may specify more than
5271one string to copy, separated by commas. Unless otherwise specified for a
5272particular machine, the assembler marks the end of each string with a 0 byte.
5273You can use any of the escape sequences described in @ref{Strings,,Strings}.
5274
5275@node Struct
5276@section @code{.struct @var{expression}}
5277
5278@cindex @code{struct} directive
5279Switch to the absolute section, and set the section offset to @var{expression},
5280which must be an absolute expression. You might use this as follows:
5281@smallexample
5282 .struct 0
5283field1:
5284 .struct field1 + 4
5285field2:
5286 .struct field2 + 4
5287field3:
5288@end smallexample
5289This would define the symbol @code{field1} to have the value 0, the symbol
5290@code{field2} to have the value 4, and the symbol @code{field3} to have the
5291value 8. Assembly would be left in the absolute section, and you would need to
5292use a @code{.section} directive of some sort to change to some other section
5293before further assembly.
5294
c91d2e08
NC
5295@ifset ELF
5296@node SubSection
5297@section @code{.subsection @var{name}}
5298
5299@cindex @code{.subsection} directive
5300@cindex Section Stack
5301This is one of the ELF section stack manipulation directives. The others are
a349d9dd
PB
5302@code{.section} (@pxref{Section}), @code{.pushsection} (@pxref{PushSection}),
5303@code{.popsection} (@pxref{PopSection}), and @code{.previous}
5304(@pxref{Previous}).
c91d2e08
NC
5305
5306This directive replaces the current subsection with @code{name}. The current
5307section is not changed. The replaced subsection is put onto the section stack
5308in place of the then current top of stack subsection.
c91d2e08
NC
5309@end ifset
5310
252b5132
RH
5311@ifset ELF
5312@node Symver
5313@section @code{.symver}
5314@cindex @code{symver} directive
5315@cindex symbol versioning
5316@cindex versions of symbols
5317Use the @code{.symver} directive to bind symbols to specific version nodes
5318within a source file. This is only supported on ELF platforms, and is
5319typically used when assembling files to be linked into a shared library.
5320There are cases where it may make sense to use this in objects to be bound
5321into an application itself so as to override a versioned symbol from a
5322shared library.
5323
79082ff0 5324For ELF targets, the @code{.symver} directive can be used like this:
252b5132
RH
5325@smallexample
5326.symver @var{name}, @var{name2@@nodename}
5327@end smallexample
339681c0 5328If the symbol @var{name} is defined within the file
79082ff0 5329being assembled, the @code{.symver} directive effectively creates a symbol
252b5132
RH
5330alias with the name @var{name2@@nodename}, and in fact the main reason that we
5331just don't try and create a regular alias is that the @var{@@} character isn't
5332permitted in symbol names. The @var{name2} part of the name is the actual name
5333of the symbol by which it will be externally referenced. The name @var{name}
5334itself is merely a name of convenience that is used so that it is possible to
5335have definitions for multiple versions of a function within a single source
5336file, and so that the compiler can unambiguously know which version of a
5337function is being mentioned. The @var{nodename} portion of the alias should be
5338the name of a node specified in the version script supplied to the linker when
5339building a shared library. If you are attempting to override a versioned
5340symbol from a shared library, then @var{nodename} should correspond to the
5341nodename of the symbol you are trying to override.
339681c0
L
5342
5343If the symbol @var{name} is not defined within the file being assembled, all
5344references to @var{name} will be changed to @var{name2@@nodename}. If no
5345reference to @var{name} is made, @var{name2@@nodename} will be removed from the
5346symbol table.
79082ff0
L
5347
5348Another usage of the @code{.symver} directive is:
5349@smallexample
5350.symver @var{name}, @var{name2@@@@nodename}
5351@end smallexample
5352In this case, the symbol @var{name} must exist and be defined within
a349d9dd 5353the file being assembled. It is similar to @var{name2@@nodename}. The
79082ff0
L
5354difference is @var{name2@@@@nodename} will also be used to resolve
5355references to @var{name2} by the linker.
5356
5357The third usage of the @code{.symver} directive is:
5358@smallexample
5359.symver @var{name}, @var{name2@@@@@@nodename}
5360@end smallexample
5361When @var{name} is not defined within the
5362file being assembled, it is treated as @var{name2@@nodename}. When
5363@var{name} is defined within the file being assembled, the symbol
5364name, @var{name}, will be changed to @var{name2@@@@nodename}.
252b5132
RH
5365@end ifset
5366
5367@ifset COFF
5368@node Tag
5369@section @code{.tag @var{structname}}
5370
5371@cindex COFF structure debugging
5372@cindex structure debugging, COFF
5373@cindex @code{tag} directive
5374This directive is generated by compilers to include auxiliary debugging
5375information in the symbol table. It is only permitted inside
5376@code{.def}/@code{.endef} pairs. Tags are used to link structure
5377definitions in the symbol table with instances of those structures.
5378@ifset BOUT
5379
5380@samp{.tag} is only used when generating COFF format output; when
a4fb0134 5381@command{@value{AS}} is generating @code{b.out}, it accepts this directive but
252b5132
RH
5382ignores it.
5383@end ifset
5384@end ifset
5385
5386@node Text
5387@section @code{.text @var{subsection}}
5388
5389@cindex @code{text} directive
a4fb0134 5390Tells @command{@value{AS}} to assemble the following statements onto the end of
252b5132
RH
5391the text subsection numbered @var{subsection}, which is an absolute
5392expression. If @var{subsection} is omitted, subsection number zero
5393is used.
5394
5395@node Title
5396@section @code{.title "@var{heading}"}
5397
5398@cindex @code{title} directive
5399@cindex listing control: title line
5400Use @var{heading} as the title (second line, immediately after the
5401source file name and pagenumber) when generating assembly listings.
5402
5403This directive affects subsequent pages, as well as the current page if
5404it appears within ten lines of the top of a page.
5405
252b5132 5406@node Type
c91d2e08 5407@section @code{.type @var{int}} (COFF version)
252b5132
RH
5408
5409@cindex COFF symbol type
5410@cindex symbol type, COFF
5411@cindex @code{type} directive
5412This directive, permitted only within @code{.def}/@code{.endef} pairs,
5413records the integer @var{int} as the type attribute of a symbol table entry.
252b5132 5414
c91d2e08 5415@ifset BOUT
252b5132 5416@samp{.type} is associated only with COFF format output; when
a4fb0134 5417@command{@value{AS}} is configured for @code{b.out} output, it accepts this
252b5132
RH
5418directive but ignores it.
5419@end ifset
c91d2e08
NC
5420
5421@section @code{.type @var{name} , @var{type description}} (ELF version)
5422
5423@cindex ELF symbol type
5424@cindex symbol type, ELF
5425@cindex @code{type} directive
5426This directive is used to set the type of symbol @var{name} to be either a
a349d9dd 5427function symbol or an object symbol. There are five different syntaxes
c91d2e08 5428supported for the @var{type description} field, in order to provide
a349d9dd 5429compatibility with various other assemblers. The syntaxes supported are:
c91d2e08
NC
5430
5431@smallexample
5432 .type <name>,#function
5433 .type <name>,#object
5434
5435 .type <name>,@@function
5436 .type <name>,@@object
5437
5438 .type <name>,%function
5439 .type <name>,%object
5440
5441 .type <name>,"function"
5442 .type <name>,"object"
5443
5444 .type <name> STT_FUNCTION
5445 .type <name> STT_OBJECT
5446@end smallexample
5447
5448@node Uleb128
5449@section @code{.uleb128 @var{expressions}}
5450
5451@cindex @code{uleb128} directive
5452@var{uleb128} stands for ``unsigned little endian base 128.'' This is a
5453compact, variable length representation of numbers used by the DWARF
5454symbolic debugging format. @xref{Sleb128,@code{.sleb128}}.
252b5132
RH
5455
5456@ifset COFF
5457@node Val
5458@section @code{.val @var{addr}}
5459
5460@cindex @code{val} directive
5461@cindex COFF value attribute
5462@cindex value attribute, COFF
5463This directive, permitted only within @code{.def}/@code{.endef} pairs,
5464records the address @var{addr} as the value attribute of a symbol table
5465entry.
5466@ifset BOUT
5467
a4fb0134 5468@samp{.val} is used only for COFF output; when @command{@value{AS}} is
252b5132
RH
5469configured for @code{b.out}, it accepts this directive but ignores it.
5470@end ifset
5471@end ifset
5472
2e13b764 5473@ifset ELF
c91d2e08
NC
5474@node Version
5475@section @code{.version "@var{string}"}
2e13b764 5476
c91d2e08
NC
5477@cindex @code{.version}
5478This directive creates a @code{.note} section and places into it an ELF
5479formatted note of type NT_VERSION. The note's name is set to @code{string}.
9a297610 5480@end ifset
2e13b764 5481
c91d2e08
NC
5482@ifset ELF
5483@node VTableEntry
5484@section @code{.vtable_entry @var{table}, @var{offset}}
2e13b764 5485
c91d2e08
NC
5486@cindex @code{.vtable_entry}
5487This directive finds or creates a symbol @code{table} and creates a
5488@code{VTABLE_ENTRY} relocation for it with an addend of @code{offset}.
2e13b764 5489
c91d2e08
NC
5490@node VTableInherit
5491@section @code{.vtable_inherit @var{child}, @var{parent}}
2e13b764 5492
c91d2e08
NC
5493@cindex @code{.vtable_inherit}
5494This directive finds the symbol @code{child} and finds or creates the symbol
5495@code{parent} and then creates a @code{VTABLE_INHERIT} relocation for the
a349d9dd 5496parent whose addend is the value of the child symbol. As a special case the
c91d2e08
NC
5497parent name of @code{0} is treated as refering the @code{*ABS*} section.
5498@end ifset
2e13b764 5499
c91d2e08
NC
5500@ifset ELF
5501@node Weak
5502@section @code{.weak @var{names}}
2e13b764 5503
c91d2e08 5504@cindex @code{.weak}
a349d9dd 5505This directive sets the weak attribute on the comma separated list of symbol
c91d2e08 5506@code{names}. If the symbols do not already exist, they will be created.
2e13b764
NC
5507@end ifset
5508
252b5132
RH
5509@node Word
5510@section @code{.word @var{expressions}}
5511
5512@cindex @code{word} directive
5513This directive expects zero or more @var{expressions}, of any section,
5514separated by commas.
5515@ifclear GENERIC
5516@ifset W32
a4fb0134 5517For each expression, @command{@value{AS}} emits a 32-bit number.
252b5132
RH
5518@end ifset
5519@ifset W16
a4fb0134 5520For each expression, @command{@value{AS}} emits a 16-bit number.
252b5132
RH
5521@end ifset
5522@end ifclear
5523@ifset GENERIC
5524
5525The size of the number emitted, and its byte order,
5526depend on what target computer the assembly is for.
5527@end ifset
5528
5529@c on amd29k, i960, sparc the "special treatment to support compilers" doesn't
5530@c happen---32-bit addressability, period; no long/short jumps.
5531@ifset DIFF-TBL-KLUGE
5532@cindex difference tables altered
5533@cindex altered difference tables
5534@quotation
5535@emph{Warning: Special Treatment to support Compilers}
5536@end quotation
5537
5538@ifset GENERIC
5539Machines with a 32-bit address space, but that do less than 32-bit
5540addressing, require the following special treatment. If the machine of
5541interest to you does 32-bit addressing (or doesn't require it;
5542@pxref{Machine Dependencies}), you can ignore this issue.
5543
5544@end ifset
5545In order to assemble compiler output into something that works,
a4fb0134 5546@command{@value{AS}} occasionally does strange things to @samp{.word} directives.
252b5132 5547Directives of the form @samp{.word sym1-sym2} are often emitted by
a4fb0134 5548compilers as part of jump tables. Therefore, when @command{@value{AS}} assembles a
252b5132 5549directive of the form @samp{.word sym1-sym2}, and the difference between
a4fb0134 5550@code{sym1} and @code{sym2} does not fit in 16 bits, @command{@value{AS}}
252b5132
RH
5551creates a @dfn{secondary jump table}, immediately before the next label.
5552This secondary jump table is preceded by a short-jump to the
5553first byte after the secondary table. This short-jump prevents the flow
5554of control from accidentally falling into the new table. Inside the
5555table is a long-jump to @code{sym2}. The original @samp{.word}
5556contains @code{sym1} minus the address of the long-jump to
5557@code{sym2}.
5558
5559If there were several occurrences of @samp{.word sym1-sym2} before the
5560secondary jump table, all of them are adjusted. If there was a
5561@samp{.word sym3-sym4}, that also did not fit in sixteen bits, a
5562long-jump to @code{sym4} is included in the secondary jump table,
5563and the @code{.word} directives are adjusted to contain @code{sym3}
5564minus the address of the long-jump to @code{sym4}; and so on, for as many
5565entries in the original jump table as necessary.
5566
5567@ifset INTERNALS
a4fb0134 5568@emph{This feature may be disabled by compiling @command{@value{AS}} with the
252b5132
RH
5569@samp{-DWORKING_DOT_WORD} option.} This feature is likely to confuse
5570assembly language programmers.
5571@end ifset
5572@end ifset
5573@c end DIFF-TBL-KLUGE
5574
5575@node Deprecated
5576@section Deprecated Directives
5577
5578@cindex deprecated directives
5579@cindex obsolescent directives
5580One day these directives won't work.
5581They are included for compatibility with older assemblers.
5582@table @t
5583@item .abort
5584@item .line
5585@end table
5586
5587@ifset GENERIC
5588@node Machine Dependencies
5589@chapter Machine Dependent Features
5590
5591@cindex machine dependencies
5592The machine instruction sets are (almost by definition) different on
a4fb0134
SC
5593each machine where @command{@value{AS}} runs. Floating point representations
5594vary as well, and @command{@value{AS}} often supports a few additional
252b5132
RH
5595directives or command-line options for compatibility with other
5596assemblers on a particular platform. Finally, some versions of
a4fb0134 5597@command{@value{AS}} support special pseudo-instructions for branch
252b5132
RH
5598optimization.
5599
5600This chapter discusses most of these differences, though it does not
5601include details on any machine's instruction set. For details on that
5602subject, see the hardware manufacturer's manual.
5603
5604@menu
5605@ifset A29K
5606* AMD29K-Dependent:: AMD 29K Dependent Features
5607@end ifset
625e1353
RH
5608@ifset ALPHA
5609* Alpha-Dependent:: Alpha Dependent Features
5610@end ifset
252b5132
RH
5611@ifset ARC
5612* ARC-Dependent:: ARC Dependent Features
5613@end ifset
5614@ifset ARM
5615* ARM-Dependent:: ARM Dependent Features
5616@end ifset
8bf549a8 5617@ifset CRIS
328eb32e
HPN
5618* CRIS-Dependent:: CRIS Dependent Features
5619@end ifset
252b5132
RH
5620@ifset D10V
5621* D10V-Dependent:: D10V Dependent Features
5622@end ifset
5623@ifset D30V
5624* D30V-Dependent:: D30V Dependent Features
5625@end ifset
5626@ifset H8/300
5627* H8/300-Dependent:: Hitachi H8/300 Dependent Features
5628@end ifset
5629@ifset H8/500
5630* H8/500-Dependent:: Hitachi H8/500 Dependent Features
5631@end ifset
5632@ifset HPPA
5633* HPPA-Dependent:: HPPA Dependent Features
5634@end ifset
5b93d8bb
AM
5635@ifset I370
5636* ESA/390-Dependent:: IBM ESA/390 Dependent Features
5637@end ifset
252b5132 5638@ifset I80386
55b62671 5639* i386-Dependent:: Intel 80386 and AMD x86-64 Dependent Features
252b5132 5640@end ifset
e3308d0d
JE
5641@ifset I860
5642* i860-Dependent:: Intel 80860 Dependent Features
5643@end ifset
252b5132
RH
5644@ifset I960
5645* i960-Dependent:: Intel 80960 Dependent Features
5646@end ifset
ec694b89
NC
5647@ifset M32R
5648* M32R-Dependent:: M32R Dependent Features
5649@end ifset
252b5132
RH
5650@ifset M680X0
5651* M68K-Dependent:: M680x0 Dependent Features
5652@end ifset
60bcf0fa
NC
5653@ifset M68HC11
5654* M68HC11-Dependent:: M68HC11 and 68HC12 Dependent Features
5655@end ifset
81b0b3f1
BE
5656@ifset M880X0
5657* M88K-Dependent:: M880x0 Dependent Features
5658@end ifset
252b5132
RH
5659@ifset MIPS
5660* MIPS-Dependent:: MIPS Dependent Features
5661@end ifset
3c3bdf30
NC
5662@ifset MMIX
5663* MMIX-Dependent:: MMIX Dependent Features
5664@end ifset
252b5132
RH
5665@ifset SH
5666* SH-Dependent:: Hitachi SH Dependent Features
324bfcf3 5667* SH64-Dependent:: Hitachi SH64 Dependent Features
252b5132 5668@end ifset
e135f41b
NC
5669@ifset PDP11
5670* PDP-11-Dependent:: PDP-11 Dependent Features
5671@end ifset
041dd5a9
ILT
5672@ifset PJ
5673* PJ-Dependent:: picoJava Dependent Features
5674@end ifset
418c1742
MG
5675@ifset PPC
5676* PPC-Dependent:: PowerPC Dependent Features
5677@end ifset
252b5132
RH
5678@ifset SPARC
5679* Sparc-Dependent:: SPARC Dependent Features
5680@end ifset
39bec121
TW
5681@ifset TIC54X
5682* TIC54X-Dependent:: TI TMS320C54x Dependent Features
5683@end ifset
252b5132
RH
5684@ifset V850
5685* V850-Dependent:: V850 Dependent Features
5686@end ifset
5687@ifset Z8000
5688* Z8000-Dependent:: Z8000 Dependent Features
5689@end ifset
5690@ifset VAX
5691* Vax-Dependent:: VAX Dependent Features
5692@end ifset
5693@end menu
5694
5695@lowersections
5696@end ifset
5697
5698@c The following major nodes are *sections* in the GENERIC version, *chapters*
5699@c in single-cpu versions. This is mainly achieved by @lowersections. There is a
5700@c peculiarity: to preserve cross-references, there must be a node called
5701@c "Machine Dependencies". Hence the conditional nodenames in each
5702@c major node below. Node defaulting in makeinfo requires adjacency of
5703@c node and sectioning commands; hence the repetition of @chapter BLAH
5704@c in both conditional blocks.
5705
252b5132
RH
5706@ifset A29K
5707@include c-a29k.texi
5708@end ifset
5709
625e1353
RH
5710@ifset ALPHA
5711@include c-alpha.texi
5712@end ifset
5713
5714@ifset ARC
5715@include c-arc.texi
5716@end ifset
5717
252b5132
RH
5718@ifset ARM
5719@include c-arm.texi
5720@end ifset
5721
328eb32e
HPN
5722@ifset CRIS
5723@include c-cris.texi
5724@end ifset
5725
252b5132
RH
5726@ifset Hitachi-all
5727@ifclear GENERIC
5728@node Machine Dependencies
5729@chapter Machine Dependent Features
5730
5731The machine instruction sets are different on each Hitachi chip family,
5732and there are also some syntax differences among the families. This
a4fb0134 5733chapter describes the specific @command{@value{AS}} features for each
252b5132
RH
5734family.
5735
5736@menu
5737* H8/300-Dependent:: Hitachi H8/300 Dependent Features
5738* H8/500-Dependent:: Hitachi H8/500 Dependent Features
5739* SH-Dependent:: Hitachi SH Dependent Features
5740@end menu
5741@lowersections
5742@end ifclear
5743@end ifset
5744
5745@ifset D10V
5746@include c-d10v.texi
5747@end ifset
5748
5749@ifset D30V
5750@include c-d30v.texi
5751@end ifset
5752
5753@ifset H8/300
5754@include c-h8300.texi
5755@end ifset
5756
5757@ifset H8/500
5758@include c-h8500.texi
5759@end ifset
5760
5761@ifset HPPA
5762@include c-hppa.texi
5763@end ifset
5764
5b93d8bb
AM
5765@ifset I370
5766@include c-i370.texi
5767@end ifset
5768
252b5132
RH
5769@ifset I80386
5770@include c-i386.texi
5771@end ifset
5772
e3308d0d
JE
5773@ifset I860
5774@include c-i860.texi
5775@end ifset
5776
252b5132
RH
5777@ifset I960
5778@include c-i960.texi
5779@end ifset
5780
9e32ca89
NC
5781@ifset IA64
5782@include c-ia64.texi
5783@end ifset
5784
ec694b89
NC
5785@ifset M32R
5786@include c-m32r.texi
5787@end ifset
252b5132
RH
5788
5789@ifset M680X0
5790@include c-m68k.texi
5791@end ifset
5792
60bcf0fa
NC
5793@ifset M68HC11
5794@include c-m68hc11.texi
5795@end ifset
5796
81b0b3f1
BE
5797@ifset M880X0
5798@include c-m88k.texi
5799@end ifset
5800
252b5132
RH
5801@ifset MIPS
5802@include c-mips.texi
5803@end ifset
5804
3c3bdf30
NC
5805@ifset MMIX
5806@include c-mmix.texi
5807@end ifset
5808
252b5132
RH
5809@ifset NS32K
5810@include c-ns32k.texi
5811@end ifset
5812
e135f41b
NC
5813@ifset PDP11
5814@include c-pdp11.texi
5815@end ifset
5816
041dd5a9
ILT
5817@ifset PJ
5818@include c-pj.texi
5819@end ifset
5820
418c1742
MG
5821@ifset PPC
5822@include c-ppc.texi
5823@end ifset
5824
252b5132
RH
5825@ifset SH
5826@include c-sh.texi
324bfcf3 5827@include c-sh64.texi
252b5132
RH
5828@end ifset
5829
5830@ifset SPARC
5831@include c-sparc.texi
5832@end ifset
5833
39bec121
TW
5834@ifset TIC54X
5835@include c-tic54x.texi
5836@end ifset
5837
252b5132
RH
5838@ifset Z8000
5839@include c-z8k.texi
5840@end ifset
5841
5842@ifset VAX
5843@include c-vax.texi
5844@end ifset
5845
5846@ifset V850
5847@include c-v850.texi
5848@end ifset
5849
5850@ifset GENERIC
5851@c reverse effect of @down at top of generic Machine-Dep chapter
5852@raisesections
5853@end ifset
5854
5855@node Reporting Bugs
5856@chapter Reporting Bugs
5857@cindex bugs in assembler
5858@cindex reporting bugs in assembler
5859
a4fb0134 5860Your bug reports play an essential role in making @command{@value{AS}} reliable.
252b5132
RH
5861
5862Reporting a bug may help you by bringing a solution to your problem, or it may
5863not. But in any case the principal function of a bug report is to help the
a4fb0134
SC
5864entire community by making the next version of @command{@value{AS}} work better.
5865Bug reports are your contribution to the maintenance of @command{@value{AS}}.
252b5132
RH
5866
5867In order for a bug report to serve its purpose, you must include the
5868information that enables us to fix the bug.
5869
5870@menu
5871* Bug Criteria:: Have you found a bug?
5872* Bug Reporting:: How to report bugs
5873@end menu
5874
5875@node Bug Criteria
5876@section Have you found a bug?
5877@cindex bug criteria
5878
5879If you are not sure whether you have found a bug, here are some guidelines:
5880
5881@itemize @bullet
5882@cindex fatal signal
5883@cindex assembler crash
5884@cindex crash of assembler
5885@item
5886If the assembler gets a fatal signal, for any input whatever, that is a
a4fb0134 5887@command{@value{AS}} bug. Reliable assemblers never crash.
252b5132
RH
5888
5889@cindex error on valid input
5890@item
a4fb0134 5891If @command{@value{AS}} produces an error message for valid input, that is a bug.
252b5132
RH
5892
5893@cindex invalid input
5894@item
a4fb0134 5895If @command{@value{AS}} does not produce an error message for invalid input, that
252b5132
RH
5896is a bug. However, you should note that your idea of ``invalid input'' might
5897be our idea of ``an extension'' or ``support for traditional practice''.
5898
5899@item
5900If you are an experienced user of assemblers, your suggestions for improvement
a4fb0134 5901of @command{@value{AS}} are welcome in any case.
252b5132
RH
5902@end itemize
5903
5904@node Bug Reporting
5905@section How to report bugs
5906@cindex bug reports
5907@cindex assembler bugs, reporting
5908
5909A number of companies and individuals offer support for @sc{gnu} products. If
a4fb0134 5910you obtained @command{@value{AS}} from a support organization, we recommend you
252b5132
RH
5911contact that organization first.
5912
5913You can find contact information for many support companies and
5914individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
5915distribution.
5916
a4fb0134 5917In any event, we also recommend that you send bug reports for @command{@value{AS}}
46a04e3a 5918to @samp{bug-binutils@@gnu.org}.
252b5132
RH
5919
5920The fundamental principle of reporting bugs usefully is this:
5921@strong{report all the facts}. If you are not sure whether to state a
5922fact or leave it out, state it!
5923
5924Often people omit facts because they think they know what causes the problem
5925and assume that some details do not matter. Thus, you might assume that the
5926name of a symbol you use in an example does not matter. Well, probably it does
5927not, but one cannot be sure. Perhaps the bug is a stray memory reference which
5928happens to fetch from the location where that name is stored in memory;
5929perhaps, if the name were different, the contents of that location would fool
5930the assembler into doing the right thing despite the bug. Play it safe and
5931give a specific, complete example. That is the easiest thing for you to do,
5932and the most helpful.
5933
5934Keep in mind that the purpose of a bug report is to enable us to fix the bug if
5935it is new to us. Therefore, always write your bug reports on the assumption
5936that the bug has not been reported previously.
5937
5938Sometimes people give a few sketchy facts and ask, ``Does this ring a
5939bell?'' Those bug reports are useless, and we urge everyone to
5940@emph{refuse to respond to them} except to chide the sender to report
5941bugs properly.
5942
5943To enable us to fix the bug, you should include all these things:
5944
5945@itemize @bullet
5946@item
a4fb0134 5947The version of @command{@value{AS}}. @command{@value{AS}} announces it if you start
252b5132
RH
5948it with the @samp{--version} argument.
5949
5950Without this, we will not know whether there is any point in looking for
a4fb0134 5951the bug in the current version of @command{@value{AS}}.
252b5132
RH
5952
5953@item
a4fb0134 5954Any patches you may have applied to the @command{@value{AS}} source.
252b5132
RH
5955
5956@item
5957The type of machine you are using, and the operating system name and
5958version number.
5959
5960@item
a4fb0134 5961What compiler (and its version) was used to compile @command{@value{AS}}---e.g.
252b5132
RH
5962``@code{gcc-2.7}''.
5963
5964@item
5965The command arguments you gave the assembler to assemble your example and
5966observe the bug. To guarantee you will not omit something important, list them
5967all. A copy of the Makefile (or the output from make) is sufficient.
5968
5969If we were to try to guess the arguments, we would probably guess wrong
5970and then we might not encounter the bug.
5971
5972@item
5973A complete input file that will reproduce the bug. If the bug is observed when
5974the assembler is invoked via a compiler, send the assembler source, not the
5975high level language source. Most compilers will produce the assembler source
5976when run with the @samp{-S} option. If you are using @code{@value{GCC}}, use
5977the options @samp{-v --save-temps}; this will save the assembler source in a
5978file with an extension of @file{.s}, and also show you exactly how
a4fb0134 5979@command{@value{AS}} is being run.
252b5132
RH
5980
5981@item
5982A description of what behavior you observe that you believe is
5983incorrect. For example, ``It gets a fatal signal.''
5984
a4fb0134 5985Of course, if the bug is that @command{@value{AS}} gets a fatal signal, then we
252b5132
RH
5986will certainly notice it. But if the bug is incorrect output, we might not
5987notice unless it is glaringly wrong. You might as well not give us a chance to
5988make a mistake.
5989
5990Even if the problem you experience is a fatal signal, you should still say so
5991explicitly. Suppose something strange is going on, such as, your copy of
a4fb0134 5992@command{@value{AS}} is out of synch, or you have encountered a bug in the C
252b5132
RH
5993library on your system. (This has happened!) Your copy might crash and ours
5994would not. If you told us to expect a crash, then when ours fails to crash, we
5995would know that the bug was not happening for us. If you had not told us to
5996expect a crash, then we would not be able to draw any conclusion from our
5997observations.
5998
5999@item
a4fb0134 6000If you wish to suggest changes to the @command{@value{AS}} source, send us context
252b5132
RH
6001diffs, as generated by @code{diff} with the @samp{-u}, @samp{-c}, or @samp{-p}
6002option. Always send diffs from the old file to the new file. If you even
a4fb0134 6003discuss something in the @command{@value{AS}} source, refer to it by context, not
252b5132
RH
6004by line number.
6005
6006The line numbers in our development sources will not match those in your
6007sources. Your line numbers would convey no useful information to us.
6008@end itemize
6009
6010Here are some things that are not necessary:
6011
6012@itemize @bullet
6013@item
6014A description of the envelope of the bug.
6015
6016Often people who encounter a bug spend a lot of time investigating
6017which changes to the input file will make the bug go away and which
6018changes will not affect it.
6019
6020This is often time consuming and not very useful, because the way we
6021will find the bug is by running a single example under the debugger
6022with breakpoints, not by pure deduction from a series of examples.
6023We recommend that you save your time for something else.
6024
6025Of course, if you can find a simpler example to report @emph{instead}
6026of the original one, that is a convenience for us. Errors in the
6027output will be easier to spot, running under the debugger will take
6028less time, and so on.
6029
6030However, simplification is not vital; if you do not want to do this,
6031report the bug anyway and send us the entire test case you used.
6032
6033@item
6034A patch for the bug.
6035
6036A patch for the bug does help us if it is a good one. But do not omit
6037the necessary information, such as the test case, on the assumption that
6038a patch is all we need. We might see problems with your patch and decide
6039to fix the problem another way, or we might not understand it at all.
6040
a4fb0134 6041Sometimes with a program as complicated as @command{@value{AS}} it is very hard to
252b5132
RH
6042construct an example that will make the program follow a certain path through
6043the code. If you do not send us the example, we will not be able to construct
6044one, so we will not be able to verify that the bug is fixed.
6045
6046And if we cannot understand what bug you are trying to fix, or why your
6047patch should be an improvement, we will not install it. A test case will
6048help us to understand.
6049
6050@item
6051A guess about what the bug is or what it depends on.
6052
6053Such guesses are usually wrong. Even we cannot guess right about such
6054things without first using the debugger to find the facts.
6055@end itemize
6056
6057@node Acknowledgements
6058@chapter Acknowledgements
6059
a4fb0134 6060If you have contributed to @command{@value{AS}} and your name isn't listed here,
252b5132
RH
6061it is not meant as a slight. We just don't know about it. Send mail to the
6062maintainer, and we'll correct the situation. Currently
6063@c (January 1994),
6064the maintainer is Ken Raeburn (email address @code{raeburn@@cygnus.com}).
6065
6066Dean Elsner wrote the original @sc{gnu} assembler for the VAX.@footnote{Any
6067more details?}
6068
6069Jay Fenlason maintained GAS for a while, adding support for GDB-specific debug
6070information and the 68k series machines, most of the preprocessing pass, and
6071extensive changes in @file{messages.c}, @file{input-file.c}, @file{write.c}.
6072
6073K. Richard Pixley maintained GAS for a while, adding various enhancements and
6074many bug fixes, including merging support for several processors, breaking GAS
6075up to handle multiple object file format back ends (including heavy rewrite,
6076testing, an integration of the coff and b.out back ends), adding configuration
6077including heavy testing and verification of cross assemblers and file splits
6078and renaming, converted GAS to strictly ANSI C including full prototypes, added
6079support for m680[34]0 and cpu32, did considerable work on i960 including a COFF
6080port (including considerable amounts of reverse engineering), a SPARC opcode
6081file rewrite, DECstation, rs6000, and hp300hpux host ports, updated ``know''
6082assertions and made them work, much other reorganization, cleanup, and lint.
6083
6084Ken Raeburn wrote the high-level BFD interface code to replace most of the code
6085in format-specific I/O modules.
6086
6087The original VMS support was contributed by David L. Kashtan. Eric Youngdale
6088has done much work with it since.
6089
6090The Intel 80386 machine description was written by Eliot Dresselhaus.
6091
6092Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
6093
6094The Motorola 88k machine description was contributed by Devon Bowen of Buffalo
6095University and Torbjorn Granlund of the Swedish Institute of Computer Science.
6096
6097Keith Knowles at the Open Software Foundation wrote the original MIPS back end
6098(@file{tc-mips.c}, @file{tc-mips.h}), and contributed Rose format support
6099(which hasn't been merged in yet). Ralph Campbell worked with the MIPS code to
6100support a.out format.
6101
6102Support for the Zilog Z8k and Hitachi H8/300 and H8/500 processors (tc-z8k,
6103tc-h8300, tc-h8500), and IEEE 695 object file format (obj-ieee), was written by
6104Steve Chamberlain of Cygnus Support. Steve also modified the COFF back end to
6105use BFD for some low-level operations, for use with the H8/300 and AMD 29k
6106targets.
6107
6108John Gilmore built the AMD 29000 support, added @code{.include} support, and
6109simplified the configuration of which versions accept which directives. He
6110updated the 68k machine description so that Motorola's opcodes always produced
6111fixed-size instructions (e.g. @code{jsr}), while synthetic instructions
6112remained shrinkable (@code{jbsr}). John fixed many bugs, including true tested
6113cross-compilation support, and one bug in relaxation that took a week and
6114required the proverbial one-bit fix.
6115
6116Ian Lance Taylor of Cygnus Support merged the Motorola and MIT syntax for the
611768k, completed support for some COFF targets (68k, i386 SVR3, and SCO Unix),
6118added support for MIPS ECOFF and ELF targets, wrote the initial RS/6000 and
6119PowerPC assembler, and made a few other minor patches.
6120
a4fb0134 6121Steve Chamberlain made @command{@value{AS}} able to generate listings.
252b5132
RH
6122
6123Hewlett-Packard contributed support for the HP9000/300.
6124
6125Jeff Law wrote GAS and BFD support for the native HPPA object format (SOM)
6126along with a fairly extensive HPPA testsuite (for both SOM and ELF object
6127formats). This work was supported by both the Center for Software Science at
6128the University of Utah and Cygnus Support.
6129
6130Support for ELF format files has been worked on by Mark Eichin of Cygnus
6131Support (original, incomplete implementation for SPARC), Pete Hoogenboom and
6132Jeff Law at the University of Utah (HPPA mainly), Michael Meissner of the Open
6133Software Foundation (i386 mainly), and Ken Raeburn of Cygnus Support (sparc,
6134and some initial 64-bit support).
6135
5b93d8bb
AM
6136Linas Vepstas added GAS support for the ESA/390 "IBM 370" architecture.
6137
252b5132
RH
6138Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote GAS and BFD
6139support for openVMS/Alpha.
6140
39bec121
TW
6141Timothy Wall, Michael Hayes, and Greg Smart contributed to the various tic*
6142flavors.
6143
252b5132
RH
6144Several engineers at Cygnus Support have also provided many small bug fixes and
6145configuration enhancements.
6146
6147Many others have contributed large or small bugfixes and enhancements. If
6148you have contributed significant work and are not mentioned on this list, and
6149want to be, let us know. Some of the history has been lost; we are not
6150intentionally leaving anyone out.
6151
cf055d54
NC
6152@node GNU Free Documentation License
6153@chapter GNU Free Documentation License
6154
6155 GNU Free Documentation License
6156
6157 Version 1.1, March 2000
6158
6159 Copyright (C) 2000 Free Software Foundation, Inc.
6160 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6161
6162 Everyone is permitted to copy and distribute verbatim copies
6163 of this license document, but changing it is not allowed.
6164
6165
61660. PREAMBLE
6167
6168The purpose of this License is to make a manual, textbook, or other
6169written document "free" in the sense of freedom: to assure everyone
6170the effective freedom to copy and redistribute it, with or without
6171modifying it, either commercially or noncommercially. Secondarily,
6172this License preserves for the author and publisher a way to get
6173credit for their work, while not being considered responsible for
6174modifications made by others.
6175
6176This License is a kind of "copyleft", which means that derivative
6177works of the document must themselves be free in the same sense. It
6178complements the GNU General Public License, which is a copyleft
6179license designed for free software.
6180
6181We have designed this License in order to use it for manuals for free
6182software, because free software needs free documentation: a free
6183program should come with manuals providing the same freedoms that the
6184software does. But this License is not limited to software manuals;
6185it can be used for any textual work, regardless of subject matter or
6186whether it is published as a printed book. We recommend this License
6187principally for works whose purpose is instruction or reference.
6188
6189
61901. APPLICABILITY AND DEFINITIONS
6191
6192This License applies to any manual or other work that contains a
6193notice placed by the copyright holder saying it can be distributed
6194under the terms of this License. The "Document", below, refers to any
6195such manual or work. Any member of the public is a licensee, and is
6196addressed as "you".
6197
6198A "Modified Version" of the Document means any work containing the
6199Document or a portion of it, either copied verbatim, or with
6200modifications and/or translated into another language.
6201
6202A "Secondary Section" is a named appendix or a front-matter section of
6203the Document that deals exclusively with the relationship of the
6204publishers or authors of the Document to the Document's overall subject
6205(or to related matters) and contains nothing that could fall directly
6206within that overall subject. (For example, if the Document is in part a
6207textbook of mathematics, a Secondary Section may not explain any
6208mathematics.) The relationship could be a matter of historical
6209connection with the subject or with related matters, or of legal,
6210commercial, philosophical, ethical or political position regarding
6211them.
6212
6213The "Invariant Sections" are certain Secondary Sections whose titles
6214are designated, as being those of Invariant Sections, in the notice
6215that says that the Document is released under this License.
6216
6217The "Cover Texts" are certain short passages of text that are listed,
6218as Front-Cover Texts or Back-Cover Texts, in the notice that says that
6219the Document is released under this License.
6220
6221A "Transparent" copy of the Document means a machine-readable copy,
6222represented in a format whose specification is available to the
6223general public, whose contents can be viewed and edited directly and
6224straightforwardly with generic text editors or (for images composed of
6225pixels) generic paint programs or (for drawings) some widely available
6226drawing editor, and that is suitable for input to text formatters or
6227for automatic translation to a variety of formats suitable for input
6228to text formatters. A copy made in an otherwise Transparent file
6229format whose markup has been designed to thwart or discourage
6230subsequent modification by readers is not Transparent. A copy that is
6231not "Transparent" is called "Opaque".
6232
6233Examples of suitable formats for Transparent copies include plain
6234ASCII without markup, Texinfo input format, LaTeX input format, SGML
6235or XML using a publicly available DTD, and standard-conforming simple
6236HTML designed for human modification. Opaque formats include
6237PostScript, PDF, proprietary formats that can be read and edited only
6238by proprietary word processors, SGML or XML for which the DTD and/or
6239processing tools are not generally available, and the
6240machine-generated HTML produced by some word processors for output
6241purposes only.
6242
6243The "Title Page" means, for a printed book, the title page itself,
6244plus such following pages as are needed to hold, legibly, the material
6245this License requires to appear in the title page. For works in
6246formats which do not have any title page as such, "Title Page" means
6247the text near the most prominent appearance of the work's title,
6248preceding the beginning of the body of the text.
6249
6250
62512. VERBATIM COPYING
6252
6253You may copy and distribute the Document in any medium, either
6254commercially or noncommercially, provided that this License, the
6255copyright notices, and the license notice saying this License applies
6256to the Document are reproduced in all copies, and that you add no other
6257conditions whatsoever to those of this License. You may not use
6258technical measures to obstruct or control the reading or further
6259copying of the copies you make or distribute. However, you may accept
6260compensation in exchange for copies. If you distribute a large enough
6261number of copies you must also follow the conditions in section 3.
6262
6263You may also lend copies, under the same conditions stated above, and
6264you may publicly display copies.
6265
6266
62673. COPYING IN QUANTITY
6268
6269If you publish printed copies of the Document numbering more than 100,
6270and the Document's license notice requires Cover Texts, you must enclose
6271the copies in covers that carry, clearly and legibly, all these Cover
6272Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
6273the back cover. Both covers must also clearly and legibly identify
6274you as the publisher of these copies. The front cover must present
6275the full title with all words of the title equally prominent and
6276visible. You may add other material on the covers in addition.
6277Copying with changes limited to the covers, as long as they preserve
6278the title of the Document and satisfy these conditions, can be treated
6279as verbatim copying in other respects.
6280
6281If the required texts for either cover are too voluminous to fit
6282legibly, you should put the first ones listed (as many as fit
6283reasonably) on the actual cover, and continue the rest onto adjacent
6284pages.
6285
6286If you publish or distribute Opaque copies of the Document numbering
6287more than 100, you must either include a machine-readable Transparent
6288copy along with each Opaque copy, or state in or with each Opaque copy
6289a publicly-accessible computer-network location containing a complete
6290Transparent copy of the Document, free of added material, which the
6291general network-using public has access to download anonymously at no
6292charge using public-standard network protocols. If you use the latter
6293option, you must take reasonably prudent steps, when you begin
6294distribution of Opaque copies in quantity, to ensure that this
6295Transparent copy will remain thus accessible at the stated location
6296until at least one year after the last time you distribute an Opaque
6297copy (directly or through your agents or retailers) of that edition to
6298the public.
6299
6300It is requested, but not required, that you contact the authors of the
6301Document well before redistributing any large number of copies, to give
6302them a chance to provide you with an updated version of the Document.
6303
6304
63054. MODIFICATIONS
6306
6307You may copy and distribute a Modified Version of the Document under
6308the conditions of sections 2 and 3 above, provided that you release
6309the Modified Version under precisely this License, with the Modified
6310Version filling the role of the Document, thus licensing distribution
6311and modification of the Modified Version to whoever possesses a copy
6312of it. In addition, you must do these things in the Modified Version:
6313
6314A. Use in the Title Page (and on the covers, if any) a title distinct
6315 from that of the Document, and from those of previous versions
6316 (which should, if there were any, be listed in the History section
6317 of the Document). You may use the same title as a previous version
6318 if the original publisher of that version gives permission.
6319B. List on the Title Page, as authors, one or more persons or entities
6320 responsible for authorship of the modifications in the Modified
6321 Version, together with at least five of the principal authors of the
6322 Document (all of its principal authors, if it has less than five).
6323C. State on the Title page the name of the publisher of the
6324 Modified Version, as the publisher.
6325D. Preserve all the copyright notices of the Document.
6326E. Add an appropriate copyright notice for your modifications
6327 adjacent to the other copyright notices.
6328F. Include, immediately after the copyright notices, a license notice
6329 giving the public permission to use the Modified Version under the
6330 terms of this License, in the form shown in the Addendum below.
6331G. Preserve in that license notice the full lists of Invariant Sections
6332 and required Cover Texts given in the Document's license notice.
6333H. Include an unaltered copy of this License.
6334I. Preserve the section entitled "History", and its title, and add to
6335 it an item stating at least the title, year, new authors, and
6336 publisher of the Modified Version as given on the Title Page. If
6337 there is no section entitled "History" in the Document, create one
6338 stating the title, year, authors, and publisher of the Document as
6339 given on its Title Page, then add an item describing the Modified
6340 Version as stated in the previous sentence.
6341J. Preserve the network location, if any, given in the Document for
6342 public access to a Transparent copy of the Document, and likewise
6343 the network locations given in the Document for previous versions
6344 it was based on. These may be placed in the "History" section.
6345 You may omit a network location for a work that was published at
6346 least four years before the Document itself, or if the original
6347 publisher of the version it refers to gives permission.
6348K. In any section entitled "Acknowledgements" or "Dedications",
6349 preserve the section's title, and preserve in the section all the
6350 substance and tone of each of the contributor acknowledgements
6351 and/or dedications given therein.
6352L. Preserve all the Invariant Sections of the Document,
6353 unaltered in their text and in their titles. Section numbers
6354 or the equivalent are not considered part of the section titles.
6355M. Delete any section entitled "Endorsements". Such a section
6356 may not be included in the Modified Version.
6357N. Do not retitle any existing section as "Endorsements"
6358 or to conflict in title with any Invariant Section.
6359
6360If the Modified Version includes new front-matter sections or
6361appendices that qualify as Secondary Sections and contain no material
6362copied from the Document, you may at your option designate some or all
6363of these sections as invariant. To do this, add their titles to the
6364list of Invariant Sections in the Modified Version's license notice.
6365These titles must be distinct from any other section titles.
6366
6367You may add a section entitled "Endorsements", provided it contains
6368nothing but endorsements of your Modified Version by various
6369parties--for example, statements of peer review or that the text has
6370been approved by an organization as the authoritative definition of a
6371standard.
6372
6373You may add a passage of up to five words as a Front-Cover Text, and a
6374passage of up to 25 words as a Back-Cover Text, to the end of the list
6375of Cover Texts in the Modified Version. Only one passage of
6376Front-Cover Text and one of Back-Cover Text may be added by (or
6377through arrangements made by) any one entity. If the Document already
6378includes a cover text for the same cover, previously added by you or
6379by arrangement made by the same entity you are acting on behalf of,
6380you may not add another; but you may replace the old one, on explicit
6381permission from the previous publisher that added the old one.
6382
6383The author(s) and publisher(s) of the Document do not by this License
6384give permission to use their names for publicity for or to assert or
6385imply endorsement of any Modified Version.
6386
6387
63885. COMBINING DOCUMENTS
6389
6390You may combine the Document with other documents released under this
6391License, under the terms defined in section 4 above for modified
6392versions, provided that you include in the combination all of the
6393Invariant Sections of all of the original documents, unmodified, and
6394list them all as Invariant Sections of your combined work in its
6395license notice.
6396
6397The combined work need only contain one copy of this License, and
6398multiple identical Invariant Sections may be replaced with a single
6399copy. If there are multiple Invariant Sections with the same name but
6400different contents, make the title of each such section unique by
6401adding at the end of it, in parentheses, the name of the original
6402author or publisher of that section if known, or else a unique number.
6403Make the same adjustment to the section titles in the list of
6404Invariant Sections in the license notice of the combined work.
6405
6406In the combination, you must combine any sections entitled "History"
6407in the various original documents, forming one section entitled
6408"History"; likewise combine any sections entitled "Acknowledgements",
6409and any sections entitled "Dedications". You must delete all sections
6410entitled "Endorsements."
6411
6412
64136. COLLECTIONS OF DOCUMENTS
6414
6415You may make a collection consisting of the Document and other documents
6416released under this License, and replace the individual copies of this
6417License in the various documents with a single copy that is included in
6418the collection, provided that you follow the rules of this License for
6419verbatim copying of each of the documents in all other respects.
6420
6421You may extract a single document from such a collection, and distribute
6422it individually under this License, provided you insert a copy of this
6423License into the extracted document, and follow this License in all
6424other respects regarding verbatim copying of that document.
6425
6426
64277. AGGREGATION WITH INDEPENDENT WORKS
6428
6429A compilation of the Document or its derivatives with other separate
6430and independent documents or works, in or on a volume of a storage or
6431distribution medium, does not as a whole count as a Modified Version
6432of the Document, provided no compilation copyright is claimed for the
6433compilation. Such a compilation is called an "aggregate", and this
6434License does not apply to the other self-contained works thus compiled
6435with the Document, on account of their being thus compiled, if they
6436are not themselves derivative works of the Document.
6437
6438If the Cover Text requirement of section 3 is applicable to these
6439copies of the Document, then if the Document is less than one quarter
6440of the entire aggregate, the Document's Cover Texts may be placed on
6441covers that surround only the Document within the aggregate.
6442Otherwise they must appear on covers around the whole aggregate.
6443
6444
64458. TRANSLATION
6446
6447Translation is considered a kind of modification, so you may
6448distribute translations of the Document under the terms of section 4.
6449Replacing Invariant Sections with translations requires special
6450permission from their copyright holders, but you may include
6451translations of some or all Invariant Sections in addition to the
6452original versions of these Invariant Sections. You may include a
6453translation of this License provided that you also include the
6454original English version of this License. In case of a disagreement
6455between the translation and the original English version of this
6456License, the original English version will prevail.
6457
6458
64599. TERMINATION
6460
6461You may not copy, modify, sublicense, or distribute the Document except
6462as expressly provided for under this License. Any other attempt to
6463copy, modify, sublicense or distribute the Document is void, and will
6464automatically terminate your rights under this License. However,
6465parties who have received copies, or rights, from you under this
6466License will not have their licenses terminated so long as such
6467parties remain in full compliance.
6468
6469
647010. FUTURE REVISIONS OF THIS LICENSE
6471
6472The Free Software Foundation may publish new, revised versions
6473of the GNU Free Documentation License from time to time. Such new
6474versions will be similar in spirit to the present version, but may
6475differ in detail to address new problems or concerns. See
6476http://www.gnu.org/copyleft/.
6477
6478Each version of the License is given a distinguishing version number.
6479If the Document specifies that a particular numbered version of this
6480License "or any later version" applies to it, you have the option of
6481following the terms and conditions either of that specified version or
6482of any later version that has been published (not as a draft) by the
6483Free Software Foundation. If the Document does not specify a version
6484number of this License, you may choose any version ever published (not
6485as a draft) by the Free Software Foundation.
6486
6487
6488ADDENDUM: How to use this License for your documents
6489
6490To use this License in a document you have written, include a copy of
6491the License in the document and put the following copyright and
6492license notices just after the title page:
6493
6494@smallexample
6495 Copyright (c) YEAR YOUR NAME.
6496 Permission is granted to copy, distribute and/or modify this document
6497 under the terms of the GNU Free Documentation License, Version 1.1
6498 or any later version published by the Free Software Foundation;
6499 with the Invariant Sections being LIST THEIR TITLES, with the
6500 Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
6501 A copy of the license is included in the section entitled "GNU
6502 Free Documentation License".
6503@end smallexample
6504
6505If you have no Invariant Sections, write "with no Invariant Sections"
6506instead of saying which ones are invariant. If you have no
6507Front-Cover Texts, write "no Front-Cover Texts" instead of
6508"Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
6509
6510If your document contains nontrivial examples of program code, we
6511recommend releasing these examples in parallel under your choice of
6512free software license, such as the GNU General Public License,
6513to permit their use in free software.
6514
252b5132
RH
6515@node Index
6516@unnumbered Index
6517
6518@printindex cp
6519
6520@contents
6521@bye
6522@c Local Variables:
6523@c fill-column: 79
6524@c End:
This page took 0.453186 seconds and 4 git commands to generate.