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