Home | History | Annotate | Download | only in doc
      1 \input texinfo @c                               -*-Texinfo-*-
      2 @c  Copyright (C) 1991-2014 Free Software Foundation, Inc.
      3 @c UPDATE!!  On future updates--
      4 @c   (1)   check for new machine-dep cmdline options in
      5 @c         md_parse_option definitions in config/tc-*.c
      6 @c   (2)   for platform-specific directives, examine md_pseudo_op
      7 @c         in config/tc-*.c
      8 @c   (3)   for object-format specific directives, examine obj_pseudo_op
      9 @c         in config/obj-*.c
     10 @c   (4)   portable directives in potable[] in read.c
     11 @c %**start of header
     12 @setfilename as.info
     13 @c ---config---
     14 @macro gcctabopt{body}
     15 @code{\body\}
     16 @end macro
     17 @c defaults, config file may override:
     18 @set have-stabs
     19 @c ---
     20 @c man begin NAME
     21 @c ---
     22 @include asconfig.texi
     23 @include bfdver.texi
     24 @c ---
     25 @c man end
     26 @c ---
     27 @c common OR combinations of conditions
     28 @ifset COFF
     29 @set COFF-ELF
     30 @end ifset
     31 @ifset ELF
     32 @set COFF-ELF
     33 @end ifset
     34 @ifset AOUT
     35 @set aout-bout
     36 @end ifset
     37 @ifset ARM/Thumb
     38 @set ARM
     39 @end ifset
     40 @ifset Blackfin
     41 @set Blackfin
     42 @end ifset
     43 @ifset BOUT
     44 @set aout-bout
     45 @end ifset
     46 @ifset H8/300
     47 @set H8
     48 @end ifset
     49 @ifset SH
     50 @set H8
     51 @end ifset
     52 @ifset HPPA
     53 @set abnormal-separator
     54 @end ifset
     55 @c ------------
     56 @ifset GENERIC
     57 @settitle Using @value{AS}
     58 @end ifset
     59 @ifclear GENERIC
     60 @settitle Using @value{AS} (@value{TARGET})
     61 @end ifclear
     62 @setchapternewpage odd
     63 @c %**end of header
     64 
     65 @c @smallbook
     66 @c @set SMALL
     67 @c WARE! Some of the machine-dependent sections contain tables of machine
     68 @c instructions.  Except in multi-column format, these tables look silly.
     69 @c Unfortunately, Texinfo doesn't have a general-purpose multi-col format, so
     70 @c the multi-col format is faked within @example sections.
     71 @c
     72 @c Again unfortunately, the natural size that fits on a page, for these tables,
     73 @c is different depending on whether or not smallbook is turned on.
     74 @c This matters, because of order: text flow switches columns at each page
     75 @c break.
     76 @c
     77 @c The format faked in this source works reasonably well for smallbook,
     78 @c not well for the default large-page format.  This manual expects that if you
     79 @c turn on @smallbook, you will also uncomment the "@set SMALL" to enable the
     80 @c tables in question.  You can turn on one without the other at your
     81 @c discretion, of course.
     82 @ifinfo
     83 @set SMALL
     84 @c the insn tables look just as silly in info files regardless of smallbook,
     85 @c might as well show 'em anyways.
     86 @end ifinfo
     87 
     88 @ifnottex
     89 @dircategory Software development
     90 @direntry
     91 * As: (as).                     The GNU assembler.
     92 * Gas: (as).                    The GNU assembler.
     93 @end direntry
     94 @end ifnottex
     95 
     96 @finalout
     97 @syncodeindex ky cp
     98 
     99 @copying
    100 This file documents the GNU Assembler "@value{AS}".
    101 
    102 @c man begin COPYRIGHT
    103 Copyright @copyright{} 1991-2014 Free Software Foundation, Inc.
    104 
    105 Permission is granted to copy, distribute and/or modify this document
    106 under the terms of the GNU Free Documentation License, Version 1.3
    107 or any later version published by the Free Software Foundation;
    108 with no Invariant Sections, with no Front-Cover Texts, and with no
    109 Back-Cover Texts.  A copy of the license is included in the
    110 section entitled ``GNU Free Documentation License''.
    111 
    112 @c man end
    113 @end copying
    114 
    115 @titlepage
    116 @title Using @value{AS}
    117 @subtitle The @sc{gnu} Assembler
    118 @ifclear GENERIC
    119 @subtitle for the @value{TARGET} family
    120 @end ifclear
    121 @ifset VERSION_PACKAGE
    122 @sp 1
    123 @subtitle @value{VERSION_PACKAGE}
    124 @end ifset
    125 @sp 1
    126 @subtitle Version @value{VERSION}
    127 @sp 1
    128 @sp 13
    129 The Free Software Foundation Inc.@: thanks The Nice Computer
    130 Company of Australia for loaning Dean Elsner to write the
    131 first (Vax) version of @command{as} for Project @sc{gnu}.
    132 The proprietors, management and staff of TNCCA thank FSF for
    133 distracting the boss while they got some work
    134 done.
    135 @sp 3
    136 @author Dean Elsner, Jay Fenlason & friends
    137 @page
    138 @tex
    139 {\parskip=0pt
    140 \hfill {\it Using {\tt @value{AS}}}\par
    141 \hfill Edited by Cygnus Support\par
    142 }
    143 %"boxit" macro for figures:
    144 %Modified from Knuth's ``boxit'' macro from TeXbook (answer to exercise 21.3)
    145 \gdef\boxit#1#2{\vbox{\hrule\hbox{\vrule\kern3pt
    146      \vbox{\parindent=0pt\parskip=0pt\hsize=#1\kern3pt\strut\hfil
    147 #2\hfil\strut\kern3pt}\kern3pt\vrule}\hrule}}%box with visible outline
    148 \gdef\ibox#1#2{\hbox to #1{#2\hfil}\kern8pt}% invisible box
    149 @end tex
    150 
    151 @vskip 0pt plus 1filll
    152 Copyright @copyright{} 1991-2014 Free Software Foundation, Inc.
    153 
    154       Permission is granted to copy, distribute and/or modify this document
    155       under the terms of the GNU Free Documentation License, Version 1.3
    156       or any later version published by the Free Software Foundation;
    157       with no Invariant Sections, with no Front-Cover Texts, and with no
    158       Back-Cover Texts.  A copy of the license is included in the
    159       section entitled ``GNU Free Documentation License''.
    160 
    161 @end titlepage
    162 @contents
    163 
    164 @ifnottex
    165 @node Top
    166 @top Using @value{AS}
    167 
    168 This file is a user guide to the @sc{gnu} assembler @command{@value{AS}}
    169 @ifset VERSION_PACKAGE
    170 @value{VERSION_PACKAGE}
    171 @end ifset
    172 version @value{VERSION}.
    173 @ifclear GENERIC
    174 This version of the file describes @command{@value{AS}} configured to generate
    175 code for @value{TARGET} architectures.
    176 @end ifclear
    177 
    178 This document is distributed under the terms of the GNU Free
    179 Documentation License.  A copy of the license is included in the
    180 section entitled ``GNU Free Documentation License''.
    181 
    182 @menu
    183 * Overview::                    Overview
    184 * Invoking::                    Command-Line Options
    185 * Syntax::                      Syntax
    186 * Sections::                    Sections and Relocation
    187 * Symbols::                     Symbols
    188 * Expressions::                 Expressions
    189 * Pseudo Ops::                  Assembler Directives
    190 @ifset ELF
    191 * Object Attributes::           Object Attributes
    192 @end ifset
    193 * Machine Dependencies::        Machine Dependent Features
    194 * Reporting Bugs::              Reporting Bugs
    195 * Acknowledgements::            Who Did What
    196 * GNU Free Documentation License::  GNU Free Documentation License
    197 * AS Index::                    AS Index
    198 @end menu
    199 @end ifnottex
    200 
    201 @node Overview
    202 @chapter Overview
    203 @iftex
    204 This manual is a user guide to the @sc{gnu} assembler @command{@value{AS}}.
    205 @ifclear GENERIC
    206 This version of the manual describes @command{@value{AS}} configured to generate
    207 code for @value{TARGET} architectures.
    208 @end ifclear
    209 @end iftex
    210 
    211 @cindex invocation summary
    212 @cindex option summary
    213 @cindex summary of options
    214 Here is a brief summary of how to invoke @command{@value{AS}}.  For details,
    215 see @ref{Invoking,,Command-Line Options}.
    216 
    217 @c man title AS the portable GNU assembler.
    218 
    219 @ignore
    220 @c man begin SEEALSO
    221 gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
    222 @c man end
    223 @end ignore
    224 
    225 @c We don't use deffn and friends for the following because they seem
    226 @c to be limited to one line for the header.
    227 @smallexample
    228 @c man begin SYNOPSIS
    229 @value{AS} [@b{-a}[@b{cdghlns}][=@var{file}]] [@b{--alternate}] [@b{-D}]
    230  [@b{--compress-debug-sections}]  [@b{--nocompress-debug-sections}]
    231  [@b{--debug-prefix-map} @var{old}=@var{new}]
    232  [@b{--defsym} @var{sym}=@var{val}] [@b{-f}] [@b{-g}] [@b{--gstabs}]
    233  [@b{--gstabs+}] [@b{--gdwarf-2}] [@b{--gdwarf-sections}]
    234  [@b{--help}] [@b{-I} @var{dir}] [@b{-J}]
    235  [@b{-K}] [@b{-L}] [@b{--listing-lhs-width}=@var{NUM}]
    236  [@b{--listing-lhs-width2}=@var{NUM}] [@b{--listing-rhs-width}=@var{NUM}]
    237  [@b{--listing-cont-lines}=@var{NUM}] [@b{--keep-locals}] [@b{-o}
    238  @var{objfile}] [@b{-R}] [@b{--reduce-memory-overheads}] [@b{--statistics}]
    239  [@b{-v}] [@b{-version}] [@b{--version}] [@b{-W}] [@b{--warn}]
    240  [@b{--fatal-warnings}] [@b{-w}] [@b{-x}] [@b{-Z}] [@b{@@@var{FILE}}]
    241  [@b{--size-check=[error|warning]}]
    242  [@b{--target-help}] [@var{target-options}]
    243  [@b{--}|@var{files} @dots{}]
    244 @c
    245 @c Target dependent options are listed below.  Keep the list sorted.
    246 @c Add an empty line for separation.
    247 @ifset AARCH64
    248 
    249 @emph{Target AArch64 options:}
    250    [@b{-EB}|@b{-EL}]
    251    [@b{-mabi}=@var{ABI}]
    252 @end ifset
    253 @ifset ALPHA
    254 
    255 @emph{Target Alpha options:}
    256    [@b{-m@var{cpu}}]
    257    [@b{-mdebug} | @b{-no-mdebug}]
    258    [@b{-replace} | @b{-noreplace}]
    259    [@b{-relax}] [@b{-g}] [@b{-G@var{size}}]
    260    [@b{-F}] [@b{-32addr}]
    261 @end ifset
    262 @ifset ARC
    263 
    264 @emph{Target ARC options:}
    265    [@b{-marc[5|6|7|8]}]
    266    [@b{-EB}|@b{-EL}]
    267 @end ifset
    268 @ifset ARM
    269 
    270 @emph{Target ARM options:}
    271 @c Don't document the deprecated options
    272    [@b{-mcpu}=@var{processor}[+@var{extension}@dots{}]]
    273    [@b{-march}=@var{architecture}[+@var{extension}@dots{}]]
    274    [@b{-mfpu}=@var{floating-point-format}]
    275    [@b{-mfloat-abi}=@var{abi}]
    276    [@b{-meabi}=@var{ver}]
    277    [@b{-mthumb}]
    278    [@b{-EB}|@b{-EL}]
    279    [@b{-mapcs-32}|@b{-mapcs-26}|@b{-mapcs-float}|
    280     @b{-mapcs-reentrant}]
    281    [@b{-mthumb-interwork}] [@b{-k}]
    282 @end ifset
    283 @ifset Blackfin
    284 
    285 @emph{Target Blackfin options:}
    286    [@b{-mcpu}=@var{processor}[-@var{sirevision}]]
    287    [@b{-mfdpic}]
    288    [@b{-mno-fdpic}]
    289    [@b{-mnopic}]
    290 @end ifset
    291 @ifset CRIS
    292 
    293 @emph{Target CRIS options:}
    294    [@b{--underscore} | @b{--no-underscore}]
    295    [@b{--pic}] [@b{-N}]
    296    [@b{--emulation=criself} | @b{--emulation=crisaout}]
    297    [@b{--march=v0_v10} | @b{--march=v10} | @b{--march=v32} | @b{--march=common_v10_v32}]
    298 @c Deprecated -- deliberately not documented.
    299 @c [@b{-h}] [@b{-H}]
    300 @end ifset
    301 @ifset D10V
    302 
    303 @emph{Target D10V options:}
    304    [@b{-O}]
    305 @end ifset
    306 @ifset D30V
    307 
    308 @emph{Target D30V options:}
    309    [@b{-O}|@b{-n}|@b{-N}]
    310 @end ifset
    311 @ifset EPIPHANY
    312 
    313 @emph{Target EPIPHANY options:}
    314    [@b{-mepiphany}|@b{-mepiphany16}]
    315 @end ifset
    316 @ifset H8
    317 
    318 @emph{Target H8/300 options:}
    319    [-h-tick-hex]
    320 @end ifset
    321 @ifset HPPA
    322 @c HPPA has no machine-dependent assembler options (yet).
    323 @end ifset
    324 @ifset I80386
    325 
    326 @emph{Target i386 options:}
    327    [@b{--32}|@b{--x32}|@b{--64}] [@b{-n}]
    328    [@b{-march}=@var{CPU}[+@var{EXTENSION}@dots{}]] [@b{-mtune}=@var{CPU}]
    329 @end ifset
    330 @ifset I960
    331 
    332 @emph{Target i960 options:}
    333 @c see md_parse_option in tc-i960.c
    334    [@b{-ACA}|@b{-ACA_A}|@b{-ACB}|@b{-ACC}|@b{-AKA}|@b{-AKB}|
    335     @b{-AKC}|@b{-AMC}]
    336    [@b{-b}] [@b{-no-relax}]
    337 @end ifset
    338 @ifset IA64
    339 
    340 @emph{Target IA-64 options:}
    341    [@b{-mconstant-gp}|@b{-mauto-pic}]
    342    [@b{-milp32}|@b{-milp64}|@b{-mlp64}|@b{-mp64}]
    343    [@b{-mle}|@b{mbe}]
    344    [@b{-mtune=itanium1}|@b{-mtune=itanium2}]
    345    [@b{-munwind-check=warning}|@b{-munwind-check=error}]
    346    [@b{-mhint.b=ok}|@b{-mhint.b=warning}|@b{-mhint.b=error}]
    347    [@b{-x}|@b{-xexplicit}] [@b{-xauto}] [@b{-xdebug}]
    348 @end ifset
    349 @ifset IP2K
    350 
    351 @emph{Target IP2K options:}
    352    [@b{-mip2022}|@b{-mip2022ext}]
    353 @end ifset
    354 @ifset M32C
    355 
    356 @emph{Target M32C options:}
    357    [@b{-m32c}|@b{-m16c}] [-relax] [-h-tick-hex]
    358 @end ifset
    359 @ifset M32R
    360 
    361 @emph{Target M32R options:}
    362    [@b{--m32rx}|@b{--[no-]warn-explicit-parallel-conflicts}|
    363    @b{--W[n]p}]
    364 @end ifset
    365 @ifset M680X0
    366 
    367 @emph{Target M680X0 options:}
    368    [@b{-l}] [@b{-m68000}|@b{-m68010}|@b{-m68020}|@dots{}]
    369 @end ifset
    370 @ifset M68HC11
    371 
    372 @emph{Target M68HC11 options:}
    373    [@b{-m68hc11}|@b{-m68hc12}|@b{-m68hcs12}|@b{-mm9s12x}|@b{-mm9s12xg}]
    374    [@b{-mshort}|@b{-mlong}]
    375    [@b{-mshort-double}|@b{-mlong-double}]
    376    [@b{--force-long-branches}] [@b{--short-branches}]
    377    [@b{--strict-direct-mode}] [@b{--print-insn-syntax}]
    378    [@b{--print-opcodes}] [@b{--generate-example}]
    379 @end ifset
    380 @ifset MCORE
    381 
    382 @emph{Target MCORE options:}
    383    [@b{-jsri2bsr}] [@b{-sifilter}] [@b{-relax}]
    384    [@b{-mcpu=[210|340]}]
    385 @end ifset
    386 @ifset METAG
    387 
    388 @emph{Target Meta options:}
    389    [@b{-mcpu=@var{cpu}}] [@b{-mfpu=@var{cpu}}] [@b{-mdsp=@var{cpu}}]
    390 @end ifset
    391 @ifset MICROBLAZE
    392 @emph{Target MICROBLAZE options:}
    393 @c MicroBlaze has no machine-dependent assembler options.
    394 @end ifset
    395 @ifset MIPS
    396 
    397 @emph{Target MIPS options:}
    398    [@b{-nocpp}] [@b{-EL}] [@b{-EB}] [@b{-O}[@var{optimization level}]]
    399    [@b{-g}[@var{debug level}]] [@b{-G} @var{num}] [@b{-KPIC}] [@b{-call_shared}]
    400    [@b{-non_shared}] [@b{-xgot} [@b{-mvxworks-pic}]
    401    [@b{-mabi}=@var{ABI}] [@b{-32}] [@b{-n32}] [@b{-64}] [@b{-mfp32}] [@b{-mgp32}]
    402    [@b{-mfp64}] [@b{-mgp64}] [@b{-mfpxx}]
    403    [@b{-modd-spreg}] [@b{-mno-odd-spreg}]
    404    [@b{-march}=@var{CPU}] [@b{-mtune}=@var{CPU}] [@b{-mips1}] [@b{-mips2}]
    405    [@b{-mips3}] [@b{-mips4}] [@b{-mips5}] [@b{-mips32}] [@b{-mips32r2}]
    406    [@b{-mips32r3}] [@b{-mips32r5}] [@b{-mips32r6}] [@b{-mips64}] [@b{-mips64r2}]
    407    [@b{-mips64r3}] [@b{-mips64r5}] [@b{-mips64r6}]
    408    [@b{-construct-floats}] [@b{-no-construct-floats}]
    409    [@b{-mnan=@var{encoding}}]
    410    [@b{-trap}] [@b{-no-break}] [@b{-break}] [@b{-no-trap}]
    411    [@b{-mips16}] [@b{-no-mips16}]
    412    [@b{-mmicromips}] [@b{-mno-micromips}]
    413    [@b{-msmartmips}] [@b{-mno-smartmips}]
    414    [@b{-mips3d}] [@b{-no-mips3d}]
    415    [@b{-mdmx}] [@b{-no-mdmx}]
    416    [@b{-mdsp}] [@b{-mno-dsp}]
    417    [@b{-mdspr2}] [@b{-mno-dspr2}]
    418    [@b{-mmsa}] [@b{-mno-msa}]
    419    [@b{-mxpa}] [@b{-mno-xpa}]
    420    [@b{-mmxu}] [@b{-mno-mxu}]
    421    [@b{-mmt}] [@b{-mno-mt}]
    422    [@b{-mmcu}] [@b{-mno-mcu}]
    423    [@b{-minsn32}] [@b{-mno-insn32}]
    424    [@b{-mfix7000}] [@b{-mno-fix7000}]
    425    [@b{-mfix-rm7000}] [@b{-mno-fix-rm7000}]
    426    [@b{-mfix-vr4120}] [@b{-mno-fix-vr4120}]
    427    [@b{-mfix-vr4130}] [@b{-mno-fix-vr4130}]
    428    [@b{-mdebug}] [@b{-no-mdebug}]
    429    [@b{-mpdr}] [@b{-mno-pdr}]
    430 @end ifset
    431 @ifset MMIX
    432 
    433 @emph{Target MMIX options:}
    434    [@b{--fixed-special-register-names}] [@b{--globalize-symbols}]
    435    [@b{--gnu-syntax}] [@b{--relax}] [@b{--no-predefined-symbols}]
    436    [@b{--no-expand}] [@b{--no-merge-gregs}] [@b{-x}]
    437    [@b{--linker-allocated-gregs}]
    438 @end ifset
    439 @ifset NIOSII
    440 
    441 @emph{Target Nios II options:}
    442    [@b{-relax-all}] [@b{-relax-section}] [@b{-no-relax}]
    443    [@b{-EB}] [@b{-EL}]
    444 @end ifset
    445 @ifset NDS32
    446 
    447 @emph{Target NDS32 options:}
    448     [@b{-EL}] [@b{-EB}] [@b{-O}] [@b{-Os}] [@b{-mcpu=@var{cpu}}]
    449     [@b{-misa=@var{isa}}] [@b{-mabi=@var{abi}}] [@b{-mall-ext}]
    450     [@b{-m[no-]16-bit}]  [@b{-m[no-]perf-ext}] [@b{-m[no-]perf2-ext}]
    451     [@b{-m[no-]string-ext}] [@b{-m[no-]dsp-ext}] [@b{-m[no-]mac}] [@b{-m[no-]div}]
    452     [@b{-m[no-]audio-isa-ext}] [@b{-m[no-]fpu-sp-ext}] [@b{-m[no-]fpu-dp-ext}]
    453     [@b{-m[no-]fpu-fma}] [@b{-mfpu-freg=@var{FREG}}] [@b{-mreduced-regs}]
    454     [@b{-mfull-regs}] [@b{-m[no-]dx-regs}] [@b{-mpic}] [@b{-mno-relax}]
    455     [@b{-mb2bb}]
    456 @end ifset
    457 @ifset PDP11
    458 
    459 @emph{Target PDP11 options:}
    460    [@b{-mpic}|@b{-mno-pic}] [@b{-mall}] [@b{-mno-extensions}]
    461    [@b{-m}@var{extension}|@b{-mno-}@var{extension}]
    462    [@b{-m}@var{cpu}] [@b{-m}@var{machine}]
    463 @end ifset
    464 @ifset PJ
    465 
    466 @emph{Target picoJava options:}
    467    [@b{-mb}|@b{-me}]
    468 @end ifset
    469 @ifset PPC
    470 
    471 @emph{Target PowerPC options:}
    472    [@b{-a32}|@b{-a64}]
    473    [@b{-mpwrx}|@b{-mpwr2}|@b{-mpwr}|@b{-m601}|@b{-mppc}|@b{-mppc32}|@b{-m603}|@b{-m604}|@b{-m403}|@b{-m405}|
    474     @b{-m440}|@b{-m464}|@b{-m476}|@b{-m7400}|@b{-m7410}|@b{-m7450}|@b{-m7455}|@b{-m750cl}|@b{-mppc64}|
    475     @b{-m620}|@b{-me500}|@b{-e500x2}|@b{-me500mc}|@b{-me500mc64}|@b{-me5500}|@b{-me6500}|@b{-mppc64bridge}|
    476     @b{-mbooke}|@b{-mpower4}|@b{-mpwr4}|@b{-mpower5}|@b{-mpwr5}|@b{-mpwr5x}|@b{-mpower6}|@b{-mpwr6}|
    477     @b{-mpower7}|@b{-mpwr7}|@b{-mpower8}|@b{-mpwr8}|@b{-ma2}|@b{-mcell}|@b{-mspe}|@b{-mtitan}|@b{-me300}|@b{-mcom}]
    478    [@b{-many}] [@b{-maltivec}|@b{-mvsx}|@b{-mhtm}|@b{-mvle}]
    479    [@b{-mregnames}|@b{-mno-regnames}]
    480    [@b{-mrelocatable}|@b{-mrelocatable-lib}|@b{-K PIC}] [@b{-memb}]
    481    [@b{-mlittle}|@b{-mlittle-endian}|@b{-le}|@b{-mbig}|@b{-mbig-endian}|@b{-be}]
    482    [@b{-msolaris}|@b{-mno-solaris}]
    483    [@b{-nops=@var{count}}]
    484 @end ifset
    485 @ifset RL78
    486 
    487 @emph{Target RL78 options:}
    488    [@b{-mg10}]
    489    [@b{-m32bit-doubles}|@b{-m64bit-doubles}]
    490 @end ifset
    491 @ifset RX
    492 
    493 @emph{Target RX options:}
    494    [@b{-mlittle-endian}|@b{-mbig-endian}]
    495    [@b{-m32bit-doubles}|@b{-m64bit-doubles}]
    496    [@b{-muse-conventional-section-names}]
    497    [@b{-msmall-data-limit}]
    498    [@b{-mpid}]
    499    [@b{-mrelax}]
    500    [@b{-mint-register=@var{number}}]
    501    [@b{-mgcc-abi}|@b{-mrx-abi}]
    502 @end ifset
    503 @ifset S390
    504 
    505 @emph{Target s390 options:}
    506    [@b{-m31}|@b{-m64}] [@b{-mesa}|@b{-mzarch}] [@b{-march}=@var{CPU}]
    507    [@b{-mregnames}|@b{-mno-regnames}]
    508    [@b{-mwarn-areg-zero}]
    509 @end ifset
    510 @ifset SCORE
    511 
    512 @emph{Target SCORE options:}
    513    [@b{-EB}][@b{-EL}][@b{-FIXDD}][@b{-NWARN}]
    514    [@b{-SCORE5}][@b{-SCORE5U}][@b{-SCORE7}][@b{-SCORE3}]
    515    [@b{-march=score7}][@b{-march=score3}]
    516    [@b{-USE_R1}][@b{-KPIC}][@b{-O0}][@b{-G} @var{num}][@b{-V}]
    517 @end ifset
    518 @ifset SPARC
    519 
    520 @emph{Target SPARC options:}
    521 @c The order here is important.  See c-sparc.texi.
    522    [@b{-Av6}|@b{-Av7}|@b{-Av8}|@b{-Asparclet}|@b{-Asparclite}
    523     @b{-Av8plus}|@b{-Av8plusa}|@b{-Av9}|@b{-Av9a}]
    524    [@b{-xarch=v8plus}|@b{-xarch=v8plusa}] [@b{-bump}]
    525    [@b{-32}|@b{-64}]
    526 @end ifset
    527 @ifset TIC54X
    528 
    529 @emph{Target TIC54X options:}
    530  [@b{-mcpu=54[123589]}|@b{-mcpu=54[56]lp}] [@b{-mfar-mode}|@b{-mf}]
    531  [@b{-merrors-to-file} @var{<filename>}|@b{-me} @var{<filename>}]
    532 @end ifset
    533 
    534 @ifset TIC6X
    535 
    536 @emph{Target TIC6X options:}
    537    [@b{-march=@var{arch}}] [@b{-mbig-endian}|@b{-mlittle-endian}]
    538    [@b{-mdsbt}|@b{-mno-dsbt}] [@b{-mpid=no}|@b{-mpid=near}|@b{-mpid=far}]
    539    [@b{-mpic}|@b{-mno-pic}]
    540 @end ifset
    541 @ifset TILEGX
    542 
    543 @emph{Target TILE-Gx options:}
    544    [@b{-m32}|@b{-m64}][@b{-EB}][@b{-EL}]
    545 @end ifset
    546 @ifset TILEPRO
    547 @c TILEPro has no machine-dependent assembler options
    548 @end ifset
    549 
    550 @ifset XTENSA
    551 
    552 @emph{Target Xtensa options:}
    553  [@b{--[no-]text-section-literals}] [@b{--[no-]absolute-literals}]
    554  [@b{--[no-]target-align}] [@b{--[no-]longcalls}]
    555  [@b{--[no-]transform}]
    556  [@b{--rename-section} @var{oldname}=@var{newname}]
    557  [@b{--[no-]trampolines}]
    558 @end ifset
    559 
    560 @ifset Z80
    561 
    562 @emph{Target Z80 options:}
    563   [@b{-z80}] [@b{-r800}]
    564   [@b{ -ignore-undocumented-instructions}] [@b{-Wnud}]
    565   [@b{ -ignore-unportable-instructions}] [@b{-Wnup}]
    566   [@b{ -warn-undocumented-instructions}] [@b{-Wud}]
    567   [@b{ -warn-unportable-instructions}] [@b{-Wup}]
    568   [@b{ -forbid-undocumented-instructions}] [@b{-Fud}]
    569   [@b{ -forbid-unportable-instructions}] [@b{-Fup}]
    570 @end ifset
    571 
    572 @ifset Z8000
    573 @c Z8000 has no machine-dependent assembler options
    574 @end ifset
    575 
    576 @c man end
    577 @end smallexample
    578 
    579 @c man begin OPTIONS
    580 
    581 @table @gcctabopt
    582 @include at-file.texi
    583 
    584 @item -a[cdghlmns]
    585 Turn on listings, in any of a variety of ways:
    586 
    587 @table @gcctabopt
    588 @item -ac
    589 omit false conditionals
    590 
    591 @item -ad
    592 omit debugging directives
    593 
    594 @item -ag
    595 include general information, like @value{AS} version and options passed
    596 
    597 @item -ah
    598 include high-level source
    599 
    600 @item -al
    601 include assembly
    602 
    603 @item -am
    604 include macro expansions
    605 
    606 @item -an
    607 omit forms processing
    608 
    609 @item -as
    610 include symbols
    611 
    612 @item =file
    613 set the name of the listing file
    614 @end table
    615 
    616 You may combine these options; for example, use @samp{-aln} for assembly
    617 listing without forms processing.  The @samp{=file} option, if used, must be
    618 the last one.  By itself, @samp{-a} defaults to @samp{-ahls}.
    619 
    620 @item --alternate
    621 Begin in alternate macro mode.
    622 @ifclear man
    623 @xref{Altmacro,,@code{.altmacro}}.
    624 @end ifclear
    625 
    626 @item --compress-debug-sections
    627 Compress DWARF debug sections using zlib.  The debug sections are renamed
    628 to begin with @samp{.zdebug}, and the resulting object file may not be
    629 compatible with older linkers and object file utilities.
    630 
    631 @item --nocompress-debug-sections
    632 Do not compress DWARF debug sections.  This is the default.
    633 
    634 @item -D
    635 Ignored.  This option is accepted for script compatibility with calls to
    636 other assemblers.
    637 
    638 @item --debug-prefix-map @var{old}=@var{new}
    639 When assembling files in directory @file{@var{old}}, record debugging
    640 information describing them as in @file{@var{new}} instead.
    641 
    642 @item --defsym @var{sym}=@var{value}
    643 Define the symbol @var{sym} to be @var{value} before assembling the input file.
    644 @var{value} must be an integer constant.  As in C, a leading @samp{0x}
    645 indicates a hexadecimal value, and a leading @samp{0} indicates an octal
    646 value.  The value of the symbol can be overridden inside a source file via the
    647 use of a @code{.set} pseudo-op.
    648 
    649 @item -f
    650 ``fast''---skip whitespace and comment preprocessing (assume source is
    651 compiler output).
    652 
    653 @item -g
    654 @itemx --gen-debug
    655 Generate debugging information for each assembler source line using whichever
    656 debug format is preferred by the target.  This currently means either STABS,
    657 ECOFF or DWARF2.
    658 
    659 @item --gstabs
    660 Generate stabs debugging information for each assembler line.  This
    661 may help debugging assembler code, if the debugger can handle it.
    662 
    663 @item --gstabs+
    664 Generate stabs debugging information for each assembler line, with GNU
    665 extensions that probably only gdb can handle, and that could make other
    666 debuggers crash or refuse to read your program.  This
    667 may help debugging assembler code.  Currently the only GNU extension is
    668 the location of the current working directory at assembling time.
    669 
    670 @item --gdwarf-2
    671 Generate DWARF2 debugging information for each assembler line.  This
    672 may help debugging assembler code, if the debugger can handle it.  Note---this
    673 option is only supported by some targets, not all of them.
    674 
    675 @item --gdwarf-sections
    676 Instead of creating a .debug_line section, create a series of
    677 .debug_line.@var{foo} sections where @var{foo} is the name of the
    678 corresponding code section.  For example a code section called @var{.text.func}
    679 will have its dwarf line number information placed into a section called
    680 @var{.debug_line.text.func}.  If the code section is just called @var{.text}
    681 then debug line section will still be called just @var{.debug_line} without any
    682 suffix.
    683 
    684 @item --size-check=error
    685 @itemx --size-check=warning
    686 Issue an error or warning for invalid ELF .size directive.
    687 
    688 @item --help
    689 Print a summary of the command line options and exit.
    690 
    691 @item --target-help
    692 Print a summary of all target specific options and exit.
    693 
    694 @item -I @var{dir}
    695 Add directory @var{dir} to the search list for @code{.include} directives.
    696 
    697 @item -J
    698 Don't warn about signed overflow.
    699 
    700 @item -K
    701 @ifclear DIFF-TBL-KLUGE
    702 This option is accepted but has no effect on the @value{TARGET} family.
    703 @end ifclear
    704 @ifset DIFF-TBL-KLUGE
    705 Issue warnings when difference tables altered for long displacements.
    706 @end ifset
    707 
    708 @item -L
    709 @itemx --keep-locals
    710 Keep (in the symbol table) local symbols.  These symbols start with
    711 system-specific local label prefixes, typically @samp{.L} for ELF systems
    712 or @samp{L} for traditional a.out systems.
    713 @ifclear man
    714 @xref{Symbol Names}.
    715 @end ifclear
    716 
    717 @item --listing-lhs-width=@var{number}
    718 Set the maximum width, in words, of the output data column for an assembler
    719 listing to @var{number}.
    720 
    721 @item --listing-lhs-width2=@var{number}
    722 Set the maximum width, in words, of the output data column for continuation
    723 lines in an assembler listing to @var{number}.
    724 
    725 @item --listing-rhs-width=@var{number}
    726 Set the maximum width of an input source line, as displayed in a listing, to
    727 @var{number} bytes.
    728 
    729 @item --listing-cont-lines=@var{number}
    730 Set the maximum number of lines printed in a listing for a single line of input
    731 to @var{number} + 1.
    732 
    733 @item -o @var{objfile}
    734 Name the object-file output from @command{@value{AS}} @var{objfile}.
    735 
    736 @item -R
    737 Fold the data section into the text section.
    738 
    739 @kindex --hash-size=@var{number}
    740 Set the default size of GAS's hash tables to a prime number close to
    741 @var{number}.  Increasing this value can reduce the length of time it takes the
    742 assembler to perform its tasks, at the expense of increasing the assembler's
    743 memory requirements.  Similarly reducing this value can reduce the memory
    744 requirements at the expense of speed.
    745 
    746 @item --reduce-memory-overheads
    747 This option reduces GAS's memory requirements, at the expense of making the
    748 assembly processes slower.  Currently this switch is a synonym for
    749 @samp{--hash-size=4051}, but in the future it may have other effects as well.
    750 
    751 @item --statistics
    752 Print the maximum space (in bytes) and total time (in seconds) used by
    753 assembly.
    754 
    755 @item --strip-local-absolute
    756 Remove local absolute symbols from the outgoing symbol table.
    757 
    758 @item -v
    759 @itemx -version
    760 Print the @command{as} version.
    761 
    762 @item --version
    763 Print the @command{as} version and exit.
    764 
    765 @item -W
    766 @itemx --no-warn
    767 Suppress warning messages.
    768 
    769 @item --fatal-warnings
    770 Treat warnings as errors.
    771 
    772 @item --warn
    773 Don't suppress warning messages or treat them as errors.
    774 
    775 @item -w
    776 Ignored.
    777 
    778 @item -x
    779 Ignored.
    780 
    781 @item -Z
    782 Generate an object file even after errors.
    783 
    784 @item -- | @var{files} @dots{}
    785 Standard input, or source files to assemble.
    786 
    787 @end table
    788 @c man end
    789 
    790 @ifset AARCH64
    791 
    792 @ifclear man
    793 @xref{AArch64 Options}, for the options available when @value{AS} is configured
    794 for the 64-bit mode of the ARM Architecture (AArch64).
    795 @end ifclear
    796 
    797 @ifset man
    798 @c man begin OPTIONS
    799 The following options are available when @value{AS} is configured for the
    800 64-bit mode of the ARM Architecture (AArch64).
    801 @c man end
    802 @c man begin INCLUDE
    803 @include c-aarch64.texi
    804 @c ended inside the included file
    805 @end ifset
    806 
    807 @end ifset
    808 
    809 @ifset ALPHA
    810 
    811 @ifclear man
    812 @xref{Alpha Options}, for the options available when @value{AS} is configured
    813 for an Alpha processor.
    814 @end ifclear
    815 
    816 @ifset man
    817 @c man begin OPTIONS
    818 The following options are available when @value{AS} is configured for an Alpha
    819 processor.
    820 @c man end
    821 @c man begin INCLUDE
    822 @include c-alpha.texi
    823 @c ended inside the included file
    824 @end ifset
    825 
    826 @end ifset
    827 
    828 @c man begin OPTIONS
    829 @ifset ARC
    830 The following options are available when @value{AS} is configured for
    831 an ARC processor.
    832 
    833 @table @gcctabopt
    834 @item -marc[5|6|7|8]
    835 This option selects the core processor variant.
    836 @item -EB | -EL
    837 Select either big-endian (-EB) or little-endian (-EL) output.
    838 @end table
    839 @end ifset
    840 
    841 @ifset ARM
    842 The following options are available when @value{AS} is configured for the ARM
    843 processor family.
    844 
    845 @table @gcctabopt
    846 @item -mcpu=@var{processor}[+@var{extension}@dots{}]
    847 Specify which ARM processor variant is the target.
    848 @item -march=@var{architecture}[+@var{extension}@dots{}]
    849 Specify which ARM architecture variant is used by the target.
    850 @item -mfpu=@var{floating-point-format}
    851 Select which Floating Point architecture is the target.
    852 @item -mfloat-abi=@var{abi}
    853 Select which floating point ABI is in use.
    854 @item -mthumb
    855 Enable Thumb only instruction decoding.
    856 @item -mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant
    857 Select which procedure calling convention is in use.
    858 @item -EB | -EL
    859 Select either big-endian (-EB) or little-endian (-EL) output.
    860 @item -mthumb-interwork
    861 Specify that the code has been generated with interworking between Thumb and
    862 ARM code in mind.
    863 @item -mccs
    864 Turns on CodeComposer Studio assembly syntax compatibility mode.
    865 @item -k
    866 Specify that PIC code has been generated.
    867 @end table
    868 @end ifset
    869 @c man end
    870 
    871 @ifset Blackfin
    872 
    873 @ifclear man
    874 @xref{Blackfin Options}, for the options available when @value{AS} is
    875 configured for the Blackfin processor family.
    876 @end ifclear
    877 
    878 @ifset man
    879 @c man begin OPTIONS
    880 The following options are available when @value{AS} is configured for
    881 the Blackfin processor family.
    882 @c man end
    883 @c man begin INCLUDE
    884 @include c-bfin.texi
    885 @c ended inside the included file
    886 @end ifset
    887 
    888 @end ifset
    889 
    890 @c man begin OPTIONS
    891 @ifset CRIS
    892 See the info pages for documentation of the CRIS-specific options.
    893 @end ifset
    894 
    895 @ifset D10V
    896 The following options are available when @value{AS} is configured for
    897 a D10V processor.
    898 @table @gcctabopt
    899 @cindex D10V optimization
    900 @cindex optimization, D10V
    901 @item -O
    902 Optimize output by parallelizing instructions.
    903 @end table
    904 @end ifset
    905 
    906 @ifset D30V
    907 The following options are available when @value{AS} is configured for a D30V
    908 processor.
    909 @table @gcctabopt
    910 @cindex D30V optimization
    911 @cindex optimization, D30V
    912 @item -O
    913 Optimize output by parallelizing instructions.
    914 
    915 @cindex D30V nops
    916 @item -n
    917 Warn when nops are generated.
    918 
    919 @cindex D30V nops after 32-bit multiply
    920 @item -N
    921 Warn when a nop after a 32-bit multiply instruction is generated.
    922 @end table
    923 @end ifset
    924 @c man end
    925 
    926 @ifset EPIPHANY
    927 The following options are available when @value{AS} is configured for the
    928 Adapteva EPIPHANY series.
    929 
    930 @ifclear man
    931 @xref{Epiphany Options}, for the options available when @value{AS} is
    932 configured for an Epiphany processor.
    933 @end ifclear
    934 
    935 @ifset man
    936 @c man begin OPTIONS
    937 The following options are available when @value{AS} is configured for
    938 an Epiphany processor.
    939 @c man end
    940 @c man begin INCLUDE
    941 @include c-epiphany.texi
    942 @c ended inside the included file
    943 @end ifset
    944 
    945 @end ifset
    946 
    947 @ifset H8300
    948 
    949 @ifclear man
    950 @xref{H8/300 Options}, for the options available when @value{AS} is configured
    951 for an H8/300 processor.
    952 @end ifclear
    953 
    954 @ifset man
    955 @c man begin OPTIONS
    956 The following options are available when @value{AS} is configured for an H8/300
    957 processor.
    958 @c man end
    959 @c man begin INCLUDE
    960 @include c-h8300.texi
    961 @c ended inside the included file
    962 @end ifset
    963 
    964 @end ifset
    965 
    966 @ifset I80386
    967 
    968 @ifclear man
    969 @xref{i386-Options}, for the options available when @value{AS} is
    970 configured for an i386 processor.
    971 @end ifclear
    972 
    973 @ifset man
    974 @c man begin OPTIONS
    975 The following options are available when @value{AS} is configured for
    976 an i386 processor.
    977 @c man end
    978 @c man begin INCLUDE
    979 @include c-i386.texi
    980 @c ended inside the included file
    981 @end ifset
    982 
    983 @end ifset
    984 
    985 @c man begin OPTIONS
    986 @ifset I960
    987 The following options are available when @value{AS} is configured for the
    988 Intel 80960 processor.
    989 
    990 @table @gcctabopt
    991 @item -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC
    992 Specify which variant of the 960 architecture is the target.
    993 
    994 @item -b
    995 Add code to collect statistics about branches taken.
    996 
    997 @item -no-relax
    998 Do not alter compare-and-branch instructions for long displacements;
    999 error if necessary.
   1000 
   1001 @end table
   1002 @end ifset
   1003 
   1004 @ifset IP2K
   1005 The following options are available when @value{AS} is configured for the
   1006 Ubicom IP2K series.
   1007 
   1008 @table @gcctabopt
   1009 
   1010 @item -mip2022ext
   1011 Specifies that the extended IP2022 instructions are allowed.
   1012 
   1013 @item -mip2022
   1014 Restores the default behaviour, which restricts the permitted instructions to
   1015 just the basic IP2022 ones.
   1016 
   1017 @end table
   1018 @end ifset
   1019 
   1020 @ifset M32C
   1021 The following options are available when @value{AS} is configured for the
   1022 Renesas M32C and M16C processors.
   1023 
   1024 @table @gcctabopt
   1025 
   1026 @item -m32c
   1027 Assemble M32C instructions.
   1028 
   1029 @item -m16c
   1030 Assemble M16C instructions (the default).
   1031 
   1032 @item -relax
   1033 Enable support for link-time relaxations.
   1034 
   1035 @item -h-tick-hex
   1036 Support H'00 style hex constants in addition to 0x00 style.
   1037 
   1038 @end table
   1039 @end ifset
   1040 
   1041 @ifset M32R
   1042 The following options are available when @value{AS} is configured for the
   1043 Renesas M32R (formerly Mitsubishi M32R) series.
   1044 
   1045 @table @gcctabopt
   1046 
   1047 @item --m32rx
   1048 Specify which processor in the M32R family is the target.  The default
   1049 is normally the M32R, but this option changes it to the M32RX.
   1050 
   1051 @item --warn-explicit-parallel-conflicts or --Wp
   1052 Produce warning messages when questionable parallel constructs are
   1053 encountered.
   1054 
   1055 @item --no-warn-explicit-parallel-conflicts or --Wnp
   1056 Do not produce warning messages when questionable parallel constructs are
   1057 encountered.
   1058 
   1059 @end table
   1060 @end ifset
   1061 
   1062 @ifset M680X0
   1063 The following options are available when @value{AS} is configured for the
   1064 Motorola 68000 series.
   1065 
   1066 @table @gcctabopt
   1067 
   1068 @item -l
   1069 Shorten references to undefined symbols, to one word instead of two.
   1070 
   1071 @item -m68000 | -m68008 | -m68010 | -m68020 | -m68030
   1072 @itemx | -m68040 | -m68060 | -m68302 | -m68331 | -m68332
   1073 @itemx | -m68333 | -m68340 | -mcpu32 | -m5200
   1074 Specify what processor in the 68000 family is the target.  The default
   1075 is normally the 68020, but this can be changed at configuration time.
   1076 
   1077 @item -m68881 | -m68882 | -mno-68881 | -mno-68882
   1078 The target machine does (or does not) have a floating-point coprocessor.
   1079 The default is to assume a coprocessor for 68020, 68030, and cpu32.  Although
   1080 the basic 68000 is not compatible with the 68881, a combination of the
   1081 two can be specified, since it's possible to do emulation of the
   1082 coprocessor instructions with the main processor.
   1083 
   1084 @item -m68851 | -mno-68851
   1085 The target machine does (or does not) have a memory-management
   1086 unit coprocessor.  The default is to assume an MMU for 68020 and up.
   1087 
   1088 @end table
   1089 @end ifset
   1090 
   1091 @ifset NIOSII
   1092 
   1093 @ifclear man
   1094 @xref{Nios II Options}, for the options available when @value{AS} is configured
   1095 for an Altera Nios II processor.
   1096 @end ifclear
   1097 
   1098 @ifset man
   1099 @c man begin OPTIONS
   1100 The following options are available when @value{AS} is configured for an
   1101 Altera Nios II processor.
   1102 @c man end
   1103 @c man begin INCLUDE
   1104 @include c-nios2.texi
   1105 @c ended inside the included file
   1106 @end ifset
   1107 @end ifset
   1108 
   1109 @ifset PDP11
   1110 
   1111 For details about the PDP-11 machine dependent features options,
   1112 see @ref{PDP-11-Options}.
   1113 
   1114 @table @gcctabopt
   1115 @item -mpic | -mno-pic
   1116 Generate position-independent (or position-dependent) code.  The
   1117 default is @option{-mpic}.
   1118 
   1119 @item -mall
   1120 @itemx -mall-extensions
   1121 Enable all instruction set extensions.  This is the default.
   1122 
   1123 @item -mno-extensions
   1124 Disable all instruction set extensions.
   1125 
   1126 @item -m@var{extension} | -mno-@var{extension}
   1127 Enable (or disable) a particular instruction set extension.
   1128 
   1129 @item -m@var{cpu}
   1130 Enable the instruction set extensions supported by a particular CPU, and
   1131 disable all other extensions.
   1132 
   1133 @item -m@var{machine}
   1134 Enable the instruction set extensions supported by a particular machine
   1135 model, and disable all other extensions.
   1136 @end table
   1137 
   1138 @end ifset
   1139 
   1140 @ifset PJ
   1141 The following options are available when @value{AS} is configured for
   1142 a picoJava processor.
   1143 
   1144 @table @gcctabopt
   1145 
   1146 @cindex PJ endianness
   1147 @cindex endianness, PJ
   1148 @cindex big endian output, PJ
   1149 @item -mb
   1150 Generate ``big endian'' format output.
   1151 
   1152 @cindex little endian output, PJ
   1153 @item -ml
   1154 Generate ``little endian'' format output.
   1155 
   1156 @end table
   1157 @end ifset
   1158 
   1159 @ifset M68HC11
   1160 The following options are available when @value{AS} is configured for the
   1161 Motorola 68HC11 or 68HC12 series.
   1162 
   1163 @table @gcctabopt
   1164 
   1165 @item -m68hc11 | -m68hc12 | -m68hcs12 | -mm9s12x | -mm9s12xg
   1166 Specify what processor is the target.  The default is
   1167 defined by the configuration option when building the assembler.
   1168 
   1169 @item --xgate-ramoffset
   1170 Instruct the linker to offset RAM addresses from S12X address space into
   1171 XGATE address space.
   1172 
   1173 @item -mshort
   1174 Specify to use the 16-bit integer ABI.
   1175 
   1176 @item -mlong
   1177 Specify to use the 32-bit integer ABI.
   1178 
   1179 @item -mshort-double
   1180 Specify to use the 32-bit double ABI.
   1181 
   1182 @item -mlong-double
   1183 Specify to use the 64-bit double ABI.
   1184 
   1185 @item --force-long-branches
   1186 Relative branches are turned into absolute ones. This concerns
   1187 conditional branches, unconditional branches and branches to a
   1188 sub routine.
   1189 
   1190 @item -S | --short-branches
   1191 Do not turn relative branches into absolute ones
   1192 when the offset is out of range.
   1193 
   1194 @item --strict-direct-mode
   1195 Do not turn the direct addressing mode into extended addressing mode
   1196 when the instruction does not support direct addressing mode.
   1197 
   1198 @item --print-insn-syntax
   1199 Print the syntax of instruction in case of error.
   1200 
   1201 @item --print-opcodes
   1202 Print the list of instructions with syntax and then exit.
   1203 
   1204 @item --generate-example
   1205 Print an example of instruction for each possible instruction and then exit.
   1206 This option is only useful for testing @command{@value{AS}}.
   1207 
   1208 @end table
   1209 @end ifset
   1210 
   1211 @ifset SPARC
   1212 The following options are available when @command{@value{AS}} is configured
   1213 for the SPARC architecture:
   1214 
   1215 @table @gcctabopt
   1216 @item -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite
   1217 @itemx -Av8plus | -Av8plusa | -Av9 | -Av9a
   1218 Explicitly select a variant of the SPARC architecture.
   1219 
   1220 @samp{-Av8plus} and @samp{-Av8plusa} select a 32 bit environment.
   1221 @samp{-Av9} and @samp{-Av9a} select a 64 bit environment.
   1222 
   1223 @samp{-Av8plusa} and @samp{-Av9a} enable the SPARC V9 instruction set with
   1224 UltraSPARC extensions.
   1225 
   1226 @item -xarch=v8plus | -xarch=v8plusa
   1227 For compatibility with the Solaris v9 assembler.  These options are
   1228 equivalent to -Av8plus and -Av8plusa, respectively.
   1229 
   1230 @item -bump
   1231 Warn when the assembler switches to another architecture.
   1232 @end table
   1233 @end ifset
   1234 
   1235 @ifset TIC54X
   1236 The following options are available when @value{AS} is configured for the 'c54x
   1237 architecture.
   1238 
   1239 @table @gcctabopt
   1240 @item -mfar-mode
   1241 Enable extended addressing mode.  All addresses and relocations will assume
   1242 extended addressing (usually 23 bits).
   1243 @item -mcpu=@var{CPU_VERSION}
   1244 Sets the CPU version being compiled for.
   1245 @item -merrors-to-file @var{FILENAME}
   1246 Redirect error output to a file, for broken systems which don't support such
   1247 behaviour in the shell.
   1248 @end table
   1249 @end ifset
   1250 
   1251 @ifset MIPS
   1252 The following options are available when @value{AS} is configured for
   1253 a MIPS processor.
   1254 
   1255 @table @gcctabopt
   1256 @item -G @var{num}
   1257 This option sets the largest size of an object that can be referenced
   1258 implicitly with the @code{gp} register.  It is only accepted for targets that
   1259 use ECOFF format, such as a DECstation running Ultrix.  The default value is 8.
   1260 
   1261 @cindex MIPS endianness
   1262 @cindex endianness, MIPS
   1263 @cindex big endian output, MIPS
   1264 @item -EB
   1265 Generate ``big endian'' format output.
   1266 
   1267 @cindex little endian output, MIPS
   1268 @item -EL
   1269 Generate ``little endian'' format output.
   1270 
   1271 @cindex MIPS ISA
   1272 @item -mips1
   1273 @itemx -mips2
   1274 @itemx -mips3
   1275 @itemx -mips4
   1276 @itemx -mips5
   1277 @itemx -mips32
   1278 @itemx -mips32r2
   1279 @itemx -mips32r3
   1280 @itemx -mips32r5
   1281 @itemx -mips32r6
   1282 @itemx -mips64
   1283 @itemx -mips64r2
   1284 @itemx -mips64r3
   1285 @itemx -mips64r5
   1286 @itemx -mips64r6
   1287 Generate code for a particular MIPS Instruction Set Architecture level.
   1288 @samp{-mips1} is an alias for @samp{-march=r3000}, @samp{-mips2} is an
   1289 alias for @samp{-march=r6000}, @samp{-mips3} is an alias for
   1290 @samp{-march=r4000} and @samp{-mips4} is an alias for @samp{-march=r8000}.
   1291 @samp{-mips5}, @samp{-mips32}, @samp{-mips32r2}, @samp{-mips32r3},
   1292 @samp{-mips32r5}, @samp{-mips32r6}, @samp{-mips64}, @samp{-mips64r2},
   1293 @samp{-mips64r3}, @samp{-mips64r5}, and @samp{-mips64r6} correspond to generic
   1294 MIPS V, MIPS32, MIPS32 Release 2, MIPS32 Release 3, MIPS32 Release 5, MIPS32
   1295 Release 6, MIPS64, MIPS64 Release 2, MIPS64 Release 3, MIPS64 Release 5, and
   1296 MIPS64 Release 6 ISA processors, respectively.
   1297 
   1298 @item -march=@var{cpu}
   1299 Generate code for a particular MIPS CPU.
   1300 
   1301 @item -mtune=@var{cpu}
   1302 Schedule and tune for a particular MIPS CPU.
   1303 
   1304 @item -mfix7000
   1305 @itemx -mno-fix7000
   1306 Cause nops to be inserted if the read of the destination register
   1307 of an mfhi or mflo instruction occurs in the following two instructions.
   1308 
   1309 @item -mfix-rm7000
   1310 @itemx -mno-fix-rm7000
   1311 Cause nops to be inserted if a dmult or dmultu instruction is
   1312 followed by a load instruction.
   1313 
   1314 @item -mdebug
   1315 @itemx -no-mdebug
   1316 Cause stabs-style debugging output to go into an ECOFF-style .mdebug
   1317 section instead of the standard ELF .stabs sections.
   1318 
   1319 @item -mpdr
   1320 @itemx -mno-pdr
   1321 Control generation of @code{.pdr} sections.
   1322 
   1323 @item -mgp32
   1324 @itemx -mfp32
   1325 The register sizes are normally inferred from the ISA and ABI, but these
   1326 flags force a certain group of registers to be treated as 32 bits wide at
   1327 all times.  @samp{-mgp32} controls the size of general-purpose registers
   1328 and @samp{-mfp32} controls the size of floating-point registers.
   1329 
   1330 @item -mgp64
   1331 @itemx -mfp64
   1332 The register sizes are normally inferred from the ISA and ABI, but these
   1333 flags force a certain group of registers to be treated as 64 bits wide at
   1334 all times.  @samp{-mgp64} controls the size of general-purpose registers
   1335 and @samp{-mfp64} controls the size of floating-point registers.
   1336 
   1337 @item -mfpxx
   1338 The register sizes are normally inferred from the ISA and ABI, but using
   1339 this flag in combination with @samp{-mabi=32} enables an ABI variant
   1340 which will operate correctly with floating-point registers which are
   1341 32 or 64 bits wide.
   1342 
   1343 @item -modd-spreg
   1344 @itemx -mno-odd-spreg
   1345 Enable use of floating-point operations on odd-numbered single-precision
   1346 registers when supported by the ISA.  @samp{-mfpxx} implies
   1347 @samp{-mno-odd-spreg}, otherwise the default is @samp{-modd-spreg}.
   1348 
   1349 @item -mips16
   1350 @itemx -no-mips16
   1351 Generate code for the MIPS 16 processor.  This is equivalent to putting
   1352 @code{.set mips16} at the start of the assembly file.  @samp{-no-mips16}
   1353 turns off this option.
   1354 
   1355 @item -mmicromips
   1356 @itemx -mno-micromips
   1357 Generate code for the microMIPS processor.  This is equivalent to putting
   1358 @code{.set micromips} at the start of the assembly file.  @samp{-mno-micromips}
   1359 turns off this option.  This is equivalent to putting @code{.set nomicromips}
   1360 at the start of the assembly file.
   1361 
   1362 @item -msmartmips
   1363 @itemx -mno-smartmips
   1364 Enables the SmartMIPS extension to the MIPS32 instruction set. This is
   1365 equivalent to putting @code{.set smartmips} at the start of the assembly file.
   1366 @samp{-mno-smartmips} turns off this option.
   1367 
   1368 @item -mips3d
   1369 @itemx -no-mips3d
   1370 Generate code for the MIPS-3D Application Specific Extension.
   1371 This tells the assembler to accept MIPS-3D instructions.
   1372 @samp{-no-mips3d} turns off this option.
   1373 
   1374 @item -mdmx
   1375 @itemx -no-mdmx
   1376 Generate code for the MDMX Application Specific Extension.
   1377 This tells the assembler to accept MDMX instructions.
   1378 @samp{-no-mdmx} turns off this option.
   1379 
   1380 @item -mdsp
   1381 @itemx -mno-dsp
   1382 Generate code for the DSP Release 1 Application Specific Extension.
   1383 This tells the assembler to accept DSP Release 1 instructions.
   1384 @samp{-mno-dsp} turns off this option.
   1385 
   1386 @item -mdspr2
   1387 @itemx -mno-dspr2
   1388 Generate code for the DSP Release 2 Application Specific Extension.
   1389 This option implies -mdsp.
   1390 This tells the assembler to accept DSP Release 2 instructions.
   1391 @samp{-mno-dspr2} turns off this option.
   1392 
   1393 @item -mmsa
   1394 @itemx -mno-msa
   1395 Generate code for the MIPS SIMD Architecture Extension.
   1396 This tells the assembler to accept MSA instructions.
   1397 @samp{-mno-msa} turns off this option.
   1398 
   1399 @item -mxpa
   1400 @itemx -mno-xpa
   1401 Generate code for the MIPS eXtended Physical Address (XPA) Extension.
   1402 This tells the assembler to accept XPA instructions.
   1403 @samp{-mno-xpa} turns off this option.
   1404 
   1405 @item -mmxu
   1406 @itemx -mno-mxu
   1407 Generate code for the XBurst MXU Extension.
   1408 This tells the assembler to accept MXU instructions.
   1409 @samp{-mno-mxu} turns off this option.
   1410 
   1411 @item -mmt
   1412 @itemx -mno-mt
   1413 Generate code for the MT Application Specific Extension.
   1414 This tells the assembler to accept MT instructions.
   1415 @samp{-mno-mt} turns off this option.
   1416 
   1417 @item -mmcu
   1418 @itemx -mno-mcu
   1419 Generate code for the MCU Application Specific Extension.
   1420 This tells the assembler to accept MCU instructions.
   1421 @samp{-mno-mcu} turns off this option.
   1422 
   1423 @item -minsn32
   1424 @itemx -mno-insn32
   1425 Only use 32-bit instruction encodings when generating code for the
   1426 microMIPS processor.  This option inhibits the use of any 16-bit
   1427 instructions.  This is equivalent to putting @code{.set insn32} at
   1428 the start of the assembly file.  @samp{-mno-insn32} turns off this
   1429 option.  This is equivalent to putting @code{.set noinsn32} at the
   1430 start of the assembly file.  By default @samp{-mno-insn32} is
   1431 selected, allowing all instructions to be used.
   1432 
   1433 @item --construct-floats
   1434 @itemx --no-construct-floats
   1435 The @samp{--no-construct-floats} option disables the construction of
   1436 double width floating point constants by loading the two halves of the
   1437 value into the two single width floating point registers that make up
   1438 the double width register.  By default @samp{--construct-floats} is
   1439 selected, allowing construction of these floating point constants.
   1440 
   1441 @item --relax-branch
   1442 @itemx --no-relax-branch
   1443 The @samp{--relax-branch} option enables the relaxation of out-of-range
   1444 branches.  By default @samp{--no-relax-branch} is selected, causing any
   1445 out-of-range branches to produce an error.
   1446 
   1447 @item -mnan=@var{encoding}
   1448 Select between the IEEE 754-2008 (@option{-mnan=2008}) or the legacy
   1449 (@option{-mnan=legacy}) NaN encoding format.  The latter is the default.
   1450 
   1451 @cindex emulation
   1452 @item --emulation=@var{name}
   1453 This option was formerly used to switch between ELF and ECOFF output
   1454 on targets like IRIX 5 that supported both.  MIPS ECOFF support was
   1455 removed in GAS 2.24, so the option now serves little purpose.
   1456 It is retained for backwards compatibility.
   1457 
   1458 The available configuration names are: @samp{mipself}, @samp{mipslelf} and
   1459 @samp{mipsbelf}.  Choosing @samp{mipself} now has no effect, since the output
   1460 is always ELF.  @samp{mipslelf} and @samp{mipsbelf} select little- and
   1461 big-endian output respectively, but @samp{-EL} and @samp{-EB} are now the
   1462 preferred options instead.
   1463 
   1464 @item -nocpp
   1465 @command{@value{AS}} ignores this option.  It is accepted for compatibility with
   1466 the native tools.
   1467 
   1468 @item --trap
   1469 @itemx --no-trap
   1470 @itemx --break
   1471 @itemx --no-break
   1472 Control how to deal with multiplication overflow and division by zero.
   1473 @samp{--trap} or @samp{--no-break} (which are synonyms) take a trap exception
   1474 (and only work for Instruction Set Architecture level 2 and higher);
   1475 @samp{--break} or @samp{--no-trap} (also synonyms, and the default) take a
   1476 break exception.
   1477 
   1478 @item -n
   1479 When this option is used, @command{@value{AS}} will issue a warning every
   1480 time it generates a nop instruction from a macro.
   1481 @end table
   1482 @end ifset
   1483 
   1484 @ifset MCORE
   1485 The following options are available when @value{AS} is configured for
   1486 an MCore processor.
   1487 
   1488 @table @gcctabopt
   1489 @item -jsri2bsr
   1490 @itemx -nojsri2bsr
   1491 Enable or disable the JSRI to BSR transformation.  By default this is enabled.
   1492 The command line option @samp{-nojsri2bsr} can be used to disable it.
   1493 
   1494 @item -sifilter
   1495 @itemx -nosifilter
   1496 Enable or disable the silicon filter behaviour.  By default this is disabled.
   1497 The default can be overridden by the @samp{-sifilter} command line option.
   1498 
   1499 @item -relax
   1500 Alter jump instructions for long displacements.
   1501 
   1502 @item -mcpu=[210|340]
   1503 Select the cpu type on the target hardware.  This controls which instructions
   1504 can be assembled.
   1505 
   1506 @item -EB
   1507 Assemble for a big endian target.
   1508 
   1509 @item -EL
   1510 Assemble for a little endian target.
   1511 
   1512 @end table
   1513 @end ifset
   1514 @c man end
   1515 
   1516 @ifset METAG
   1517 
   1518 @ifclear man
   1519 @xref{Meta Options}, for the options available when @value{AS} is configured
   1520 for a Meta processor.
   1521 @end ifclear
   1522 
   1523 @ifset man
   1524 @c man begin OPTIONS
   1525 The following options are available when @value{AS} is configured for a
   1526 Meta processor.
   1527 @c man end
   1528 @c man begin INCLUDE
   1529 @include c-metag.texi
   1530 @c ended inside the included file
   1531 @end ifset
   1532 
   1533 @end ifset
   1534 
   1535 @c man begin OPTIONS
   1536 @ifset MMIX
   1537 See the info pages for documentation of the MMIX-specific options.
   1538 @end ifset
   1539 
   1540 @ifset NDS32
   1541 
   1542 @ifclear man
   1543 @xref{NDS32 Options}, for the options available when @value{AS} is configured
   1544 for a NDS32 processor.
   1545 @end ifclear
   1546 @c ended inside the included file
   1547 @end ifset
   1548 
   1549 @ifset man
   1550 @c man begin OPTIONS
   1551 The following options are available when @value{AS} is configured for a
   1552 NDS32 processor.
   1553 @c man end
   1554 @c man begin INCLUDE
   1555 @include c-nds32.texi
   1556 @c ended inside the included file
   1557 @end ifset
   1558 
   1559 @c man end
   1560 @ifset PPC
   1561 
   1562 @ifclear man
   1563 @xref{PowerPC-Opts}, for the options available when @value{AS} is configured
   1564 for a PowerPC processor.
   1565 @end ifclear
   1566 
   1567 @ifset man
   1568 @c man begin OPTIONS
   1569 The following options are available when @value{AS} is configured for a
   1570 PowerPC processor.
   1571 @c man end
   1572 @c man begin INCLUDE
   1573 @include c-ppc.texi
   1574 @c ended inside the included file
   1575 @end ifset
   1576 
   1577 @end ifset
   1578 
   1579 @c man begin OPTIONS
   1580 @ifset RX
   1581 See the info pages for documentation of the RX-specific options.
   1582 @end ifset
   1583 
   1584 @ifset S390
   1585 The following options are available when @value{AS} is configured for the s390
   1586 processor family.
   1587 
   1588 @table @gcctabopt
   1589 @item -m31
   1590 @itemx -m64
   1591 Select the word size, either 31/32 bits or 64 bits.
   1592 @item -mesa
   1593 @item -mzarch
   1594 Select the architecture mode, either the Enterprise System
   1595 Architecture (esa) or the z/Architecture mode (zarch).
   1596 @item -march=@var{processor}
   1597 Specify which s390 processor variant is the target, @samp{g6}, @samp{g6},
   1598 @samp{z900}, @samp{z990}, @samp{z9-109}, @samp{z9-ec}, @samp{z10},
   1599 @samp{z196}, or @samp{zEC12}.
   1600 @item -mregnames
   1601 @itemx -mno-regnames
   1602 Allow or disallow symbolic names for registers.
   1603 @item -mwarn-areg-zero
   1604 Warn whenever the operand for a base or index register has been specified
   1605 but evaluates to zero.
   1606 @end table
   1607 @end ifset
   1608 @c man end
   1609 
   1610 @ifset TIC6X
   1611 
   1612 @ifclear man
   1613 @xref{TIC6X Options}, for the options available when @value{AS} is configured
   1614 for a TMS320C6000 processor.
   1615 @end ifclear
   1616 
   1617 @ifset man
   1618 @c man begin OPTIONS
   1619 The following options are available when @value{AS} is configured for a
   1620 TMS320C6000 processor.
   1621 @c man end
   1622 @c man begin INCLUDE
   1623 @include c-tic6x.texi
   1624 @c ended inside the included file
   1625 @end ifset
   1626 
   1627 @end ifset
   1628 
   1629 @ifset TILEGX
   1630 
   1631 @ifclear man
   1632 @xref{TILE-Gx Options}, for the options available when @value{AS} is configured
   1633 for a TILE-Gx processor.
   1634 @end ifclear
   1635 
   1636 @ifset man
   1637 @c man begin OPTIONS
   1638 The following options are available when @value{AS} is configured for a TILE-Gx
   1639 processor.
   1640 @c man end
   1641 @c man begin INCLUDE
   1642 @include c-tilegx.texi
   1643 @c ended inside the included file
   1644 @end ifset
   1645 
   1646 @end ifset
   1647 
   1648 @ifset XTENSA
   1649 
   1650 @ifclear man
   1651 @xref{Xtensa Options}, for the options available when @value{AS} is configured
   1652 for an Xtensa processor.
   1653 @end ifclear
   1654 
   1655 @ifset man
   1656 @c man begin OPTIONS
   1657 The following options are available when @value{AS} is configured for an
   1658 Xtensa processor.
   1659 @c man end
   1660 @c man begin INCLUDE
   1661 @include c-xtensa.texi
   1662 @c ended inside the included file
   1663 @end ifset
   1664 
   1665 @end ifset
   1666 
   1667 @c man begin OPTIONS
   1668 
   1669 @ifset Z80
   1670 The following options are available when @value{AS} is configured for
   1671 a Z80 family processor.
   1672 @table @gcctabopt
   1673 @item -z80
   1674 Assemble for Z80 processor.
   1675 @item -r800
   1676 Assemble for R800 processor.
   1677 @item  -ignore-undocumented-instructions
   1678 @itemx -Wnud
   1679 Assemble undocumented Z80 instructions that also work on R800 without warning.
   1680 @item  -ignore-unportable-instructions
   1681 @itemx -Wnup
   1682 Assemble all undocumented Z80 instructions without warning.
   1683 @item  -warn-undocumented-instructions
   1684 @itemx -Wud
   1685 Issue a warning for undocumented Z80 instructions that also work on R800.
   1686 @item  -warn-unportable-instructions
   1687 @itemx -Wup
   1688 Issue a warning for undocumented Z80 instructions that do not work on R800.
   1689 @item  -forbid-undocumented-instructions
   1690 @itemx -Fud
   1691 Treat all undocumented instructions as errors.
   1692 @item  -forbid-unportable-instructions
   1693 @itemx -Fup
   1694 Treat undocumented Z80 instructions that do not work on R800 as errors.
   1695 @end table
   1696 @end ifset
   1697 
   1698 @c man end
   1699 
   1700 @menu
   1701 * Manual::                      Structure of this Manual
   1702 * GNU Assembler::               The GNU Assembler
   1703 * Object Formats::              Object File Formats
   1704 * Command Line::                Command Line
   1705 * Input Files::                 Input Files
   1706 * Object::                      Output (Object) File
   1707 * Errors::                      Error and Warning Messages
   1708 @end menu
   1709 
   1710 @node Manual
   1711 @section Structure of this Manual
   1712 
   1713 @cindex manual, structure and purpose
   1714 This manual is intended to describe what you need to know to use
   1715 @sc{gnu} @command{@value{AS}}.  We cover the syntax expected in source files, including
   1716 notation for symbols, constants, and expressions; the directives that
   1717 @command{@value{AS}} understands; and of course how to invoke @command{@value{AS}}.
   1718 
   1719 @ifclear GENERIC
   1720 We also cover special features in the @value{TARGET}
   1721 configuration of @command{@value{AS}}, including assembler directives.
   1722 @end ifclear
   1723 @ifset GENERIC
   1724 This manual also describes some of the machine-dependent features of
   1725 various flavors of the assembler.
   1726 @end ifset
   1727 
   1728 @cindex machine instructions (not covered)
   1729 On the other hand, this manual is @emph{not} intended as an introduction
   1730 to programming in assembly language---let alone programming in general!
   1731 In a similar vein, we make no attempt to introduce the machine
   1732 architecture; we do @emph{not} describe the instruction set, standard
   1733 mnemonics, registers or addressing modes that are standard to a
   1734 particular architecture.
   1735 @ifset GENERIC
   1736 You may want to consult the manufacturer's
   1737 machine architecture manual for this information.
   1738 @end ifset
   1739 @ifclear GENERIC
   1740 @ifset H8/300
   1741 For information on the H8/300 machine instruction set, see @cite{H8/300
   1742 Series Programming Manual}.  For the H8/300H, see @cite{H8/300H Series
   1743 Programming Manual} (Renesas).
   1744 @end ifset
   1745 @ifset SH
   1746 For information on the Renesas (formerly Hitachi) / SuperH SH machine instruction set,
   1747 see @cite{SH-Microcomputer User's Manual} (Renesas) or
   1748 @cite{SH-4 32-bit CPU Core Architecture} (SuperH) and
   1749 @cite{SuperH (SH) 64-Bit RISC Series} (SuperH).
   1750 @end ifset
   1751 @ifset Z8000
   1752 For information on the Z8000 machine instruction set, see @cite{Z8000 CPU Technical Manual}
   1753 @end ifset
   1754 @end ifclear
   1755 
   1756 @c I think this is premature---doc (a] cygnus.com, 17jan1991
   1757 @ignore
   1758 Throughout this manual, we assume that you are running @dfn{GNU},
   1759 the portable operating system from the @dfn{Free Software
   1760 Foundation, Inc.}.  This restricts our attention to certain kinds of
   1761 computer (in particular, the kinds of computers that @sc{gnu} can run on);
   1762 once this assumption is granted examples and definitions need less
   1763 qualification.
   1764 
   1765 @command{@value{AS}} is part of a team of programs that turn a high-level
   1766 human-readable series of instructions into a low-level
   1767 computer-readable series of instructions.  Different versions of
   1768 @command{@value{AS}} are used for different kinds of computer.
   1769 @end ignore
   1770 
   1771 @c There used to be a section "Terminology" here, which defined
   1772 @c "contents", "byte", "word", and "long".  Defining "word" to any
   1773 @c particular size is confusing when the .word directive may generate 16
   1774 @c bits on one machine and 32 bits on another; in general, for the user
   1775 @c version of this manual, none of these terms seem essential to define.
   1776 @c They were used very little even in the former draft of the manual;
   1777 @c this draft makes an effort to avoid them (except in names of
   1778 @c directives).
   1779 
   1780 @node GNU Assembler
   1781 @section The GNU Assembler
   1782 
   1783 @c man begin DESCRIPTION
   1784 
   1785 @sc{gnu} @command{as} is really a family of assemblers.
   1786 @ifclear GENERIC
   1787 This manual describes @command{@value{AS}}, a member of that family which is
   1788 configured for the @value{TARGET} architectures.
   1789 @end ifclear
   1790 If you use (or have used) the @sc{gnu} assembler on one architecture, you
   1791 should find a fairly similar environment when you use it on another
   1792 architecture.  Each version has much in common with the others,
   1793 including object file formats, most assembler directives (often called
   1794 @dfn{pseudo-ops}) and assembler syntax.@refill
   1795 
   1796 @cindex purpose of @sc{gnu} assembler
   1797 @command{@value{AS}} is primarily intended to assemble the output of the
   1798 @sc{gnu} C compiler @code{@value{GCC}} for use by the linker
   1799 @code{@value{LD}}.  Nevertheless, we've tried to make @command{@value{AS}}
   1800 assemble correctly everything that other assemblers for the same
   1801 machine would assemble.
   1802 @ifset VAX
   1803 Any exceptions are documented explicitly (@pxref{Machine Dependencies}).
   1804 @end ifset
   1805 @ifset M680X0
   1806 @c This remark should appear in generic version of manual; assumption
   1807 @c here is that generic version sets M680x0.
   1808 This doesn't mean @command{@value{AS}} always uses the same syntax as another
   1809 assembler for the same architecture; for example, we know of several
   1810 incompatible versions of 680x0 assembly language syntax.
   1811 @end ifset
   1812 
   1813 @c man end
   1814 
   1815 Unlike older assemblers, @command{@value{AS}} is designed to assemble a source
   1816 program in one pass of the source file.  This has a subtle impact on the
   1817 @kbd{.org} directive (@pxref{Org,,@code{.org}}).
   1818 
   1819 @node Object Formats
   1820 @section Object File Formats
   1821 
   1822 @cindex object file format
   1823 The @sc{gnu} assembler can be configured to produce several alternative
   1824 object file formats.  For the most part, this does not affect how you
   1825 write assembly language programs; but directives for debugging symbols
   1826 are typically different in different file formats.  @xref{Symbol
   1827 Attributes,,Symbol Attributes}.
   1828 @ifclear GENERIC
   1829 @ifclear MULTI-OBJ
   1830 For the @value{TARGET} target, @command{@value{AS}} is configured to produce
   1831 @value{OBJ-NAME} format object files.
   1832 @end ifclear
   1833 @c The following should exhaust all configs that set MULTI-OBJ, ideally
   1834 @ifset I960
   1835 On the @value{TARGET}, @command{@value{AS}} can be configured to produce either
   1836 @code{b.out} or COFF format object files.
   1837 @end ifset
   1838 @ifset HPPA
   1839 On the @value{TARGET}, @command{@value{AS}} can be configured to produce either
   1840 SOM or ELF format object files.
   1841 @end ifset
   1842 @end ifclear
   1843 
   1844 @node Command Line
   1845 @section Command Line
   1846 
   1847 @cindex command line conventions
   1848 
   1849 After the program name @command{@value{AS}}, the command line may contain
   1850 options and file names.  Options may appear in any order, and may be
   1851 before, after, or between file names.  The order of file names is
   1852 significant.
   1853 
   1854 @cindex standard input, as input file
   1855 @kindex --
   1856 @file{--} (two hyphens) by itself names the standard input file
   1857 explicitly, as one of the files for @command{@value{AS}} to assemble.
   1858 
   1859 @cindex options, command line
   1860 Except for @samp{--} any command line argument that begins with a
   1861 hyphen (@samp{-}) is an option.  Each option changes the behavior of
   1862 @command{@value{AS}}.  No option changes the way another option works.  An
   1863 option is a @samp{-} followed by one or more letters; the case of
   1864 the letter is important.   All options are optional.
   1865 
   1866 Some options expect exactly one file name to follow them.  The file
   1867 name may either immediately follow the option's letter (compatible
   1868 with older assemblers) or it may be the next command argument (@sc{gnu}
   1869 standard).  These two command lines are equivalent:
   1870 
   1871 @smallexample
   1872 @value{AS} -o my-object-file.o mumble.s
   1873 @value{AS} -omy-object-file.o mumble.s
   1874 @end smallexample
   1875 
   1876 @node Input Files
   1877 @section Input Files
   1878 
   1879 @cindex input
   1880 @cindex source program
   1881 @cindex files, input
   1882 We use the phrase @dfn{source program}, abbreviated @dfn{source}, to
   1883 describe the program input to one run of @command{@value{AS}}.  The program may
   1884 be in one or more files; how the source is partitioned into files
   1885 doesn't change the meaning of the source.
   1886 
   1887 @c I added "con" prefix to "catenation" just to prove I can overcome my
   1888 @c APL training...   doc (a] cygnus.com
   1889 The source program is a concatenation of the text in all the files, in the
   1890 order specified.
   1891 
   1892 @c man begin DESCRIPTION
   1893 Each time you run @command{@value{AS}} it assembles exactly one source
   1894 program.  The source program is made up of one or more files.
   1895 (The standard input is also a file.)
   1896 
   1897 You give @command{@value{AS}} a command line that has zero or more input file
   1898 names.  The input files are read (from left file name to right).  A
   1899 command line argument (in any position) that has no special meaning
   1900 is taken to be an input file name.
   1901 
   1902 If you give @command{@value{AS}} no file names it attempts to read one input file
   1903 from the @command{@value{AS}} standard input, which is normally your terminal.  You
   1904 may have to type @key{ctl-D} to tell @command{@value{AS}} there is no more program
   1905 to assemble.
   1906 
   1907 Use @samp{--} if you need to explicitly name the standard input file
   1908 in your command line.
   1909 
   1910 If the source is empty, @command{@value{AS}} produces a small, empty object
   1911 file.
   1912 
   1913 @c man end
   1914 
   1915 @subheading Filenames and Line-numbers
   1916 
   1917 @cindex input file linenumbers
   1918 @cindex line numbers, in input files
   1919 There are two ways of locating a line in the input file (or files) and
   1920 either may be used in reporting error messages.  One way refers to a line
   1921 number in a physical file; the other refers to a line number in a
   1922 ``logical'' file.  @xref{Errors, ,Error and Warning Messages}.
   1923 
   1924 @dfn{Physical files} are those files named in the command line given
   1925 to @command{@value{AS}}.
   1926 
   1927 @dfn{Logical files} are simply names declared explicitly by assembler
   1928 directives; they bear no relation to physical files.  Logical file names help
   1929 error messages reflect the original source file, when @command{@value{AS}} source
   1930 is itself synthesized from other files.  @command{@value{AS}} understands the
   1931 @samp{#} directives emitted by the @code{@value{GCC}} preprocessor.  See also
   1932 @ref{File,,@code{.file}}.
   1933 
   1934 @node Object
   1935 @section Output (Object) File
   1936 
   1937 @cindex object file
   1938 @cindex output file
   1939 @kindex a.out
   1940 @kindex .o
   1941 Every time you run @command{@value{AS}} it produces an output file, which is
   1942 your assembly language program translated into numbers.  This file
   1943 is the object file.  Its default name is
   1944 @ifclear BOUT
   1945 @code{a.out}.
   1946 @end ifclear
   1947 @ifset BOUT
   1948 @ifset GENERIC
   1949 @code{a.out}, or
   1950 @end ifset
   1951 @code{b.out} when @command{@value{AS}} is configured for the Intel 80960.
   1952 @end ifset
   1953 You can give it another name by using the @option{-o} option.  Conventionally,
   1954 object file names end with @file{.o}.  The default name is used for historical
   1955 reasons: older assemblers were capable of assembling self-contained programs
   1956 directly into a runnable program.  (For some formats, this isn't currently
   1957 possible, but it can be done for the @code{a.out} format.)
   1958 
   1959 @cindex linker
   1960 @kindex ld
   1961 The object file is meant for input to the linker @code{@value{LD}}.  It contains
   1962 assembled program code, information to help @code{@value{LD}} integrate
   1963 the assembled program into a runnable file, and (optionally) symbolic
   1964 information for the debugger.
   1965 
   1966 @c link above to some info file(s) like the description of a.out.
   1967 @c don't forget to describe @sc{gnu} info as well as Unix lossage.
   1968 
   1969 @node Errors
   1970 @section Error and Warning Messages
   1971 
   1972 @c man begin DESCRIPTION
   1973 
   1974 @cindex error messages
   1975 @cindex warning messages
   1976 @cindex messages from assembler
   1977 @command{@value{AS}} may write warnings and error messages to the standard error
   1978 file (usually your terminal).  This should not happen when  a compiler
   1979 runs @command{@value{AS}} automatically.  Warnings report an assumption made so
   1980 that @command{@value{AS}} could keep assembling a flawed program; errors report a
   1981 grave problem that stops the assembly.
   1982 
   1983 @c man end
   1984 
   1985 @cindex format of warning messages
   1986 Warning messages have the format
   1987 
   1988 @smallexample
   1989 file_name:@b{NNN}:Warning Message Text
   1990 @end smallexample
   1991 
   1992 @noindent
   1993 @cindex line numbers, in warnings/errors
   1994 (where @b{NNN} is a line number).  If a logical file name has been given
   1995 (@pxref{File,,@code{.file}}) it is used for the filename, otherwise the name of
   1996 the current input file is used.  If a logical line number was given
   1997 @ifset GENERIC
   1998 (@pxref{Line,,@code{.line}})
   1999 @end ifset
   2000 then it is used to calculate the number printed,
   2001 otherwise the actual line in the current source file is printed.  The
   2002 message text is intended to be self explanatory (in the grand Unix
   2003 tradition).
   2004 
   2005 @cindex format of error messages
   2006 Error messages have the format
   2007 @smallexample
   2008 file_name:@b{NNN}:FATAL:Error Message Text
   2009 @end smallexample
   2010 The file name and line number are derived as for warning
   2011 messages.  The actual message text may be rather less explanatory
   2012 because many of them aren't supposed to happen.
   2013 
   2014 @node Invoking
   2015 @chapter Command-Line Options
   2016 
   2017 @cindex options, all versions of assembler
   2018 This chapter describes command-line options available in @emph{all}
   2019 versions of the @sc{gnu} assembler; see @ref{Machine Dependencies},
   2020 for options specific
   2021 @ifclear GENERIC
   2022 to the @value{TARGET} target.
   2023 @end ifclear
   2024 @ifset GENERIC
   2025 to particular machine architectures.
   2026 @end ifset
   2027 
   2028 @c man begin DESCRIPTION
   2029 
   2030 If you are invoking @command{@value{AS}} via the @sc{gnu} C compiler,
   2031 you can use the @samp{-Wa} option to pass arguments through to the assembler.
   2032 The assembler arguments must be separated from each other (and the @samp{-Wa})
   2033 by commas.  For example:
   2034 
   2035 @smallexample
   2036 gcc -c -g -O -Wa,-alh,-L file.c
   2037 @end smallexample
   2038 
   2039 @noindent
   2040 This passes two options to the assembler: @samp{-alh} (emit a listing to
   2041 standard output with high-level and assembly source) and @samp{-L} (retain
   2042 local symbols in the symbol table).
   2043 
   2044 Usually you do not need to use this @samp{-Wa} mechanism, since many compiler
   2045 command-line options are automatically passed to the assembler by the compiler.
   2046 (You can call the @sc{gnu} compiler driver with the @samp{-v} option to see
   2047 precisely what options it passes to each compilation pass, including the
   2048 assembler.)
   2049 
   2050 @c man end
   2051 
   2052 @menu
   2053 * a::             -a[cdghlns] enable listings
   2054 * alternate::     --alternate enable alternate macro syntax
   2055 * D::             -D for compatibility
   2056 * f::             -f to work faster
   2057 * I::             -I for .include search path
   2058 @ifclear DIFF-TBL-KLUGE
   2059 * K::             -K for compatibility
   2060 @end ifclear
   2061 @ifset DIFF-TBL-KLUGE
   2062 * K::             -K for difference tables
   2063 @end ifset
   2064 
   2065 * L::             -L to retain local symbols
   2066 * listing::       --listing-XXX to configure listing output
   2067 * M::		  -M or --mri to assemble in MRI compatibility mode
   2068 * MD::            --MD for dependency tracking
   2069 * o::             -o to name the object file
   2070 * R::             -R to join data and text sections
   2071 * statistics::    --statistics to see statistics about assembly
   2072 * traditional-format:: --traditional-format for compatible output
   2073 * v::             -v to announce version
   2074 * W::             -W, --no-warn, --warn, --fatal-warnings to control warnings
   2075 * Z::             -Z to make object file even after errors
   2076 @end menu
   2077 
   2078 @node a
   2079 @section Enable Listings: @option{-a[cdghlns]}
   2080 
   2081 @kindex -a
   2082 @kindex -ac
   2083 @kindex -ad
   2084 @kindex -ag
   2085 @kindex -ah
   2086 @kindex -al
   2087 @kindex -an
   2088 @kindex -as
   2089 @cindex listings, enabling
   2090 @cindex assembly listings, enabling
   2091 
   2092 These options enable listing output from the assembler.  By itself,
   2093 @samp{-a} requests high-level, assembly, and symbols listing.
   2094 You can use other letters to select specific options for the list:
   2095 @samp{-ah} requests a high-level language listing,
   2096 @samp{-al} requests an output-program assembly listing, and
   2097 @samp{-as} requests a symbol table listing.
   2098 High-level listings require that a compiler debugging option like
   2099 @samp{-g} be used, and that assembly listings (@samp{-al}) be requested
   2100 also.
   2101 
   2102 Use the @samp{-ag} option to print a first section with general assembly
   2103 information, like @value{AS} version, switches passed, or time stamp.
   2104 
   2105 Use the @samp{-ac} option to omit false conditionals from a listing.  Any lines
   2106 which are not assembled because of a false @code{.if} (or @code{.ifdef}, or any
   2107 other conditional), or a true @code{.if} followed by an @code{.else}, will be
   2108 omitted from the listing.
   2109 
   2110 Use the @samp{-ad} option to omit debugging directives from the
   2111 listing.
   2112 
   2113 Once you have specified one of these options, you can further control
   2114 listing output and its appearance using the directives @code{.list},
   2115 @code{.nolist}, @code{.psize}, @code{.eject}, @code{.title}, and
   2116 @code{.sbttl}.
   2117 The @samp{-an} option turns off all forms processing.
   2118 If you do not request listing output with one of the @samp{-a} options, the
   2119 listing-control directives have no effect.
   2120 
   2121 The letters after @samp{-a} may be combined into one option,
   2122 @emph{e.g.}, @samp{-aln}.
   2123 
   2124 Note if the assembler source is coming from the standard input (e.g.,
   2125 because it
   2126 is being created by @code{@value{GCC}} and the @samp{-pipe} command line switch
   2127 is being used) then the listing will not contain any comments or preprocessor
   2128 directives.  This is because the listing code buffers input source lines from
   2129 stdin only after they have been preprocessed by the assembler.  This reduces
   2130 memory usage and makes the code more efficient.
   2131 
   2132 @node alternate
   2133 @section @option{--alternate}
   2134 
   2135 @kindex --alternate
   2136 Begin in alternate macro mode, see @ref{Altmacro,,@code{.altmacro}}.
   2137 
   2138 @node D
   2139 @section @option{-D}
   2140 
   2141 @kindex -D
   2142 This option has no effect whatsoever, but it is accepted to make it more
   2143 likely that scripts written for other assemblers also work with
   2144 @command{@value{AS}}.
   2145 
   2146 @node f
   2147 @section Work Faster: @option{-f}
   2148 
   2149 @kindex -f
   2150 @cindex trusted compiler
   2151 @cindex faster processing (@option{-f})
   2152 @samp{-f} should only be used when assembling programs written by a
   2153 (trusted) compiler.  @samp{-f} stops the assembler from doing whitespace
   2154 and comment preprocessing on
   2155 the input file(s) before assembling them.  @xref{Preprocessing,
   2156 ,Preprocessing}.
   2157 
   2158 @quotation
   2159 @emph{Warning:} if you use @samp{-f} when the files actually need to be
   2160 preprocessed (if they contain comments, for example), @command{@value{AS}} does
   2161 not work correctly.
   2162 @end quotation
   2163 
   2164 @node I
   2165 @section @code{.include} Search Path: @option{-I} @var{path}
   2166 
   2167 @kindex -I @var{path}
   2168 @cindex paths for @code{.include}
   2169 @cindex search path for @code{.include}
   2170 @cindex @code{include} directive search path
   2171 Use this option to add a @var{path} to the list of directories
   2172 @command{@value{AS}} searches for files specified in @code{.include}
   2173 directives (@pxref{Include,,@code{.include}}).  You may use @option{-I} as
   2174 many times as necessary to include a variety of paths.  The current
   2175 working directory is always searched first; after that, @command{@value{AS}}
   2176 searches any @samp{-I} directories in the same order as they were
   2177 specified (left to right) on the command line.
   2178 
   2179 @node K
   2180 @section Difference Tables: @option{-K}
   2181 
   2182 @kindex -K
   2183 @ifclear DIFF-TBL-KLUGE
   2184 On the @value{TARGET} family, this option is allowed, but has no effect.  It is
   2185 permitted for compatibility with the @sc{gnu} assembler on other platforms,
   2186 where it can be used to warn when the assembler alters the machine code
   2187 generated for @samp{.word} directives in difference tables.  The @value{TARGET}
   2188 family does not have the addressing limitations that sometimes lead to this
   2189 alteration on other platforms.
   2190 @end ifclear
   2191 
   2192 @ifset DIFF-TBL-KLUGE
   2193 @cindex difference tables, warning
   2194 @cindex warning for altered difference tables
   2195 @command{@value{AS}} sometimes alters the code emitted for directives of the
   2196 form @samp{.word @var{sym1}-@var{sym2}}.  @xref{Word,,@code{.word}}.
   2197 You can use the @samp{-K} option if you want a warning issued when this
   2198 is done.
   2199 @end ifset
   2200 
   2201 @node L
   2202 @section Include Local Symbols: @option{-L}
   2203 
   2204 @kindex -L
   2205 @cindex local symbols, retaining in output
   2206 Symbols beginning with system-specific local label prefixes, typically
   2207 @samp{.L} for ELF systems or @samp{L} for traditional a.out systems, are
   2208 called @dfn{local symbols}.  @xref{Symbol Names}.  Normally you do not see
   2209 such symbols when debugging, because they are intended for the use of
   2210 programs (like compilers) that compose assembler programs, not for your
   2211 notice.  Normally both @command{@value{AS}} and @code{@value{LD}} discard
   2212 such symbols, so you do not normally debug with them.
   2213 
   2214 This option tells @command{@value{AS}} to retain those local symbols
   2215 in the object file.  Usually if you do this you also tell the linker
   2216 @code{@value{LD}} to preserve those symbols.
   2217 
   2218 @node listing
   2219 @section Configuring listing output: @option{--listing}
   2220 
   2221 The listing feature of the assembler can be enabled via the command line switch
   2222 @samp{-a} (@pxref{a}).  This feature combines the input source file(s) with a
   2223 hex dump of the corresponding locations in the output object file, and displays
   2224 them as a listing file.  The format of this listing can be controlled by
   2225 directives inside the assembler source (i.e., @code{.list} (@pxref{List}),
   2226 @code{.title} (@pxref{Title}), @code{.sbttl} (@pxref{Sbttl}),
   2227 @code{.psize} (@pxref{Psize}), and
   2228 @code{.eject} (@pxref{Eject}) and also by the following switches:
   2229 
   2230 @table @gcctabopt
   2231 @item --listing-lhs-width=@samp{number}
   2232 @kindex --listing-lhs-width
   2233 @cindex Width of first line disassembly output
   2234 Sets the maximum width, in words, of the first line of the hex byte dump.  This
   2235 dump appears on the left hand side of the listing output.
   2236 
   2237 @item --listing-lhs-width2=@samp{number}
   2238 @kindex --listing-lhs-width2
   2239 @cindex Width of continuation lines of disassembly output
   2240 Sets the maximum width, in words, of any further lines of the hex byte dump for
   2241 a given input source line.  If this value is not specified, it defaults to being
   2242 the same as the value specified for @samp{--listing-lhs-width}.  If neither
   2243 switch is used the default is to one.
   2244 
   2245 @item --listing-rhs-width=@samp{number}
   2246 @kindex --listing-rhs-width
   2247 @cindex Width of source line output
   2248 Sets the maximum width, in characters, of the source line that is displayed
   2249 alongside the hex dump.  The default value for this parameter is 100.  The
   2250 source line is displayed on the right hand side of the listing output.
   2251 
   2252 @item --listing-cont-lines=@samp{number}
   2253 @kindex --listing-cont-lines
   2254 @cindex Maximum number of continuation lines
   2255 Sets the maximum number of continuation lines of hex dump that will be
   2256 displayed for a given single line of source input.  The default value is 4.
   2257 @end table
   2258 
   2259 @node M
   2260 @section Assemble in MRI Compatibility Mode: @option{-M}
   2261 
   2262 @kindex -M
   2263 @cindex MRI compatibility mode
   2264 The @option{-M} or @option{--mri} option selects MRI compatibility mode.  This
   2265 changes the syntax and pseudo-op handling of @command{@value{AS}} to make it
   2266 compatible with the @code{ASM68K} or the @code{ASM960} (depending upon the
   2267 configured target) assembler from Microtec Research.  The exact nature of the
   2268 MRI syntax will not be documented here; see the MRI manuals for more
   2269 information.  Note in particular that the handling of macros and macro
   2270 arguments is somewhat different.  The purpose of this option is to permit
   2271 assembling existing MRI assembler code using @command{@value{AS}}.
   2272 
   2273 The MRI compatibility is not complete.  Certain operations of the MRI assembler
   2274 depend upon its object file format, and can not be supported using other object
   2275 file formats.  Supporting these would require enhancing each object file format
   2276 individually.  These are:
   2277 
   2278 @itemize @bullet
   2279 @item global symbols in common section
   2280 
   2281 The m68k MRI assembler supports common sections which are merged by the linker.
   2282 Other object file formats do not support this.  @command{@value{AS}} handles
   2283 common sections by treating them as a single common symbol.  It permits local
   2284 symbols to be defined within a common section, but it can not support global
   2285 symbols, since it has no way to describe them.
   2286 
   2287 @item complex relocations
   2288 
   2289 The MRI assemblers support relocations against a negated section address, and
   2290 relocations which combine the start addresses of two or more sections.  These
   2291 are not support by other object file formats.
   2292 
   2293 @item @code{END} pseudo-op specifying start address
   2294 
   2295 The MRI @code{END} pseudo-op permits the specification of a start address.
   2296 This is not supported by other object file formats.  The start address may
   2297 instead be specified using the @option{-e} option to the linker, or in a linker
   2298 script.
   2299 
   2300 @item @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops
   2301 
   2302 The MRI @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops assign a module
   2303 name to the output file.  This is not supported by other object file formats.
   2304 
   2305 @item @code{ORG} pseudo-op
   2306 
   2307 The m68k MRI @code{ORG} pseudo-op begins an absolute section at a given
   2308 address.  This differs from the usual @command{@value{AS}} @code{.org} pseudo-op,
   2309 which changes the location within the current section.  Absolute sections are
   2310 not supported by other object file formats.  The address of a section may be
   2311 assigned within a linker script.
   2312 @end itemize
   2313 
   2314 There are some other features of the MRI assembler which are not supported by
   2315 @command{@value{AS}}, typically either because they are difficult or because they
   2316 seem of little consequence.  Some of these may be supported in future releases.
   2317 
   2318 @itemize @bullet
   2319 
   2320 @item EBCDIC strings
   2321 
   2322 EBCDIC strings are not supported.
   2323 
   2324 @item packed binary coded decimal
   2325 
   2326 Packed binary coded decimal is not supported.  This means that the @code{DC.P}
   2327 and @code{DCB.P} pseudo-ops are not supported.
   2328 
   2329 @item @code{FEQU} pseudo-op
   2330 
   2331 The m68k @code{FEQU} pseudo-op is not supported.
   2332 
   2333 @item @code{NOOBJ} pseudo-op
   2334 
   2335 The m68k @code{NOOBJ} pseudo-op is not supported.
   2336 
   2337 @item @code{OPT} branch control options
   2338 
   2339 The m68k @code{OPT} branch control options---@code{B}, @code{BRS}, @code{BRB},
   2340 @code{BRL}, and @code{BRW}---are ignored.  @command{@value{AS}} automatically
   2341 relaxes all branches, whether forward or backward, to an appropriate size, so
   2342 these options serve no purpose.
   2343 
   2344 @item @code{OPT} list control options
   2345 
   2346 The following m68k @code{OPT} list control options are ignored: @code{C},
   2347 @code{CEX}, @code{CL}, @code{CRE}, @code{E}, @code{G}, @code{I}, @code{M},
   2348 @code{MEX}, @code{MC}, @code{MD}, @code{X}.
   2349 
   2350 @item other @code{OPT} options
   2351 
   2352 The following m68k @code{OPT} options are ignored: @code{NEST}, @code{O},
   2353 @code{OLD}, @code{OP}, @code{P}, @code{PCO}, @code{PCR}, @code{PCS}, @code{R}.
   2354 
   2355 @item @code{OPT} @code{D} option is default
   2356 
   2357 The m68k @code{OPT} @code{D} option is the default, unlike the MRI assembler.
   2358 @code{OPT NOD} may be used to turn it off.
   2359 
   2360 @item @code{XREF} pseudo-op.
   2361 
   2362 The m68k @code{XREF} pseudo-op is ignored.
   2363 
   2364 @item @code{.debug} pseudo-op
   2365 
   2366 The i960 @code{.debug} pseudo-op is not supported.
   2367 
   2368 @item @code{.extended} pseudo-op
   2369 
   2370 The i960 @code{.extended} pseudo-op is not supported.
   2371 
   2372 @item @code{.list} pseudo-op.
   2373 
   2374 The various options of the i960 @code{.list} pseudo-op are not supported.
   2375 
   2376 @item @code{.optimize} pseudo-op
   2377 
   2378 The i960 @code{.optimize} pseudo-op is not supported.
   2379 
   2380 @item @code{.output} pseudo-op
   2381 
   2382 The i960 @code{.output} pseudo-op is not supported.
   2383 
   2384 @item @code{.setreal} pseudo-op
   2385 
   2386 The i960 @code{.setreal} pseudo-op is not supported.
   2387 
   2388 @end itemize
   2389 
   2390 @node MD
   2391 @section Dependency Tracking: @option{--MD}
   2392 
   2393 @kindex --MD
   2394 @cindex dependency tracking
   2395 @cindex make rules
   2396 
   2397 @command{@value{AS}} can generate a dependency file for the file it creates.  This
   2398 file consists of a single rule suitable for @code{make} describing the
   2399 dependencies of the main source file.
   2400 
   2401 The rule is written to the file named in its argument.
   2402 
   2403 This feature is used in the automatic updating of makefiles.
   2404 
   2405 @node o
   2406 @section Name the Object File: @option{-o}
   2407 
   2408 @kindex -o
   2409 @cindex naming object file
   2410 @cindex object file name
   2411 There is always one object file output when you run @command{@value{AS}}.  By
   2412 default it has the name
   2413 @ifset GENERIC
   2414 @ifset I960
   2415 @file{a.out} (or @file{b.out}, for Intel 960 targets only).
   2416 @end ifset
   2417 @ifclear I960
   2418 @file{a.out}.
   2419 @end ifclear
   2420 @end ifset
   2421 @ifclear GENERIC
   2422 @ifset I960
   2423 @file{b.out}.
   2424 @end ifset
   2425 @ifclear I960
   2426 @file{a.out}.
   2427 @end ifclear
   2428 @end ifclear
   2429 You use this option (which takes exactly one filename) to give the
   2430 object file a different name.
   2431 
   2432 Whatever the object file is called, @command{@value{AS}} overwrites any
   2433 existing file of the same name.
   2434 
   2435 @node R
   2436 @section Join Data and Text Sections: @option{-R}
   2437 
   2438 @kindex -R
   2439 @cindex data and text sections, joining
   2440 @cindex text and data sections, joining
   2441 @cindex joining text and data sections
   2442 @cindex merging text and data sections
   2443 @option{-R} tells @command{@value{AS}} to write the object file as if all
   2444 data-section data lives in the text section.  This is only done at
   2445 the very last moment:  your binary data are the same, but data
   2446 section parts are relocated differently.  The data section part of
   2447 your object file is zero bytes long because all its bytes are
   2448 appended to the text section.  (@xref{Sections,,Sections and Relocation}.)
   2449 
   2450 When you specify @option{-R} it would be possible to generate shorter
   2451 address displacements (because we do not have to cross between text and
   2452 data section).  We refrain from doing this simply for compatibility with
   2453 older versions of @command{@value{AS}}.  In future, @option{-R} may work this way.
   2454 
   2455 @ifset COFF-ELF
   2456 When @command{@value{AS}} is configured for COFF or ELF output,
   2457 this option is only useful if you use sections named @samp{.text} and
   2458 @samp{.data}.
   2459 @end ifset
   2460 
   2461 @ifset HPPA
   2462 @option{-R} is not supported for any of the HPPA targets.  Using
   2463 @option{-R} generates a warning from @command{@value{AS}}.
   2464 @end ifset
   2465 
   2466 @node statistics
   2467 @section Display Assembly Statistics: @option{--statistics}
   2468 
   2469 @kindex --statistics
   2470 @cindex statistics, about assembly
   2471 @cindex time, total for assembly
   2472 @cindex space used, maximum for assembly
   2473 Use @samp{--statistics} to display two statistics about the resources used by
   2474 @command{@value{AS}}: the maximum amount of space allocated during the assembly
   2475 (in bytes), and the total execution time taken for the assembly (in @sc{cpu}
   2476 seconds).
   2477 
   2478 @node traditional-format
   2479 @section Compatible Output: @option{--traditional-format}
   2480 
   2481 @kindex --traditional-format
   2482 For some targets, the output of @command{@value{AS}} is different in some ways
   2483 from the output of some existing assembler.  This switch requests
   2484 @command{@value{AS}} to use the traditional format instead.
   2485 
   2486 For example, it disables the exception frame optimizations which
   2487 @command{@value{AS}} normally does by default on @code{@value{GCC}} output.
   2488 
   2489 @node v
   2490 @section Announce Version: @option{-v}
   2491 
   2492 @kindex -v
   2493 @kindex -version
   2494 @cindex assembler version
   2495 @cindex version of assembler
   2496 You can find out what version of as is running by including the
   2497 option @samp{-v} (which you can also spell as @samp{-version}) on the
   2498 command line.
   2499 
   2500 @node W
   2501 @section Control Warnings: @option{-W}, @option{--warn}, @option{--no-warn}, @option{--fatal-warnings}
   2502 
   2503 @command{@value{AS}} should never give a warning or error message when
   2504 assembling compiler output.  But programs written by people often
   2505 cause @command{@value{AS}} to give a warning that a particular assumption was
   2506 made.  All such warnings are directed to the standard error file.
   2507 
   2508 @kindex -W
   2509 @kindex --no-warn
   2510 @cindex suppressing warnings
   2511 @cindex warnings, suppressing
   2512 If you use the @option{-W} and @option{--no-warn} options, no warnings are issued.
   2513 This only affects the warning messages: it does not change any particular of
   2514 how @command{@value{AS}} assembles your file.  Errors, which stop the assembly,
   2515 are still reported.
   2516 
   2517 @kindex --fatal-warnings
   2518 @cindex errors, caused by warnings
   2519 @cindex warnings, causing error
   2520 If you use the @option{--fatal-warnings} option, @command{@value{AS}} considers
   2521 files that generate warnings to be in error.
   2522 
   2523 @kindex --warn
   2524 @cindex warnings, switching on
   2525 You can switch these options off again by specifying @option{--warn}, which
   2526 causes warnings to be output as usual.
   2527 
   2528 @node Z
   2529 @section Generate Object File in Spite of Errors: @option{-Z}
   2530 @cindex object file, after errors
   2531 @cindex errors, continuing after
   2532 After an error message, @command{@value{AS}} normally produces no output.  If for
   2533 some reason you are interested in object file output even after
   2534 @command{@value{AS}} gives an error message on your program, use the @samp{-Z}
   2535 option.  If there are any errors, @command{@value{AS}} continues anyways, and
   2536 writes an object file after a final warning message of the form @samp{@var{n}
   2537 errors, @var{m} warnings, generating bad object file.}
   2538 
   2539 @node Syntax
   2540 @chapter Syntax
   2541 
   2542 @cindex machine-independent syntax
   2543 @cindex syntax, machine-independent
   2544 This chapter describes the machine-independent syntax allowed in a
   2545 source file.  @command{@value{AS}} syntax is similar to what many other
   2546 assemblers use; it is inspired by the BSD 4.2
   2547 @ifclear VAX
   2548 assembler.
   2549 @end ifclear
   2550 @ifset VAX
   2551 assembler, except that @command{@value{AS}} does not assemble Vax bit-fields.
   2552 @end ifset
   2553 
   2554 @menu
   2555 * Preprocessing::               Preprocessing
   2556 * Whitespace::                  Whitespace
   2557 * Comments::                    Comments
   2558 * Symbol Intro::                Symbols
   2559 * Statements::                  Statements
   2560 * Constants::                   Constants
   2561 @end menu
   2562 
   2563 @node Preprocessing
   2564 @section Preprocessing
   2565 
   2566 @cindex preprocessing
   2567 The @command{@value{AS}} internal preprocessor:
   2568 @itemize @bullet
   2569 @cindex whitespace, removed by preprocessor
   2570 @item
   2571 adjusts and removes extra whitespace.  It leaves one space or tab before
   2572 the keywords on a line, and turns any other whitespace on the line into
   2573 a single space.
   2574 
   2575 @cindex comments, removed by preprocessor
   2576 @item
   2577 removes all comments, replacing them with a single space, or an
   2578 appropriate number of newlines.
   2579 
   2580 @cindex constants, converted by preprocessor
   2581 @item
   2582 converts character constants into the appropriate numeric values.
   2583 @end itemize
   2584 
   2585 It does not do macro processing, include file handling, or
   2586 anything else you may get from your C compiler's preprocessor.  You can
   2587 do include file processing with the @code{.include} directive
   2588 (@pxref{Include,,@code{.include}}).  You can use the @sc{gnu} C compiler driver
   2589 to get other ``CPP'' style preprocessing by giving the input file a
   2590 @samp{.S} suffix.  @xref{Overall Options, ,Options Controlling the Kind of
   2591 Output, gcc.info, Using GNU CC}.
   2592 
   2593 Excess whitespace, comments, and character constants
   2594 cannot be used in the portions of the input text that are not
   2595 preprocessed.
   2596 
   2597 @cindex turning preprocessing on and off
   2598 @cindex preprocessing, turning on and off
   2599 @kindex #NO_APP
   2600 @kindex #APP
   2601 If the first line of an input file is @code{#NO_APP} or if you use the
   2602 @samp{-f} option, whitespace and comments are not removed from the input file.
   2603 Within an input file, you can ask for whitespace and comment removal in
   2604 specific portions of the by putting a line that says @code{#APP} before the
   2605 text that may contain whitespace or comments, and putting a line that says
   2606 @code{#NO_APP} after this text.  This feature is mainly intend to support
   2607 @code{asm} statements in compilers whose output is otherwise free of comments
   2608 and whitespace.
   2609 
   2610 @node Whitespace
   2611 @section Whitespace
   2612 
   2613 @cindex whitespace
   2614 @dfn{Whitespace} is one or more blanks or tabs, in any order.
   2615 Whitespace is used to separate symbols, and to make programs neater for
   2616 people to read.  Unless within character constants
   2617 (@pxref{Characters,,Character Constants}), any whitespace means the same
   2618 as exactly one space.
   2619 
   2620 @node Comments
   2621 @section Comments
   2622 
   2623 @cindex comments
   2624 There are two ways of rendering comments to @command{@value{AS}}.  In both
   2625 cases the comment is equivalent to one space.
   2626 
   2627 Anything from @samp{/*} through the next @samp{*/} is a comment.
   2628 This means you may not nest these comments.
   2629 
   2630 @smallexample
   2631 /*
   2632   The only way to include a newline ('\n') in a comment
   2633   is to use this sort of comment.
   2634 */
   2635 
   2636 /* This sort of comment does not nest. */
   2637 @end smallexample
   2638 
   2639 @cindex line comment character
   2640 Anything from a @dfn{line comment} character up to the next newline is
   2641 considered a comment and is ignored.  The line comment character is target
   2642 specific, and some targets multiple comment characters.  Some targets also have
   2643 line comment characters that only work if they are the first character on a
   2644 line.  Some targets use a sequence of two characters to introduce a line
   2645 comment.  Some targets can also change their line comment characters depending
   2646 upon command line options that have been used.  For more details see the
   2647 @emph{Syntax} section in the documentation for individual targets.
   2648 
   2649 If the line comment character is the hash sign (@samp{#}) then it still has the
   2650 special ability to enable and disable preprocessing (@pxref{Preprocessing}) and
   2651 to specify logical line numbers:
   2652 
   2653 @kindex #
   2654 @cindex lines starting with @code{#}
   2655 @cindex logical line numbers
   2656 To be compatible with past assemblers, lines that begin with @samp{#} have a
   2657 special interpretation.  Following the @samp{#} should be an absolute
   2658 expression (@pxref{Expressions}): the logical line number of the @emph{next}
   2659 line.  Then a string (@pxref{Strings, ,Strings}) is allowed: if present it is a
   2660 new logical file name.  The rest of the line, if any, should be whitespace.
   2661 
   2662 If the first non-whitespace characters on the line are not numeric,
   2663 the line is ignored.  (Just like a comment.)
   2664 
   2665 @smallexample
   2666                           # This is an ordinary comment.
   2667 # 42-6 "new_file_name"    # New logical file name
   2668                           # This is logical line # 36.
   2669 @end smallexample
   2670 This feature is deprecated, and may disappear from future versions
   2671 of @command{@value{AS}}.
   2672 
   2673 @node Symbol Intro
   2674 @section Symbols
   2675 
   2676 @cindex characters used in symbols
   2677 @ifclear SPECIAL-SYMS
   2678 A @dfn{symbol} is one or more characters chosen from the set of all
   2679 letters (both upper and lower case), digits and the three characters
   2680 @samp{_.$}.
   2681 @end ifclear
   2682 @ifset SPECIAL-SYMS
   2683 @ifclear GENERIC
   2684 @ifset H8
   2685 A @dfn{symbol} is one or more characters chosen from the set of all
   2686 letters (both upper and lower case), digits and the three characters
   2687 @samp{._$}.  (Save that, on the H8/300 only, you may not use @samp{$} in
   2688 symbol names.)
   2689 @end ifset
   2690 @end ifclear
   2691 @end ifset
   2692 @ifset GENERIC
   2693 On most machines, you can also use @code{$} in symbol names; exceptions
   2694 are noted in @ref{Machine Dependencies}.
   2695 @end ifset
   2696 No symbol may begin with a digit.  Case is significant.
   2697 There is no length limit: all characters are significant.  Multibyte characters
   2698 are supported.  Symbols are delimited by characters not in that set, or by the
   2699 beginning of a file (since the source program must end with a newline, the end
   2700 of a file is not a possible symbol delimiter).  @xref{Symbols}.
   2701 @cindex length of symbols
   2702 
   2703 @node Statements
   2704 @section Statements
   2705 
   2706 @cindex statements, structure of
   2707 @cindex line separator character
   2708 @cindex statement separator character
   2709 
   2710 A @dfn{statement} ends at a newline character (@samp{\n}) or a
   2711 @dfn{line separator character}.  The line separator character is target
   2712 specific and described in the @emph{Syntax} section of each
   2713 target's documentation.  Not all targets support a line separator character.
   2714 The newline or line separator character is considered to be part of the
   2715 preceding statement.  Newlines and separators within character constants are an
   2716 exception: they do not end statements.
   2717 
   2718 @cindex newline, required at file end
   2719 @cindex EOF, newline must precede
   2720 It is an error to end any statement with end-of-file:  the last
   2721 character of any input file should be a newline.@refill
   2722 
   2723 An empty statement is allowed, and may include whitespace.  It is ignored.
   2724 
   2725 @cindex instructions and directives
   2726 @cindex directives and instructions
   2727 @c "key symbol" is not used elsewhere in the document; seems pedantic to
   2728 @c @defn{} it in that case, as was done previously...  doc (a] cygnus.com,
   2729 @c 13feb91.
   2730 A statement begins with zero or more labels, optionally followed by a
   2731 key symbol which determines what kind of statement it is.  The key
   2732 symbol determines the syntax of the rest of the statement.  If the
   2733 symbol begins with a dot @samp{.} then the statement is an assembler
   2734 directive: typically valid for any computer.  If the symbol begins with
   2735 a letter the statement is an assembly language @dfn{instruction}: it
   2736 assembles into a machine language instruction.
   2737 @ifset GENERIC
   2738 Different versions of @command{@value{AS}} for different computers
   2739 recognize different instructions.  In fact, the same symbol may
   2740 represent a different instruction in a different computer's assembly
   2741 language.@refill
   2742 @end ifset
   2743 
   2744 @cindex @code{:} (label)
   2745 @cindex label (@code{:})
   2746 A label is a symbol immediately followed by a colon (@code{:}).
   2747 Whitespace before a label or after a colon is permitted, but you may not
   2748 have whitespace between a label's symbol and its colon. @xref{Labels}.
   2749 
   2750 @ifset HPPA
   2751 For HPPA targets, labels need not be immediately followed by a colon, but
   2752 the definition of a label must begin in column zero.  This also implies that
   2753 only one label may be defined on each line.
   2754 @end ifset
   2755 
   2756 @smallexample
   2757 label:     .directive    followed by something
   2758 another_label:           # This is an empty statement.
   2759            instruction   operand_1, operand_2, @dots{}
   2760 @end smallexample
   2761 
   2762 @node Constants
   2763 @section Constants
   2764 
   2765 @cindex constants
   2766 A constant is a number, written so that its value is known by
   2767 inspection, without knowing any context.  Like this:
   2768 @smallexample
   2769 @group
   2770 .byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
   2771 .ascii "Ring the bell\7"                  # A string constant.
   2772 .octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
   2773 .float 0f-314159265358979323846264338327\
   2774 95028841971.693993751E-40                 # - pi, a flonum.
   2775 @end group
   2776 @end smallexample
   2777 
   2778 @menu
   2779 * Characters::                  Character Constants
   2780 * Numbers::                     Number Constants
   2781 @end menu
   2782 
   2783 @node Characters
   2784 @subsection Character Constants
   2785 
   2786 @cindex character constants
   2787 @cindex constants, character
   2788 There are two kinds of character constants.  A @dfn{character} stands
   2789 for one character in one byte and its value may be used in
   2790 numeric expressions.  String constants (properly called string
   2791 @emph{literals}) are potentially many bytes and their values may not be
   2792 used in arithmetic expressions.
   2793 
   2794 @menu
   2795 * Strings::                     Strings
   2796 * Chars::                       Characters
   2797 @end menu
   2798 
   2799 @node Strings
   2800 @subsubsection Strings
   2801 
   2802 @cindex string constants
   2803 @cindex constants, string
   2804 A @dfn{string} is written between double-quotes.  It may contain
   2805 double-quotes or null characters.  The way to get special characters
   2806 into a string is to @dfn{escape} these characters: precede them with
   2807 a backslash @samp{\} character.  For example @samp{\\} represents
   2808 one backslash:  the first @code{\} is an escape which tells
   2809 @command{@value{AS}} to interpret the second character literally as a backslash
   2810 (which prevents @command{@value{AS}} from recognizing the second @code{\} as an
   2811 escape character).  The complete list of escapes follows.
   2812 
   2813 @cindex escape codes, character
   2814 @cindex character escape codes
   2815 @table @kbd
   2816 @c      @item \a
   2817 @c      Mnemonic for ACKnowledge; for ASCII this is octal code 007.
   2818 @c
   2819 @cindex @code{\b} (backspace character)
   2820 @cindex backspace (@code{\b})
   2821 @item \b
   2822 Mnemonic for backspace; for ASCII this is octal code 010.
   2823 
   2824 @c      @item \e
   2825 @c      Mnemonic for EOText; for ASCII this is octal code 004.
   2826 @c
   2827 @cindex @code{\f} (formfeed character)
   2828 @cindex formfeed (@code{\f})
   2829 @item \f
   2830 Mnemonic for FormFeed; for ASCII this is octal code 014.
   2831 
   2832 @cindex @code{\n} (newline character)
   2833 @cindex newline (@code{\n})
   2834 @item \n
   2835 Mnemonic for newline; for ASCII this is octal code 012.
   2836 
   2837 @c      @item \p
   2838 @c      Mnemonic for prefix; for ASCII this is octal code 033, usually known as @code{escape}.
   2839 @c
   2840 @cindex @code{\r} (carriage return character)
   2841 @cindex carriage return (@code{\r})
   2842 @item \r
   2843 Mnemonic for carriage-Return; for ASCII this is octal code 015.
   2844 
   2845 @c      @item \s
   2846 @c      Mnemonic for space; for ASCII this is octal code 040.  Included for compliance with
   2847 @c      other assemblers.
   2848 @c
   2849 @cindex @code{\t} (tab)
   2850 @cindex tab (@code{\t})
   2851 @item \t
   2852 Mnemonic for horizontal Tab; for ASCII this is octal code 011.
   2853 
   2854 @c      @item \v
   2855 @c      Mnemonic for Vertical tab; for ASCII this is octal code 013.
   2856 @c      @item \x @var{digit} @var{digit} @var{digit}
   2857 @c      A hexadecimal character code.  The numeric code is 3 hexadecimal digits.
   2858 @c
   2859 @cindex @code{\@var{ddd}} (octal character code)
   2860 @cindex octal character code (@code{\@var{ddd}})
   2861 @item \ @var{digit} @var{digit} @var{digit}
   2862 An octal character code.  The numeric code is 3 octal digits.
   2863 For compatibility with other Unix systems, 8 and 9 are accepted as digits:
   2864 for example, @code{\008} has the value 010, and @code{\009} the value 011.
   2865 
   2866 @cindex @code{\@var{xd...}} (hex character code)
   2867 @cindex hex character code (@code{\@var{xd...}})
   2868 @item \@code{x} @var{hex-digits...}
   2869 A hex character code.  All trailing hex digits are combined.  Either upper or
   2870 lower case @code{x} works.
   2871 
   2872 @cindex @code{\\} (@samp{\} character)
   2873 @cindex backslash (@code{\\})
   2874 @item \\
   2875 Represents one @samp{\} character.
   2876 
   2877 @c      @item \'
   2878 @c      Represents one @samp{'} (accent acute) character.
   2879 @c      This is needed in single character literals
   2880 @c      (@xref{Characters,,Character Constants}.) to represent
   2881 @c      a @samp{'}.
   2882 @c
   2883 @cindex @code{\"} (doublequote character)
   2884 @cindex doublequote (@code{\"})
   2885 @item \"
   2886 Represents one @samp{"} character.  Needed in strings to represent
   2887 this character, because an unescaped @samp{"} would end the string.
   2888 
   2889 @item \ @var{anything-else}
   2890 Any other character when escaped by @kbd{\} gives a warning, but
   2891 assembles as if the @samp{\} was not present.  The idea is that if
   2892 you used an escape sequence you clearly didn't want the literal
   2893 interpretation of the following character.  However @command{@value{AS}} has no
   2894 other interpretation, so @command{@value{AS}} knows it is giving you the wrong
   2895 code and warns you of the fact.
   2896 @end table
   2897 
   2898 Which characters are escapable, and what those escapes represent,
   2899 varies widely among assemblers.  The current set is what we think
   2900 the BSD 4.2 assembler recognizes, and is a subset of what most C
   2901 compilers recognize.  If you are in doubt, do not use an escape
   2902 sequence.
   2903 
   2904 @node Chars
   2905 @subsubsection Characters
   2906 
   2907 @cindex single character constant
   2908 @cindex character, single
   2909 @cindex constant, single character
   2910 A single character may be written as a single quote immediately
   2911 followed by that character.  The same escapes apply to characters as
   2912 to strings.  So if you want to write the character backslash, you
   2913 must write @kbd{'\\} where the first @code{\} escapes the second
   2914 @code{\}.  As you can see, the quote is an acute accent, not a
   2915 grave accent.  A newline
   2916 @ifclear GENERIC
   2917 @ifclear abnormal-separator
   2918 (or semicolon @samp{;})
   2919 @end ifclear
   2920 @ifset abnormal-separator
   2921 @ifset H8
   2922 (or dollar sign @samp{$}, for the H8/300; or semicolon @samp{;} for the
   2923 Renesas SH)
   2924 @end ifset
   2925 @end ifset
   2926 @end ifclear
   2927 immediately following an acute accent is taken as a literal character
   2928 and does not count as the end of a statement.  The value of a character
   2929 constant in a numeric expression is the machine's byte-wide code for
   2930 that character.  @command{@value{AS}} assumes your character code is ASCII:
   2931 @kbd{'A} means 65, @kbd{'B} means 66, and so on. @refill
   2932 
   2933 @node Numbers
   2934 @subsection Number Constants
   2935 
   2936 @cindex constants, number
   2937 @cindex number constants
   2938 @command{@value{AS}} distinguishes three kinds of numbers according to how they
   2939 are stored in the target machine.  @emph{Integers} are numbers that
   2940 would fit into an @code{int} in the C language.  @emph{Bignums} are
   2941 integers, but they are stored in more than 32 bits.  @emph{Flonums}
   2942 are floating point numbers, described below.
   2943 
   2944 @menu
   2945 * Integers::                    Integers
   2946 * Bignums::                     Bignums
   2947 * Flonums::                     Flonums
   2948 @ifclear GENERIC
   2949 @ifset I960
   2950 * Bit Fields::                  Bit Fields
   2951 @end ifset
   2952 @end ifclear
   2953 @end menu
   2954 
   2955 @node Integers
   2956 @subsubsection Integers
   2957 @cindex integers
   2958 @cindex constants, integer
   2959 
   2960 @cindex binary integers
   2961 @cindex integers, binary
   2962 A binary integer is @samp{0b} or @samp{0B} followed by zero or more of
   2963 the binary digits @samp{01}.
   2964 
   2965 @cindex octal integers
   2966 @cindex integers, octal
   2967 An octal integer is @samp{0} followed by zero or more of the octal
   2968 digits (@samp{01234567}).
   2969 
   2970 @cindex decimal integers
   2971 @cindex integers, decimal
   2972 A decimal integer starts with a non-zero digit followed by zero or
   2973 more digits (@samp{0123456789}).
   2974 
   2975 @cindex hexadecimal integers
   2976 @cindex integers, hexadecimal
   2977 A hexadecimal integer is @samp{0x} or @samp{0X} followed by one or
   2978 more hexadecimal digits chosen from @samp{0123456789abcdefABCDEF}.
   2979 
   2980 Integers have the usual values.  To denote a negative integer, use
   2981 the prefix operator @samp{-} discussed under expressions
   2982 (@pxref{Prefix Ops,,Prefix Operators}).
   2983 
   2984 @node Bignums
   2985 @subsubsection Bignums
   2986 
   2987 @cindex bignums
   2988 @cindex constants, bignum
   2989 A @dfn{bignum} has the same syntax and semantics as an integer
   2990 except that the number (or its negative) takes more than 32 bits to
   2991 represent in binary.  The distinction is made because in some places
   2992 integers are permitted while bignums are not.
   2993 
   2994 @node Flonums
   2995 @subsubsection Flonums
   2996 @cindex flonums
   2997 @cindex floating point numbers
   2998 @cindex constants, floating point
   2999 
   3000 @cindex precision, floating point
   3001 A @dfn{flonum} represents a floating point number.  The translation is
   3002 indirect: a decimal floating point number from the text is converted by
   3003 @command{@value{AS}} to a generic binary floating point number of more than
   3004 sufficient precision.  This generic floating point number is converted
   3005 to a particular computer's floating point format (or formats) by a
   3006 portion of @command{@value{AS}} specialized to that computer.
   3007 
   3008 A flonum is written by writing (in order)
   3009 @itemize @bullet
   3010 @item
   3011 The digit @samp{0}.
   3012 @ifset HPPA
   3013 (@samp{0} is optional on the HPPA.)
   3014 @end ifset
   3015 
   3016 @item
   3017 A letter, to tell @command{@value{AS}} the rest of the number is a flonum.
   3018 @ifset GENERIC
   3019 @kbd{e} is recommended.  Case is not important.
   3020 @ignore
   3021 @c FIXME: verify if flonum syntax really this vague for most cases
   3022 (Any otherwise illegal letter works here, but that might be changed.  Vax BSD
   3023 4.2 assembler seems to allow any of @samp{defghDEFGH}.)
   3024 @end ignore
   3025 
   3026 On the H8/300, Renesas / SuperH SH,
   3027 and AMD 29K architectures, the letter must be
   3028 one of the letters @samp{DFPRSX} (in upper or lower case).
   3029 
   3030 On the ARC, the letter must be one of the letters @samp{DFRS}
   3031 (in upper or lower case).
   3032 
   3033 On the Intel 960 architecture, the letter must be
   3034 one of the letters @samp{DFT} (in upper or lower case).
   3035 
   3036 On the HPPA architecture, the letter must be @samp{E} (upper case only).
   3037 @end ifset
   3038 @ifclear GENERIC
   3039 @ifset ARC
   3040 One of the letters @samp{DFRS} (in upper or lower case).
   3041 @end ifset
   3042 @ifset H8
   3043 One of the letters @samp{DFPRSX} (in upper or lower case).
   3044 @end ifset
   3045 @ifset HPPA
   3046 The letter @samp{E} (upper case only).
   3047 @end ifset
   3048 @ifset I960
   3049 One of the letters @samp{DFT} (in upper or lower case).
   3050 @end ifset
   3051 @end ifclear
   3052 
   3053 @item
   3054 An optional sign: either @samp{+} or @samp{-}.
   3055 
   3056 @item
   3057 An optional @dfn{integer part}: zero or more decimal digits.
   3058 
   3059 @item
   3060 An optional @dfn{fractional part}: @samp{.} followed by zero
   3061 or more decimal digits.
   3062 
   3063 @item
   3064 An optional exponent, consisting of:
   3065 
   3066 @itemize @bullet
   3067 @item
   3068 An @samp{E} or @samp{e}.
   3069 @c I can't find a config where "EXP_CHARS" is other than 'eE', but in
   3070 @c principle this can perfectly well be different on different targets.
   3071 @item
   3072 Optional sign: either @samp{+} or @samp{-}.
   3073 @item
   3074 One or more decimal digits.
   3075 @end itemize
   3076 
   3077 @end itemize
   3078 
   3079 At least one of the integer part or the fractional part must be
   3080 present.  The floating point number has the usual base-10 value.
   3081 
   3082 @command{@value{AS}} does all processing using integers.  Flonums are computed
   3083 independently of any floating point hardware in the computer running
   3084 @command{@value{AS}}.
   3085 
   3086 @ifclear GENERIC
   3087 @ifset I960
   3088 @c Bit fields are written as a general facility but are also controlled
   3089 @c by a conditional-compilation flag---which is as of now (21mar91)
   3090 @c turned on only by the i960 config of GAS.
   3091 @node Bit Fields
   3092 @subsubsection Bit Fields
   3093 
   3094 @cindex bit fields
   3095 @cindex constants, bit field
   3096 You can also define numeric constants as @dfn{bit fields}.
   3097 Specify two numbers separated by a colon---
   3098 @example
   3099 @var{mask}:@var{value}
   3100 @end example
   3101 @noindent
   3102 @command{@value{AS}} applies a bitwise @sc{and} between @var{mask} and
   3103 @var{value}.
   3104 
   3105 The resulting number is then packed
   3106 @ifset GENERIC
   3107 @c this conditional paren in case bit fields turned on elsewhere than 960
   3108 (in host-dependent byte order)
   3109 @end ifset
   3110 into a field whose width depends on which assembler directive has the
   3111 bit-field as its argument.  Overflow (a result from the bitwise and
   3112 requiring more binary digits to represent) is not an error; instead,
   3113 more constants are generated, of the specified width, beginning with the
   3114 least significant digits.@refill
   3115 
   3116 The directives @code{.byte}, @code{.hword}, @code{.int}, @code{.long},
   3117 @code{.short}, and @code{.word} accept bit-field arguments.
   3118 @end ifset
   3119 @end ifclear
   3120 
   3121 @node Sections
   3122 @chapter Sections and Relocation
   3123 @cindex sections
   3124 @cindex relocation
   3125 
   3126 @menu
   3127 * Secs Background::             Background
   3128 * Ld Sections::                 Linker Sections
   3129 * As Sections::                 Assembler Internal Sections
   3130 * Sub-Sections::                Sub-Sections
   3131 * bss::                         bss Section
   3132 @end menu
   3133 
   3134 @node Secs Background
   3135 @section Background
   3136 
   3137 Roughly, a section is a range of addresses, with no gaps; all data
   3138 ``in'' those addresses is treated the same for some particular purpose.
   3139 For example there may be a ``read only'' section.
   3140 
   3141 @cindex linker, and assembler
   3142 @cindex assembler, and linker
   3143 The linker @code{@value{LD}} reads many object files (partial programs) and
   3144 combines their contents to form a runnable program.  When @command{@value{AS}}
   3145 emits an object file, the partial program is assumed to start at address 0.
   3146 @code{@value{LD}} assigns the final addresses for the partial program, so that
   3147 different partial programs do not overlap.  This is actually an
   3148 oversimplification, but it suffices to explain how @command{@value{AS}} uses
   3149 sections.
   3150 
   3151 @code{@value{LD}} moves blocks of bytes of your program to their run-time
   3152 addresses.  These blocks slide to their run-time addresses as rigid
   3153 units; their length does not change and neither does the order of bytes
   3154 within them.  Such a rigid unit is called a @emph{section}.  Assigning
   3155 run-time addresses to sections is called @dfn{relocation}.  It includes
   3156 the task of adjusting mentions of object-file addresses so they refer to
   3157 the proper run-time addresses.
   3158 @ifset H8
   3159 For the H8/300, and for the Renesas / SuperH SH,
   3160 @command{@value{AS}} pads sections if needed to
   3161 ensure they end on a word (sixteen bit) boundary.
   3162 @end ifset
   3163 
   3164 @cindex standard assembler sections
   3165 An object file written by @command{@value{AS}} has at least three sections, any
   3166 of which may be empty.  These are named @dfn{text}, @dfn{data} and
   3167 @dfn{bss} sections.
   3168 
   3169 @ifset COFF-ELF
   3170 @ifset GENERIC
   3171 When it generates COFF or ELF output,
   3172 @end ifset
   3173 @command{@value{AS}} can also generate whatever other named sections you specify
   3174 using the @samp{.section} directive (@pxref{Section,,@code{.section}}).
   3175 If you do not use any directives that place output in the @samp{.text}
   3176 or @samp{.data} sections, these sections still exist, but are empty.
   3177 @end ifset
   3178 
   3179 @ifset HPPA
   3180 @ifset GENERIC
   3181 When @command{@value{AS}} generates SOM or ELF output for the HPPA,
   3182 @end ifset
   3183 @command{@value{AS}} can also generate whatever other named sections you
   3184 specify using the @samp{.space} and @samp{.subspace} directives.  See
   3185 @cite{HP9000 Series 800 Assembly Language Reference Manual}
   3186 (HP 92432-90001) for details on the @samp{.space} and @samp{.subspace}
   3187 assembler directives.
   3188 
   3189 @ifset SOM
   3190 Additionally, @command{@value{AS}} uses different names for the standard
   3191 text, data, and bss sections when generating SOM output.  Program text
   3192 is placed into the @samp{$CODE$} section, data into @samp{$DATA$}, and
   3193 BSS into @samp{$BSS$}.
   3194 @end ifset
   3195 @end ifset
   3196 
   3197 Within the object file, the text section starts at address @code{0}, the
   3198 data section follows, and the bss section follows the data section.
   3199 
   3200 @ifset HPPA
   3201 When generating either SOM or ELF output files on the HPPA, the text
   3202 section starts at address @code{0}, the data section at address
   3203 @code{0x4000000}, and the bss section follows the data section.
   3204 @end ifset
   3205 
   3206 To let @code{@value{LD}} know which data changes when the sections are
   3207 relocated, and how to change that data, @command{@value{AS}} also writes to the
   3208 object file details of the relocation needed.  To perform relocation
   3209 @code{@value{LD}} must know, each time an address in the object
   3210 file is mentioned:
   3211 @itemize @bullet
   3212 @item
   3213 Where in the object file is the beginning of this reference to
   3214 an address?
   3215 @item
   3216 How long (in bytes) is this reference?
   3217 @item
   3218 Which section does the address refer to?  What is the numeric value of
   3219 @display
   3220 (@var{address}) @minus{} (@var{start-address of section})?
   3221 @end display
   3222 @item
   3223 Is the reference to an address ``Program-Counter relative''?
   3224 @end itemize
   3225 
   3226 @cindex addresses, format of
   3227 @cindex section-relative addressing
   3228 In fact, every address @command{@value{AS}} ever uses is expressed as
   3229 @display
   3230 (@var{section}) + (@var{offset into section})
   3231 @end display
   3232 @noindent
   3233 Further, most expressions @command{@value{AS}} computes have this section-relative
   3234 nature.
   3235 @ifset SOM
   3236 (For some object formats, such as SOM for the HPPA, some expressions are
   3237 symbol-relative instead.)
   3238 @end ifset
   3239 
   3240 In this manual we use the notation @{@var{secname} @var{N}@} to mean ``offset
   3241 @var{N} into section @var{secname}.''
   3242 
   3243 Apart from text, data and bss sections you need to know about the
   3244 @dfn{absolute} section.  When @code{@value{LD}} mixes partial programs,
   3245 addresses in the absolute section remain unchanged.  For example, address
   3246 @code{@{absolute 0@}} is ``relocated'' to run-time address 0 by
   3247 @code{@value{LD}}.  Although the linker never arranges two partial programs'
   3248 data sections with overlapping addresses after linking, @emph{by definition}
   3249 their absolute sections must overlap.  Address @code{@{absolute@ 239@}} in one
   3250 part of a program is always the same address when the program is running as
   3251 address @code{@{absolute@ 239@}} in any other part of the program.
   3252 
   3253 The idea of sections is extended to the @dfn{undefined} section.  Any
   3254 address whose section is unknown at assembly time is by definition
   3255 rendered @{undefined @var{U}@}---where @var{U} is filled in later.
   3256 Since numbers are always defined, the only way to generate an undefined
   3257 address is to mention an undefined symbol.  A reference to a named
   3258 common block would be such a symbol: its value is unknown at assembly
   3259 time so it has section @emph{undefined}.
   3260 
   3261 By analogy the word @emph{section} is used to describe groups of sections in
   3262 the linked program.  @code{@value{LD}} puts all partial programs' text
   3263 sections in contiguous addresses in the linked program.  It is
   3264 customary to refer to the @emph{text section} of a program, meaning all
   3265 the addresses of all partial programs' text sections.  Likewise for
   3266 data and bss sections.
   3267 
   3268 Some sections are manipulated by @code{@value{LD}}; others are invented for
   3269 use of @command{@value{AS}} and have no meaning except during assembly.
   3270 
   3271 @node Ld Sections
   3272 @section Linker Sections
   3273 @code{@value{LD}} deals with just four kinds of sections, summarized below.
   3274 
   3275 @table @strong
   3276 
   3277 @ifset COFF-ELF
   3278 @cindex named sections
   3279 @cindex sections, named
   3280 @item named sections
   3281 @end ifset
   3282 @ifset aout-bout
   3283 @cindex text section
   3284 @cindex data section
   3285 @itemx text section
   3286 @itemx data section
   3287 @end ifset
   3288 These sections hold your program.  @command{@value{AS}} and @code{@value{LD}} treat them as
   3289 separate but equal sections.  Anything you can say of one section is
   3290 true of another.
   3291 @c @ifset aout-bout
   3292 When the program is running, however, it is
   3293 customary for the text section to be unalterable.  The
   3294 text section is often shared among processes: it contains
   3295 instructions, constants and the like.  The data section of a running
   3296 program is usually alterable: for example, C variables would be stored
   3297 in the data section.
   3298 @c @end ifset
   3299 
   3300 @cindex bss section
   3301 @item bss section
   3302 This section contains zeroed bytes when your program begins running.  It
   3303 is used to hold uninitialized variables or common storage.  The length of
   3304 each partial program's bss section is important, but because it starts
   3305 out containing zeroed bytes there is no need to store explicit zero
   3306 bytes in the object file.  The bss section was invented to eliminate
   3307 those explicit zeros from object files.
   3308 
   3309 @cindex absolute section
   3310 @item absolute section
   3311 Address 0 of this section is always ``relocated'' to runtime address 0.
   3312 This is useful if you want to refer to an address that @code{@value{LD}} must
   3313 not change when relocating.  In this sense we speak of absolute
   3314 addresses being ``unrelocatable'': they do not change during relocation.
   3315 
   3316 @cindex undefined section
   3317 @item undefined section
   3318 This ``section'' is a catch-all for address references to objects not in
   3319 the preceding sections.
   3320 @c FIXME: ref to some other doc on obj-file formats could go here.
   3321 @end table
   3322 
   3323 @cindex relocation example
   3324 An idealized example of three relocatable sections follows.
   3325 @ifset COFF-ELF
   3326 The example uses the traditional section names @samp{.text} and @samp{.data}.
   3327 @end ifset
   3328 Memory addresses are on the horizontal axis.
   3329 
   3330 @c TEXI2ROFF-KILL
   3331 @ifnottex
   3332 @c END TEXI2ROFF-KILL
   3333 @smallexample
   3334                       +-----+----+--+
   3335 partial program # 1:  |ttttt|dddd|00|
   3336                       +-----+----+--+
   3337 
   3338                       text   data bss
   3339                       seg.   seg. seg.
   3340 
   3341                       +---+---+---+
   3342 partial program # 2:  |TTT|DDD|000|
   3343                       +---+---+---+
   3344 
   3345                       +--+---+-----+--+----+---+-----+~~
   3346 linked program:       |  |TTT|ttttt|  |dddd|DDD|00000|
   3347                       +--+---+-----+--+----+---+-----+~~
   3348 
   3349     addresses:        0 @dots{}
   3350 @end smallexample
   3351 @c TEXI2ROFF-KILL
   3352 @end ifnottex
   3353 @need 5000
   3354 @tex
   3355 \bigskip
   3356 \line{\it Partial program \#1: \hfil}
   3357 \line{\ibox{2.5cm}{\tt text}\ibox{2cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
   3358 \line{\boxit{2.5cm}{\tt ttttt}\boxit{2cm}{\tt dddd}\boxit{1cm}{\tt 00}\hfil}
   3359 
   3360 \line{\it Partial program \#2: \hfil}
   3361 \line{\ibox{1cm}{\tt text}\ibox{1.5cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
   3362 \line{\boxit{1cm}{\tt TTT}\boxit{1.5cm}{\tt DDDD}\boxit{1cm}{\tt 000}\hfil}
   3363 
   3364 \line{\it linked program: \hfil}
   3365 \line{\ibox{.5cm}{}\ibox{1cm}{\tt text}\ibox{2.5cm}{}\ibox{.75cm}{}\ibox{2cm}{\tt data}\ibox{1.5cm}{}\ibox{2cm}{\tt bss}\hfil}
   3366 \line{\boxit{.5cm}{}\boxit{1cm}{\tt TTT}\boxit{2.5cm}{\tt
   3367 ttttt}\boxit{.75cm}{}\boxit{2cm}{\tt dddd}\boxit{1.5cm}{\tt
   3368 DDDD}\boxit{2cm}{\tt 00000}\ \dots\hfil}
   3369 
   3370 \line{\it addresses: \hfil}
   3371 \line{0\dots\hfil}
   3372 
   3373 @end tex
   3374 @c END TEXI2ROFF-KILL
   3375 
   3376 @node As Sections
   3377 @section Assembler Internal Sections
   3378 
   3379 @cindex internal assembler sections
   3380 @cindex sections in messages, internal
   3381 These sections are meant only for the internal use of @command{@value{AS}}.  They
   3382 have no meaning at run-time.  You do not really need to know about these
   3383 sections for most purposes; but they can be mentioned in @command{@value{AS}}
   3384 warning messages, so it might be helpful to have an idea of their
   3385 meanings to @command{@value{AS}}.  These sections are used to permit the
   3386 value of every expression in your assembly language program to be a
   3387 section-relative address.
   3388 
   3389 @table @b
   3390 @cindex assembler internal logic error
   3391 @item ASSEMBLER-INTERNAL-LOGIC-ERROR!
   3392 An internal assembler logic error has been found.  This means there is a
   3393 bug in the assembler.
   3394 
   3395 @cindex expr (internal section)
   3396 @item expr section
   3397 The assembler stores complex expression internally as combinations of
   3398 symbols.  When it needs to represent an expression as a symbol, it puts
   3399 it in the expr section.
   3400 @c FIXME item debug
   3401 @c FIXME item transfer[t] vector preload
   3402 @c FIXME item transfer[t] vector postload
   3403 @c FIXME item register
   3404 @end table
   3405 
   3406 @node Sub-Sections
   3407 @section Sub-Sections
   3408 
   3409 @cindex numbered subsections
   3410 @cindex grouping data
   3411 @ifset aout-bout
   3412 Assembled bytes
   3413 @ifset COFF-ELF
   3414 conventionally
   3415 @end ifset
   3416 fall into two sections: text and data.
   3417 @end ifset
   3418 You may have separate groups of
   3419 @ifset GENERIC
   3420 data in named sections
   3421 @end ifset
   3422 @ifclear GENERIC
   3423 @ifclear aout-bout
   3424 data in named sections
   3425 @end ifclear
   3426 @ifset aout-bout
   3427 text or data
   3428 @end ifset
   3429 @end ifclear
   3430 that you want to end up near to each other in the object file, even though they
   3431 are not contiguous in the assembler source.  @command{@value{AS}} allows you to
   3432 use @dfn{subsections} for this purpose.  Within each section, there can be
   3433 numbered subsections with values from 0 to 8192.  Objects assembled into the
   3434 same subsection go into the object file together with other objects in the same
   3435 subsection.  For example, a compiler might want to store constants in the text
   3436 section, but might not want to have them interspersed with the program being
   3437 assembled.  In this case, the compiler could issue a @samp{.text 0} before each
   3438 section of code being output, and a @samp{.text 1} before each group of
   3439 constants being output.
   3440 
   3441 Subsections are optional.  If you do not use subsections, everything
   3442 goes in subsection number zero.
   3443 
   3444 @ifset GENERIC
   3445 Each subsection is zero-padded up to a multiple of four bytes.
   3446 (Subsections may be padded a different amount on different flavors
   3447 of @command{@value{AS}}.)
   3448 @end ifset
   3449 @ifclear GENERIC
   3450 @ifset H8
   3451 On the H8/300 platform, each subsection is zero-padded to a word
   3452 boundary (two bytes).
   3453 The same is true on the Renesas SH.
   3454 @end ifset
   3455 @ifset I960
   3456 @c FIXME section padding (alignment)?
   3457 @c Rich Pixley says padding here depends on target obj code format; that
   3458 @c doesn't seem particularly useful to say without further elaboration,
   3459 @c so for now I say nothing about it.  If this is a generic BFD issue,
   3460 @c these paragraphs might need to vanish from this manual, and be
   3461 @c discussed in BFD chapter of binutils (or some such).
   3462 @end ifset
   3463 @end ifclear
   3464 
   3465 Subsections appear in your object file in numeric order, lowest numbered
   3466 to highest.  (All this to be compatible with other people's assemblers.)
   3467 The object file contains no representation of subsections; @code{@value{LD}} and
   3468 other programs that manipulate object files see no trace of them.
   3469 They just see all your text subsections as a text section, and all your
   3470 data subsections as a data section.
   3471 
   3472 To specify which subsection you want subsequent statements assembled
   3473 into, use a numeric argument to specify it, in a @samp{.text
   3474 @var{expression}} or a @samp{.data @var{expression}} statement.
   3475 @ifset COFF
   3476 @ifset GENERIC
   3477 When generating COFF output, you
   3478 @end ifset
   3479 @ifclear GENERIC
   3480 You
   3481 @end ifclear
   3482 can also use an extra subsection
   3483 argument with arbitrary named sections: @samp{.section @var{name},
   3484 @var{expression}}.
   3485 @end ifset
   3486 @ifset ELF
   3487 @ifset GENERIC
   3488 When generating ELF output, you
   3489 @end ifset
   3490 @ifclear GENERIC
   3491 You
   3492 @end ifclear
   3493 can also use the @code{.subsection} directive (@pxref{SubSection})
   3494 to specify a subsection: @samp{.subsection @var{expression}}.
   3495 @end ifset
   3496 @var{Expression} should be an absolute expression
   3497 (@pxref{Expressions}).  If you just say @samp{.text} then @samp{.text 0}
   3498 is assumed.  Likewise @samp{.data} means @samp{.data 0}.  Assembly
   3499 begins in @code{text 0}.  For instance:
   3500 @smallexample
   3501 .text 0     # The default subsection is text 0 anyway.
   3502 .ascii "This lives in the first text subsection. *"
   3503 .text 1
   3504 .ascii "But this lives in the second text subsection."
   3505 .data 0
   3506 .ascii "This lives in the data section,"
   3507 .ascii "in the first data subsection."
   3508 .text 0
   3509 .ascii "This lives in the first text section,"
   3510 .ascii "immediately following the asterisk (*)."
   3511 @end smallexample
   3512 
   3513 Each section has a @dfn{location counter} incremented by one for every byte
   3514 assembled into that section.  Because subsections are merely a convenience
   3515 restricted to @command{@value{AS}} there is no concept of a subsection location
   3516 counter.  There is no way to directly manipulate a location counter---but the
   3517 @code{.align} directive changes it, and any label definition captures its
   3518 current value.  The location counter of the section where statements are being
   3519 assembled is said to be the @dfn{active} location counter.
   3520 
   3521 @node bss
   3522 @section bss Section
   3523 
   3524 @cindex bss section
   3525 @cindex common variable storage
   3526 The bss section is used for local common variable storage.
   3527 You may allocate address space in the bss section, but you may
   3528 not dictate data to load into it before your program executes.  When
   3529 your program starts running, all the contents of the bss
   3530 section are zeroed bytes.
   3531 
   3532 The @code{.lcomm} pseudo-op defines a symbol in the bss section; see
   3533 @ref{Lcomm,,@code{.lcomm}}.
   3534 
   3535 The @code{.comm} pseudo-op may be used to declare a common symbol, which is
   3536 another form of uninitialized symbol; see @ref{Comm,,@code{.comm}}.
   3537 
   3538 @ifset GENERIC
   3539 When assembling for a target which supports multiple sections, such as ELF or
   3540 COFF, you may switch into the @code{.bss} section and define symbols as usual;
   3541 see @ref{Section,,@code{.section}}.  You may only assemble zero values into the
   3542 section.  Typically the section will only contain symbol definitions and
   3543 @code{.skip} directives (@pxref{Skip,,@code{.skip}}).
   3544 @end ifset
   3545 
   3546 @node Symbols
   3547 @chapter Symbols
   3548 
   3549 @cindex symbols
   3550 Symbols are a central concept: the programmer uses symbols to name
   3551 things, the linker uses symbols to link, and the debugger uses symbols
   3552 to debug.
   3553 
   3554 @quotation
   3555 @cindex debuggers, and symbol order
   3556 @emph{Warning:} @command{@value{AS}} does not place symbols in the object file in
   3557 the same order they were declared.  This may break some debuggers.
   3558 @end quotation
   3559 
   3560 @menu
   3561 * Labels::                      Labels
   3562 * Setting Symbols::             Giving Symbols Other Values
   3563 * Symbol Names::                Symbol Names
   3564 * Dot::                         The Special Dot Symbol
   3565 * Symbol Attributes::           Symbol Attributes
   3566 @end menu
   3567 
   3568 @node Labels
   3569 @section Labels
   3570 
   3571 @cindex labels
   3572 A @dfn{label} is written as a symbol immediately followed by a colon
   3573 @samp{:}.  The symbol then represents the current value of the
   3574 active location counter, and is, for example, a suitable instruction
   3575 operand.  You are warned if you use the same symbol to represent two
   3576 different locations: the first definition overrides any other
   3577 definitions.
   3578 
   3579 @ifset HPPA
   3580 On the HPPA, the usual form for a label need not be immediately followed by a
   3581 colon, but instead must start in column zero.  Only one label may be defined on
   3582 a single line.  To work around this, the HPPA version of @command{@value{AS}} also
   3583 provides a special directive @code{.label} for defining labels more flexibly.
   3584 @end ifset
   3585 
   3586 @node Setting Symbols
   3587 @section Giving Symbols Other Values
   3588 
   3589 @cindex assigning values to symbols
   3590 @cindex symbol values, assigning
   3591 A symbol can be given an arbitrary value by writing a symbol, followed
   3592 by an equals sign @samp{=}, followed by an expression
   3593 (@pxref{Expressions}).  This is equivalent to using the @code{.set}
   3594 directive.  @xref{Set,,@code{.set}}.  In the same way, using a double
   3595 equals sign @samp{=}@samp{=} here represents an equivalent of the
   3596 @code{.eqv} directive.  @xref{Eqv,,@code{.eqv}}.
   3597 
   3598 @ifset Blackfin
   3599 Blackfin does not support symbol assignment with @samp{=}.
   3600 @end ifset
   3601 
   3602 @node Symbol Names
   3603 @section Symbol Names
   3604 
   3605 @cindex symbol names
   3606 @cindex names, symbol
   3607 @ifclear SPECIAL-SYMS
   3608 Symbol names begin with a letter or with one of @samp{._}.  On most
   3609 machines, you can also use @code{$} in symbol names; exceptions are
   3610 noted in @ref{Machine Dependencies}.  That character may be followed by any
   3611 string of digits, letters, dollar signs (unless otherwise noted for a
   3612 particular target machine), and underscores.
   3613 @end ifclear
   3614 @ifset SPECIAL-SYMS
   3615 @ifset H8
   3616 Symbol names begin with a letter or with one of @samp{._}.  On the
   3617 Renesas SH you can also use @code{$} in symbol names.  That
   3618 character may be followed by any string of digits, letters, dollar signs (save
   3619 on the H8/300), and underscores.
   3620 @end ifset
   3621 @end ifset
   3622 
   3623 Case of letters is significant: @code{foo} is a different symbol name
   3624 than @code{Foo}.
   3625 
   3626 Multibyte characters are supported.  To generate a symbol name containing
   3627 multibyte characters enclose it within double quotes and use escape codes. cf
   3628 @xref{Strings}.  Generating a multibyte symbol name from a label is not
   3629 currently supported.
   3630 
   3631 Each symbol has exactly one name.  Each name in an assembly language program
   3632 refers to exactly one symbol.  You may use that symbol name any number of times
   3633 in a program.
   3634 
   3635 @subheading Local Symbol Names
   3636 
   3637 @cindex local symbol names
   3638 @cindex symbol names, local
   3639 A local symbol is any symbol beginning with certain local label prefixes.
   3640 By default, the local label prefix is @samp{.L} for ELF systems or
   3641 @samp{L} for traditional a.out systems, but each target may have its own
   3642 set of local label prefixes.
   3643 @ifset HPPA
   3644 On the HPPA local symbols begin with @samp{L$}.
   3645 @end ifset
   3646 
   3647 Local symbols are defined and used within the assembler, but they are
   3648 normally not saved in object files.  Thus, they are not visible when debugging.
   3649 You may use the @samp{-L} option (@pxref{L, ,Include Local Symbols:
   3650 @option{-L}}) to retain the local symbols in the object files.
   3651 
   3652 @subheading Local Labels
   3653 
   3654 @cindex local labels
   3655 @cindex temporary symbol names
   3656 @cindex symbol names, temporary
   3657 Local labels help compilers and programmers use names temporarily.
   3658 They create symbols which are guaranteed to be unique over the entire scope of
   3659 the input source code and which can be referred to by a simple notation.
   3660 To define a local label, write a label of the form @samp{@b{N}:} (where @b{N}
   3661 represents any positive integer).  To refer to the most recent previous
   3662 definition of that label write @samp{@b{N}b}, using the same number as when
   3663 you defined the label.  To refer to the next definition of a local label, write
   3664 @samp{@b{N}f}---the @samp{b} stands for ``backwards'' and the @samp{f} stands
   3665 for ``forwards''.
   3666 
   3667 There is no restriction on how you can use these labels, and you can reuse them
   3668 too.  So that it is possible to repeatedly define the same local label (using
   3669 the same number @samp{@b{N}}), although you can only refer to the most recently
   3670 defined local label of that number (for a backwards reference) or the next
   3671 definition of a specific local label for a forward reference.  It is also worth
   3672 noting that the first 10 local labels (@samp{@b{0:}}@dots{}@samp{@b{9:}}) are
   3673 implemented in a slightly more efficient manner than the others.
   3674 
   3675 Here is an example:
   3676 
   3677 @smallexample
   3678 1:        branch 1f
   3679 2:        branch 1b
   3680 1:        branch 2f
   3681 2:        branch 1b
   3682 @end smallexample
   3683 
   3684 Which is the equivalent of:
   3685 
   3686 @smallexample
   3687 label_1:  branch label_3
   3688 label_2:  branch label_1
   3689 label_3:  branch label_4
   3690 label_4:  branch label_3
   3691 @end smallexample
   3692 
   3693 Local label names are only a notational device.  They are immediately
   3694 transformed into more conventional symbol names before the assembler uses them.
   3695 The symbol names are stored in the symbol table, appear in error messages, and
   3696 are optionally emitted to the object file.  The names are constructed using
   3697 these parts:
   3698 
   3699 @table @code
   3700 @item @emph{local label prefix}
   3701 All local symbols begin with the system-specific local label prefix.
   3702 Normally both @command{@value{AS}} and @code{@value{LD}} forget symbols
   3703 that start with the local label prefix.  These labels are
   3704 used for symbols you are never intended to see.  If you use the
   3705 @samp{-L} option then @command{@value{AS}} retains these symbols in the
   3706 object file. If you also instruct @code{@value{LD}} to retain these symbols,
   3707 you may use them in debugging.
   3708 
   3709 @item @var{number}
   3710 This is the number that was used in the local label definition.  So if the
   3711 label is written @samp{55:} then the number is @samp{55}.
   3712 
   3713 @item @kbd{C-B}
   3714 This unusual character is included so you do not accidentally invent a symbol
   3715 of the same name.  The character has ASCII value of @samp{\002} (control-B).
   3716 
   3717 @item @emph{ordinal number}
   3718 This is a serial number to keep the labels distinct.  The first definition of
   3719 @samp{0:} gets the number @samp{1}.  The 15th definition of @samp{0:} gets the
   3720 number @samp{15}, and so on.  Likewise the first definition of @samp{1:} gets
   3721 the number @samp{1} and its 15th definition gets @samp{15} as well.
   3722 @end table
   3723 
   3724 So for example, the first @code{1:} may be named @code{.L1@kbd{C-B}1}, and
   3725 the 44th @code{3:} may be named @code{.L3@kbd{C-B}44}.
   3726 
   3727 @subheading Dollar Local Labels
   3728 @cindex dollar local symbols
   3729 
   3730 @code{@value{AS}} also supports an even more local form of local labels called
   3731 dollar labels.  These labels go out of scope (i.e., they become undefined) as
   3732 soon as a non-local label is defined.  Thus they remain valid for only a small
   3733 region of the input source code.  Normal local labels, by contrast, remain in
   3734 scope for the entire file, or until they are redefined by another occurrence of
   3735 the same local label.
   3736 
   3737 Dollar labels are defined in exactly the same way as ordinary local labels,
   3738 except that they have a dollar sign suffix to their numeric value, e.g.,
   3739 @samp{@b{55$:}}.
   3740 
   3741 They can also be distinguished from ordinary local labels by their transformed
   3742 names which use ASCII character @samp{\001} (control-A) as the magic character
   3743 to distinguish them from ordinary labels.  For example, the fifth definition of
   3744 @samp{6$} may be named @samp{.L6@kbd{C-A}5}.
   3745 
   3746 @node Dot
   3747 @section The Special Dot Symbol
   3748 
   3749 @cindex dot (symbol)
   3750 @cindex @code{.} (symbol)
   3751 @cindex current address
   3752 @cindex location counter
   3753 The special symbol @samp{.} refers to the current address that
   3754 @command{@value{AS}} is assembling into.  Thus, the expression @samp{melvin:
   3755 .long .} defines @code{melvin} to contain its own address.
   3756 Assigning a value to @code{.} is treated the same as a @code{.org}
   3757 directive.
   3758 @ifclear no-space-dir
   3759 Thus, the expression @samp{.=.+4} is the same as saying
   3760 @samp{.space 4}.
   3761 @end ifclear
   3762 
   3763 @node Symbol Attributes
   3764 @section Symbol Attributes
   3765 
   3766 @cindex symbol attributes
   3767 @cindex attributes, symbol
   3768 Every symbol has, as well as its name, the attributes ``Value'' and
   3769 ``Type''.  Depending on output format, symbols can also have auxiliary
   3770 attributes.
   3771 @ifset INTERNALS
   3772 The detailed definitions are in @file{a.out.h}.
   3773 @end ifset
   3774 
   3775 If you use a symbol without defining it, @command{@value{AS}} assumes zero for
   3776 all these attributes, and probably won't warn you.  This makes the
   3777 symbol an externally defined symbol, which is generally what you
   3778 would want.
   3779 
   3780 @menu
   3781 * Symbol Value::                Value
   3782 * Symbol Type::                 Type
   3783 @ifset aout-bout
   3784 @ifset GENERIC
   3785 * a.out Symbols::               Symbol Attributes: @code{a.out}
   3786 @end ifset
   3787 @ifclear GENERIC
   3788 @ifclear BOUT
   3789 * a.out Symbols::               Symbol Attributes: @code{a.out}
   3790 @end ifclear
   3791 @ifset BOUT
   3792 * a.out Symbols::               Symbol Attributes: @code{a.out}, @code{b.out}
   3793 @end ifset
   3794 @end ifclear
   3795 @end ifset
   3796 @ifset COFF
   3797 * COFF Symbols::                Symbol Attributes for COFF
   3798 @end ifset
   3799 @ifset SOM
   3800 * SOM Symbols::                Symbol Attributes for SOM
   3801 @end ifset
   3802 @end menu
   3803 
   3804 @node Symbol Value
   3805 @subsection Value
   3806 
   3807 @cindex value of a symbol
   3808 @cindex symbol value
   3809 The value of a symbol is (usually) 32 bits.  For a symbol which labels a
   3810 location in the text, data, bss or absolute sections the value is the
   3811 number of addresses from the start of that section to the label.
   3812 Naturally for text, data and bss sections the value of a symbol changes
   3813 as @code{@value{LD}} changes section base addresses during linking.  Absolute
   3814 symbols' values do not change during linking: that is why they are
   3815 called absolute.
   3816 
   3817 The value of an undefined symbol is treated in a special way.  If it is
   3818 0 then the symbol is not defined in this assembler source file, and
   3819 @code{@value{LD}} tries to determine its value from other files linked into the
   3820 same program.  You make this kind of symbol simply by mentioning a symbol
   3821 name without defining it.  A non-zero value represents a @code{.comm}
   3822 common declaration.  The value is how much common storage to reserve, in
   3823 bytes (addresses).  The symbol refers to the first address of the
   3824 allocated storage.
   3825 
   3826 @node Symbol Type
   3827 @subsection Type
   3828 
   3829 @cindex type of a symbol
   3830 @cindex symbol type
   3831 The type attribute of a symbol contains relocation (section)
   3832 information, any flag settings indicating that a symbol is external, and
   3833 (optionally), other information for linkers and debuggers.  The exact
   3834 format depends on the object-code output format in use.
   3835 
   3836 @ifset aout-bout
   3837 @ifclear GENERIC
   3838 @ifset BOUT
   3839 @c The following avoids a "widow" subsection title.  @group would be
   3840 @c better if it were available outside examples.
   3841 @need 1000
   3842 @node a.out Symbols
   3843 @subsection Symbol Attributes: @code{a.out}, @code{b.out}
   3844 
   3845 @cindex @code{b.out} symbol attributes
   3846 @cindex symbol attributes, @code{b.out}
   3847 These symbol attributes appear only when @command{@value{AS}} is configured for
   3848 one of the Berkeley-descended object output formats---@code{a.out} or
   3849 @code{b.out}.
   3850 
   3851 @end ifset
   3852 @ifclear BOUT
   3853 @node a.out Symbols
   3854 @subsection Symbol Attributes: @code{a.out}
   3855 
   3856 @cindex @code{a.out} symbol attributes
   3857 @cindex symbol attributes, @code{a.out}
   3858 
   3859 @end ifclear
   3860 @end ifclear
   3861 @ifset GENERIC
   3862 @node a.out Symbols
   3863 @subsection Symbol Attributes: @code{a.out}
   3864 
   3865 @cindex @code{a.out} symbol attributes
   3866 @cindex symbol attributes, @code{a.out}
   3867 
   3868 @end ifset
   3869 @menu
   3870 * Symbol Desc::                 Descriptor
   3871 * Symbol Other::                Other
   3872 @end menu
   3873 
   3874 @node Symbol Desc
   3875 @subsubsection Descriptor
   3876 
   3877 @cindex descriptor, of @code{a.out} symbol
   3878 This is an arbitrary 16-bit value.  You may establish a symbol's
   3879 descriptor value by using a @code{.desc} statement
   3880 (@pxref{Desc,,@code{.desc}}).  A descriptor value means nothing to
   3881 @command{@value{AS}}.
   3882 
   3883 @node Symbol Other
   3884 @subsubsection Other
   3885 
   3886 @cindex other attribute, of @code{a.out} symbol
   3887 This is an arbitrary 8-bit value.  It means nothing to @command{@value{AS}}.
   3888 @end ifset
   3889 
   3890 @ifset COFF
   3891 @node COFF Symbols
   3892 @subsection Symbol Attributes for COFF
   3893 
   3894 @cindex COFF symbol attributes
   3895 @cindex symbol attributes, COFF
   3896 
   3897 The COFF format supports a multitude of auxiliary symbol attributes;
   3898 like the primary symbol attributes, they are set between @code{.def} and
   3899 @code{.endef} directives.
   3900 
   3901 @subsubsection Primary Attributes
   3902 
   3903 @cindex primary attributes, COFF symbols
   3904 The symbol name is set with @code{.def}; the value and type,
   3905 respectively, with @code{.val} and @code{.type}.
   3906 
   3907 @subsubsection Auxiliary Attributes
   3908 
   3909 @cindex auxiliary attributes, COFF symbols
   3910 The @command{@value{AS}} directives @code{.dim}, @code{.line}, @code{.scl},
   3911 @code{.size}, @code{.tag}, and @code{.weak} can generate auxiliary symbol
   3912 table information for COFF.
   3913 @end ifset
   3914 
   3915 @ifset SOM
   3916 @node SOM Symbols
   3917 @subsection Symbol Attributes for SOM
   3918 
   3919 @cindex SOM symbol attributes
   3920 @cindex symbol attributes, SOM
   3921 
   3922 The SOM format for the HPPA supports a multitude of symbol attributes set with
   3923 the @code{.EXPORT} and @code{.IMPORT} directives.
   3924 
   3925 The attributes are described in @cite{HP9000 Series 800 Assembly
   3926 Language Reference Manual} (HP 92432-90001) under the @code{IMPORT} and
   3927 @code{EXPORT} assembler directive documentation.
   3928 @end ifset
   3929 
   3930 @node Expressions
   3931 @chapter Expressions
   3932 
   3933 @cindex expressions
   3934 @cindex addresses
   3935 @cindex numeric values
   3936 An @dfn{expression} specifies an address or numeric value.
   3937 Whitespace may precede and/or follow an expression.
   3938 
   3939 The result of an expression must be an absolute number, or else an offset into
   3940 a particular section.  If an expression is not absolute, and there is not
   3941 enough information when @command{@value{AS}} sees the expression to know its
   3942 section, a second pass over the source program might be necessary to interpret
   3943 the expression---but the second pass is currently not implemented.
   3944 @command{@value{AS}} aborts with an error message in this situation.
   3945 
   3946 @menu
   3947 * Empty Exprs::                 Empty Expressions
   3948 * Integer Exprs::               Integer Expressions
   3949 @end menu
   3950 
   3951 @node Empty Exprs
   3952 @section Empty Expressions
   3953 
   3954 @cindex empty expressions
   3955 @cindex expressions, empty
   3956 An empty expression has no value: it is just whitespace or null.
   3957 Wherever an absolute expression is required, you may omit the
   3958 expression, and @command{@value{AS}} assumes a value of (absolute) 0.  This
   3959 is compatible with other assemblers.
   3960 
   3961 @node Integer Exprs
   3962 @section Integer Expressions
   3963 
   3964 @cindex integer expressions
   3965 @cindex expressions, integer
   3966 An @dfn{integer expression} is one or more @emph{arguments} delimited
   3967 by @emph{operators}.
   3968 
   3969 @menu
   3970 * Arguments::                   Arguments
   3971 * Operators::                   Operators
   3972 * Prefix Ops::                  Prefix Operators
   3973 * Infix Ops::                   Infix Operators
   3974 @end menu
   3975 
   3976 @node Arguments
   3977 @subsection Arguments
   3978 
   3979 @cindex expression arguments
   3980 @cindex arguments in expressions
   3981 @cindex operands in expressions
   3982 @cindex arithmetic operands
   3983 @dfn{Arguments} are symbols, numbers or subexpressions.  In other
   3984 contexts arguments are sometimes called ``arithmetic operands''.  In
   3985 this manual, to avoid confusing them with the ``instruction operands'' of
   3986 the machine language, we use the term ``argument'' to refer to parts of
   3987 expressions only, reserving the word ``operand'' to refer only to machine
   3988 instruction operands.
   3989 
   3990 Symbols are evaluated to yield @{@var{section} @var{NNN}@} where
   3991 @var{section} is one of text, data, bss, absolute,
   3992 or undefined.  @var{NNN} is a signed, 2's complement 32 bit
   3993 integer.
   3994 
   3995 Numbers are usually integers.
   3996 
   3997 A number can be a flonum or bignum.  In this case, you are warned
   3998 that only the low order 32 bits are used, and @command{@value{AS}} pretends
   3999 these 32 bits are an integer.  You may write integer-manipulating
   4000 instructions that act on exotic constants, compatible with other
   4001 assemblers.
   4002 
   4003 @cindex subexpressions
   4004 Subexpressions are a left parenthesis @samp{(} followed by an integer
   4005 expression, followed by a right parenthesis @samp{)}; or a prefix
   4006 operator followed by an argument.
   4007 
   4008 @node Operators
   4009 @subsection Operators
   4010 
   4011 @cindex operators, in expressions
   4012 @cindex arithmetic functions
   4013 @cindex functions, in expressions
   4014 @dfn{Operators} are arithmetic functions, like @code{+} or @code{%}.  Prefix
   4015 operators are followed by an argument.  Infix operators appear
   4016 between their arguments.  Operators may be preceded and/or followed by
   4017 whitespace.
   4018 
   4019 @node Prefix Ops
   4020 @subsection Prefix Operator
   4021 
   4022 @cindex prefix operators
   4023 @command{@value{AS}} has the following @dfn{prefix operators}.  They each take
   4024 one argument, which must be absolute.
   4025 
   4026 @c the tex/end tex stuff surrounding this small table is meant to make
   4027 @c it align, on the printed page, with the similar table in the next
   4028 @c section (which is inside an enumerate).
   4029 @tex
   4030 \global\advance\leftskip by \itemindent
   4031 @end tex
   4032 
   4033 @table @code
   4034 @item -
   4035 @dfn{Negation}.  Two's complement negation.
   4036 @item ~
   4037 @dfn{Complementation}.  Bitwise not.
   4038 @end table
   4039 
   4040 @tex
   4041 \global\advance\leftskip by -\itemindent
   4042 @end tex
   4043 
   4044 @node Infix Ops
   4045 @subsection Infix Operators
   4046 
   4047 @cindex infix operators
   4048 @cindex operators, permitted arguments
   4049 @dfn{Infix operators} take two arguments, one on either side.  Operators
   4050 have precedence, but operations with equal precedence are performed left
   4051 to right.  Apart from @code{+} or @option{-}, both arguments must be
   4052 absolute, and the result is absolute.
   4053 
   4054 @enumerate
   4055 @cindex operator precedence
   4056 @cindex precedence of operators
   4057 
   4058 @item
   4059 Highest Precedence
   4060 
   4061 @table @code
   4062 @item *
   4063 @dfn{Multiplication}.
   4064 
   4065 @item /
   4066 @dfn{Division}.  Truncation is the same as the C operator @samp{/}
   4067 
   4068 @item %
   4069 @dfn{Remainder}.
   4070 
   4071 @item <<
   4072 @dfn{Shift Left}.  Same as the C operator @samp{<<}.
   4073 
   4074 @item >>
   4075 @dfn{Shift Right}.  Same as the C operator @samp{>>}.
   4076 @end table
   4077 
   4078 @item
   4079 Intermediate precedence
   4080 
   4081 @table @code
   4082 @item |
   4083 
   4084 @dfn{Bitwise Inclusive Or}.
   4085 
   4086 @item &
   4087 @dfn{Bitwise And}.
   4088 
   4089 @item ^
   4090 @dfn{Bitwise Exclusive Or}.
   4091 
   4092 @item !
   4093 @dfn{Bitwise Or Not}.
   4094 @end table
   4095 
   4096 @item
   4097 Low Precedence
   4098 
   4099 @table @code
   4100 @cindex addition, permitted arguments
   4101 @cindex plus, permitted arguments
   4102 @cindex arguments for addition
   4103 @item +
   4104 @dfn{Addition}.  If either argument is absolute, the result has the section of
   4105 the other argument.  You may not add together arguments from different
   4106 sections.
   4107 
   4108 @cindex subtraction, permitted arguments
   4109 @cindex minus, permitted arguments
   4110 @cindex arguments for subtraction
   4111 @item -
   4112 @dfn{Subtraction}.  If the right argument is absolute, the
   4113 result has the section of the left argument.
   4114 If both arguments are in the same section, the result is absolute.
   4115 You may not subtract arguments from different sections.
   4116 @c FIXME is there still something useful to say about undefined - undefined ?
   4117 
   4118 @cindex comparison expressions
   4119 @cindex expressions, comparison
   4120 @item  ==
   4121 @dfn{Is Equal To}
   4122 @item <>
   4123 @itemx !=
   4124 @dfn{Is Not Equal To}
   4125 @item <
   4126 @dfn{Is Less Than}
   4127 @item >
   4128 @dfn{Is Greater Than}
   4129 @item >=
   4130 @dfn{Is Greater Than Or Equal To}
   4131 @item <=
   4132 @dfn{Is Less Than Or Equal To}
   4133 
   4134 The comparison operators can be used as infix operators.  A true results has a
   4135 value of -1 whereas a false result has a value of 0.   Note, these operators
   4136 perform signed comparisons.
   4137 @end table
   4138 
   4139 @item Lowest Precedence
   4140 
   4141 @table @code
   4142 @item &&
   4143 @dfn{Logical And}.
   4144 
   4145 @item ||
   4146 @dfn{Logical Or}.
   4147 
   4148 These two logical operations can be used to combine the results of sub
   4149 expressions.  Note, unlike the comparison operators a true result returns a
   4150 value of 1 but a false results does still return 0.  Also note that the logical
   4151 or operator has a slightly lower precedence than logical and.
   4152 
   4153 @end table
   4154 @end enumerate
   4155 
   4156 In short, it's only meaningful to add or subtract the @emph{offsets} in an
   4157 address; you can only have a defined section in one of the two arguments.
   4158 
   4159 @node Pseudo Ops
   4160 @chapter Assembler Directives
   4161 
   4162 @cindex directives, machine independent
   4163 @cindex pseudo-ops, machine independent
   4164 @cindex machine independent directives
   4165 All assembler directives have names that begin with a period (@samp{.}).
   4166 The rest of the name is letters, usually in lower case.
   4167 
   4168 This chapter discusses directives that are available regardless of the
   4169 target machine configuration for the @sc{gnu} assembler.
   4170 @ifset GENERIC
   4171 Some machine configurations provide additional directives.
   4172 @xref{Machine Dependencies}.
   4173 @end ifset
   4174 @ifclear GENERIC
   4175 @ifset machine-directives
   4176 @xref{Machine Dependencies}, for additional directives.
   4177 @end ifset
   4178 @end ifclear
   4179 
   4180 @menu
   4181 * Abort::                       @code{.abort}
   4182 @ifset COFF
   4183 * ABORT (COFF)::                @code{.ABORT}
   4184 @end ifset
   4185 
   4186 * Align::                       @code{.align @var{abs-expr} , @var{abs-expr}}
   4187 * Altmacro::                    @code{.altmacro}
   4188 * Ascii::                       @code{.ascii "@var{string}"}@dots{}
   4189 * Asciz::                       @code{.asciz "@var{string}"}@dots{}
   4190 * Balign::                      @code{.balign @var{abs-expr} , @var{abs-expr}}
   4191 * Bundle directives::           @code{.bundle_align_mode @var{abs-expr}}, @code{.bundle_lock}, @code{.bundle_unlock}
   4192 * Byte::                        @code{.byte @var{expressions}}
   4193 * CFI directives::		@code{.cfi_startproc [simple]}, @code{.cfi_endproc}, etc.
   4194 * Comm::                        @code{.comm @var{symbol} , @var{length} }
   4195 * Data::                        @code{.data @var{subsection}}
   4196 @ifset COFF
   4197 * Def::                         @code{.def @var{name}}
   4198 @end ifset
   4199 @ifset aout-bout
   4200 * Desc::                        @code{.desc @var{symbol}, @var{abs-expression}}
   4201 @end ifset
   4202 @ifset COFF
   4203 * Dim::                         @code{.dim}
   4204 @end ifset
   4205 
   4206 * Double::                      @code{.double @var{flonums}}
   4207 * Eject::                       @code{.eject}
   4208 * Else::                        @code{.else}
   4209 * Elseif::                      @code{.elseif}
   4210 * End::				@code{.end}
   4211 @ifset COFF
   4212 * Endef::                       @code{.endef}
   4213 @end ifset
   4214 
   4215 * Endfunc::                     @code{.endfunc}
   4216 * Endif::                       @code{.endif}
   4217 * Equ::                         @code{.equ @var{symbol}, @var{expression}}
   4218 * Equiv::                       @code{.equiv @var{symbol}, @var{expression}}
   4219 * Eqv::                         @code{.eqv @var{symbol}, @var{expression}}
   4220 * Err::				@code{.err}
   4221 * Error::			@code{.error @var{string}}
   4222 * Exitm::			@code{.exitm}
   4223 * Extern::                      @code{.extern}
   4224 * Fail::			@code{.fail}
   4225 * File::                        @code{.file}
   4226 * Fill::                        @code{.fill @var{repeat} , @var{size} , @var{value}}
   4227 * Float::                       @code{.float @var{flonums}}
   4228 * Func::                        @code{.func}
   4229 * Global::                      @code{.global @var{symbol}}, @code{.globl @var{symbol}}
   4230 @ifset ELF
   4231 * Gnu_attribute::               @code{.gnu_attribute @var{tag},@var{value}}
   4232 * Hidden::                      @code{.hidden @var{names}}
   4233 @end ifset
   4234 
   4235 * hword::                       @code{.hword @var{expressions}}
   4236 * Ident::                       @code{.ident}
   4237 * If::                          @code{.if @var{absolute expression}}
   4238 * Incbin::                      @code{.incbin "@var{file}"[,@var{skip}[,@var{count}]]}
   4239 * Include::                     @code{.include "@var{file}"}
   4240 * Int::                         @code{.int @var{expressions}}
   4241 @ifset ELF
   4242 * Internal::                    @code{.internal @var{names}}
   4243 @end ifset
   4244 
   4245 * Irp::				@code{.irp @var{symbol},@var{values}}@dots{}
   4246 * Irpc::			@code{.irpc @var{symbol},@var{values}}@dots{}
   4247 * Lcomm::                       @code{.lcomm @var{symbol} , @var{length}}
   4248 * Lflags::                      @code{.lflags}
   4249 @ifclear no-line-dir
   4250 * Line::                        @code{.line @var{line-number}}
   4251 @end ifclear
   4252 
   4253 * Linkonce::			@code{.linkonce [@var{type}]}
   4254 * List::                        @code{.list}
   4255 * Ln::                          @code{.ln @var{line-number}}
   4256 * Loc::                         @code{.loc @var{fileno} @var{lineno}}
   4257 * Loc_mark_labels::             @code{.loc_mark_labels @var{enable}}
   4258 @ifset ELF
   4259 * Local::                       @code{.local @var{names}}
   4260 @end ifset
   4261 
   4262 * Long::                        @code{.long @var{expressions}}
   4263 @ignore
   4264 * Lsym::                        @code{.lsym @var{symbol}, @var{expression}}
   4265 @end ignore
   4266 
   4267 * Macro::			@code{.macro @var{name} @var{args}}@dots{}
   4268 * MRI::				@code{.mri @var{val}}
   4269 * Noaltmacro::                  @code{.noaltmacro}
   4270 * Nolist::                      @code{.nolist}
   4271 * Octa::                        @code{.octa @var{bignums}}
   4272 * Offset::			@code{.offset @var{loc}}
   4273 * Org::                         @code{.org @var{new-lc}, @var{fill}}
   4274 * P2align::                     @code{.p2align @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
   4275 @ifset ELF
   4276 * PopSection::                  @code{.popsection}
   4277 * Previous::                    @code{.previous}
   4278 @end ifset
   4279 
   4280 * Print::			@code{.print @var{string}}
   4281 @ifset ELF
   4282 * Protected::                   @code{.protected @var{names}}
   4283 @end ifset
   4284 
   4285 * Psize::                       @code{.psize @var{lines}, @var{columns}}
   4286 * Purgem::			@code{.purgem @var{name}}
   4287 @ifset ELF
   4288 * PushSection::                 @code{.pushsection @var{name}}
   4289 @end ifset
   4290 
   4291 * Quad::                        @code{.quad @var{bignums}}
   4292 * Reloc::			@code{.reloc @var{offset}, @var{reloc_name}[, @var{expression}]}
   4293 * Rept::			@code{.rept @var{count}}
   4294 * Sbttl::                       @code{.sbttl "@var{subheading}"}
   4295 @ifset COFF
   4296 * Scl::                         @code{.scl @var{class}}
   4297 @end ifset
   4298 @ifset COFF-ELF
   4299 * Section::                     @code{.section @var{name}[, @var{flags}]}
   4300 @end ifset
   4301 
   4302 * Set::                         @code{.set @var{symbol}, @var{expression}}
   4303 * Short::                       @code{.short @var{expressions}}
   4304 * Single::                      @code{.single @var{flonums}}
   4305 @ifset COFF-ELF
   4306 * Size::                        @code{.size [@var{name} , @var{expression}]}
   4307 @end ifset
   4308 @ifclear no-space-dir
   4309 * Skip::                        @code{.skip @var{size} , @var{fill}}
   4310 @end ifclear
   4311 
   4312 * Sleb128::			@code{.sleb128 @var{expressions}}
   4313 @ifclear no-space-dir
   4314 * Space::                       @code{.space @var{size} , @var{fill}}
   4315 @end ifclear
   4316 @ifset have-stabs
   4317 * Stab::                        @code{.stabd, .stabn, .stabs}
   4318 @end ifset
   4319 
   4320 * String::                      @code{.string "@var{str}"}, @code{.string8 "@var{str}"}, @code{.string16 "@var{str}"}, @code{.string32 "@var{str}"}, @code{.string64 "@var{str}"}
   4321 * Struct::			@code{.struct @var{expression}}
   4322 @ifset ELF
   4323 * SubSection::                  @code{.subsection}
   4324 * Symver::                      @code{.symver @var{name},@var{name2@@nodename}}
   4325 @end ifset
   4326 
   4327 @ifset COFF
   4328 * Tag::                         @code{.tag @var{structname}}
   4329 @end ifset
   4330 
   4331 * Text::                        @code{.text @var{subsection}}
   4332 * Title::                       @code{.title "@var{heading}"}
   4333 @ifset COFF-ELF
   4334 * Type::                        @code{.type <@var{int} | @var{name} , @var{type description}>}
   4335 @end ifset
   4336 
   4337 * Uleb128::                     @code{.uleb128 @var{expressions}}
   4338 @ifset COFF
   4339 * Val::                         @code{.val @var{addr}}
   4340 @end ifset
   4341 
   4342 @ifset ELF
   4343 * Version::                     @code{.version "@var{string}"}
   4344 * VTableEntry::                 @code{.vtable_entry @var{table}, @var{offset}}
   4345 * VTableInherit::               @code{.vtable_inherit @var{child}, @var{parent}}
   4346 @end ifset
   4347 
   4348 * Warning::			@code{.warning @var{string}}
   4349 * Weak::                        @code{.weak @var{names}}
   4350 * Weakref::                     @code{.weakref @var{alias}, @var{symbol}}
   4351 * Word::                        @code{.word @var{expressions}}
   4352 * Deprecated::                  Deprecated Directives
   4353 @end menu
   4354 
   4355 @node Abort
   4356 @section @code{.abort}
   4357 
   4358 @cindex @code{abort} directive
   4359 @cindex stopping the assembly
   4360 This directive stops the assembly immediately.  It is for
   4361 compatibility with other assemblers.  The original idea was that the
   4362 assembly language source would be piped into the assembler.  If the sender
   4363 of the source quit, it could use this directive tells @command{@value{AS}} to
   4364 quit also.  One day @code{.abort} will not be supported.
   4365 
   4366 @ifset COFF
   4367 @node ABORT (COFF)
   4368 @section @code{.ABORT} (COFF)
   4369 
   4370 @cindex @code{ABORT} directive
   4371 When producing COFF output, @command{@value{AS}} accepts this directive as a
   4372 synonym for @samp{.abort}.
   4373 
   4374 @ifset BOUT
   4375 When producing @code{b.out} output, @command{@value{AS}} accepts this directive,
   4376 but ignores it.
   4377 @end ifset
   4378 @end ifset
   4379 
   4380 @node Align
   4381 @section @code{.align @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
   4382 
   4383 @cindex padding the location counter
   4384 @cindex @code{align} directive
   4385 Pad the location counter (in the current subsection) to a particular storage
   4386 boundary.  The first expression (which must be absolute) is the alignment
   4387 required, as described below.
   4388 
   4389 The second expression (also absolute) gives the fill value to be stored in the
   4390 padding bytes.  It (and the comma) may be omitted.  If it is omitted, the
   4391 padding bytes are normally zero.  However, on some systems, if the section is
   4392 marked as containing code and the fill value is omitted, the space is filled
   4393 with no-op instructions.
   4394 
   4395 The third expression is also absolute, and is also optional.  If it is present,
   4396 it is the maximum number of bytes that should be skipped by this alignment
   4397 directive.  If doing the alignment would require skipping more bytes than the
   4398 specified maximum, then the alignment is not done at all.  You can omit the
   4399 fill value (the second argument) entirely by simply using two commas after the
   4400 required alignment; this can be useful if you want the alignment to be filled
   4401 with no-op instructions when appropriate.
   4402 
   4403 The way the required alignment is specified varies from system to system.
   4404 For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or1k,
   4405 s390, sparc, tic4x, tic80 and xtensa, the first expression is the
   4406 alignment request in bytes.  For example @samp{.align 8} advances
   4407 the location counter until it is a multiple of 8.  If the location counter
   4408 is already a multiple of 8, no change is needed.  For the tic54x, the
   4409 first expression is the alignment request in words.
   4410 
   4411 For other systems, including ppc, i386 using a.out format, arm and
   4412 strongarm, it is the
   4413 number of low-order zero bits the location counter must have after
   4414 advancement.  For example @samp{.align 3} advances the location
   4415 counter until it a multiple of 8.  If the location counter is already a
   4416 multiple of 8, no change is needed.
   4417 
   4418 This inconsistency is due to the different behaviors of the various
   4419 native assemblers for these systems which GAS must emulate.
   4420 GAS also provides @code{.balign} and @code{.p2align} directives,
   4421 described later, which have a consistent behavior across all
   4422 architectures (but are specific to GAS).
   4423 
   4424 @node Altmacro
   4425 @section @code{.altmacro}
   4426 Enable alternate macro mode, enabling:
   4427 
   4428 @ftable @code
   4429 @item LOCAL @var{name} [ , @dots{} ]
   4430 One additional directive, @code{LOCAL}, is available.  It is used to
   4431 generate a string replacement for each of the @var{name} arguments, and
   4432 replace any instances of @var{name} in each macro expansion.  The
   4433 replacement string is unique in the assembly, and different for each
   4434 separate macro expansion.  @code{LOCAL} allows you to write macros that
   4435 define symbols, without fear of conflict between separate macro expansions.
   4436 
   4437 @item String delimiters
   4438 You can write strings delimited in these other ways besides
   4439 @code{"@var{string}"}:
   4440 
   4441 @table @code
   4442 @item '@var{string}'
   4443 You can delimit strings with single-quote characters.
   4444 
   4445 @item <@var{string}>
   4446 You can delimit strings with matching angle brackets.
   4447 @end table
   4448 
   4449 @item single-character string escape
   4450 To include any single character literally in a string (even if the
   4451 character would otherwise have some special meaning), you can prefix the
   4452 character with @samp{!} (an exclamation mark).  For example, you can
   4453 write @samp{<4.3 !> 5.4!!>} to get the literal text @samp{4.3 > 5.4!}.
   4454 
   4455 @item Expression results as strings
   4456 You can write @samp{%@var{expr}} to evaluate the expression @var{expr}
   4457 and use the result as a string.
   4458 @end ftable
   4459 
   4460 @node Ascii
   4461 @section @code{.ascii "@var{string}"}@dots{}
   4462 
   4463 @cindex @code{ascii} directive
   4464 @cindex string literals
   4465 @code{.ascii} expects zero or more string literals (@pxref{Strings})
   4466 separated by commas.  It assembles each string (with no automatic
   4467 trailing zero byte) into consecutive addresses.
   4468 
   4469 @node Asciz
   4470 @section @code{.asciz "@var{string}"}@dots{}
   4471 
   4472 @cindex @code{asciz} directive
   4473 @cindex zero-terminated strings
   4474 @cindex null-terminated strings
   4475 @code{.asciz} is just like @code{.ascii}, but each string is followed by
   4476 a zero byte.  The ``z'' in @samp{.asciz} stands for ``zero''.
   4477 
   4478 @node Balign
   4479 @section @code{.balign[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
   4480 
   4481 @cindex padding the location counter given number of bytes
   4482 @cindex @code{balign} directive
   4483 Pad the location counter (in the current subsection) to a particular
   4484 storage boundary.  The first expression (which must be absolute) is the
   4485 alignment request in bytes.  For example @samp{.balign 8} advances
   4486 the location counter until it is a multiple of 8.  If the location counter
   4487 is already a multiple of 8, no change is needed.
   4488 
   4489 The second expression (also absolute) gives the fill value to be stored in the
   4490 padding bytes.  It (and the comma) may be omitted.  If it is omitted, the
   4491 padding bytes are normally zero.  However, on some systems, if the section is
   4492 marked as containing code and the fill value is omitted, the space is filled
   4493 with no-op instructions.
   4494 
   4495 The third expression is also absolute, and is also optional.  If it is present,
   4496 it is the maximum number of bytes that should be skipped by this alignment
   4497 directive.  If doing the alignment would require skipping more bytes than the
   4498 specified maximum, then the alignment is not done at all.  You can omit the
   4499 fill value (the second argument) entirely by simply using two commas after the
   4500 required alignment; this can be useful if you want the alignment to be filled
   4501 with no-op instructions when appropriate.
   4502 
   4503 @cindex @code{balignw} directive
   4504 @cindex @code{balignl} directive
   4505 The @code{.balignw} and @code{.balignl} directives are variants of the
   4506 @code{.balign} directive.  The @code{.balignw} directive treats the fill
   4507 pattern as a two byte word value.  The @code{.balignl} directives treats the
   4508 fill pattern as a four byte longword value.  For example, @code{.balignw
   4509 4,0x368d} will align to a multiple of 4.  If it skips two bytes, they will be
   4510 filled in with the value 0x368d (the exact placement of the bytes depends upon
   4511 the endianness of the processor).  If it skips 1 or 3 bytes, the fill value is
   4512 undefined.
   4513 
   4514 @node Bundle directives
   4515 @section @code{.bundle_align_mode @var{abs-expr}}
   4516 @cindex @code{bundle_align_mode} directive
   4517 @cindex bundle
   4518 @cindex instruction bundle
   4519 @cindex aligned instruction bundle
   4520 @code{.bundle_align_mode} enables or disables @dfn{aligned instruction
   4521 bundle} mode.  In this mode, sequences of adjacent instructions are grouped
   4522 into fixed-sized @dfn{bundles}.  If the argument is zero, this mode is
   4523 disabled (which is the default state).  If the argument it not zero, it
   4524 gives the size of an instruction bundle as a power of two (as for the
   4525 @code{.p2align} directive, @pxref{P2align}).
   4526 
   4527 For some targets, it's an ABI requirement that no instruction may span a
   4528 certain aligned boundary.  A @dfn{bundle} is simply a sequence of
   4529 instructions that starts on an aligned boundary.  For example, if
   4530 @var{abs-expr} is @code{5} then the bundle size is 32, so each aligned
   4531 chunk of 32 bytes is a bundle.  When aligned instruction bundle mode is in
   4532 effect, no single instruction may span a boundary between bundles.  If an
   4533 instruction would start too close to the end of a bundle for the length of
   4534 that particular instruction to fit within the bundle, then the space at the
   4535 end of that bundle is filled with no-op instructions so the instruction
   4536 starts in the next bundle.  As a corollary, it's an error if any single
   4537 instruction's encoding is longer than the bundle size.
   4538 
   4539 @section @code{.bundle_lock} and @code{.bundle_unlock}
   4540 @cindex @code{bundle_lock} directive
   4541 @cindex @code{bundle_unlock} directive
   4542 The @code{.bundle_lock} and directive @code{.bundle_unlock} directives
   4543 allow explicit control over instruction bundle padding.  These directives
   4544 are only valid when @code{.bundle_align_mode} has been used to enable
   4545 aligned instruction bundle mode.  It's an error if they appear when
   4546 @code{.bundle_align_mode} has not been used at all, or when the last
   4547 directive was @w{@code{.bundle_align_mode 0}}.
   4548 
   4549 @cindex bundle-locked
   4550 For some targets, it's an ABI requirement that certain instructions may
   4551 appear only as part of specified permissible sequences of multiple
   4552 instructions, all within the same bundle.  A pair of @code{.bundle_lock}
   4553 and @code{.bundle_unlock} directives define a @dfn{bundle-locked}
   4554 instruction sequence.  For purposes of aligned instruction bundle mode, a
   4555 sequence starting with @code{.bundle_lock} and ending with
   4556 @code{.bundle_unlock} is treated as a single instruction.  That is, the
   4557 entire sequence must fit into a single bundle and may not span a bundle
   4558 boundary.  If necessary, no-op instructions will be inserted before the
   4559 first instruction of the sequence so that the whole sequence starts on an
   4560 aligned bundle boundary.  It's an error if the sequence is longer than the
   4561 bundle size.
   4562 
   4563 For convenience when using @code{.bundle_lock} and @code{.bundle_unlock}
   4564 inside assembler macros (@pxref{Macro}), bundle-locked sequences may be
   4565 nested.  That is, a second @code{.bundle_lock} directive before the next
   4566 @code{.bundle_unlock} directive has no effect except that it must be
   4567 matched by another closing @code{.bundle_unlock} so that there is the
   4568 same number of @code{.bundle_lock} and @code{.bundle_unlock} directives.
   4569 
   4570 @node Byte
   4571 @section @code{.byte @var{expressions}}
   4572 
   4573 @cindex @code{byte} directive
   4574 @cindex integers, one byte
   4575 @code{.byte} expects zero or more expressions, separated by commas.
   4576 Each expression is assembled into the next byte.
   4577 
   4578 @node CFI directives
   4579 @section @code{.cfi_sections @var{section_list}}
   4580 @cindex @code{cfi_sections} directive
   4581 @code{.cfi_sections} may be used to specify whether CFI directives
   4582 should emit @code{.eh_frame} section and/or @code{.debug_frame} section.
   4583 If @var{section_list} is @code{.eh_frame}, @code{.eh_frame} is emitted,
   4584 if @var{section_list} is @code{.debug_frame}, @code{.debug_frame} is emitted.
   4585 To emit both use @code{.eh_frame, .debug_frame}.  The default if this
   4586 directive is not used is @code{.cfi_sections .eh_frame}.
   4587 
   4588 @section @code{.cfi_startproc [simple]}
   4589 @cindex @code{cfi_startproc} directive
   4590 @code{.cfi_startproc} is used at the beginning of each function that
   4591 should have an entry in @code{.eh_frame}. It initializes some internal
   4592 data structures. Don't forget to close the function by
   4593 @code{.cfi_endproc}.
   4594 
   4595 Unless @code{.cfi_startproc} is used along with parameter @code{simple}
   4596 it also emits some architecture dependent initial CFI instructions.
   4597 
   4598 @section @code{.cfi_endproc}
   4599 @cindex @code{cfi_endproc} directive
   4600 @code{.cfi_endproc} is used at the end of a function where it closes its
   4601 unwind entry previously opened by
   4602 @code{.cfi_startproc}, and emits it to @code{.eh_frame}.
   4603 
   4604 @section @code{.cfi_personality @var{encoding} [, @var{exp}]}
   4605 @code{.cfi_personality} defines personality routine and its encoding.
   4606 @var{encoding} must be a constant determining how the personality
   4607 should be encoded.  If it is 255 (@code{DW_EH_PE_omit}), second
   4608 argument is not present, otherwise second argument should be
   4609 a constant or a symbol name.  When using indirect encodings,
   4610 the symbol provided should be the location where personality
   4611 can be loaded from, not the personality routine itself.
   4612 The default after @code{.cfi_startproc} is @code{.cfi_personality 0xff},
   4613 no personality routine.
   4614 
   4615 @section @code{.cfi_lsda @var{encoding} [, @var{exp}]}
   4616 @code{.cfi_lsda} defines LSDA and its encoding.
   4617 @var{encoding} must be a constant determining how the LSDA
   4618 should be encoded.  If it is 255 (@code{DW_EH_PE_omit}), second
   4619 argument is not present, otherwise second argument should be a constant
   4620 or a symbol name.  The default after @code{.cfi_startproc} is @code{.cfi_lsda 0xff},
   4621 no LSDA.
   4622 
   4623 @section @code{.cfi_def_cfa @var{register}, @var{offset}}
   4624 @code{.cfi_def_cfa} defines a rule for computing CFA as: @i{take
   4625 address from @var{register} and add @var{offset} to it}.
   4626 
   4627 @section @code{.cfi_def_cfa_register @var{register}}
   4628 @code{.cfi_def_cfa_register} modifies a rule for computing CFA. From
   4629 now on @var{register} will be used instead of the old one. Offset
   4630 remains the same.
   4631 
   4632 @section @code{.cfi_def_cfa_offset @var{offset}}
   4633 @code{.cfi_def_cfa_offset} modifies a rule for computing CFA. Register
   4634 remains the same, but @var{offset} is new. Note that it is the
   4635 absolute offset that will be added to a defined register to compute
   4636 CFA address.
   4637 
   4638 @section @code{.cfi_adjust_cfa_offset @var{offset}}
   4639 Same as @code{.cfi_def_cfa_offset} but @var{offset} is a relative
   4640 value that is added/substracted from the previous offset.
   4641 
   4642 @section @code{.cfi_offset @var{register}, @var{offset}}
   4643 Previous value of @var{register} is saved at offset @var{offset} from
   4644 CFA.
   4645 
   4646 @section @code{.cfi_rel_offset @var{register}, @var{offset}}
   4647 Previous value of @var{register} is saved at offset @var{offset} from
   4648 the current CFA register.  This is transformed to @code{.cfi_offset}
   4649 using the known displacement of the CFA register from the CFA.
   4650 This is often easier to use, because the number will match the
   4651 code it's annotating.
   4652 
   4653 @section @code{.cfi_register @var{register1}, @var{register2}}
   4654 Previous value of @var{register1} is saved in register @var{register2}.
   4655 
   4656 @section @code{.cfi_restore @var{register}}
   4657 @code{.cfi_restore} says that the rule for @var{register} is now the
   4658 same as it was at the beginning of the function, after all initial
   4659 instruction added by @code{.cfi_startproc} were executed.
   4660 
   4661 @section @code{.cfi_undefined @var{register}}
   4662 From now on the previous value of @var{register} can't be restored anymore.
   4663 
   4664 @section @code{.cfi_same_value @var{register}}
   4665 Current value of @var{register} is the same like in the previous frame,
   4666 i.e. no restoration needed.
   4667 
   4668 @section @code{.cfi_remember_state},
   4669 First save all current rules for all registers by @code{.cfi_remember_state},
   4670 then totally screw them up by subsequent @code{.cfi_*} directives and when
   4671 everything is hopelessly bad, use @code{.cfi_restore_state} to restore
   4672 the previous saved state.
   4673 
   4674 @section @code{.cfi_return_column @var{register}}
   4675 Change return column @var{register}, i.e. the return address is either
   4676 directly in @var{register} or can be accessed by rules for @var{register}.
   4677 
   4678 @section @code{.cfi_signal_frame}
   4679 Mark current function as signal trampoline.
   4680 
   4681 @section @code{.cfi_window_save}
   4682 SPARC register window has been saved.
   4683 
   4684 @section @code{.cfi_escape} @var{expression}[, @dots{}]
   4685 Allows the user to add arbitrary bytes to the unwind info.  One
   4686 might use this to add OS-specific CFI opcodes, or generic CFI
   4687 opcodes that GAS does not yet support.
   4688 
   4689 @section @code{.cfi_val_encoded_addr @var{register}, @var{encoding}, @var{label}}
   4690 The current value of @var{register} is @var{label}.  The value of @var{label}
   4691 will be encoded in the output file according to @var{encoding}; see the
   4692 description of @code{.cfi_personality} for details on this encoding.
   4693 
   4694 The usefulness of equating a register to a fixed label is probably
   4695 limited to the return address register.  Here, it can be useful to
   4696 mark a code segment that has only one return address which is reached
   4697 by a direct branch and no copy of the return address exists in memory
   4698 or another register.
   4699 
   4700 @node Comm
   4701 @section @code{.comm @var{symbol} , @var{length} }
   4702 
   4703 @cindex @code{comm} directive
   4704 @cindex symbol, common
   4705 @code{.comm} declares a common symbol named @var{symbol}.  When linking, a
   4706 common symbol in one object file may be merged with a defined or common symbol
   4707 of the same name in another object file.  If @code{@value{LD}} does not see a
   4708 definition for the symbol--just one or more common symbols--then it will
   4709 allocate @var{length} bytes of uninitialized memory.  @var{length} must be an
   4710 absolute expression.  If @code{@value{LD}} sees multiple common symbols with
   4711 the same name, and they do not all have the same size, it will allocate space
   4712 using the largest size.
   4713 
   4714 @ifset COFF-ELF
   4715 When using ELF or (as a GNU extension) PE, the @code{.comm} directive takes
   4716 an optional third argument.  This is the desired alignment of the symbol,
   4717 specified for ELF as a byte boundary (for example, an alignment of 16 means
   4718 that the least significant 4 bits of the address should be zero), and for PE
   4719 as a power of two (for example, an alignment of 5 means aligned to a 32-byte
   4720 boundary).  The alignment must be an absolute expression, and it must be a
   4721 power of two.  If @code{@value{LD}} allocates uninitialized memory for the
   4722 common symbol, it will use the alignment when placing the symbol.  If no
   4723 alignment is specified, @command{@value{AS}} will set the alignment to the
   4724 largest power of two less than or equal to the size of the symbol, up to a
   4725 maximum of 16 on ELF, or the default section alignment of 4 on PE@footnote{This
   4726 is not the same as the executable image file alignment controlled by @code{@value{LD}}'s
   4727 @samp{--section-alignment} option; image file sections in PE are aligned to
   4728 multiples of 4096, which is far too large an alignment for ordinary variables.
   4729 It is rather the default alignment for (non-debug) sections within object
   4730 (@samp{*.o}) files, which are less strictly aligned.}.
   4731 @end ifset
   4732 
   4733 @ifset HPPA
   4734 The syntax for @code{.comm} differs slightly on the HPPA.  The syntax is
   4735 @samp{@var{symbol} .comm, @var{length}}; @var{symbol} is optional.
   4736 @end ifset
   4737 
   4738 @node Data
   4739 @section @code{.data @var{subsection}}
   4740 
   4741 @cindex @code{data} directive
   4742 @code{.data} tells @command{@value{AS}} to assemble the following statements onto the
   4743 end of the data subsection numbered @var{subsection} (which is an
   4744 absolute expression).  If @var{subsection} is omitted, it defaults
   4745 to zero.
   4746 
   4747 @ifset COFF
   4748 @node Def
   4749 @section @code{.def @var{name}}
   4750 
   4751 @cindex @code{def} directive
   4752 @cindex COFF symbols, debugging
   4753 @cindex debugging COFF symbols
   4754 Begin defining debugging information for a symbol @var{name}; the
   4755 definition extends until the @code{.endef} directive is encountered.
   4756 @ifset BOUT
   4757 
   4758 This directive is only observed when @command{@value{AS}} is configured for COFF
   4759 format output; when producing @code{b.out}, @samp{.def} is recognized,
   4760 but ignored.
   4761 @end ifset
   4762 @end ifset
   4763 
   4764 @ifset aout-bout
   4765 @node Desc
   4766 @section @code{.desc @var{symbol}, @var{abs-expression}}
   4767 
   4768 @cindex @code{desc} directive
   4769 @cindex COFF symbol descriptor
   4770 @cindex symbol descriptor, COFF
   4771 This directive sets the descriptor of the symbol (@pxref{Symbol Attributes})
   4772 to the low 16 bits of an absolute expression.
   4773 
   4774 @ifset COFF
   4775 The @samp{.desc} directive is not available when @command{@value{AS}} is
   4776 configured for COFF output; it is only for @code{a.out} or @code{b.out}
   4777 object format.  For the sake of compatibility, @command{@value{AS}} accepts
   4778 it, but produces no output, when configured for COFF.
   4779 @end ifset
   4780 @end ifset
   4781 
   4782 @ifset COFF
   4783 @node Dim
   4784 @section @code{.dim}
   4785 
   4786 @cindex @code{dim} directive
   4787 @cindex COFF auxiliary symbol information
   4788 @cindex auxiliary symbol information, COFF
   4789 This directive is generated by compilers to include auxiliary debugging
   4790 information in the symbol table.  It is only permitted inside
   4791 @code{.def}/@code{.endef} pairs.
   4792 @ifset BOUT
   4793 
   4794 @samp{.dim} is only meaningful when generating COFF format output; when
   4795 @command{@value{AS}} is generating @code{b.out}, it accepts this directive but
   4796 ignores it.
   4797 @end ifset
   4798 @end ifset
   4799 
   4800 @node Double
   4801 @section @code{.double @var{flonums}}
   4802 
   4803 @cindex @code{double} directive
   4804 @cindex floating point numbers (double)
   4805 @code{.double} expects zero or more flonums, separated by commas.  It
   4806 assembles floating point numbers.
   4807 @ifset GENERIC
   4808 The exact kind of floating point numbers emitted depends on how
   4809 @command{@value{AS}} is configured.  @xref{Machine Dependencies}.
   4810 @end ifset
   4811 @ifclear GENERIC
   4812 @ifset IEEEFLOAT
   4813 On the @value{TARGET} family @samp{.double} emits 64-bit floating-point numbers
   4814 in @sc{ieee} format.
   4815 @end ifset
   4816 @end ifclear
   4817 
   4818 @node Eject
   4819 @section @code{.eject}
   4820 
   4821 @cindex @code{eject} directive
   4822 @cindex new page, in listings
   4823 @cindex page, in listings
   4824 @cindex listing control: new page
   4825 Force a page break at this point, when generating assembly listings.
   4826 
   4827 @node Else
   4828 @section @code{.else}
   4829 
   4830 @cindex @code{else} directive
   4831 @code{.else} is part of the @command{@value{AS}} support for conditional
   4832 assembly; see @ref{If,,@code{.if}}.  It marks the beginning of a section
   4833 of code to be assembled if the condition for the preceding @code{.if}
   4834 was false.
   4835 
   4836 @node Elseif
   4837 @section @code{.elseif}
   4838 
   4839 @cindex @code{elseif} directive
   4840 @code{.elseif} is part of the @command{@value{AS}} support for conditional
   4841 assembly; see @ref{If,,@code{.if}}.  It is shorthand for beginning a new
   4842 @code{.if} block that would otherwise fill the entire @code{.else} section.
   4843 
   4844 @node End
   4845 @section @code{.end}
   4846 
   4847 @cindex @code{end} directive
   4848 @code{.end} marks the end of the assembly file.  @command{@value{AS}} does not
   4849 process anything in the file past the @code{.end} directive.
   4850 
   4851 @ifset COFF
   4852 @node Endef
   4853 @section @code{.endef}
   4854 
   4855 @cindex @code{endef} directive
   4856 This directive flags the end of a symbol definition begun with
   4857 @code{.def}.
   4858 @ifset BOUT
   4859 
   4860 @samp{.endef} is only meaningful when generating COFF format output; if
   4861 @command{@value{AS}} is configured to generate @code{b.out}, it accepts this
   4862 directive but ignores it.
   4863 @end ifset
   4864 @end ifset
   4865 
   4866 @node Endfunc
   4867 @section @code{.endfunc}
   4868 @cindex @code{endfunc} directive
   4869 @code{.endfunc} marks the end of a function specified with @code{.func}.
   4870 
   4871 @node Endif
   4872 @section @code{.endif}
   4873 
   4874 @cindex @code{endif} directive
   4875 @code{.endif} is part of the @command{@value{AS}} support for conditional assembly;
   4876 it marks the end of a block of code that is only assembled
   4877 conditionally.  @xref{If,,@code{.if}}.
   4878 
   4879 @node Equ
   4880 @section @code{.equ @var{symbol}, @var{expression}}
   4881 
   4882 @cindex @code{equ} directive
   4883 @cindex assigning values to symbols
   4884 @cindex symbols, assigning values to
   4885 This directive sets the value of @var{symbol} to @var{expression}.
   4886 It is synonymous with @samp{.set}; see @ref{Set,,@code{.set}}.
   4887 
   4888 @ifset HPPA
   4889 The syntax for @code{equ} on the HPPA is
   4890 @samp{@var{symbol} .equ @var{expression}}.
   4891 @end ifset
   4892 
   4893 @ifset Z80
   4894 The syntax for @code{equ} on the Z80 is
   4895 @samp{@var{symbol} equ @var{expression}}.
   4896 On the Z80 it is an eror if @var{symbol} is already defined,
   4897 but the symbol is not protected from later redefinition.
   4898 Compare @ref{Equiv}.
   4899 @end ifset
   4900 
   4901 @node Equiv
   4902 @section @code{.equiv @var{symbol}, @var{expression}}
   4903 @cindex @code{equiv} directive
   4904 The @code{.equiv} directive is like @code{.equ} and @code{.set}, except that
   4905 the assembler will signal an error if @var{symbol} is already defined.  Note a
   4906 symbol which has been referenced but not actually defined is considered to be
   4907 undefined.
   4908 
   4909 Except for the contents of the error message, this is roughly equivalent to
   4910 @smallexample
   4911 .ifdef SYM
   4912 .err
   4913 .endif
   4914 .equ SYM,VAL
   4915 @end smallexample
   4916 plus it protects the symbol from later redefinition.
   4917 
   4918 @node Eqv
   4919 @section @code{.eqv @var{symbol}, @var{expression}}
   4920 @cindex @code{eqv} directive
   4921 The @code{.eqv} directive is like @code{.equiv}, but no attempt is made to
   4922 evaluate the expression or any part of it immediately.  Instead each time
   4923 the resulting symbol is used in an expression, a snapshot of its current
   4924 value is taken.
   4925 
   4926 @node Err
   4927 @section @code{.err}
   4928 @cindex @code{err} directive
   4929 If @command{@value{AS}} assembles a @code{.err} directive, it will print an error
   4930 message and, unless the @option{-Z} option was used, it will not generate an
   4931 object file.  This can be used to signal an error in conditionally compiled code.
   4932 
   4933 @node Error
   4934 @section @code{.error "@var{string}"}
   4935 @cindex error directive
   4936 
   4937 Similarly to @code{.err}, this directive emits an error, but you can specify a
   4938 string that will be emitted as the error message.  If you don't specify the
   4939 message, it defaults to @code{".error directive invoked in source file"}.
   4940 @xref{Errors, ,Error and Warning Messages}.
   4941 
   4942 @smallexample
   4943  .error "This code has not been assembled and tested."
   4944 @end smallexample
   4945 
   4946 @node Exitm
   4947 @section @code{.exitm}
   4948 Exit early from the current macro definition.  @xref{Macro}.
   4949 
   4950 @node Extern
   4951 @section @code{.extern}
   4952 
   4953 @cindex @code{extern} directive
   4954 @code{.extern} is accepted in the source program---for compatibility
   4955 with other assemblers---but it is ignored.  @command{@value{AS}} treats
   4956 all undefined symbols as external.
   4957 
   4958 @node Fail
   4959 @section @code{.fail @var{expression}}
   4960 
   4961 @cindex @code{fail} directive
   4962 Generates an error or a warning.  If the value of the @var{expression} is 500
   4963 or more, @command{@value{AS}} will print a warning message.  If the value is less
   4964 than 500, @command{@value{AS}} will print an error message.  The message will
   4965 include the value of @var{expression}.  This can occasionally be useful inside
   4966 complex nested macros or conditional assembly.
   4967 
   4968 @node File
   4969 @section @code{.file}
   4970 @cindex @code{file} directive
   4971 
   4972 @ifclear no-file-dir
   4973 There are two different versions of the @code{.file} directive.  Targets
   4974 that support DWARF2 line number information use the DWARF2 version of
   4975 @code{.file}.  Other targets use the default version.
   4976 
   4977 @subheading Default Version
   4978 
   4979 @cindex logical file name
   4980 @cindex file name, logical
   4981 This version of the @code{.file} directive tells @command{@value{AS}} that we
   4982 are about to start a new logical file.  The syntax is:
   4983 
   4984 @smallexample
   4985 .file @var{string}
   4986 @end smallexample
   4987 
   4988 @var{string} is the new file name.  In general, the filename is
   4989 recognized whether or not it is surrounded by quotes @samp{"}; but if you wish
   4990 to specify an empty file name, you must give the quotes--@code{""}.  This
   4991 statement may go away in future: it is only recognized to be compatible with
   4992 old @command{@value{AS}} programs.
   4993 
   4994 @subheading DWARF2 Version
   4995 @end ifclear
   4996 
   4997 When emitting DWARF2 line number information, @code{.file} assigns filenames
   4998 to the @code{.debug_line} file name table.  The syntax is:
   4999 
   5000 @smallexample
   5001 .file @var{fileno} @var{filename}
   5002 @end smallexample
   5003 
   5004 The @var{fileno} operand should be a unique positive integer to use as the
   5005 index of the entry in the table.  The @var{filename} operand is a C string
   5006 literal.
   5007 
   5008 The detail of filename indices is exposed to the user because the filename
   5009 table is shared with the @code{.debug_info} section of the DWARF2 debugging
   5010 information, and thus the user must know the exact indices that table
   5011 entries will have.
   5012 
   5013 @node Fill
   5014 @section @code{.fill @var{repeat} , @var{size} , @var{value}}
   5015 
   5016 @cindex @code{fill} directive
   5017 @cindex writing patterns in memory
   5018 @cindex patterns, writing in memory
   5019 @var{repeat}, @var{size} and @var{value} are absolute expressions.
   5020 This emits @var{repeat} copies of @var{size} bytes.  @var{Repeat}
   5021 may be zero or more.  @var{Size} may be zero or more, but if it is
   5022 more than 8, then it is deemed to have the value 8, compatible with
   5023 other people's assemblers.  The contents of each @var{repeat} bytes
   5024 is taken from an 8-byte number.  The highest order 4 bytes are
   5025 zero.  The lowest order 4 bytes are @var{value} rendered in the
   5026 byte-order of an integer on the computer @command{@value{AS}} is assembling for.
   5027 Each @var{size} bytes in a repetition is taken from the lowest order
   5028 @var{size} bytes of this number.  Again, this bizarre behavior is
   5029 compatible with other people's assemblers.
   5030 
   5031 @var{size} and @var{value} are optional.
   5032 If the second comma and @var{value} are absent, @var{value} is
   5033 assumed zero.  If the first comma and following tokens are absent,
   5034 @var{size} is assumed to be 1.
   5035 
   5036 @node Float
   5037 @section @code{.float @var{flonums}}
   5038 
   5039 @cindex floating point numbers (single)
   5040 @cindex @code{float} directive
   5041 This directive assembles zero or more flonums, separated by commas.  It
   5042 has the same effect as @code{.single}.
   5043 @ifset GENERIC
   5044 The exact kind of floating point numbers emitted depends on how
   5045 @command{@value{AS}} is configured.
   5046 @xref{Machine Dependencies}.
   5047 @end ifset
   5048 @ifclear GENERIC
   5049 @ifset IEEEFLOAT
   5050 On the @value{TARGET} family, @code{.float} emits 32-bit floating point numbers
   5051 in @sc{ieee} format.
   5052 @end ifset
   5053 @end ifclear
   5054 
   5055 @node Func
   5056 @section @code{.func @var{name}[,@var{label}]}
   5057 @cindex @code{func} directive
   5058 @code{.func} emits debugging information to denote function @var{name}, and
   5059 is ignored unless the file is assembled with debugging enabled.
   5060 Only @samp{--gstabs[+]} is currently supported.
   5061 @var{label} is the entry point of the function and if omitted @var{name}
   5062 prepended with the @samp{leading char} is used.
   5063 @samp{leading char} is usually @code{_} or nothing, depending on the target.
   5064 All functions are currently defined to have @code{void} return type.
   5065 The function must be terminated with @code{.endfunc}.
   5066 
   5067 @node Global
   5068 @section @code{.global @var{symbol}}, @code{.globl @var{symbol}}
   5069 
   5070 @cindex @code{global} directive
   5071 @cindex symbol, making visible to linker
   5072 @code{.global} makes the symbol visible to @code{@value{LD}}.  If you define
   5073 @var{symbol} in your partial program, its value is made available to
   5074 other partial programs that are linked with it.  Otherwise,
   5075 @var{symbol} takes its attributes from a symbol of the same name
   5076 from another file linked into the same program.
   5077 
   5078 Both spellings (@samp{.globl} and @samp{.global}) are accepted, for
   5079 compatibility with other assemblers.
   5080 
   5081 @ifset HPPA
   5082 On the HPPA, @code{.global} is not always enough to make it accessible to other
   5083 partial programs.  You may need the HPPA-only @code{.EXPORT} directive as well.
   5084 @xref{HPPA Directives, ,HPPA Assembler Directives}.
   5085 @end ifset
   5086 
   5087 @ifset ELF
   5088 @node Gnu_attribute
   5089 @section @code{.gnu_attribute @var{tag},@var{value}}
   5090 Record a @sc{gnu} object attribute for this file.  @xref{Object Attributes}.
   5091 
   5092 @node Hidden
   5093 @section @code{.hidden @var{names}}
   5094 
   5095 @cindex @code{hidden} directive
   5096 @cindex visibility
   5097 This is one of the ELF visibility directives.  The other two are
   5098 @code{.internal} (@pxref{Internal,,@code{.internal}}) and
   5099 @code{.protected} (@pxref{Protected,,@code{.protected}}).
   5100 
   5101 This directive overrides the named symbols default visibility (which is set by
   5102 their binding: local, global or weak).  The directive sets the visibility to
   5103 @code{hidden} which means that the symbols are not visible to other components.
   5104 Such symbols are always considered to be @code{protected} as well.
   5105 @end ifset
   5106 
   5107 @node hword
   5108 @section @code{.hword @var{expressions}}
   5109 
   5110 @cindex @code{hword} directive
   5111 @cindex integers, 16-bit
   5112 @cindex numbers, 16-bit
   5113 @cindex sixteen bit integers
   5114 This expects zero or more @var{expressions}, and emits
   5115 a 16 bit number for each.
   5116 
   5117 @ifset GENERIC
   5118 This directive is a synonym for @samp{.short}; depending on the target
   5119 architecture, it may also be a synonym for @samp{.word}.
   5120 @end ifset
   5121 @ifclear GENERIC
   5122 @ifset W32
   5123 This directive is a synonym for @samp{.short}.
   5124 @end ifset
   5125 @ifset W16
   5126 This directive is a synonym for both @samp{.short} and @samp{.word}.
   5127 @end ifset
   5128 @end ifclear
   5129 
   5130 @node Ident
   5131 @section @code{.ident}
   5132 
   5133 @cindex @code{ident} directive
   5134 
   5135 This directive is used by some assemblers to place tags in object files.  The
   5136 behavior of this directive varies depending on the target.  When using the
   5137 a.out object file format, @command{@value{AS}} simply accepts the directive for
   5138 source-file compatibility with existing assemblers, but does not emit anything
   5139 for it.  When using COFF, comments are emitted to the @code{.comment} or
   5140 @code{.rdata} section, depending on the target.  When using ELF, comments are
   5141 emitted to the @code{.comment} section.
   5142 
   5143 @node If
   5144 @section @code{.if @var{absolute expression}}
   5145 
   5146 @cindex conditional assembly
   5147 @cindex @code{if} directive
   5148 @code{.if} marks the beginning of a section of code which is only
   5149 considered part of the source program being assembled if the argument
   5150 (which must be an @var{absolute expression}) is non-zero.  The end of
   5151 the conditional section of code must be marked by @code{.endif}
   5152 (@pxref{Endif,,@code{.endif}}); optionally, you may include code for the
   5153 alternative condition, flagged by @code{.else} (@pxref{Else,,@code{.else}}).
   5154 If you have several conditions to check, @code{.elseif} may be used to avoid
   5155 nesting blocks if/else within each subsequent @code{.else} block.
   5156 
   5157 The following variants of @code{.if} are also supported:
   5158 @table @code
   5159 @cindex @code{ifdef} directive
   5160 @item .ifdef @var{symbol}
   5161 Assembles the following section of code if the specified @var{symbol}
   5162 has been defined.  Note a symbol which has been referenced but not yet defined
   5163 is considered to be undefined.
   5164 
   5165 @cindex @code{ifb} directive
   5166 @item .ifb @var{text}
   5167 Assembles the following section of code if the operand is blank (empty).
   5168 
   5169 @cindex @code{ifc} directive
   5170 @item .ifc @var{string1},@var{string2}
   5171 Assembles the following section of code if the two strings are the same.  The
   5172 strings may be optionally quoted with single quotes.  If they are not quoted,
   5173 the first string stops at the first comma, and the second string stops at the
   5174 end of the line.  Strings which contain whitespace should be quoted.  The
   5175 string comparison is case sensitive.
   5176 
   5177 @cindex @code{ifeq} directive
   5178 @item .ifeq @var{absolute expression}
   5179 Assembles the following section of code if the argument is zero.
   5180 
   5181 @cindex @code{ifeqs} directive
   5182 @item .ifeqs @var{string1},@var{string2}
   5183 Another form of @code{.ifc}.  The strings must be quoted using double quotes.
   5184 
   5185 @cindex @code{ifge} directive
   5186 @item .ifge @var{absolute expression}
   5187 Assembles the following section of code if the argument is greater than or
   5188 equal to zero.
   5189 
   5190 @cindex @code{ifgt} directive
   5191 @item .ifgt @var{absolute expression}
   5192 Assembles the following section of code if the argument is greater than zero.
   5193 
   5194 @cindex @code{ifle} directive
   5195 @item .ifle @var{absolute expression}
   5196 Assembles the following section of code if the argument is less than or equal
   5197 to zero.
   5198 
   5199 @cindex @code{iflt} directive
   5200 @item .iflt @var{absolute expression}
   5201 Assembles the following section of code if the argument is less than zero.
   5202 
   5203 @cindex @code{ifnb} directive
   5204 @item .ifnb @var{text}
   5205 Like @code{.ifb}, but the sense of the test is reversed: this assembles the
   5206 following section of code if the operand is non-blank (non-empty).
   5207 
   5208 @cindex @code{ifnc} directive
   5209 @item .ifnc @var{string1},@var{string2}.
   5210 Like @code{.ifc}, but the sense of the test is reversed: this assembles the
   5211 following section of code if the two strings are not the same.
   5212 
   5213 @cindex @code{ifndef} directive
   5214 @cindex @code{ifnotdef} directive
   5215 @item .ifndef @var{symbol}
   5216 @itemx .ifnotdef @var{symbol}
   5217 Assembles the following section of code if the specified @var{symbol}
   5218 has not been defined.  Both spelling variants are equivalent.  Note a symbol
   5219 which has been referenced but not yet defined is considered to be undefined.
   5220 
   5221 @cindex @code{ifne} directive
   5222 @item .ifne @var{absolute expression}
   5223 Assembles the following section of code if the argument is not equal to zero
   5224 (in other words, this is equivalent to @code{.if}).
   5225 
   5226 @cindex @code{ifnes} directive
   5227 @item .ifnes @var{string1},@var{string2}
   5228 Like @code{.ifeqs}, but the sense of the test is reversed: this assembles the
   5229 following section of code if the two strings are not the same.
   5230 @end table
   5231 
   5232 @node Incbin
   5233 @section @code{.incbin "@var{file}"[,@var{skip}[,@var{count}]]}
   5234 
   5235 @cindex @code{incbin} directive
   5236 @cindex binary files, including
   5237 The @code{incbin} directive can be used with @option{--allow-incbin}.
   5238 
   5239 The @code{incbin} directive includes @var{file} verbatim at the current
   5240 location. You can control the search paths used with the @samp{-I} command-line
   5241 option (@pxref{Invoking,,Command-Line Options}).  Quotation marks are required
   5242 around @var{file}.
   5243 
   5244 The @var{skip} argument skips a number of bytes from the start of the
   5245 @var{file}.  The @var{count} argument indicates the maximum number of bytes to
   5246 read.  Note that the data is not aligned in any way, so it is the user's
   5247 responsibility to make sure that proper alignment is provided both before and
   5248 after the @code{incbin} directive.
   5249 
   5250 @node Include
   5251 @section @code{.include "@var{file}"}
   5252 
   5253 @cindex @code{include} directive
   5254 @cindex supporting files, including
   5255 @cindex files, including
   5256 This directive provides a way to include supporting files at specified
   5257 points in your source program.  The code from @var{file} is assembled as
   5258 if it followed the point of the @code{.include}; when the end of the
   5259 included file is reached, assembly of the original file continues.  You
   5260 can control the search paths used with the @samp{-I} command-line option
   5261 (@pxref{Invoking,,Command-Line Options}).  Quotation marks are required
   5262 around @var{file}.
   5263 
   5264 @node Int
   5265 @section @code{.int @var{expressions}}
   5266 
   5267 @cindex @code{int} directive
   5268 @cindex integers, 32-bit
   5269 Expect zero or more @var{expressions}, of any section, separated by commas.
   5270 For each expression, emit a number that, at run time, is the value of that
   5271 expression.  The byte order and bit size of the number depends on what kind
   5272 of target the assembly is for.
   5273 
   5274 @ifclear GENERIC
   5275 @ifset H8
   5276 On most forms of the H8/300, @code{.int} emits 16-bit
   5277 integers.  On the H8/300H and the Renesas SH, however, @code{.int} emits
   5278 32-bit integers.
   5279 @end ifset
   5280 @end ifclear
   5281 
   5282 @ifset ELF
   5283 @node Internal
   5284 @section @code{.internal @var{names}}
   5285 
   5286 @cindex @code{internal} directive
   5287 @cindex visibility
   5288 This is one of the ELF visibility directives.  The other two are
   5289 @code{.hidden} (@pxref{Hidden,,@code{.hidden}}) and
   5290 @code{.protected} (@pxref{Protected,,@code{.protected}}).
   5291 
   5292 This directive overrides the named symbols default visibility (which is set by
   5293 their binding: local, global or weak).  The directive sets the visibility to
   5294 @code{internal} which means that the symbols are considered to be @code{hidden}
   5295 (i.e., not visible to other components), and that some extra, processor specific
   5296 processing must also be performed upon the  symbols as well.
   5297 @end ifset
   5298 
   5299 @node Irp
   5300 @section @code{.irp @var{symbol},@var{values}}@dots{}
   5301 
   5302 @cindex @code{irp} directive
   5303 Evaluate a sequence of statements assigning different values to @var{symbol}.
   5304 The sequence of statements starts at the @code{.irp} directive, and is
   5305 terminated by an @code{.endr} directive.  For each @var{value}, @var{symbol} is
   5306 set to @var{value}, and the sequence of statements is assembled.  If no
   5307 @var{value} is listed, the sequence of statements is assembled once, with
   5308 @var{symbol} set to the null string.  To refer to @var{symbol} within the
   5309 sequence of statements, use @var{\symbol}.
   5310 
   5311 For example, assembling
   5312 
   5313 @example
   5314         .irp    param,1,2,3
   5315         move    d\param,sp@@-
   5316         .endr
   5317 @end example
   5318 
   5319 is equivalent to assembling
   5320 
   5321 @example
   5322         move    d1,sp@@-
   5323         move    d2,sp@@-
   5324         move    d3,sp@@-
   5325 @end example
   5326 
   5327 For some caveats with the spelling of @var{symbol}, see also @ref{Macro}.
   5328 
   5329 @node Irpc
   5330 @section @code{.irpc @var{symbol},@var{values}}@dots{}
   5331 
   5332 @cindex @code{irpc} directive
   5333 Evaluate a sequence of statements assigning different values to @var{symbol}.
   5334 The sequence of statements starts at the @code{.irpc} directive, and is
   5335 terminated by an @code{.endr} directive.  For each character in @var{value},
   5336 @var{symbol} is set to the character, and the sequence of statements is
   5337 assembled.  If no @var{value} is listed, the sequence of statements is
   5338 assembled once, with @var{symbol} set to the null string.  To refer to
   5339 @var{symbol} within the sequence of statements, use @var{\symbol}.
   5340 
   5341 For example, assembling
   5342 
   5343 @example
   5344         .irpc    param,123
   5345         move    d\param,sp@@-
   5346         .endr
   5347 @end example
   5348 
   5349 is equivalent to assembling
   5350 
   5351 @example
   5352         move    d1,sp@@-
   5353         move    d2,sp@@-
   5354         move    d3,sp@@-
   5355 @end example
   5356 
   5357 For some caveats with the spelling of @var{symbol}, see also the discussion
   5358 at @xref{Macro}.
   5359 
   5360 @node Lcomm
   5361 @section @code{.lcomm @var{symbol} , @var{length}}
   5362 
   5363 @cindex @code{lcomm} directive
   5364 @cindex local common symbols
   5365 @cindex symbols, local common
   5366 Reserve @var{length} (an absolute expression) bytes for a local common
   5367 denoted by @var{symbol}.  The section and value of @var{symbol} are
   5368 those of the new local common.  The addresses are allocated in the bss
   5369 section, so that at run-time the bytes start off zeroed.  @var{Symbol}
   5370 is not declared global (@pxref{Global,,@code{.global}}), so is normally
   5371 not visible to @code{@value{LD}}.
   5372 
   5373 @ifset GENERIC
   5374 Some targets permit a third argument to be used with @code{.lcomm}.  This
   5375 argument specifies the desired alignment of the symbol in the bss section.
   5376 @end ifset
   5377 
   5378 @ifset HPPA
   5379 The syntax for @code{.lcomm} differs slightly on the HPPA.  The syntax is
   5380 @samp{@var{symbol} .lcomm, @var{length}}; @var{symbol} is optional.
   5381 @end ifset
   5382 
   5383 @node Lflags
   5384 @section @code{.lflags}
   5385 
   5386 @cindex @code{lflags} directive (ignored)
   5387 @command{@value{AS}} accepts this directive, for compatibility with other
   5388 assemblers, but ignores it.
   5389 
   5390 @ifclear no-line-dir
   5391 @node Line
   5392 @section @code{.line @var{line-number}}
   5393 
   5394 @cindex @code{line} directive
   5395 @cindex logical line number
   5396 @ifset aout-bout
   5397 Change the logical line number.  @var{line-number} must be an absolute
   5398 expression.  The next line has that logical line number.  Therefore any other
   5399 statements on the current line (after a statement separator character) are
   5400 reported as on logical line number @var{line-number} @minus{} 1.  One day
   5401 @command{@value{AS}} will no longer support this directive: it is recognized only
   5402 for compatibility with existing assembler programs.
   5403 @end ifset
   5404 
   5405 Even though this is a directive associated with the @code{a.out} or
   5406 @code{b.out} object-code formats, @command{@value{AS}} still recognizes it
   5407 when producing COFF output, and treats @samp{.line} as though it
   5408 were the COFF @samp{.ln} @emph{if} it is found outside a
   5409 @code{.def}/@code{.endef} pair.
   5410 
   5411 Inside a @code{.def}, @samp{.line} is, instead, one of the directives
   5412 used by compilers to generate auxiliary symbol information for
   5413 debugging.
   5414 @end ifclear
   5415 
   5416 @node Linkonce
   5417 @section @code{.linkonce [@var{type}]}
   5418 @cindex COMDAT
   5419 @cindex @code{linkonce} directive
   5420 @cindex common sections
   5421 Mark the current section so that the linker only includes a single copy of it.
   5422 This may be used to include the same section in several different object files,
   5423 but ensure that the linker will only include it once in the final output file.
   5424 The @code{.linkonce} pseudo-op must be used for each instance of the section.
   5425 Duplicate sections are detected based on the section name, so it should be
   5426 unique.
   5427 
   5428 This directive is only supported by a few object file formats; as of this
   5429 writing, the only object file format which supports it is the Portable
   5430 Executable format used on Windows NT.
   5431 
   5432 The @var{type} argument is optional.  If specified, it must be one of the
   5433 following strings.  For example:
   5434 @smallexample
   5435 .linkonce same_size
   5436 @end smallexample
   5437 Not all types may be supported on all object file formats.
   5438 
   5439 @table @code
   5440 @item discard
   5441 Silently discard duplicate sections.  This is the default.
   5442 
   5443 @item one_only
   5444 Warn if there are duplicate sections, but still keep only one copy.
   5445 
   5446 @item same_size
   5447 Warn if any of the duplicates have different sizes.
   5448 
   5449 @item same_contents
   5450 Warn if any of the duplicates do not have exactly the same contents.
   5451 @end table
   5452 
   5453 @node List
   5454 @section @code{.list}
   5455 
   5456 @cindex @code{list} directive
   5457 @cindex listing control, turning on
   5458 Control (in conjunction with the @code{.nolist} directive) whether or
   5459 not assembly listings are generated.  These two directives maintain an
   5460 internal counter (which is zero initially).   @code{.list} increments the
   5461 counter, and @code{.nolist} decrements it.  Assembly listings are
   5462 generated whenever the counter is greater than zero.
   5463 
   5464 By default, listings are disabled.  When you enable them (with the
   5465 @samp{-a} command line option; @pxref{Invoking,,Command-Line Options}),
   5466 the initial value of the listing counter is one.
   5467 
   5468 @node Ln
   5469 @section @code{.ln @var{line-number}}
   5470 
   5471 @cindex @code{ln} directive
   5472 @ifclear no-line-dir
   5473 @samp{.ln} is a synonym for @samp{.line}.
   5474 @end ifclear
   5475 @ifset no-line-dir
   5476 Tell @command{@value{AS}} to change the logical line number.  @var{line-number}
   5477 must be an absolute expression.  The next line has that logical
   5478 line number, so any other statements on the current line (after a
   5479 statement separator character @code{;}) are reported as on logical
   5480 line number @var{line-number} @minus{} 1.
   5481 @ifset BOUT
   5482 
   5483 This directive is accepted, but ignored, when @command{@value{AS}} is
   5484 configured for @code{b.out}; its effect is only associated with COFF
   5485 output format.
   5486 @end ifset
   5487 @end ifset
   5488 
   5489 @node Loc
   5490 @section @code{.loc @var{fileno} @var{lineno} [@var{column}] [@var{options}]}
   5491 @cindex @code{loc} directive
   5492 When emitting DWARF2 line number information,
   5493 the @code{.loc} directive will add a row to the @code{.debug_line} line
   5494 number matrix corresponding to the immediately following assembly
   5495 instruction.  The @var{fileno}, @var{lineno}, and optional @var{column}
   5496 arguments will be applied to the @code{.debug_line} state machine before
   5497 the row is added.
   5498 
   5499 The @var{options} are a sequence of the following tokens in any order:
   5500 
   5501 @table @code
   5502 @item basic_block
   5503 This option will set the @code{basic_block} register in the
   5504 @code{.debug_line} state machine to @code{true}.
   5505 
   5506 @item prologue_end
   5507 This option will set the @code{prologue_end} register in the
   5508 @code{.debug_line} state machine to @code{true}.
   5509 
   5510 @item epilogue_begin
   5511 This option will set the @code{epilogue_begin} register in the
   5512 @code{.debug_line} state machine to @code{true}.
   5513 
   5514 @item is_stmt @var{value}
   5515 This option will set the @code{is_stmt} register in the
   5516 @code{.debug_line} state machine to @code{value}, which must be
   5517 either 0 or 1.
   5518 
   5519 @item isa @var{value}
   5520 This directive will set the @code{isa} register in the @code{.debug_line}
   5521 state machine to @var{value}, which must be an unsigned integer.
   5522 
   5523 @item discriminator @var{value}
   5524 This directive will set the @code{discriminator} register in the @code{.debug_line}
   5525 state machine to @var{value}, which must be an unsigned integer.
   5526 
   5527 @end table
   5528 
   5529 @node Loc_mark_labels
   5530 @section @code{.loc_mark_labels @var{enable}}
   5531 @cindex @code{loc_mark_labels} directive
   5532 When emitting DWARF2 line number information,
   5533 the @code{.loc_mark_labels} directive makes the assembler emit an entry
   5534 to the @code{.debug_line} line number matrix with the @code{basic_block}
   5535 register in the state machine set whenever a code label is seen.
   5536 The @var{enable} argument should be either 1 or 0, to enable or disable
   5537 this function respectively.
   5538 
   5539 @ifset ELF
   5540 @node Local
   5541 @section @code{.local @var{names}}
   5542 
   5543 @cindex @code{local} directive
   5544 This directive, which is available for ELF targets, marks each symbol in
   5545 the comma-separated list of @code{names} as a local symbol so that it
   5546 will not be externally visible.  If the symbols do not already exist,
   5547 they will be created.
   5548 
   5549 For targets where the @code{.lcomm} directive (@pxref{Lcomm}) does not
   5550 accept an alignment argument, which is the case for most ELF targets,
   5551 the @code{.local} directive can be used in combination with @code{.comm}
   5552 (@pxref{Comm}) to define aligned local common data.
   5553 @end ifset
   5554 
   5555 @node Long
   5556 @section @code{.long @var{expressions}}
   5557 
   5558 @cindex @code{long} directive
   5559 @code{.long} is the same as @samp{.int}.  @xref{Int,,@code{.int}}.
   5560 
   5561 @ignore
   5562 @c no one seems to know what this is for or whether this description is
   5563 @c what it really ought to do
   5564 @node Lsym
   5565 @section @code{.lsym @var{symbol}, @var{expression}}
   5566 
   5567 @cindex @code{lsym} directive
   5568 @cindex symbol, not referenced in assembly
   5569 @code{.lsym} creates a new symbol named @var{symbol}, but does not put it in
   5570 the hash table, ensuring it cannot be referenced by name during the
   5571 rest of the assembly.  This sets the attributes of the symbol to be
   5572 the same as the expression value:
   5573 @smallexample
   5574 @var{other} = @var{descriptor} = 0
   5575 @var{type} = @r{(section of @var{expression})}
   5576 @var{value} = @var{expression}
   5577 @end smallexample
   5578 @noindent
   5579 The new symbol is not flagged as external.
   5580 @end ignore
   5581 
   5582 @node Macro
   5583 @section @code{.macro}
   5584 
   5585 @cindex macros
   5586 The commands @code{.macro} and @code{.endm} allow you to define macros that
   5587 generate assembly output.  For example, this definition specifies a macro
   5588 @code{sum} that puts a sequence of numbers into memory:
   5589 
   5590 @example
   5591         .macro  sum from=0, to=5
   5592         .long   \from
   5593         .if     \to-\from
   5594         sum     "(\from+1)",\to
   5595         .endif
   5596         .endm
   5597 @end example
   5598 
   5599 @noindent
   5600 With that definition, @samp{SUM 0,5} is equivalent to this assembly input:
   5601 
   5602 @example
   5603         .long   0
   5604         .long   1
   5605         .long   2
   5606         .long   3
   5607         .long   4
   5608         .long   5
   5609 @end example
   5610 
   5611 @ftable @code
   5612 @item .macro @var{macname}
   5613 @itemx .macro @var{macname} @var{macargs} @dots{}
   5614 @cindex @code{macro} directive
   5615 Begin the definition of a macro called @var{macname}.  If your macro
   5616 definition requires arguments, specify their names after the macro name,
   5617 separated by commas or spaces.  You can qualify the macro argument to
   5618 indicate whether all invocations must specify a non-blank value (through
   5619 @samp{:@code{req}}), or whether it takes all of the remaining arguments
   5620 (through @samp{:@code{vararg}}).  You can supply a default value for any
   5621 macro argument by following the name with @samp{=@var{deflt}}.  You
   5622 cannot define two macros with the same @var{macname} unless it has been
   5623 subject to the @code{.purgem} directive (@pxref{Purgem}) between the two
   5624 definitions.  For example, these are all valid @code{.macro} statements:
   5625 
   5626 @table @code
   5627 @item .macro comm
   5628 Begin the definition of a macro called @code{comm}, which takes no
   5629 arguments.
   5630 
   5631 @item  .macro plus1 p, p1
   5632 @itemx .macro plus1 p p1
   5633 Either statement begins the definition of a macro called @code{plus1},
   5634 which takes two arguments; within the macro definition, write
   5635 @samp{\p} or @samp{\p1} to evaluate the arguments.
   5636 
   5637 @item .macro reserve_str p1=0 p2
   5638 Begin the definition of a macro called @code{reserve_str}, with two
   5639 arguments.  The first argument has a default value, but not the second.
   5640 After the definition is complete, you can call the macro either as
   5641 @samp{reserve_str @var{a},@var{b}} (with @samp{\p1} evaluating to
   5642 @var{a} and @samp{\p2} evaluating to @var{b}), or as @samp{reserve_str
   5643 ,@var{b}} (with @samp{\p1} evaluating as the default, in this case
   5644 @samp{0}, and @samp{\p2} evaluating to @var{b}).
   5645 
   5646 @item .macro m p1:req, p2=0, p3:vararg
   5647 Begin the definition of a macro called @code{m}, with at least three
   5648 arguments.  The first argument must always have a value specified, but
   5649 not the second, which instead has a default value. The third formal
   5650 will get assigned all remaining arguments specified at invocation time.
   5651 
   5652 When you call a macro, you can specify the argument values either by
   5653 position, or by keyword.  For example, @samp{sum 9,17} is equivalent to
   5654 @samp{sum to=17, from=9}.
   5655 
   5656 @end table
   5657 
   5658 Note that since each of the @var{macargs} can be an identifier exactly
   5659 as any other one permitted by the target architecture, there may be
   5660 occasional problems if the target hand-crafts special meanings to certain
   5661 characters when they occur in a special position.  For example, if the colon
   5662 (@code{:}) is generally permitted to be part of a symbol name, but the
   5663 architecture specific code special-cases it when occurring as the final
   5664 character of a symbol (to denote a label), then the macro parameter
   5665 replacement code will have no way of knowing that and consider the whole
   5666 construct (including the colon) an identifier, and check only this
   5667 identifier for being the subject to parameter substitution.  So for example
   5668 this macro definition:
   5669 
   5670 @example
   5671 	.macro label l
   5672 \l:
   5673 	.endm
   5674 @end example
   5675 
   5676 might not work as expected.  Invoking @samp{label foo} might not create a label
   5677 called @samp{foo} but instead just insert the text @samp{\l:} into the
   5678 assembler source, probably generating an error about an unrecognised
   5679 identifier.
   5680 
   5681 Similarly problems might occur with the period character (@samp{.})
   5682 which is often allowed inside opcode names (and hence identifier names).  So
   5683 for example constructing a macro to build an opcode from a base name and a
   5684 length specifier like this:
   5685 
   5686 @example
   5687 	.macro opcode base length
   5688         \base.\length
   5689 	.endm
   5690 @end example
   5691 
   5692 and invoking it as @samp{opcode store l} will not create a @samp{store.l}
   5693 instruction but instead generate some kind of error as the assembler tries to
   5694 interpret the text @samp{\base.\length}.
   5695 
   5696 There are several possible ways around this problem:
   5697 
   5698 @table @code
   5699 @item Insert white space
   5700 If it is possible to use white space characters then this is the simplest
   5701 solution.  eg:
   5702 
   5703 @example
   5704 	.macro label l
   5705 \l :
   5706 	.endm
   5707 @end example
   5708 
   5709 @item Use @samp{\()}
   5710 The string @samp{\()} can be used to separate the end of a macro argument from
   5711 the following text.  eg:
   5712 
   5713 @example
   5714 	.macro opcode base length
   5715         \base\().\length
   5716 	.endm
   5717 @end example
   5718 
   5719 @item Use the alternate macro syntax mode
   5720 In the alternative macro syntax mode the ampersand character (@samp{&}) can be
   5721 used as a separator.  eg:
   5722 
   5723 @example
   5724 	.altmacro
   5725 	.macro label l
   5726 l&:
   5727 	.endm
   5728 @end example
   5729 @end table
   5730 
   5731 Note: this problem of correctly identifying string parameters to pseudo ops
   5732 also applies to the identifiers used in @code{.irp} (@pxref{Irp})
   5733 and @code{.irpc} (@pxref{Irpc}) as well.
   5734 
   5735 @item .endm
   5736 @cindex @code{endm} directive
   5737 Mark the end of a macro definition.
   5738 
   5739 @item .exitm
   5740 @cindex @code{exitm} directive
   5741 Exit early from the current macro definition.
   5742 
   5743 @cindex number of macros executed
   5744 @cindex macros, count executed
   5745 @item \@@
   5746 @command{@value{AS}} maintains a counter of how many macros it has
   5747 executed in this pseudo-variable; you can copy that number to your
   5748 output with @samp{\@@}, but @emph{only within a macro definition}.
   5749 
   5750 @item LOCAL @var{name} [ , @dots{} ]
   5751 @emph{Warning: @code{LOCAL} is only available if you select ``alternate
   5752 macro syntax'' with @samp{--alternate} or @code{.altmacro}.}
   5753 @xref{Altmacro,,@code{.altmacro}}.
   5754 @end ftable
   5755 
   5756 @node MRI
   5757 @section @code{.mri @var{val}}
   5758 
   5759 @cindex @code{mri} directive
   5760 @cindex MRI mode, temporarily
   5761 If @var{val} is non-zero, this tells @command{@value{AS}} to enter MRI mode.  If
   5762 @var{val} is zero, this tells @command{@value{AS}} to exit MRI mode.  This change
   5763 affects code assembled until the next @code{.mri} directive, or until the end
   5764 of the file.  @xref{M, MRI mode, MRI mode}.
   5765 
   5766 @node Noaltmacro
   5767 @section @code{.noaltmacro}
   5768 Disable alternate macro mode.  @xref{Altmacro}.
   5769 
   5770 @node Nolist
   5771 @section @code{.nolist}
   5772 
   5773 @cindex @code{nolist} directive
   5774 @cindex listing control, turning off
   5775 Control (in conjunction with the @code{.list} directive) whether or
   5776 not assembly listings are generated.  These two directives maintain an
   5777 internal counter (which is zero initially).   @code{.list} increments the
   5778 counter, and @code{.nolist} decrements it.  Assembly listings are
   5779 generated whenever the counter is greater than zero.
   5780 
   5781 @node Octa
   5782 @section @code{.octa @var{bignums}}
   5783 
   5784 @c FIXME: double size emitted for "octa" on i960, others?  Or warn?
   5785 @cindex @code{octa} directive
   5786 @cindex integer, 16-byte
   5787 @cindex sixteen byte integer
   5788 This directive expects zero or more bignums, separated by commas.  For each
   5789 bignum, it emits a 16-byte integer.
   5790 
   5791 The term ``octa'' comes from contexts in which a ``word'' is two bytes;
   5792 hence @emph{octa}-word for 16 bytes.
   5793 
   5794 @node Offset
   5795 @section @code{.offset @var{loc}}
   5796 
   5797 @cindex @code{offset} directive
   5798 Set the location counter to @var{loc} in the absolute section.  @var{loc} must
   5799 be an absolute expression.  This directive may be useful for defining
   5800 symbols with absolute values.  Do not confuse it with the @code{.org}
   5801 directive.
   5802 
   5803 @node Org
   5804 @section @code{.org @var{new-lc} , @var{fill}}
   5805 
   5806 @cindex @code{org} directive
   5807 @cindex location counter, advancing
   5808 @cindex advancing location counter
   5809 @cindex current address, advancing
   5810 Advance the location counter of the current section to
   5811 @var{new-lc}.  @var{new-lc} is either an absolute expression or an
   5812 expression with the same section as the current subsection.  That is,
   5813 you can't use @code{.org} to cross sections: if @var{new-lc} has the
   5814 wrong section, the @code{.org} directive is ignored.  To be compatible
   5815 with former assemblers, if the section of @var{new-lc} is absolute,
   5816 @command{@value{AS}} issues a warning, then pretends the section of @var{new-lc}
   5817 is the same as the current subsection.
   5818 
   5819 @code{.org} may only increase the location counter, or leave it
   5820 unchanged; you cannot use @code{.org} to move the location counter
   5821 backwards.
   5822 
   5823 @c double negative used below "not undefined" because this is a specific
   5824 @c reference to "undefined" (as SEG_UNKNOWN is called in this manual)
   5825 @c section. doc (a] cygnus.com 18feb91
   5826 Because @command{@value{AS}} tries to assemble programs in one pass, @var{new-lc}
   5827 may not be undefined.  If you really detest this restriction we eagerly await
   5828 a chance to share your improved assembler.
   5829 
   5830 Beware that the origin is relative to the start of the section, not
   5831 to the start of the subsection.  This is compatible with other
   5832 people's assemblers.
   5833 
   5834 When the location counter (of the current subsection) is advanced, the
   5835 intervening bytes are filled with @var{fill} which should be an
   5836 absolute expression.  If the comma and @var{fill} are omitted,
   5837 @var{fill} defaults to zero.
   5838 
   5839 @node P2align
   5840 @section @code{.p2align[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}
   5841 
   5842 @cindex padding the location counter given a power of two
   5843 @cindex @code{p2align} directive
   5844 Pad the location counter (in the current subsection) to a particular
   5845 storage boundary.  The first expression (which must be absolute) is the
   5846 number of low-order zero bits the location counter must have after
   5847 advancement.  For example @samp{.p2align 3} advances the location
   5848 counter until it a multiple of 8.  If the location counter is already a
   5849 multiple of 8, no change is needed.
   5850 
   5851 The second expression (also absolute) gives the fill value to be stored in the
   5852 padding bytes.  It (and the comma) may be omitted.  If it is omitted, the
   5853 padding bytes are normally zero.  However, on some systems, if the section is
   5854 marked as containing code and the fill value is omitted, the space is filled
   5855 with no-op instructions.
   5856 
   5857 The third expression is also absolute, and is also optional.  If it is present,
   5858 it is the maximum number of bytes that should be skipped by this alignment
   5859 directive.  If doing the alignment would require skipping more bytes than the
   5860 specified maximum, then the alignment is not done at all.  You can omit the
   5861 fill value (the second argument) entirely by simply using two commas after the
   5862 required alignment; this can be useful if you want the alignment to be filled
   5863 with no-op instructions when appropriate.
   5864 
   5865 @cindex @code{p2alignw} directive
   5866 @cindex @code{p2alignl} directive
   5867 The @code{.p2alignw} and @code{.p2alignl} directives are variants of the
   5868 @code{.p2align} directive.  The @code{.p2alignw} directive treats the fill
   5869 pattern as a two byte word value.  The @code{.p2alignl} directives treats the
   5870 fill pattern as a four byte longword value.  For example, @code{.p2alignw
   5871 2,0x368d} will align to a multiple of 4.  If it skips two bytes, they will be
   5872 filled in with the value 0x368d (the exact placement of the bytes depends upon
   5873 the endianness of the processor).  If it skips 1 or 3 bytes, the fill value is
   5874 undefined.
   5875 
   5876 @ifset ELF
   5877 @node PopSection
   5878 @section @code{.popsection}
   5879 
   5880 @cindex @code{popsection} directive
   5881 @cindex Section Stack
   5882 This is one of the ELF section stack manipulation directives.  The others are
   5883 @code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}),
   5884 @code{.pushsection} (@pxref{PushSection}), and @code{.previous}
   5885 (@pxref{Previous}).
   5886 
   5887 This directive replaces the current section (and subsection) with the top
   5888 section (and subsection) on the section stack.  This section is popped off the
   5889 stack.
   5890 @end ifset
   5891 
   5892 @ifset ELF
   5893 @node Previous
   5894 @section @code{.previous}
   5895 
   5896 @cindex @code{previous} directive
   5897 @cindex Section Stack
   5898 This is one of the ELF section stack manipulation directives.  The others are
   5899 @code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}),
   5900 @code{.pushsection} (@pxref{PushSection}), and @code{.popsection}
   5901 (@pxref{PopSection}).
   5902 
   5903 This directive swaps the current section (and subsection) with most recently
   5904 referenced section/subsection pair prior to this one.  Multiple
   5905 @code{.previous} directives in a row will flip between two sections (and their
   5906 subsections).  For example:
   5907 
   5908 @smallexample
   5909 .section A
   5910  .subsection 1
   5911   .word 0x1234
   5912  .subsection 2
   5913   .word 0x5678
   5914 .previous
   5915  .word 0x9abc
   5916 @end smallexample
   5917 
   5918 Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into subsection 2 of
   5919 section A.  Whilst:
   5920 
   5921 @smallexample
   5922 .section A
   5923 .subsection 1
   5924   # Now in section A subsection 1
   5925   .word 0x1234
   5926 .section B
   5927 .subsection 0
   5928   # Now in section B subsection 0
   5929   .word 0x5678
   5930 .subsection 1
   5931   # Now in section B subsection 1
   5932   .word 0x9abc
   5933 .previous
   5934   # Now in section B subsection 0
   5935   .word 0xdef0
   5936 @end smallexample
   5937 
   5938 Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection 0 of
   5939 section B and 0x9abc into subsection 1 of section B.
   5940 
   5941 In terms of the section stack, this directive swaps the current section with
   5942 the top section on the section stack.
   5943 @end ifset
   5944 
   5945 @node Print
   5946 @section @code{.print @var{string}}
   5947 
   5948 @cindex @code{print} directive
   5949 @command{@value{AS}} will print @var{string} on the standard output during
   5950 assembly.  You must put @var{string} in double quotes.
   5951 
   5952 @ifset ELF
   5953 @node Protected
   5954 @section @code{.protected @var{names}}
   5955 
   5956 @cindex @code{protected} directive
   5957 @cindex visibility
   5958 This is one of the ELF visibility directives.  The other two are
   5959 @code{.hidden} (@pxref{Hidden}) and @code{.internal} (@pxref{Internal}).
   5960 
   5961 This directive overrides the named symbols default visibility (which is set by
   5962 their binding: local, global or weak).  The directive sets the visibility to
   5963 @code{protected} which means that any references to the symbols from within the
   5964 components that defines them must be resolved to the definition in that
   5965 component, even if a definition in another component would normally preempt
   5966 this.
   5967 @end ifset
   5968 
   5969 @node Psize
   5970 @section @code{.psize @var{lines} , @var{columns}}
   5971 
   5972 @cindex @code{psize} directive
   5973 @cindex listing control: paper size
   5974 @cindex paper size, for listings
   5975 Use this directive to declare the number of lines---and, optionally, the
   5976 number of columns---to use for each page, when generating listings.
   5977 
   5978 If you do not use @code{.psize}, listings use a default line-count
   5979 of 60.  You may omit the comma and @var{columns} specification; the
   5980 default width is 200 columns.
   5981 
   5982 @command{@value{AS}} generates formfeeds whenever the specified number of
   5983 lines is exceeded (or whenever you explicitly request one, using
   5984 @code{.eject}).
   5985 
   5986 If you specify @var{lines} as @code{0}, no formfeeds are generated save
   5987 those explicitly specified with @code{.eject}.
   5988 
   5989 @node Purgem
   5990 @section @code{.purgem @var{name}}
   5991 
   5992 @cindex @code{purgem} directive
   5993 Undefine the macro @var{name}, so that later uses of the string will not be
   5994 expanded.  @xref{Macro}.
   5995 
   5996 @ifset ELF
   5997 @node PushSection
   5998 @section @code{.pushsection @var{name} [, @var{subsection}] [, "@var{flags}"[, @@@var{type}[,@var{arguments}]]]}
   5999 
   6000 @cindex @code{pushsection} directive
   6001 @cindex Section Stack
   6002 This is one of the ELF section stack manipulation directives.  The others are
   6003 @code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}),
   6004 @code{.popsection} (@pxref{PopSection}), and @code{.previous}
   6005 (@pxref{Previous}).
   6006 
   6007 This directive pushes the current section (and subsection) onto the
   6008 top of the section stack, and then replaces the current section and
   6009 subsection with @code{name} and @code{subsection}. The optional
   6010 @code{flags}, @code{type} and @code{arguments} are treated the same
   6011 as in the @code{.section} (@pxref{Section}) directive.
   6012 @end ifset
   6013 
   6014 @node Quad
   6015 @section @code{.quad @var{bignums}}
   6016 
   6017 @cindex @code{quad} directive
   6018 @code{.quad} expects zero or more bignums, separated by commas.  For
   6019 each bignum, it emits
   6020 @ifclear bignum-16
   6021 an 8-byte integer.  If the bignum won't fit in 8 bytes, it prints a
   6022 warning message; and just takes the lowest order 8 bytes of the bignum.
   6023 @cindex eight-byte integer
   6024 @cindex integer, 8-byte
   6025 
   6026 The term ``quad'' comes from contexts in which a ``word'' is two bytes;
   6027 hence @emph{quad}-word for 8 bytes.
   6028 @end ifclear
   6029 @ifset bignum-16
   6030 a 16-byte integer.  If the bignum won't fit in 16 bytes, it prints a
   6031 warning message; and just takes the lowest order 16 bytes of the bignum.
   6032 @cindex sixteen-byte integer
   6033 @cindex integer, 16-byte
   6034 @end ifset
   6035 
   6036 @node Reloc
   6037 @section @code{.reloc @var{offset}, @var{reloc_name}[, @var{expression}]}
   6038 
   6039 @cindex @code{reloc} directive
   6040 Generate a relocation at @var{offset} of type @var{reloc_name} with value
   6041 @var{expression}.  If @var{offset} is a number, the relocation is generated in
   6042 the current section.  If @var{offset} is an expression that resolves to a
   6043 symbol plus offset, the relocation is generated in the given symbol's section.
   6044 @var{expression}, if present, must resolve to a symbol plus addend or to an
   6045 absolute value, but note that not all targets support an addend.  e.g. ELF REL
   6046 targets such as i386 store an addend in the section contents rather than in the
   6047 relocation.  This low level interface does not support addends stored in the
   6048 section.
   6049 
   6050 @node Rept
   6051 @section @code{.rept @var{count}}
   6052 
   6053 @cindex @code{rept} directive
   6054 Repeat the sequence of lines between the @code{.rept} directive and the next
   6055 @code{.endr} directive @var{count} times.
   6056 
   6057 For example, assembling
   6058 
   6059 @example
   6060         .rept   3
   6061         .long   0
   6062         .endr
   6063 @end example
   6064 
   6065 is equivalent to assembling
   6066 
   6067 @example
   6068         .long   0
   6069         .long   0
   6070         .long   0
   6071 @end example
   6072 
   6073 @node Sbttl
   6074 @section @code{.sbttl "@var{subheading}"}
   6075 
   6076 @cindex @code{sbttl} directive
   6077 @cindex subtitles for listings
   6078 @cindex listing control: subtitle
   6079 Use @var{subheading} as the title (third line, immediately after the
   6080 title line) when generating assembly listings.
   6081 
   6082 This directive affects subsequent pages, as well as the current page if
   6083 it appears within ten lines of the top of a page.
   6084 
   6085 @ifset COFF
   6086 @node Scl
   6087 @section @code{.scl @var{class}}
   6088 
   6089 @cindex @code{scl} directive
   6090 @cindex symbol storage class (COFF)
   6091 @cindex COFF symbol storage class
   6092 Set the storage-class value for a symbol.  This directive may only be
   6093 used inside a @code{.def}/@code{.endef} pair.  Storage class may flag
   6094 whether a symbol is static or external, or it may record further
   6095 symbolic debugging information.
   6096 @ifset BOUT
   6097 
   6098 The @samp{.scl} directive is primarily associated with COFF output; when
   6099 configured to generate @code{b.out} output format, @command{@value{AS}}
   6100 accepts this directive but ignores it.
   6101 @end ifset
   6102 @end ifset
   6103 
   6104 @ifset COFF-ELF
   6105 @node Section
   6106 @section @code{.section @var{name}}
   6107 
   6108 @cindex named section
   6109 Use the @code{.section} directive to assemble the following code into a section
   6110 named @var{name}.
   6111 
   6112 This directive is only supported for targets that actually support arbitrarily
   6113 named sections; on @code{a.out} targets, for example, it is not accepted, even
   6114 with a standard @code{a.out} section name.
   6115 
   6116 @ifset COFF
   6117 @ifset ELF
   6118 @c only print the extra heading if both COFF and ELF are set
   6119 @subheading COFF Version
   6120 @end ifset
   6121 
   6122 @cindex @code{section} directive (COFF version)
   6123 For COFF targets, the @code{.section} directive is used in one of the following
   6124 ways:
   6125 
   6126 @smallexample
   6127 .section @var{name}[, "@var{flags}"]
   6128 .section @var{name}[, @var{subsection}]
   6129 @end smallexample
   6130 
   6131 If the optional argument is quoted, it is taken as flags to use for the
   6132 section.  Each flag is a single character.  The following flags are recognized:
   6133 @table @code
   6134 @item b
   6135 bss section (uninitialized data)
   6136 @item n
   6137 section is not loaded
   6138 @item w
   6139 writable section
   6140 @item d
   6141 data section
   6142 @item e
   6143 exclude section from linking
   6144 @item r
   6145 read-only section
   6146 @item x
   6147 executable section
   6148 @item s
   6149 shared section (meaningful for PE targets)
   6150 @item a
   6151 ignored.  (For compatibility with the ELF version)
   6152 @item y
   6153 section is not readable (meaningful for PE targets)
   6154 @item 0-9
   6155 single-digit power-of-two section alignment (GNU extension)
   6156 @end table
   6157 
   6158 If no flags are specified, the default flags depend upon the section name.  If
   6159 the section name is not recognized, the default will be for the section to be
   6160 loaded and writable.  Note the @code{n} and @code{w} flags remove attributes
   6161 from the section, rather than adding them, so if they are used on their own it
   6162 will be as if no flags had been specified at all.
   6163 
   6164 If the optional argument to the @code{.section} directive is not quoted, it is
   6165 taken as a subsection number (@pxref{Sub-Sections}).
   6166 @end ifset
   6167 
   6168 @ifset ELF
   6169 @ifset COFF
   6170 @c only print the extra heading if both COFF and ELF are set
   6171 @subheading ELF Version
   6172 @end ifset
   6173 
   6174 @cindex Section Stack
   6175 This is one of the ELF section stack manipulation directives.  The others are
   6176 @code{.subsection} (@pxref{SubSection}), @code{.pushsection}
   6177 (@pxref{PushSection}), @code{.popsection} (@pxref{PopSection}), and
   6178 @code{.previous} (@pxref{Previous}).
   6179 
   6180 @cindex @code{section} directive (ELF version)
   6181 For ELF targets, the @code{.section} directive is used like this:
   6182 
   6183 @smallexample
   6184 .section @var{name} [, "@var{flags}"[, @@@var{type}[,@var{flag_specific_arguments}]]]
   6185 @end smallexample
   6186 
   6187 The optional @var{flags} argument is a quoted string which may contain any
   6188 combination of the following characters:
   6189 @table @code
   6190 @item a
   6191 section is allocatable
   6192 @item e
   6193 section is excluded from executable and shared library.
   6194 @item w
   6195 section is writable
   6196 @item x
   6197 section is executable
   6198 @item M
   6199 section is mergeable
   6200 @item S
   6201 section contains zero terminated strings
   6202 @item G
   6203 section is a member of a section group
   6204 @item T
   6205 section is used for thread-local-storage
   6206 @item ?
   6207 section is a member of the previously-current section's group, if any
   6208 @end table
   6209 
   6210 The optional @var{type} argument may contain one of the following constants:
   6211 @table @code
   6212 @item @@progbits
   6213 section contains data
   6214 @item @@nobits
   6215 section does not contain data (i.e., section only occupies space)
   6216 @item @@note
   6217 section contains data which is used by things other than the program
   6218 @item @@init_array
   6219 section contains an array of pointers to init functions
   6220 @item @@fini_array
   6221 section contains an array of pointers to finish functions
   6222 @item @@preinit_array
   6223 section contains an array of pointers to pre-init functions
   6224 @end table
   6225 
   6226 Many targets only support the first three section types.
   6227 
   6228 Note on targets where the @code{@@} character is the start of a comment (eg
   6229 ARM) then another character is used instead.  For example the ARM port uses the
   6230 @code{%} character.
   6231 
   6232 If @var{flags} contains the @code{M} symbol then the @var{type} argument must
   6233 be specified as well as an extra argument---@var{entsize}---like this:
   6234 
   6235 @smallexample
   6236 .section @var{name} , "@var{flags}"M, @@@var{type}, @var{entsize}
   6237 @end smallexample
   6238 
   6239 Sections with the @code{M} flag but not @code{S} flag must contain fixed size
   6240 constants, each @var{entsize} octets long. Sections with both @code{M} and
   6241 @code{S} must contain zero terminated strings where each character is
   6242 @var{entsize} bytes long. The linker may remove duplicates within sections with
   6243 the same name, same entity size and same flags.  @var{entsize} must be an
   6244 absolute expression.  For sections with both @code{M} and @code{S}, a string
   6245 which is a suffix of a larger string is considered a duplicate.  Thus
   6246 @code{"def"} will be merged with @code{"abcdef"};  A reference to the first
   6247 @code{"def"} will be changed to a reference to @code{"abcdef"+3}.
   6248 
   6249 If @var{flags} contains the @code{G} symbol then the @var{type} argument must
   6250 be present along with an additional field like this:
   6251 
   6252 @smallexample
   6253 .section @var{name} , "@var{flags}"G, @@@var{type}, @var{GroupName}[, @var{linkage}]
   6254 @end smallexample
   6255 
   6256 The @var{GroupName} field specifies the name of the section group to which this
   6257 particular section belongs.  The optional linkage field can contain:
   6258 @table @code
   6259 @item comdat
   6260 indicates that only one copy of this section should be retained
   6261 @item .gnu.linkonce
   6262 an alias for comdat
   6263 @end table
   6264 
   6265 Note: if both the @var{M} and @var{G} flags are present then the fields for
   6266 the Merge flag should come first, like this:
   6267 
   6268 @smallexample
   6269 .section @var{name} , "@var{flags}"MG, @@@var{type}, @var{entsize}, @var{GroupName}[, @var{linkage}]
   6270 @end smallexample
   6271 
   6272 If @var{flags} contains the @code{?} symbol then it may not also contain the
   6273 @code{G} symbol and the @var{GroupName} or @var{linkage} fields should not be
   6274 present.  Instead, @code{?} says to consider the section that's current before
   6275 this directive.  If that section used @code{G}, then the new section will use
   6276 @code{G} with those same @var{GroupName} and @var{linkage} fields implicitly.
   6277 If not, then the @code{?} symbol has no effect.
   6278 
   6279 If no flags are specified, the default flags depend upon the section name.  If
   6280 the section name is not recognized, the default will be for the section to have
   6281 none of the above flags: it will not be allocated in memory, nor writable, nor
   6282 executable.  The section will contain data.
   6283 
   6284 For ELF targets, the assembler supports another type of @code{.section}
   6285 directive for compatibility with the Solaris assembler:
   6286 
   6287 @smallexample
   6288 .section "@var{name}"[, @var{flags}...]
   6289 @end smallexample
   6290 
   6291 Note that the section name is quoted.  There may be a sequence of comma
   6292 separated flags:
   6293 @table @code
   6294 @item #alloc
   6295 section is allocatable
   6296 @item #write
   6297 section is writable
   6298 @item #execinstr
   6299 section is executable
   6300 @item #exclude
   6301 section is excluded from executable and shared library.
   6302 @item #tls
   6303 section is used for thread local storage
   6304 @end table
   6305 
   6306 This directive replaces the current section and subsection.  See the
   6307 contents of the gas testsuite directory @code{gas/testsuite/gas/elf} for
   6308 some examples of how this directive and the other section stack directives
   6309 work.
   6310 @end ifset
   6311 @end ifset
   6312 
   6313 @node Set
   6314 @section @code{.set @var{symbol}, @var{expression}}
   6315 
   6316 @cindex @code{set} directive
   6317 @cindex symbol value, setting
   6318 Set the value of @var{symbol} to @var{expression}.  This
   6319 changes @var{symbol}'s value and type to conform to
   6320 @var{expression}.  If @var{symbol} was flagged as external, it remains
   6321 flagged (@pxref{Symbol Attributes}).
   6322 
   6323 You may @code{.set} a symbol many times in the same assembly.
   6324 
   6325 If you @code{.set} a global symbol, the value stored in the object
   6326 file is the last value stored into it.
   6327 
   6328 @ifset Z80
   6329 On Z80 @code{set} is a real instruction, use
   6330 @samp{@var{symbol} defl @var{expression}} instead.
   6331 @end ifset
   6332 
   6333 @node Short
   6334 @section @code{.short @var{expressions}}
   6335 
   6336 @cindex @code{short} directive
   6337 @ifset GENERIC
   6338 @code{.short} is normally the same as @samp{.word}.
   6339 @xref{Word,,@code{.word}}.
   6340 
   6341 In some configurations, however, @code{.short} and @code{.word} generate
   6342 numbers of different lengths.  @xref{Machine Dependencies}.
   6343 @end ifset
   6344 @ifclear GENERIC
   6345 @ifset W16
   6346 @code{.short} is the same as @samp{.word}.  @xref{Word,,@code{.word}}.
   6347 @end ifset
   6348 @ifset W32
   6349 This expects zero or more @var{expressions}, and emits
   6350 a 16 bit number for each.
   6351 @end ifset
   6352 @end ifclear
   6353 
   6354 @node Single
   6355 @section @code{.single @var{flonums}}
   6356 
   6357 @cindex @code{single} directive
   6358 @cindex floating point numbers (single)
   6359 This directive assembles zero or more flonums, separated by commas.  It
   6360 has the same effect as @code{.float}.
   6361 @ifset GENERIC
   6362 The exact kind of floating point numbers emitted depends on how
   6363 @command{@value{AS}} is configured.  @xref{Machine Dependencies}.
   6364 @end ifset
   6365 @ifclear GENERIC
   6366 @ifset IEEEFLOAT
   6367 On the @value{TARGET} family, @code{.single} emits 32-bit floating point
   6368 numbers in @sc{ieee} format.
   6369 @end ifset
   6370 @end ifclear
   6371 
   6372 @ifset COFF-ELF
   6373 @node Size
   6374 @section @code{.size}
   6375 
   6376 This directive is used to set the size associated with a symbol.
   6377 
   6378 @ifset COFF
   6379 @ifset ELF
   6380 @c only print the extra heading if both COFF and ELF are set
   6381 @subheading COFF Version
   6382 @end ifset
   6383 
   6384 @cindex @code{size} directive (COFF version)
   6385 For COFF targets, the @code{.size} directive is only permitted inside
   6386 @code{.def}/@code{.endef} pairs.  It is used like this:
   6387 
   6388 @smallexample
   6389 .size @var{expression}
   6390 @end smallexample
   6391 
   6392 @ifset BOUT
   6393 @samp{.size} is only meaningful when generating COFF format output; when
   6394 @command{@value{AS}} is generating @code{b.out}, it accepts this directive but
   6395 ignores it.
   6396 @end ifset
   6397 @end ifset
   6398 
   6399 @ifset ELF
   6400 @ifset COFF
   6401 @c only print the extra heading if both COFF and ELF are set
   6402 @subheading ELF Version
   6403 @end ifset
   6404 
   6405 @cindex @code{size} directive (ELF version)
   6406 For ELF targets, the @code{.size} directive is used like this:
   6407 
   6408 @smallexample
   6409 .size @var{name} , @var{expression}
   6410 @end smallexample
   6411 
   6412 This directive sets the size associated with a symbol @var{name}.
   6413 The size in bytes is computed from @var{expression} which can make use of label
   6414 arithmetic.  This directive is typically used to set the size of function
   6415 symbols.
   6416 @end ifset
   6417 @end ifset
   6418 
   6419 @ifclear no-space-dir
   6420 @node Skip
   6421 @section @code{.skip @var{size} , @var{fill}}
   6422 
   6423 @cindex @code{skip} directive
   6424 @cindex filling memory
   6425 This directive emits @var{size} bytes, each of value @var{fill}.  Both
   6426 @var{size} and @var{fill} are absolute expressions.  If the comma and
   6427 @var{fill} are omitted, @var{fill} is assumed to be zero.  This is the same as
   6428 @samp{.space}.
   6429 @end ifclear
   6430 
   6431 @node Sleb128
   6432 @section @code{.sleb128 @var{expressions}}
   6433 
   6434 @cindex @code{sleb128} directive
   6435 @var{sleb128} stands for ``signed little endian base 128.''  This is a
   6436 compact, variable length representation of numbers used by the DWARF
   6437 symbolic debugging format.  @xref{Uleb128, ,@code{.uleb128}}.
   6438 
   6439 @ifclear no-space-dir
   6440 @node Space
   6441 @section @code{.space @var{size} , @var{fill}}
   6442 
   6443 @cindex @code{space} directive
   6444 @cindex filling memory
   6445 This directive emits @var{size} bytes, each of value @var{fill}.  Both
   6446 @var{size} and @var{fill} are absolute expressions.  If the comma
   6447 and @var{fill} are omitted, @var{fill} is assumed to be zero.  This is the same
   6448 as @samp{.skip}.
   6449 
   6450 @ifset HPPA
   6451 @quotation
   6452 @emph{Warning:} @code{.space} has a completely different meaning for HPPA
   6453 targets; use @code{.block} as a substitute.  See @cite{HP9000 Series 800
   6454 Assembly Language Reference Manual} (HP 92432-90001) for the meaning of the
   6455 @code{.space} directive.  @xref{HPPA Directives,,HPPA Assembler Directives},
   6456 for a summary.
   6457 @end quotation
   6458 @end ifset
   6459 @end ifclear
   6460 
   6461 @ifset have-stabs
   6462 @node Stab
   6463 @section @code{.stabd, .stabn, .stabs}
   6464 
   6465 @cindex symbolic debuggers, information for
   6466 @cindex @code{stab@var{x}} directives
   6467 There are three directives that begin @samp{.stab}.
   6468 All emit symbols (@pxref{Symbols}), for use by symbolic debuggers.
   6469 The symbols are not entered in the @command{@value{AS}} hash table: they
   6470 cannot be referenced elsewhere in the source file.
   6471 Up to five fields are required:
   6472 
   6473 @table @var
   6474 @item string
   6475 This is the symbol's name.  It may contain any character except
   6476 @samp{\000}, so is more general than ordinary symbol names.  Some
   6477 debuggers used to code arbitrarily complex structures into symbol names
   6478 using this field.
   6479 
   6480 @item type
   6481 An absolute expression.  The symbol's type is set to the low 8 bits of
   6482 this expression.  Any bit pattern is permitted, but @code{@value{LD}}
   6483 and debuggers choke on silly bit patterns.
   6484 
   6485 @item other
   6486 An absolute expression.  The symbol's ``other'' attribute is set to the
   6487 low 8 bits of this expression.
   6488 
   6489 @item desc
   6490 An absolute expression.  The symbol's descriptor is set to the low 16
   6491 bits of this expression.
   6492 
   6493 @item value
   6494 An absolute expression which becomes the symbol's value.
   6495 @end table
   6496 
   6497 If a warning is detected while reading a @code{.stabd}, @code{.stabn},
   6498 or @code{.stabs} statement, the symbol has probably already been created;
   6499 you get a half-formed symbol in your object file.  This is
   6500 compatible with earlier assemblers!
   6501 
   6502 @table @code
   6503 @cindex @code{stabd} directive
   6504 @item .stabd @var{type} , @var{other} , @var{desc}
   6505 
   6506 The ``name'' of the symbol generated is not even an empty string.
   6507 It is a null pointer, for compatibility.  Older assemblers used a
   6508 null pointer so they didn't waste space in object files with empty
   6509 strings.
   6510 
   6511 The symbol's value is set to the location counter,
   6512 relocatably.  When your program is linked, the value of this symbol
   6513 is the address of the location counter when the @code{.stabd} was
   6514 assembled.
   6515 
   6516 @cindex @code{stabn} directive
   6517 @item .stabn @var{type} , @var{other} , @var{desc} , @var{value}
   6518 The name of the symbol is set to the empty string @code{""}.
   6519 
   6520 @cindex @code{stabs} directive
   6521 @item .stabs @var{string} ,  @var{type} , @var{other} , @var{desc} , @var{value}
   6522 All five fields are specified.
   6523 @end table
   6524 @end ifset
   6525 @c end     have-stabs
   6526 
   6527 @node String
   6528 @section @code{.string} "@var{str}", @code{.string8} "@var{str}", @code{.string16}
   6529 "@var{str}", @code{.string32} "@var{str}", @code{.string64} "@var{str}"
   6530 
   6531 @cindex string, copying to object file
   6532 @cindex string8, copying to object file
   6533 @cindex string16, copying to object file
   6534 @cindex string32, copying to object file
   6535 @cindex string64, copying to object file
   6536 @cindex @code{string} directive
   6537 @cindex @code{string8} directive
   6538 @cindex @code{string16} directive
   6539 @cindex @code{string32} directive
   6540 @cindex @code{string64} directive
   6541 
   6542 Copy the characters in @var{str} to the object file.  You may specify more than
   6543 one string to copy, separated by commas.  Unless otherwise specified for a
   6544 particular machine, the assembler marks the end of each string with a 0 byte.
   6545 You can use any of the escape sequences described in @ref{Strings,,Strings}.
   6546 
   6547 The variants @code{string16}, @code{string32} and @code{string64} differ from
   6548 the @code{string} pseudo opcode in that each 8-bit character from @var{str} is
   6549 copied and expanded to 16, 32 or 64 bits respectively.  The expanded characters
   6550 are stored in target endianness byte order.
   6551 
   6552 Example:
   6553 @smallexample
   6554 	.string32 "BYE"
   6555 expands to:
   6556 	.string   "B\0\0\0Y\0\0\0E\0\0\0"  /* On little endian targets.  */
   6557 	.string   "\0\0\0B\0\0\0Y\0\0\0E"  /* On big endian targets.  */
   6558 @end smallexample
   6559 
   6560 
   6561 @node Struct
   6562 @section @code{.struct @var{expression}}
   6563 
   6564 @cindex @code{struct} directive
   6565 Switch to the absolute section, and set the section offset to @var{expression},
   6566 which must be an absolute expression.  You might use this as follows:
   6567 @smallexample
   6568         .struct 0
   6569 field1:
   6570         .struct field1 + 4
   6571 field2:
   6572         .struct field2 + 4
   6573 field3:
   6574 @end smallexample
   6575 This would define the symbol @code{field1} to have the value 0, the symbol
   6576 @code{field2} to have the value 4, and the symbol @code{field3} to have the
   6577 value 8.  Assembly would be left in the absolute section, and you would need to
   6578 use a @code{.section} directive of some sort to change to some other section
   6579 before further assembly.
   6580 
   6581 @ifset ELF
   6582 @node SubSection
   6583 @section @code{.subsection @var{name}}
   6584 
   6585 @cindex @code{subsection} directive
   6586 @cindex Section Stack
   6587 This is one of the ELF section stack manipulation directives.  The others are
   6588 @code{.section} (@pxref{Section}), @code{.pushsection} (@pxref{PushSection}),
   6589 @code{.popsection} (@pxref{PopSection}), and @code{.previous}
   6590 (@pxref{Previous}).
   6591 
   6592 This directive replaces the current subsection with @code{name}.  The current
   6593 section is not changed.  The replaced subsection is put onto the section stack
   6594 in place of the then current top of stack subsection.
   6595 @end ifset
   6596 
   6597 @ifset ELF
   6598 @node Symver
   6599 @section @code{.symver}
   6600 @cindex @code{symver} directive
   6601 @cindex symbol versioning
   6602 @cindex versions of symbols
   6603 Use the @code{.symver} directive to bind symbols to specific version nodes
   6604 within a source file.  This is only supported on ELF platforms, and is
   6605 typically used when assembling files to be linked into a shared library.
   6606 There are cases where it may make sense to use this in objects to be bound
   6607 into an application itself so as to override a versioned symbol from a
   6608 shared library.
   6609 
   6610 For ELF targets, the @code{.symver} directive can be used like this:
   6611 @smallexample
   6612 .symver @var{name}, @var{name2@@nodename}
   6613 @end smallexample
   6614 If the symbol @var{name} is defined within the file
   6615 being assembled, the @code{.symver} directive effectively creates a symbol
   6616 alias with the name @var{name2@@nodename}, and in fact the main reason that we
   6617 just don't try and create a regular alias is that the @var{@@} character isn't
   6618 permitted in symbol names.  The @var{name2} part of the name is the actual name
   6619 of the symbol by which it will be externally referenced.  The name @var{name}
   6620 itself is merely a name of convenience that is used so that it is possible to
   6621 have definitions for multiple versions of a function within a single source
   6622 file, and so that the compiler can unambiguously know which version of a
   6623 function is being mentioned.  The @var{nodename} portion of the alias should be
   6624 the name of a node specified in the version script supplied to the linker when
   6625 building a shared library.  If you are attempting to override a versioned
   6626 symbol from a shared library, then @var{nodename} should correspond to the
   6627 nodename of the symbol you are trying to override.
   6628 
   6629 If the symbol @var{name} is not defined within the file being assembled, all
   6630 references to @var{name} will be changed to @var{name2@@nodename}.  If no
   6631 reference to @var{name} is made, @var{name2@@nodename} will be removed from the
   6632 symbol table.
   6633 
   6634 Another usage of the @code{.symver} directive is:
   6635 @smallexample
   6636 .symver @var{name}, @var{name2@@@@nodename}
   6637 @end smallexample
   6638 In this case, the symbol @var{name} must exist and be defined within
   6639 the file being assembled. It is similar to @var{name2@@nodename}. The
   6640 difference is @var{name2@@@@nodename} will also be used to resolve
   6641 references to @var{name2} by the linker.
   6642 
   6643 The third usage of the @code{.symver} directive is:
   6644 @smallexample
   6645 .symver @var{name}, @var{name2@@@@@@nodename}
   6646 @end smallexample
   6647 When @var{name} is not defined within the
   6648 file being assembled, it is treated as @var{name2@@nodename}. When
   6649 @var{name} is defined within the file being assembled, the symbol
   6650 name, @var{name}, will be changed to @var{name2@@@@nodename}.
   6651 @end ifset
   6652 
   6653 @ifset COFF
   6654 @node Tag
   6655 @section @code{.tag @var{structname}}
   6656 
   6657 @cindex COFF structure debugging
   6658 @cindex structure debugging, COFF
   6659 @cindex @code{tag} directive
   6660 This directive is generated by compilers to include auxiliary debugging
   6661 information in the symbol table.  It is only permitted inside
   6662 @code{.def}/@code{.endef} pairs.  Tags are used to link structure
   6663 definitions in the symbol table with instances of those structures.
   6664 @ifset BOUT
   6665 
   6666 @samp{.tag} is only used when generating COFF format output; when
   6667 @command{@value{AS}} is generating @code{b.out}, it accepts this directive but
   6668 ignores it.
   6669 @end ifset
   6670 @end ifset
   6671 
   6672 @node Text
   6673 @section @code{.text @var{subsection}}
   6674 
   6675 @cindex @code{text} directive
   6676 Tells @command{@value{AS}} to assemble the following statements onto the end of
   6677 the text subsection numbered @var{subsection}, which is an absolute
   6678 expression.  If @var{subsection} is omitted, subsection number zero
   6679 is used.
   6680 
   6681 @node Title
   6682 @section @code{.title "@var{heading}"}
   6683 
   6684 @cindex @code{title} directive
   6685 @cindex listing control: title line
   6686 Use @var{heading} as the title (second line, immediately after the
   6687 source file name and pagenumber) when generating assembly listings.
   6688 
   6689 This directive affects subsequent pages, as well as the current page if
   6690 it appears within ten lines of the top of a page.
   6691 
   6692 @ifset COFF-ELF
   6693 @node Type
   6694 @section @code{.type}
   6695 
   6696 This directive is used to set the type of a symbol.
   6697 
   6698 @ifset COFF
   6699 @ifset ELF
   6700 @c only print the extra heading if both COFF and ELF are set
   6701 @subheading COFF Version
   6702 @end ifset
   6703 
   6704 @cindex COFF symbol type
   6705 @cindex symbol type, COFF
   6706 @cindex @code{type} directive (COFF version)
   6707 For COFF targets, this directive is permitted only within
   6708 @code{.def}/@code{.endef} pairs.  It is used like this:
   6709 
   6710 @smallexample
   6711 .type @var{int}
   6712 @end smallexample
   6713 
   6714 This records the integer @var{int} as the type attribute of a symbol table
   6715 entry.
   6716 
   6717 @ifset BOUT
   6718 @samp{.type} is associated only with COFF format output; when
   6719 @command{@value{AS}} is configured for @code{b.out} output, it accepts this
   6720 directive but ignores it.
   6721 @end ifset
   6722 @end ifset
   6723 
   6724 @ifset ELF
   6725 @ifset COFF
   6726 @c only print the extra heading if both COFF and ELF are set
   6727 @subheading ELF Version
   6728 @end ifset
   6729 
   6730 @cindex ELF symbol type
   6731 @cindex symbol type, ELF
   6732 @cindex @code{type} directive (ELF version)
   6733 For ELF targets, the @code{.type} directive is used like this:
   6734 
   6735 @smallexample
   6736 .type @var{name} , @var{type description}
   6737 @end smallexample
   6738 
   6739 This sets the type of symbol @var{name} to be either a
   6740 function symbol or an object symbol.  There are five different syntaxes
   6741 supported for the @var{type description} field, in order to provide
   6742 compatibility with various other assemblers.
   6743 
   6744 Because some of the characters used in these syntaxes (such as @samp{@@} and
   6745 @samp{#}) are comment characters for some architectures, some of the syntaxes
   6746 below do not work on all architectures.  The first variant will be accepted by
   6747 the GNU assembler on all architectures so that variant should be used for
   6748 maximum portability, if you do not need to assemble your code with other
   6749 assemblers.
   6750 
   6751 The syntaxes supported are:
   6752 
   6753 @smallexample
   6754   .type <name> STT_<TYPE_IN_UPPER_CASE>
   6755   .type <name>,#<type>
   6756   .type <name>,@@<type>
   6757   .type <name>,%<type>
   6758   .type <name>,"<type>"
   6759 @end smallexample
   6760 
   6761 The types supported are:
   6762 
   6763 @table @gcctabopt
   6764 @item STT_FUNC
   6765 @itemx function
   6766 Mark the symbol as being a function name.
   6767 
   6768 @item STT_GNU_IFUNC
   6769 @itemx gnu_indirect_function
   6770 Mark the symbol as an indirect function when evaluated during reloc
   6771 processing.  (This is only supported on assemblers targeting GNU systems).
   6772 
   6773 @item STT_OBJECT
   6774 @itemx object
   6775 Mark the symbol as being a data object.
   6776 
   6777 @item STT_TLS
   6778 @itemx tls_object
   6779 Mark the symbol as being a thead-local data object.
   6780 
   6781 @item STT_COMMON
   6782 @itemx common
   6783 Mark the symbol as being a common data object.
   6784 
   6785 @item STT_NOTYPE
   6786 @itemx notype
   6787 Does not mark the symbol in any way.  It is supported just for completeness.
   6788 
   6789 @item gnu_unique_object
   6790 Marks the symbol as being a globally unique data object.  The dynamic linker
   6791 will make sure that in the entire process there is just one symbol with this
   6792 name and type in use.  (This is only supported on assemblers targeting GNU
   6793 systems).
   6794 
   6795 @end table
   6796 
   6797 Note: Some targets support extra types in addition to those listed above.
   6798 
   6799 @end ifset
   6800 @end ifset
   6801 
   6802 @node Uleb128
   6803 @section @code{.uleb128 @var{expressions}}
   6804 
   6805 @cindex @code{uleb128} directive
   6806 @var{uleb128} stands for ``unsigned little endian base 128.''  This is a
   6807 compact, variable length representation of numbers used by the DWARF
   6808 symbolic debugging format.  @xref{Sleb128, ,@code{.sleb128}}.
   6809 
   6810 @ifset COFF
   6811 @node Val
   6812 @section @code{.val @var{addr}}
   6813 
   6814 @cindex @code{val} directive
   6815 @cindex COFF value attribute
   6816 @cindex value attribute, COFF
   6817 This directive, permitted only within @code{.def}/@code{.endef} pairs,
   6818 records the address @var{addr} as the value attribute of a symbol table
   6819 entry.
   6820 @ifset BOUT
   6821 
   6822 @samp{.val} is used only for COFF output; when @command{@value{AS}} is
   6823 configured for @code{b.out}, it accepts this directive but ignores it.
   6824 @end ifset
   6825 @end ifset
   6826 
   6827 @ifset ELF
   6828 @node Version
   6829 @section @code{.version "@var{string}"}
   6830 
   6831 @cindex @code{version} directive
   6832 This directive creates a @code{.note} section and places into it an ELF
   6833 formatted note of type NT_VERSION.  The note's name is set to @code{string}.
   6834 @end ifset
   6835 
   6836 @ifset ELF
   6837 @node VTableEntry
   6838 @section @code{.vtable_entry @var{table}, @var{offset}}
   6839 
   6840 @cindex @code{vtable_entry} directive
   6841 This directive finds or creates a symbol @code{table} and creates a
   6842 @code{VTABLE_ENTRY} relocation for it with an addend of @code{offset}.
   6843 
   6844 @node VTableInherit
   6845 @section @code{.vtable_inherit @var{child}, @var{parent}}
   6846 
   6847 @cindex @code{vtable_inherit} directive
   6848 This directive finds the symbol @code{child} and finds or creates the symbol
   6849 @code{parent} and then creates a @code{VTABLE_INHERIT} relocation for the
   6850 parent whose addend is the value of the child symbol.  As a special case the
   6851 parent name of @code{0} is treated as referring to the @code{*ABS*} section.
   6852 @end ifset
   6853 
   6854 @node Warning
   6855 @section @code{.warning "@var{string}"}
   6856 @cindex warning directive
   6857 Similar to the directive @code{.error}
   6858 (@pxref{Error,,@code{.error "@var{string}"}}), but just emits a warning.
   6859 
   6860 @node Weak
   6861 @section @code{.weak @var{names}}
   6862 
   6863 @cindex @code{weak} directive
   6864 This directive sets the weak attribute on the comma separated list of symbol
   6865 @code{names}.  If the symbols do not already exist, they will be created.
   6866 
   6867 On COFF targets other than PE, weak symbols are a GNU extension.  This
   6868 directive sets the weak attribute on the comma separated list of symbol
   6869 @code{names}.  If the symbols do not already exist, they will be created.
   6870 
   6871 On the PE target, weak symbols are supported natively as weak aliases.
   6872 When a weak symbol is created that is not an alias, GAS creates an
   6873 alternate symbol to hold the default value.
   6874 
   6875 @node Weakref
   6876 @section @code{.weakref @var{alias}, @var{target}}
   6877 
   6878 @cindex @code{weakref} directive
   6879 This directive creates an alias to the target symbol that enables the symbol to
   6880 be referenced with weak-symbol semantics, but without actually making it weak.
   6881 If direct references or definitions of the symbol are present, then the symbol
   6882 will not be weak, but if all references to it are through weak references, the
   6883 symbol will be marked as weak in the symbol table.
   6884 
   6885 The effect is equivalent to moving all references to the alias to a separate
   6886 assembly source file, renaming the alias to the symbol in it, declaring the
   6887 symbol as weak there, and running a reloadable link to merge the object files
   6888 resulting from the assembly of the new source file and the old source file that
   6889 had the references to the alias removed.
   6890 
   6891 The alias itself never makes to the symbol table, and is entirely handled
   6892 within the assembler.
   6893 
   6894 @node Word
   6895 @section @code{.word @var{expressions}}
   6896 
   6897 @cindex @code{word} directive
   6898 This directive expects zero or more @var{expressions}, of any section,
   6899 separated by commas.
   6900 @ifclear GENERIC
   6901 @ifset W32
   6902 For each expression, @command{@value{AS}} emits a 32-bit number.
   6903 @end ifset
   6904 @ifset W16
   6905 For each expression, @command{@value{AS}} emits a 16-bit number.
   6906 @end ifset
   6907 @end ifclear
   6908 @ifset GENERIC
   6909 
   6910 The size of the number emitted, and its byte order,
   6911 depend on what target computer the assembly is for.
   6912 @end ifset
   6913 
   6914 @c on amd29k, i960, sparc the "special treatment to support compilers" doesn't
   6915 @c happen---32-bit addressability, period; no long/short jumps.
   6916 @ifset DIFF-TBL-KLUGE
   6917 @cindex difference tables altered
   6918 @cindex altered difference tables
   6919 @quotation
   6920 @emph{Warning: Special Treatment to support Compilers}
   6921 @end quotation
   6922 
   6923 @ifset GENERIC
   6924 Machines with a 32-bit address space, but that do less than 32-bit
   6925 addressing, require the following special treatment.  If the machine of
   6926 interest to you does 32-bit addressing (or doesn't require it;
   6927 @pxref{Machine Dependencies}), you can ignore this issue.
   6928 
   6929 @end ifset
   6930 In order to assemble compiler output into something that works,
   6931 @command{@value{AS}} occasionally does strange things to @samp{.word} directives.
   6932 Directives of the form @samp{.word sym1-sym2} are often emitted by
   6933 compilers as part of jump tables.  Therefore, when @command{@value{AS}} assembles a
   6934 directive of the form @samp{.word sym1-sym2}, and the difference between
   6935 @code{sym1} and @code{sym2} does not fit in 16 bits, @command{@value{AS}}
   6936 creates a @dfn{secondary jump table}, immediately before the next label.
   6937 This secondary jump table is preceded by a short-jump to the
   6938 first byte after the secondary table.  This short-jump prevents the flow
   6939 of control from accidentally falling into the new table.  Inside the
   6940 table is a long-jump to @code{sym2}.  The original @samp{.word}
   6941 contains @code{sym1} minus the address of the long-jump to
   6942 @code{sym2}.
   6943 
   6944 If there were several occurrences of @samp{.word sym1-sym2} before the
   6945 secondary jump table, all of them are adjusted.  If there was a
   6946 @samp{.word sym3-sym4}, that also did not fit in sixteen bits, a
   6947 long-jump to @code{sym4} is included in the secondary jump table,
   6948 and the @code{.word} directives are adjusted to contain @code{sym3}
   6949 minus the address of the long-jump to @code{sym4}; and so on, for as many
   6950 entries in the original jump table as necessary.
   6951 
   6952 @ifset INTERNALS
   6953 @emph{This feature may be disabled by compiling @command{@value{AS}} with the
   6954 @samp{-DWORKING_DOT_WORD} option.} This feature is likely to confuse
   6955 assembly language programmers.
   6956 @end ifset
   6957 @end ifset
   6958 @c end     DIFF-TBL-KLUGE
   6959 
   6960 @node Deprecated
   6961 @section Deprecated Directives
   6962 
   6963 @cindex deprecated directives
   6964 @cindex obsolescent directives
   6965 One day these directives won't work.
   6966 They are included for compatibility with older assemblers.
   6967 @table @t
   6968 @item .abort
   6969 @item .line
   6970 @end table
   6971 
   6972 @ifset ELF
   6973 @node Object Attributes
   6974 @chapter Object Attributes
   6975 @cindex object attributes
   6976 
   6977 @command{@value{AS}} assembles source files written for a specific architecture
   6978 into object files for that architecture.  But not all object files are alike.
   6979 Many architectures support incompatible variations.  For instance, floating
   6980 point arguments might be passed in floating point registers if the object file
   6981 requires hardware floating point support---or floating point arguments might be
   6982 passed in integer registers if the object file supports processors with no
   6983 hardware floating point unit.  Or, if two objects are built for different
   6984 generations of the same architecture, the combination may require the
   6985 newer generation at run-time.
   6986 
   6987 This information is useful during and after linking.  At link time,
   6988 @command{@value{LD}} can warn about incompatible object files.  After link
   6989 time, tools like @command{gdb} can use it to process the linked file
   6990 correctly.
   6991 
   6992 Compatibility information is recorded as a series of object attributes.  Each
   6993 attribute has a @dfn{vendor}, @dfn{tag}, and @dfn{value}.  The vendor is a
   6994 string, and indicates who sets the meaning of the tag.  The tag is an integer,
   6995 and indicates what property the attribute describes.  The value may be a string
   6996 or an integer, and indicates how the property affects this object.  Missing
   6997 attributes are the same as attributes with a zero value or empty string value.
   6998 
   6999 Object attributes were developed as part of the ABI for the ARM Architecture.
   7000 The file format is documented in @cite{ELF for the ARM Architecture}.
   7001 
   7002 @menu
   7003 * GNU Object Attributes::               @sc{gnu} Object Attributes
   7004 * Defining New Object Attributes::      Defining New Object Attributes
   7005 @end menu
   7006 
   7007 @node GNU Object Attributes
   7008 @section @sc{gnu} Object Attributes
   7009 
   7010 The @code{.gnu_attribute} directive records an object attribute
   7011 with vendor @samp{gnu}.
   7012 
   7013 Except for @samp{Tag_compatibility}, which has both an integer and a string for
   7014 its value, @sc{gnu} attributes have a string value if the tag number is odd and
   7015 an integer value if the tag number is even.  The second bit (@code{@var{tag} &
   7016 2} is set for architecture-independent attributes and clear for
   7017 architecture-dependent ones.
   7018 
   7019 @subsection Common @sc{gnu} attributes
   7020 
   7021 These attributes are valid on all architectures.
   7022 
   7023 @table @r
   7024 @item Tag_compatibility (32)
   7025 The compatibility attribute takes an integer flag value and a vendor name.  If
   7026 the flag value is 0, the file is compatible with other toolchains.  If it is 1,
   7027 then the file is only compatible with the named toolchain.  If it is greater
   7028 than 1, the file can only be processed by other toolchains under some private
   7029 arrangement indicated by the flag value and the vendor name.
   7030 @end table
   7031 
   7032 @subsection MIPS Attributes
   7033 
   7034 @table @r
   7035 @item Tag_GNU_MIPS_ABI_FP (4)
   7036 The floating-point ABI used by this object file.  The value will be:
   7037 
   7038 @itemize @bullet
   7039 @item
   7040 0 for files not affected by the floating-point ABI.
   7041 @item
   7042 1 for files using the hardware floating-point ABI with a standard
   7043 double-precision FPU.
   7044 @item
   7045 2 for files using the hardware floating-point ABI with a single-precision FPU.
   7046 @item
   7047 3 for files using the software floating-point ABI.
   7048 @item
   7049 4 for files using the deprecated hardware floating-point ABI which used 64-bit
   7050 floating-point registers, 32-bit general-purpose registers and increased the
   7051 number of callee-saved floating-point registers.
   7052 @item
   7053 5 for files using the hardware floating-point ABI with a double-precision FPU
   7054 with either 32-bit or 64-bit floating-point registers and 32-bit
   7055 general-purpose registers.
   7056 @item
   7057 6 for files using the hardware floating-point ABI with 64-bit floating-point
   7058 registers and 32-bit general-purpose registers.
   7059 @item
   7060 7 for files using the hardware floating-point ABI with 64-bit floating-point
   7061 registers, 32-bit general-purpose registers and a rule that forbids the
   7062 direct use of odd-numbered single-precision floating-point registers.
   7063 @end itemize
   7064 @end table
   7065 
   7066 @subsection PowerPC Attributes
   7067 
   7068 @table @r
   7069 @item Tag_GNU_Power_ABI_FP (4)
   7070 The floating-point ABI used by this object file.  The value will be:
   7071 
   7072 @itemize @bullet
   7073 @item
   7074 0 for files not affected by the floating-point ABI.
   7075 @item
   7076 1 for files using double-precision hardware floating-point ABI.
   7077 @item
   7078 2 for files using the software floating-point ABI.
   7079 @item
   7080 3 for files using single-precision hardware floating-point ABI.
   7081 @end itemize
   7082 
   7083 @item Tag_GNU_Power_ABI_Vector (8)
   7084 The vector ABI used by this object file.  The value will be:
   7085 
   7086 @itemize @bullet
   7087 @item
   7088 0 for files not affected by the vector ABI.
   7089 @item
   7090 1 for files using general purpose registers to pass vectors.
   7091 @item
   7092 2 for files using AltiVec registers to pass vectors.
   7093 @item
   7094 3 for files using SPE registers to pass vectors.
   7095 @end itemize
   7096 @end table
   7097 
   7098 @node Defining New Object Attributes
   7099 @section Defining New Object Attributes
   7100 
   7101 If you want to define a new @sc{gnu} object attribute, here are the places you
   7102 will need to modify.  New attributes should be discussed on the @samp{binutils}
   7103 mailing list.
   7104 
   7105 @itemize @bullet
   7106 @item
   7107 This manual, which is the official register of attributes.
   7108 @item
   7109 The header for your architecture @file{include/elf}, to define the tag.
   7110 @item
   7111 The @file{bfd} support file for your architecture, to merge the attribute
   7112 and issue any appropriate link warnings.
   7113 @item
   7114 Test cases in @file{ld/testsuite} for merging and link warnings.
   7115 @item
   7116 @file{binutils/readelf.c} to display your attribute.
   7117 @item
   7118 GCC, if you want the compiler to mark the attribute automatically.
   7119 @end itemize
   7120 
   7121 @end ifset
   7122 
   7123 @ifset GENERIC
   7124 @node Machine Dependencies
   7125 @chapter Machine Dependent Features
   7126 
   7127 @cindex machine dependencies
   7128 The machine instruction sets are (almost by definition) different on
   7129 each machine where @command{@value{AS}} runs.  Floating point representations
   7130 vary as well, and @command{@value{AS}} often supports a few additional
   7131 directives or command-line options for compatibility with other
   7132 assemblers on a particular platform.  Finally, some versions of
   7133 @command{@value{AS}} support special pseudo-instructions for branch
   7134 optimization.
   7135 
   7136 This chapter discusses most of these differences, though it does not
   7137 include details on any machine's instruction set.  For details on that
   7138 subject, see the hardware manufacturer's manual.
   7139 
   7140 @menu
   7141 @ifset AARCH64
   7142 * AArch64-Dependent::		AArch64 Dependent Features
   7143 @end ifset
   7144 @ifset ALPHA
   7145 * Alpha-Dependent::		Alpha Dependent Features
   7146 @end ifset
   7147 @ifset ARC
   7148 * ARC-Dependent::               ARC Dependent Features
   7149 @end ifset
   7150 @ifset ARM
   7151 * ARM-Dependent::               ARM Dependent Features
   7152 @end ifset
   7153 @ifset AVR
   7154 * AVR-Dependent::               AVR Dependent Features
   7155 @end ifset
   7156 @ifset Blackfin
   7157 * Blackfin-Dependent::		Blackfin Dependent Features
   7158 @end ifset
   7159 @ifset CR16
   7160 * CR16-Dependent::              CR16 Dependent Features
   7161 @end ifset
   7162 @ifset CRIS
   7163 * CRIS-Dependent::              CRIS Dependent Features
   7164 @end ifset
   7165 @ifset D10V
   7166 * D10V-Dependent::              D10V Dependent Features
   7167 @end ifset
   7168 @ifset D30V
   7169 * D30V-Dependent::              D30V Dependent Features
   7170 @end ifset
   7171 @ifset EPIPHANY
   7172 * Epiphany-Dependent::          EPIPHANY Dependent Features
   7173 @end ifset
   7174 @ifset H8/300
   7175 * H8/300-Dependent::            Renesas H8/300 Dependent Features
   7176 @end ifset
   7177 @ifset HPPA
   7178 * HPPA-Dependent::              HPPA Dependent Features
   7179 @end ifset
   7180 @ifset I370
   7181 * ESA/390-Dependent::           IBM ESA/390 Dependent Features
   7182 @end ifset
   7183 @ifset I80386
   7184 * i386-Dependent::              Intel 80386 and AMD x86-64 Dependent Features
   7185 @end ifset
   7186 @ifset I860
   7187 * i860-Dependent::              Intel 80860 Dependent Features
   7188 @end ifset
   7189 @ifset I960
   7190 * i960-Dependent::              Intel 80960 Dependent Features
   7191 @end ifset
   7192 @ifset IA64
   7193 * IA-64-Dependent::             Intel IA-64 Dependent Features
   7194 @end ifset
   7195 @ifset IP2K
   7196 * IP2K-Dependent::              IP2K Dependent Features
   7197 @end ifset
   7198 @ifset LM32
   7199 * LM32-Dependent::              LM32 Dependent Features
   7200 @end ifset
   7201 @ifset M32C
   7202 * M32C-Dependent::              M32C Dependent Features
   7203 @end ifset
   7204 @ifset M32R
   7205 * M32R-Dependent::              M32R Dependent Features
   7206 @end ifset
   7207 @ifset M680X0
   7208 * M68K-Dependent::              M680x0 Dependent Features
   7209 @end ifset
   7210 @ifset M68HC11
   7211 * M68HC11-Dependent::           M68HC11 and 68HC12 Dependent Features
   7212 @end ifset
   7213 @ifset METAG
   7214 * Meta-Dependent ::             Meta Dependent Features
   7215 @end ifset
   7216 @ifset MICROBLAZE
   7217 * MicroBlaze-Dependent::	MICROBLAZE Dependent Features
   7218 @end ifset
   7219 @ifset MIPS
   7220 * MIPS-Dependent::              MIPS Dependent Features
   7221 @end ifset
   7222 @ifset MMIX
   7223 * MMIX-Dependent::              MMIX Dependent Features
   7224 @end ifset
   7225 @ifset MSP430
   7226 * MSP430-Dependent::		MSP430 Dependent Features
   7227 @end ifset
   7228 @ifset NDS32
   7229 * NDS32-Dependent::             Andes NDS32 Dependent Features
   7230 @end ifset
   7231 @ifset NIOSII
   7232 * NiosII-Dependent::            Altera Nios II Dependent Features
   7233 @end ifset
   7234 @ifset NS32K
   7235 * NS32K-Dependent::		NS32K Dependent Features
   7236 @end ifset
   7237 @ifset SH
   7238 * SH-Dependent::                Renesas / SuperH SH Dependent Features
   7239 * SH64-Dependent::              SuperH SH64 Dependent Features
   7240 @end ifset
   7241 @ifset PDP11
   7242 * PDP-11-Dependent::            PDP-11 Dependent Features
   7243 @end ifset
   7244 @ifset PJ
   7245 * PJ-Dependent::                picoJava Dependent Features
   7246 @end ifset
   7247 @ifset PPC
   7248 * PPC-Dependent::               PowerPC Dependent Features
   7249 @end ifset
   7250 @ifset RL78
   7251 * RL78-Dependent::              RL78 Dependent Features
   7252 @end ifset
   7253 @ifset RX
   7254 * RX-Dependent::                RX Dependent Features
   7255 @end ifset
   7256 @ifset S390
   7257 * S/390-Dependent::             IBM S/390 Dependent Features
   7258 @end ifset
   7259 @ifset SCORE
   7260 * SCORE-Dependent::             SCORE Dependent Features
   7261 @end ifset
   7262 @ifset SPARC
   7263 * Sparc-Dependent::             SPARC Dependent Features
   7264 @end ifset
   7265 @ifset TIC54X
   7266 * TIC54X-Dependent::            TI TMS320C54x Dependent Features
   7267 @end ifset
   7268 @ifset TIC6X
   7269 * TIC6X-Dependent ::            TI TMS320C6x Dependent Features
   7270 @end ifset
   7271 @ifset TILEGX
   7272 * TILE-Gx-Dependent ::          Tilera TILE-Gx Dependent Features
   7273 @end ifset
   7274 @ifset TILEPRO
   7275 * TILEPro-Dependent ::          Tilera TILEPro Dependent Features
   7276 @end ifset
   7277 @ifset V850
   7278 * V850-Dependent::              V850 Dependent Features
   7279 @end ifset
   7280 @ifset XGATE
   7281 * XGATE-Dependent::             XGATE Features
   7282 @end ifset
   7283 @ifset XSTORMY16
   7284 * XSTORMY16-Dependent::         XStormy16 Dependent Features
   7285 @end ifset
   7286 @ifset XTENSA
   7287 * Xtensa-Dependent::            Xtensa Dependent Features
   7288 @end ifset
   7289 @ifset Z80
   7290 * Z80-Dependent::               Z80 Dependent Features
   7291 @end ifset
   7292 @ifset Z8000
   7293 * Z8000-Dependent::             Z8000 Dependent Features
   7294 @end ifset
   7295 @ifset VAX
   7296 * Vax-Dependent::               VAX Dependent Features
   7297 @end ifset
   7298 @end menu
   7299 
   7300 @lowersections
   7301 @end ifset
   7302 
   7303 @c The following major nodes are *sections* in the GENERIC version, *chapters*
   7304 @c in single-cpu versions.  This is mainly achieved by @lowersections.  There is a
   7305 @c peculiarity: to preserve cross-references, there must be a node called
   7306 @c "Machine Dependencies".  Hence the conditional nodenames in each
   7307 @c major node below.  Node defaulting in makeinfo requires adjacency of
   7308 @c node and sectioning commands; hence the repetition of @chapter BLAH
   7309 @c in both conditional blocks.
   7310 
   7311 @ifset AARCH64
   7312 @include c-aarch64.texi
   7313 @end ifset
   7314 
   7315 @ifset ALPHA
   7316 @include c-alpha.texi
   7317 @end ifset
   7318 
   7319 @ifset ARC
   7320 @include c-arc.texi
   7321 @end ifset
   7322 
   7323 @ifset ARM
   7324 @include c-arm.texi
   7325 @end ifset
   7326 
   7327 @ifset AVR
   7328 @include c-avr.texi
   7329 @end ifset
   7330 
   7331 @ifset Blackfin
   7332 @include c-bfin.texi
   7333 @end ifset
   7334 
   7335 @ifset CR16
   7336 @include c-cr16.texi
   7337 @end ifset
   7338 
   7339 @ifset CRIS
   7340 @include c-cris.texi
   7341 @end ifset
   7342 
   7343 @ifset Renesas-all
   7344 @ifclear GENERIC
   7345 @node Machine Dependencies
   7346 @chapter Machine Dependent Features
   7347 
   7348 The machine instruction sets are different on each Renesas chip family,
   7349 and there are also some syntax differences among the families.  This
   7350 chapter describes the specific @command{@value{AS}} features for each
   7351 family.
   7352 
   7353 @menu
   7354 * H8/300-Dependent::            Renesas H8/300 Dependent Features
   7355 * SH-Dependent::                Renesas SH Dependent Features
   7356 @end menu
   7357 @lowersections
   7358 @end ifclear
   7359 @end ifset
   7360 
   7361 @ifset D10V
   7362 @include c-d10v.texi
   7363 @end ifset
   7364 
   7365 @ifset D30V
   7366 @include c-d30v.texi
   7367 @end ifset
   7368 
   7369 @ifset EPIPHANY
   7370 @include c-epiphany.texi
   7371 @end ifset
   7372 
   7373 @ifset H8/300
   7374 @include c-h8300.texi
   7375 @end ifset
   7376 
   7377 @ifset HPPA
   7378 @include c-hppa.texi
   7379 @end ifset
   7380 
   7381 @ifset I370
   7382 @include c-i370.texi
   7383 @end ifset
   7384 
   7385 @ifset I80386
   7386 @include c-i386.texi
   7387 @end ifset
   7388 
   7389 @ifset I860
   7390 @include c-i860.texi
   7391 @end ifset
   7392 
   7393 @ifset I960
   7394 @include c-i960.texi
   7395 @end ifset
   7396 
   7397 @ifset IA64
   7398 @include c-ia64.texi
   7399 @end ifset
   7400 
   7401 @ifset IP2K
   7402 @include c-ip2k.texi
   7403 @end ifset
   7404 
   7405 @ifset LM32
   7406 @include c-lm32.texi
   7407 @end ifset
   7408 
   7409 @ifset M32C
   7410 @include c-m32c.texi
   7411 @end ifset
   7412 
   7413 @ifset M32R
   7414 @include c-m32r.texi
   7415 @end ifset
   7416 
   7417 @ifset M680X0
   7418 @include c-m68k.texi
   7419 @end ifset
   7420 
   7421 @ifset M68HC11
   7422 @include c-m68hc11.texi
   7423 @end ifset
   7424 
   7425 @ifset METAG
   7426 @include c-metag.texi
   7427 @end ifset
   7428 
   7429 @ifset MICROBLAZE
   7430 @include c-microblaze.texi
   7431 @end ifset
   7432 
   7433 @ifset MIPS
   7434 @include c-mips.texi
   7435 @end ifset
   7436 
   7437 @ifset MMIX
   7438 @include c-mmix.texi
   7439 @end ifset
   7440 
   7441 @ifset MSP430
   7442 @include c-msp430.texi
   7443 @end ifset
   7444 
   7445 @ifset NDS32
   7446 @include c-nds32.texi
   7447 @end ifset
   7448 
   7449 @ifset NIOSII
   7450 @include c-nios2.texi
   7451 @end ifset
   7452 
   7453 @ifset NS32K
   7454 @include c-ns32k.texi
   7455 @end ifset
   7456 
   7457 @ifset PDP11
   7458 @include c-pdp11.texi
   7459 @end ifset
   7460 
   7461 @ifset PJ
   7462 @include c-pj.texi
   7463 @end ifset
   7464 
   7465 @ifset PPC
   7466 @include c-ppc.texi
   7467 @end ifset
   7468 
   7469 @ifset RL78
   7470 @include c-rl78.texi
   7471 @end ifset
   7472 
   7473 @ifset RX
   7474 @include c-rx.texi
   7475 @end ifset
   7476 
   7477 @ifset S390
   7478 @include c-s390.texi
   7479 @end ifset
   7480 
   7481 @ifset SCORE
   7482 @include c-score.texi
   7483 @end ifset
   7484 
   7485 @ifset SH
   7486 @include c-sh.texi
   7487 @include c-sh64.texi
   7488 @end ifset
   7489 
   7490 @ifset SPARC
   7491 @include c-sparc.texi
   7492 @end ifset
   7493 
   7494 @ifset TIC54X
   7495 @include c-tic54x.texi
   7496 @end ifset
   7497 
   7498 @ifset TIC6X
   7499 @include c-tic6x.texi
   7500 @end ifset
   7501 
   7502 @ifset TILEGX
   7503 @include c-tilegx.texi
   7504 @end ifset
   7505 
   7506 @ifset TILEPRO
   7507 @include c-tilepro.texi
   7508 @end ifset
   7509 
   7510 @ifset Z80
   7511 @include c-z80.texi
   7512 @end ifset
   7513 
   7514 @ifset Z8000
   7515 @include c-z8k.texi
   7516 @end ifset
   7517 
   7518 @ifset VAX
   7519 @include c-vax.texi
   7520 @end ifset
   7521 
   7522 @ifset V850
   7523 @include c-v850.texi
   7524 @end ifset
   7525 
   7526 @ifset XGATE
   7527 @include c-xgate.texi
   7528 @end ifset
   7529 
   7530 @ifset XSTORMY16
   7531 @include c-xstormy16.texi
   7532 @end ifset
   7533 
   7534 @ifset XTENSA
   7535 @include c-xtensa.texi
   7536 @end ifset
   7537 
   7538 @ifset GENERIC
   7539 @c reverse effect of @down at top of generic Machine-Dep chapter
   7540 @raisesections
   7541 @end ifset
   7542 
   7543 @node Reporting Bugs
   7544 @chapter Reporting Bugs
   7545 @cindex bugs in assembler
   7546 @cindex reporting bugs in assembler
   7547 
   7548 Your bug reports play an essential role in making @command{@value{AS}} reliable.
   7549 
   7550 Reporting a bug may help you by bringing a solution to your problem, or it may
   7551 not.  But in any case the principal function of a bug report is to help the
   7552 entire community by making the next version of @command{@value{AS}} work better.
   7553 Bug reports are your contribution to the maintenance of @command{@value{AS}}.
   7554 
   7555 In order for a bug report to serve its purpose, you must include the
   7556 information that enables us to fix the bug.
   7557 
   7558 @menu
   7559 * Bug Criteria::                Have you found a bug?
   7560 * Bug Reporting::               How to report bugs
   7561 @end menu
   7562 
   7563 @node Bug Criteria
   7564 @section Have You Found a Bug?
   7565 @cindex bug criteria
   7566 
   7567 If you are not sure whether you have found a bug, here are some guidelines:
   7568 
   7569 @itemize @bullet
   7570 @cindex fatal signal
   7571 @cindex assembler crash
   7572 @cindex crash of assembler
   7573 @item
   7574 If the assembler gets a fatal signal, for any input whatever, that is a
   7575 @command{@value{AS}} bug.  Reliable assemblers never crash.
   7576 
   7577 @cindex error on valid input
   7578 @item
   7579 If @command{@value{AS}} produces an error message for valid input, that is a bug.
   7580 
   7581 @cindex invalid input
   7582 @item
   7583 If @command{@value{AS}} does not produce an error message for invalid input, that
   7584 is a bug.  However, you should note that your idea of ``invalid input'' might
   7585 be our idea of ``an extension'' or ``support for traditional practice''.
   7586 
   7587 @item
   7588 If you are an experienced user of assemblers, your suggestions for improvement
   7589 of @command{@value{AS}} are welcome in any case.
   7590 @end itemize
   7591 
   7592 @node Bug Reporting
   7593 @section How to Report Bugs
   7594 @cindex bug reports
   7595 @cindex assembler bugs, reporting
   7596 
   7597 A number of companies and individuals offer support for @sc{gnu} products.  If
   7598 you obtained @command{@value{AS}} from a support organization, we recommend you
   7599 contact that organization first.
   7600 
   7601 You can find contact information for many support companies and
   7602 individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
   7603 distribution.
   7604 
   7605 @ifset BUGURL
   7606 In any event, we also recommend that you send bug reports for @command{@value{AS}}
   7607 to @value{BUGURL}.
   7608 @end ifset
   7609 
   7610 The fundamental principle of reporting bugs usefully is this:
   7611 @strong{report all the facts}.  If you are not sure whether to state a
   7612 fact or leave it out, state it!
   7613 
   7614 Often people omit facts because they think they know what causes the problem
   7615 and assume that some details do not matter.  Thus, you might assume that the
   7616 name of a symbol you use in an example does not matter.  Well, probably it does
   7617 not, but one cannot be sure.  Perhaps the bug is a stray memory reference which
   7618 happens to fetch from the location where that name is stored in memory;
   7619 perhaps, if the name were different, the contents of that location would fool
   7620 the assembler into doing the right thing despite the bug.  Play it safe and
   7621 give a specific, complete example.  That is the easiest thing for you to do,
   7622 and the most helpful.
   7623 
   7624 Keep in mind that the purpose of a bug report is to enable us to fix the bug if
   7625 it is new to us.  Therefore, always write your bug reports on the assumption
   7626 that the bug has not been reported previously.
   7627 
   7628 Sometimes people give a few sketchy facts and ask, ``Does this ring a
   7629 bell?''  This cannot help us fix a bug, so it is basically useless.  We
   7630 respond by asking for enough details to enable us to investigate.
   7631 You might as well expedite matters by sending them to begin with.
   7632 
   7633 To enable us to fix the bug, you should include all these things:
   7634 
   7635 @itemize @bullet
   7636 @item
   7637 The version of @command{@value{AS}}.  @command{@value{AS}} announces it if you start
   7638 it with the @samp{--version} argument.
   7639 
   7640 Without this, we will not know whether there is any point in looking for
   7641 the bug in the current version of @command{@value{AS}}.
   7642 
   7643 @item
   7644 Any patches you may have applied to the @command{@value{AS}} source.
   7645 
   7646 @item
   7647 The type of machine you are using, and the operating system name and
   7648 version number.
   7649 
   7650 @item
   7651 What compiler (and its version) was used to compile @command{@value{AS}}---e.g.
   7652 ``@code{gcc-2.7}''.
   7653 
   7654 @item
   7655 The command arguments you gave the assembler to assemble your example and
   7656 observe the bug.  To guarantee you will not omit something important, list them
   7657 all.  A copy of the Makefile (or the output from make) is sufficient.
   7658 
   7659 If we were to try to guess the arguments, we would probably guess wrong
   7660 and then we might not encounter the bug.
   7661 
   7662 @item
   7663 A complete input file that will reproduce the bug.  If the bug is observed when
   7664 the assembler is invoked via a compiler, send the assembler source, not the
   7665 high level language source.  Most compilers will produce the assembler source
   7666 when run with the @samp{-S} option.  If you are using @code{@value{GCC}}, use
   7667 the options @samp{-v --save-temps}; this will save the assembler source in a
   7668 file with an extension of @file{.s}, and also show you exactly how
   7669 @command{@value{AS}} is being run.
   7670 
   7671 @item
   7672 A description of what behavior you observe that you believe is
   7673 incorrect.  For example, ``It gets a fatal signal.''
   7674 
   7675 Of course, if the bug is that @command{@value{AS}} gets a fatal signal, then we
   7676 will certainly notice it.  But if the bug is incorrect output, we might not
   7677 notice unless it is glaringly wrong.  You might as well not give us a chance to
   7678 make a mistake.
   7679 
   7680 Even if the problem you experience is a fatal signal, you should still say so
   7681 explicitly.  Suppose something strange is going on, such as, your copy of
   7682 @command{@value{AS}} is out of sync, or you have encountered a bug in the C
   7683 library on your system.  (This has happened!)  Your copy might crash and ours
   7684 would not.  If you told us to expect a crash, then when ours fails to crash, we
   7685 would know that the bug was not happening for us.  If you had not told us to
   7686 expect a crash, then we would not be able to draw any conclusion from our
   7687 observations.
   7688 
   7689 @item
   7690 If you wish to suggest changes to the @command{@value{AS}} source, send us context
   7691 diffs, as generated by @code{diff} with the @samp{-u}, @samp{-c}, or @samp{-p}
   7692 option.  Always send diffs from the old file to the new file.  If you even
   7693 discuss something in the @command{@value{AS}} source, refer to it by context, not
   7694 by line number.
   7695 
   7696 The line numbers in our development sources will not match those in your
   7697 sources.  Your line numbers would convey no useful information to us.
   7698 @end itemize
   7699 
   7700 Here are some things that are not necessary:
   7701 
   7702 @itemize @bullet
   7703 @item
   7704 A description of the envelope of the bug.
   7705 
   7706 Often people who encounter a bug spend a lot of time investigating
   7707 which changes to the input file will make the bug go away and which
   7708 changes will not affect it.
   7709 
   7710 This is often time consuming and not very useful, because the way we
   7711 will find the bug is by running a single example under the debugger
   7712 with breakpoints, not by pure deduction from a series of examples.
   7713 We recommend that you save your time for something else.
   7714 
   7715 Of course, if you can find a simpler example to report @emph{instead}
   7716 of the original one, that is a convenience for us.  Errors in the
   7717 output will be easier to spot, running under the debugger will take
   7718 less time, and so on.
   7719 
   7720 However, simplification is not vital; if you do not want to do this,
   7721 report the bug anyway and send us the entire test case you used.
   7722 
   7723 @item
   7724 A patch for the bug.
   7725 
   7726 A patch for the bug does help us if it is a good one.  But do not omit
   7727 the necessary information, such as the test case, on the assumption that
   7728 a patch is all we need.  We might see problems with your patch and decide
   7729 to fix the problem another way, or we might not understand it at all.
   7730 
   7731 Sometimes with a program as complicated as @command{@value{AS}} it is very hard to
   7732 construct an example that will make the program follow a certain path through
   7733 the code.  If you do not send us the example, we will not be able to construct
   7734 one, so we will not be able to verify that the bug is fixed.
   7735 
   7736 And if we cannot understand what bug you are trying to fix, or why your
   7737 patch should be an improvement, we will not install it.  A test case will
   7738 help us to understand.
   7739 
   7740 @item
   7741 A guess about what the bug is or what it depends on.
   7742 
   7743 Such guesses are usually wrong.  Even we cannot guess right about such
   7744 things without first using the debugger to find the facts.
   7745 @end itemize
   7746 
   7747 @node Acknowledgements
   7748 @chapter Acknowledgements
   7749 
   7750 If you have contributed to GAS and your name isn't listed here,
   7751 it is not meant as a slight.  We just don't know about it.  Send mail to the
   7752 maintainer, and we'll correct the situation.  Currently
   7753 @c (October 2012),
   7754 the maintainer is Nick Clifton (email address @code{nickc@@redhat.com}).
   7755 
   7756 Dean Elsner wrote the original @sc{gnu} assembler for the VAX.@footnote{Any
   7757 more details?}
   7758 
   7759 Jay Fenlason maintained GAS for a while, adding support for GDB-specific debug
   7760 information and the 68k series machines, most of the preprocessing pass, and
   7761 extensive changes in @file{messages.c}, @file{input-file.c}, @file{write.c}.
   7762 
   7763 K. Richard Pixley maintained GAS for a while, adding various enhancements and
   7764 many bug fixes, including merging support for several processors, breaking GAS
   7765 up to handle multiple object file format back ends (including heavy rewrite,
   7766 testing, an integration of the coff and b.out back ends), adding configuration
   7767 including heavy testing and verification of cross assemblers and file splits
   7768 and renaming, converted GAS to strictly ANSI C including full prototypes, added
   7769 support for m680[34]0 and cpu32, did considerable work on i960 including a COFF
   7770 port (including considerable amounts of reverse engineering), a SPARC opcode
   7771 file rewrite, DECstation, rs6000, and hp300hpux host ports, updated ``know''
   7772 assertions and made them work, much other reorganization, cleanup, and lint.
   7773 
   7774 Ken Raeburn wrote the high-level BFD interface code to replace most of the code
   7775 in format-specific I/O modules.
   7776 
   7777 The original VMS support was contributed by David L. Kashtan.  Eric Youngdale
   7778 has done much work with it since.
   7779 
   7780 The Intel 80386 machine description was written by Eliot Dresselhaus.
   7781 
   7782 Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
   7783 
   7784 The Motorola 88k machine description was contributed by Devon Bowen of Buffalo
   7785 University and Torbjorn Granlund of the Swedish Institute of Computer Science.
   7786 
   7787 Keith Knowles at the Open Software Foundation wrote the original MIPS back end
   7788 (@file{tc-mips.c}, @file{tc-mips.h}), and contributed Rose format support
   7789 (which hasn't been merged in yet).  Ralph Campbell worked with the MIPS code to
   7790 support a.out format.
   7791 
   7792 Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k,
   7793 tc-h8300), and IEEE 695 object file format (obj-ieee), was written by
   7794 Steve Chamberlain of Cygnus Support.  Steve also modified the COFF back end to
   7795 use BFD for some low-level operations, for use with the H8/300 and AMD 29k
   7796 targets.
   7797 
   7798 John Gilmore built the AMD 29000 support, added @code{.include} support, and
   7799 simplified the configuration of which versions accept which directives.  He
   7800 updated the 68k machine description so that Motorola's opcodes always produced
   7801 fixed-size instructions (e.g., @code{jsr}), while synthetic instructions
   7802 remained shrinkable (@code{jbsr}).  John fixed many bugs, including true tested
   7803 cross-compilation support, and one bug in relaxation that took a week and
   7804 required the proverbial one-bit fix.
   7805 
   7806 Ian Lance Taylor of Cygnus Support merged the Motorola and MIT syntax for the
   7807 68k, completed support for some COFF targets (68k, i386 SVR3, and SCO Unix),
   7808 added support for MIPS ECOFF and ELF targets, wrote the initial RS/6000 and
   7809 PowerPC assembler, and made a few other minor patches.
   7810 
   7811 Steve Chamberlain made GAS able to generate listings.
   7812 
   7813 Hewlett-Packard contributed support for the HP9000/300.
   7814 
   7815 Jeff Law wrote GAS and BFD support for the native HPPA object format (SOM)
   7816 along with a fairly extensive HPPA testsuite (for both SOM and ELF object
   7817 formats).  This work was supported by both the Center for Software Science at
   7818 the University of Utah and Cygnus Support.
   7819 
   7820 Support for ELF format files has been worked on by Mark Eichin of Cygnus
   7821 Support (original, incomplete implementation for SPARC), Pete Hoogenboom and
   7822 Jeff Law at the University of Utah (HPPA mainly), Michael Meissner of the Open
   7823 Software Foundation (i386 mainly), and Ken Raeburn of Cygnus Support (sparc,
   7824 and some initial 64-bit support).
   7825 
   7826 Linas Vepstas added GAS support for the ESA/390 ``IBM 370'' architecture.
   7827 
   7828 Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote GAS and BFD
   7829 support for openVMS/Alpha.
   7830 
   7831 Timothy Wall, Michael Hayes, and Greg Smart contributed to the various tic*
   7832 flavors.
   7833 
   7834 David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from Tensilica,
   7835 Inc.@: added support for Xtensa processors.
   7836 
   7837 Several engineers at Cygnus Support have also provided many small bug fixes and
   7838 configuration enhancements.
   7839 
   7840 Jon Beniston added support for the Lattice Mico32 architecture.
   7841 
   7842 Many others have contributed large or small bugfixes and enhancements.  If
   7843 you have contributed significant work and are not mentioned on this list, and
   7844 want to be, let us know.  Some of the history has been lost; we are not
   7845 intentionally leaving anyone out.
   7846 
   7847 @node GNU Free Documentation License
   7848 @appendix GNU Free Documentation License
   7849 @include fdl.texi
   7850 
   7851 @node AS Index
   7852 @unnumbered AS Index
   7853 
   7854 @printindex cp
   7855 
   7856 @bye
   7857 @c Local Variables:
   7858 @c fill-column: 79
   7859 @c End:
   7860