1 \input texinfo @c -*-Texinfo-*-
2 @c Copyright (c) 1991, 92, 93, 94, 95, 96, 1997 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
8 @c (3) for object-format specific directives, examine obj_pseudo_op
10 @c (4) portable directives in potable[] in read.c
14 @c defaults, config file may override:
17 @include asconfig.texi
19 @c common OR combinations of conditions
39 @set abnormal-separator
43 @settitle Using @value{AS}
46 @settitle Using @value{AS} (@value{TARGET})
48 @setchapternewpage odd
53 @c WARE! Some of the machine-dependent sections contain tables of machine
54 @c instructions. Except in multi-column format, these tables look silly.
55 @c Unfortunately, Texinfo doesn't have a general-purpose multi-col format, so
56 @c the multi-col format is faked within @example sections.
58 @c Again unfortunately, the natural size that fits on a page, for these tables,
59 @c is different depending on whether or not smallbook is turned on.
60 @c This matters, because of order: text flow switches columns at each page
63 @c The format faked in this source works reasonably well for smallbook,
64 @c not well for the default large-page format. This manual expects that if you
65 @c turn on @smallbook, you will also uncomment the "@set SMALL" to enable the
66 @c tables in question. You can turn on one without the other at your
67 @c discretion, of course.
70 @c the insn tables look just as silly in info files regardless of smallbook,
71 @c might as well show 'em anyways.
77 * As: (as). The GNU assembler.
86 This file documents the GNU Assembler "@value{AS}".
88 Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
90 Permission is granted to make and distribute verbatim copies of
91 this manual provided the copyright notice and this permission notice
92 are preserved on all copies.
95 Permission is granted to process this file through Tex and print the
96 results, provided the printed document carries copying permission
97 notice identical to this one except for the removal of this paragraph
98 (this paragraph not being relevant to the printed manual).
101 Permission is granted to copy and distribute modified versions of this manual
102 under the conditions for verbatim copying, provided that the entire resulting
103 derived work is distributed under the terms of a permission notice identical to
106 Permission is granted to copy and distribute translations of this manual
107 into another language, under the above conditions for modified versions.
111 @title Using @value{AS}
112 @subtitle The @sc{gnu} Assembler
114 @subtitle for the @value{TARGET} family
117 @subtitle January 1994
120 The Free Software Foundation Inc. thanks The Nice Computer
121 Company of Australia for loaning Dean Elsner to write the
122 first (Vax) version of @code{as} for Project @sc{gnu}.
123 The proprietors, management and staff of TNCCA thank FSF for
124 distracting the boss while they got some work
127 @author Dean Elsner, Jay Fenlason & friends
131 \hfill {\it Using {\tt @value{AS}}}\par
132 \hfill Edited by Cygnus Support\par
134 %"boxit" macro for figures:
135 %Modified from Knuth's ``boxit'' macro from TeXbook (answer to exercise 21.3)
136 \gdef\boxit#1#2{\vbox{\hrule\hbox{\vrule\kern3pt
137 \vbox{\parindent=0pt\parskip=0pt\hsize=#1\kern3pt\strut\hfil
138 #2\hfil\strut\kern3pt}\kern3pt\vrule}\hrule}}%box with visible outline
139 \gdef\ibox#1#2{\hbox to #1{#2\hfil}\kern8pt}% invisible box
142 @vskip 0pt plus 1filll
143 Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
145 Permission is granted to make and distribute verbatim copies of
146 this manual provided the copyright notice and this permission notice
147 are preserved on all copies.
149 Permission is granted to copy and distribute modified versions of this manual
150 under the conditions for verbatim copying, provided that the entire resulting
151 derived work is distributed under the terms of a permission notice identical to
154 Permission is granted to copy and distribute translations of this manual
155 into another language, under the above conditions for modified versions.
160 @top Using @value{AS}
162 This file is a user guide to the @sc{gnu} assembler @code{@value{AS}}.
164 This version of the file describes @code{@value{AS}} configured to generate
165 code for @value{TARGET} architectures.
168 * Overview:: Overview
169 * Invoking:: Command-Line Options
171 * Sections:: Sections and Relocation
173 * Expressions:: Expressions
174 * Pseudo Ops:: Assembler Directives
175 * Machine Dependencies:: Machine Dependent Features
176 * Reporting Bugs:: Reporting Bugs
177 * Acknowledgements:: Who Did What
185 This manual is a user guide to the @sc{gnu} assembler @code{@value{AS}}.
187 This version of the manual describes @code{@value{AS}} configured to generate
188 code for @value{TARGET} architectures.
192 @cindex invocation summary
193 @cindex option summary
194 @cindex summary of options
195 Here is a brief summary of how to invoke @code{@value{AS}}. For details,
196 @pxref{Invoking,,Comand-Line Options}.
198 @c We don't use deffn and friends for the following because they seem
199 @c to be limited to one line for the header.
201 @value{AS} [ -a[cdhlns][=file] ] [ -D ] [ --defsym @var{sym}=@var{val} ]
202 [ -f ] [ --gstabs ] [ --help ] [ -I @var{dir} ] [ -J ] [ -K ] [ -L ]
203 [ -o @var{objfile} ] [ -R ] [ --statistics ] [ -v ] [ -version ]
204 [ --version ] [ -W ] [ -w ] [ -x ] [ -Z ]
206 @c am29k has no machine-dependent assembler options
209 [ -mbig-endian | -mlittle-endian ]
212 [ -m[arm]1 | -m[arm]2 | -m[arm]250 | -m[arm]3 | -m[arm]6 | -m[arm]7[t][[d]m[i]] ]
213 [ -m[arm]v2 | -m[arm]v2a | -m[arm]v3 | -m[arm]v3m | -m[arm]v4 | -m[arm]v4t ]
215 [ -mfpa10 | -mfpa11 | -mfpe-old | -mno-fpu ]
217 [ -mapcs-32 | -mapcs-26 ]
224 @c Hitachi family chips have no machine-dependent assembler options
227 @c HPPA has no machine-dependent assembler options (yet).
230 @c The order here is important. See c-sparc.texi.
231 [ -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite | -Av9 | -Av9a ]
232 [ -xarch=v8plus | -xarch=v8plusa ] [ -bump ]
235 @c Z8000 has no machine-dependent assembler options
238 @c see md_parse_option in tc-i960.c
239 [ -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC ]
243 [ -l ] [ -m68000 | -m68010 | -m68020 | ... ]
246 [ -nocpp ] [ -EL ] [ -EB ] [ -G @var{num} ] [ -mcpu=@var{CPU} ]
247 [ -mips1 ] [ -mips2 ] [ -mips3 ] [ -m4650 ] [ -no-m4650 ]
248 [ --trap ] [ --break ]
249 [ --emulation=@var{name} ]
251 [ -- | @var{files} @dots{} ]
256 Turn on listings, in any of a variety of ways:
260 omit false conditionals
263 omit debugging directives
266 include high-level source
272 include macro expansions
275 omit forms processing
281 set the name of the listing file
284 You may combine these options; for example, use @samp{-aln} for assembly
285 listing without forms processing. The @samp{=file} option, if used, must be
286 the last one. By itself, @samp{-a} defaults to @samp{-ahls}.
289 Ignored. This option is accepted for script compatibility with calls to
292 @item --defsym @var{sym}=@var{value}
293 Define the symbol @var{sym} to be @var{value} before assembling the input file.
294 @var{value} must be an integer constant. As in C, a leading @samp{0x}
295 indicates a hexadecimal value, and a leading @samp{0} indicates an octal value.
298 ``fast''---skip whitespace and comment preprocessing (assume source is
302 Generate stabs debugging information for each assembler line. This
303 may help debugging assembler code, if the debugger can handle it.
306 Print a summary of the command line options and exit.
309 Add directory @var{dir} to the search list for @code{.include} directives.
312 Don't warn about signed overflow.
315 @ifclear DIFF-TBL-KLUGE
316 This option is accepted but has no effect on the @value{TARGET} family.
318 @ifset DIFF-TBL-KLUGE
319 Issue warnings when difference tables altered for long displacements.
323 Keep (in the symbol table) local symbols, starting with @samp{L}.
325 @item -o @var{objfile}
326 Name the object-file output from @code{@value{AS}} @var{objfile}.
329 Fold the data section into the text section.
332 Print the maximum space (in bytes) and total time (in seconds) used by
337 Print the @code{as} version.
340 Print the @code{as} version and exit.
343 Suppress warning messages.
352 Generate an object file even after errors.
354 @item -- | @var{files} @dots{}
355 Standard input, or source files to assemble.
360 The following options are available when @value{AS} is configured for
365 @cindex ARC endianness
366 @cindex endianness, ARC
367 @cindex big endian output, ARC
369 Generate ``big endian'' format output.
371 @cindex little endian output, ARC
372 @item -mlittle-endian
373 Generate ``little endian'' format output.
379 The following options are available when @value{AS} is configured for the ARM
383 @item -m[arm]1 | -m[arm]2 | -m[arm]250 | -m[arm]3 | -m[arm]6 | -m[arm]7[t][[d]m] | -m[arm]v2 | -m[arm]v2a | -m[arm]v3 | -m[arm]v3m | -m[arm]v4 | -m[arm]v4t
384 Specify which variant of the ARM architecture is the target.
385 @item -mthumb | -mall
386 Enable or disable Thumb only instruction decoding.
387 @item -mfpa10 | -mfpa11 | -mfpe-old | -mno-fpu
388 Select which Floating Point architcture is the target.
389 @item -mapcs-32 | -mapcs-26
390 Select which procedure calling convention is in use.
392 Select either big-endian (-EB) or little-endian (-EL) output.
397 The following options are available when @value{AS} is configured for
400 @cindex D10V optimization
401 @cindex optimization, D10V
403 Optimize output by parallelizing instructions.
408 The following options are available when @value{AS} is configured for the
409 Intel 80960 processor.
412 @item -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC
413 Specify which variant of the 960 architecture is the target.
416 Add code to collect statistics about branches taken.
419 Do not alter compare-and-branch instructions for long displacements;
426 The following options are available when @value{AS} is configured for the
427 Motorola 68000 series.
432 Shorten references to undefined symbols, to one word instead of two.
434 @item -m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040 | -m68060
435 @itemx | -m68302 | -m68331 | -m68332 | -m68333 | -m68340 | -mcpu32 | -m5200
436 Specify what processor in the 68000 family is the target. The default
437 is normally the 68020, but this can be changed at configuration time.
439 @item -m68881 | -m68882 | -mno-68881 | -mno-68882
440 The target machine does (or does not) have a floating-point coprocessor.
441 The default is to assume a coprocessor for 68020, 68030, and cpu32. Although
442 the basic 68000 is not compatible with the 68881, a combination of the
443 two can be specified, since it's possible to do emulation of the
444 coprocessor instructions with the main processor.
446 @item -m68851 | -mno-68851
447 The target machine does (or does not) have a memory-management
448 unit coprocessor. The default is to assume an MMU for 68020 and up.
454 The following options are available when @code{@value{AS}} is configured
455 for the SPARC architecture:
458 @item -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite | -Av9 | -Av9a
459 Explicitly select a variant of the SPARC architecture.
461 @item -xarch=v8plus | -xarch=v8plusa
462 For compatibility with the Solaris v9 assembler. These options are
463 equivalent to -Av9 and -Av9a, respectively.
466 Warn when the assembler switches to another architecture.
471 The following options are available when @value{AS} is configured for
476 This option sets the largest size of an object that can be referenced
477 implicitly with the @code{gp} register. It is only accepted for targets that
478 use ECOFF format, such as a DECstation running Ultrix. The default value is 8.
480 @cindex MIPS endianness
481 @cindex endianness, MIPS
482 @cindex big endian output, MIPS
484 Generate ``big endian'' format output.
486 @cindex little endian output, MIPS
488 Generate ``little endian'' format output.
494 Generate code for a particular MIPS Instruction Set Architecture level.
495 @samp{-mips1} corresponds to the @sc{r2000} and @sc{r3000} processors,
496 @samp{-mips2} to the @sc{r6000} processor, and @samp{-mips3} to the @sc{r4000}
501 Generate code for the MIPS @sc{r4650} chip. This tells the assembler to accept
502 the @samp{mad} and @samp{madu} instruction, and to not schedule @samp{nop}
503 instructions around accesses to the @samp{HI} and @samp{LO} registers.
504 @samp{-no-m4650} turns off this option.
506 @item -mcpu=@var{CPU}
507 Generate code for a particular MIPS cpu. This has little effect on the
508 assembler, but it is passed by @code{@value{GCC}}.
511 @item --emulation=@var{name}
512 This option causes @code{@value{AS}} to emulate @code{@value{AS}} configured
513 for some other target, in all respects, including output format (choosing
514 between ELF and ECOFF only), handling of pseudo-opcodes which may generate
515 debugging information or store symbol table information, and default
516 endianness. The available configuration names are: @samp{mipsecoff},
517 @samp{mipself}, @samp{mipslecoff}, @samp{mipsbecoff}, @samp{mipslelf},
518 @samp{mipsbelf}. The first two do not alter the default endianness from that
519 of the primary target for which the assembler was configured; the others change
520 the default to little- or big-endian as indicated by the @samp{b} or @samp{l}
521 in the name. Using @samp{-EB} or @samp{-EL} will override the endianness
522 selection in any case.
524 This option is currently supported only when the primary target
525 @code{@value{AS}} is configured for is a MIPS ELF or ECOFF target.
526 Furthermore, the primary target or others specified with
527 @samp{--enable-targets=@dots{}} at configuration time must include support for
528 the other format, if both are to be available. For example, the Irix 5
529 configuration includes support for both.
531 Eventually, this option will support more configurations, with more
532 fine-grained control over the assembler's behavior, and will be supported for
536 @code{@value{AS}} ignores this option. It is accepted for compatibility with
544 Control how to deal with multiplication overflow and division by zero.
545 @samp{--trap} or @samp{--no-break} (which are synonyms) take a trap exception
546 (and only work for Instruction Set Architecture level 2 and higher);
547 @samp{--break} or @samp{--no-trap} (also synonyms, and the default) take a
553 * Manual:: Structure of this Manual
554 * GNU Assembler:: The GNU Assembler
555 * Object Formats:: Object File Formats
556 * Command Line:: Command Line
557 * Input Files:: Input Files
558 * Object:: Output (Object) File
559 * Errors:: Error and Warning Messages
563 @section Structure of this Manual
565 @cindex manual, structure and purpose
566 This manual is intended to describe what you need to know to use
567 @sc{gnu} @code{@value{AS}}. We cover the syntax expected in source files, including
568 notation for symbols, constants, and expressions; the directives that
569 @code{@value{AS}} understands; and of course how to invoke @code{@value{AS}}.
572 We also cover special features in the @value{TARGET}
573 configuration of @code{@value{AS}}, including assembler directives.
576 This manual also describes some of the machine-dependent features of
577 various flavors of the assembler.
580 @cindex machine instructions (not covered)
581 On the other hand, this manual is @emph{not} intended as an introduction
582 to programming in assembly language---let alone programming in general!
583 In a similar vein, we make no attempt to introduce the machine
584 architecture; we do @emph{not} describe the instruction set, standard
585 mnemonics, registers or addressing modes that are standard to a
586 particular architecture.
588 You may want to consult the manufacturer's
589 machine architecture manual for this information.
593 For information on the H8/300 machine instruction set, see @cite{H8/300
594 Series Programming Manual} (Hitachi ADE--602--025). For the H8/300H,
595 see @cite{H8/300H Series Programming Manual} (Hitachi).
598 For information on the H8/500 machine instruction set, see @cite{H8/500
599 Series Programming Manual} (Hitachi M21T001).
602 For information on the Hitachi SH machine instruction set, see
603 @cite{SH-Microcomputer User's Manual} (Hitachi Micro Systems, Inc.).
606 For information on the Z8000 machine instruction set, see @cite{Z8000 CPU Technical Manual}
610 @c I think this is premature---doc@cygnus.com, 17jan1991
612 Throughout this manual, we assume that you are running @dfn{GNU},
613 the portable operating system from the @dfn{Free Software
614 Foundation, Inc.}. This restricts our attention to certain kinds of
615 computer (in particular, the kinds of computers that @sc{gnu} can run on);
616 once this assumption is granted examples and definitions need less
619 @code{@value{AS}} is part of a team of programs that turn a high-level
620 human-readable series of instructions into a low-level
621 computer-readable series of instructions. Different versions of
622 @code{@value{AS}} are used for different kinds of computer.
625 @c There used to be a section "Terminology" here, which defined
626 @c "contents", "byte", "word", and "long". Defining "word" to any
627 @c particular size is confusing when the .word directive may generate 16
628 @c bits on one machine and 32 bits on another; in general, for the user
629 @c version of this manual, none of these terms seem essential to define.
630 @c They were used very little even in the former draft of the manual;
631 @c this draft makes an effort to avoid them (except in names of
635 @section The GNU Assembler
637 @sc{gnu} @code{as} is really a family of assemblers.
639 This manual describes @code{@value{AS}}, a member of that family which is
640 configured for the @value{TARGET} architectures.
642 If you use (or have used) the @sc{gnu} assembler on one architecture, you
643 should find a fairly similar environment when you use it on another
644 architecture. Each version has much in common with the others,
645 including object file formats, most assembler directives (often called
646 @dfn{pseudo-ops}) and assembler syntax.@refill
648 @cindex purpose of @sc{gnu} assembler
649 @code{@value{AS}} is primarily intended to assemble the output of the
650 @sc{gnu} C compiler @code{@value{GCC}} for use by the linker
651 @code{@value{LD}}. Nevertheless, we've tried to make @code{@value{AS}}
652 assemble correctly everything that other assemblers for the same
653 machine would assemble.
655 Any exceptions are documented explicitly (@pxref{Machine Dependencies}).
658 @c This remark should appear in generic version of manual; assumption
659 @c here is that generic version sets M680x0.
660 This doesn't mean @code{@value{AS}} always uses the same syntax as another
661 assembler for the same architecture; for example, we know of several
662 incompatible versions of 680x0 assembly language syntax.
665 Unlike older assemblers, @code{@value{AS}} is designed to assemble a source
666 program in one pass of the source file. This has a subtle impact on the
667 @kbd{.org} directive (@pxref{Org,,@code{.org}}).
670 @section Object File Formats
672 @cindex object file format
673 The @sc{gnu} assembler can be configured to produce several alternative
674 object file formats. For the most part, this does not affect how you
675 write assembly language programs; but directives for debugging symbols
676 are typically different in different file formats. @xref{Symbol
677 Attributes,,Symbol Attributes}.
680 On the @value{TARGET}, @code{@value{AS}} is configured to produce
681 @value{OBJ-NAME} format object files.
683 @c The following should exhaust all configs that set MULTI-OBJ, ideally
685 On the @value{TARGET}, @code{@value{AS}} can be configured to produce either
686 @code{a.out} or COFF format object files.
689 On the @value{TARGET}, @code{@value{AS}} can be configured to produce either
690 @code{b.out} or COFF format object files.
693 On the @value{TARGET}, @code{@value{AS}} can be configured to produce either
694 SOM or ELF format object files.
699 @section Command Line
701 @cindex command line conventions
702 After the program name @code{@value{AS}}, the command line may contain
703 options and file names. Options may appear in any order, and may be
704 before, after, or between file names. The order of file names is
707 @cindex standard input, as input file
709 @file{--} (two hyphens) by itself names the standard input file
710 explicitly, as one of the files for @code{@value{AS}} to assemble.
712 @cindex options, command line
713 Except for @samp{--} any command line argument that begins with a
714 hyphen (@samp{-}) is an option. Each option changes the behavior of
715 @code{@value{AS}}. No option changes the way another option works. An
716 option is a @samp{-} followed by one or more letters; the case of
717 the letter is important. All options are optional.
719 Some options expect exactly one file name to follow them. The file
720 name may either immediately follow the option's letter (compatible
721 with older assemblers) or it may be the next command argument (@sc{gnu}
722 standard). These two command lines are equivalent:
725 @value{AS} -o my-object-file.o mumble.s
726 @value{AS} -omy-object-file.o mumble.s
733 @cindex source program
735 We use the phrase @dfn{source program}, abbreviated @dfn{source}, to
736 describe the program input to one run of @code{@value{AS}}. The program may
737 be in one or more files; how the source is partitioned into files
738 doesn't change the meaning of the source.
740 @c I added "con" prefix to "catenation" just to prove I can overcome my
741 @c APL training... doc@cygnus.com
742 The source program is a concatenation of the text in all the files, in the
745 Each time you run @code{@value{AS}} it assembles exactly one source
746 program. The source program is made up of one or more files.
747 (The standard input is also a file.)
749 You give @code{@value{AS}} a command line that has zero or more input file
750 names. The input files are read (from left file name to right). A
751 command line argument (in any position) that has no special meaning
752 is taken to be an input file name.
754 If you give @code{@value{AS}} no file names it attempts to read one input file
755 from the @code{@value{AS}} standard input, which is normally your terminal. You
756 may have to type @key{ctl-D} to tell @code{@value{AS}} there is no more program
759 Use @samp{--} if you need to explicitly name the standard input file
760 in your command line.
762 If the source is empty, @code{@value{AS}} produces a small, empty object
765 @subheading Filenames and Line-numbers
767 @cindex input file linenumbers
768 @cindex line numbers, in input files
769 There are two ways of locating a line in the input file (or files) and
770 either may be used in reporting error messages. One way refers to a line
771 number in a physical file; the other refers to a line number in a
772 ``logical'' file. @xref{Errors, ,Error and Warning Messages}.
774 @dfn{Physical files} are those files named in the command line given
775 to @code{@value{AS}}.
777 @dfn{Logical files} are simply names declared explicitly by assembler
778 directives; they bear no relation to physical files. Logical file names
779 help error messages reflect the original source file, when @code{@value{AS}}
780 source is itself synthesized from other files.
781 @xref{App-File,,@code{.app-file}}.
784 @section Output (Object) File
790 Every time you run @code{@value{AS}} it produces an output file, which is
791 your assembly language program translated into numbers. This file
792 is the object file. Its default name is
800 @code{b.out} when @code{@value{AS}} is configured for the Intel 80960.
802 You can give it another name by using the @code{-o} option. Conventionally,
803 object file names end with @file{.o}. The default name is used for historical
804 reasons: older assemblers were capable of assembling self-contained programs
805 directly into a runnable program. (For some formats, this isn't currently
806 possible, but it can be done for the @code{a.out} format.)
810 The object file is meant for input to the linker @code{@value{LD}}. It contains
811 assembled program code, information to help @code{@value{LD}} integrate
812 the assembled program into a runnable file, and (optionally) symbolic
813 information for the debugger.
815 @c link above to some info file(s) like the description of a.out.
816 @c don't forget to describe @sc{gnu} info as well as Unix lossage.
819 @section Error and Warning Messages
821 @cindex error messsages
822 @cindex warning messages
823 @cindex messages from assembler
824 @code{@value{AS}} may write warnings and error messages to the standard error
825 file (usually your terminal). This should not happen when a compiler
826 runs @code{@value{AS}} automatically. Warnings report an assumption made so
827 that @code{@value{AS}} could keep assembling a flawed program; errors report a
828 grave problem that stops the assembly.
830 @cindex format of warning messages
831 Warning messages have the format
834 file_name:@b{NNN}:Warning Message Text
838 @cindex line numbers, in warnings/errors
839 (where @b{NNN} is a line number). If a logical file name has been given
840 (@pxref{App-File,,@code{.app-file}}) it is used for the filename,
841 otherwise the name of the current input file is used. If a logical line
844 (@pxref{Line,,@code{.line}})
848 (@pxref{Line,,@code{.line}})
851 (@pxref{Ln,,@code{.ln}})
854 then it is used to calculate the number printed,
855 otherwise the actual line in the current source file is printed. The
856 message text is intended to be self explanatory (in the grand Unix
859 @cindex format of error messages
860 Error messages have the format
862 file_name:@b{NNN}:FATAL:Error Message Text
864 The file name and line number are derived as for warning
865 messages. The actual message text may be rather less explanatory
866 because many of them aren't supposed to happen.
869 @chapter Command-Line Options
871 @cindex options, all versions of assembler
872 This chapter describes command-line options available in @emph{all}
873 versions of the @sc{gnu} assembler; @pxref{Machine Dependencies}, for options specific
875 to the @value{TARGET}.
878 to particular machine architectures.
881 If you are invoking @code{@value{AS}} via the @sc{gnu} C compiler (version 2), you
882 can use the @samp{-Wa} option to pass arguments through to the
883 assembler. The assembler arguments must be separated from each other
884 (and the @samp{-Wa}) by commas. For example:
887 gcc -c -g -O -Wa,-alh,-L file.c
891 emits a listing to standard output with high-level
894 Usually you do not need to use this @samp{-Wa} mechanism, since many compiler
895 command-line options are automatically passed to the assembler by the compiler.
896 (You can call the @sc{gnu} compiler driver with the @samp{-v} option to see
897 precisely what options it passes to each compilation pass, including the
901 * a:: -a[cdhlns] enable listings
902 * D:: -D for compatibility
903 * f:: -f to work faster
904 * I:: -I for .include search path
905 @ifclear DIFF-TBL-KLUGE
906 * K:: -K for compatibility
908 @ifset DIFF-TBL-KLUGE
909 * K:: -K for difference tables
912 * L:: -L to retain local labels
913 * M:: -M or --mri to assemble in MRI compatibility mode
914 * MD:: --MD for dependency tracking
915 * o:: -o to name the object file
916 * R:: -R to join data and text sections
917 * statistics:: --statistics to see statistics about assembly
918 * v:: -v to announce version
919 * W:: -W to suppress warnings
920 * Z:: -Z to make object file even after errors
924 @section Enable Listings: @code{-a[cdhlns]}
933 @cindex listings, enabling
934 @cindex assembly listings, enabling
936 These options enable listing output from the assembler. By itself,
937 @samp{-a} requests high-level, assembly, and symbols listing.
938 You can use other letters to select specific options for the list:
939 @samp{-ah} requests a high-level language listing,
940 @samp{-al} requests an output-program assembly listing, and
941 @samp{-as} requests a symbol table listing.
942 High-level listings require that a compiler debugging option like
943 @samp{-g} be used, and that assembly listings (@samp{-al}) be requested
946 Use the @samp{-ac} option to omit false conditionals from a listing. Any lines
947 which are not assembled because of a false @code{.if} (or @code{.ifdef}, or any
948 other conditional), or a true @code{.if} followed by an @code{.else}, will be
949 omitted from the listing.
951 Use the @samp{-ad} option to omit debugging directives from the
954 Once you have specified one of these options, you can further control
955 listing output and its appearance using the directives @code{.list},
956 @code{.nolist}, @code{.psize}, @code{.eject}, @code{.title}, and
958 The @samp{-an} option turns off all forms processing.
959 If you do not request listing output with one of the @samp{-a} options, the
960 listing-control directives have no effect.
962 The letters after @samp{-a} may be combined into one option,
963 @emph{e.g.}, @samp{-aln}.
969 This option has no effect whatsoever, but it is accepted to make it more
970 likely that scripts written for other assemblers also work with
974 @section Work Faster: @code{-f}
977 @cindex trusted compiler
978 @cindex faster processing (@code{-f})
979 @samp{-f} should only be used when assembling programs written by a
980 (trusted) compiler. @samp{-f} stops the assembler from doing whitespace
981 and comment preprocessing on
982 the input file(s) before assembling them. @xref{Preprocessing,
986 @emph{Warning:} if you use @samp{-f} when the files actually need to be
987 preprocessed (if they contain comments, for example), @code{@value{AS}} does
992 @section @code{.include} search path: @code{-I} @var{path}
994 @kindex -I @var{path}
995 @cindex paths for @code{.include}
996 @cindex search path for @code{.include}
997 @cindex @code{include} directive search path
998 Use this option to add a @var{path} to the list of directories
999 @code{@value{AS}} searches for files specified in @code{.include}
1000 directives (@pxref{Include,,@code{.include}}). You may use @code{-I} as
1001 many times as necessary to include a variety of paths. The current
1002 working directory is always searched first; after that, @code{@value{AS}}
1003 searches any @samp{-I} directories in the same order as they were
1004 specified (left to right) on the command line.
1007 @section Difference Tables: @code{-K}
1010 @ifclear DIFF-TBL-KLUGE
1011 On the @value{TARGET} family, this option is allowed, but has no effect. It is
1012 permitted for compatibility with the @sc{gnu} assembler on other platforms,
1013 where it can be used to warn when the assembler alters the machine code
1014 generated for @samp{.word} directives in difference tables. The @value{TARGET}
1015 family does not have the addressing limitations that sometimes lead to this
1016 alteration on other platforms.
1019 @ifset DIFF-TBL-KLUGE
1020 @cindex difference tables, warning
1021 @cindex warning for altered difference tables
1022 @code{@value{AS}} sometimes alters the code emitted for directives of the form
1023 @samp{.word @var{sym1}-@var{sym2}}; @pxref{Word,,@code{.word}}.
1024 You can use the @samp{-K} option if you want a warning issued when this
1029 @section Include Local Labels: @code{-L}
1032 @cindex local labels, retaining in output
1033 Labels beginning with @samp{L} (upper case only) are called @dfn{local
1034 labels}. @xref{Symbol Names}. Normally you do not see such labels when
1035 debugging, because they are intended for the use of programs (like
1036 compilers) that compose assembler programs, not for your notice.
1037 Normally both @code{@value{AS}} and @code{@value{LD}} discard such labels, so you do not
1038 normally debug with them.
1040 This option tells @code{@value{AS}} to retain those @samp{L@dots{}} symbols
1041 in the object file. Usually if you do this you also tell the linker
1042 @code{@value{LD}} to preserve symbols whose names begin with @samp{L}.
1044 By default, a local label is any label beginning with @samp{L}, but each
1045 target is allowed to redefine the local label prefix.
1047 On the HPPA local labels begin with @samp{L$}.
1050 @samp{;} for the ARM family;
1054 @section Assemble in MRI Compatibility Mode: @code{-M}
1057 @cindex MRI compatibility mode
1058 The @code{-M} or @code{--mri} option selects MRI compatibility mode. This
1059 changes the syntax and pseudo-op handling of @code{@value{AS}} to make it
1060 compatible with the @code{ASM68K} or the @code{ASM960} (depending upon the
1061 configured target) assembler from Microtec Research. The exact nature of the
1062 MRI syntax will not be documented here; see the MRI manuals for more
1063 information. Note in particular that the handling of macros and macro
1064 arguments is somewhat different. The purpose of this option is to permit
1065 assembling existing MRI assembler code using @code{@value{AS}}.
1067 The MRI compatibility is not complete. Certain operations of the MRI assembler
1068 depend upon its object file format, and can not be supported using other object
1069 file formats. Supporting these would require enhancing each object file format
1070 individually. These are:
1073 @item global symbols in common section
1075 The m68k MRI assembler supports common sections which are merged by the linker.
1076 Other object file formats do not support this. @code{@value{AS}} handles
1077 common sections by treating them as a single common symbol. It permits local
1078 symbols to be defined within a common section, but it can not support global
1079 symbols, since it has no way to describe them.
1081 @item complex relocations
1083 The MRI assemblers support relocations against a negated section address, and
1084 relocations which combine the start addresses of two or more sections. These
1085 are not support by other object file formats.
1087 @item @code{END} pseudo-op specifying start address
1089 The MRI @code{END} pseudo-op permits the specification of a start address.
1090 This is not supported by other object file formats. The start address may
1091 instead be specified using the @code{-e} option to the linker, or in a linker
1094 @item @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops
1096 The MRI @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops assign a module
1097 name to the output file. This is not supported by other object file formats.
1099 @item @code{ORG} pseudo-op
1101 The m68k MRI @code{ORG} pseudo-op begins an absolute section at a given
1102 address. This differs from the usual @code{@value{AS}} @code{.org} pseudo-op,
1103 which changes the location within the current section. Absolute sections are
1104 not supported by other object file formats. The address of a section may be
1105 assigned within a linker script.
1108 There are some other features of the MRI assembler which are not supported by
1109 @code{@value{AS}}, typically either because they are difficult or because they
1110 seem of little consequence. Some of these may be supported in future releases.
1114 @item EBCDIC strings
1116 EBCDIC strings are not supported.
1118 @item packed binary coded decimal
1120 Packed binary coded decimal is not supported. This means that the @code{DC.P}
1121 and @code{DCB.P} pseudo-ops are not supported.
1123 @item @code{FEQU} pseudo-op
1125 The m68k @code{FEQU} pseudo-op is not supported.
1127 @item @code{NOOBJ} pseudo-op
1129 The m68k @code{NOOBJ} pseudo-op is not supported.
1131 @item @code{OPT} branch control options
1133 The m68k @code{OPT} branch control options---@code{B}, @code{BRS}, @code{BRB},
1134 @code{BRL}, and @code{BRW}---are ignored. @code{@value{AS}} automatically
1135 relaxes all branches, whether forward or backward, to an appropriate size, so
1136 these options serve no purpose.
1138 @item @code{OPT} list control options
1140 The following m68k @code{OPT} list control options are ignored: @code{C},
1141 @code{CEX}, @code{CL}, @code{CRE}, @code{E}, @code{G}, @code{I}, @code{M},
1142 @code{MEX}, @code{MC}, @code{MD}, @code{X}.
1144 @item other @code{OPT} options
1146 The following m68k @code{OPT} options are ignored: @code{NEST}, @code{O},
1147 @code{OLD}, @code{OP}, @code{P}, @code{PCO}, @code{PCR}, @code{PCS}, @code{R}.
1149 @item @code{OPT} @code{D} option is default
1151 The m68k @code{OPT} @code{D} option is the default, unlike the MRI assembler.
1152 @code{OPT NOD} may be used to turn it off.
1154 @item @code{XREF} pseudo-op.
1156 The m68k @code{XREF} pseudo-op is ignored.
1158 @item @code{.debug} pseudo-op
1160 The i960 @code{.debug} pseudo-op is not supported.
1162 @item @code{.extended} pseudo-op
1164 The i960 @code{.extended} pseudo-op is not supported.
1166 @item @code{.list} pseudo-op.
1168 The various options of the i960 @code{.list} pseudo-op are not supported.
1170 @item @code{.optimize} pseudo-op
1172 The i960 @code{.optimize} pseudo-op is not supported.
1174 @item @code{.output} pseudo-op
1176 The i960 @code{.output} pseudo-op is not supported.
1178 @item @code{.setreal} pseudo-op
1180 The i960 @code{.setreal} pseudo-op is not supported.
1185 @section Dependency tracking: @code{--MD}
1188 @cindex dependency tracking
1191 @code{@value{AS}} can generate a dependency file for the file it creates. This
1192 file consists of a single rule suitable for @code{make} describing the
1193 dependencies of the main source file.
1195 The rule is written to the file named in its argument.
1197 This feature is used in the automatic updating of makefiles.
1200 @section Name the Object File: @code{-o}
1203 @cindex naming object file
1204 @cindex object file name
1205 There is always one object file output when you run @code{@value{AS}}. By
1206 default it has the name
1209 @file{a.out} (or @file{b.out}, for Intel 960 targets only).
1223 You use this option (which takes exactly one filename) to give the
1224 object file a different name.
1226 Whatever the object file is called, @code{@value{AS}} overwrites any
1227 existing file of the same name.
1230 @section Join Data and Text Sections: @code{-R}
1233 @cindex data and text sections, joining
1234 @cindex text and data sections, joining
1235 @cindex joining text and data sections
1236 @cindex merging text and data sections
1237 @code{-R} tells @code{@value{AS}} to write the object file as if all
1238 data-section data lives in the text section. This is only done at
1239 the very last moment: your binary data are the same, but data
1240 section parts are relocated differently. The data section part of
1241 your object file is zero bytes long because all its bytes are
1242 appended to the text section. (@xref{Sections,,Sections and Relocation}.)
1244 When you specify @code{-R} it would be possible to generate shorter
1245 address displacements (because we do not have to cross between text and
1246 data section). We refrain from doing this simply for compatibility with
1247 older versions of @code{@value{AS}}. In future, @code{-R} may work this way.
1250 When @code{@value{AS}} is configured for COFF output,
1251 this option is only useful if you use sections named @samp{.text} and
1256 @code{-R} is not supported for any of the HPPA targets. Using
1257 @code{-R} generates a warning from @code{@value{AS}}.
1261 @section Display Assembly Statistics: @code{--statistics}
1263 @kindex --statistics
1264 @cindex statistics, about assembly
1265 @cindex time, total for assembly
1266 @cindex space used, maximum for assembly
1267 Use @samp{--statistics} to display two statistics about the resources used by
1268 @code{@value{AS}}: the maximum amount of space allocated during the assembly
1269 (in bytes), and the total execution time taken for the assembly (in @sc{cpu}
1273 @section Announce Version: @code{-v}
1277 @cindex assembler version
1278 @cindex version of assembler
1279 You can find out what version of as is running by including the
1280 option @samp{-v} (which you can also spell as @samp{-version}) on the
1284 @section Suppress Warnings: @code{-W}
1287 @cindex suppressing warnings
1288 @cindex warnings, suppressing
1289 @code{@value{AS}} should never give a warning or error message when
1290 assembling compiler output. But programs written by people often
1291 cause @code{@value{AS}} to give a warning that a particular assumption was
1292 made. All such warnings are directed to the standard error file.
1293 If you use this option, no warnings are issued. This option only
1294 affects the warning messages: it does not change any particular of how
1295 @code{@value{AS}} assembles your file. Errors, which stop the assembly, are
1299 @section Generate Object File in Spite of Errors: @code{-Z}
1300 @cindex object file, after errors
1301 @cindex errors, continuing after
1302 After an error message, @code{@value{AS}} normally produces no output. If for
1303 some reason you are interested in object file output even after
1304 @code{@value{AS}} gives an error message on your program, use the @samp{-Z}
1305 option. If there are any errors, @code{@value{AS}} continues anyways, and
1306 writes an object file after a final warning message of the form @samp{@var{n}
1307 errors, @var{m} warnings, generating bad object file.}
1312 @cindex machine-independent syntax
1313 @cindex syntax, machine-independent
1314 This chapter describes the machine-independent syntax allowed in a
1315 source file. @code{@value{AS}} syntax is similar to what many other
1316 assemblers use; it is inspired by the BSD 4.2
1321 assembler, except that @code{@value{AS}} does not assemble Vax bit-fields.
1325 * Preprocessing:: Preprocessing
1326 * Whitespace:: Whitespace
1327 * Comments:: Comments
1328 * Symbol Intro:: Symbols
1329 * Statements:: Statements
1330 * Constants:: Constants
1334 @section Preprocessing
1336 @cindex preprocessing
1337 The @code{@value{AS}} internal preprocessor:
1339 @cindex whitespace, removed by preprocessor
1341 adjusts and removes extra whitespace. It leaves one space or tab before
1342 the keywords on a line, and turns any other whitespace on the line into
1345 @cindex comments, removed by preprocessor
1347 removes all comments, replacing them with a single space, or an
1348 appropriate number of newlines.
1350 @cindex constants, converted by preprocessor
1352 converts character constants into the appropriate numeric values.
1355 It does not do macro processing, include file handling, or
1356 anything else you may get from your C compiler's preprocessor. You can
1357 do include file processing with the @code{.include} directive
1358 (@pxref{Include,,@code{.include}}). You can use the @sc{gnu} C compiler driver
1359 to get other ``CPP'' style preprocessing, by giving the input file a
1360 @samp{.S} suffix. @xref{Overall Options,, Options Controlling the Kind of
1361 Output, gcc.info, Using GNU CC}.
1363 Excess whitespace, comments, and character constants
1364 cannot be used in the portions of the input text that are not
1367 @cindex turning preprocessing on and off
1368 @cindex preprocessing, turning on and off
1371 If the first line of an input file is @code{#NO_APP} or if you use the
1372 @samp{-f} option, whitespace and comments are not removed from the input file.
1373 Within an input file, you can ask for whitespace and comment removal in
1374 specific portions of the by putting a line that says @code{#APP} before the
1375 text that may contain whitespace or comments, and putting a line that says
1376 @code{#NO_APP} after this text. This feature is mainly intend to support
1377 @code{asm} statements in compilers whose output is otherwise free of comments
1384 @dfn{Whitespace} is one or more blanks or tabs, in any order.
1385 Whitespace is used to separate symbols, and to make programs neater for
1386 people to read. Unless within character constants
1387 (@pxref{Characters,,Character Constants}), any whitespace means the same
1388 as exactly one space.
1394 There are two ways of rendering comments to @code{@value{AS}}. In both
1395 cases the comment is equivalent to one space.
1397 Anything from @samp{/*} through the next @samp{*/} is a comment.
1398 This means you may not nest these comments.
1402 The only way to include a newline ('\n') in a comment
1403 is to use this sort of comment.
1406 /* This sort of comment does not nest. */
1409 @cindex line comment character
1410 Anything from the @dfn{line comment} character to the next newline
1411 is considered a comment and is ignored. The line comment character is
1413 @samp{;} for the AMD 29K family;
1416 @samp{;} on the ARC;
1419 @samp{;} for the H8/300 family;
1422 @samp{!} for the H8/500 family;
1425 @samp{;} for the HPPA;
1428 @samp{#} on the i960;
1431 @samp{!} for the Hitachi SH;
1434 @samp{!} on the SPARC;
1437 @samp{|} on the 680x0;
1440 @samp{#} on the Vax;
1443 @samp{!} for the Z8000;
1445 @c start-sanitize-v850
1447 @samp{#} on the V850;
1449 @c end-sanitize-v850
1450 see @ref{Machine Dependencies}. @refill
1451 @c FIXME What about i386, m88k, i860?
1454 On some machines there are two different line comment characters. One
1455 character only begins a comment if it is the first non-whitespace character on
1456 a line, while the other always begins a comment.
1459 @c start-sanitize-v850
1461 The V850 assembler also supports a double dash as starting a comment that
1462 extends to the end of the line.
1466 @c end-sanitize-v850
1469 @cindex lines starting with @code{#}
1470 @cindex logical line numbers
1471 To be compatible with past assemblers, lines that begin with @samp{#} have a
1472 special interpretation. Following the @samp{#} should be an absolute
1473 expression (@pxref{Expressions}): the logical line number of the @emph{next}
1474 line. Then a string (@pxref{Strings,, Strings}) is allowed: if present it is a
1475 new logical file name. The rest of the line, if any, should be whitespace.
1477 If the first non-whitespace characters on the line are not numeric,
1478 the line is ignored. (Just like a comment.)
1481 # This is an ordinary comment.
1482 # 42-6 "new_file_name" # New logical file name
1483 # This is logical line # 36.
1485 This feature is deprecated, and may disappear from future versions
1486 of @code{@value{AS}}.
1491 @cindex characters used in symbols
1492 @ifclear SPECIAL-SYMS
1493 A @dfn{symbol} is one or more characters chosen from the set of all
1494 letters (both upper and lower case), digits and the three characters
1500 A @dfn{symbol} is one or more characters chosen from the set of all
1501 letters (both upper and lower case), digits and the three characters
1502 @samp{._$}. (Save that, on the H8/300 only, you may not use @samp{$} in
1508 On most machines, you can also use @code{$} in symbol names; exceptions
1509 are noted in @ref{Machine Dependencies}.
1511 No symbol may begin with a digit. Case is significant.
1512 There is no length limit: all characters are significant. Symbols are
1513 delimited by characters not in that set, or by the beginning of a file
1514 (since the source program must end with a newline, the end of a file is
1515 not a possible symbol delimiter). @xref{Symbols}.
1516 @cindex length of symbols
1521 @cindex statements, structure of
1522 @cindex line separator character
1523 @cindex statement separator character
1525 @ifclear abnormal-separator
1526 A @dfn{statement} ends at a newline character (@samp{\n}) or at a
1527 semicolon (@samp{;}). The newline or semicolon is considered part of
1528 the preceding statement. Newlines and semicolons within character
1529 constants are an exception: they do not end statements.
1531 @ifset abnormal-separator
1533 A @dfn{statement} ends at a newline character (@samp{\n}) or an ``at''
1534 sign (@samp{@@}). The newline or at sign is considered part of the
1535 preceding statement. Newlines and at signs within character constants
1536 are an exception: they do not end statements.
1539 A @dfn{statement} ends at a newline character (@samp{\n}) or an exclamation
1540 point (@samp{!}). The newline or exclamation point is considered part of the
1541 preceding statement. Newlines and exclamation points within character
1542 constants are an exception: they do not end statements.
1545 A @dfn{statement} ends at a newline character (@samp{\n}); or (for the
1546 H8/300) a dollar sign (@samp{$}); or (for the
1549 (@samp{;}). The newline or separator character is considered part of
1550 the preceding statement. Newlines and separators within character
1551 constants are an exception: they do not end statements.
1556 A @dfn{statement} ends at a newline character (@samp{\n}) or line
1557 separator character. (The line separator is usually @samp{;}, unless
1558 this conflicts with the comment character; @pxref{Machine Dependencies}.) The
1559 newline or separator character is considered part of the preceding
1560 statement. Newlines and separators within character constants are an
1561 exception: they do not end statements.
1564 @cindex newline, required at file end
1565 @cindex EOF, newline must precede
1566 It is an error to end any statement with end-of-file: the last
1567 character of any input file should be a newline.@refill
1569 @cindex continuing statements
1570 @cindex multi-line statements
1571 @cindex statement on multiple lines
1572 You may write a statement on more than one line if you put a
1573 backslash (@kbd{\}) immediately in front of any newlines within the
1574 statement. When @code{@value{AS}} reads a backslashed newline both
1575 characters are ignored. You can even put backslashed newlines in
1576 the middle of symbol names without changing the meaning of your
1579 An empty statement is allowed, and may include whitespace. It is ignored.
1581 @cindex instructions and directives
1582 @cindex directives and instructions
1583 @c "key symbol" is not used elsewhere in the document; seems pedantic to
1584 @c @defn{} it in that case, as was done previously... doc@cygnus.com,
1586 A statement begins with zero or more labels, optionally followed by a
1587 key symbol which determines what kind of statement it is. The key
1588 symbol determines the syntax of the rest of the statement. If the
1589 symbol begins with a dot @samp{.} then the statement is an assembler
1590 directive: typically valid for any computer. If the symbol begins with
1591 a letter the statement is an assembly language @dfn{instruction}: it
1592 assembles into a machine language instruction.
1594 Different versions of @code{@value{AS}} for different computers
1595 recognize different instructions. In fact, the same symbol may
1596 represent a different instruction in a different computer's assembly
1600 @cindex @code{:} (label)
1601 @cindex label (@code{:})
1602 A label is a symbol immediately followed by a colon (@code{:}).
1603 Whitespace before a label or after a colon is permitted, but you may not
1604 have whitespace between a label's symbol and its colon. @xref{Labels}.
1607 For HPPA targets, labels need not be immediately followed by a colon, but
1608 the definition of a label must begin in column zero. This also implies that
1609 only one label may be defined on each line.
1613 label: .directive followed by something
1614 another_label: # This is an empty statement.
1615 instruction operand_1, operand_2, @dots{}
1622 A constant is a number, written so that its value is known by
1623 inspection, without knowing any context. Like this:
1626 .byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
1627 .ascii "Ring the bell\7" # A string constant.
1628 .octa 0x123456789abcdef0123456789ABCDEF0 # A bignum.
1629 .float 0f-314159265358979323846264338327\
1630 95028841971.693993751E-40 # - pi, a flonum.
1635 * Characters:: Character Constants
1636 * Numbers:: Number Constants
1640 @subsection Character Constants
1642 @cindex character constants
1643 @cindex constants, character
1644 There are two kinds of character constants. A @dfn{character} stands
1645 for one character in one byte and its value may be used in
1646 numeric expressions. String constants (properly called string
1647 @emph{literals}) are potentially many bytes and their values may not be
1648 used in arithmetic expressions.
1652 * Chars:: Characters
1656 @subsubsection Strings
1658 @cindex string constants
1659 @cindex constants, string
1660 A @dfn{string} is written between double-quotes. It may contain
1661 double-quotes or null characters. The way to get special characters
1662 into a string is to @dfn{escape} these characters: precede them with
1663 a backslash @samp{\} character. For example @samp{\\} represents
1664 one backslash: the first @code{\} is an escape which tells
1665 @code{@value{AS}} to interpret the second character literally as a backslash
1666 (which prevents @code{@value{AS}} from recognizing the second @code{\} as an
1667 escape character). The complete list of escapes follows.
1669 @cindex escape codes, character
1670 @cindex character escape codes
1673 @c Mnemonic for ACKnowledge; for ASCII this is octal code 007.
1675 @cindex @code{\b} (backspace character)
1676 @cindex backspace (@code{\b})
1678 Mnemonic for backspace; for ASCII this is octal code 010.
1681 @c Mnemonic for EOText; for ASCII this is octal code 004.
1683 @cindex @code{\f} (formfeed character)
1684 @cindex formfeed (@code{\f})
1686 Mnemonic for FormFeed; for ASCII this is octal code 014.
1688 @cindex @code{\n} (newline character)
1689 @cindex newline (@code{\n})
1691 Mnemonic for newline; for ASCII this is octal code 012.
1694 @c Mnemonic for prefix; for ASCII this is octal code 033, usually known as @code{escape}.
1696 @cindex @code{\r} (carriage return character)
1697 @cindex carriage return (@code{\r})
1699 Mnemonic for carriage-Return; for ASCII this is octal code 015.
1702 @c Mnemonic for space; for ASCII this is octal code 040. Included for compliance with
1703 @c other assemblers.
1705 @cindex @code{\t} (tab)
1706 @cindex tab (@code{\t})
1708 Mnemonic for horizontal Tab; for ASCII this is octal code 011.
1711 @c Mnemonic for Vertical tab; for ASCII this is octal code 013.
1712 @c @item \x @var{digit} @var{digit} @var{digit}
1713 @c A hexadecimal character code. The numeric code is 3 hexadecimal digits.
1715 @cindex @code{\@var{ddd}} (octal character code)
1716 @cindex octal character code (@code{\@var{ddd}})
1717 @item \ @var{digit} @var{digit} @var{digit}
1718 An octal character code. The numeric code is 3 octal digits.
1719 For compatibility with other Unix systems, 8 and 9 are accepted as digits:
1720 for example, @code{\008} has the value 010, and @code{\009} the value 011.
1722 @cindex @code{\@var{xd...}} (hex character code)
1723 @cindex hex character code (@code{\@var{xd...}})
1724 @item \@code{x} @var{hex-digits...}
1725 A hex character code. All trailing hex digits are combined. Either upper or
1726 lower case @code{x} works.
1728 @cindex @code{\\} (@samp{\} character)
1729 @cindex backslash (@code{\\})
1731 Represents one @samp{\} character.
1734 @c Represents one @samp{'} (accent acute) character.
1735 @c This is needed in single character literals
1736 @c (@xref{Characters,,Character Constants}.) to represent
1739 @cindex @code{\"} (doublequote character)
1740 @cindex doublequote (@code{\"})
1742 Represents one @samp{"} character. Needed in strings to represent
1743 this character, because an unescaped @samp{"} would end the string.
1745 @item \ @var{anything-else}
1746 Any other character when escaped by @kbd{\} gives a warning, but
1747 assembles as if the @samp{\} was not present. The idea is that if
1748 you used an escape sequence you clearly didn't want the literal
1749 interpretation of the following character. However @code{@value{AS}} has no
1750 other interpretation, so @code{@value{AS}} knows it is giving you the wrong
1751 code and warns you of the fact.
1754 Which characters are escapable, and what those escapes represent,
1755 varies widely among assemblers. The current set is what we think
1756 the BSD 4.2 assembler recognizes, and is a subset of what most C
1757 compilers recognize. If you are in doubt, do not use an escape
1761 @subsubsection Characters
1763 @cindex single character constant
1764 @cindex character, single
1765 @cindex constant, single character
1766 A single character may be written as a single quote immediately
1767 followed by that character. The same escapes apply to characters as
1768 to strings. So if you want to write the character backslash, you
1769 must write @kbd{'\\} where the first @code{\} escapes the second
1770 @code{\}. As you can see, the quote is an acute accent, not a
1771 grave accent. A newline
1773 @ifclear abnormal-separator
1774 (or semicolon @samp{;})
1776 @ifset abnormal-separator
1778 (or at sign @samp{@@})
1781 (or dollar sign @samp{$}, for the H8/300; or semicolon @samp{;} for the
1787 immediately following an acute accent is taken as a literal character
1788 and does not count as the end of a statement. The value of a character
1789 constant in a numeric expression is the machine's byte-wide code for
1790 that character. @code{@value{AS}} assumes your character code is ASCII:
1791 @kbd{'A} means 65, @kbd{'B} means 66, and so on. @refill
1794 @subsection Number Constants
1796 @cindex constants, number
1797 @cindex number constants
1798 @code{@value{AS}} distinguishes three kinds of numbers according to how they
1799 are stored in the target machine. @emph{Integers} are numbers that
1800 would fit into an @code{int} in the C language. @emph{Bignums} are
1801 integers, but they are stored in more than 32 bits. @emph{Flonums}
1802 are floating point numbers, described below.
1805 * Integers:: Integers
1810 * Bit Fields:: Bit Fields
1816 @subsubsection Integers
1818 @cindex constants, integer
1820 @cindex binary integers
1821 @cindex integers, binary
1822 A binary integer is @samp{0b} or @samp{0B} followed by zero or more of
1823 the binary digits @samp{01}.
1825 @cindex octal integers
1826 @cindex integers, octal
1827 An octal integer is @samp{0} followed by zero or more of the octal
1828 digits (@samp{01234567}).
1830 @cindex decimal integers
1831 @cindex integers, decimal
1832 A decimal integer starts with a non-zero digit followed by zero or
1833 more digits (@samp{0123456789}).
1835 @cindex hexadecimal integers
1836 @cindex integers, hexadecimal
1837 A hexadecimal integer is @samp{0x} or @samp{0X} followed by one or
1838 more hexadecimal digits chosen from @samp{0123456789abcdefABCDEF}.
1840 Integers have the usual values. To denote a negative integer, use
1841 the prefix operator @samp{-} discussed under expressions
1842 (@pxref{Prefix Ops,,Prefix Operators}).
1845 @subsubsection Bignums
1848 @cindex constants, bignum
1849 A @dfn{bignum} has the same syntax and semantics as an integer
1850 except that the number (or its negative) takes more than 32 bits to
1851 represent in binary. The distinction is made because in some places
1852 integers are permitted while bignums are not.
1855 @subsubsection Flonums
1857 @cindex floating point numbers
1858 @cindex constants, floating point
1860 @cindex precision, floating point
1861 A @dfn{flonum} represents a floating point number. The translation is
1862 indirect: a decimal floating point number from the text is converted by
1863 @code{@value{AS}} to a generic binary floating point number of more than
1864 sufficient precision. This generic floating point number is converted
1865 to a particular computer's floating point format (or formats) by a
1866 portion of @code{@value{AS}} specialized to that computer.
1868 A flonum is written by writing (in order)
1873 (@samp{0} is optional on the HPPA.)
1877 A letter, to tell @code{@value{AS}} the rest of the number is a flonum.
1879 @kbd{e} is recommended. Case is not important.
1881 @c FIXME: verify if flonum syntax really this vague for most cases
1882 (Any otherwise illegal letter works here, but that might be changed. Vax BSD
1883 4.2 assembler seems to allow any of @samp{defghDEFGH}.)
1886 On the H8/300, H8/500,
1888 and AMD 29K architectures, the letter must be
1889 one of the letters @samp{DFPRSX} (in upper or lower case).
1891 On the ARC, the letter must be one of the letters @samp{DFRS}
1892 (in upper or lower case).
1894 On the Intel 960 architecture, the letter must be
1895 one of the letters @samp{DFT} (in upper or lower case).
1897 On the HPPA architecture, the letter must be @samp{E} (upper case only).
1901 One of the letters @samp{DFPRSX} (in upper or lower case).
1904 One of the letters @samp{DFRS} (in upper or lower case).
1907 One of the letters @samp{DFPRSX} (in upper or lower case).
1910 The letter @samp{E} (upper case only).
1913 One of the letters @samp{DFT} (in upper or lower case).
1918 An optional sign: either @samp{+} or @samp{-}.
1921 An optional @dfn{integer part}: zero or more decimal digits.
1924 An optional @dfn{fractional part}: @samp{.} followed by zero
1925 or more decimal digits.
1928 An optional exponent, consisting of:
1932 An @samp{E} or @samp{e}.
1933 @c I can't find a config where "EXP_CHARS" is other than 'eE', but in
1934 @c principle this can perfectly well be different on different targets.
1936 Optional sign: either @samp{+} or @samp{-}.
1938 One or more decimal digits.
1943 At least one of the integer part or the fractional part must be
1944 present. The floating point number has the usual base-10 value.
1946 @code{@value{AS}} does all processing using integers. Flonums are computed
1947 independently of any floating point hardware in the computer running
1952 @c Bit fields are written as a general facility but are also controlled
1953 @c by a conditional-compilation flag---which is as of now (21mar91)
1954 @c turned on only by the i960 config of GAS.
1956 @subsubsection Bit Fields
1959 @cindex constants, bit field
1960 You can also define numeric constants as @dfn{bit fields}.
1961 specify two numbers separated by a colon---
1963 @var{mask}:@var{value}
1966 @code{@value{AS}} applies a bitwise @sc{and} between @var{mask} and
1969 The resulting number is then packed
1971 @c this conditional paren in case bit fields turned on elsewhere than 960
1972 (in host-dependent byte order)
1974 into a field whose width depends on which assembler directive has the
1975 bit-field as its argument. Overflow (a result from the bitwise and
1976 requiring more binary digits to represent) is not an error; instead,
1977 more constants are generated, of the specified width, beginning with the
1978 least significant digits.@refill
1980 The directives @code{.byte}, @code{.hword}, @code{.int}, @code{.long},
1981 @code{.short}, and @code{.word} accept bit-field arguments.
1986 @chapter Sections and Relocation
1991 * Secs Background:: Background
1992 * Ld Sections:: Linker Sections
1993 * As Sections:: Assembler Internal Sections
1994 * Sub-Sections:: Sub-Sections
1998 @node Secs Background
2001 Roughly, a section is a range of addresses, with no gaps; all data
2002 ``in'' those addresses is treated the same for some particular purpose.
2003 For example there may be a ``read only'' section.
2005 @cindex linker, and assembler
2006 @cindex assembler, and linker
2007 The linker @code{@value{LD}} reads many object files (partial programs) and
2008 combines their contents to form a runnable program. When @code{@value{AS}}
2009 emits an object file, the partial program is assumed to start at address 0.
2010 @code{@value{LD}} assigns the final addresses for the partial program, so that
2011 different partial programs do not overlap. This is actually an
2012 oversimplification, but it suffices to explain how @code{@value{AS}} uses
2015 @code{@value{LD}} moves blocks of bytes of your program to their run-time
2016 addresses. These blocks slide to their run-time addresses as rigid
2017 units; their length does not change and neither does the order of bytes
2018 within them. Such a rigid unit is called a @emph{section}. Assigning
2019 run-time addresses to sections is called @dfn{relocation}. It includes
2020 the task of adjusting mentions of object-file addresses so they refer to
2021 the proper run-time addresses.
2023 For the H8/300 and H8/500,
2024 and for the Hitachi SH,
2025 @code{@value{AS}} pads sections if needed to
2026 ensure they end on a word (sixteen bit) boundary.
2029 @cindex standard assembler sections
2030 An object file written by @code{@value{AS}} has at least three sections, any
2031 of which may be empty. These are named @dfn{text}, @dfn{data} and
2036 When it generates COFF output,
2038 @code{@value{AS}} can also generate whatever other named sections you specify
2039 using the @samp{.section} directive (@pxref{Section,,@code{.section}}).
2040 If you do not use any directives that place output in the @samp{.text}
2041 or @samp{.data} sections, these sections still exist, but are empty.
2046 When @code{@value{AS}} generates SOM or ELF output for the HPPA,
2048 @code{@value{AS}} can also generate whatever other named sections you
2049 specify using the @samp{.space} and @samp{.subspace} directives. See
2050 @cite{HP9000 Series 800 Assembly Language Reference Manual}
2051 (HP 92432-90001) for details on the @samp{.space} and @samp{.subspace}
2052 assembler directives.
2055 Additionally, @code{@value{AS}} uses different names for the standard
2056 text, data, and bss sections when generating SOM output. Program text
2057 is placed into the @samp{$CODE$} section, data into @samp{$DATA$}, and
2058 BSS into @samp{$BSS$}.
2062 Within the object file, the text section starts at address @code{0}, the
2063 data section follows, and the bss section follows the data section.
2066 When generating either SOM or ELF output files on the HPPA, the text
2067 section starts at address @code{0}, the data section at address
2068 @code{0x4000000}, and the bss section follows the data section.
2071 To let @code{@value{LD}} know which data changes when the sections are
2072 relocated, and how to change that data, @code{@value{AS}} also writes to the
2073 object file details of the relocation needed. To perform relocation
2074 @code{@value{LD}} must know, each time an address in the object
2078 Where in the object file is the beginning of this reference to
2081 How long (in bytes) is this reference?
2083 Which section does the address refer to? What is the numeric value of
2085 (@var{address}) @minus{} (@var{start-address of section})?
2088 Is the reference to an address ``Program-Counter relative''?
2091 @cindex addresses, format of
2092 @cindex section-relative addressing
2093 In fact, every address @code{@value{AS}} ever uses is expressed as
2095 (@var{section}) + (@var{offset into section})
2098 Further, most expressions @code{@value{AS}} computes have this section-relative
2101 (For some object formats, such as SOM for the HPPA, some expressions are
2102 symbol-relative instead.)
2105 In this manual we use the notation @{@var{secname} @var{N}@} to mean ``offset
2106 @var{N} into section @var{secname}.''
2108 Apart from text, data and bss sections you need to know about the
2109 @dfn{absolute} section. When @code{@value{LD}} mixes partial programs,
2110 addresses in the absolute section remain unchanged. For example, address
2111 @code{@{absolute 0@}} is ``relocated'' to run-time address 0 by
2112 @code{@value{LD}}. Although the linker never arranges two partial programs'
2113 data sections with overlapping addresses after linking, @emph{by definition}
2114 their absolute sections must overlap. Address @code{@{absolute@ 239@}} in one
2115 part of a program is always the same address when the program is running as
2116 address @code{@{absolute@ 239@}} in any other part of the program.
2118 The idea of sections is extended to the @dfn{undefined} section. Any
2119 address whose section is unknown at assembly time is by definition
2120 rendered @{undefined @var{U}@}---where @var{U} is filled in later.
2121 Since numbers are always defined, the only way to generate an undefined
2122 address is to mention an undefined symbol. A reference to a named
2123 common block would be such a symbol: its value is unknown at assembly
2124 time so it has section @emph{undefined}.
2126 By analogy the word @emph{section} is used to describe groups of sections in
2127 the linked program. @code{@value{LD}} puts all partial programs' text
2128 sections in contiguous addresses in the linked program. It is
2129 customary to refer to the @emph{text section} of a program, meaning all
2130 the addresses of all partial programs' text sections. Likewise for
2131 data and bss sections.
2133 Some sections are manipulated by @code{@value{LD}}; others are invented for
2134 use of @code{@value{AS}} and have no meaning except during assembly.
2137 @section Linker Sections
2138 @code{@value{LD}} deals with just four kinds of sections, summarized below.
2143 @cindex named sections
2144 @cindex sections, named
2145 @item named sections
2148 @cindex text section
2149 @cindex data section
2153 These sections hold your program. @code{@value{AS}} and @code{@value{LD}} treat them as
2154 separate but equal sections. Anything you can say of one section is
2157 When the program is running, however, it is
2158 customary for the text section to be unalterable. The
2159 text section is often shared among processes: it contains
2160 instructions, constants and the like. The data section of a running
2161 program is usually alterable: for example, C variables would be stored
2162 in the data section.
2167 This section contains zeroed bytes when your program begins running. It
2168 is used to hold unitialized variables or common storage. The length of
2169 each partial program's bss section is important, but because it starts
2170 out containing zeroed bytes there is no need to store explicit zero
2171 bytes in the object file. The bss section was invented to eliminate
2172 those explicit zeros from object files.
2174 @cindex absolute section
2175 @item absolute section
2176 Address 0 of this section is always ``relocated'' to runtime address 0.
2177 This is useful if you want to refer to an address that @code{@value{LD}} must
2178 not change when relocating. In this sense we speak of absolute
2179 addresses being ``unrelocatable'': they do not change during relocation.
2181 @cindex undefined section
2182 @item undefined section
2183 This ``section'' is a catch-all for address references to objects not in
2184 the preceding sections.
2185 @c FIXME: ref to some other doc on obj-file formats could go here.
2188 @cindex relocation example
2189 An idealized example of three relocatable sections follows.
2191 The example uses the traditional section names @samp{.text} and @samp{.data}.
2193 Memory addresses are on the horizontal axis.
2197 @c END TEXI2ROFF-KILL
2200 partial program # 1: |ttttt|dddd|00|
2207 partial program # 2: |TTT|DDD|000|
2210 +--+---+-----+--+----+---+-----+~~
2211 linked program: | |TTT|ttttt| |dddd|DDD|00000|
2212 +--+---+-----+--+----+---+-----+~~
2214 addresses: 0 @dots{}
2221 \line{\it Partial program \#1: \hfil}
2222 \line{\ibox{2.5cm}{\tt text}\ibox{2cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
2223 \line{\boxit{2.5cm}{\tt ttttt}\boxit{2cm}{\tt dddd}\boxit{1cm}{\tt 00}\hfil}
2225 \line{\it Partial program \#2: \hfil}
2226 \line{\ibox{1cm}{\tt text}\ibox{1.5cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
2227 \line{\boxit{1cm}{\tt TTT}\boxit{1.5cm}{\tt DDDD}\boxit{1cm}{\tt 000}\hfil}
2229 \line{\it linked program: \hfil}
2230 \line{\ibox{.5cm}{}\ibox{1cm}{\tt text}\ibox{2.5cm}{}\ibox{.75cm}{}\ibox{2cm}{\tt data}\ibox{1.5cm}{}\ibox{2cm}{\tt bss}\hfil}
2231 \line{\boxit{.5cm}{}\boxit{1cm}{\tt TTT}\boxit{2.5cm}{\tt
2232 ttttt}\boxit{.75cm}{}\boxit{2cm}{\tt dddd}\boxit{1.5cm}{\tt
2233 DDDD}\boxit{2cm}{\tt 00000}\ \dots\hfil}
2235 \line{\it addresses: \hfil}
2239 @c END TEXI2ROFF-KILL
2242 @section Assembler Internal Sections
2244 @cindex internal assembler sections
2245 @cindex sections in messages, internal
2246 These sections are meant only for the internal use of @code{@value{AS}}. They
2247 have no meaning at run-time. You do not really need to know about these
2248 sections for most purposes; but they can be mentioned in @code{@value{AS}}
2249 warning messages, so it might be helpful to have an idea of their
2250 meanings to @code{@value{AS}}. These sections are used to permit the
2251 value of every expression in your assembly language program to be a
2252 section-relative address.
2255 @cindex assembler internal logic error
2256 @item ASSEMBLER-INTERNAL-LOGIC-ERROR!
2257 An internal assembler logic error has been found. This means there is a
2258 bug in the assembler.
2260 @cindex expr (internal section)
2262 The assembler stores complex expression internally as combinations of
2263 symbols. When it needs to represent an expression as a symbol, it puts
2264 it in the expr section.
2266 @c FIXME item transfer[t] vector preload
2267 @c FIXME item transfer[t] vector postload
2268 @c FIXME item register
2272 @section Sub-Sections
2274 @cindex numbered subsections
2275 @cindex grouping data
2281 fall into two sections: text and data.
2283 You may have separate groups of
2285 data in named sections
2289 data in named sections
2295 that you want to end up near to each other in the object file, even though they
2296 are not contiguous in the assembler source. @code{@value{AS}} allows you to
2297 use @dfn{subsections} for this purpose. Within each section, there can be
2298 numbered subsections with values from 0 to 8192. Objects assembled into the
2299 same subsection go into the object file together with other objects in the same
2300 subsection. For example, a compiler might want to store constants in the text
2301 section, but might not want to have them interspersed with the program being
2302 assembled. In this case, the compiler could issue a @samp{.text 0} before each
2303 section of code being output, and a @samp{.text 1} before each group of
2304 constants being output.
2306 Subsections are optional. If you do not use subsections, everything
2307 goes in subsection number zero.
2310 Each subsection is zero-padded up to a multiple of four bytes.
2311 (Subsections may be padded a different amount on different flavors
2312 of @code{@value{AS}}.)
2316 On the H8/300 and H8/500 platforms, each subsection is zero-padded to a word
2317 boundary (two bytes).
2318 The same is true on the Hitachi SH.
2321 @c FIXME section padding (alignment)?
2322 @c Rich Pixley says padding here depends on target obj code format; that
2323 @c doesn't seem particularly useful to say without further elaboration,
2324 @c so for now I say nothing about it. If this is a generic BFD issue,
2325 @c these paragraphs might need to vanish from this manual, and be
2326 @c discussed in BFD chapter of binutils (or some such).
2329 On the AMD 29K family, no particular padding is added to section or
2330 subsection sizes; @value{AS} forces no alignment on this platform.
2334 Subsections appear in your object file in numeric order, lowest numbered
2335 to highest. (All this to be compatible with other people's assemblers.)
2336 The object file contains no representation of subsections; @code{@value{LD}} and
2337 other programs that manipulate object files see no trace of them.
2338 They just see all your text subsections as a text section, and all your
2339 data subsections as a data section.
2341 To specify which subsection you want subsequent statements assembled
2342 into, use a numeric argument to specify it, in a @samp{.text
2343 @var{expression}} or a @samp{.data @var{expression}} statement.
2346 When generating COFF output, you
2351 can also use an extra subsection
2352 argument with arbitrary named sections: @samp{.section @var{name},
2355 @var{Expression} should be an absolute expression.
2356 (@xref{Expressions}.) If you just say @samp{.text} then @samp{.text 0}
2357 is assumed. Likewise @samp{.data} means @samp{.data 0}. Assembly
2358 begins in @code{text 0}. For instance:
2360 .text 0 # The default subsection is text 0 anyway.
2361 .ascii "This lives in the first text subsection. *"
2363 .ascii "But this lives in the second text subsection."
2365 .ascii "This lives in the data section,"
2366 .ascii "in the first data subsection."
2368 .ascii "This lives in the first text section,"
2369 .ascii "immediately following the asterisk (*)."
2372 Each section has a @dfn{location counter} incremented by one for every byte
2373 assembled into that section. Because subsections are merely a convenience
2374 restricted to @code{@value{AS}} there is no concept of a subsection location
2375 counter. There is no way to directly manipulate a location counter---but the
2376 @code{.align} directive changes it, and any label definition captures its
2377 current value. The location counter of the section where statements are being
2378 assembled is said to be the @dfn{active} location counter.
2381 @section bss Section
2384 @cindex common variable storage
2385 The bss section is used for local common variable storage.
2386 You may allocate address space in the bss section, but you may
2387 not dictate data to load into it before your program executes. When
2388 your program starts running, all the contents of the bss
2389 section are zeroed bytes.
2391 The @code{.lcomm} pseudo-op defines a symbol in the bss section; see
2392 @ref{Lcomm,,@code{.lcomm}}.
2394 The @code{.comm} pseudo-op may be used to declare a common symbol, which is
2395 another form of uninitialized symbol; see @xref{Comm,,@code{.comm}}.
2398 When assembling for a target which supports multiple sections, such as ELF or
2399 COFF, you may switch into the @code{.bss} section and define symbols as usual;
2400 see @ref{Section,,@code{.section}}. You may only assemble zero values into the
2401 section. Typically the section will only contain symbol definitions and
2402 @code{.skip} directives (@pxref{Skip,,@code{.skip}}).
2409 Symbols are a central concept: the programmer uses symbols to name
2410 things, the linker uses symbols to link, and the debugger uses symbols
2414 @cindex debuggers, and symbol order
2415 @emph{Warning:} @code{@value{AS}} does not place symbols in the object file in
2416 the same order they were declared. This may break some debuggers.
2421 * Setting Symbols:: Giving Symbols Other Values
2422 * Symbol Names:: Symbol Names
2423 * Dot:: The Special Dot Symbol
2424 * Symbol Attributes:: Symbol Attributes
2431 A @dfn{label} is written as a symbol immediately followed by a colon
2432 @samp{:}. The symbol then represents the current value of the
2433 active location counter, and is, for example, a suitable instruction
2434 operand. You are warned if you use the same symbol to represent two
2435 different locations: the first definition overrides any other
2439 On the HPPA, the usual form for a label need not be immediately followed by a
2440 colon, but instead must start in column zero. Only one label may be defined on
2441 a single line. To work around this, the HPPA version of @code{@value{AS}} also
2442 provides a special directive @code{.label} for defining labels more flexibly.
2445 @node Setting Symbols
2446 @section Giving Symbols Other Values
2448 @cindex assigning values to symbols
2449 @cindex symbol values, assigning
2450 A symbol can be given an arbitrary value by writing a symbol, followed
2451 by an equals sign @samp{=}, followed by an expression
2452 (@pxref{Expressions}). This is equivalent to using the @code{.set}
2453 directive. @xref{Set,,@code{.set}}.
2456 @section Symbol Names
2458 @cindex symbol names
2459 @cindex names, symbol
2460 @ifclear SPECIAL-SYMS
2461 Symbol names begin with a letter or with one of @samp{._}. On most
2462 machines, you can also use @code{$} in symbol names; exceptions are
2463 noted in @ref{Machine Dependencies}. That character may be followed by any
2464 string of digits, letters, dollar signs (unless otherwise noted in
2465 @ref{Machine Dependencies}), and underscores.
2468 For the AMD 29K family, @samp{?} is also allowed in the
2469 body of a symbol name, though not at its beginning.
2474 Symbol names begin with a letter or with one of @samp{._}. On the
2476 H8/500, you can also use @code{$} in symbol names. That character may
2477 be followed by any string of digits, letters, dollar signs (save on the
2478 H8/300), and underscores.
2482 Case of letters is significant: @code{foo} is a different symbol name
2485 Each symbol has exactly one name. Each name in an assembly language program
2486 refers to exactly one symbol. You may use that symbol name any number of times
2489 @subheading Local Symbol Names
2491 @cindex local symbol names
2492 @cindex symbol names, local
2493 @cindex temporary symbol names
2494 @cindex symbol names, temporary
2495 Local symbols help compilers and programmers use names temporarily.
2496 There are ten local symbol names, which are re-used throughout the
2497 program. You may refer to them using the names @samp{0} @samp{1}
2498 @dots{} @samp{9}. To define a local symbol, write a label of the form
2499 @samp{@b{N}:} (where @b{N} represents any digit). To refer to the most
2500 recent previous definition of that symbol write @samp{@b{N}b}, using the
2501 same digit as when you defined the label. To refer to the next
2502 definition of a local label, write @samp{@b{N}f}---where @b{N} gives you
2503 a choice of 10 forward references. The @samp{b} stands for
2504 ``backwards'' and the @samp{f} stands for ``forwards''.
2506 Local symbols are not emitted by the current @sc{gnu} C compiler.
2508 There is no restriction on how you can use these labels, but
2509 remember that at any point in the assembly you can refer to at most
2510 10 prior local labels and to at most 10 forward local labels.
2512 Local symbol names are only a notation device. They are immediately
2513 transformed into more conventional symbol names before the assembler
2514 uses them. The symbol names stored in the symbol table, appearing in
2515 error messages and optionally emitted to the object file have these
2520 All local labels begin with @samp{L}. Normally both @code{@value{AS}} and
2521 @code{@value{LD}} forget symbols that start with @samp{L}. These labels are
2522 used for symbols you are never intended to see. If you use the
2523 @samp{-L} option then @code{@value{AS}} retains these symbols in the
2524 object file. If you also instruct @code{@value{LD}} to retain these symbols,
2525 you may use them in debugging.
2528 If the label is written @samp{0:} then the digit is @samp{0}.
2529 If the label is written @samp{1:} then the digit is @samp{1}.
2530 And so on up through @samp{9:}.
2533 This unusual character is included so you do not accidentally invent
2534 a symbol of the same name. The character has ASCII value
2537 @item @emph{ordinal number}
2538 This is a serial number to keep the labels distinct. The first
2539 @samp{0:} gets the number @samp{1}; The 15th @samp{0:} gets the
2540 number @samp{15}; @emph{etc.}. Likewise for the other labels @samp{1:}
2544 For instance, the first @code{1:} is named @code{L1@kbd{C-A}1}, the 44th
2545 @code{3:} is named @code{L3@kbd{C-A}44}.
2548 @section The Special Dot Symbol
2550 @cindex dot (symbol)
2551 @cindex @code{.} (symbol)
2552 @cindex current address
2553 @cindex location counter
2554 The special symbol @samp{.} refers to the current address that
2555 @code{@value{AS}} is assembling into. Thus, the expression @samp{melvin:
2556 .long .} defines @code{melvin} to contain its own address.
2557 Assigning a value to @code{.} is treated the same as a @code{.org}
2558 directive. Thus, the expression @samp{.=.+4} is the same as saying
2559 @ifclear no-space-dir
2568 @node Symbol Attributes
2569 @section Symbol Attributes
2571 @cindex symbol attributes
2572 @cindex attributes, symbol
2573 Every symbol has, as well as its name, the attributes ``Value'' and
2574 ``Type''. Depending on output format, symbols can also have auxiliary
2577 The detailed definitions are in @file{a.out.h}.
2580 If you use a symbol without defining it, @code{@value{AS}} assumes zero for
2581 all these attributes, and probably won't warn you. This makes the
2582 symbol an externally defined symbol, which is generally what you
2586 * Symbol Value:: Value
2587 * Symbol Type:: Type
2590 * a.out Symbols:: Symbol Attributes: @code{a.out}
2594 * a.out Symbols:: Symbol Attributes: @code{a.out}
2597 * a.out Symbols:: Symbol Attributes: @code{a.out}, @code{b.out}
2602 * COFF Symbols:: Symbol Attributes for COFF
2605 * SOM Symbols:: Symbol Attributes for SOM
2612 @cindex value of a symbol
2613 @cindex symbol value
2614 The value of a symbol is (usually) 32 bits. For a symbol which labels a
2615 location in the text, data, bss or absolute sections the value is the
2616 number of addresses from the start of that section to the label.
2617 Naturally for text, data and bss sections the value of a symbol changes
2618 as @code{@value{LD}} changes section base addresses during linking. Absolute
2619 symbols' values do not change during linking: that is why they are
2622 The value of an undefined symbol is treated in a special way. If it is
2623 0 then the symbol is not defined in this assembler source file, and
2624 @code{@value{LD}} tries to determine its value from other files linked into the
2625 same program. You make this kind of symbol simply by mentioning a symbol
2626 name without defining it. A non-zero value represents a @code{.comm}
2627 common declaration. The value is how much common storage to reserve, in
2628 bytes (addresses). The symbol refers to the first address of the
2634 @cindex type of a symbol
2636 The type attribute of a symbol contains relocation (section)
2637 information, any flag settings indicating that a symbol is external, and
2638 (optionally), other information for linkers and debuggers. The exact
2639 format depends on the object-code output format in use.
2644 @c The following avoids a "widow" subsection title. @group would be
2645 @c better if it were available outside examples.
2648 @subsection Symbol Attributes: @code{a.out}, @code{b.out}
2650 @cindex @code{b.out} symbol attributes
2651 @cindex symbol attributes, @code{b.out}
2652 These symbol attributes appear only when @code{@value{AS}} is configured for
2653 one of the Berkeley-descended object output formats---@code{a.out} or
2659 @subsection Symbol Attributes: @code{a.out}
2661 @cindex @code{a.out} symbol attributes
2662 @cindex symbol attributes, @code{a.out}
2668 @subsection Symbol Attributes: @code{a.out}
2670 @cindex @code{a.out} symbol attributes
2671 @cindex symbol attributes, @code{a.out}
2675 * Symbol Desc:: Descriptor
2676 * Symbol Other:: Other
2680 @subsubsection Descriptor
2682 @cindex descriptor, of @code{a.out} symbol
2683 This is an arbitrary 16-bit value. You may establish a symbol's
2684 descriptor value by using a @code{.desc} statement
2685 (@pxref{Desc,,@code{.desc}}). A descriptor value means nothing to
2689 @subsubsection Other
2691 @cindex other attribute, of @code{a.out} symbol
2692 This is an arbitrary 8-bit value. It means nothing to @code{@value{AS}}.
2697 @subsection Symbol Attributes for COFF
2699 @cindex COFF symbol attributes
2700 @cindex symbol attributes, COFF
2702 The COFF format supports a multitude of auxiliary symbol attributes;
2703 like the primary symbol attributes, they are set between @code{.def} and
2704 @code{.endef} directives.
2706 @subsubsection Primary Attributes
2708 @cindex primary attributes, COFF symbols
2709 The symbol name is set with @code{.def}; the value and type,
2710 respectively, with @code{.val} and @code{.type}.
2712 @subsubsection Auxiliary Attributes
2714 @cindex auxiliary attributes, COFF symbols
2715 The @code{@value{AS}} directives @code{.dim}, @code{.line}, @code{.scl},
2716 @code{.size}, and @code{.tag} can generate auxiliary symbol table
2717 information for COFF.
2722 @subsection Symbol Attributes for SOM
2724 @cindex SOM symbol attributes
2725 @cindex symbol attributes, SOM
2727 The SOM format for the HPPA supports a multitude of symbol attributes set with
2728 the @code{.EXPORT} and @code{.IMPORT} directives.
2730 The attributes are described in @cite{HP9000 Series 800 Assembly
2731 Language Reference Manual} (HP 92432-90001) under the @code{IMPORT} and
2732 @code{EXPORT} assembler directive documentation.
2736 @chapter Expressions
2740 @cindex numeric values
2741 An @dfn{expression} specifies an address or numeric value.
2742 Whitespace may precede and/or follow an expression.
2744 The result of an expression must be an absolute number, or else an offset into
2745 a particular section. If an expression is not absolute, and there is not
2746 enough information when @code{@value{AS}} sees the expression to know its
2747 section, a second pass over the source program might be necessary to interpret
2748 the expression---but the second pass is currently not implemented.
2749 @code{@value{AS}} aborts with an error message in this situation.
2752 * Empty Exprs:: Empty Expressions
2753 * Integer Exprs:: Integer Expressions
2757 @section Empty Expressions
2759 @cindex empty expressions
2760 @cindex expressions, empty
2761 An empty expression has no value: it is just whitespace or null.
2762 Wherever an absolute expression is required, you may omit the
2763 expression, and @code{@value{AS}} assumes a value of (absolute) 0. This
2764 is compatible with other assemblers.
2767 @section Integer Expressions
2769 @cindex integer expressions
2770 @cindex expressions, integer
2771 An @dfn{integer expression} is one or more @emph{arguments} delimited
2772 by @emph{operators}.
2775 * Arguments:: Arguments
2776 * Operators:: Operators
2777 * Prefix Ops:: Prefix Operators
2778 * Infix Ops:: Infix Operators
2782 @subsection Arguments
2784 @cindex expression arguments
2785 @cindex arguments in expressions
2786 @cindex operands in expressions
2787 @cindex arithmetic operands
2788 @dfn{Arguments} are symbols, numbers or subexpressions. In other
2789 contexts arguments are sometimes called ``arithmetic operands''. In
2790 this manual, to avoid confusing them with the ``instruction operands'' of
2791 the machine language, we use the term ``argument'' to refer to parts of
2792 expressions only, reserving the word ``operand'' to refer only to machine
2793 instruction operands.
2795 Symbols are evaluated to yield @{@var{section} @var{NNN}@} where
2796 @var{section} is one of text, data, bss, absolute,
2797 or undefined. @var{NNN} is a signed, 2's complement 32 bit
2800 Numbers are usually integers.
2802 A number can be a flonum or bignum. In this case, you are warned
2803 that only the low order 32 bits are used, and @code{@value{AS}} pretends
2804 these 32 bits are an integer. You may write integer-manipulating
2805 instructions that act on exotic constants, compatible with other
2808 @cindex subexpressions
2809 Subexpressions are a left parenthesis @samp{(} followed by an integer
2810 expression, followed by a right parenthesis @samp{)}; or a prefix
2811 operator followed by an argument.
2814 @subsection Operators
2816 @cindex operators, in expressions
2817 @cindex arithmetic functions
2818 @cindex functions, in expressions
2819 @dfn{Operators} are arithmetic functions, like @code{+} or @code{%}. Prefix
2820 operators are followed by an argument. Infix operators appear
2821 between their arguments. Operators may be preceded and/or followed by
2825 @subsection Prefix Operator
2827 @cindex prefix operators
2828 @code{@value{AS}} has the following @dfn{prefix operators}. They each take
2829 one argument, which must be absolute.
2831 @c the tex/end tex stuff surrounding this small table is meant to make
2832 @c it align, on the printed page, with the similar table in the next
2833 @c section (which is inside an enumerate).
2835 \global\advance\leftskip by \itemindent
2840 @dfn{Negation}. Two's complement negation.
2842 @dfn{Complementation}. Bitwise not.
2846 \global\advance\leftskip by -\itemindent
2850 @subsection Infix Operators
2852 @cindex infix operators
2853 @cindex operators, permitted arguments
2854 @dfn{Infix operators} take two arguments, one on either side. Operators
2855 have precedence, but operations with equal precedence are performed left
2856 to right. Apart from @code{+} or @code{-}, both arguments must be
2857 absolute, and the result is absolute.
2860 @cindex operator precedence
2861 @cindex precedence of operators
2868 @dfn{Multiplication}.
2871 @dfn{Division}. Truncation is the same as the C operator @samp{/}
2878 @dfn{Shift Left}. Same as the C operator @samp{<<}.
2882 @dfn{Shift Right}. Same as the C operator @samp{>>}.
2886 Intermediate precedence
2891 @dfn{Bitwise Inclusive Or}.
2897 @dfn{Bitwise Exclusive Or}.
2900 @dfn{Bitwise Or Not}.
2907 @cindex addition, permitted arguments
2908 @cindex plus, permitted arguments
2909 @cindex arguments for addition
2911 @dfn{Addition}. If either argument is absolute, the result has the section of
2912 the other argument. You may not add together arguments from different
2915 @cindex subtraction, permitted arguments
2916 @cindex minus, permitted arguments
2917 @cindex arguments for subtraction
2919 @dfn{Subtraction}. If the right argument is absolute, the
2920 result has the section of the left argument.
2921 If both arguments are in the same section, the result is absolute.
2922 You may not subtract arguments from different sections.
2923 @c FIXME is there still something useful to say about undefined - undefined ?
2927 In short, it's only meaningful to add or subtract the @emph{offsets} in an
2928 address; you can only have a defined section in one of the two arguments.
2931 @chapter Assembler Directives
2933 @cindex directives, machine independent
2934 @cindex pseudo-ops, machine independent
2935 @cindex machine independent directives
2936 All assembler directives have names that begin with a period (@samp{.}).
2937 The rest of the name is letters, usually in lower case.
2939 This chapter discusses directives that are available regardless of the
2940 target machine configuration for the @sc{gnu} assembler.
2942 Some machine configurations provide additional directives.
2943 @xref{Machine Dependencies}.
2946 @ifset machine-directives
2947 @xref{Machine Dependencies} for additional directives.
2952 * Abort:: @code{.abort}
2954 * ABORT:: @code{.ABORT}
2957 * Align:: @code{.align @var{abs-expr} , @var{abs-expr}}
2958 * App-File:: @code{.app-file @var{string}}
2959 * Ascii:: @code{.ascii "@var{string}"}@dots{}
2960 * Asciz:: @code{.asciz "@var{string}"}@dots{}
2961 * Balign:: @code{.balign @var{abs-expr} , @var{abs-expr}}
2962 * Byte:: @code{.byte @var{expressions}}
2963 * Comm:: @code{.comm @var{symbol} , @var{length} }
2964 * Data:: @code{.data @var{subsection}}
2966 * Def:: @code{.def @var{name}}
2969 * Desc:: @code{.desc @var{symbol}, @var{abs-expression}}
2975 * Double:: @code{.double @var{flonums}}
2976 * Eject:: @code{.eject}
2977 * Else:: @code{.else}
2979 * Endef:: @code{.endef}
2982 * Endif:: @code{.endif}
2983 * Equ:: @code{.equ @var{symbol}, @var{expression}}
2984 * Equiv:: @code{.equiv @var{symbol}, @var{expression}}
2986 * Extern:: @code{.extern}
2987 @ifclear no-file-dir
2988 * File:: @code{.file @var{string}}
2991 * Fill:: @code{.fill @var{repeat} , @var{size} , @var{value}}
2992 * Float:: @code{.float @var{flonums}}
2993 * Global:: @code{.global @var{symbol}}, @code{.globl @var{symbol}}
2994 * hword:: @code{.hword @var{expressions}}
2995 * Ident:: @code{.ident}
2996 * If:: @code{.if @var{absolute expression}}
2997 * Include:: @code{.include "@var{file}"}
2998 * Int:: @code{.int @var{expressions}}
2999 * Irp:: @code{.irp @var{symbol},@var{values}}@dots{}
3000 * Irpc:: @code{.irpc @var{symbol},@var{values}}@dots{}
3001 * Lcomm:: @code{.lcomm @var{symbol} , @var{length}}
3002 * Lflags:: @code{.lflags}
3003 @ifclear no-line-dir
3004 * Line:: @code{.line @var{line-number}}
3007 * Ln:: @code{.ln @var{line-number}}
3008 * Linkonce:: @code{.linkonce [@var{type}]}
3009 * List:: @code{.list}
3010 * Long:: @code{.long @var{expressions}}
3012 * Lsym:: @code{.lsym @var{symbol}, @var{expression}}
3015 * Macro:: @code{.macro @var{name} @var{args}}@dots{}
3016 * MRI:: @code{.mri @var{val}}
3018 * Nolist:: @code{.nolist}
3019 * Octa:: @code{.octa @var{bignums}}
3020 * Org:: @code{.org @var{new-lc} , @var{fill}}
3021 * P2align:: @code{.p2align @var{abs-expr} , @var{abs-expr}}
3022 * Psize:: @code{.psize @var{lines}, @var{columns}}
3023 * Quad:: @code{.quad @var{bignums}}
3024 * Rept:: @code{.rept @var{count}}
3025 * Sbttl:: @code{.sbttl "@var{subheading}"}
3027 * Scl:: @code{.scl @var{class}}
3028 * Section:: @code{.section @var{name}, @var{subsection}}
3031 * Set:: @code{.set @var{symbol}, @var{expression}}
3032 * Short:: @code{.short @var{expressions}}
3033 * Single:: @code{.single @var{flonums}}
3035 * Size:: @code{.size}
3038 * Skip:: @code{.skip @var{size} , @var{fill}}
3039 * Sleb128:: @code{.sleb128 @var{expressions}}
3040 * Space:: @code{.space @var{size} , @var{fill}}
3042 * Stab:: @code{.stabd, .stabn, .stabs}
3045 * String:: @code{.string "@var{str}"}
3047 * Symver:: @code{.symver @var{name},@var{name2@@nodename}}
3050 * Tag:: @code{.tag @var{structname}}
3053 * Text:: @code{.text @var{subsection}}
3054 * Title:: @code{.title "@var{heading}"}
3056 * Type:: @code{.type @var{int}}
3057 * Val:: @code{.val @var{addr}}
3060 * Uleb128:: @code{.uleb128 @var{expressions}}
3061 * Word:: @code{.word @var{expressions}}
3062 * Deprecated:: Deprecated Directives
3066 @section @code{.abort}
3068 @cindex @code{abort} directive
3069 @cindex stopping the assembly
3070 This directive stops the assembly immediately. It is for
3071 compatibility with other assemblers. The original idea was that the
3072 assembly language source would be piped into the assembler. If the sender
3073 of the source quit, it could use this directive tells @code{@value{AS}} to
3074 quit also. One day @code{.abort} will not be supported.
3078 @section @code{.ABORT}
3080 @cindex @code{ABORT} directive
3081 When producing COFF output, @code{@value{AS}} accepts this directive as a
3082 synonym for @samp{.abort}.
3085 When producing @code{b.out} output, @code{@value{AS}} accepts this directive,
3091 @section @code{.align @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
3093 @cindex padding the location counter
3094 @cindex @code{align} directive
3095 Pad the location counter (in the current subsection) to a particular storage
3096 boundary. The first expression (which must be absolute) is the alignment
3097 required, as described below.
3099 The second expression (also absolute) gives the fill value to be stored in the
3100 padding bytes. It (and the comma) may be omitted. If it is omitted, the
3101 padding bytes are normally zero. However, on some systems, if the section is
3102 marked as containing code and the fill value is omitted, the space is filled
3103 with no-op instructions.
3105 The third expression is also absolute, and is also optional. If it is present,
3106 it is the maximum number of bytes that should be skipped by this alignment
3107 directive. If doing the alignment would require skipping more bytes than the
3108 specified maximum, then the alignment is not done at all. You can omit the
3109 fill value (the second argument) entirely by simply using two commas after the
3110 required alignment; this can be useful if you want the alignment to be filled
3111 with no-op instructions when appropriate.
3113 The way the required alignment is specified varies from system to system.
3114 For the a29k, hppa, m68k, m88k, w65, sparc, and Hitachi SH, and i386 using ELF
3116 the first expression is the
3117 alignment request in bytes. For example @samp{.align 8} advances
3118 the location counter until it is a multiple of 8. If the location counter
3119 is already a multiple of 8, no change is needed.
3121 For other systems, including the i386 using a.out format, it is the
3122 number of low-order zero bits the location counter must have after
3123 advancement. For example @samp{.align 3} advances the location
3124 counter until it a multiple of 8. If the location counter is already a
3125 multiple of 8, no change is needed.
3127 This inconsistency is due to the different behaviors of the various
3128 native assemblers for these systems which GAS must emulate.
3129 GAS also provides @code{.balign} and @code{.p2align} directives,
3130 described later, which have a consistent behavior across all
3131 architectures (but are specific to GAS).
3134 @section @code{.app-file @var{string}}
3136 @cindex logical file name
3137 @cindex file name, logical
3138 @cindex @code{app-file} directive
3140 @ifclear no-file-dir
3141 (which may also be spelled @samp{.file})
3143 tells @code{@value{AS}} that we are about to start a new
3144 logical file. @var{string} is the new file name. In general, the
3145 filename is recognized whether or not it is surrounded by quotes @samp{"};
3146 but if you wish to specify an empty file name is permitted,
3147 you must give the quotes--@code{""}. This statement may go away in
3148 future: it is only recognized to be compatible with old @code{@value{AS}}
3152 @section @code{.ascii "@var{string}"}@dots{}
3154 @cindex @code{ascii} directive
3155 @cindex string literals
3156 @code{.ascii} expects zero or more string literals (@pxref{Strings})
3157 separated by commas. It assembles each string (with no automatic
3158 trailing zero byte) into consecutive addresses.
3161 @section @code{.asciz "@var{string}"}@dots{}
3163 @cindex @code{asciz} directive
3164 @cindex zero-terminated strings
3165 @cindex null-terminated strings
3166 @code{.asciz} is just like @code{.ascii}, but each string is followed by
3167 a zero byte. The ``z'' in @samp{.asciz} stands for ``zero''.
3170 @section @code{.balign[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
3172 @cindex padding the location counter given number of bytes
3173 @cindex @code{balign} directive
3174 Pad the location counter (in the current subsection) to a particular
3175 storage boundary. The first expression (which must be absolute) is the
3176 alignment request in bytes. For example @samp{.balign 8} advances
3177 the location counter until it is a multiple of 8. If the location counter
3178 is already a multiple of 8, no change is needed.
3180 The second expression (also absolute) gives the fill value to be stored in the
3181 padding bytes. It (and the comma) may be omitted. If it is omitted, the
3182 padding bytes are normally zero. However, on some systems, if the section is
3183 marked as containing code and the fill value is omitted, the space is filled
3184 with no-op instructions.
3186 The third expression is also absolute, and is also optional. If it is present,
3187 it is the maximum number of bytes that should be skipped by this alignment
3188 directive. If doing the alignment would require skipping more bytes than the
3189 specified maximum, then the alignment is not done at all. You can omit the
3190 fill value (the second argument) entirely by simply using two commas after the
3191 required alignment; this can be useful if you want the alignment to be filled
3192 with no-op instructions when appropriate.
3194 @cindex @code{balignw} directive
3195 @cindex @code{balignl} directive
3196 The @code{.balignw} and @code{.balignl} directives are variants of the
3197 @code{.balign} directive. The @code{.balignw} directive treats the fill
3198 pattern as a two byte word value. The @code{.balignl} directives treats the
3199 fill pattern as a four byte longword value. For example, @code{.balignw
3200 4,0x368d} will align to a multiple of 4. If it skips two bytes, they will be
3201 filled in with the value 0x368d (the exact placement of the bytes depends upon
3202 the endianness of the processor). If it skips 1 or 3 bytes, the fill value is
3206 @section @code{.byte @var{expressions}}
3208 @cindex @code{byte} directive
3209 @cindex integers, one byte
3210 @code{.byte} expects zero or more expressions, separated by commas.
3211 Each expression is assembled into the next byte.
3214 @section @code{.comm @var{symbol} , @var{length} }
3216 @cindex @code{comm} directive
3217 @cindex symbol, common
3218 @code{.comm} declares a common symbol named @var{symbol}. When linking, a
3219 common symbol in one object file may be merged with a defined or common symbol
3220 of the same name in another object file. If @code{@value{LD}} does not see a
3221 definition for the symbol--just one or more common symbols--then it will
3222 allocate @var{length} bytes of uninitialized memory. @var{length} must be an
3223 absolute expression. If @code{@value{LD}} sees multiple common symbols with
3224 the same name, and they do not all have the same size, it will allocate space
3225 using the largest size.
3228 When using ELF, the @code{.comm} directive takes an optional third argument.
3229 This is the desired alignment of the symbol, specified as a byte boundary (for
3230 example, an alignment of 16 means that the least significant 4 bits of the
3231 address should be zero). The alignment must be an absolute expression, and it
3232 must be a power of two. If @code{@value{LD}} allocates uninitialized memory
3233 for the common symbol, it will use the alignment when placing the symbol. If
3234 no alignment is specified, @code{@value{AS}} will set the alignment to the
3235 largest power of two less than or equal to the size of the symbol, up to a
3240 The syntax for @code{.comm} differs slightly on the HPPA. The syntax is
3241 @samp{@var{symbol} .comm, @var{length}}; @var{symbol} is optional.
3245 @section @code{.data @var{subsection}}
3247 @cindex @code{data} directive
3248 @code{.data} tells @code{@value{AS}} to assemble the following statements onto the
3249 end of the data subsection numbered @var{subsection} (which is an
3250 absolute expression). If @var{subsection} is omitted, it defaults
3255 @section @code{.def @var{name}}
3257 @cindex @code{def} directive
3258 @cindex COFF symbols, debugging
3259 @cindex debugging COFF symbols
3260 Begin defining debugging information for a symbol @var{name}; the
3261 definition extends until the @code{.endef} directive is encountered.
3264 This directive is only observed when @code{@value{AS}} is configured for COFF
3265 format output; when producing @code{b.out}, @samp{.def} is recognized,
3272 @section @code{.desc @var{symbol}, @var{abs-expression}}
3274 @cindex @code{desc} directive
3275 @cindex COFF symbol descriptor
3276 @cindex symbol descriptor, COFF
3277 This directive sets the descriptor of the symbol (@pxref{Symbol Attributes})
3278 to the low 16 bits of an absolute expression.
3281 The @samp{.desc} directive is not available when @code{@value{AS}} is
3282 configured for COFF output; it is only for @code{a.out} or @code{b.out}
3283 object format. For the sake of compatibility, @code{@value{AS}} accepts
3284 it, but produces no output, when configured for COFF.
3290 @section @code{.dim}
3292 @cindex @code{dim} directive
3293 @cindex COFF auxiliary symbol information
3294 @cindex auxiliary symbol information, COFF
3295 This directive is generated by compilers to include auxiliary debugging
3296 information in the symbol table. It is only permitted inside
3297 @code{.def}/@code{.endef} pairs.
3300 @samp{.dim} is only meaningful when generating COFF format output; when
3301 @code{@value{AS}} is generating @code{b.out}, it accepts this directive but
3307 @section @code{.double @var{flonums}}
3309 @cindex @code{double} directive
3310 @cindex floating point numbers (double)
3311 @code{.double} expects zero or more flonums, separated by commas. It
3312 assembles floating point numbers.
3314 The exact kind of floating point numbers emitted depends on how
3315 @code{@value{AS}} is configured. @xref{Machine Dependencies}.
3319 On the @value{TARGET} family @samp{.double} emits 64-bit floating-point numbers
3320 in @sc{ieee} format.
3325 @section @code{.eject}
3327 @cindex @code{eject} directive
3328 @cindex new page, in listings
3329 @cindex page, in listings
3330 @cindex listing control: new page
3331 Force a page break at this point, when generating assembly listings.
3334 @section @code{.else}
3336 @cindex @code{else} directive
3337 @code{.else} is part of the @code{@value{AS}} support for conditional
3338 assembly; @pxref{If,,@code{.if}}. It marks the beginning of a section
3339 of code to be assembled if the condition for the preceding @code{.if}
3343 @node End, Endef, Else, Pseudo Ops
3344 @section @code{.end}
3346 @cindex @code{end} directive
3347 This doesn't do anything---but isn't an s_ignore, so I suspect it's
3348 meant to do something eventually (which is why it isn't documented here
3349 as "for compatibility with blah").
3354 @section @code{.endef}
3356 @cindex @code{endef} directive
3357 This directive flags the end of a symbol definition begun with
3361 @samp{.endef} is only meaningful when generating COFF format output; if
3362 @code{@value{AS}} is configured to generate @code{b.out}, it accepts this
3363 directive but ignores it.
3368 @section @code{.endif}
3370 @cindex @code{endif} directive
3371 @code{.endif} is part of the @code{@value{AS}} support for conditional assembly;
3372 it marks the end of a block of code that is only assembled
3373 conditionally. @xref{If,,@code{.if}}.
3376 @section @code{.equ @var{symbol}, @var{expression}}
3378 @cindex @code{equ} directive
3379 @cindex assigning values to symbols
3380 @cindex symbols, assigning values to
3381 This directive sets the value of @var{symbol} to @var{expression}.
3382 It is synonymous with @samp{.set}; @pxref{Set,,@code{.set}}.
3385 The syntax for @code{equ} on the HPPA is
3386 @samp{@var{symbol} .equ @var{expression}}.
3390 @section @code{.equiv @var{symbol}, @var{expression}}
3391 @cindex @code{equiv} directive
3392 The @code{.equiv} directive is like @code{.equ} and @code{.set}, except that
3393 the assembler will signal an error if @var{symbol} is already defined.
3395 Except for the contents of the error message, this is roughly equivalent to
3404 @section @code{.err}
3405 @cindex @code{err} directive
3406 If @code{@value{AS}} assembles a @code{.err} directive, it will print an error
3407 message and, unless the @code{-Z} option was used, it will not generate an
3408 object file. This can be used to signal error an conditionally compiled code.
3411 @section @code{.extern}
3413 @cindex @code{extern} directive
3414 @code{.extern} is accepted in the source program---for compatibility
3415 with other assemblers---but it is ignored. @code{@value{AS}} treats
3416 all undefined symbols as external.
3418 @ifclear no-file-dir
3420 @section @code{.file @var{string}}
3422 @cindex @code{file} directive
3423 @cindex logical file name
3424 @cindex file name, logical
3425 @code{.file} (which may also be spelled @samp{.app-file}) tells
3426 @code{@value{AS}} that we are about to start a new logical file.
3427 @var{string} is the new file name. In general, the filename is
3428 recognized whether or not it is surrounded by quotes @samp{"}; but if
3429 you wish to specify an empty file name, you must give the
3430 quotes--@code{""}. This statement may go away in future: it is only
3431 recognized to be compatible with old @code{@value{AS}} programs.
3433 In some configurations of @code{@value{AS}}, @code{.file} has already been
3434 removed to avoid conflicts with other assemblers. @xref{Machine Dependencies}.
3439 @section @code{.fill @var{repeat} , @var{size} , @var{value}}
3441 @cindex @code{fill} directive
3442 @cindex writing patterns in memory
3443 @cindex patterns, writing in memory
3444 @var{result}, @var{size} and @var{value} are absolute expressions.
3445 This emits @var{repeat} copies of @var{size} bytes. @var{Repeat}
3446 may be zero or more. @var{Size} may be zero or more, but if it is
3447 more than 8, then it is deemed to have the value 8, compatible with
3448 other people's assemblers. The contents of each @var{repeat} bytes
3449 is taken from an 8-byte number. The highest order 4 bytes are
3450 zero. The lowest order 4 bytes are @var{value} rendered in the
3451 byte-order of an integer on the computer @code{@value{AS}} is assembling for.
3452 Each @var{size} bytes in a repetition is taken from the lowest order
3453 @var{size} bytes of this number. Again, this bizarre behavior is
3454 compatible with other people's assemblers.
3456 @var{size} and @var{value} are optional.
3457 If the second comma and @var{value} are absent, @var{value} is
3458 assumed zero. If the first comma and following tokens are absent,
3459 @var{size} is assumed to be 1.
3462 @section @code{.float @var{flonums}}
3464 @cindex floating point numbers (single)
3465 @cindex @code{float} directive
3466 This directive assembles zero or more flonums, separated by commas. It
3467 has the same effect as @code{.single}.
3469 The exact kind of floating point numbers emitted depends on how
3470 @code{@value{AS}} is configured.
3471 @xref{Machine Dependencies}.
3475 On the @value{TARGET} family, @code{.float} emits 32-bit floating point numbers
3476 in @sc{ieee} format.
3481 @section @code{.global @var{symbol}}, @code{.globl @var{symbol}}
3483 @cindex @code{global} directive
3484 @cindex symbol, making visible to linker
3485 @code{.global} makes the symbol visible to @code{@value{LD}}. If you define
3486 @var{symbol} in your partial program, its value is made available to
3487 other partial programs that are linked with it. Otherwise,
3488 @var{symbol} takes its attributes from a symbol of the same name
3489 from another file linked into the same program.
3491 Both spellings (@samp{.globl} and @samp{.global}) are accepted, for
3492 compatibility with other assemblers.
3495 On the HPPA, @code{.global} is not always enough to make it accessible to other
3496 partial programs. You may need the HPPA-only @code{.EXPORT} directive as well.
3497 @xref{HPPA Directives,, HPPA Assembler Directives}.
3501 @section @code{.hword @var{expressions}}
3503 @cindex @code{hword} directive
3504 @cindex integers, 16-bit
3505 @cindex numbers, 16-bit
3506 @cindex sixteen bit integers
3507 This expects zero or more @var{expressions}, and emits
3508 a 16 bit number for each.
3511 This directive is a synonym for @samp{.short}; depending on the target
3512 architecture, it may also be a synonym for @samp{.word}.
3516 This directive is a synonym for @samp{.short}.
3519 This directive is a synonym for both @samp{.short} and @samp{.word}.
3524 @section @code{.ident}
3526 @cindex @code{ident} directive
3527 This directive is used by some assemblers to place tags in object files.
3528 @code{@value{AS}} simply accepts the directive for source-file
3529 compatibility with such assemblers, but does not actually emit anything
3533 @section @code{.if @var{absolute expression}}
3535 @cindex conditional assembly
3536 @cindex @code{if} directive
3537 @code{.if} marks the beginning of a section of code which is only
3538 considered part of the source program being assembled if the argument
3539 (which must be an @var{absolute expression}) is non-zero. The end of
3540 the conditional section of code must be marked by @code{.endif}
3541 (@pxref{Endif,,@code{.endif}}); optionally, you may include code for the
3542 alternative condition, flagged by @code{.else} (@pxref{Else,,@code{.else}}).
3544 The following variants of @code{.if} are also supported:
3546 @cindex @code{ifdef} directive
3547 @item .ifdef @var{symbol}
3548 Assembles the following section of code if the specified @var{symbol}
3552 @cindex @code{ifeqs} directive
3554 Not yet implemented.
3557 @cindex @code{ifndef} directive
3558 @cindex @code{ifnotdef} directive
3559 @item .ifndef @var{symbol}
3560 @itemx .ifnotdef @var{symbol}
3561 Assembles the following section of code if the specified @var{symbol}
3562 has not been defined. Both spelling variants are equivalent.
3566 Not yet implemented.
3571 @section @code{.include "@var{file}"}
3573 @cindex @code{include} directive
3574 @cindex supporting files, including
3575 @cindex files, including
3576 This directive provides a way to include supporting files at specified
3577 points in your source program. The code from @var{file} is assembled as
3578 if it followed the point of the @code{.include}; when the end of the
3579 included file is reached, assembly of the original file continues. You
3580 can control the search paths used with the @samp{-I} command-line option
3581 (@pxref{Invoking,,Command-Line Options}). Quotation marks are required
3585 @section @code{.int @var{expressions}}
3587 @cindex @code{int} directive
3588 @cindex integers, 32-bit
3589 Expect zero or more @var{expressions}, of any section, separated by commas.
3590 For each expression, emit a number that, at run time, is the value of that
3591 expression. The byte order and bit size of the number depends on what kind
3592 of target the assembly is for.
3596 On the H8/500 and most forms of the H8/300, @code{.int} emits 16-bit
3597 integers. On the H8/300H and the Hitachi SH, however, @code{.int} emits
3603 @section @code{.irp @var{symbol},@var{values}}@dots{}
3605 @cindex @code{irp} directive
3606 Evaluate a sequence of statements assigning different values to @var{symbol}.
3607 The sequence of statements starts at the @code{.irp} directive, and is
3608 terminated by an @code{.endr} directive. For each @var{value}, @var{symbol} is
3609 set to @var{value}, and the sequence of statements is assembled. If no
3610 @var{value} is listed, the sequence of statements is assembled once, with
3611 @var{symbol} set to the null string. To refer to @var{symbol} within the
3612 sequence of statements, use @var{\symbol}.
3614 For example, assembling
3622 is equivalent to assembling
3631 @section @code{.irpc @var{symbol},@var{values}}@dots{}
3633 @cindex @code{irpc} directive
3634 Evaluate a sequence of statements assigning different values to @var{symbol}.
3635 The sequence of statements starts at the @code{.irpc} directive, and is
3636 terminated by an @code{.endr} directive. For each character in @var{value},
3637 @var{symbol} is set to the character, and the sequence of statements is
3638 assembled. If no @var{value} is listed, the sequence of statements is
3639 assembled once, with @var{symbol} set to the null string. To refer to
3640 @var{symbol} within the sequence of statements, use @var{\symbol}.
3642 For example, assembling
3650 is equivalent to assembling
3659 @section @code{.lcomm @var{symbol} , @var{length}}
3661 @cindex @code{lcomm} directive
3662 @cindex local common symbols
3663 @cindex symbols, local common
3664 Reserve @var{length} (an absolute expression) bytes for a local common
3665 denoted by @var{symbol}. The section and value of @var{symbol} are
3666 those of the new local common. The addresses are allocated in the bss
3667 section, so that at run-time the bytes start off zeroed. @var{Symbol}
3668 is not declared global (@pxref{Global,,@code{.global}}), so is normally
3669 not visible to @code{@value{LD}}.
3672 Some targets permit a third argument to be used with @code{.lcomm}. This
3673 argument specifies the desired alignment of the symbol in the bss section.
3677 The syntax for @code{.lcomm} differs slightly on the HPPA. The syntax is
3678 @samp{@var{symbol} .lcomm, @var{length}}; @var{symbol} is optional.
3682 @section @code{.lflags}
3684 @cindex @code{lflags} directive (ignored)
3685 @code{@value{AS}} accepts this directive, for compatibility with other
3686 assemblers, but ignores it.
3688 @ifclear no-line-dir
3690 @section @code{.line @var{line-number}}
3692 @cindex @code{line} directive
3696 @section @code{.ln @var{line-number}}
3698 @cindex @code{ln} directive
3700 @cindex logical line number
3702 Change the logical line number. @var{line-number} must be an absolute
3703 expression. The next line has that logical line number. Therefore any other
3704 statements on the current line (after a statement separator character) are
3705 reported as on logical line number @var{line-number} @minus{} 1. One day
3706 @code{@value{AS}} will no longer support this directive: it is recognized only
3707 for compatibility with existing assembler programs.
3711 @emph{Warning:} In the AMD29K configuration of @value{AS}, this command is
3712 not available; use the synonym @code{.ln} in that context.
3717 @ifclear no-line-dir
3718 Even though this is a directive associated with the @code{a.out} or
3719 @code{b.out} object-code formats, @code{@value{AS}} still recognizes it
3720 when producing COFF output, and treats @samp{.line} as though it
3721 were the COFF @samp{.ln} @emph{if} it is found outside a
3722 @code{.def}/@code{.endef} pair.
3724 Inside a @code{.def}, @samp{.line} is, instead, one of the directives
3725 used by compilers to generate auxiliary symbol information for
3730 @section @code{.linkonce [@var{type}]}
3732 @cindex @code{linkonce} directive
3733 @cindex common sections
3734 Mark the current section so that the linker only includes a single copy of it.
3735 This may be used to include the same section in several different object files,
3736 but ensure that the linker will only include it once in the final output file.
3737 The @code{.linkonce} pseudo-op must be used for each instance of the section.
3738 Duplicate sections are detected based on the section name, so it should be
3741 This directive is only supported by a few object file formats; as of this
3742 writing, the only object file format which supports it is the Portable
3743 Executable format used on Windows NT.
3745 The @var{type} argument is optional. If specified, it must be one of the
3746 following strings. For example:
3750 Not all types may be supported on all object file formats.
3754 Silently discard duplicate sections. This is the default.
3757 Warn if there are duplicate sections, but still keep only one copy.
3760 Warn if any of the duplicates have different sizes.
3763 Warn if any of the duplicates do not have exactly the same contents.
3767 @section @code{.ln @var{line-number}}
3769 @cindex @code{ln} directive
3770 @ifclear no-line-dir
3771 @samp{.ln} is a synonym for @samp{.line}.
3774 Tell @code{@value{AS}} to change the logical line number. @var{line-number}
3775 must be an absolute expression. The next line has that logical
3776 line number, so any other statements on the current line (after a
3777 statement separator character @code{;}) are reported as on logical
3778 line number @var{line-number} @minus{} 1.
3781 This directive is accepted, but ignored, when @code{@value{AS}} is
3782 configured for @code{b.out}; its effect is only associated with COFF
3788 @section @code{.mri @var{val}}
3790 @cindex @code{mri} directive
3791 @cindex MRI mode, temporarily
3792 If @var{val} is non-zero, this tells @code{@value{AS}} to enter MRI mode. If
3793 @var{val} is zero, this tells @code{@value{AS}} to exit MRI mode. This change
3794 affects code assembled until the next @code{.mri} directive, or until the end
3795 of the file. @xref{M, MRI mode, MRI mode}.
3798 @section @code{.list}
3800 @cindex @code{list} directive
3801 @cindex listing control, turning on
3802 Control (in conjunction with the @code{.nolist} directive) whether or
3803 not assembly listings are generated. These two directives maintain an
3804 internal counter (which is zero initially). @code{.list} increments the
3805 counter, and @code{.nolist} decrements it. Assembly listings are
3806 generated whenever the counter is greater than zero.
3808 By default, listings are disabled. When you enable them (with the
3809 @samp{-a} command line option; @pxref{Invoking,,Command-Line Options}),
3810 the initial value of the listing counter is one.
3813 @section @code{.long @var{expressions}}
3815 @cindex @code{long} directive
3816 @code{.long} is the same as @samp{.int}, @pxref{Int,,@code{.int}}.
3819 @c no one seems to know what this is for or whether this description is
3820 @c what it really ought to do
3822 @section @code{.lsym @var{symbol}, @var{expression}}
3824 @cindex @code{lsym} directive
3825 @cindex symbol, not referenced in assembly
3826 @code{.lsym} creates a new symbol named @var{symbol}, but does not put it in
3827 the hash table, ensuring it cannot be referenced by name during the
3828 rest of the assembly. This sets the attributes of the symbol to be
3829 the same as the expression value:
3831 @var{other} = @var{descriptor} = 0
3832 @var{type} = @r{(section of @var{expression})}
3833 @var{value} = @var{expression}
3836 The new symbol is not flagged as external.
3840 @section @code{.macro}
3843 The commands @code{.macro} and @code{.endm} allow you to define macros that
3844 generate assembly output. For example, this definition specifies a macro
3845 @code{sum} that puts a sequence of numbers into memory:
3848 .macro sum from=0, to=5
3857 With that definition, @samp{SUM 0,5} is equivalent to this assembly input:
3869 @item .macro @var{macname}
3870 @itemx .macro @var{macname} @var{macargs} @dots{}
3871 @cindex @code{macro} directive
3872 Begin the definition of a macro called @var{macname}. If your macro
3873 definition requires arguments, specify their names after the macro name,
3874 separated by commas or spaces. You can supply a default value for any
3875 macro argument by following the name with @samp{=@var{deflt}}. For
3876 example, these are all valid @code{.macro} statements:
3880 Begin the definition of a macro called @code{comm}, which takes no
3883 @item .macro plus1 p, p1
3884 @itemx .macro plus1 p p1
3885 Either statement begins the definition of a macro called @code{plus1},
3886 which takes two arguments; within the macro definition, write
3887 @samp{\p} or @samp{\p1} to evaluate the arguments.
3889 @item .macro reserve_str p1=0 p2
3890 Begin the definition of a macro called @code{reserve_str}, with two
3891 arguments. The first argument has a default value, but not the second.
3892 After the definition is complete, you can call the macro either as
3893 @samp{reserve_str @var{a},@var{b}} (with @samp{\p1} evaluating to
3894 @var{a} and @samp{\p2} evaluating to @var{b}), or as @samp{reserve_str
3895 ,@var{b}} (with @samp{\p1} evaluating as the default, in this case
3896 @samp{0}, and @samp{\p2} evaluating to @var{b}).
3899 When you call a macro, you can specify the argument values either by
3900 position, or by keyword. For example, @samp{sum 9,17} is equivalent to
3901 @samp{sum to=17, from=9}.
3904 @cindex @code{endm} directive
3905 Mark the end of a macro definition.
3908 @cindex @code{exitm} directive
3909 Exit early from the current macro definition.
3911 @cindex number of macros executed
3912 @cindex macros, count executed
3914 @code{@value{AS}} maintains a counter of how many macros it has
3915 executed in this pseudo-variable; you can copy that number to your
3916 output with @samp{\@@}, but @emph{only within a macro definition}.
3919 @item LOCAL @var{name} [ , @dots{} ]
3920 @emph{Warning: @code{LOCAL} is only available if you select ``alternate
3921 macro syntax'' with @samp{-a} or @samp{--alternate}.} @xref{Alternate,,
3922 Alternate macro syntax}.
3924 Generate a string replacement for each of the @var{name} arguments, and
3925 replace any instances of @var{name} in each macro expansion. The
3926 replacement string is unique in the assembly, and different for each
3927 separate macro expansion. @code{LOCAL} allows you to write macros that
3928 define symbols, without fear of conflict between separate macro expansions.
3933 @section @code{.nolist}
3935 @cindex @code{nolist} directive
3936 @cindex listing control, turning off
3937 Control (in conjunction with the @code{.list} directive) whether or
3938 not assembly listings are generated. These two directives maintain an
3939 internal counter (which is zero initially). @code{.list} increments the
3940 counter, and @code{.nolist} decrements it. Assembly listings are
3941 generated whenever the counter is greater than zero.
3944 @section @code{.octa @var{bignums}}
3946 @c FIXME: double size emitted for "octa" on i960, others? Or warn?
3947 @cindex @code{octa} directive
3948 @cindex integer, 16-byte
3949 @cindex sixteen byte integer
3950 This directive expects zero or more bignums, separated by commas. For each
3951 bignum, it emits a 16-byte integer.
3953 The term ``octa'' comes from contexts in which a ``word'' is two bytes;
3954 hence @emph{octa}-word for 16 bytes.
3957 @section @code{.org @var{new-lc} , @var{fill}}
3959 @cindex @code{org} directive
3960 @cindex location counter, advancing
3961 @cindex advancing location counter
3962 @cindex current address, advancing
3963 Advance the location counter of the current section to
3964 @var{new-lc}. @var{new-lc} is either an absolute expression or an
3965 expression with the same section as the current subsection. That is,
3966 you can't use @code{.org} to cross sections: if @var{new-lc} has the
3967 wrong section, the @code{.org} directive is ignored. To be compatible
3968 with former assemblers, if the section of @var{new-lc} is absolute,
3969 @code{@value{AS}} issues a warning, then pretends the section of @var{new-lc}
3970 is the same as the current subsection.
3972 @code{.org} may only increase the location counter, or leave it
3973 unchanged; you cannot use @code{.org} to move the location counter
3976 @c double negative used below "not undefined" because this is a specific
3977 @c reference to "undefined" (as SEG_UNKNOWN is called in this manual)
3978 @c section. doc@cygnus.com 18feb91
3979 Because @code{@value{AS}} tries to assemble programs in one pass, @var{new-lc}
3980 may not be undefined. If you really detest this restriction we eagerly await
3981 a chance to share your improved assembler.
3983 Beware that the origin is relative to the start of the section, not
3984 to the start of the subsection. This is compatible with other
3985 people's assemblers.
3987 When the location counter (of the current subsection) is advanced, the
3988 intervening bytes are filled with @var{fill} which should be an
3989 absolute expression. If the comma and @var{fill} are omitted,
3990 @var{fill} defaults to zero.
3993 @section @code{.p2align[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
3995 @cindex padding the location counter given a power of two
3996 @cindex @code{p2align} directive
3997 Pad the location counter (in the current subsection) to a particular
3998 storage boundary. The first expression (which must be absolute) is the
3999 number of low-order zero bits the location counter must have after
4000 advancement. For example @samp{.p2align 3} advances the location
4001 counter until it a multiple of 8. If the location counter is already a
4002 multiple of 8, no change is needed.
4004 The second expression (also absolute) gives the fill value to be stored in the
4005 padding bytes. It (and the comma) may be omitted. If it is omitted, the
4006 padding bytes are normally zero. However, on some systems, if the section is
4007 marked as containing code and the fill value is omitted, the space is filled
4008 with no-op instructions.
4010 The third expression is also absolute, and is also optional. If it is present,
4011 it is the maximum number of bytes that should be skipped by this alignment
4012 directive. If doing the alignment would require skipping more bytes than the
4013 specified maximum, then the alignment is not done at all. You can omit the
4014 fill value (the second argument) entirely by simply using two commas after the
4015 required alignment; this can be useful if you want the alignment to be filled
4016 with no-op instructions when appropriate.
4018 @cindex @code{p2alignw} directive
4019 @cindex @code{p2alignl} directive
4020 The @code{.p2alignw} and @code{.p2alignl} directives are variants of the
4021 @code{.p2align} directive. The @code{.p2alignw} directive treats the fill
4022 pattern as a two byte word value. The @code{.p2alignl} directives treats the
4023 fill pattern as a four byte longword value. For example, @code{.p2alignw
4024 2,0x368d} will align to a multiple of 4. If it skips two bytes, they will be
4025 filled in with the value 0x368d (the exact placement of the bytes depends upon
4026 the endianness of the processor). If it skips 1 or 3 bytes, the fill value is
4030 @section @code{.psize @var{lines} , @var{columns}}
4032 @cindex @code{psize} directive
4033 @cindex listing control: paper size
4034 @cindex paper size, for listings
4035 Use this directive to declare the number of lines---and, optionally, the
4036 number of columns---to use for each page, when generating listings.
4038 If you do not use @code{.psize}, listings use a default line-count
4039 of 60. You may omit the comma and @var{columns} specification; the
4040 default width is 200 columns.
4042 @code{@value{AS}} generates formfeeds whenever the specified number of
4043 lines is exceeded (or whenever you explicitly request one, using
4046 If you specify @var{lines} as @code{0}, no formfeeds are generated save
4047 those explicitly specified with @code{.eject}.
4050 @section @code{.quad @var{bignums}}
4052 @cindex @code{quad} directive
4053 @code{.quad} expects zero or more bignums, separated by commas. For
4054 each bignum, it emits
4056 an 8-byte integer. If the bignum won't fit in 8 bytes, it prints a
4057 warning message; and just takes the lowest order 8 bytes of the bignum.
4058 @cindex eight-byte integer
4059 @cindex integer, 8-byte
4061 The term ``quad'' comes from contexts in which a ``word'' is two bytes;
4062 hence @emph{quad}-word for 8 bytes.
4065 a 16-byte integer. If the bignum won't fit in 16 bytes, it prints a
4066 warning message; and just takes the lowest order 16 bytes of the bignum.
4067 @cindex sixteen-byte integer
4068 @cindex integer, 16-byte
4072 @section @code{.rept @var{count}}
4074 @cindex @code{rept} directive
4075 Repeat the sequence of lines between the @code{.rept} directive and the next
4076 @code{.endr} directive @var{count} times.
4078 For example, assembling
4086 is equivalent to assembling
4095 @section @code{.sbttl "@var{subheading}"}
4097 @cindex @code{sbttl} directive
4098 @cindex subtitles for listings
4099 @cindex listing control: subtitle
4100 Use @var{subheading} as the title (third line, immediately after the
4101 title line) when generating assembly listings.
4103 This directive affects subsequent pages, as well as the current page if
4104 it appears within ten lines of the top of a page.
4108 @section @code{.scl @var{class}}
4110 @cindex @code{scl} directive
4111 @cindex symbol storage class (COFF)
4112 @cindex COFF symbol storage class
4113 Set the storage-class value for a symbol. This directive may only be
4114 used inside a @code{.def}/@code{.endef} pair. Storage class may flag
4115 whether a symbol is static or external, or it may record further
4116 symbolic debugging information.
4119 The @samp{.scl} directive is primarily associated with COFF output; when
4120 configured to generate @code{b.out} output format, @code{@value{AS}}
4121 accepts this directive but ignores it.
4126 @section @code{.section @var{name}}
4128 @cindex @code{section} directive
4129 @cindex named section
4130 Use the @code{.section} directive to assemble the following code into a section
4133 This directive is only supported for targets that actually support arbitrarily
4134 named sections; on @code{a.out} targets, for example, it is not accepted, even
4135 with a standard @code{a.out} section name.
4138 For COFF targets, the @code{.section} directive is used in one of the following
4141 .section @var{name}[, "@var{flags}"]
4142 .section @var{name}[, @var{subsegment}]
4145 If the optional argument is quoted, it is taken as flags to use for the
4146 section. Each flag is a single character. The following flags are recognized:
4149 bss section (uninitialized data)
4151 section is not loaded
4162 If no flags are specified, the default flags depend upon the section name. If
4163 the section name is not recognized, the default will be for the section to be
4164 loaded and writable.
4166 If the optional argument to the @code{.section} directive is not quoted, it is
4167 taken as a subsegment number (@pxref{Sub-Sections}).
4171 For ELF targets, the @code{.section} directive is used like this:
4173 .section @var{name}[, "@var{flags}"[, @@@var{type}]]
4175 The optional @var{flags} argument is a quoted string which may contain any
4176 combintion of the following characters:
4179 section is allocatable
4183 section is executable
4186 The optional @var{type} argument may contain one of the following constants:
4189 section contains data
4191 section does not contain data (i.e., section only occupies space)
4194 If no flags are specified, the default flags depend upon the section name. If
4195 the section name is not recognized, the default will be for the section to have
4196 none of the above flags: it will not be allocated in memory, nor writable, nor
4197 executable. The section will contain data.
4199 For ELF targets, the assembler supports another type of @code{.section}
4200 directive for compatibility with the Solaris assembler:
4202 .section "@var{name}"[, @var{flags}...]
4204 Note that the section name is quoted. There may be a sequence of comma
4208 section is allocatable
4212 section is executable
4217 @section @code{.set @var{symbol}, @var{expression}}
4219 @cindex @code{set} directive
4220 @cindex symbol value, setting
4221 Set the value of @var{symbol} to @var{expression}. This
4222 changes @var{symbol}'s value and type to conform to
4223 @var{expression}. If @var{symbol} was flagged as external, it remains
4224 flagged (@pxref{Symbol Attributes}).
4226 You may @code{.set} a symbol many times in the same assembly.
4228 If you @code{.set} a global symbol, the value stored in the object
4229 file is the last value stored into it.
4232 The syntax for @code{set} on the HPPA is
4233 @samp{@var{symbol} .set @var{expression}}.
4237 @section @code{.short @var{expressions}}
4239 @cindex @code{short} directive
4241 @code{.short} is normally the same as @samp{.word}.
4242 @xref{Word,,@code{.word}}.
4244 In some configurations, however, @code{.short} and @code{.word} generate
4245 numbers of different lengths; @pxref{Machine Dependencies}.
4249 @code{.short} is the same as @samp{.word}. @xref{Word,,@code{.word}}.
4252 This expects zero or more @var{expressions}, and emits
4253 a 16 bit number for each.
4258 @section @code{.single @var{flonums}}
4260 @cindex @code{single} directive
4261 @cindex floating point numbers (single)
4262 This directive assembles zero or more flonums, separated by commas. It
4263 has the same effect as @code{.float}.
4265 The exact kind of floating point numbers emitted depends on how
4266 @code{@value{AS}} is configured. @xref{Machine Dependencies}.
4270 On the @value{TARGET} family, @code{.single} emits 32-bit floating point
4271 numbers in @sc{ieee} format.
4277 @section @code{.size}
4279 @cindex @code{size} directive
4280 This directive is generated by compilers to include auxiliary debugging
4281 information in the symbol table. It is only permitted inside
4282 @code{.def}/@code{.endef} pairs.
4285 @samp{.size} is only meaningful when generating COFF format output; when
4286 @code{@value{AS}} is generating @code{b.out}, it accepts this directive but
4292 @section @code{.sleb128 @var{expressions}}
4294 @cindex @code{sleb128} directive
4295 @var{sleb128} stands for ``signed little endian base 128.'' This is a
4296 compact, variable length representation of numbers used by the DWARF
4297 symbolic debugging format. @xref{Uleb128,@code{.uleb128}}.
4299 @ifclear no-space-dir
4301 @section @code{.skip @var{size} , @var{fill}}
4303 @cindex @code{skip} directive
4304 @cindex filling memory
4305 This directive emits @var{size} bytes, each of value @var{fill}. Both
4306 @var{size} and @var{fill} are absolute expressions. If the comma and
4307 @var{fill} are omitted, @var{fill} is assumed to be zero. This is the same as
4311 @section @code{.space @var{size} , @var{fill}}
4313 @cindex @code{space} directive
4314 @cindex filling memory
4315 This directive emits @var{size} bytes, each of value @var{fill}. Both
4316 @var{size} and @var{fill} are absolute expressions. If the comma
4317 and @var{fill} are omitted, @var{fill} is assumed to be zero. This is the same
4322 @emph{Warning:} @code{.space} has a completely different meaning for HPPA
4323 targets; use @code{.block} as a substitute. See @cite{HP9000 Series 800
4324 Assembly Language Reference Manual} (HP 92432-90001) for the meaning of the
4325 @code{.space} directive. @xref{HPPA Directives,,HPPA Assembler Directives},
4334 @section @code{.space}
4335 @cindex @code{space} directive
4337 On the AMD 29K, this directive is ignored; it is accepted for
4338 compatibility with other AMD 29K assemblers.
4341 @emph{Warning:} In most versions of the @sc{gnu} assembler, the directive
4342 @code{.space} has the effect of @code{.block} @xref{Machine Dependencies}.
4348 @section @code{.stabd, .stabn, .stabs}
4350 @cindex symbolic debuggers, information for
4351 @cindex @code{stab@var{x}} directives
4352 There are three directives that begin @samp{.stab}.
4353 All emit symbols (@pxref{Symbols}), for use by symbolic debuggers.
4354 The symbols are not entered in the @code{@value{AS}} hash table: they
4355 cannot be referenced elsewhere in the source file.
4356 Up to five fields are required:
4360 This is the symbol's name. It may contain any character except
4361 @samp{\000}, so is more general than ordinary symbol names. Some
4362 debuggers used to code arbitrarily complex structures into symbol names
4366 An absolute expression. The symbol's type is set to the low 8 bits of
4367 this expression. Any bit pattern is permitted, but @code{@value{LD}}
4368 and debuggers choke on silly bit patterns.
4371 An absolute expression. The symbol's ``other'' attribute is set to the
4372 low 8 bits of this expression.
4375 An absolute expression. The symbol's descriptor is set to the low 16
4376 bits of this expression.
4379 An absolute expression which becomes the symbol's value.
4382 If a warning is detected while reading a @code{.stabd}, @code{.stabn},
4383 or @code{.stabs} statement, the symbol has probably already been created;
4384 you get a half-formed symbol in your object file. This is
4385 compatible with earlier assemblers!
4388 @cindex @code{stabd} directive
4389 @item .stabd @var{type} , @var{other} , @var{desc}
4391 The ``name'' of the symbol generated is not even an empty string.
4392 It is a null pointer, for compatibility. Older assemblers used a
4393 null pointer so they didn't waste space in object files with empty
4396 The symbol's value is set to the location counter,
4397 relocatably. When your program is linked, the value of this symbol
4398 is the address of the location counter when the @code{.stabd} was
4401 @cindex @code{stabn} directive
4402 @item .stabn @var{type} , @var{other} , @var{desc} , @var{value}
4403 The name of the symbol is set to the empty string @code{""}.
4405 @cindex @code{stabs} directive
4406 @item .stabs @var{string} , @var{type} , @var{other} , @var{desc} , @var{value}
4407 All five fields are specified.
4413 @section @code{.string} "@var{str}"
4415 @cindex string, copying to object file
4416 @cindex @code{string} directive
4418 Copy the characters in @var{str} to the object file. You may specify more than
4419 one string to copy, separated by commas. Unless otherwise specified for a
4420 particular machine, the assembler marks the end of each string with a 0 byte.
4421 You can use any of the escape sequences described in @ref{Strings,,Strings}.
4425 @section @code{.symver}
4426 @cindex @code{symver} directive
4427 @cindex symbol versioning
4428 @cindex versions of symbols
4429 Use the @code{.symver} directive to bind symbols to specific version nodes
4430 within a source file. This is only supported on ELF platforms, and is
4431 typically used when assembling files to be linked into a shared library.
4432 There are cases where it may make sense to use this in objects to be bound
4433 into an application itself so as to override a versioned symbol from a
4436 For ELF targets, the @code{.symver} directive is used like this:
4438 .symver @var{name}, @var{name2@@nodename}
4440 In this case, the symbol @var{name} must exist and be defined within the file
4441 being assembled. The @code{.versym} directive effectively creates a symbol
4442 alias with the name @var{name2@@nodename}, and in fact the main reason that we
4443 just don't try and create a regular alias is that the @var{@@} character isn't
4444 permitted in symbol names. The @var{name2} part of the name is the actual name
4445 of the symbol by which it will be externally referenced. The name @var{name}
4446 itself is merely a name of convenience that is used so that it is possible to
4447 have definitions for multiple versions of a function within a single source
4448 file, and so that the compiler can unambiguously know which version of a
4449 function is being mentioned. The @var{nodename} portion of the alias should be
4450 the name of a node specified in the version script supplied to the linker when
4451 building a shared library. If you are attempting to override a versioned
4452 symbol from a shared library, then @var{nodename} should correspond to the
4453 nodename of the symbol you are trying to override.
4458 @section @code{.tag @var{structname}}
4460 @cindex COFF structure debugging
4461 @cindex structure debugging, COFF
4462 @cindex @code{tag} directive
4463 This directive is generated by compilers to include auxiliary debugging
4464 information in the symbol table. It is only permitted inside
4465 @code{.def}/@code{.endef} pairs. Tags are used to link structure
4466 definitions in the symbol table with instances of those structures.
4469 @samp{.tag} is only used when generating COFF format output; when
4470 @code{@value{AS}} is generating @code{b.out}, it accepts this directive but
4476 @section @code{.text @var{subsection}}
4478 @cindex @code{text} directive
4479 Tells @code{@value{AS}} to assemble the following statements onto the end of
4480 the text subsection numbered @var{subsection}, which is an absolute
4481 expression. If @var{subsection} is omitted, subsection number zero
4485 @section @code{.title "@var{heading}"}
4487 @cindex @code{title} directive
4488 @cindex listing control: title line
4489 Use @var{heading} as the title (second line, immediately after the
4490 source file name and pagenumber) when generating assembly listings.
4492 This directive affects subsequent pages, as well as the current page if
4493 it appears within ten lines of the top of a page.
4497 @section @code{.type @var{int}}
4499 @cindex COFF symbol type
4500 @cindex symbol type, COFF
4501 @cindex @code{type} directive
4502 This directive, permitted only within @code{.def}/@code{.endef} pairs,
4503 records the integer @var{int} as the type attribute of a symbol table entry.
4506 @samp{.type} is associated only with COFF format output; when
4507 @code{@value{AS}} is configured for @code{b.out} output, it accepts this
4508 directive but ignores it.
4514 @section @code{.val @var{addr}}
4516 @cindex @code{val} directive
4517 @cindex COFF value attribute
4518 @cindex value attribute, COFF
4519 This directive, permitted only within @code{.def}/@code{.endef} pairs,
4520 records the address @var{addr} as the value attribute of a symbol table
4524 @samp{.val} is used only for COFF output; when @code{@value{AS}} is
4525 configured for @code{b.out}, it accepts this directive but ignores it.
4530 @section @code{.uleb128 @var{expressions}}
4532 @cindex @code{uleb128} directive
4533 @var{uleb128} stands for ``unsigned little endian base 128.'' This is a
4534 compact, variable length representation of numbers used by the DWARF
4535 symbolic debugging format. @xref{Sleb128,@code{.sleb128}}.
4538 @section @code{.word @var{expressions}}
4540 @cindex @code{word} directive
4541 This directive expects zero or more @var{expressions}, of any section,
4542 separated by commas.
4545 For each expression, @code{@value{AS}} emits a 32-bit number.
4548 For each expression, @code{@value{AS}} emits a 16-bit number.
4553 The size of the number emitted, and its byte order,
4554 depend on what target computer the assembly is for.
4557 @c on amd29k, i960, sparc the "special treatment to support compilers" doesn't
4558 @c happen---32-bit addressability, period; no long/short jumps.
4559 @ifset DIFF-TBL-KLUGE
4560 @cindex difference tables altered
4561 @cindex altered difference tables
4563 @emph{Warning: Special Treatment to support Compilers}
4567 Machines with a 32-bit address space, but that do less than 32-bit
4568 addressing, require the following special treatment. If the machine of
4569 interest to you does 32-bit addressing (or doesn't require it;
4570 @pxref{Machine Dependencies}), you can ignore this issue.
4573 In order to assemble compiler output into something that works,
4574 @code{@value{AS}} occasionlly does strange things to @samp{.word} directives.
4575 Directives of the form @samp{.word sym1-sym2} are often emitted by
4576 compilers as part of jump tables. Therefore, when @code{@value{AS}} assembles a
4577 directive of the form @samp{.word sym1-sym2}, and the difference between
4578 @code{sym1} and @code{sym2} does not fit in 16 bits, @code{@value{AS}}
4579 creates a @dfn{secondary jump table}, immediately before the next label.
4580 This secondary jump table is preceded by a short-jump to the
4581 first byte after the secondary table. This short-jump prevents the flow
4582 of control from accidentally falling into the new table. Inside the
4583 table is a long-jump to @code{sym2}. The original @samp{.word}
4584 contains @code{sym1} minus the address of the long-jump to
4587 If there were several occurrences of @samp{.word sym1-sym2} before the
4588 secondary jump table, all of them are adjusted. If there was a
4589 @samp{.word sym3-sym4}, that also did not fit in sixteen bits, a
4590 long-jump to @code{sym4} is included in the secondary jump table,
4591 and the @code{.word} directives are adjusted to contain @code{sym3}
4592 minus the address of the long-jump to @code{sym4}; and so on, for as many
4593 entries in the original jump table as necessary.
4596 @emph{This feature may be disabled by compiling @code{@value{AS}} with the
4597 @samp{-DWORKING_DOT_WORD} option.} This feature is likely to confuse
4598 assembly language programmers.
4601 @c end DIFF-TBL-KLUGE
4604 @section Deprecated Directives
4606 @cindex deprecated directives
4607 @cindex obsolescent directives
4608 One day these directives won't work.
4609 They are included for compatibility with older assemblers.
4617 @node Machine Dependencies
4618 @chapter Machine Dependent Features
4620 @cindex machine dependencies
4621 The machine instruction sets are (almost by definition) different on
4622 each machine where @code{@value{AS}} runs. Floating point representations
4623 vary as well, and @code{@value{AS}} often supports a few additional
4624 directives or command-line options for compatibility with other
4625 assemblers on a particular platform. Finally, some versions of
4626 @code{@value{AS}} support special pseudo-instructions for branch
4629 This chapter discusses most of these differences, though it does not
4630 include details on any machine's instruction set. For details on that
4631 subject, see the hardware manufacturer's manual.
4635 * AMD29K-Dependent:: AMD 29K Dependent Features
4638 * ARC-Dependent:: ARC Dependent Features
4641 * ARM-Dependent:: ARM Dependent Features
4644 * D10V-Dependent:: D10V Dependent Features
4647 * H8/300-Dependent:: Hitachi H8/300 Dependent Features
4650 * H8/500-Dependent:: Hitachi H8/500 Dependent Features
4653 * HPPA-Dependent:: HPPA Dependent Features
4656 * i386-Dependent:: Intel 80386 Dependent Features
4659 * i960-Dependent:: Intel 80960 Dependent Features
4662 * M68K-Dependent:: M680x0 Dependent Features
4665 * MIPS-Dependent:: MIPS Dependent Features
4668 * SH-Dependent:: Hitachi SH Dependent Features
4671 * Sparc-Dependent:: SPARC Dependent Features
4674 * V850-Dependent:: V850 Dependent Features
4677 * Z8000-Dependent:: Z8000 Dependent Features
4680 * Vax-Dependent:: VAX Dependent Features
4687 @c The following major nodes are *sections* in the GENERIC version, *chapters*
4688 @c in single-cpu versions. This is mainly achieved by @lowersections. There is a
4689 @c peculiarity: to preserve cross-references, there must be a node called
4690 @c "Machine Dependencies". Hence the conditional nodenames in each
4691 @c major node below. Node defaulting in makeinfo requires adjacency of
4692 @c node and sectioning commands; hence the repetition of @chapter BLAH
4693 @c in both conditional blocks.
4699 @chapter ARC Dependent Features
4702 @node Machine Dependencies
4703 @chapter ARC Dependent Features
4708 * ARC-Opts:: Options
4709 * ARC-Float:: Floating Point
4710 * ARC-Directives:: Sparc Machine Directives
4716 @cindex options for ARC
4718 @cindex architectures, ARC
4719 @cindex ARC architectures
4720 The ARC chip family includes several successive levels (or other
4721 variants) of chip, using the same core instruction set, but including
4722 a few additional instructions at each level.
4724 By default, @code{@value{AS}} assumes the core instruction set (ARC
4725 base). The @code{.cpu} pseudo-op is intended to be used to select
4729 @cindex @code{-mbig-endian} option (ARC)
4730 @cindex @code{-mlittle-endian} option (ARC)
4731 @cindex ARC big-endian output
4732 @cindex ARC little-endian output
4733 @cindex big-endian output, ARC
4734 @cindex little-endian output, ARC
4736 @itemx -mlittle-endian
4737 Any @sc{arc} configuration of @code{@value{AS}} can select big-endian or
4738 little-endian output at run time (unlike most other @sc{gnu} development
4739 tools, which must be configured for one or the other). Use
4740 @samp{-mbig-endian} to select big-endian output, and @samp{-mlittle-endian}
4745 @section Floating Point
4747 @cindex floating point, ARC (@sc{ieee})
4748 @cindex ARC floating point (@sc{ieee})
4749 The ARC cpu family currently does not have hardware floating point
4750 support. Software floating point support is provided by @code{GCC}
4751 and uses @sc{ieee} floating-point numbers.
4753 @node ARC-Directives
4754 @section ARC Machine Directives
4756 @cindex ARC machine directives
4757 @cindex machine directives, ARC
4758 The ARC version of @code{@value{AS}} supports the following additional
4763 @cindex @code{cpu} directive, SPARC
4764 This must be followed by the desired cpu.
4765 The ARC is intended to be customizable, @code{.cpu} is used to
4766 select the desired variant [though currently there are none].
4773 @include c-a29k.texi
4782 @node Machine Dependencies
4783 @chapter Machine Dependent Features
4785 The machine instruction sets are different on each Hitachi chip family,
4786 and there are also some syntax differences among the families. This
4787 chapter describes the specific @code{@value{AS}} features for each
4791 * H8/300-Dependent:: Hitachi H8/300 Dependent Features
4792 * H8/500-Dependent:: Hitachi H8/500 Dependent Features
4793 * SH-Dependent:: Hitachi SH Dependent Features
4800 @include c-d10v.texi
4804 @include c-h8300.texi
4808 @include c-h8500.texi
4812 @include c-hppa.texi
4816 @include c-i386.texi
4820 @include c-i960.texi
4824 @include c-m68k.texi
4828 @include c-mips.texi
4832 @include c-ns32k.texi
4840 @include c-sparc.texi
4851 @c start-sanitize-v850
4853 @include c-v850.texi
4855 @c end-sanitize-v850
4858 @c reverse effect of @down at top of generic Machine-Dep chapter
4862 @node Reporting Bugs
4863 @chapter Reporting Bugs
4864 @cindex bugs in assembler
4865 @cindex reporting bugs in assembler
4867 Your bug reports play an essential role in making @code{@value{AS}} reliable.
4869 Reporting a bug may help you by bringing a solution to your problem, or it may
4870 not. But in any case the principal function of a bug report is to help the
4871 entire community by making the next version of @code{@value{AS}} work better.
4872 Bug reports are your contribution to the maintenance of @code{@value{AS}}.
4874 In order for a bug report to serve its purpose, you must include the
4875 information that enables us to fix the bug.
4878 * Bug Criteria:: Have you found a bug?
4879 * Bug Reporting:: How to report bugs
4883 @section Have you found a bug?
4884 @cindex bug criteria
4886 If you are not sure whether you have found a bug, here are some guidelines:
4889 @cindex fatal signal
4890 @cindex assembler crash
4891 @cindex crash of assembler
4893 If the assembler gets a fatal signal, for any input whatever, that is a
4894 @code{@value{AS}} bug. Reliable assemblers never crash.
4896 @cindex error on valid input
4898 If @code{@value{AS}} produces an error message for valid input, that is a bug.
4900 @cindex invalid input
4902 If @code{@value{AS}} does not produce an error message for invalid input, that
4903 is a bug. However, you should note that your idea of ``invalid input'' might
4904 be our idea of ``an extension'' or ``support for traditional practice''.
4907 If you are an experienced user of assemblers, your suggestions for improvement
4908 of @code{@value{AS}} are welcome in any case.
4912 @section How to report bugs
4914 @cindex assembler bugs, reporting
4916 A number of companies and individuals offer support for @sc{gnu} products. If
4917 you obtained @code{@value{AS}} from a support organization, we recommend you
4918 contact that organization first.
4920 You can find contact information for many support companies and
4921 individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
4924 In any event, we also recommend that you send bug reports for @code{@value{AS}}
4925 to @samp{bug-gnu-utils@@prep.ai.mit.edu}.
4927 The fundamental principle of reporting bugs usefully is this:
4928 @strong{report all the facts}. If you are not sure whether to state a
4929 fact or leave it out, state it!
4931 Often people omit facts because they think they know what causes the problem
4932 and assume that some details do not matter. Thus, you might assume that the
4933 name of a symbol you use in an example does not matter. Well, probably it does
4934 not, but one cannot be sure. Perhaps the bug is a stray memory reference which
4935 happens to fetch from the location where that name is stored in memory;
4936 perhaps, if the name were different, the contents of that location would fool
4937 the assembler into doing the right thing despite the bug. Play it safe and
4938 give a specific, complete example. That is the easiest thing for you to do,
4939 and the most helpful.
4941 Keep in mind that the purpose of a bug report is to enable us to fix the bug if
4942 it is new to us. Therefore, always write your bug reports on the assumption
4943 that the bug has not been reported previously.
4945 Sometimes people give a few sketchy facts and ask, ``Does this ring a
4946 bell?'' Those bug reports are useless, and we urge everyone to
4947 @emph{refuse to respond to them} except to chide the sender to report
4950 To enable us to fix the bug, you should include all these things:
4954 The version of @code{@value{AS}}. @code{@value{AS}} announces it if you start
4955 it with the @samp{--version} argument.
4957 Without this, we will not know whether there is any point in looking for
4958 the bug in the current version of @code{@value{AS}}.
4961 Any patches you may have applied to the @code{@value{AS}} source.
4964 The type of machine you are using, and the operating system name and
4968 What compiler (and its version) was used to compile @code{@value{AS}}---e.g.
4972 The command arguments you gave the assembler to assemble your example and
4973 observe the bug. To guarantee you will not omit something important, list them
4974 all. A copy of the Makefile (or the output from make) is sufficient.
4976 If we were to try to guess the arguments, we would probably guess wrong
4977 and then we might not encounter the bug.
4980 A complete input file that will reproduce the bug. If the bug is observed when
4981 the assembler is invoked via a compiler, send the assembler source, not the
4982 high level language source. Most compilers will produce the assembler source
4983 when run with the @samp{-S} option. If you are using @code{@value{GCC}}, use
4984 the options @samp{-v --save-temps}; this will save the assembler source in a
4985 file with an extension of @file{.s}, and also show you exactly how
4986 @code{@value{AS}} is being run.
4989 A description of what behavior you observe that you believe is
4990 incorrect. For example, ``It gets a fatal signal.''
4992 Of course, if the bug is that @code{@value{AS}} gets a fatal signal, then we
4993 will certainly notice it. But if the bug is incorrect output, we might not
4994 notice unless it is glaringly wrong. You might as well not give us a chance to
4997 Even if the problem you experience is a fatal signal, you should still say so
4998 explicitly. Suppose something strange is going on, such as, your copy of
4999 @code{@value{AS}} is out of synch, or you have encountered a bug in the C
5000 library on your system. (This has happened!) Your copy might crash and ours
5001 would not. If you told us to expect a crash, then when ours fails to crash, we
5002 would know that the bug was not happening for us. If you had not told us to
5003 expect a crash, then we would not be able to draw any conclusion from our
5007 If you wish to suggest changes to the @code{@value{AS}} source, send us context
5008 diffs, as generated by @code{diff} with the @samp{-u}, @samp{-c}, or @samp{-p}
5009 option. Always send diffs from the old file to the new file. If you even
5010 discuss something in the @code{@value{AS}} source, refer to it by context, not
5013 The line numbers in our development sources will not match those in your
5014 sources. Your line numbers would convey no useful information to us.
5017 Here are some things that are not necessary:
5021 A description of the envelope of the bug.
5023 Often people who encounter a bug spend a lot of time investigating
5024 which changes to the input file will make the bug go away and which
5025 changes will not affect it.
5027 This is often time consuming and not very useful, because the way we
5028 will find the bug is by running a single example under the debugger
5029 with breakpoints, not by pure deduction from a series of examples.
5030 We recommend that you save your time for something else.
5032 Of course, if you can find a simpler example to report @emph{instead}
5033 of the original one, that is a convenience for us. Errors in the
5034 output will be easier to spot, running under the debugger will take
5035 less time, and so on.
5037 However, simplification is not vital; if you do not want to do this,
5038 report the bug anyway and send us the entire test case you used.
5041 A patch for the bug.
5043 A patch for the bug does help us if it is a good one. But do not omit
5044 the necessary information, such as the test case, on the assumption that
5045 a patch is all we need. We might see problems with your patch and decide
5046 to fix the problem another way, or we might not understand it at all.
5048 Sometimes with a program as complicated as @code{@value{AS}} it is very hard to
5049 construct an example that will make the program follow a certain path through
5050 the code. If you do not send us the example, we will not be able to construct
5051 one, so we will not be able to verify that the bug is fixed.
5053 And if we cannot understand what bug you are trying to fix, or why your
5054 patch should be an improvement, we will not install it. A test case will
5055 help us to understand.
5058 A guess about what the bug is or what it depends on.
5060 Such guesses are usually wrong. Even we cannot guess right about such
5061 things without first using the debugger to find the facts.
5064 @node Acknowledgements
5065 @chapter Acknowledgements
5067 If you have contributed to @code{@value{AS}} and your name isn't listed here,
5068 it is not meant as a slight. We just don't know about it. Send mail to the
5069 maintainer, and we'll correct the situation. Currently
5071 the maintainer is Ken Raeburn (email address @code{raeburn@@cygnus.com}).
5073 Dean Elsner wrote the original @sc{gnu} assembler for the VAX.@footnote{Any
5076 Jay Fenlason maintained GAS for a while, adding support for GDB-specific debug
5077 information and the 68k series machines, most of the preprocessing pass, and
5078 extensive changes in @file{messages.c}, @file{input-file.c}, @file{write.c}.
5080 K. Richard Pixley maintained GAS for a while, adding various enhancements and
5081 many bug fixes, including merging support for several processors, breaking GAS
5082 up to handle multiple object file format back ends (including heavy rewrite,
5083 testing, an integration of the coff and b.out back ends), adding configuration
5084 including heavy testing and verification of cross assemblers and file splits
5085 and renaming, converted GAS to strictly ANSI C including full prototypes, added
5086 support for m680[34]0 and cpu32, did considerable work on i960 including a COFF
5087 port (including considerable amounts of reverse engineering), a SPARC opcode
5088 file rewrite, DECstation, rs6000, and hp300hpux host ports, updated ``know''
5089 assertions and made them work, much other reorganization, cleanup, and lint.
5091 Ken Raeburn wrote the high-level BFD interface code to replace most of the code
5092 in format-specific I/O modules.
5094 The original VMS support was contributed by David L. Kashtan. Eric Youngdale
5095 has done much work with it since.
5097 The Intel 80386 machine description was written by Eliot Dresselhaus.
5099 Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
5101 The Motorola 88k machine description was contributed by Devon Bowen of Buffalo
5102 University and Torbjorn Granlund of the Swedish Institute of Computer Science.
5104 Keith Knowles at the Open Software Foundation wrote the original MIPS back end
5105 (@file{tc-mips.c}, @file{tc-mips.h}), and contributed Rose format support
5106 (which hasn't been merged in yet). Ralph Campbell worked with the MIPS code to
5107 support a.out format.
5109 Support for the Zilog Z8k and Hitachi H8/300 and H8/500 processors (tc-z8k,
5110 tc-h8300, tc-h8500), and IEEE 695 object file format (obj-ieee), was written by
5111 Steve Chamberlain of Cygnus Support. Steve also modified the COFF back end to
5112 use BFD for some low-level operations, for use with the H8/300 and AMD 29k
5115 John Gilmore built the AMD 29000 support, added @code{.include} support, and
5116 simplified the configuration of which versions accept which directives. He
5117 updated the 68k machine description so that Motorola's opcodes always produced
5118 fixed-size instructions (e.g. @code{jsr}), while synthetic instructions
5119 remained shrinkable (@code{jbsr}). John fixed many bugs, including true tested
5120 cross-compilation support, and one bug in relaxation that took a week and
5121 required the proverbial one-bit fix.
5123 Ian Lance Taylor of Cygnus Support merged the Motorola and MIT syntax for the
5124 68k, completed support for some COFF targets (68k, i386 SVR3, and SCO Unix),
5125 added support for MIPS ECOFF and ELF targets, wrote the initial RS/6000 and
5126 PowerPC assembler, and made a few other minor patches.
5128 Steve Chamberlain made @code{@value{AS}} able to generate listings.
5130 Hewlett-Packard contributed support for the HP9000/300.
5132 Jeff Law wrote GAS and BFD support for the native HPPA object format (SOM)
5133 along with a fairly extensive HPPA testsuite (for both SOM and ELF object
5134 formats). This work was supported by both the Center for Software Science at
5135 the University of Utah and Cygnus Support.
5137 Support for ELF format files has been worked on by Mark Eichin of Cygnus
5138 Support (original, incomplete implementation for SPARC), Pete Hoogenboom and
5139 Jeff Law at the University of Utah (HPPA mainly), Michael Meissner of the Open
5140 Software Foundation (i386 mainly), and Ken Raeburn of Cygnus Support (sparc,
5141 and some initial 64-bit support).
5143 Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote GAS and BFD
5144 support for openVMS/Alpha.
5146 Several engineers at Cygnus Support have also provided many small bug fixes and
5147 configuration enhancements.
5149 Many others have contributed large or small bugfixes and enhancements. If
5150 you have contributed significant work and are not mentioned on this list, and
5151 want to be, let us know. Some of the history has been lost; we are not
5152 intentionally leaving anyone out.