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