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