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