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