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