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