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