1@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2@c 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. 3@c This is part of the GCC manual. 4@c For copying conditions, see the file gcc.texi. 5 6@ignore 7@c man begin COPYRIGHT 8Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 91998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. 10 11Permission is granted to copy, distribute and/or modify this document 12under the terms of the GNU Free Documentation License, Version 1.2 or 13any later version published by the Free Software Foundation; with the 14Invariant Sections being ``GNU General Public License'' and ``Funding 15Free Software'', the Front-Cover texts being (a) (see below), and with 16the Back-Cover Texts being (b) (see below). A copy of the license is 17included in the gfdl(7) man page. 18 19(a) The FSF's Front-Cover Text is: 20 21 A GNU Manual 22 23(b) The FSF's Back-Cover Text is: 24 25 You have freedom to copy and modify this GNU Manual, like GNU 26 software. Copies published by the Free Software Foundation raise 27 funds for GNU development. 28@c man end 29@c Set file name and title for the man page. 30@setfilename gcc 31@settitle GNU project C and C++ compiler 32@c man begin SYNOPSIS 33gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}] 34 [@option{-g}] [@option{-pg}] [@option{-O}@var{level}] 35 [@option{-W}@var{warn}@dots{}] [@option{-pedantic}] 36 [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}] 37 [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}] 38 [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}] 39 [@option{-o} @var{outfile}] @var{infile}@dots{} 40 41Only the most useful options are listed here; see below for the 42remainder. @samp{g++} accepts mostly the same options as @samp{gcc}. 43@c man end 44@c man begin SEEALSO 45gpl(7), gfdl(7), fsf-funding(7), 46cpp(1), gcov(1), g77(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1) 47and the Info entries for @file{gcc}, @file{cpp}, @file{g77}, @file{as}, 48@file{ld}, @file{binutils} and @file{gdb}. 49@c man end 50@c man begin BUGS 51For instructions on reporting bugs, see 52@w{@uref{http://gcc.gnu.org/bugs.html}}. Use of the @command{gccbug} 53script to report bugs is recommended. 54@c man end 55@c man begin AUTHOR 56See the Info entry for @command{gcc}, or 57@w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}}, 58for contributors to GCC@. 59@c man end 60@end ignore 61 62@node Invoking GCC 63@chapter GCC Command Options 64@cindex GCC command options 65@cindex command options 66@cindex options, GCC command 67 68@c man begin DESCRIPTION 69When you invoke GCC, it normally does preprocessing, compilation, 70assembly and linking. The ``overall options'' allow you to stop this 71process at an intermediate stage. For example, the @option{-c} option 72says not to run the linker. Then the output consists of object files 73output by the assembler. 74 75Other options are passed on to one stage of processing. Some options 76control the preprocessor and others the compiler itself. Yet other 77options control the assembler and linker; most of these are not 78documented here, since you rarely need to use any of them. 79 80@cindex C compilation options 81Most of the command line options that you can use with GCC are useful 82for C programs; when an option is only useful with another language 83(usually C++), the explanation says so explicitly. If the description 84for a particular option does not mention a source language, you can use 85that option with all supported languages. 86 87@cindex C++ compilation options 88@xref{Invoking G++,,Compiling C++ Programs}, for a summary of special 89options for compiling C++ programs. 90 91@cindex grouping options 92@cindex options, grouping 93The @command{gcc} program accepts options and file names as operands. Many 94options have multi-letter names; therefore multiple single-letter options 95may @emph{not} be grouped: @option{-dr} is very different from @w{@samp{-d 96-r}}. 97 98@cindex order of options 99@cindex options, order 100You can mix options and other arguments. For the most part, the order 101you use doesn't matter. Order does matter when you use several options 102of the same kind; for example, if you specify @option{-L} more than once, 103the directories are searched in the order specified. 104 105Many options have long names starting with @samp{-f} or with 106@samp{-W}---for example, @option{-fforce-mem}, 107@option{-fstrength-reduce}, @option{-Wformat} and so on. Most of 108these have both positive and negative forms; the negative form of 109@option{-ffoo} would be @option{-fno-foo}. This manual documents 110only one of these two forms, whichever one is not the default. 111 112@c man end 113 114@xref{Option Index}, for an index to GCC's options. 115 116@menu 117* Option Summary:: Brief list of all options, without explanations. 118* Overall Options:: Controlling the kind of output: 119 an executable, object files, assembler files, 120 or preprocessed source. 121* Invoking G++:: Compiling C++ programs. 122* C Dialect Options:: Controlling the variant of C language compiled. 123* C++ Dialect Options:: Variations on C++. 124* Objective-C Dialect Options:: Variations on Objective-C. 125* Language Independent Options:: Controlling how diagnostics should be 126 formatted. 127* Warning Options:: How picky should the compiler be? 128* Debugging Options:: Symbol tables, measurements, and debugging dumps. 129* Optimize Options:: How much optimization? 130* Preprocessor Options:: Controlling header files and macro definitions. 131 Also, getting dependency information for Make. 132* Assembler Options:: Passing options to the assembler. 133* Link Options:: Specifying libraries and so on. 134* Directory Options:: Where to find header files and libraries. 135 Where to find the compiler executable files. 136* Spec Files:: How to pass switches to sub-processes. 137* Target Options:: Running a cross-compiler, or an old version of GCC. 138* Submodel Options:: Specifying minor hardware or convention variations, 139 such as 68010 vs 68020. 140* Code Gen Options:: Specifying conventions for function calls, data layout 141 and register usage. 142* Environment Variables:: Env vars that affect GCC. 143* Precompiled Headers:: Compiling a header once, and using it many times. 144* Running Protoize:: Automatically adding or removing function prototypes. 145@end menu 146 147@c man begin OPTIONS 148 149@node Option Summary 150@section Option Summary 151 152Here is a summary of all the options, grouped by type. Explanations are 153in the following sections. 154 155@table @emph 156@item Overall Options 157@xref{Overall Options,,Options Controlling the Kind of Output}. 158@gccoptlist{-c -S -E -o @var{file} -pipe -pass-exit-codes @gol 159-x @var{language} -v -### --help --target-help --version} 160 161@item C Language Options 162@xref{C Dialect Options,,Options Controlling C Dialect}. 163@gccoptlist{-ansi -std=@var{standard} -aux-info @var{filename} @gol 164-fno-asm -fno-builtin -fno-builtin-@var{function} @gol 165-fhosted -ffreestanding -fms-extensions @gol 166-trigraphs -no-integrated-cpp -traditional -traditional-cpp @gol 167-fallow-single-precision -fcond-mismatch @gol 168-fsigned-bitfields -fsigned-char @gol 169-funsigned-bitfields -funsigned-char @gol 170-fwritable-strings} 171 172@item C++ Language Options 173@xref{C++ Dialect Options,,Options Controlling C++ Dialect}. 174@gccoptlist{-fabi-version=@var{n} -fno-access-control -fcheck-new @gol 175-fconserve-space -fno-const-strings @gol 176-fno-elide-constructors @gol 177-fno-enforce-eh-specs @gol 178-ffor-scope -fno-for-scope -fno-gnu-keywords @gol 179-fno-implicit-templates @gol 180-fno-implicit-inline-templates @gol 181-fno-implement-inlines -fms-extensions @gol 182-fno-nonansi-builtins -fno-operator-names @gol 183-fno-optional-diags -fpermissive @gol 184-frepo -fno-rtti -fstats -ftemplate-depth-@var{n} @gol 185-fuse-cxa-atexit -fno-weak -nostdinc++ @gol 186-fno-default-inline -Wabi -Wctor-dtor-privacy @gol 187-Wnon-virtual-dtor -Wreorder @gol 188-Weffc++ -Wno-deprecated @gol 189-Wno-non-template-friend -Wold-style-cast @gol 190-Woverloaded-virtual -Wno-pmf-conversions @gol 191-Wsign-promo -Wsynth} 192 193@item Objective-C Language Options 194@xref{Objective-C Dialect Options,,Options Controlling Objective-C Dialect}. 195@gccoptlist{ 196-fconstant-string-class=@var{class-name} @gol 197-fgnu-runtime -fnext-runtime @gol 198-fno-nil-receivers @gol 199-fobjc-exceptions @gol 200-freplace-objc-classes @gol 201-fzero-link @gol 202-gen-decls @gol 203-Wno-protocol -Wselector -Wundeclared-selector} 204 205@item Language Independent Options 206@xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}. 207@gccoptlist{-fmessage-length=@var{n} @gol 208-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}} 209 210@item Warning Options 211@xref{Warning Options,,Options to Request or Suppress Warnings}. 212@gccoptlist{-fsyntax-only -pedantic -pedantic-errors @gol 213-w -Wextra -Wall -Waggregate-return @gol 214-Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment @gol 215-Wconversion -Wno-deprecated-declarations @gol 216-Wdisabled-optimization -Wno-div-by-zero -Wendif-labels @gol 217-Werror -Werror-implicit-function-declaration @gol 218-Wfloat-equal -Wformat -Wformat=2 @gol 219-Wno-format-extra-args -Wformat-nonliteral @gol 220-Wformat-security -Wformat-y2k @gol 221-Wimplicit -Wimplicit-function-declaration -Wimplicit-int @gol 222-Wimport -Wno-import -Winit-self -Winline @gol 223-Wno-invalid-offsetof -Winvalid-pch @gol 224-Wlarger-than-@var{len} -Wlong-long @gol 225-Wmain -Wmissing-braces @gol 226-Wmissing-format-attribute -Wmissing-noreturn @gol 227-Wno-multichar -Wnonnull -Wpacked -Wpadded @gol 228-Wparentheses -Wpointer-arith -Wredundant-decls @gol 229-Wreturn-type -Wsequence-point -Wshadow @gol 230-Wsign-compare -Wstrict-aliasing @gol 231-Wswitch -Wswitch-default -Wswitch-enum @gol 232-Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized @gol 233-Wunknown-pragmas -Wunreachable-code @gol 234-Wunused -Wunused-function -Wunused-label -Wunused-parameter @gol 235-Wunused-value -Wunused-variable -Wwrite-strings} 236 237@item C-only Warning Options 238@gccoptlist{-Wbad-function-cast -Wmissing-declarations @gol 239-Wmissing-prototypes -Wnested-externs -Wold-style-definition @gol 240-Wstrict-prototypes -Wtraditional @gol 241-Wdeclaration-after-statement} 242 243@item Debugging Options 244@xref{Debugging Options,,Options for Debugging Your Program or GCC}. 245@gccoptlist{-d@var{letters} -dumpspecs -dumpmachine -dumpversion @gol 246-fdump-unnumbered -fdump-translation-unit@r{[}-@var{n}@r{]} @gol 247-fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol 248-fdump-tree-original@r{[}-@var{n}@r{]} @gol 249-fdump-tree-optimized@r{[}-@var{n}@r{]} @gol 250-fdump-tree-inlined@r{[}-@var{n}@r{]} @gol 251-feliminate-dwarf2-dups -feliminate-unused-debug-types @gol 252-feliminate-unused-debug-symbols -fmem-report -fprofile-arcs @gol 253-frandom-seed=@var{string} -fsched-verbose=@var{n} @gol 254-ftest-coverage -ftime-report @gol 255-g -g@var{level} -gcoff -gdwarf-2 @gol 256-ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ @gol 257-p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol 258-print-multi-directory -print-multi-lib @gol 259-print-prog-name=@var{program} -print-search-dirs -Q @gol 260-save-temps -time} 261 262@item Optimization Options 263@xref{Optimize Options,,Options that Control Optimization}. 264@gccoptlist{-falign-functions=@var{n} -falign-jumps=@var{n} @gol 265-falign-labels=@var{n} -falign-loops=@var{n} @gol 266-fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize @gol 267-fbranch-target-load-optimize2 -fcaller-saves -fcprop-registers @gol 268-fcse-follow-jumps -fcse-skip-blocks -fdata-sections @gol 269-fdelayed-branch -fdelete-null-pointer-checks @gol 270-fexpensive-optimizations -ffast-math -ffloat-store @gol 271-fforce-addr -fforce-mem -ffunction-sections @gol 272-fgcse -fgcse-lm -fgcse-sm -fgcse-las -floop-optimize @gol 273-fcrossjumping -fif-conversion -fif-conversion2 @gol 274-finline-functions -finline-limit=@var{n} -fkeep-inline-functions @gol 275-fkeep-static-consts -fmerge-constants -fmerge-all-constants @gol 276-fmove-all-movables -fnew-ra -fno-branch-count-reg @gol 277-fno-default-inline -fno-defer-pop @gol 278-fno-function-cse -fno-guess-branch-probability @gol 279-fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol 280-funsafe-math-optimizations -ffinite-math-only @gol 281-fno-trapping-math -fno-zero-initialized-in-bss @gol 282-fomit-frame-pointer -foptimize-register-move @gol 283-foptimize-sibling-calls -fprefetch-loop-arrays @gol 284-fprofile-generate -fprofile-use @gol 285-freduce-all-givs -fregmove -frename-registers @gol 286-freorder-blocks -freorder-functions @gol 287-frerun-cse-after-loop -frerun-loop-opt @gol 288-frounding-math -fschedule-insns -fschedule-insns2 @gol 289-fno-sched-interblock -fno-sched-spec -fsched-spec-load @gol 290-fsched-spec-load-dangerous @gol 291-fsched-stalled-insns=@var{n} -sched-stalled-insns-dep=@var{n} @gol 292-fsched2-use-superblocks @gol 293-fsched2-use-traces -fsignaling-nans @gol 294-fsingle-precision-constant @gol 295-fstrength-reduce -fstrict-aliasing -ftracer -fthread-jumps @gol 296-funroll-all-loops -funroll-loops -fpeel-loops @gol 297-funswitch-loops -fold-unroll-loops -fold-unroll-all-loops @gol 298--param @var{name}=@var{value} 299-O -O0 -O1 -O2 -O3 -Os} 300 301@item Preprocessor Options 302@xref{Preprocessor Options,,Options Controlling the Preprocessor}. 303@gccoptlist{-A@var{question}=@var{answer} @gol 304-A-@var{question}@r{[}=@var{answer}@r{]} @gol 305-C -dD -dI -dM -dN @gol 306-D@var{macro}@r{[}=@var{defn}@r{]} -E -H @gol 307-idirafter @var{dir} @gol 308-include @var{file} -imacros @var{file} @gol 309-iprefix @var{file} -iwithprefix @var{dir} @gol 310-iwithprefixbefore @var{dir} -isystem @var{dir} @gol 311-M -MM -MF -MG -MP -MQ -MT -nostdinc @gol 312-P -fworking-directory -remap @gol 313-trigraphs -undef -U@var{macro} -Wp,@var{option} @gol 314-Xpreprocessor @var{option}} 315 316@item Assembler Option 317@xref{Assembler Options,,Passing Options to the Assembler}. 318@gccoptlist{-Wa,@var{option} -Xassembler @var{option}} 319 320@item Linker Options 321@xref{Link Options,,Options for Linking}. 322@gccoptlist{@var{object-file-name} -l@var{library} @gol 323-nostartfiles -nodefaultlibs -nostdlib -pie @gol 324-s -static -static-libgcc -shared -shared-libgcc -symbolic @gol 325-Wl,@var{option} -Xlinker @var{option} @gol 326-u @var{symbol}} 327 328@item Directory Options 329@xref{Directory Options,,Options for Directory Search}. 330@gccoptlist{-B@var{prefix} -I@var{dir} -I- -L@var{dir} -specs=@var{file}} 331 332@item Target Options 333@c I wrote this xref this way to avoid overfull hbox. -- rms 334@xref{Target Options}. 335@gccoptlist{-V @var{version} -b @var{machine}} 336 337@item Machine Dependent Options 338@xref{Submodel Options,,Hardware Models and Configurations}. 339 340@emph{M680x0 Options} 341@gccoptlist{-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 @gol 342-m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020 @gol 343-mnobitfield -mrtd -mshort -msoft-float -mpcrel @gol 344-malign-int -mstrict-align -msep-data -mno-sep-data @gol 345-mshared-library-id=n -mid-shared-library -mno-id-shared-library} 346 347@emph{M68hc1x Options} 348@gccoptlist{-m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 @gol 349-mauto-incdec -minmax -mlong-calls -mshort @gol 350-msoft-reg-count=@var{count}} 351 352@emph{VAX Options} 353@gccoptlist{-mg -mgnu -munix} 354 355@emph{SPARC Options} 356@gccoptlist{-mcpu=@var{cpu-type} @gol 357-mtune=@var{cpu-type} @gol 358-mcmodel=@var{code-model} @gol 359-m32 -m64 -mapp-regs -mno-app-regs @gol 360-mfaster-structs -mno-faster-structs @gol 361-mflat -mno-flat -mfpu -mno-fpu @gol 362-mhard-float -msoft-float @gol 363-mhard-quad-float -msoft-quad-float @gol 364-mimpure-text -mno-impure-text -mlittle-endian @gol 365-mstack-bias -mno-stack-bias @gol 366-munaligned-doubles -mno-unaligned-doubles @gol 367-mv8plus -mno-v8plus -mvis -mno-vis @gol 368-mcypress -mf930 -mf934 @gol 369-msparclite -msupersparc -mv8 370-threads -pthreads} 371 372@emph{ARM Options} 373@gccoptlist{-mapcs-frame -mno-apcs-frame @gol 374-mapcs-26 -mapcs-32 @gol 375-mapcs-stack-check -mno-apcs-stack-check @gol 376-mapcs-float -mno-apcs-float @gol 377-mapcs-reentrant -mno-apcs-reentrant @gol 378-msched-prolog -mno-sched-prolog @gol 379-mlittle-endian -mbig-endian -mwords-little-endian @gol 380-malignment-traps -mno-alignment-traps @gol 381-msoft-float -mhard-float -mfpe @gol 382-mthumb-interwork -mno-thumb-interwork @gol 383-mcpu=@var{name} -march=@var{name} -mfpe=@var{name} @gol 384-mstructure-size-boundary=@var{n} @gol 385-mabort-on-noreturn @gol 386-mlong-calls -mno-long-calls @gol 387-msingle-pic-base -mno-single-pic-base @gol 388-mpic-register=@var{reg} @gol 389-mnop-fun-dllimport @gol 390-mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol 391-mpoke-function-name @gol 392-mthumb -marm @gol 393-mtpcs-frame -mtpcs-leaf-frame @gol 394-mcaller-super-interworking -mcallee-super-interworking} 395 396@emph{MN10300 Options} 397@gccoptlist{-mmult-bug -mno-mult-bug @gol 398-mam33 -mno-am33 @gol 399-mam33-2 -mno-am33-2 @gol 400-mno-crt0 -mrelax} 401 402@emph{M32R/D Options} 403@gccoptlist{-m32r2 -m32rx -m32r @gol 404-mdebug @gol 405-malign-loops -mno-align-loops @gol 406-missue-rate=@var{number} @gol 407-mbranch-cost=@var{number} @gol 408-mmodel=@var{code-size-model-type} @gol 409-msdata=@var{sdata-type} @gol 410-mno-flush-func -mflush-func=@var{name} @gol 411-mno-flush-trap -mflush-trap=@var{number} @gol 412-G @var{num}} 413 414@emph{RS/6000 and PowerPC Options} 415@gccoptlist{-mcpu=@var{cpu-type} @gol 416-mtune=@var{cpu-type} @gol 417-mpower -mno-power -mpower2 -mno-power2 @gol 418-mpowerpc -mpowerpc64 -mno-powerpc @gol 419-maltivec -mno-altivec @gol 420-mpowerpc-gpopt -mno-powerpc-gpopt @gol 421-mpowerpc-gfxopt -mno-powerpc-gfxopt @gol 422-mnew-mnemonics -mold-mnemonics @gol 423-mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc @gol 424-m64 -m32 -mxl-call -mno-xl-call -mpe @gol 425-malign-power -malign-natural @gol 426-msoft-float -mhard-float -mmultiple -mno-multiple @gol 427-mstring -mno-string -mupdate -mno-update @gol 428-mfused-madd -mno-fused-madd -mbit-align -mno-bit-align @gol 429-mstrict-align -mno-strict-align -mrelocatable @gol 430-mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol 431-mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol 432-mdynamic-no-pic @gol 433-mprioritize-restricted-insns=@var{priority} @gol 434-msched-costly-dep=@var{dependence_type} @gol 435-minsert-sched-nops=@var{scheme} @gol 436-mcall-sysv -mcall-netbsd @gol 437-maix-struct-return -msvr4-struct-return @gol 438-mabi=altivec -mabi=no-altivec @gol 439-mabi=spe -mabi=no-spe @gol 440-misel=yes -misel=no @gol 441-mspe=yes -mspe=no @gol 442-mfloat-gprs=yes -mfloat-gprs=no @gol 443-mprototype -mno-prototype @gol 444-msim -mmvme -mads -myellowknife -memb -msdata @gol 445-msdata=@var{opt} -mvxworks -mwindiss -G @var{num} -pthread} 446 447@emph{Darwin Options} 448@gccoptlist{-all_load -allowable_client -arch -arch_errors_fatal @gol 449-arch_only -bind_at_load -bundle -bundle_loader @gol 450-client_name -compatibility_version -current_version @gol 451-dependency-file -dylib_file -dylinker_install_name @gol 452-dynamic -dynamiclib -exported_symbols_list @gol 453-filelist -flat_namespace -force_cpusubtype_ALL @gol 454-force_flat_namespace -headerpad_max_install_names @gol 455-image_base -init -install_name -keep_private_externs @gol 456-multi_module -multiply_defined -multiply_defined_unused @gol 457-noall_load -nofixprebinding -nomultidefs -noprebind -noseglinkedit @gol 458-pagezero_size -prebind -prebind_all_twolevel_modules @gol 459-private_bundle -read_only_relocs -sectalign @gol 460-sectobjectsymbols -whyload -seg1addr @gol 461-sectcreate -sectobjectsymbols -sectorder @gol 462-seg_addr_table -seg_addr_table_filename -seglinkedit @gol 463-segprot -segs_read_only_addr -segs_read_write_addr @gol 464-single_module -static -sub_library -sub_umbrella @gol 465-twolevel_namespace -umbrella -undefined @gol 466-unexported_symbols_list -weak_reference_mismatches @gol 467-whatsloaded} 468 469@emph{MIPS Options} 470@gccoptlist{-EL -EB -march=@var{arch} -mtune=@var{arch} @gol 471-mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64 @gol 472-mips16 -mno-mips16 -mabi=@var{abi} -mabicalls -mno-abicalls @gol 473-mxgot -mno-xgot -membedded-pic -mno-embedded-pic @gol 474-mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float @gol 475-msingle-float -mdouble-float -mint64 -mlong64 -mlong32 @gol 476-G@var{num} -membedded-data -mno-embedded-data @gol 477-muninit-const-in-rodata -mno-uninit-const-in-rodata @gol 478-msplit-addresses -mno-split-addresses @gol 479-mexplicit-relocs -mno-explicit-relocs @gol 480-mrnames -mno-rnames @gol 481-mcheck-zero-division -mno-check-zero-division @gol 482-mmemcpy -mno-memcpy -mlong-calls -mno-long-calls @gol 483-mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp @gol 484-mfix-sb1 -mno-fix-sb1 -mflush-func=@var{func} @gol 485-mno-flush-func -mbranch-likely -mno-branch-likely} 486 487@emph{i386 and x86-64 Options} 488@gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol 489-mfpmath=@var{unit} @gol 490-masm=@var{dialect} -mno-fancy-math-387 @gol 491-mno-fp-ret-in-387 -msoft-float -msvr3-shlib @gol 492-mno-wide-multiply -mrtd -malign-double @gol 493-mpreferred-stack-boundary=@var{num} @gol 494-mmmx -msse -msse2 -msse3 -m3dnow @gol 495-mthreads -mno-align-stringops -minline-all-stringops @gol 496-mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol 497-m96bit-long-double -mregparm=@var{num} -momit-leaf-frame-pointer @gol 498-mno-red-zone -mno-tls-direct-seg-refs @gol 499-mcmodel=@var{code-model} @gol 500-m32 -m64} 501 502@emph{HPPA Options} 503@gccoptlist{-march=@var{architecture-type} @gol 504-mbig-switch -mdisable-fpregs -mdisable-indexing @gol 505-mfast-indirect-calls -mgas -mgnu-ld -mhp-ld @gol 506-mjump-in-delay -mlinker-opt -mlong-calls @gol 507-mlong-load-store -mno-big-switch -mno-disable-fpregs @gol 508-mno-disable-indexing -mno-fast-indirect-calls -mno-gas @gol 509-mno-jump-in-delay -mno-long-load-store @gol 510-mno-portable-runtime -mno-soft-float @gol 511-mno-space-regs -msoft-float -mpa-risc-1-0 @gol 512-mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime @gol 513-mschedule=@var{cpu-type} -mspace-regs -msio -mwsio @gol 514-nolibdld -static -threads} 515 516@emph{Intel 960 Options} 517@gccoptlist{-m@var{cpu-type} -masm-compat -mclean-linkage @gol 518-mcode-align -mcomplex-addr -mleaf-procedures @gol 519-mic-compat -mic2.0-compat -mic3.0-compat @gol 520-mintel-asm -mno-clean-linkage -mno-code-align @gol 521-mno-complex-addr -mno-leaf-procedures @gol 522-mno-old-align -mno-strict-align -mno-tail-call @gol 523-mnumerics -mold-align -msoft-float -mstrict-align @gol 524-mtail-call} 525 526@emph{DEC Alpha Options} 527@gccoptlist{-mno-fp-regs -msoft-float -malpha-as -mgas @gol 528-mieee -mieee-with-inexact -mieee-conformant @gol 529-mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode} @gol 530-mtrap-precision=@var{mode} -mbuild-constants @gol 531-mcpu=@var{cpu-type} -mtune=@var{cpu-type} @gol 532-mbwx -mmax -mfix -mcix @gol 533-mfloat-vax -mfloat-ieee @gol 534-mexplicit-relocs -msmall-data -mlarge-data @gol 535-msmall-text -mlarge-text @gol 536-mmemory-latency=@var{time}} 537 538@emph{DEC Alpha/VMS Options} 539@gccoptlist{-mvms-return-codes} 540 541@emph{H8/300 Options} 542@gccoptlist{-mrelax -mh -ms -mn -mint32 -malign-300} 543 544@emph{SH Options} 545@gccoptlist{-m1 -m2 -m2e -m3 -m3e @gol 546-m4-nofpu -m4-single-only -m4-single -m4 @gol 547-m5-64media -m5-64media-nofpu @gol 548-m5-32media -m5-32media-nofpu @gol 549-m5-compact -m5-compact-nofpu @gol 550-mb -ml -mdalign -mrelax @gol 551-mbigtable -mfmovd -mhitachi -mnomacsave @gol 552-mieee -misize -mpadstruct -mspace @gol 553-mprefergot -musermode} 554 555@emph{System V Options} 556@gccoptlist{-Qy -Qn -YP,@var{paths} -Ym,@var{dir}} 557 558@emph{ARC Options} 559@gccoptlist{-EB -EL @gol 560-mmangle-cpu -mcpu=@var{cpu} -mtext=@var{text-section} @gol 561-mdata=@var{data-section} -mrodata=@var{readonly-data-section}} 562 563@emph{TMS320C3x/C4x Options} 564@gccoptlist{-mcpu=@var{cpu} -mbig -msmall -mregparm -mmemparm @gol 565-mfast-fix -mmpyi -mbk -mti -mdp-isr-reload @gol 566-mrpts=@var{count} -mrptb -mdb -mloop-unsigned @gol 567-mparallel-insns -mparallel-mpy -mpreserve-float} 568 569@emph{V850 Options} 570@gccoptlist{-mlong-calls -mno-long-calls -mep -mno-ep @gol 571-mprolog-function -mno-prolog-function -mspace @gol 572-mtda=@var{n} -msda=@var{n} -mzda=@var{n} @gol 573-mapp-regs -mno-app-regs @gol 574-mdisable-callt -mno-disable-callt @gol 575-mv850e1 @gol 576-mv850e @gol 577-mv850 -mbig-switch} 578 579@emph{NS32K Options} 580@gccoptlist{-m32032 -m32332 -m32532 -m32081 -m32381 @gol 581-mmult-add -mnomult-add -msoft-float -mrtd -mnortd @gol 582-mregparam -mnoregparam -msb -mnosb @gol 583-mbitfield -mnobitfield -mhimem -mnohimem} 584 585@emph{AVR Options} 586@gccoptlist{-mmcu=@var{mcu} -msize -minit-stack=@var{n} -mno-interrupts @gol 587-mcall-prologues -mno-tablejump -mtiny-stack} 588 589@emph{MCore Options} 590@gccoptlist{-mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates @gol 591-mno-relax-immediates -mwide-bitfields -mno-wide-bitfields @gol 592-m4byte-functions -mno-4byte-functions -mcallgraph-data @gol 593-mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim @gol 594-mlittle-endian -mbig-endian -m210 -m340 -mstack-increment} 595 596@emph{MMIX Options} 597@gccoptlist{-mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu @gol 598-mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols @gol 599-melf -mbranch-predict -mno-branch-predict -mbase-addresses @gol 600-mno-base-addresses -msingle-exit -mno-single-exit} 601 602@emph{IA-64 Options} 603@gccoptlist{-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol 604-mvolatile-asm-stop -mb-step -mregister-names -mno-sdata @gol 605-mconstant-gp -mauto-pic -minline-float-divide-min-latency @gol 606-minline-float-divide-max-throughput @gol 607-minline-int-divide-min-latency @gol 608-minline-int-divide-max-throughput -mno-dwarf2-asm @gol 609-mfixed-range=@var{register-range}} 610 611@emph{D30V Options} 612@gccoptlist{-mextmem -mextmemory -monchip -mno-asm-optimize @gol 613-masm-optimize -mbranch-cost=@var{n} -mcond-exec=@var{n}} 614 615@emph{S/390 and zSeries Options} 616@gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol 617-mhard-float -msoft-float -mbackchain -mno-backchain @gol 618-msmall-exec -mno-small-exec -mmvcle -mno-mvcle @gol 619-m64 -m31 -mdebug -mno-debug -mesa -mzarch -mfused-madd -mno-fused-madd} 620 621@emph{CRIS Options} 622@gccoptlist{-mcpu=@var{cpu} -march=@var{cpu} -mtune=@var{cpu} @gol 623-mmax-stack-frame=@var{n} -melinux-stacksize=@var{n} @gol 624-metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects @gol 625-mstack-align -mdata-align -mconst-align @gol 626-m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt @gol 627-melf -maout -melinux -mlinux -sim -sim2 @gol 628-mmul-bug-workaround -mno-mul-bug-workaround} 629 630@emph{PDP-11 Options} 631@gccoptlist{-mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 @gol 632-mbcopy -mbcopy-builtin -mint32 -mno-int16 @gol 633-mint16 -mno-int32 -mfloat32 -mno-float64 @gol 634-mfloat64 -mno-float32 -mabshi -mno-abshi @gol 635-mbranch-expensive -mbranch-cheap @gol 636-msplit -mno-split -munix-asm -mdec-asm} 637 638@emph{Xstormy16 Options} 639@gccoptlist{-msim} 640 641@emph{Xtensa Options} 642@gccoptlist{-mconst16 -mno-const16 @gol 643-mfused-madd -mno-fused-madd @gol 644-mtext-section-literals -mno-text-section-literals @gol 645-mtarget-align -mno-target-align @gol 646-mlongcalls -mno-longcalls} 647 648@emph{FRV Options} 649@gccoptlist{-mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 @gol 650-mhard-float -msoft-float @gol 651-malloc-cc -mfixed-cc -mdword -mno-dword @gol 652-mdouble -mno-double @gol 653-mmedia -mno-media -mmuladd -mno-muladd @gol 654-mlibrary-pic -macc-4 -macc-8 @gol 655-mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move @gol 656-mscc -mno-scc -mcond-exec -mno-cond-exec @gol 657-mvliw-branch -mno-vliw-branch @gol 658-mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec @gol 659-mno-nested-cond-exec -mtomcat-stats @gol 660-mcpu=@var{cpu}} 661 662@item Code Generation Options 663@xref{Code Gen Options,,Options for Code Generation Conventions}. 664@gccoptlist{-fcall-saved-@var{reg} -fcall-used-@var{reg} @gol 665-ffixed-@var{reg} -fexceptions @gol 666-fnon-call-exceptions -funwind-tables @gol 667-fasynchronous-unwind-tables @gol 668-finhibit-size-directive -finstrument-functions @gol 669-fno-common -fno-ident @gol 670-fpcc-struct-return -fpic -fPIC -fpie -fPIE @gol 671-freg-struct-return -fshared-data -fshort-enums @gol 672-fshort-double -fshort-wchar @gol 673-fverbose-asm -fpack-struct -fstack-check @gol 674-fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol 675-fargument-alias -fargument-noalias @gol 676-fargument-noalias-global -fleading-underscore @gol 677-ftls-model=@var{model} @gol 678-ftrapv -fwrapv -fbounds-check} 679@end table 680 681@menu 682* Overall Options:: Controlling the kind of output: 683 an executable, object files, assembler files, 684 or preprocessed source. 685* C Dialect Options:: Controlling the variant of C language compiled. 686* C++ Dialect Options:: Variations on C++. 687* Objective-C Dialect Options:: Variations on Objective-C. 688* Language Independent Options:: Controlling how diagnostics should be 689 formatted. 690* Warning Options:: How picky should the compiler be? 691* Debugging Options:: Symbol tables, measurements, and debugging dumps. 692* Optimize Options:: How much optimization? 693* Preprocessor Options:: Controlling header files and macro definitions. 694 Also, getting dependency information for Make. 695* Assembler Options:: Passing options to the assembler. 696* Link Options:: Specifying libraries and so on. 697* Directory Options:: Where to find header files and libraries. 698 Where to find the compiler executable files. 699* Spec Files:: How to pass switches to sub-processes. 700* Target Options:: Running a cross-compiler, or an old version of GCC. 701@end menu 702 703@node Overall Options 704@section Options Controlling the Kind of Output 705 706Compilation can involve up to four stages: preprocessing, compilation 707proper, assembly and linking, always in that order. GCC is capable of 708preprocessing and compiling several files either into several 709assembler input files, or into one assembler input file; then each 710assembler input file produces an object file, and linking combines all 711the object files (those newly compiled, and those specified as input) 712into an executable file. 713 714@cindex file name suffix 715For any given input file, the file name suffix determines what kind of 716compilation is done: 717 718@table @gcctabopt 719@item @var{file}.c 720C source code which must be preprocessed. 721 722@item @var{file}.i 723C source code which should not be preprocessed. 724 725@item @var{file}.ii 726C++ source code which should not be preprocessed. 727 728@item @var{file}.m 729Objective-C source code. Note that you must link with the library 730@file{libobjc.a} to make an Objective-C program work. 731 732@item @var{file}.mi 733Objective-C source code which should not be preprocessed. 734 735@item @var{file}.h 736C or C++ header file to be turned into a precompiled header. 737 738@item @var{file}.cc 739@itemx @var{file}.cp 740@itemx @var{file}.cxx 741@itemx @var{file}.cpp 742@itemx @var{file}.CPP 743@itemx @var{file}.c++ 744@itemx @var{file}.C 745C++ source code which must be preprocessed. Note that in @samp{.cxx}, 746the last two letters must both be literally @samp{x}. Likewise, 747@samp{.C} refers to a literal capital C@. 748 749@item @var{file}.hh 750@itemx @var{file}.H 751C++ header file to be turned into a precompiled header. 752 753@item @var{file}.f 754@itemx @var{file}.for 755@itemx @var{file}.FOR 756Fortran source code which should not be preprocessed. 757 758@item @var{file}.F 759@itemx @var{file}.fpp 760@itemx @var{file}.FPP 761Fortran source code which must be preprocessed (with the traditional 762preprocessor). 763 764@item @var{file}.r 765Fortran source code which must be preprocessed with a RATFOR 766preprocessor (not included with GCC)@. 767 768@xref{Overall Options,,Options Controlling the Kind of Output, g77, 769Using and Porting GNU Fortran}, for more details of the handling of 770Fortran input files. 771 772@c FIXME: Descriptions of Java file types. 773@c @var{file}.java 774@c @var{file}.class 775@c @var{file}.zip 776@c @var{file}.jar 777 778@item @var{file}.ads 779Ada source code file which contains a library unit declaration (a 780declaration of a package, subprogram, or generic, or a generic 781instantiation), or a library unit renaming declaration (a package, 782generic, or subprogram renaming declaration). Such files are also 783called @dfn{specs}. 784 785@itemx @var{file}.adb 786Ada source code file containing a library unit body (a subprogram or 787package body). Such files are also called @dfn{bodies}. 788 789@c GCC also knows about some suffixes for languages not yet included: 790@c Pascal: 791@c @var{file}.p 792@c @var{file}.pas 793 794@item @var{file}.s 795Assembler code. 796 797@item @var{file}.S 798Assembler code which must be preprocessed. 799 800@item @var{other} 801An object file to be fed straight into linking. 802Any file name with no recognized suffix is treated this way. 803@end table 804 805@opindex x 806You can specify the input language explicitly with the @option{-x} option: 807 808@table @gcctabopt 809@item -x @var{language} 810Specify explicitly the @var{language} for the following input files 811(rather than letting the compiler choose a default based on the file 812name suffix). This option applies to all following input files until 813the next @option{-x} option. Possible values for @var{language} are: 814@smallexample 815c c-header cpp-output 816c++ c++-header c++-cpp-output 817objective-c objective-c-header objc-cpp-output 818assembler assembler-with-cpp 819ada 820f77 f77-cpp-input ratfor 821java 822treelang 823@end smallexample 824 825@item -x none 826Turn off any specification of a language, so that subsequent files are 827handled according to their file name suffixes (as they are if @option{-x} 828has not been used at all). 829 830@item -pass-exit-codes 831@opindex pass-exit-codes 832Normally the @command{gcc} program will exit with the code of 1 if any 833phase of the compiler returns a non-success return code. If you specify 834@option{-pass-exit-codes}, the @command{gcc} program will instead return with 835numerically highest error produced by any phase that returned an error 836indication. 837@end table 838 839If you only want some of the stages of compilation, you can use 840@option{-x} (or filename suffixes) to tell @command{gcc} where to start, and 841one of the options @option{-c}, @option{-S}, or @option{-E} to say where 842@command{gcc} is to stop. Note that some combinations (for example, 843@samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all. 844 845@table @gcctabopt 846@item -c 847@opindex c 848Compile or assemble the source files, but do not link. The linking 849stage simply is not done. The ultimate output is in the form of an 850object file for each source file. 851 852By default, the object file name for a source file is made by replacing 853the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}. 854 855Unrecognized input files, not requiring compilation or assembly, are 856ignored. 857 858@item -S 859@opindex S 860Stop after the stage of compilation proper; do not assemble. The output 861is in the form of an assembler code file for each non-assembler input 862file specified. 863 864By default, the assembler file name for a source file is made by 865replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}. 866 867Input files that don't require compilation are ignored. 868 869@item -E 870@opindex E 871Stop after the preprocessing stage; do not run the compiler proper. The 872output is in the form of preprocessed source code, which is sent to the 873standard output. 874 875Input files which don't require preprocessing are ignored. 876 877@cindex output file option 878@item -o @var{file} 879@opindex o 880Place output in file @var{file}. This applies regardless to whatever 881sort of output is being produced, whether it be an executable file, 882an object file, an assembler file or preprocessed C code. 883 884If you specify @option{-o} when compiling more than one input file, or 885you are producing an executable file as output, all the source files 886on the command line will be compiled at once. 887 888If @option{-o} is not specified, the default is to put an executable file 889in @file{a.out}, the object file for @file{@var{source}.@var{suffix}} in 890@file{@var{source}.o}, its assembler file in @file{@var{source}.s}, and 891all preprocessed C source on standard output. 892 893@item -v 894@opindex v 895Print (on standard error output) the commands executed to run the stages 896of compilation. Also print the version number of the compiler driver 897program and of the preprocessor and the compiler proper. 898 899@item -### 900@opindex ### 901Like @option{-v} except the commands are not executed and all command 902arguments are quoted. This is useful for shell scripts to capture the 903driver-generated command lines. 904 905@item -pipe 906@opindex pipe 907Use pipes rather than temporary files for communication between the 908various stages of compilation. This fails to work on some systems where 909the assembler is unable to read from a pipe; but the GNU assembler has 910no trouble. 911 912@item --help 913@opindex help 914Print (on the standard output) a description of the command line options 915understood by @command{gcc}. If the @option{-v} option is also specified 916then @option{--help} will also be passed on to the various processes 917invoked by @command{gcc}, so that they can display the command line options 918they accept. If the @option{-Wextra} option is also specified then command 919line options which have no documentation associated with them will also 920be displayed. 921 922@item --target-help 923@opindex target-help 924Print (on the standard output) a description of target specific command 925line options for each tool. 926 927@item --version 928@opindex version 929Display the version number and copyrights of the invoked GCC. 930@end table 931 932@node Invoking G++ 933@section Compiling C++ Programs 934 935@cindex suffixes for C++ source 936@cindex C++ source file suffixes 937C++ source files conventionally use one of the suffixes @samp{.C}, 938@samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or 939@samp{.cxx}; C++ header files often use @samp{.hh} or @samp{.H}; and 940preprocessed C++ files use the suffix @samp{.ii}. GCC recognizes 941files with these names and compiles them as C++ programs even if you 942call the compiler the same way as for compiling C programs (usually 943with the name @command{gcc}). 944 945@findex g++ 946@findex c++ 947However, C++ programs often require class libraries as well as a 948compiler that understands the C++ language---and under some 949circumstances, you might want to compile programs or header files from 950standard input, or otherwise without a suffix that flags them as C++ 951programs. You might also like to precompile a C header file with a 952@samp{.h} extension to be used in C++ compilations. @command{g++} is a 953program that calls GCC with the default language set to C++, and 954automatically specifies linking against the C++ library. On many 955systems, @command{g++} is also installed with the name @command{c++}. 956 957@cindex invoking @command{g++} 958When you compile C++ programs, you may specify many of the same 959command-line options that you use for compiling programs in any 960language; or command-line options meaningful for C and related 961languages; or options that are meaningful only for C++ programs. 962@xref{C Dialect Options,,Options Controlling C Dialect}, for 963explanations of options for languages related to C@. 964@xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for 965explanations of options that are meaningful only for C++ programs. 966 967@node C Dialect Options 968@section Options Controlling C Dialect 969@cindex dialect options 970@cindex language dialect options 971@cindex options, dialect 972 973The following options control the dialect of C (or languages derived 974from C, such as C++ and Objective-C) that the compiler accepts: 975 976@table @gcctabopt 977@cindex ANSI support 978@cindex ISO support 979@item -ansi 980@opindex ansi 981In C mode, support all ISO C90 programs. In C++ mode, 982remove GNU extensions that conflict with ISO C++. 983 984This turns off certain features of GCC that are incompatible with ISO 985C90 (when compiling C code), or of standard C++ (when compiling C++ code), 986such as the @code{asm} and @code{typeof} keywords, and 987predefined macros such as @code{unix} and @code{vax} that identify the 988type of system you are using. It also enables the undesirable and 989rarely used ISO trigraph feature. For the C compiler, 990it disables recognition of C++ style @samp{//} comments as well as 991the @code{inline} keyword. 992 993The alternate keywords @code{__asm__}, @code{__extension__}, 994@code{__inline__} and @code{__typeof__} continue to work despite 995@option{-ansi}. You would not want to use them in an ISO C program, of 996course, but it is useful to put them in header files that might be included 997in compilations done with @option{-ansi}. Alternate predefined macros 998such as @code{__unix__} and @code{__vax__} are also available, with or 999without @option{-ansi}. 1000 1001The @option{-ansi} option does not cause non-ISO programs to be 1002rejected gratuitously. For that, @option{-pedantic} is required in 1003addition to @option{-ansi}. @xref{Warning Options}. 1004 1005The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi} 1006option is used. Some header files may notice this macro and refrain 1007from declaring certain functions or defining certain macros that the 1008ISO standard doesn't call for; this is to avoid interfering with any 1009programs that might use these names for other things. 1010 1011Functions which would normally be built in but do not have semantics 1012defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in 1013functions with @option{-ansi} is used. @xref{Other Builtins,,Other 1014built-in functions provided by GCC}, for details of the functions 1015affected. 1016 1017@item -std= 1018@opindex std 1019Determine the language standard. This option is currently only 1020supported when compiling C or C++. A value for this option must be 1021provided; possible values are 1022 1023@table @samp 1024@item c89 1025@itemx iso9899:1990 1026ISO C90 (same as @option{-ansi}). 1027 1028@item iso9899:199409 1029ISO C90 as modified in amendment 1. 1030 1031@item c99 1032@itemx c9x 1033@itemx iso9899:1999 1034@itemx iso9899:199x 1035ISO C99. Note that this standard is not yet fully supported; see 1036@w{@uref{http://gcc.gnu.org/gcc-3.4/c99status.html}} for more information. The 1037names @samp{c9x} and @samp{iso9899:199x} are deprecated. 1038 1039@item gnu89 1040Default, ISO C90 plus GNU extensions (including some C99 features). 1041 1042@item gnu99 1043@itemx gnu9x 1044ISO C99 plus GNU extensions. When ISO C99 is fully implemented in GCC, 1045this will become the default. The name @samp{gnu9x} is deprecated. 1046 1047@item c++98 1048The 1998 ISO C++ standard plus amendments. 1049 1050@item gnu++98 1051The same as @option{-std=c++98} plus GNU extensions. This is the 1052default for C++ code. 1053@end table 1054 1055Even when this option is not specified, you can still use some of the 1056features of newer standards in so far as they do not conflict with 1057previous C standards. For example, you may use @code{__restrict__} even 1058when @option{-std=c99} is not specified. 1059 1060The @option{-std} options specifying some version of ISO C have the same 1061effects as @option{-ansi}, except that features that were not in ISO C90 1062but are in the specified version (for example, @samp{//} comments and 1063the @code{inline} keyword in ISO C99) are not disabled. 1064 1065@xref{Standards,,Language Standards Supported by GCC}, for details of 1066these standard versions. 1067 1068@item -aux-info @var{filename} 1069@opindex aux-info 1070Output to the given filename prototyped declarations for all functions 1071declared and/or defined in a translation unit, including those in header 1072files. This option is silently ignored in any language other than C@. 1073 1074Besides declarations, the file indicates, in comments, the origin of 1075each declaration (source file and line), whether the declaration was 1076implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or 1077@samp{O} for old, respectively, in the first character after the line 1078number and the colon), and whether it came from a declaration or a 1079definition (@samp{C} or @samp{F}, respectively, in the following 1080character). In the case of function definitions, a K&R-style list of 1081arguments followed by their declarations is also provided, inside 1082comments, after the declaration. 1083 1084@item -fno-asm 1085@opindex fno-asm 1086Do not recognize @code{asm}, @code{inline} or @code{typeof} as a 1087keyword, so that code can use these words as identifiers. You can use 1088the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__} 1089instead. @option{-ansi} implies @option{-fno-asm}. 1090 1091In C++, this switch only affects the @code{typeof} keyword, since 1092@code{asm} and @code{inline} are standard keywords. You may want to 1093use the @option{-fno-gnu-keywords} flag instead, which has the same 1094effect. In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this 1095switch only affects the @code{asm} and @code{typeof} keywords, since 1096@code{inline} is a standard keyword in ISO C99. 1097 1098@item -fno-builtin 1099@itemx -fno-builtin-@var{function} 1100@opindex fno-builtin 1101@cindex built-in functions 1102Don't recognize built-in functions that do not begin with 1103@samp{__builtin_} as prefix. @xref{Other Builtins,,Other built-in 1104functions provided by GCC}, for details of the functions affected, 1105including those which are not built-in functions when @option{-ansi} or 1106@option{-std} options for strict ISO C conformance are used because they 1107do not have an ISO standard meaning. 1108 1109GCC normally generates special code to handle certain built-in functions 1110more efficiently; for instance, calls to @code{alloca} may become single 1111instructions that adjust the stack directly, and calls to @code{memcpy} 1112may become inline copy loops. The resulting code is often both smaller 1113and faster, but since the function calls no longer appear as such, you 1114cannot set a breakpoint on those calls, nor can you change the behavior 1115of the functions by linking with a different library. 1116 1117With the @option{-fno-builtin-@var{function}} option 1118only the built-in function @var{function} is 1119disabled. @var{function} must not begin with @samp{__builtin_}. If a 1120function is named this is not built-in in this version of GCC, this 1121option is ignored. There is no corresponding 1122@option{-fbuiltin-@var{function}} option; if you wish to enable 1123built-in functions selectively when using @option{-fno-builtin} or 1124@option{-ffreestanding}, you may define macros such as: 1125 1126@smallexample 1127#define abs(n) __builtin_abs ((n)) 1128#define strcpy(d, s) __builtin_strcpy ((d), (s)) 1129@end smallexample 1130 1131@item -fhosted 1132@opindex fhosted 1133@cindex hosted environment 1134 1135Assert that compilation takes place in a hosted environment. This implies 1136@option{-fbuiltin}. A hosted environment is one in which the 1137entire standard library is available, and in which @code{main} has a return 1138type of @code{int}. Examples are nearly everything except a kernel. 1139This is equivalent to @option{-fno-freestanding}. 1140 1141@item -ffreestanding 1142@opindex ffreestanding 1143@cindex hosted environment 1144 1145Assert that compilation takes place in a freestanding environment. This 1146implies @option{-fno-builtin}. A freestanding environment 1147is one in which the standard library may not exist, and program startup may 1148not necessarily be at @code{main}. The most obvious example is an OS kernel. 1149This is equivalent to @option{-fno-hosted}. 1150 1151@xref{Standards,,Language Standards Supported by GCC}, for details of 1152freestanding and hosted environments. 1153 1154@item -fms-extensions 1155@opindex fms-extensions 1156Accept some non-standard constructs used in Microsoft header files. 1157 1158@item -trigraphs 1159@opindex trigraphs 1160Support ISO C trigraphs. The @option{-ansi} option (and @option{-std} 1161options for strict ISO C conformance) implies @option{-trigraphs}. 1162 1163@item -no-integrated-cpp 1164@opindex no-integrated-cpp 1165Performs a compilation in two passes: preprocessing and compiling. This 1166option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the 1167@option{-B} option. The user supplied compilation step can then add in 1168an additional preprocessing step after normal preprocessing but before 1169compiling. The default is to use the integrated cpp (internal cpp) 1170 1171The semantics of this option will change if "cc1", "cc1plus", and 1172"cc1obj" are merged. 1173 1174@cindex traditional C language 1175@cindex C language, traditional 1176@item -traditional 1177@itemx -traditional-cpp 1178@opindex traditional-cpp 1179@opindex traditional 1180Formerly, these options caused GCC to attempt to emulate a pre-standard 1181C compiler. They are now only supported with the @option{-E} switch. 1182The preprocessor continues to support a pre-standard mode. See the GNU 1183CPP manual for details. 1184 1185@item -fcond-mismatch 1186@opindex fcond-mismatch 1187Allow conditional expressions with mismatched types in the second and 1188third arguments. The value of such an expression is void. This option 1189is not supported for C++. 1190 1191@item -funsigned-char 1192@opindex funsigned-char 1193Let the type @code{char} be unsigned, like @code{unsigned char}. 1194 1195Each kind of machine has a default for what @code{char} should 1196be. It is either like @code{unsigned char} by default or like 1197@code{signed char} by default. 1198 1199Ideally, a portable program should always use @code{signed char} or 1200@code{unsigned char} when it depends on the signedness of an object. 1201But many programs have been written to use plain @code{char} and 1202expect it to be signed, or expect it to be unsigned, depending on the 1203machines they were written for. This option, and its inverse, let you 1204make such a program work with the opposite default. 1205 1206The type @code{char} is always a distinct type from each of 1207@code{signed char} or @code{unsigned char}, even though its behavior 1208is always just like one of those two. 1209 1210@item -fsigned-char 1211@opindex fsigned-char 1212Let the type @code{char} be signed, like @code{signed char}. 1213 1214Note that this is equivalent to @option{-fno-unsigned-char}, which is 1215the negative form of @option{-funsigned-char}. Likewise, the option 1216@option{-fno-signed-char} is equivalent to @option{-funsigned-char}. 1217 1218@item -fsigned-bitfields 1219@itemx -funsigned-bitfields 1220@itemx -fno-signed-bitfields 1221@itemx -fno-unsigned-bitfields 1222@opindex fsigned-bitfields 1223@opindex funsigned-bitfields 1224@opindex fno-signed-bitfields 1225@opindex fno-unsigned-bitfields 1226These options control whether a bit-field is signed or unsigned, when the 1227declaration does not use either @code{signed} or @code{unsigned}. By 1228default, such a bit-field is signed, because this is consistent: the 1229basic integer types such as @code{int} are signed types. 1230 1231@item -fwritable-strings 1232@opindex fwritable-strings 1233Store string constants in the writable data segment and don't uniquize 1234them. This is for compatibility with old programs which assume they can 1235write into string constants. 1236 1237Writing into string constants is a very bad idea; ``constants'' should 1238be constant. 1239 1240This option is deprecated. 1241@end table 1242 1243@node C++ Dialect Options 1244@section Options Controlling C++ Dialect 1245 1246@cindex compiler options, C++ 1247@cindex C++ options, command line 1248@cindex options, C++ 1249This section describes the command-line options that are only meaningful 1250for C++ programs; but you can also use most of the GNU compiler options 1251regardless of what language your program is in. For example, you 1252might compile a file @code{firstClass.C} like this: 1253 1254@smallexample 1255g++ -g -frepo -O -c firstClass.C 1256@end smallexample 1257 1258@noindent 1259In this example, only @option{-frepo} is an option meant 1260only for C++ programs; you can use the other options with any 1261language supported by GCC@. 1262 1263Here is a list of options that are @emph{only} for compiling C++ programs: 1264 1265@table @gcctabopt 1266 1267@item -fabi-version=@var{n} 1268@opindex fabi-version 1269Use version @var{n} of the C++ ABI. Version 2 is the version of the 1270C++ ABI that first appeared in G++ 3.4. Version 1 is the version of 1271the C++ ABI that first appeared in G++ 3.2. Version 0 will always be 1272the version that conforms most closely to the C++ ABI specification. 1273Therefore, the ABI obtained using version 0 will change as ABI bugs 1274are fixed. 1275 1276The default is version 2. 1277 1278@item -fno-access-control 1279@opindex fno-access-control 1280Turn off all access checking. This switch is mainly useful for working 1281around bugs in the access control code. 1282 1283@item -fcheck-new 1284@opindex fcheck-new 1285Check that the pointer returned by @code{operator new} is non-null 1286before attempting to modify the storage allocated. This check is 1287normally unnecessary because the C++ standard specifies that 1288@code{operator new} will only return @code{0} if it is declared 1289@samp{throw()}, in which case the compiler will always check the 1290return value even without this option. In all other cases, when 1291@code{operator new} has a non-empty exception specification, memory 1292exhaustion is signalled by throwing @code{std::bad_alloc}. See also 1293@samp{new (nothrow)}. 1294 1295@item -fconserve-space 1296@opindex fconserve-space 1297Put uninitialized or runtime-initialized global variables into the 1298common segment, as C does. This saves space in the executable at the 1299cost of not diagnosing duplicate definitions. If you compile with this 1300flag and your program mysteriously crashes after @code{main()} has 1301completed, you may have an object that is being destroyed twice because 1302two definitions were merged. 1303 1304This option is no longer useful on most targets, now that support has 1305been added for putting variables into BSS without making them common. 1306 1307@item -fno-const-strings 1308@opindex fno-const-strings 1309Give string constants type @code{char *} instead of type @code{const 1310char *}. By default, G++ uses type @code{const char *} as required by 1311the standard. Even if you use @option{-fno-const-strings}, you cannot 1312actually modify the value of a string constant, unless you also use 1313@option{-fwritable-strings}. 1314 1315This option might be removed in a future release of G++. For maximum 1316portability, you should structure your code so that it works with 1317string constants that have type @code{const char *}. 1318 1319@item -fno-elide-constructors 1320@opindex fno-elide-constructors 1321The C++ standard allows an implementation to omit creating a temporary 1322which is only used to initialize another object of the same type. 1323Specifying this option disables that optimization, and forces G++ to 1324call the copy constructor in all cases. 1325 1326@item -fno-enforce-eh-specs 1327@opindex fno-enforce-eh-specs 1328Don't check for violation of exception specifications at runtime. This 1329option violates the C++ standard, but may be useful for reducing code 1330size in production builds, much like defining @samp{NDEBUG}. The compiler 1331will still optimize based on the exception specifications. 1332 1333@item -ffor-scope 1334@itemx -fno-for-scope 1335@opindex ffor-scope 1336@opindex fno-for-scope 1337If @option{-ffor-scope} is specified, the scope of variables declared in 1338a @i{for-init-statement} is limited to the @samp{for} loop itself, 1339as specified by the C++ standard. 1340If @option{-fno-for-scope} is specified, the scope of variables declared in 1341a @i{for-init-statement} extends to the end of the enclosing scope, 1342as was the case in old versions of G++, and other (traditional) 1343implementations of C++. 1344 1345The default if neither flag is given to follow the standard, 1346but to allow and give a warning for old-style code that would 1347otherwise be invalid, or have different behavior. 1348 1349@item -fno-gnu-keywords 1350@opindex fno-gnu-keywords 1351Do not recognize @code{typeof} as a keyword, so that code can use this 1352word as an identifier. You can use the keyword @code{__typeof__} instead. 1353@option{-ansi} implies @option{-fno-gnu-keywords}. 1354 1355@item -fno-implicit-templates 1356@opindex fno-implicit-templates 1357Never emit code for non-inline templates which are instantiated 1358implicitly (i.e.@: by use); only emit code for explicit instantiations. 1359@xref{Template Instantiation}, for more information. 1360 1361@item -fno-implicit-inline-templates 1362@opindex fno-implicit-inline-templates 1363Don't emit code for implicit instantiations of inline templates, either. 1364The default is to handle inlines differently so that compiles with and 1365without optimization will need the same set of explicit instantiations. 1366 1367@item -fno-implement-inlines 1368@opindex fno-implement-inlines 1369To save space, do not emit out-of-line copies of inline functions 1370controlled by @samp{#pragma implementation}. This will cause linker 1371errors if these functions are not inlined everywhere they are called. 1372 1373@item -fms-extensions 1374@opindex fms-extensions 1375Disable pedantic warnings about constructs used in MFC, such as implicit 1376int and getting a pointer to member function via non-standard syntax. 1377 1378@item -fno-nonansi-builtins 1379@opindex fno-nonansi-builtins 1380Disable built-in declarations of functions that are not mandated by 1381ANSI/ISO C@. These include @code{ffs}, @code{alloca}, @code{_exit}, 1382@code{index}, @code{bzero}, @code{conjf}, and other related functions. 1383 1384@item -fno-operator-names 1385@opindex fno-operator-names 1386Do not treat the operator name keywords @code{and}, @code{bitand}, 1387@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as 1388synonyms as keywords. 1389 1390@item -fno-optional-diags 1391@opindex fno-optional-diags 1392Disable diagnostics that the standard says a compiler does not need to 1393issue. Currently, the only such diagnostic issued by G++ is the one for 1394a name having multiple meanings within a class. 1395 1396@item -fpermissive 1397@opindex fpermissive 1398Downgrade some diagnostics about nonconformant code from errors to 1399warnings. Thus, using @option{-fpermissive} will allow some 1400nonconforming code to compile. 1401 1402@item -frepo 1403@opindex frepo 1404Enable automatic template instantiation at link time. This option also 1405implies @option{-fno-implicit-templates}. @xref{Template 1406Instantiation}, for more information. 1407 1408@item -fno-rtti 1409@opindex fno-rtti 1410Disable generation of information about every class with virtual 1411functions for use by the C++ runtime type identification features 1412(@samp{dynamic_cast} and @samp{typeid}). If you don't use those parts 1413of the language, you can save some space by using this flag. Note that 1414exception handling uses the same information, but it will generate it as 1415needed. 1416 1417@item -fstats 1418@opindex fstats 1419Emit statistics about front-end processing at the end of the compilation. 1420This information is generally only useful to the G++ development team. 1421 1422@item -ftemplate-depth-@var{n} 1423@opindex ftemplate-depth 1424Set the maximum instantiation depth for template classes to @var{n}. 1425A limit on the template instantiation depth is needed to detect 1426endless recursions during template class instantiation. ANSI/ISO C++ 1427conforming programs must not rely on a maximum depth greater than 17. 1428 1429@item -fuse-cxa-atexit 1430@opindex fuse-cxa-atexit 1431Register destructors for objects with static storage duration with the 1432@code{__cxa_atexit} function rather than the @code{atexit} function. 1433This option is required for fully standards-compliant handling of static 1434destructors, but will only work if your C library supports 1435@code{__cxa_atexit}. 1436 1437@item -fno-weak 1438@opindex fno-weak 1439Do not use weak symbol support, even if it is provided by the linker. 1440By default, G++ will use weak symbols if they are available. This 1441option exists only for testing, and should not be used by end-users; 1442it will result in inferior code and has no benefits. This option may 1443be removed in a future release of G++. 1444 1445@item -nostdinc++ 1446@opindex nostdinc++ 1447Do not search for header files in the standard directories specific to 1448C++, but do still search the other standard directories. (This option 1449is used when building the C++ library.) 1450@end table 1451 1452In addition, these optimization, warning, and code generation options 1453have meanings only for C++ programs: 1454 1455@table @gcctabopt 1456@item -fno-default-inline 1457@opindex fno-default-inline 1458Do not assume @samp{inline} for functions defined inside a class scope. 1459@xref{Optimize Options,,Options That Control Optimization}. Note that these 1460functions will have linkage like inline functions; they just won't be 1461inlined by default. 1462 1463@item -Wabi @r{(C++ only)} 1464@opindex Wabi 1465Warn when G++ generates code that is probably not compatible with the 1466vendor-neutral C++ ABI. Although an effort has been made to warn about 1467all such cases, there are probably some cases that are not warned about, 1468even though G++ is generating incompatible code. There may also be 1469cases where warnings are emitted even though the code that is generated 1470will be compatible. 1471 1472You should rewrite your code to avoid these warnings if you are 1473concerned about the fact that code generated by G++ may not be binary 1474compatible with code generated by other compilers. 1475 1476The known incompatibilities at this point include: 1477 1478@itemize @bullet 1479 1480@item 1481Incorrect handling of tail-padding for bit-fields. G++ may attempt to 1482pack data into the same byte as a base class. For example: 1483 1484@smallexample 1485struct A @{ virtual void f(); int f1 : 1; @}; 1486struct B : public A @{ int f2 : 1; @}; 1487@end smallexample 1488 1489@noindent 1490In this case, G++ will place @code{B::f2} into the same byte 1491as@code{A::f1}; other compilers will not. You can avoid this problem 1492by explicitly padding @code{A} so that its size is a multiple of the 1493byte size on your platform; that will cause G++ and other compilers to 1494layout @code{B} identically. 1495 1496@item 1497Incorrect handling of tail-padding for virtual bases. G++ does not use 1498tail padding when laying out virtual bases. For example: 1499 1500@smallexample 1501struct A @{ virtual void f(); char c1; @}; 1502struct B @{ B(); char c2; @}; 1503struct C : public A, public virtual B @{@}; 1504@end smallexample 1505 1506@noindent 1507In this case, G++ will not place @code{B} into the tail-padding for 1508@code{A}; other compilers will. You can avoid this problem by 1509explicitly padding @code{A} so that its size is a multiple of its 1510alignment (ignoring virtual base classes); that will cause G++ and other 1511compilers to layout @code{C} identically. 1512 1513@item 1514Incorrect handling of bit-fields with declared widths greater than that 1515of their underlying types, when the bit-fields appear in a union. For 1516example: 1517 1518@smallexample 1519union U @{ int i : 4096; @}; 1520@end smallexample 1521 1522@noindent 1523Assuming that an @code{int} does not have 4096 bits, G++ will make the 1524union too small by the number of bits in an @code{int}. 1525 1526@item 1527Empty classes can be placed at incorrect offsets. For example: 1528 1529@smallexample 1530struct A @{@}; 1531 1532struct B @{ 1533 A a; 1534 virtual void f (); 1535@}; 1536 1537struct C : public B, public A @{@}; 1538@end smallexample 1539 1540@noindent 1541G++ will place the @code{A} base class of @code{C} at a nonzero offset; 1542it should be placed at offset zero. G++ mistakenly believes that the 1543@code{A} data member of @code{B} is already at offset zero. 1544 1545@item 1546Names of template functions whose types involve @code{typename} or 1547template template parameters can be mangled incorrectly. 1548 1549@smallexample 1550template <typename Q> 1551void f(typename Q::X) @{@} 1552 1553template <template <typename> class Q> 1554void f(typename Q<int>::X) @{@} 1555@end smallexample 1556 1557@noindent 1558Instantiations of these templates may be mangled incorrectly. 1559 1560@end itemize 1561 1562@item -Wctor-dtor-privacy @r{(C++ only)} 1563@opindex Wctor-dtor-privacy 1564Warn when a class seems unusable because all the constructors or 1565destructors in that class are private, and it has neither friends nor 1566public static member functions. 1567 1568@item -Wnon-virtual-dtor @r{(C++ only)} 1569@opindex Wnon-virtual-dtor 1570Warn when a class appears to be polymorphic, thereby requiring a virtual 1571destructor, yet it declares a non-virtual one. 1572This warning is enabled by @option{-Wall}. 1573 1574@item -Wreorder @r{(C++ only)} 1575@opindex Wreorder 1576@cindex reordering, warning 1577@cindex warning for reordering of member initializers 1578Warn when the order of member initializers given in the code does not 1579match the order in which they must be executed. For instance: 1580 1581@smallexample 1582struct A @{ 1583 int i; 1584 int j; 1585 A(): j (0), i (1) @{ @} 1586@}; 1587@end smallexample 1588 1589The compiler will rearrange the member initializers for @samp{i} 1590and @samp{j} to match the declaration order of the members, emitting 1591a warning to that effect. This warning is enabled by @option{-Wall}. 1592@end table 1593 1594The following @option{-W@dots{}} options are not affected by @option{-Wall}. 1595 1596@table @gcctabopt 1597@item -Weffc++ @r{(C++ only)} 1598@opindex Weffc++ 1599Warn about violations of the following style guidelines from Scott Meyers' 1600@cite{Effective C++} book: 1601 1602@itemize @bullet 1603@item 1604Item 11: Define a copy constructor and an assignment operator for classes 1605with dynamically allocated memory. 1606 1607@item 1608Item 12: Prefer initialization to assignment in constructors. 1609 1610@item 1611Item 14: Make destructors virtual in base classes. 1612 1613@item 1614Item 15: Have @code{operator=} return a reference to @code{*this}. 1615 1616@item 1617Item 23: Don't try to return a reference when you must return an object. 1618 1619@end itemize 1620 1621Also warn about violations of the following style guidelines from 1622Scott Meyers' @cite{More Effective C++} book: 1623 1624@itemize @bullet 1625@item 1626Item 6: Distinguish between prefix and postfix forms of increment and 1627decrement operators. 1628 1629@item 1630Item 7: Never overload @code{&&}, @code{||}, or @code{,}. 1631 1632@end itemize 1633 1634When selecting this option, be aware that the standard library 1635headers do not obey all of these guidelines; use @samp{grep -v} 1636to filter out those warnings. 1637 1638@item -Wno-deprecated @r{(C++ only)} 1639@opindex Wno-deprecated 1640Do not warn about usage of deprecated features. @xref{Deprecated Features}. 1641 1642@item -Wno-non-template-friend @r{(C++ only)} 1643@opindex Wno-non-template-friend 1644Disable warnings when non-templatized friend functions are declared 1645within a template. Since the advent of explicit template specification 1646support in G++, if the name of the friend is an unqualified-id (i.e., 1647@samp{friend foo(int)}), the C++ language specification demands that the 1648friend declare or define an ordinary, nontemplate function. (Section 164914.5.3). Before G++ implemented explicit specification, unqualified-ids 1650could be interpreted as a particular specialization of a templatized 1651function. Because this non-conforming behavior is no longer the default 1652behavior for G++, @option{-Wnon-template-friend} allows the compiler to 1653check existing code for potential trouble spots and is on by default. 1654This new compiler behavior can be turned off with 1655@option{-Wno-non-template-friend} which keeps the conformant compiler code 1656but disables the helpful warning. 1657 1658@item -Wold-style-cast @r{(C++ only)} 1659@opindex Wold-style-cast 1660Warn if an old-style (C-style) cast to a non-void type is used within 1661a C++ program. The new-style casts (@samp{static_cast}, 1662@samp{reinterpret_cast}, and @samp{const_cast}) are less vulnerable to 1663unintended effects and much easier to search for. 1664 1665@item -Woverloaded-virtual @r{(C++ only)} 1666@opindex Woverloaded-virtual 1667@cindex overloaded virtual fn, warning 1668@cindex warning for overloaded virtual fn 1669Warn when a function declaration hides virtual functions from a 1670base class. For example, in: 1671 1672@smallexample 1673struct A @{ 1674 virtual void f(); 1675@}; 1676 1677struct B: public A @{ 1678 void f(int); 1679@}; 1680@end smallexample 1681 1682the @code{A} class version of @code{f} is hidden in @code{B}, and code 1683like: 1684 1685@smallexample 1686B* b; 1687b->f(); 1688@end smallexample 1689 1690will fail to compile. 1691 1692@item -Wno-pmf-conversions @r{(C++ only)} 1693@opindex Wno-pmf-conversions 1694Disable the diagnostic for converting a bound pointer to member function 1695to a plain pointer. 1696 1697@item -Wsign-promo @r{(C++ only)} 1698@opindex Wsign-promo 1699Warn when overload resolution chooses a promotion from unsigned or 1700enumerated type to a signed type, over a conversion to an unsigned type of 1701the same size. Previous versions of G++ would try to preserve 1702unsignedness, but the standard mandates the current behavior. 1703 1704@item -Wsynth @r{(C++ only)} 1705@opindex Wsynth 1706@cindex warning for synthesized methods 1707@cindex synthesized methods, warning 1708Warn when G++'s synthesis behavior does not match that of cfront. For 1709instance: 1710 1711@smallexample 1712struct A @{ 1713 operator int (); 1714 A& operator = (int); 1715@}; 1716 1717main () 1718@{ 1719 A a,b; 1720 a = b; 1721@} 1722@end smallexample 1723 1724In this example, G++ will synthesize a default @samp{A& operator = 1725(const A&);}, while cfront will use the user-defined @samp{operator =}. 1726@end table 1727 1728@node Objective-C Dialect Options 1729@section Options Controlling Objective-C Dialect 1730 1731@cindex compiler options, Objective-C 1732@cindex Objective-C options, command line 1733@cindex options, Objective-C 1734(NOTE: This manual does not describe the Objective-C language itself. See 1735@w{@uref{http://gcc.gnu.org/readings.html}} for references.) 1736 1737This section describes the command-line options that are only meaningful 1738for Objective-C programs, but you can also use most of the GNU compiler 1739options regardless of what language your program is in. For example, 1740you might compile a file @code{some_class.m} like this: 1741 1742@smallexample 1743gcc -g -fgnu-runtime -O -c some_class.m 1744@end smallexample 1745 1746@noindent 1747In this example, @option{-fgnu-runtime} is an option meant only for 1748Objective-C programs; you can use the other options with any language 1749supported by GCC@. 1750 1751Here is a list of options that are @emph{only} for compiling Objective-C 1752programs: 1753 1754@table @gcctabopt 1755@item -fconstant-string-class=@var{class-name} 1756@opindex fconstant-string-class 1757Use @var{class-name} as the name of the class to instantiate for each 1758literal string specified with the syntax @code{@@"@dots{}"}. The default 1759class name is @code{NXConstantString} if the GNU runtime is being used, and 1760@code{NSConstantString} if the NeXT runtime is being used (see below). The 1761@option{-fconstant-cfstrings} option, if also present, will override the 1762@option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals 1763to be laid out as constant CoreFoundation strings. 1764 1765@item -fgnu-runtime 1766@opindex fgnu-runtime 1767Generate object code compatible with the standard GNU Objective-C 1768runtime. This is the default for most types of systems. 1769 1770@item -fnext-runtime 1771@opindex fnext-runtime 1772Generate output compatible with the NeXT runtime. This is the default 1773for NeXT-based systems, including Darwin and Mac OS X@. The macro 1774@code{__NEXT_RUNTIME__} is predefined if (and only if) this option is 1775used. 1776 1777@item -fno-nil-receivers 1778@opindex fno-nil-receivers 1779Assume that all Objective-C message dispatches (e.g., 1780@code{[receiver message:arg]}) in this translation unit ensure that the receiver 1781is not @code{nil}. This allows for more efficient entry points in the runtime to be 1782used. Currently, this option is only available in conjunction with 1783the NeXT runtime on Mac OS X 10.3 and later. 1784 1785@item -fobjc-exceptions 1786@opindex fobjc-exceptions 1787Enable syntactic support for structured exception handling in Objective-C, 1788similar to what is offered by C++ and Java. Currently, this option is only 1789available in conjunction with the NeXT runtime on Mac OS X 10.3 and later. 1790 1791@smallexample 1792 @@try @{ 1793 @dots{} 1794 @@throw expr; 1795 @dots{} 1796 @} 1797 @@catch (AnObjCClass *exc) @{ 1798 @dots{} 1799 @@throw expr; 1800 @dots{} 1801 @@throw; 1802 @dots{} 1803 @} 1804 @@catch (AnotherClass *exc) @{ 1805 @dots{} 1806 @} 1807 @@catch (id allOthers) @{ 1808 @dots{} 1809 @} 1810 @@finally @{ 1811 @dots{} 1812 @@throw expr; 1813 @dots{} 1814 @} 1815@end smallexample 1816 1817The @code{@@throw} statement may appear anywhere in an Objective-C or 1818Objective-C++ program; when used inside of a @code{@@catch} block, the 1819@code{@@throw} may appear without an argument (as shown above), in which case 1820the object caught by the @code{@@catch} will be rethrown. 1821 1822Note that only (pointers to) Objective-C objects may be thrown and 1823caught using this scheme. When an object is thrown, it will be caught 1824by the nearest @code{@@catch} clause capable of handling objects of that type, 1825analogously to how @code{catch} blocks work in C++ and Java. A 1826@code{@@catch(id @dots{})} clause (as shown above) may also be provided to catch 1827any and all Objective-C exceptions not caught by previous @code{@@catch} 1828clauses (if any). 1829 1830The @code{@@finally} clause, if present, will be executed upon exit from the 1831immediately preceding @code{@@try @dots{} @@catch} section. This will happen 1832regardless of whether any exceptions are thrown, caught or rethrown 1833inside the @code{@@try @dots{} @@catch} section, analogously to the behavior 1834of the @code{finally} clause in Java. 1835 1836There are several caveats to using the new exception mechanism: 1837 1838@itemize @bullet 1839@item 1840Although currently designed to be binary compatible with @code{NS_HANDLER}-style 1841idioms provided by the @code{NSException} class, the new 1842exceptions can only be used on Mac OS X 10.3 (Panther) and later 1843systems, due to additional functionality needed in the (NeXT) Objective-C 1844runtime. 1845 1846@item 1847As mentioned above, the new exceptions do not support handling 1848types other than Objective-C objects. Furthermore, when used from 1849Objective-C++, the Objective-C exception model does not interoperate with C++ 1850exceptions at this time. This means you cannot @code{@@throw} an exception 1851from Objective-C and @code{catch} it in C++, or vice versa 1852(i.e., @code{throw @dots{} @@catch}). 1853@end itemize 1854 1855The @option{-fobjc-exceptions} switch also enables the use of synchronization 1856blocks for thread-safe execution: 1857 1858@smallexample 1859 @@synchronized (ObjCClass *guard) @{ 1860 @dots{} 1861 @} 1862@end smallexample 1863 1864Upon entering the @code{@@synchronized} block, a thread of execution shall 1865first check whether a lock has been placed on the corresponding @code{guard} 1866object by another thread. If it has, the current thread shall wait until 1867the other thread relinquishes its lock. Once @code{guard} becomes available, 1868the current thread will place its own lock on it, execute the code contained in 1869the @code{@@synchronized} block, and finally relinquish the lock (thereby 1870making @code{guard} available to other threads). 1871 1872Unlike Java, Objective-C does not allow for entire methods to be marked 1873@code{@@synchronized}. Note that throwing exceptions out of 1874@code{@@synchronized} blocks is allowed, and will cause the guarding object 1875to be unlocked properly. 1876 1877@item -freplace-objc-classes 1878@opindex freplace-objc-classes 1879Emit a special marker instructing @command{ld(1)} not to statically link in 1880the resulting object file, and allow @command{dyld(1)} to load it in at 1881run time instead. This is used in conjunction with the Fix-and-Continue 1882debugging mode, where the object file in question may be recompiled and 1883dynamically reloaded in the course of program execution, without the need 1884to restart the program itself. Currently, Fix-and-Continue functionality 1885is only available in conjunction with the NeXT runtime on Mac OS X 10.3 1886and later. 1887 1888@item -fzero-link 1889@opindex fzero-link 1890When compiling for the NeXT runtime, the compiler ordinarily replaces calls 1891to @code{objc_getClass("@dots{}")} (when the name of the class is known at 1892compile time) with static class references that get initialized at load time, 1893which improves run-time performance. Specifying the @option{-fzero-link} flag 1894suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")} 1895to be retained. This is useful in Zero-Link debugging mode, since it allows 1896for individual class implementations to be modified during program execution. 1897 1898@item -gen-decls 1899@opindex gen-decls 1900Dump interface declarations for all classes seen in the source file to a 1901file named @file{@var{sourcename}.decl}. 1902 1903@item -Wno-protocol 1904@opindex Wno-protocol 1905If a class is declared to implement a protocol, a warning is issued for 1906every method in the protocol that is not implemented by the class. The 1907default behavior is to issue a warning for every method not explicitly 1908implemented in the class, even if a method implementation is inherited 1909from the superclass. If you use the @code{-Wno-protocol} option, then 1910methods inherited from the superclass are considered to be implemented, 1911and no warning is issued for them. 1912 1913@item -Wselector 1914@opindex Wselector 1915Warn if multiple methods of different types for the same selector are 1916found during compilation. The check is performed on the list of methods 1917in the final stage of compilation. Additionally, a check is performed 1918for each selector appearing in a @code{@@selector(@dots{})} 1919expression, and a corresponding method for that selector has been found 1920during compilation. Because these checks scan the method table only at 1921the end of compilation, these warnings are not produced if the final 1922stage of compilation is not reached, for example because an error is 1923found during compilation, or because the @code{-fsyntax-only} option is 1924being used. 1925 1926@item -Wundeclared-selector 1927@opindex Wundeclared-selector 1928Warn if a @code{@@selector(@dots{})} expression referring to an 1929undeclared selector is found. A selector is considered undeclared if no 1930method with that name has been declared before the 1931@code{@@selector(@dots{})} expression, either explicitly in an 1932@code{@@interface} or @code{@@protocol} declaration, or implicitly in 1933an @code{@@implementation} section. This option always performs its 1934checks as soon as a @code{@@selector(@dots{})} expression is found, 1935while @code{-Wselector} only performs its checks in the final stage of 1936compilation. This also enforces the coding style convention 1937that methods and selectors must be declared before being used. 1938 1939@item -print-objc-runtime-info 1940@opindex print-objc-runtime-info 1941Generate C header describing the largest structure that is passed by 1942value, if any. 1943 1944@end table 1945 1946@node Language Independent Options 1947@section Options to Control Diagnostic Messages Formatting 1948@cindex options to control diagnostics formatting 1949@cindex diagnostic messages 1950@cindex message formatting 1951 1952Traditionally, diagnostic messages have been formatted irrespective of 1953the output device's aspect (e.g.@: its width, @dots{}). The options described 1954below can be used to control the diagnostic messages formatting 1955algorithm, e.g.@: how many characters per line, how often source location 1956information should be reported. Right now, only the C++ front end can 1957honor these options. However it is expected, in the near future, that 1958the remaining front ends would be able to digest them correctly. 1959 1960@table @gcctabopt 1961@item -fmessage-length=@var{n} 1962@opindex fmessage-length 1963Try to format error messages so that they fit on lines of about @var{n} 1964characters. The default is 72 characters for @command{g++} and 0 for the rest of 1965the front ends supported by GCC@. If @var{n} is zero, then no 1966line-wrapping will be done; each error message will appear on a single 1967line. 1968 1969@opindex fdiagnostics-show-location 1970@item -fdiagnostics-show-location=once 1971Only meaningful in line-wrapping mode. Instructs the diagnostic messages 1972reporter to emit @emph{once} source location information; that is, in 1973case the message is too long to fit on a single physical line and has to 1974be wrapped, the source location won't be emitted (as prefix) again, 1975over and over, in subsequent continuation lines. This is the default 1976behavior. 1977 1978@item -fdiagnostics-show-location=every-line 1979Only meaningful in line-wrapping mode. Instructs the diagnostic 1980messages reporter to emit the same source location information (as 1981prefix) for physical lines that result from the process of breaking 1982a message which is too long to fit on a single line. 1983 1984@end table 1985 1986@node Warning Options 1987@section Options to Request or Suppress Warnings 1988@cindex options to control warnings 1989@cindex warning messages 1990@cindex messages, warning 1991@cindex suppressing warnings 1992 1993Warnings are diagnostic messages that report constructions which 1994are not inherently erroneous but which are risky or suggest there 1995may have been an error. 1996 1997You can request many specific warnings with options beginning @samp{-W}, 1998for example @option{-Wimplicit} to request warnings on implicit 1999declarations. Each of these specific warning options also has a 2000negative form beginning @samp{-Wno-} to turn off warnings; 2001for example, @option{-Wno-implicit}. This manual lists only one of the 2002two forms, whichever is not the default. 2003 2004The following options control the amount and kinds of warnings produced 2005by GCC; for further, language-specific options also refer to 2006@ref{C++ Dialect Options} and @ref{Objective-C Dialect Options}. 2007 2008@table @gcctabopt 2009@cindex syntax checking 2010@item -fsyntax-only 2011@opindex fsyntax-only 2012Check the code for syntax errors, but don't do anything beyond that. 2013 2014@item -pedantic 2015@opindex pedantic 2016Issue all the warnings demanded by strict ISO C and ISO C++; 2017reject all programs that use forbidden extensions, and some other 2018programs that do not follow ISO C and ISO C++. For ISO C, follows the 2019version of the ISO C standard specified by any @option{-std} option used. 2020 2021Valid ISO C and ISO C++ programs should compile properly with or without 2022this option (though a rare few will require @option{-ansi} or a 2023@option{-std} option specifying the required version of ISO C)@. However, 2024without this option, certain GNU extensions and traditional C and C++ 2025features are supported as well. With this option, they are rejected. 2026 2027@option{-pedantic} does not cause warning messages for use of the 2028alternate keywords whose names begin and end with @samp{__}. Pedantic 2029warnings are also disabled in the expression that follows 2030@code{__extension__}. However, only system header files should use 2031these escape routes; application programs should avoid them. 2032@xref{Alternate Keywords}. 2033 2034Some users try to use @option{-pedantic} to check programs for strict ISO 2035C conformance. They soon find that it does not do quite what they want: 2036it finds some non-ISO practices, but not all---only those for which 2037ISO C @emph{requires} a diagnostic, and some others for which 2038diagnostics have been added. 2039 2040A feature to report any failure to conform to ISO C might be useful in 2041some instances, but would require considerable additional work and would 2042be quite different from @option{-pedantic}. We don't have plans to 2043support such a feature in the near future. 2044 2045Where the standard specified with @option{-std} represents a GNU 2046extended dialect of C, such as @samp{gnu89} or @samp{gnu99}, there is a 2047corresponding @dfn{base standard}, the version of ISO C on which the GNU 2048extended dialect is based. Warnings from @option{-pedantic} are given 2049where they are required by the base standard. (It would not make sense 2050for such warnings to be given only for features not in the specified GNU 2051C dialect, since by definition the GNU dialects of C include all 2052features the compiler supports with the given option, and there would be 2053nothing to warn about.) 2054 2055@item -pedantic-errors 2056@opindex pedantic-errors 2057Like @option{-pedantic}, except that errors are produced rather than 2058warnings. 2059 2060@item -w 2061@opindex w 2062Inhibit all warning messages. 2063 2064@item -Wno-import 2065@opindex Wno-import 2066Inhibit warning messages about the use of @samp{#import}. 2067 2068@item -Wchar-subscripts 2069@opindex Wchar-subscripts 2070Warn if an array subscript has type @code{char}. This is a common cause 2071of error, as programmers often forget that this type is signed on some 2072machines. 2073 2074@item -Wcomment 2075@opindex Wcomment 2076Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*} 2077comment, or whenever a Backslash-Newline appears in a @samp{//} comment. 2078 2079@item -Wformat 2080@opindex Wformat 2081Check calls to @code{printf} and @code{scanf}, etc., to make sure that 2082the arguments supplied have types appropriate to the format string 2083specified, and that the conversions specified in the format string make 2084sense. This includes standard functions, and others specified by format 2085attributes (@pxref{Function Attributes}), in the @code{printf}, 2086@code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension, 2087not in the C standard) families. 2088 2089The formats are checked against the format features supported by GNU 2090libc version 2.2. These include all ISO C90 and C99 features, as well 2091as features from the Single Unix Specification and some BSD and GNU 2092extensions. Other library implementations may not support all these 2093features; GCC does not support warning about features that go beyond a 2094particular library's limitations. However, if @option{-pedantic} is used 2095with @option{-Wformat}, warnings will be given about format features not 2096in the selected standard version (but not for @code{strfmon} formats, 2097since those are not in any version of the C standard). @xref{C Dialect 2098Options,,Options Controlling C Dialect}. 2099 2100Since @option{-Wformat} also checks for null format arguments for 2101several functions, @option{-Wformat} also implies @option{-Wnonnull}. 2102 2103@option{-Wformat} is included in @option{-Wall}. For more control over some 2104aspects of format checking, the options @option{-Wformat-y2k}, 2105@option{-Wno-format-extra-args}, @option{-Wno-format-zero-length}, 2106@option{-Wformat-nonliteral}, @option{-Wformat-security}, and 2107@option{-Wformat=2} are available, but are not included in @option{-Wall}. 2108 2109@item -Wformat-y2k 2110@opindex Wformat-y2k 2111If @option{-Wformat} is specified, also warn about @code{strftime} 2112formats which may yield only a two-digit year. 2113 2114@item -Wno-format-extra-args 2115@opindex Wno-format-extra-args 2116If @option{-Wformat} is specified, do not warn about excess arguments to a 2117@code{printf} or @code{scanf} format function. The C standard specifies 2118that such arguments are ignored. 2119 2120Where the unused arguments lie between used arguments that are 2121specified with @samp{$} operand number specifications, normally 2122warnings are still given, since the implementation could not know what 2123type to pass to @code{va_arg} to skip the unused arguments. However, 2124in the case of @code{scanf} formats, this option will suppress the 2125warning if the unused arguments are all pointers, since the Single 2126Unix Specification says that such unused arguments are allowed. 2127 2128@item -Wno-format-zero-length 2129@opindex Wno-format-zero-length 2130If @option{-Wformat} is specified, do not warn about zero-length formats. 2131The C standard specifies that zero-length formats are allowed. 2132 2133@item -Wformat-nonliteral 2134@opindex Wformat-nonliteral 2135If @option{-Wformat} is specified, also warn if the format string is not a 2136string literal and so cannot be checked, unless the format function 2137takes its format arguments as a @code{va_list}. 2138 2139@item -Wformat-security 2140@opindex Wformat-security 2141If @option{-Wformat} is specified, also warn about uses of format 2142functions that represent possible security problems. At present, this 2143warns about calls to @code{printf} and @code{scanf} functions where the 2144format string is not a string literal and there are no format arguments, 2145as in @code{printf (foo);}. This may be a security hole if the format 2146string came from untrusted input and contains @samp{%n}. (This is 2147currently a subset of what @option{-Wformat-nonliteral} warns about, but 2148in future warnings may be added to @option{-Wformat-security} that are not 2149included in @option{-Wformat-nonliteral}.) 2150 2151@item -Wformat=2 2152@opindex Wformat=2 2153Enable @option{-Wformat} plus format checks not included in 2154@option{-Wformat}. Currently equivalent to @samp{-Wformat 2155-Wformat-nonliteral -Wformat-security -Wformat-y2k}. 2156 2157@item -Wnonnull 2158@opindex Wnonnull 2159Warn about passing a null pointer for arguments marked as 2160requiring a non-null value by the @code{nonnull} function attribute. 2161 2162@option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}. It 2163can be disabled with the @option{-Wno-nonnull} option. 2164 2165@item -Winit-self @r{(C, C++, and Objective-C only)} 2166@opindex Winit-self 2167Warn about uninitialized variables which are initialized with themselves. 2168Note this option can only be used with the @option{-Wuninitialized} option, 2169which in turn only works with @option{-O1} and above. 2170 2171For example, GCC will warn about @code{i} being uninitialized in the 2172following snippet only when @option{-Winit-self} has been specified: 2173@smallexample 2174@group 2175int f() 2176@{ 2177 int i = i; 2178 return i; 2179@} 2180@end group 2181@end smallexample 2182 2183@item -Wimplicit-int 2184@opindex Wimplicit-int 2185Warn when a declaration does not specify a type. 2186 2187@item -Wimplicit-function-declaration 2188@itemx -Werror-implicit-function-declaration 2189@opindex Wimplicit-function-declaration 2190@opindex Werror-implicit-function-declaration 2191Give a warning (or error) whenever a function is used before being 2192declared. 2193 2194@item -Wimplicit 2195@opindex Wimplicit 2196Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}. 2197 2198@item -Wmain 2199@opindex Wmain 2200Warn if the type of @samp{main} is suspicious. @samp{main} should be a 2201function with external linkage, returning int, taking either zero 2202arguments, two, or three arguments of appropriate types. 2203 2204@item -Wmissing-braces 2205@opindex Wmissing-braces 2206Warn if an aggregate or union initializer is not fully bracketed. In 2207the following example, the initializer for @samp{a} is not fully 2208bracketed, but that for @samp{b} is fully bracketed. 2209 2210@smallexample 2211int a[2][2] = @{ 0, 1, 2, 3 @}; 2212int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @}; 2213@end smallexample 2214 2215@item -Wparentheses 2216@opindex Wparentheses 2217Warn if parentheses are omitted in certain contexts, such 2218as when there is an assignment in a context where a truth value 2219is expected, or when operators are nested whose precedence people 2220often get confused about. 2221 2222Also warn about constructions where there may be confusion to which 2223@code{if} statement an @code{else} branch belongs. Here is an example of 2224such a case: 2225 2226@smallexample 2227@group 2228@{ 2229 if (a) 2230 if (b) 2231 foo (); 2232 else 2233 bar (); 2234@} 2235@end group 2236@end smallexample 2237 2238In C, every @code{else} branch belongs to the innermost possible @code{if} 2239statement, which in this example is @code{if (b)}. This is often not 2240what the programmer expected, as illustrated in the above example by 2241indentation the programmer chose. When there is the potential for this 2242confusion, GCC will issue a warning when this flag is specified. 2243To eliminate the warning, add explicit braces around the innermost 2244@code{if} statement so there is no way the @code{else} could belong to 2245the enclosing @code{if}. The resulting code would look like this: 2246 2247@smallexample 2248@group 2249@{ 2250 if (a) 2251 @{ 2252 if (b) 2253 foo (); 2254 else 2255 bar (); 2256 @} 2257@} 2258@end group 2259@end smallexample 2260 2261@item -Wsequence-point 2262@opindex Wsequence-point 2263Warn about code that may have undefined semantics because of violations 2264of sequence point rules in the C standard. 2265 2266The C standard defines the order in which expressions in a C program are 2267evaluated in terms of @dfn{sequence points}, which represent a partial 2268ordering between the execution of parts of the program: those executed 2269before the sequence point, and those executed after it. These occur 2270after the evaluation of a full expression (one which is not part of a 2271larger expression), after the evaluation of the first operand of a 2272@code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a 2273function is called (but after the evaluation of its arguments and the 2274expression denoting the called function), and in certain other places. 2275Other than as expressed by the sequence point rules, the order of 2276evaluation of subexpressions of an expression is not specified. All 2277these rules describe only a partial order rather than a total order, 2278since, for example, if two functions are called within one expression 2279with no sequence point between them, the order in which the functions 2280are called is not specified. However, the standards committee have 2281ruled that function calls do not overlap. 2282 2283It is not specified when between sequence points modifications to the 2284values of objects take effect. Programs whose behavior depends on this 2285have undefined behavior; the C standard specifies that ``Between the 2286previous and next sequence point an object shall have its stored value 2287modified at most once by the evaluation of an expression. Furthermore, 2288the prior value shall be read only to determine the value to be 2289stored.''. If a program breaks these rules, the results on any 2290particular implementation are entirely unpredictable. 2291 2292Examples of code with undefined behavior are @code{a = a++;}, @code{a[n] 2293= b[n++]} and @code{a[i++] = i;}. Some more complicated cases are not 2294diagnosed by this option, and it may give an occasional false positive 2295result, but in general it has been found fairly effective at detecting 2296this sort of problem in programs. 2297 2298The present implementation of this option only works for C programs. A 2299future implementation may also work for C++ programs. 2300 2301The C standard is worded confusingly, therefore there is some debate 2302over the precise meaning of the sequence point rules in subtle cases. 2303Links to discussions of the problem, including proposed formal 2304definitions, may be found on the GCC readings page, at 2305@w{@uref{http://gcc.gnu.org/readings.html}}. 2306 2307@item -Wreturn-type 2308@opindex Wreturn-type 2309Warn whenever a function is defined with a return-type that defaults to 2310@code{int}. Also warn about any @code{return} statement with no 2311return-value in a function whose return-type is not @code{void}. 2312 2313For C++, a function without return type always produces a diagnostic 2314message, even when @option{-Wno-return-type} is specified. The only 2315exceptions are @samp{main} and functions defined in system headers. 2316 2317@item -Wswitch 2318@opindex Wswitch 2319Warn whenever a @code{switch} statement has an index of enumerated type 2320and lacks a @code{case} for one or more of the named codes of that 2321enumeration. (The presence of a @code{default} label prevents this 2322warning.) @code{case} labels outside the enumeration range also 2323provoke warnings when this option is used. 2324 2325@item -Wswitch-default 2326@opindex Wswitch-switch 2327Warn whenever a @code{switch} statement does not have a @code{default} 2328case. 2329 2330@item -Wswitch-enum 2331@opindex Wswitch-enum 2332Warn whenever a @code{switch} statement has an index of enumerated type 2333and lacks a @code{case} for one or more of the named codes of that 2334enumeration. @code{case} labels outside the enumeration range also 2335provoke warnings when this option is used. 2336 2337@item -Wtrigraphs 2338@opindex Wtrigraphs 2339Warn if any trigraphs are encountered that might change the meaning of 2340the program (trigraphs within comments are not warned about). 2341 2342@item -Wunused-function 2343@opindex Wunused-function 2344Warn whenever a static function is declared but not defined or a 2345non\-inline static function is unused. 2346 2347@item -Wunused-label 2348@opindex Wunused-label 2349Warn whenever a label is declared but not used. 2350 2351To suppress this warning use the @samp{unused} attribute 2352(@pxref{Variable Attributes}). 2353 2354@item -Wunused-parameter 2355@opindex Wunused-parameter 2356Warn whenever a function parameter is unused aside from its declaration. 2357 2358To suppress this warning use the @samp{unused} attribute 2359(@pxref{Variable Attributes}). 2360 2361@item -Wunused-variable 2362@opindex Wunused-variable 2363Warn whenever a local variable or non-constant static variable is unused 2364aside from its declaration 2365 2366To suppress this warning use the @samp{unused} attribute 2367(@pxref{Variable Attributes}). 2368 2369@item -Wunused-value 2370@opindex Wunused-value 2371Warn whenever a statement computes a result that is explicitly not used. 2372 2373To suppress this warning cast the expression to @samp{void}. 2374 2375@item -Wunused 2376@opindex Wunused 2377All the above @option{-Wunused} options combined. 2378 2379In order to get a warning about an unused function parameter, you must 2380either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies 2381@samp{-Wunused}), or separately specify @option{-Wunused-parameter}. 2382 2383@item -Wuninitialized 2384@opindex Wuninitialized 2385Warn if an automatic variable is used without first being initialized or 2386if a variable may be clobbered by a @code{setjmp} call. 2387 2388These warnings are possible only in optimizing compilation, 2389because they require data flow information that is computed only 2390when optimizing. If you don't specify @option{-O}, you simply won't 2391get these warnings. 2392 2393If you want to warn about code which uses the uninitialized value of the 2394variable in its own initializer, use the @option{-Winit-self} option. 2395 2396These warnings occur only for variables that are candidates for 2397register allocation. Therefore, they do not occur for a variable that 2398is declared @code{volatile}, or whose address is taken, or whose size 2399is other than 1, 2, 4 or 8 bytes. Also, they do not occur for 2400structures, unions or arrays, even when they are in registers. 2401 2402Note that there may be no warning about a variable that is used only 2403to compute a value that itself is never used, because such 2404computations may be deleted by data flow analysis before the warnings 2405are printed. 2406 2407These warnings are made optional because GCC is not smart 2408enough to see all the reasons why the code might be correct 2409despite appearing to have an error. Here is one example of how 2410this can happen: 2411 2412@smallexample 2413@group 2414@{ 2415 int x; 2416 switch (y) 2417 @{ 2418 case 1: x = 1; 2419 break; 2420 case 2: x = 4; 2421 break; 2422 case 3: x = 5; 2423 @} 2424 foo (x); 2425@} 2426@end group 2427@end smallexample 2428 2429@noindent 2430If the value of @code{y} is always 1, 2 or 3, then @code{x} is 2431always initialized, but GCC doesn't know this. Here is 2432another common case: 2433 2434@smallexample 2435@{ 2436 int save_y; 2437 if (change_y) save_y = y, y = new_y; 2438 @dots{} 2439 if (change_y) y = save_y; 2440@} 2441@end smallexample 2442 2443@noindent 2444This has no bug because @code{save_y} is used only if it is set. 2445 2446@cindex @code{longjmp} warnings 2447This option also warns when a non-volatile automatic variable might be 2448changed by a call to @code{longjmp}. These warnings as well are possible 2449only in optimizing compilation. 2450 2451The compiler sees only the calls to @code{setjmp}. It cannot know 2452where @code{longjmp} will be called; in fact, a signal handler could 2453call it at any point in the code. As a result, you may get a warning 2454even when there is in fact no problem because @code{longjmp} cannot 2455in fact be called at the place which would cause a problem. 2456 2457Some spurious warnings can be avoided if you declare all the functions 2458you use that never return as @code{noreturn}. @xref{Function 2459Attributes}. 2460 2461@item -Wunknown-pragmas 2462@opindex Wunknown-pragmas 2463@cindex warning for unknown pragmas 2464@cindex unknown pragmas, warning 2465@cindex pragmas, warning of unknown 2466Warn when a #pragma directive is encountered which is not understood by 2467GCC@. If this command line option is used, warnings will even be issued 2468for unknown pragmas in system header files. This is not the case if 2469the warnings were only enabled by the @option{-Wall} command line option. 2470 2471@item -Wstrict-aliasing 2472@opindex Wstrict-aliasing 2473This option is only active when @option{-fstrict-aliasing} is active. 2474It warns about code which might break the strict aliasing rules that the 2475compiler is using for optimization. The warning does not catch all 2476cases, but does attempt to catch the more common pitfalls. It is 2477included in @option{-Wall}. 2478 2479@item -Wall 2480@opindex Wall 2481All of the above @samp{-W} options combined. This enables all the 2482warnings about constructions that some users consider questionable, and 2483that are easy to avoid (or modify to prevent the warning), even in 2484conjunction with macros. This also enables some language-specific 2485warnings described in @ref{C++ Dialect Options} and 2486@ref{Objective-C Dialect Options}. 2487@end table 2488 2489The following @option{-W@dots{}} options are not implied by @option{-Wall}. 2490Some of them warn about constructions that users generally do not 2491consider questionable, but which occasionally you might wish to check 2492for; others warn about constructions that are necessary or hard to avoid 2493in some cases, and there is no simple way to modify the code to suppress 2494the warning. 2495 2496@table @gcctabopt 2497@item -Wextra 2498@opindex W 2499@opindex Wextra 2500(This option used to be called @option{-W}. The older name is still 2501supported, but the newer name is more descriptive.) Print extra warning 2502messages for these events: 2503 2504@itemize @bullet 2505@item 2506A function can return either with or without a value. (Falling 2507off the end of the function body is considered returning without 2508a value.) For example, this function would evoke such a 2509warning: 2510 2511@smallexample 2512@group 2513foo (a) 2514@{ 2515 if (a > 0) 2516 return a; 2517@} 2518@end group 2519@end smallexample 2520 2521@item 2522An expression-statement or the left-hand side of a comma expression 2523contains no side effects. 2524To suppress the warning, cast the unused expression to void. 2525For example, an expression such as @samp{x[i,j]} will cause a warning, 2526but @samp{x[(void)i,j]} will not. 2527 2528@item 2529An unsigned value is compared against zero with @samp{<} or @samp{>=}. 2530 2531@item 2532A comparison like @samp{x<=y<=z} appears; this is equivalent to 2533@samp{(x<=y ? 1 : 0) <= z}, which is a different interpretation from 2534that of ordinary mathematical notation. 2535 2536@item 2537Storage-class specifiers like @code{static} are not the first things in 2538a declaration. According to the C Standard, this usage is obsolescent. 2539 2540@item 2541The return type of a function has a type qualifier such as @code{const}. 2542Such a type qualifier has no effect, since the value returned by a 2543function is not an lvalue. (But don't warn about the GNU extension of 2544@code{volatile void} return types. That extension will be warned about 2545if @option{-pedantic} is specified.) 2546 2547@item 2548If @option{-Wall} or @option{-Wunused} is also specified, warn about unused 2549arguments. 2550 2551@item 2552A comparison between signed and unsigned values could produce an 2553incorrect result when the signed value is converted to unsigned. 2554(But don't warn if @option{-Wno-sign-compare} is also specified.) 2555 2556@item 2557An aggregate has an initializer which does not initialize all members. 2558For example, the following code would cause such a warning, because 2559@code{x.h} would be implicitly initialized to zero: 2560 2561@smallexample 2562struct s @{ int f, g, h; @}; 2563struct s x = @{ 3, 4 @}; 2564@end smallexample 2565 2566@item 2567A function parameter is declared without a type specifier in K&R-style 2568functions: 2569 2570@smallexample 2571void foo(bar) @{ @} 2572@end smallexample 2573 2574@item 2575An empty body occurs in an @samp{if} or @samp{else} statement. 2576 2577@item 2578A pointer is compared against integer zero with @samp{<}, @samp{<=}, 2579@samp{>}, or @samp{>=}. 2580 2581@item 2582A variable might be changed by @samp{longjmp} or @samp{vfork}. 2583 2584@item 2585Any of several floating-point events that often indicate errors, such as 2586overflow, underflow, loss of precision, etc. 2587 2588@item @r{(C++ only)} 2589An enumerator and a non-enumerator both appear in a conditional expression. 2590 2591@item @r{(C++ only)} 2592A non-static reference or non-static @samp{const} member appears in a 2593class without constructors. 2594 2595@item @r{(C++ only)} 2596Ambiguous virtual bases. 2597 2598@item @r{(C++ only)} 2599Subscripting an array which has been declared @samp{register}. 2600 2601@item @r{(C++ only)} 2602Taking the address of a variable which has been declared @samp{register}. 2603 2604@item @r{(C++ only)} 2605A base class is not initialized in a derived class' copy constructor. 2606@end itemize 2607 2608@item -Wno-div-by-zero 2609@opindex Wno-div-by-zero 2610@opindex Wdiv-by-zero 2611Do not warn about compile-time integer division by zero. Floating point 2612division by zero is not warned about, as it can be a legitimate way of 2613obtaining infinities and NaNs. 2614 2615@item -Wsystem-headers 2616@opindex Wsystem-headers 2617@cindex warnings from system headers 2618@cindex system headers, warnings from 2619Print warning messages for constructs found in system header files. 2620Warnings from system headers are normally suppressed, on the assumption 2621that they usually do not indicate real problems and would only make the 2622compiler output harder to read. Using this command line option tells 2623GCC to emit warnings from system headers as if they occurred in user 2624code. However, note that using @option{-Wall} in conjunction with this 2625option will @emph{not} warn about unknown pragmas in system 2626headers---for that, @option{-Wunknown-pragmas} must also be used. 2627 2628@item -Wfloat-equal 2629@opindex Wfloat-equal 2630Warn if floating point values are used in equality comparisons. 2631 2632The idea behind this is that sometimes it is convenient (for the 2633programmer) to consider floating-point values as approximations to 2634infinitely precise real numbers. If you are doing this, then you need 2635to compute (by analyzing the code, or in some other way) the maximum or 2636likely maximum error that the computation introduces, and allow for it 2637when performing comparisons (and when producing output, but that's a 2638different problem). In particular, instead of testing for equality, you 2639would check to see whether the two values have ranges that overlap; and 2640this is done with the relational operators, so equality comparisons are 2641probably mistaken. 2642 2643@item -Wtraditional @r{(C only)} 2644@opindex Wtraditional 2645Warn about certain constructs that behave differently in traditional and 2646ISO C@. Also warn about ISO C constructs that have no traditional C 2647equivalent, and/or problematic constructs which should be avoided. 2648 2649@itemize @bullet 2650@item 2651Macro parameters that appear within string literals in the macro body. 2652In traditional C macro replacement takes place within string literals, 2653but does not in ISO C@. 2654 2655@item 2656In traditional C, some preprocessor directives did not exist. 2657Traditional preprocessors would only consider a line to be a directive 2658if the @samp{#} appeared in column 1 on the line. Therefore 2659@option{-Wtraditional} warns about directives that traditional C 2660understands but would ignore because the @samp{#} does not appear as the 2661first character on the line. It also suggests you hide directives like 2662@samp{#pragma} not understood by traditional C by indenting them. Some 2663traditional implementations would not recognize @samp{#elif}, so it 2664suggests avoiding it altogether. 2665 2666@item 2667A function-like macro that appears without arguments. 2668 2669@item 2670The unary plus operator. 2671 2672@item 2673The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating point 2674constant suffixes. (Traditional C does support the @samp{L} suffix on integer 2675constants.) Note, these suffixes appear in macros defined in the system 2676headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}. 2677Use of these macros in user code might normally lead to spurious 2678warnings, however GCC's integrated preprocessor has enough context to 2679avoid warning in these cases. 2680 2681@item 2682A function declared external in one block and then used after the end of 2683the block. 2684 2685@item 2686A @code{switch} statement has an operand of type @code{long}. 2687 2688@item 2689A non-@code{static} function declaration follows a @code{static} one. 2690This construct is not accepted by some traditional C compilers. 2691 2692@item 2693The ISO type of an integer constant has a different width or 2694signedness from its traditional type. This warning is only issued if 2695the base of the constant is ten. I.e.@: hexadecimal or octal values, which 2696typically represent bit patterns, are not warned about. 2697 2698@item 2699Usage of ISO string concatenation is detected. 2700 2701@item 2702Initialization of automatic aggregates. 2703 2704@item 2705Identifier conflicts with labels. Traditional C lacks a separate 2706namespace for labels. 2707 2708@item 2709Initialization of unions. If the initializer is zero, the warning is 2710omitted. This is done under the assumption that the zero initializer in 2711user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing 2712initializer warnings and relies on default initialization to zero in the 2713traditional C case. 2714 2715@item 2716Conversions by prototypes between fixed/floating point values and vice 2717versa. The absence of these prototypes when compiling with traditional 2718C would cause serious problems. This is a subset of the possible 2719conversion warnings, for the full set use @option{-Wconversion}. 2720 2721@item 2722Use of ISO C style function definitions. This warning intentionally is 2723@emph{not} issued for prototype declarations or variadic functions 2724because these ISO C features will appear in your code when using 2725libiberty's traditional C compatibility macros, @code{PARAMS} and 2726@code{VPARAMS}. This warning is also bypassed for nested functions 2727because that feature is already a GCC extension and thus not relevant to 2728traditional C compatibility. 2729@end itemize 2730 2731@item -Wdeclaration-after-statement @r{(C only)} 2732@opindex Wdeclaration-after-statement 2733Warn when a declaration is found after a statement in a block. This 2734construct, known from C++, was introduced with ISO C99 and is by default 2735allowed in GCC@. It is not supported by ISO C90 and was not supported by 2736GCC versions before GCC 3.0. @xref{Mixed Declarations}. 2737 2738@item -Wundef 2739@opindex Wundef 2740Warn if an undefined identifier is evaluated in an @samp{#if} directive. 2741 2742@item -Wendif-labels 2743@opindex Wendif-labels 2744Warn whenever an @samp{#else} or an @samp{#endif} are followed by text. 2745 2746@item -Wshadow 2747@opindex Wshadow 2748Warn whenever a local variable shadows another local variable, parameter or 2749global variable or whenever a built-in function is shadowed. 2750 2751@item -Wlarger-than-@var{len} 2752@opindex Wlarger-than 2753Warn whenever an object of larger than @var{len} bytes is defined. 2754 2755@item -Wpointer-arith 2756@opindex Wpointer-arith 2757Warn about anything that depends on the ``size of'' a function type or 2758of @code{void}. GNU C assigns these types a size of 1, for 2759convenience in calculations with @code{void *} pointers and pointers 2760to functions. 2761 2762@item -Wbad-function-cast @r{(C only)} 2763@opindex Wbad-function-cast 2764Warn whenever a function call is cast to a non-matching type. 2765For example, warn if @code{int malloc()} is cast to @code{anything *}. 2766 2767@item -Wcast-qual 2768@opindex Wcast-qual 2769Warn whenever a pointer is cast so as to remove a type qualifier from 2770the target type. For example, warn if a @code{const char *} is cast 2771to an ordinary @code{char *}. 2772 2773@item -Wcast-align 2774@opindex Wcast-align 2775Warn whenever a pointer is cast such that the required alignment of the 2776target is increased. For example, warn if a @code{char *} is cast to 2777an @code{int *} on machines where integers can only be accessed at 2778two- or four-byte boundaries. 2779 2780@item -Wwrite-strings 2781@opindex Wwrite-strings 2782When compiling C, give string constants the type @code{const 2783char[@var{length}]} so that 2784copying the address of one into a non-@code{const} @code{char *} 2785pointer will get a warning; when compiling C++, warn about the 2786deprecated conversion from string constants to @code{char *}. 2787These warnings will help you find at 2788compile time code that can try to write into a string constant, but 2789only if you have been very careful about using @code{const} in 2790declarations and prototypes. Otherwise, it will just be a nuisance; 2791this is why we did not make @option{-Wall} request these warnings. 2792 2793@item -Wconversion 2794@opindex Wconversion 2795Warn if a prototype causes a type conversion that is different from what 2796would happen to the same argument in the absence of a prototype. This 2797includes conversions of fixed point to floating and vice versa, and 2798conversions changing the width or signedness of a fixed point argument 2799except when the same as the default promotion. 2800 2801Also, warn if a negative integer constant expression is implicitly 2802converted to an unsigned type. For example, warn about the assignment 2803@code{x = -1} if @code{x} is unsigned. But do not warn about explicit 2804casts like @code{(unsigned) -1}. 2805 2806@item -Wsign-compare 2807@opindex Wsign-compare 2808@cindex warning for comparison of signed and unsigned values 2809@cindex comparison of signed and unsigned values, warning 2810@cindex signed and unsigned values, comparison warning 2811Warn when a comparison between signed and unsigned values could produce 2812an incorrect result when the signed value is converted to unsigned. 2813This warning is also enabled by @option{-Wextra}; to get the other warnings 2814of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}. 2815 2816@item -Waggregate-return 2817@opindex Waggregate-return 2818Warn if any functions that return structures or unions are defined or 2819called. (In languages where you can return an array, this also elicits 2820a warning.) 2821 2822@item -Wstrict-prototypes @r{(C only)} 2823@opindex Wstrict-prototypes 2824Warn if a function is declared or defined without specifying the 2825argument types. (An old-style function definition is permitted without 2826a warning if preceded by a declaration which specifies the argument 2827types.) 2828 2829@item -Wold-style-definition @r{(C only)} 2830@opindex Wold-style-definition 2831Warn if an old-style function definition is used. A warning is given 2832even if there is a previous prototype. 2833 2834@item -Wmissing-prototypes @r{(C only)} 2835@opindex Wmissing-prototypes 2836Warn if a global function is defined without a previous prototype 2837declaration. This warning is issued even if the definition itself 2838provides a prototype. The aim is to detect global functions that fail 2839to be declared in header files. 2840 2841@item -Wmissing-declarations @r{(C only)} 2842@opindex Wmissing-declarations 2843Warn if a global function is defined without a previous declaration. 2844Do so even if the definition itself provides a prototype. 2845Use this option to detect global functions that are not declared in 2846header files. 2847 2848@item -Wmissing-noreturn 2849@opindex Wmissing-noreturn 2850Warn about functions which might be candidates for attribute @code{noreturn}. 2851Note these are only possible candidates, not absolute ones. Care should 2852be taken to manually verify functions actually do not ever return before 2853adding the @code{noreturn} attribute, otherwise subtle code generation 2854bugs could be introduced. You will not get a warning for @code{main} in 2855hosted C environments. 2856 2857@item -Wmissing-format-attribute 2858@opindex Wmissing-format-attribute 2859@opindex Wformat 2860If @option{-Wformat} is enabled, also warn about functions which might be 2861candidates for @code{format} attributes. Note these are only possible 2862candidates, not absolute ones. GCC will guess that @code{format} 2863attributes might be appropriate for any function that calls a function 2864like @code{vprintf} or @code{vscanf}, but this might not always be the 2865case, and some functions for which @code{format} attributes are 2866appropriate may not be detected. This option has no effect unless 2867@option{-Wformat} is enabled (possibly by @option{-Wall}). 2868 2869@item -Wno-multichar 2870@opindex Wno-multichar 2871@opindex Wmultichar 2872Do not warn if a multicharacter constant (@samp{'FOOF'}) is used. 2873Usually they indicate a typo in the user's code, as they have 2874implementation-defined values, and should not be used in portable code. 2875 2876@item -Wno-deprecated-declarations 2877@opindex Wno-deprecated-declarations 2878Do not warn about uses of functions, variables, and types marked as 2879deprecated by using the @code{deprecated} attribute. 2880(@pxref{Function Attributes}, @pxref{Variable Attributes}, 2881@pxref{Type Attributes}.) 2882 2883@item -Wpacked 2884@opindex Wpacked 2885Warn if a structure is given the packed attribute, but the packed 2886attribute has no effect on the layout or size of the structure. 2887Such structures may be mis-aligned for little benefit. For 2888instance, in this code, the variable @code{f.x} in @code{struct bar} 2889will be misaligned even though @code{struct bar} does not itself 2890have the packed attribute: 2891 2892@smallexample 2893@group 2894struct foo @{ 2895 int x; 2896 char a, b, c, d; 2897@} __attribute__((packed)); 2898struct bar @{ 2899 char z; 2900 struct foo f; 2901@}; 2902@end group 2903@end smallexample 2904 2905@item -Wpadded 2906@opindex Wpadded 2907Warn if padding is included in a structure, either to align an element 2908of the structure or to align the whole structure. Sometimes when this 2909happens it is possible to rearrange the fields of the structure to 2910reduce the padding and so make the structure smaller. 2911 2912@item -Wredundant-decls 2913@opindex Wredundant-decls 2914Warn if anything is declared more than once in the same scope, even in 2915cases where multiple declaration is valid and changes nothing. 2916 2917@item -Wnested-externs @r{(C only)} 2918@opindex Wnested-externs 2919Warn if an @code{extern} declaration is encountered within a function. 2920 2921@item -Wunreachable-code 2922@opindex Wunreachable-code 2923Warn if the compiler detects that code will never be executed. 2924 2925This option is intended to warn when the compiler detects that at 2926least a whole line of source code will never be executed, because 2927some condition is never satisfied or because it is after a 2928procedure that never returns. 2929 2930It is possible for this option to produce a warning even though there 2931are circumstances under which part of the affected line can be executed, 2932so care should be taken when removing apparently-unreachable code. 2933 2934For instance, when a function is inlined, a warning may mean that the 2935line is unreachable in only one inlined copy of the function. 2936 2937This option is not made part of @option{-Wall} because in a debugging 2938version of a program there is often substantial code which checks 2939correct functioning of the program and is, hopefully, unreachable 2940because the program does work. Another common use of unreachable 2941code is to provide behavior which is selectable at compile-time. 2942 2943@item -Winline 2944@opindex Winline 2945Warn if a function can not be inlined and it was declared as inline. 2946Even with this option, the compiler will not warn about failures to 2947inline functions declared in system headers. 2948 2949The compiler uses a variety of heuristics to determine whether or not 2950to inline a function. For example, the compiler takes into account 2951the size of the function being inlined and the the amount of inlining 2952that has already been done in the current function. Therefore, 2953seemingly insignificant changes in the source program can cause the 2954warnings produced by @option{-Winline} to appear or disappear. 2955 2956@item -Wno-invalid-offsetof @r{(C++ only)} 2957@opindex Wno-invalid-offsetof 2958Suppress warnings from applying the @samp{offsetof} macro to a non-POD 2959type. According to the 1998 ISO C++ standard, applying @samp{offsetof} 2960to a non-POD type is undefined. In existing C++ implementations, 2961however, @samp{offsetof} typically gives meaningful results even when 2962applied to certain kinds of non-POD types. (Such as a simple 2963@samp{struct} that fails to be a POD type only by virtue of having a 2964constructor.) This flag is for users who are aware that they are 2965writing nonportable code and who have deliberately chosen to ignore the 2966warning about it. 2967 2968The restrictions on @samp{offsetof} may be relaxed in a future version 2969of the C++ standard. 2970 2971@item -Winvalid-pch 2972@opindex Winvalid-pch 2973Warn if a precompiled header (@pxref{Precompiled Headers}) is found in 2974the search path but can't be used. 2975 2976@item -Wlong-long 2977@opindex Wlong-long 2978@opindex Wno-long-long 2979Warn if @samp{long long} type is used. This is default. To inhibit 2980the warning messages, use @option{-Wno-long-long}. Flags 2981@option{-Wlong-long} and @option{-Wno-long-long} are taken into account 2982only when @option{-pedantic} flag is used. 2983 2984@item -Wdisabled-optimization 2985@opindex Wdisabled-optimization 2986Warn if a requested optimization pass is disabled. This warning does 2987not generally indicate that there is anything wrong with your code; it 2988merely indicates that GCC's optimizers were unable to handle the code 2989effectively. Often, the problem is that your code is too big or too 2990complex; GCC will refuse to optimize programs when the optimization 2991itself is likely to take inordinate amounts of time. 2992 2993@item -Werror 2994@opindex Werror 2995Make all warnings into errors. 2996@end table 2997 2998@node Debugging Options 2999@section Options for Debugging Your Program or GCC 3000@cindex options, debugging 3001@cindex debugging information options 3002 3003GCC has various special options that are used for debugging 3004either your program or GCC: 3005 3006@table @gcctabopt 3007@item -g 3008@opindex g 3009Produce debugging information in the operating system's native format 3010(stabs, COFF, XCOFF, or DWARF)@. GDB can work with this debugging 3011information. 3012 3013On most systems that use stabs format, @option{-g} enables use of extra 3014debugging information that only GDB can use; this extra information 3015makes debugging work better in GDB but will probably make other debuggers 3016crash or 3017refuse to read the program. If you want to control for certain whether 3018to generate the extra information, use @option{-gstabs+}, @option{-gstabs}, 3019@option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below). 3020 3021Unlike most other C compilers, GCC allows you to use @option{-g} with 3022@option{-O}. The shortcuts taken by optimized code may occasionally 3023produce surprising results: some variables you declared may not exist 3024at all; flow of control may briefly move where you did not expect it; 3025some statements may not be executed because they compute constant 3026results or their values were already at hand; some statements may 3027execute in different places because they were moved out of loops. 3028 3029Nevertheless it proves possible to debug optimized output. This makes 3030it reasonable to use the optimizer for programs that might have bugs. 3031 3032The following options are useful when GCC is generated with the 3033capability for more than one debugging format. 3034 3035@item -ggdb 3036@opindex ggdb 3037Produce debugging information for use by GDB@. This means to use the 3038most expressive format available (DWARF 2, stabs, or the native format 3039if neither of those are supported), including GDB extensions if at all 3040possible. 3041 3042@item -gstabs 3043@opindex gstabs 3044Produce debugging information in stabs format (if that is supported), 3045without GDB extensions. This is the format used by DBX on most BSD 3046systems. On MIPS, Alpha and System V Release 4 systems this option 3047produces stabs debugging output which is not understood by DBX or SDB@. 3048On System V Release 4 systems this option requires the GNU assembler. 3049 3050@item -feliminate-unused-debug-symbols 3051@opindex feliminate-unused-debug-symbols 3052Produce debugging information in stabs format (if that is supported), 3053for only symbols that are actually used. 3054 3055@item -gstabs+ 3056@opindex gstabs+ 3057Produce debugging information in stabs format (if that is supported), 3058using GNU extensions understood only by the GNU debugger (GDB)@. The 3059use of these extensions is likely to make other debuggers crash or 3060refuse to read the program. 3061 3062@item -gcoff 3063@opindex gcoff 3064Produce debugging information in COFF format (if that is supported). 3065This is the format used by SDB on most System V systems prior to 3066System V Release 4. 3067 3068@item -gxcoff 3069@opindex gxcoff 3070Produce debugging information in XCOFF format (if that is supported). 3071This is the format used by the DBX debugger on IBM RS/6000 systems. 3072 3073@item -gxcoff+ 3074@opindex gxcoff+ 3075Produce debugging information in XCOFF format (if that is supported), 3076using GNU extensions understood only by the GNU debugger (GDB)@. The 3077use of these extensions is likely to make other debuggers crash or 3078refuse to read the program, and may cause assemblers other than the GNU 3079assembler (GAS) to fail with an error. 3080 3081@item -gdwarf-2 3082@opindex gdwarf-2 3083Produce debugging information in DWARF version 2 format (if that is 3084supported). This is the format used by DBX on IRIX 6. 3085 3086@item -gvms 3087@opindex gvms 3088Produce debugging information in VMS debug format (if that is 3089supported). This is the format used by DEBUG on VMS systems. 3090 3091@item -g@var{level} 3092@itemx -ggdb@var{level} 3093@itemx -gstabs@var{level} 3094@itemx -gcoff@var{level} 3095@itemx -gxcoff@var{level} 3096@itemx -gvms@var{level} 3097Request debugging information and also use @var{level} to specify how 3098much information. The default level is 2. 3099 3100Level 1 produces minimal information, enough for making backtraces in 3101parts of the program that you don't plan to debug. This includes 3102descriptions of functions and external variables, but no information 3103about local variables and no line numbers. 3104 3105Level 3 includes extra information, such as all the macro definitions 3106present in the program. Some debuggers support macro expansion when 3107you use @option{-g3}. 3108 3109Note that in order to avoid confusion between DWARF1 debug level 2, 3110and DWARF2 @option{-gdwarf-2} does not accept a concatenated debug 3111level. Instead use an additional @option{-g@var{level}} option to 3112change the debug level for DWARF2. 3113 3114@item -feliminate-dwarf2-dups 3115@opindex feliminate-dwarf2-dups 3116Compress DWARF2 debugging information by eliminating duplicated 3117information about each symbol. This option only makes sense when 3118generating DWARF2 debugging information with @option{-gdwarf-2}. 3119 3120@cindex @command{prof} 3121@item -p 3122@opindex p 3123Generate extra code to write profile information suitable for the 3124analysis program @command{prof}. You must use this option when compiling 3125the source files you want data about, and you must also use it when 3126linking. 3127 3128@cindex @command{gprof} 3129@item -pg 3130@opindex pg 3131Generate extra code to write profile information suitable for the 3132analysis program @command{gprof}. You must use this option when compiling 3133the source files you want data about, and you must also use it when 3134linking. 3135 3136@item -Q 3137@opindex Q 3138Makes the compiler print out each function name as it is compiled, and 3139print some statistics about each pass when it finishes. 3140 3141@item -ftime-report 3142@opindex ftime-report 3143Makes the compiler print some statistics about the time consumed by each 3144pass when it finishes. 3145 3146@item -fmem-report 3147@opindex fmem-report 3148Makes the compiler print some statistics about permanent memory 3149allocation when it finishes. 3150 3151@item -fprofile-arcs 3152@opindex fprofile-arcs 3153Add code so that program flow @dfn{arcs} are instrumented. During 3154execution the program records how many times each branch and call is 3155executed and how many times it is taken or returns. When the compiled 3156program exits it saves this data to a file called 3157@file{@var{auxname}.gcda} for each source file. The data may be used for 3158profile-directed optimizations (@option{-fbranch-probabilities}), or for 3159test coverage analysis (@option{-ftest-coverage}). Each object file's 3160@var{auxname} is generated from the name of the output file, if 3161explicitly specified and it is not the final executable, otherwise it is 3162the basename of the source file. In both cases any suffix is removed 3163(e.g. @file{foo.gcda} for input file @file{dir/foo.c}, or 3164@file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}). 3165 3166@itemize 3167 3168@item 3169Compile the source files with @option{-fprofile-arcs} plus optimization 3170and code generation options. For test coverage analysis, use the 3171additional @option{-ftest-coverage} option. You do not need to profile 3172every source file in a program. 3173 3174@item 3175Link your object files with @option{-lgcov} or @option{-fprofile-arcs} 3176(the latter implies the former). 3177 3178@item 3179Run the program on a representative workload to generate the arc profile 3180information. This may be repeated any number of times. You can run 3181concurrent instances of your program, and provided that the file system 3182supports locking, the data files will be correctly updated. Also 3183@code{fork} calls are detected and correctly handled (double counting 3184will not happen). 3185 3186@item 3187For profile-directed optimizations, compile the source files again with 3188the same optimization and code generation options plus 3189@option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that 3190Control Optimization}). 3191 3192@item 3193For test coverage analysis, use @command{gcov} to produce human readable 3194information from the @file{.gcno} and @file{.gcda} files. Refer to the 3195@command{gcov} documentation for further information. 3196 3197@end itemize 3198 3199With @option{-fprofile-arcs}, for each function of your program GCC 3200creates a program flow graph, then finds a spanning tree for the graph. 3201Only arcs that are not on the spanning tree have to be instrumented: the 3202compiler adds code to count the number of times that these arcs are 3203executed. When an arc is the only exit or only entrance to a block, the 3204instrumentation code can be added to the block; otherwise, a new basic 3205block must be created to hold the instrumentation code. 3206 3207@need 2000 3208@item -ftest-coverage 3209@opindex ftest-coverage 3210Produce a notes file that the @command{gcov} code-coverage utility 3211(@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to 3212show program coverage. Each source file's note file is called 3213@file{@var{auxname}.gcno}. Refer to the @option{-fprofile-arcs} option 3214above for a description of @var{auxname} and instructions on how to 3215generate test coverage data. Coverage data will match the source files 3216more closely, if you do not optimize. 3217 3218@item -d@var{letters} 3219@opindex d 3220Says to make debugging dumps during compilation at times specified by 3221@var{letters}. This is used for debugging the compiler. The file names 3222for most of the dumps are made by appending a pass number and a word to 3223the @var{dumpname}. @var{dumpname} is generated from the name of the 3224output file, if explicitly specified and it is not an executable, 3225otherwise it is the basename of the source file. In both cases any 3226suffix is removed (e.g. @file{foo.01.rtl} or @file{foo.02.sibling}). 3227Here are the possible letters for use in @var{letters}, and their 3228meanings: 3229 3230@table @samp 3231@item A 3232@opindex dA 3233Annotate the assembler output with miscellaneous debugging information. 3234@item b 3235@opindex db 3236Dump after computing branch probabilities, to @file{@var{file}.12.bp}. 3237@item B 3238@opindex dB 3239Dump after block reordering, to @file{@var{file}.31.bbro}. 3240@item c 3241@opindex dc 3242Dump after instruction combination, to the file @file{@var{file}.20.combine}. 3243@item C 3244@opindex dC 3245Dump after the first if conversion, to the file @file{@var{file}.14.ce1}. 3246Also dump after the second if conversion, to the file @file{@var{file}.21.ce2}. 3247@item d 3248@opindex dd 3249Dump after branch target load optimization, to to @file{@var{file}.32.btl}. 3250Also dump after delayed branch scheduling, to @file{@var{file}.36.dbr}. 3251@item D 3252@opindex dD 3253Dump all macro definitions, at the end of preprocessing, in addition to 3254normal output. 3255@item E 3256@opindex dE 3257Dump after the third if conversion, to @file{@var{file}.30.ce3}. 3258@item f 3259@opindex df 3260Dump after control and data flow analysis, to @file{@var{file}.11.cfg}. 3261Also dump after life analysis, to @file{@var{file}.19.life}. 3262@item F 3263@opindex dF 3264Dump after purging @code{ADDRESSOF} codes, to @file{@var{file}.07.addressof}. 3265@item g 3266@opindex dg 3267Dump after global register allocation, to @file{@var{file}.25.greg}. 3268@item G 3269@opindex dG 3270Dump after GCSE, to @file{@var{file}.08.gcse}. 3271Also dump after jump bypassing and control flow optimizations, to 3272@file{@var{file}.10.bypass}. 3273@item h 3274@opindex dh 3275Dump after finalization of EH handling code, to @file{@var{file}.03.eh}. 3276@item i 3277@opindex di 3278Dump after sibling call optimizations, to @file{@var{file}.02.sibling}. 3279@item j 3280@opindex dj 3281Dump after the first jump optimization, to @file{@var{file}.04.jump}. 3282@item k 3283@opindex dk 3284Dump after conversion from registers to stack, to @file{@var{file}.34.stack}. 3285@item l 3286@opindex dl 3287Dump after local register allocation, to @file{@var{file}.24.lreg}. 3288@item L 3289@opindex dL 3290Dump after loop optimization passes, to @file{@var{file}.09.loop} and 3291@file{@var{file}.16.loop2}. 3292@item M 3293@opindex dM 3294Dump after performing the machine dependent reorganization pass, to 3295@file{@var{file}.35.mach}. 3296@item n 3297@opindex dn 3298Dump after register renumbering, to @file{@var{file}.29.rnreg}. 3299@item N 3300@opindex dN 3301Dump after the register move pass, to @file{@var{file}.22.regmove}. 3302@item o 3303@opindex do 3304Dump after post-reload optimizations, to @file{@var{file}.26.postreload}. 3305@item r 3306@opindex dr 3307Dump after RTL generation, to @file{@var{file}.01.rtl}. 3308@item R 3309@opindex dR 3310Dump after the second scheduling pass, to @file{@var{file}.33.sched2}. 3311@item s 3312@opindex ds 3313Dump after CSE (including the jump optimization that sometimes follows 3314CSE), to @file{@var{file}.06.cse}. 3315@item S 3316@opindex dS 3317Dump after the first scheduling pass, to @file{@var{file}.23.sched}. 3318@item t 3319@opindex dt 3320Dump after the second CSE pass (including the jump optimization that 3321sometimes follows CSE), to @file{@var{file}.18.cse2}. 3322@item T 3323@opindex dT 3324Dump after running tracer, to @file{@var{file}.15.tracer}. 3325@item u 3326@opindex du 3327Dump after null pointer elimination pass to @file{@var{file}.05.null}. 3328@item U 3329@opindex dU 3330Dump callgraph and unit-at-a-time optimization @file{@var{file}.00.unit}. 3331@item V 3332@opindex dV 3333Dump after the value profile transformations, to @file{@var{file}.13.vpt}. 3334@item w 3335@opindex dw 3336Dump after the second flow pass, to @file{@var{file}.27.flow2}. 3337@item z 3338@opindex dz 3339Dump after the peephole pass, to @file{@var{file}.28.peephole2}. 3340@item Z 3341@opindex dZ 3342Dump after constructing the web, to @file{@var{file}.17.web}. 3343@item a 3344@opindex da 3345Produce all the dumps listed above. 3346@item H 3347@opindex dH 3348Produce a core dump whenever an error occurs. 3349@item m 3350@opindex dm 3351Print statistics on memory usage, at the end of the run, to 3352standard error. 3353@item p 3354@opindex dp 3355Annotate the assembler output with a comment indicating which 3356pattern and alternative was used. The length of each instruction is 3357also printed. 3358@item P 3359@opindex dP 3360Dump the RTL in the assembler output as a comment before each instruction. 3361Also turns on @option{-dp} annotation. 3362@item v 3363@opindex dv 3364For each of the other indicated dump files (except for 3365@file{@var{file}.01.rtl}), dump a representation of the control flow graph 3366suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}. 3367@item x 3368@opindex dx 3369Just generate RTL for a function instead of compiling it. Usually used 3370with @samp{r}. 3371@item y 3372@opindex dy 3373Dump debugging information during parsing, to standard error. 3374@end table 3375 3376@item -fdump-unnumbered 3377@opindex fdump-unnumbered 3378When doing debugging dumps (see @option{-d} option above), suppress instruction 3379numbers and line number note output. This makes it more feasible to 3380use diff on debugging dumps for compiler invocations with different 3381options, in particular with and without @option{-g}. 3382 3383@item -fdump-translation-unit @r{(C and C++ only)} 3384@itemx -fdump-translation-unit-@var{options} @r{(C and C++ only)} 3385@opindex fdump-translation-unit 3386Dump a representation of the tree structure for the entire translation 3387unit to a file. The file name is made by appending @file{.tu} to the 3388source file name. If the @samp{-@var{options}} form is used, @var{options} 3389controls the details of the dump as described for the 3390@option{-fdump-tree} options. 3391 3392@item -fdump-class-hierarchy @r{(C++ only)} 3393@itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)} 3394@opindex fdump-class-hierarchy 3395Dump a representation of each class's hierarchy and virtual function 3396table layout to a file. The file name is made by appending @file{.class} 3397to the source file name. If the @samp{-@var{options}} form is used, 3398@var{options} controls the details of the dump as described for the 3399@option{-fdump-tree} options. 3400 3401@item -fdump-tree-@var{switch} @r{(C++ only)} 3402@itemx -fdump-tree-@var{switch}-@var{options} @r{(C++ only)} 3403@opindex fdump-tree 3404Control the dumping at various stages of processing the intermediate 3405language tree to a file. The file name is generated by appending a switch 3406specific suffix to the source file name. If the @samp{-@var{options}} 3407form is used, @var{options} is a list of @samp{-} separated options that 3408control the details of the dump. Not all options are applicable to all 3409dumps, those which are not meaningful will be ignored. The following 3410options are available 3411 3412@table @samp 3413@item address 3414Print the address of each node. Usually this is not meaningful as it 3415changes according to the environment and source file. Its primary use 3416is for tying up a dump file with a debug environment. 3417@item slim 3418Inhibit dumping of members of a scope or body of a function merely 3419because that scope has been reached. Only dump such items when they 3420are directly reachable by some other path. 3421@item all 3422Turn on all options. 3423@end table 3424 3425The following tree dumps are possible: 3426@table @samp 3427@item original 3428Dump before any tree based optimization, to @file{@var{file}.original}. 3429@item optimized 3430Dump after all tree based optimization, to @file{@var{file}.optimized}. 3431@item inlined 3432Dump after function inlining, to @file{@var{file}.inlined}. 3433@end table 3434 3435@item -frandom-seed=@var{string} 3436@opindex frandom-string 3437This option provides a seed that GCC uses when it would otherwise use 3438random numbers. It is used to generate certain symbol names 3439that have to be different in every compiled file. It is also used to 3440place unique stamps in coverage data files and the object files that 3441produce them. You can use the @option{-frandom-seed} option to produce 3442reproducibly identical object files. 3443 3444The @var{string} should be different for every file you compile. 3445 3446@item -fsched-verbose=@var{n} 3447@opindex fsched-verbose 3448On targets that use instruction scheduling, this option controls the 3449amount of debugging output the scheduler prints. This information is 3450written to standard error, unless @option{-dS} or @option{-dR} is 3451specified, in which case it is output to the usual dump 3452listing file, @file{.sched} or @file{.sched2} respectively. However 3453for @var{n} greater than nine, the output is always printed to standard 3454error. 3455 3456For @var{n} greater than zero, @option{-fsched-verbose} outputs the 3457same information as @option{-dRS}. For @var{n} greater than one, it 3458also output basic block probabilities, detailed ready list information 3459and unit/insn info. For @var{n} greater than two, it includes RTL 3460at abort point, control-flow and regions info. And for @var{n} over 3461four, @option{-fsched-verbose} also includes dependence info. 3462 3463@item -save-temps 3464@opindex save-temps 3465Store the usual ``temporary'' intermediate files permanently; place them 3466in the current directory and name them based on the source file. Thus, 3467compiling @file{foo.c} with @samp{-c -save-temps} would produce files 3468@file{foo.i} and @file{foo.s}, as well as @file{foo.o}. This creates a 3469preprocessed @file{foo.i} output file even though the compiler now 3470normally uses an integrated preprocessor. 3471 3472@item -time 3473@opindex time 3474Report the CPU time taken by each subprocess in the compilation 3475sequence. For C source files, this is the compiler proper and assembler 3476(plus the linker if linking is done). The output looks like this: 3477 3478@smallexample 3479# cc1 0.12 0.01 3480# as 0.00 0.01 3481@end smallexample 3482 3483The first number on each line is the ``user time,'' that is time spent 3484executing the program itself. The second number is ``system time,'' 3485time spent executing operating system routines on behalf of the program. 3486Both numbers are in seconds. 3487 3488@item -print-file-name=@var{library} 3489@opindex print-file-name 3490Print the full absolute name of the library file @var{library} that 3491would be used when linking---and don't do anything else. With this 3492option, GCC does not compile or link anything; it just prints the 3493file name. 3494 3495@item -print-multi-directory 3496@opindex print-multi-directory 3497Print the directory name corresponding to the multilib selected by any 3498other switches present in the command line. This directory is supposed 3499to exist in @env{GCC_EXEC_PREFIX}. 3500 3501@item -print-multi-lib 3502@opindex print-multi-lib 3503Print the mapping from multilib directory names to compiler switches 3504that enable them. The directory name is separated from the switches by 3505@samp{;}, and each switch starts with an @samp{@@} instead of the 3506@samp{-}, without spaces between multiple switches. This is supposed to 3507ease shell-processing. 3508 3509@item -print-prog-name=@var{program} 3510@opindex print-prog-name 3511Like @option{-print-file-name}, but searches for a program such as @samp{cpp}. 3512 3513@item -print-libgcc-file-name 3514@opindex print-libgcc-file-name 3515Same as @option{-print-file-name=libgcc.a}. 3516 3517This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs} 3518but you do want to link with @file{libgcc.a}. You can do 3519 3520@smallexample 3521gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name` 3522@end smallexample 3523 3524@item -print-search-dirs 3525@opindex print-search-dirs 3526Print the name of the configured installation directory and a list of 3527program and library directories @command{gcc} will search---and don't do anything else. 3528 3529This is useful when @command{gcc} prints the error message 3530@samp{installation problem, cannot exec cpp0: No such file or directory}. 3531To resolve this you either need to put @file{cpp0} and the other compiler 3532components where @command{gcc} expects to find them, or you can set the environment 3533variable @env{GCC_EXEC_PREFIX} to the directory where you installed them. 3534Don't forget the trailing '/'. 3535@xref{Environment Variables}. 3536 3537@item -dumpmachine 3538@opindex dumpmachine 3539Print the compiler's target machine (for example, 3540@samp{i686-pc-linux-gnu})---and don't do anything else. 3541 3542@item -dumpversion 3543@opindex dumpversion 3544Print the compiler version (for example, @samp{3.0})---and don't do 3545anything else. 3546 3547@item -dumpspecs 3548@opindex dumpspecs 3549Print the compiler's built-in specs---and don't do anything else. (This 3550is used when GCC itself is being built.) @xref{Spec Files}. 3551 3552@item -feliminate-unused-debug-types 3553@opindex feliminate-unused-debug-types 3554Normally, when producing DWARF2 output, GCC will emit debugging 3555information for all types declared in a compilation 3556unit, regardless of whether or not they are actually used 3557in that compilation unit. Sometimes this is useful, such as 3558if, in the debugger, you want to cast a value to a type that is 3559not actually used in your program (but is declared). More often, 3560however, this results in a significant amount of wasted space. 3561With this option, GCC will avoid producing debug symbol output 3562for types that are nowhere used in the source file being compiled. 3563@end table 3564 3565@node Optimize Options 3566@section Options That Control Optimization 3567@cindex optimize options 3568@cindex options, optimization 3569 3570These options control various sorts of optimizations. 3571 3572Without any optimization option, the compiler's goal is to reduce the 3573cost of compilation and to make debugging produce the expected 3574results. Statements are independent: if you stop the program with a 3575breakpoint between statements, you can then assign a new value to any 3576variable or change the program counter to any other statement in the 3577function and get exactly the results you would expect from the source 3578code. 3579 3580Turning on optimization flags makes the compiler attempt to improve 3581the performance and/or code size at the expense of compilation time 3582and possibly the ability to debug the program. 3583 3584The compiler performs optimization based on the knowledge it has of 3585the program. Using the @option{-funit-at-a-time} flag will allow the 3586compiler to consider information gained from later functions in the 3587file when compiling a function. Compiling multiple files at once to a 3588single output file (and using @option{-funit-at-a-time}) will allow 3589the compiler to use information gained from all of the files when 3590compiling each of them. 3591 3592Not all optimizations are controlled directly by a flag. Only 3593optimizations that have a flag are listed. 3594 3595@table @gcctabopt 3596@item -O 3597@itemx -O1 3598@opindex O 3599@opindex O1 3600Optimize. Optimizing compilation takes somewhat more time, and a lot 3601more memory for a large function. 3602 3603With @option{-O}, the compiler tries to reduce code size and execution 3604time, without performing any optimizations that take a great deal of 3605compilation time. 3606 3607@option{-O} turns on the following optimization flags: 3608@gccoptlist{-fdefer-pop @gol 3609-fmerge-constants @gol 3610-fthread-jumps @gol 3611-floop-optimize @gol 3612-fif-conversion @gol 3613-fif-conversion2 @gol 3614-fdelayed-branch @gol 3615-fguess-branch-probability @gol 3616-fcprop-registers} 3617 3618@option{-O} also turns on @option{-fomit-frame-pointer} on machines 3619where doing so does not interfere with debugging. 3620 3621@item -O2 3622@opindex O2 3623Optimize even more. GCC performs nearly all supported optimizations 3624that do not involve a space-speed tradeoff. The compiler does not 3625perform loop unrolling or function inlining when you specify @option{-O2}. 3626As compared to @option{-O}, this option increases both compilation time 3627and the performance of the generated code. 3628 3629@option{-O2} turns on all optimization flags specified by @option{-O}. It 3630also turns on the following optimization flags: 3631@gccoptlist{-fforce-mem @gol 3632-foptimize-sibling-calls @gol 3633-fstrength-reduce @gol 3634-fcse-follow-jumps -fcse-skip-blocks @gol 3635-frerun-cse-after-loop -frerun-loop-opt @gol 3636-fgcse -fgcse-lm -fgcse-sm -fgcse-las @gol 3637-fdelete-null-pointer-checks @gol 3638-fexpensive-optimizations @gol 3639-fregmove @gol 3640-fschedule-insns -fschedule-insns2 @gol 3641-fsched-interblock -fsched-spec @gol 3642-fcaller-saves @gol 3643-fpeephole2 @gol 3644-freorder-blocks -freorder-functions @gol 3645-fstrict-aliasing @gol 3646-funit-at-a-time @gol 3647-falign-functions -falign-jumps @gol 3648-falign-loops -falign-labels @gol 3649-fcrossjumping} 3650 3651Please note the warning under @option{-fgcse} about 3652invoking @option{-O2} on programs that use computed gotos. 3653 3654@item -O3 3655@opindex O3 3656Optimize yet more. @option{-O3} turns on all optimizations specified by 3657@option{-O2} and also turns on the @option{-finline-functions}, 3658@option{-fweb} and @option{-frename-registers} options. 3659 3660@item -O0 3661@opindex O0 3662Do not optimize. This is the default. 3663 3664@item -Os 3665@opindex Os 3666Optimize for size. @option{-Os} enables all @option{-O2} optimizations that 3667do not typically increase code size. It also performs further 3668optimizations designed to reduce code size. 3669 3670@option{-Os} disables the following optimization flags: 3671@gccoptlist{-falign-functions -falign-jumps -falign-loops @gol 3672-falign-labels -freorder-blocks -fprefetch-loop-arrays} 3673 3674If you use multiple @option{-O} options, with or without level numbers, 3675the last such option is the one that is effective. 3676@end table 3677 3678Options of the form @option{-f@var{flag}} specify machine-independent 3679flags. Most flags have both positive and negative forms; the negative 3680form of @option{-ffoo} would be @option{-fno-foo}. In the table 3681below, only one of the forms is listed---the one you typically will 3682use. You can figure out the other form by either removing @samp{no-} 3683or adding it. 3684 3685The following options control specific optimizations. They are either 3686activated by @option{-O} options or are related to ones that are. You 3687can use the following flags in the rare cases when ``fine-tuning'' of 3688optimizations to be performed is desired. 3689 3690@table @gcctabopt 3691@item -fno-default-inline 3692@opindex fno-default-inline 3693Do not make member functions inline by default merely because they are 3694defined inside the class scope (C++ only). Otherwise, when you specify 3695@w{@option{-O}}, member functions defined inside class scope are compiled 3696inline by default; i.e., you don't need to add @samp{inline} in front of 3697the member function name. 3698 3699@item -fno-defer-pop 3700@opindex fno-defer-pop 3701Always pop the arguments to each function call as soon as that function 3702returns. For machines which must pop arguments after a function call, 3703the compiler normally lets arguments accumulate on the stack for several 3704function calls and pops them all at once. 3705 3706Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 3707 3708@item -fforce-mem 3709@opindex fforce-mem 3710Force memory operands to be copied into registers before doing 3711arithmetic on them. This produces better code by making all memory 3712references potential common subexpressions. When they are not common 3713subexpressions, instruction combination should eliminate the separate 3714register-load. 3715 3716Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 3717 3718@item -fforce-addr 3719@opindex fforce-addr 3720Force memory address constants to be copied into registers before 3721doing arithmetic on them. This may produce better code just as 3722@option{-fforce-mem} may. 3723 3724@item -fomit-frame-pointer 3725@opindex fomit-frame-pointer 3726Don't keep the frame pointer in a register for functions that 3727don't need one. This avoids the instructions to save, set up and 3728restore frame pointers; it also makes an extra register available 3729in many functions. @strong{It also makes debugging impossible on 3730some machines.} 3731 3732On some machines, such as the VAX, this flag has no effect, because 3733the standard calling sequence automatically handles the frame pointer 3734and nothing is saved by pretending it doesn't exist. The 3735machine-description macro @code{FRAME_POINTER_REQUIRED} controls 3736whether a target machine supports this flag. @xref{Registers,,Register 3737Usage, gccint, GNU Compiler Collection (GCC) Internals}. 3738 3739Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 3740 3741@item -foptimize-sibling-calls 3742@opindex foptimize-sibling-calls 3743Optimize sibling and tail recursive calls. 3744 3745Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 3746 3747@item -fno-inline 3748@opindex fno-inline 3749Don't pay attention to the @code{inline} keyword. Normally this option 3750is used to keep the compiler from expanding any functions inline. 3751Note that if you are not optimizing, no functions can be expanded inline. 3752 3753@item -finline-functions 3754@opindex finline-functions 3755Integrate all simple functions into their callers. The compiler 3756heuristically decides which functions are simple enough to be worth 3757integrating in this way. 3758 3759If all calls to a given function are integrated, and the function is 3760declared @code{static}, then the function is normally not output as 3761assembler code in its own right. 3762 3763Enabled at level @option{-O3}. 3764 3765@item -finline-limit=@var{n} 3766@opindex finline-limit 3767By default, GCC limits the size of functions that can be inlined. This flag 3768allows the control of this limit for functions that are explicitly marked as 3769inline (i.e., marked with the inline keyword or defined within the class 3770definition in c++). @var{n} is the size of functions that can be inlined in 3771number of pseudo instructions (not counting parameter handling). The default 3772value of @var{n} is 600. 3773Increasing this value can result in more inlined code at 3774the cost of compilation time and memory consumption. Decreasing usually makes 3775the compilation faster and less code will be inlined (which presumably 3776means slower programs). This option is particularly useful for programs that 3777use inlining heavily such as those based on recursive templates with C++. 3778 3779Inlining is actually controlled by a number of parameters, which may be 3780specified individually by using @option{--param @var{name}=@var{value}}. 3781The @option{-finline-limit=@var{n}} option sets some of these parameters 3782as follows: 3783 3784@table @gcctabopt 3785 @item max-inline-insns-single 3786 is set to @var{n}/2. 3787 @item max-inline-insns-auto 3788 is set to @var{n}/2. 3789 @item min-inline-insns 3790 is set to 130 or @var{n}/4, whichever is smaller. 3791 @item max-inline-insns-rtl 3792 is set to @var{n}. 3793@end table 3794 3795See below for a documentation of the individual 3796parameters controlling inlining. 3797 3798@emph{Note:} pseudo instruction represents, in this particular context, an 3799abstract measurement of function's size. In no way, it represents a count 3800of assembly instructions and as such its exact meaning might change from one 3801release to an another. 3802 3803@item -fkeep-inline-functions 3804@opindex fkeep-inline-functions 3805Even if all calls to a given function are integrated, and the function 3806is declared @code{static}, nevertheless output a separate run-time 3807callable version of the function. This switch does not affect 3808@code{extern inline} functions. 3809 3810@item -fkeep-static-consts 3811@opindex fkeep-static-consts 3812Emit variables declared @code{static const} when optimization isn't turned 3813on, even if the variables aren't referenced. 3814 3815GCC enables this option by default. If you want to force the compiler to 3816check if the variable was referenced, regardless of whether or not 3817optimization is turned on, use the @option{-fno-keep-static-consts} option. 3818 3819@item -fmerge-constants 3820Attempt to merge identical constants (string constants and floating point 3821constants) across compilation units. 3822 3823This option is the default for optimized compilation if the assembler and 3824linker support it. Use @option{-fno-merge-constants} to inhibit this 3825behavior. 3826 3827Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 3828 3829@item -fmerge-all-constants 3830Attempt to merge identical constants and identical variables. 3831 3832This option implies @option{-fmerge-constants}. In addition to 3833@option{-fmerge-constants} this considers e.g. even constant initialized 3834arrays or initialized constant variables with integral or floating point 3835types. Languages like C or C++ require each non-automatic variable to 3836have distinct location, so using this option will result in non-conforming 3837behavior. 3838 3839@item -fnew-ra 3840@opindex fnew-ra 3841Use a graph coloring register allocator. Currently this option is meant 3842only for testing. Users should not specify this option, since it is not 3843yet ready for production use. 3844 3845@item -fno-branch-count-reg 3846@opindex fno-branch-count-reg 3847Do not use ``decrement and branch'' instructions on a count register, 3848but instead generate a sequence of instructions that decrement a 3849register, compare it against zero, then branch based upon the result. 3850This option is only meaningful on architectures that support such 3851instructions, which include x86, PowerPC, IA-64 and S/390. 3852 3853The default is @option{-fbranch-count-reg}, enabled when 3854@option{-fstrength-reduce} is enabled. 3855 3856@item -fno-function-cse 3857@opindex fno-function-cse 3858Do not put function addresses in registers; make each instruction that 3859calls a constant function contain the function's address explicitly. 3860 3861This option results in less efficient code, but some strange hacks 3862that alter the assembler output may be confused by the optimizations 3863performed when this option is not used. 3864 3865The default is @option{-ffunction-cse} 3866 3867@item -fno-zero-initialized-in-bss 3868@opindex fno-zero-initialized-in-bss 3869If the target supports a BSS section, GCC by default puts variables that 3870are initialized to zero into BSS@. This can save space in the resulting 3871code. 3872 3873This option turns off this behavior because some programs explicitly 3874rely on variables going to the data section. E.g., so that the 3875resulting executable can find the beginning of that section and/or make 3876assumptions based on that. 3877 3878The default is @option{-fzero-initialized-in-bss}. 3879 3880@item -fstrength-reduce 3881@opindex fstrength-reduce 3882Perform the optimizations of loop strength reduction and 3883elimination of iteration variables. 3884 3885Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 3886 3887@item -fthread-jumps 3888@opindex fthread-jumps 3889Perform optimizations where we check to see if a jump branches to a 3890location where another comparison subsumed by the first is found. If 3891so, the first branch is redirected to either the destination of the 3892second branch or a point immediately following it, depending on whether 3893the condition is known to be true or false. 3894 3895Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 3896 3897@item -fcse-follow-jumps 3898@opindex fcse-follow-jumps 3899In common subexpression elimination, scan through jump instructions 3900when the target of the jump is not reached by any other path. For 3901example, when CSE encounters an @code{if} statement with an 3902@code{else} clause, CSE will follow the jump when the condition 3903tested is false. 3904 3905Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 3906 3907@item -fcse-skip-blocks 3908@opindex fcse-skip-blocks 3909This is similar to @option{-fcse-follow-jumps}, but causes CSE to 3910follow jumps which conditionally skip over blocks. When CSE 3911encounters a simple @code{if} statement with no else clause, 3912@option{-fcse-skip-blocks} causes CSE to follow the jump around the 3913body of the @code{if}. 3914 3915Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 3916 3917@item -frerun-cse-after-loop 3918@opindex frerun-cse-after-loop 3919Re-run common subexpression elimination after loop optimizations has been 3920performed. 3921 3922Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 3923 3924@item -frerun-loop-opt 3925@opindex frerun-loop-opt 3926Run the loop optimizer twice. 3927 3928Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 3929 3930@item -fgcse 3931@opindex fgcse 3932Perform a global common subexpression elimination pass. 3933This pass also performs global constant and copy propagation. 3934 3935@emph{Note:} When compiling a program using computed gotos, a GCC 3936extension, you may get better runtime performance if you disable 3937the global common subexpression elimination pass by adding 3938@option{-fno-gcse} to the command line. 3939 3940Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 3941 3942@item -fgcse-lm 3943@opindex fgcse-lm 3944When @option{-fgcse-lm} is enabled, global common subexpression elimination will 3945attempt to move loads which are only killed by stores into themselves. This 3946allows a loop containing a load/store sequence to be changed to a load outside 3947the loop, and a copy/store within the loop. 3948 3949Enabled by default when gcse is enabled. 3950 3951@item -fgcse-sm 3952@opindex fgcse-sm 3953When @option{-fgcse-sm} is enabled, a store motion pass is run after 3954global common subexpression elimination. This pass will attempt to move 3955stores out of loops. When used in conjunction with @option{-fgcse-lm}, 3956loops containing a load/store sequence can be changed to a load before 3957the loop and a store after the loop. 3958 3959Enabled by default when gcse is enabled. 3960 3961@item -fgcse-las 3962@opindex fgcse-las 3963When @option{-fgcse-las} is enabled, the global common subexpression 3964elimination pass eliminates redundant loads that come after stores to the 3965same memory location (both partial and full redundancies). 3966 3967Enabled by default when gcse is enabled. 3968 3969@item -floop-optimize 3970@opindex floop-optimize 3971Perform loop optimizations: move constant expressions out of loops, simplify 3972exit test conditions and optionally do strength-reduction and loop unrolling as 3973well. 3974 3975Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 3976 3977@item -fcrossjumping 3978@opindex crossjumping 3979Perform cross-jumping transformation. This transformation unifies equivalent code and save code size. The 3980resulting code may or may not perform better than without cross-jumping. 3981 3982Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 3983 3984@item -fif-conversion 3985@opindex if-conversion 3986Attempt to transform conditional jumps into branch-less equivalents. This 3987include use of conditional moves, min, max, set flags and abs instructions, and 3988some tricks doable by standard arithmetics. The use of conditional execution 3989on chips where it is available is controlled by @code{if-conversion2}. 3990 3991Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 3992 3993@item -fif-conversion2 3994@opindex if-conversion2 3995Use conditional execution (where available) to transform conditional jumps into 3996branch-less equivalents. 3997 3998Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 3999 4000@item -fdelete-null-pointer-checks 4001@opindex fdelete-null-pointer-checks 4002Use global dataflow analysis to identify and eliminate useless checks 4003for null pointers. The compiler assumes that dereferencing a null 4004pointer would have halted the program. If a pointer is checked after 4005it has already been dereferenced, it cannot be null. 4006 4007In some environments, this assumption is not true, and programs can 4008safely dereference null pointers. Use 4009@option{-fno-delete-null-pointer-checks} to disable this optimization 4010for programs which depend on that behavior. 4011 4012Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4013 4014@item -fexpensive-optimizations 4015@opindex fexpensive-optimizations 4016Perform a number of minor optimizations that are relatively expensive. 4017 4018Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4019 4020@item -foptimize-register-move 4021@itemx -fregmove 4022@opindex foptimize-register-move 4023@opindex fregmove 4024Attempt to reassign register numbers in move instructions and as 4025operands of other simple instructions in order to maximize the amount of 4026register tying. This is especially helpful on machines with two-operand 4027instructions. 4028 4029Note @option{-fregmove} and @option{-foptimize-register-move} are the same 4030optimization. 4031 4032Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4033 4034@item -fdelayed-branch 4035@opindex fdelayed-branch 4036If supported for the target machine, attempt to reorder instructions 4037to exploit instruction slots available after delayed branch 4038instructions. 4039 4040Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 4041 4042@item -fschedule-insns 4043@opindex fschedule-insns 4044If supported for the target machine, attempt to reorder instructions to 4045eliminate execution stalls due to required data being unavailable. This 4046helps machines that have slow floating point or memory load instructions 4047by allowing other instructions to be issued until the result of the load 4048or floating point instruction is required. 4049 4050Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4051 4052@item -fschedule-insns2 4053@opindex fschedule-insns2 4054Similar to @option{-fschedule-insns}, but requests an additional pass of 4055instruction scheduling after register allocation has been done. This is 4056especially useful on machines with a relatively small number of 4057registers and where memory load instructions take more than one cycle. 4058 4059Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4060 4061@item -fno-sched-interblock 4062@opindex fno-sched-interblock 4063Don't schedule instructions across basic blocks. This is normally 4064enabled by default when scheduling before register allocation, i.e.@: 4065with @option{-fschedule-insns} or at @option{-O2} or higher. 4066 4067@item -fno-sched-spec 4068@opindex fno-sched-spec 4069Don't allow speculative motion of non-load instructions. This is normally 4070enabled by default when scheduling before register allocation, i.e.@: 4071with @option{-fschedule-insns} or at @option{-O2} or higher. 4072 4073@item -fsched-spec-load 4074@opindex fsched-spec-load 4075Allow speculative motion of some load instructions. This only makes 4076sense when scheduling before register allocation, i.e.@: with 4077@option{-fschedule-insns} or at @option{-O2} or higher. 4078 4079@item -fsched-spec-load-dangerous 4080@opindex fsched-spec-load-dangerous 4081Allow speculative motion of more load instructions. This only makes 4082sense when scheduling before register allocation, i.e.@: with 4083@option{-fschedule-insns} or at @option{-O2} or higher. 4084 4085@item -fsched-stalled-insns=@var{n} 4086@opindex fsched-stalled-insns 4087Define how many insns (if any) can be moved prematurely from the queue 4088of stalled insns into the ready list, during the second scheduling pass. 4089 4090@item -fsched-stalled-insns-dep=@var{n} 4091@opindex fsched-stalled-insns-dep 4092Define how many insn groups (cycles) will be examined for a dependency 4093on a stalled insn that is candidate for premature removal from the queue 4094of stalled insns. Has an effect only during the second scheduling pass, 4095and only if @option{-fsched-stalled-insns} is used and its value is not zero. 4096 4097@item -fsched2-use-superblocks 4098@opindex fsched2-use-superblocks 4099When scheduling after register allocation, do use superblock scheduling 4100algorithm. Superblock scheduling allows motion across basic block boundaries 4101resulting on faster schedules. This option is experimental, as not all machine 4102descriptions used by GCC model the CPU closely enough to avoid unreliable 4103results from the algorithm. 4104 4105This only makes sense when scheduling after register allocation, i.e.@: with 4106@option{-fschedule-insns2} or at @option{-O2} or higher. 4107 4108@item -fsched2-use-traces 4109@opindex fsched2-use-traces 4110Use @option{-fsched2-use-superblocks} algorithm when scheduling after register 4111allocation and additionally perform code duplication in order to increase the 4112size of superblocks using tracer pass. See @option{-ftracer} for details on 4113trace formation. 4114 4115This mode should produce faster but significantly longer programs. Also 4116without @code{-fbranch-probabilities} the traces constructed may not match the 4117reality and hurt the performance. This only makes 4118sense when scheduling after register allocation, i.e.@: with 4119@option{-fschedule-insns2} or at @option{-O2} or higher. 4120 4121@item -fcaller-saves 4122@opindex fcaller-saves 4123Enable values to be allocated in registers that will be clobbered by 4124function calls, by emitting extra instructions to save and restore the 4125registers around such calls. Such allocation is done only when it 4126seems to result in better code than would otherwise be produced. 4127 4128This option is always enabled by default on certain machines, usually 4129those which have no call-preserved registers to use instead. 4130 4131Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4132 4133@item -fmove-all-movables 4134@opindex fmove-all-movables 4135Forces all invariant computations in loops to be moved 4136outside the loop. 4137 4138@item -freduce-all-givs 4139@opindex freduce-all-givs 4140Forces all general-induction variables in loops to be 4141strength-reduced. 4142 4143@emph{Note:} When compiling programs written in Fortran, 4144@option{-fmove-all-movables} and @option{-freduce-all-givs} are enabled 4145by default when you use the optimizer. 4146 4147These options may generate better or worse code; results are highly 4148dependent on the structure of loops within the source code. 4149 4150These two options are intended to be removed someday, once 4151they have helped determine the efficacy of various 4152approaches to improving loop optimizations. 4153 4154Please contact @w{@email{gcc@@gcc.gnu.org}}, and describe how use of 4155these options affects the performance of your production code. 4156Examples of code that runs @emph{slower} when these options are 4157@emph{enabled} are very valuable. 4158 4159@item -fno-peephole 4160@itemx -fno-peephole2 4161@opindex fno-peephole 4162@opindex fno-peephole2 4163Disable any machine-specific peephole optimizations. The difference 4164between @option{-fno-peephole} and @option{-fno-peephole2} is in how they 4165are implemented in the compiler; some targets use one, some use the 4166other, a few use both. 4167 4168@option{-fpeephole} is enabled by default. 4169@option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4170 4171@item -fno-guess-branch-probability 4172@opindex fno-guess-branch-probability 4173Do not guess branch probabilities using a randomized model. 4174 4175Sometimes GCC will opt to use a randomized model to guess branch 4176probabilities, when none are available from either profiling feedback 4177(@option{-fprofile-arcs}) or @samp{__builtin_expect}. This means that 4178different runs of the compiler on the same program may produce different 4179object code. 4180 4181In a hard real-time system, people don't want different runs of the 4182compiler to produce code that has different behavior; minimizing 4183non-determinism is of paramount import. This switch allows users to 4184reduce non-determinism, possibly at the expense of inferior 4185optimization. 4186 4187The default is @option{-fguess-branch-probability} at levels 4188@option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 4189 4190@item -freorder-blocks 4191@opindex freorder-blocks 4192Reorder basic blocks in the compiled function in order to reduce number of 4193taken branches and improve code locality. 4194 4195Enabled at levels @option{-O2}, @option{-O3}. 4196 4197@item -freorder-functions 4198@opindex freorder-functions 4199Reorder basic blocks in the compiled function in order to reduce number of 4200taken branches and improve code locality. This is implemented by using special 4201subsections @code{text.hot} for most frequently executed functions and 4202@code{text.unlikely} for unlikely executed functions. Reordering is done by 4203the linker so object file format must support named sections and linker must 4204place them in a reasonable way. 4205 4206Also profile feedback must be available in to make this option effective. See 4207@option{-fprofile-arcs} for details. 4208 4209Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4210 4211@item -fstrict-aliasing 4212@opindex fstrict-aliasing 4213Allows the compiler to assume the strictest aliasing rules applicable to 4214the language being compiled. For C (and C++), this activates 4215optimizations based on the type of expressions. In particular, an 4216object of one type is assumed never to reside at the same address as an 4217object of a different type, unless the types are almost the same. For 4218example, an @code{unsigned int} can alias an @code{int}, but not a 4219@code{void*} or a @code{double}. A character type may alias any other 4220type. 4221 4222Pay special attention to code like this: 4223@smallexample 4224union a_union @{ 4225 int i; 4226 double d; 4227@}; 4228 4229int f() @{ 4230 a_union t; 4231 t.d = 3.0; 4232 return t.i; 4233@} 4234@end smallexample 4235The practice of reading from a different union member than the one most 4236recently written to (called ``type-punning'') is common. Even with 4237@option{-fstrict-aliasing}, type-punning is allowed, provided the memory 4238is accessed through the union type. So, the code above will work as 4239expected. However, this code might not: 4240@smallexample 4241int f() @{ 4242 a_union t; 4243 int* ip; 4244 t.d = 3.0; 4245 ip = &t.i; 4246 return *ip; 4247@} 4248@end smallexample 4249 4250Every language that wishes to perform language-specific alias analysis 4251should define a function that computes, given an @code{tree} 4252node, an alias set for the node. Nodes in different alias sets are not 4253allowed to alias. For an example, see the C front-end function 4254@code{c_get_alias_set}. 4255 4256Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4257 4258@item -falign-functions 4259@itemx -falign-functions=@var{n} 4260@opindex falign-functions 4261Align the start of functions to the next power-of-two greater than 4262@var{n}, skipping up to @var{n} bytes. For instance, 4263@option{-falign-functions=32} aligns functions to the next 32-byte 4264boundary, but @option{-falign-functions=24} would align to the next 426532-byte boundary only if this can be done by skipping 23 bytes or less. 4266 4267@option{-fno-align-functions} and @option{-falign-functions=1} are 4268equivalent and mean that functions will not be aligned. 4269 4270Some assemblers only support this flag when @var{n} is a power of two; 4271in that case, it is rounded up. 4272 4273If @var{n} is not specified or is zero, use a machine-dependent default. 4274 4275Enabled at levels @option{-O2}, @option{-O3}. 4276 4277@item -falign-labels 4278@itemx -falign-labels=@var{n} 4279@opindex falign-labels 4280Align all branch targets to a power-of-two boundary, skipping up to 4281@var{n} bytes like @option{-falign-functions}. This option can easily 4282make code slower, because it must insert dummy operations for when the 4283branch target is reached in the usual flow of the code. 4284 4285@option{-fno-align-labels} and @option{-falign-labels=1} are 4286equivalent and mean that labels will not be aligned. 4287 4288If @option{-falign-loops} or @option{-falign-jumps} are applicable and 4289are greater than this value, then their values are used instead. 4290 4291If @var{n} is not specified or is zero, use a machine-dependent default 4292which is very likely to be @samp{1}, meaning no alignment. 4293 4294Enabled at levels @option{-O2}, @option{-O3}. 4295 4296@item -falign-loops 4297@itemx -falign-loops=@var{n} 4298@opindex falign-loops 4299Align loops to a power-of-two boundary, skipping up to @var{n} bytes 4300like @option{-falign-functions}. The hope is that the loop will be 4301executed many times, which will make up for any execution of the dummy 4302operations. 4303 4304@option{-fno-align-loops} and @option{-falign-loops=1} are 4305equivalent and mean that loops will not be aligned. 4306 4307If @var{n} is not specified or is zero, use a machine-dependent default. 4308 4309Enabled at levels @option{-O2}, @option{-O3}. 4310 4311@item -falign-jumps 4312@itemx -falign-jumps=@var{n} 4313@opindex falign-jumps 4314Align branch targets to a power-of-two boundary, for branch targets 4315where the targets can only be reached by jumping, skipping up to @var{n} 4316bytes like @option{-falign-functions}. In this case, no dummy operations 4317need be executed. 4318 4319@option{-fno-align-jumps} and @option{-falign-jumps=1} are 4320equivalent and mean that loops will not be aligned. 4321 4322If @var{n} is not specified or is zero, use a machine-dependent default. 4323 4324Enabled at levels @option{-O2}, @option{-O3}. 4325 4326@item -frename-registers 4327@opindex frename-registers 4328Attempt to avoid false dependencies in scheduled code by making use 4329of registers left over after register allocation. This optimization 4330will most benefit processors with lots of registers. It can, however, 4331make debugging impossible, since variables will no longer stay in 4332a ``home register''. 4333 4334@item -fweb 4335@opindex fweb 4336Constructs webs as commonly used for register allocation purposes and assign 4337each web individual pseudo register. This allows the register allocation pass 4338to operate on pseudos directly, but also strengthens several other optimization 4339passes, such as CSE, loop optimizer and trivial dead code remover. It can, 4340however, make debugging impossible, since variables will no longer stay in a 4341``home register''. 4342 4343Enabled at levels @option{-O3}. 4344 4345@item -fno-cprop-registers 4346@opindex fno-cprop-registers 4347After register allocation and post-register allocation instruction splitting, 4348we perform a copy-propagation pass to try to reduce scheduling dependencies 4349and occasionally eliminate the copy. 4350 4351Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 4352 4353@item -fprofile-generate 4354@opindex fprofile-generate 4355 4356Enable options usually used for instrumenting application to produce 4357profile useful for later recompilation with profile feedback based 4358optimization. You must use @code{-fprofile-generate} both when 4359compiling and when linking your program. 4360 4361The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}. 4362 4363@item -fprofile-use 4364@opindex fprofile-use 4365Enable profile feedback directed optimizations, and optimizations 4366generally profitable only with profile feedback available. 4367 4368The following options are enabled: @code{-fbranch-probabilities}, 4369@code{-fvpt}, @code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer}. 4370 4371@end table 4372 4373The following options control compiler behavior regarding floating 4374point arithmetic. These options trade off between speed and 4375correctness. All must be specifically enabled. 4376 4377@table @gcctabopt 4378@item -ffloat-store 4379@opindex ffloat-store 4380Do not store floating point variables in registers, and inhibit other 4381options that might change whether a floating point value is taken from a 4382register or memory. 4383 4384@cindex floating point precision 4385This option prevents undesirable excess precision on machines such as 4386the 68000 where the floating registers (of the 68881) keep more 4387precision than a @code{double} is supposed to have. Similarly for the 4388x86 architecture. For most programs, the excess precision does only 4389good, but a few programs rely on the precise definition of IEEE floating 4390point. Use @option{-ffloat-store} for such programs, after modifying 4391them to store all pertinent intermediate computations into variables. 4392 4393@item -ffast-math 4394@opindex ffast-math 4395Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, @* 4396@option{-fno-trapping-math}, @option{-ffinite-math-only}, 4397@option{-fno-rounding-math} and @option{-fno-signaling-nans}. 4398 4399This option causes the preprocessor macro @code{__FAST_MATH__} to be defined. 4400 4401This option should never be turned on by any @option{-O} option since 4402it can result in incorrect output for programs which depend on 4403an exact implementation of IEEE or ISO rules/specifications for 4404math functions. 4405 4406@item -fno-math-errno 4407@opindex fno-math-errno 4408Do not set ERRNO after calling math functions that are executed 4409with a single instruction, e.g., sqrt. A program that relies on 4410IEEE exceptions for math error handling may want to use this flag 4411for speed while maintaining IEEE arithmetic compatibility. 4412 4413This option should never be turned on by any @option{-O} option since 4414it can result in incorrect output for programs which depend on 4415an exact implementation of IEEE or ISO rules/specifications for 4416math functions. 4417 4418The default is @option{-fmath-errno}. 4419 4420@item -funsafe-math-optimizations 4421@opindex funsafe-math-optimizations 4422Allow optimizations for floating-point arithmetic that (a) assume 4423that arguments and results are valid and (b) may violate IEEE or 4424ANSI standards. When used at link-time, it may include libraries 4425or startup files that change the default FPU control word or other 4426similar optimizations. 4427 4428This option should never be turned on by any @option{-O} option since 4429it can result in incorrect output for programs which depend on 4430an exact implementation of IEEE or ISO rules/specifications for 4431math functions. 4432 4433The default is @option{-fno-unsafe-math-optimizations}. 4434 4435@item -ffinite-math-only 4436@opindex ffinite-math-only 4437Allow optimizations for floating-point arithmetic that assume 4438that arguments and results are not NaNs or +-Infs. 4439 4440This option should never be turned on by any @option{-O} option since 4441it can result in incorrect output for programs which depend on 4442an exact implementation of IEEE or ISO rules/specifications. 4443 4444The default is @option{-fno-finite-math-only}. 4445 4446@item -fno-trapping-math 4447@opindex fno-trapping-math 4448Compile code assuming that floating-point operations cannot generate 4449user-visible traps. These traps include division by zero, overflow, 4450underflow, inexact result and invalid operation. This option implies 4451@option{-fno-signaling-nans}. Setting this option may allow faster 4452code if one relies on ``non-stop'' IEEE arithmetic, for example. 4453 4454This option should never be turned on by any @option{-O} option since 4455it can result in incorrect output for programs which depend on 4456an exact implementation of IEEE or ISO rules/specifications for 4457math functions. 4458 4459The default is @option{-ftrapping-math}. 4460 4461@item -frounding-math 4462@opindex frounding-math 4463Disable transformations and optimizations that assume default floating 4464point rounding behavior. This is round-to-zero for all floating point 4465to integer conversions, and round-to-nearest for all other arithmetic 4466truncations. This option should be specified for programs that change 4467the FP rounding mode dynamically, or that may be executed with a 4468non-default rounding mode. This option disables constant folding of 4469floating point expressions at compile-time (which may be affected by 4470rounding mode) and arithmetic transformations that are unsafe in the 4471presence of sign-dependent rounding modes. 4472 4473The default is @option{-fno-rounding-math}. 4474 4475This option is experimental and does not currently guarantee to 4476disable all GCC optimizations that are affected by rounding mode. 4477Future versions of GCC may provide finer control of this setting 4478using C99's @code{FENV_ACCESS} pragma. This command line option 4479will be used to specify the default state for @code{FENV_ACCESS}. 4480 4481@item -fsignaling-nans 4482@opindex fsignaling-nans 4483Compile code assuming that IEEE signaling NaNs may generate user-visible 4484traps during floating-point operations. Setting this option disables 4485optimizations that may change the number of exceptions visible with 4486signaling NaNs. This option implies @option{-ftrapping-math}. 4487 4488This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to 4489be defined. 4490 4491The default is @option{-fno-signaling-nans}. 4492 4493This option is experimental and does not currently guarantee to 4494disable all GCC optimizations that affect signaling NaN behavior. 4495 4496@item -fsingle-precision-constant 4497@opindex fsingle-precision-constant 4498Treat floating point constant as single precision constant instead of 4499implicitly converting it to double precision constant. 4500 4501 4502@end table 4503 4504The following options control optimizations that may improve 4505performance, but are not enabled by any @option{-O} options. This 4506section includes experimental options that may produce broken code. 4507 4508@table @gcctabopt 4509@item -fbranch-probabilities 4510@opindex fbranch-probabilities 4511After running a program compiled with @option{-fprofile-arcs} 4512(@pxref{Debugging Options,, Options for Debugging Your Program or 4513@command{gcc}}), you can compile it a second time using 4514@option{-fbranch-probabilities}, to improve optimizations based on 4515the number of times each branch was taken. When the program 4516compiled with @option{-fprofile-arcs} exits it saves arc execution 4517counts to a file called @file{@var{sourcename}.gcda} for each source 4518file The information in this data file is very dependent on the 4519structure of the generated code, so you must use the same source code 4520and the same optimization options for both compilations. 4521 4522With @option{-fbranch-probabilities}, GCC puts a 4523@samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}. 4524These can be used to improve optimization. Currently, they are only 4525used in one place: in @file{reorg.c}, instead of guessing which path a 4526branch is mostly to take, the @samp{REG_BR_PROB} values are used to 4527exactly determine which path is taken more often. 4528 4529@item -fprofile-values 4530@opindex fprofile-values 4531If combined with @option{-fprofile-arcs}, it adds code so that some 4532data about values of expressions in the program is gathered. 4533 4534With @option{-fbranch-probabilities}, it reads back the data gathered 4535from profiling values of expressions and adds @samp{REG_VALUE_PROFILE} 4536notes to instructions for their later usage in optimizations. 4537 4538@item -fvpt 4539@opindex fvpt 4540If combined with @option{-fprofile-arcs}, it instructs the compiler to add 4541a code to gather information about values of expressions. 4542 4543With @option{-fbranch-probabilities}, it reads back the data gathered 4544and actually performs the optimizations based on them. 4545Currently the optimizations include specialization of division operation 4546using the knowledge about the value of the denominator. 4547 4548@item -fnew-ra 4549@opindex fnew-ra 4550Use a graph coloring register allocator. Currently this option is meant 4551for testing, so we are interested to hear about miscompilations with 4552@option{-fnew-ra}. 4553 4554@item -ftracer 4555@opindex ftracer 4556Perform tail duplication to enlarge superblock size. This transformation 4557simplifies the control flow of the function allowing other optimizations to do 4558better job. 4559 4560@item -funit-at-a-time 4561@opindex funit-at-a-time 4562Parse the whole compilation unit before starting to produce code. 4563This allows some extra optimizations to take place but consumes more 4564memory. 4565 4566@item -funroll-loops 4567@opindex funroll-loops 4568Unroll loops whose number of iterations can be determined at compile time or 4569upon entry to the loop. @option{-funroll-loops} implies 4570@option{-frerun-cse-after-loop}. It also turns on complete loop peeling 4571(i.e. complete removal of loops with small constant number of iterations). 4572This option makes code larger, and may or may not make it run faster. 4573 4574@item -funroll-all-loops 4575@opindex funroll-all-loops 4576Unroll all loops, even if their number of iterations is uncertain when 4577the loop is entered. This usually makes programs run more slowly. 4578@option{-funroll-all-loops} implies the same options as 4579@option{-funroll-loops}. 4580 4581@item -fpeel-loops 4582@opindex fpeel-loops 4583Peels the loops for that there is enough information that they do not 4584roll much (from profile feedback). It also turns on complete loop peeling 4585(i.e. complete removal of loops with small constant number of iterations). 4586 4587@item -funswitch-loops 4588@opindex funswitch-loops 4589Move branches with loop invariant conditions out of the loop, with duplicates 4590of the loop on both branches (modified according to result of the condition). 4591 4592@item -fold-unroll-loops 4593@opindex fold-unroll-loops 4594Unroll loops whose number of iterations can be determined at compile 4595time or upon entry to the loop, using the old loop unroller whose loop 4596recognition is based on notes from frontend. @option{-fold-unroll-loops} implies 4597both @option{-fstrength-reduce} and @option{-frerun-cse-after-loop}. This 4598option makes code larger, and may or may not make it run faster. 4599 4600@item -fold-unroll-all-loops 4601@opindex fold-unroll-all-loops 4602Unroll all loops, even if their number of iterations is uncertain when 4603the loop is entered. This is done using the old loop unroller whose loop 4604recognition is based on notes from frontend. This usually makes programs run more slowly. 4605@option{-fold-unroll-all-loops} implies the same options as 4606@option{-fold-unroll-loops}. 4607 4608@item -funswitch-loops 4609@opindex funswitch-loops 4610Move branches with loop invariant conditions out of the loop, with duplicates 4611of the loop on both branches (modified according to result of the condition). 4612 4613@item -funswitch-loops 4614@opindex funswitch-loops 4615Move branches with loop invariant conditions out of the loop, with duplicates 4616of the loop on both branches (modified according to result of the condition). 4617 4618@item -fprefetch-loop-arrays 4619@opindex fprefetch-loop-arrays 4620If supported by the target machine, generate instructions to prefetch 4621memory to improve the performance of loops that access large arrays. 4622 4623Disabled at level @option{-Os}. 4624 4625@item -ffunction-sections 4626@itemx -fdata-sections 4627@opindex ffunction-sections 4628@opindex fdata-sections 4629Place each function or data item into its own section in the output 4630file if the target supports arbitrary sections. The name of the 4631function or the name of the data item determines the section's name 4632in the output file. 4633 4634Use these options on systems where the linker can perform optimizations 4635to improve locality of reference in the instruction space. Most systems 4636using the ELF object format and SPARC processors running Solaris 2 have 4637linkers with such optimizations. AIX may have these optimizations in 4638the future. 4639 4640Only use these options when there are significant benefits from doing 4641so. When you specify these options, the assembler and linker will 4642create larger object and executable files and will also be slower. 4643You will not be able to use @code{gprof} on all systems if you 4644specify this option and you may have problems with debugging if 4645you specify both this option and @option{-g}. 4646 4647@item -fbranch-target-load-optimize 4648@opindex fbranch-target-load-optimize 4649Perform branch target register load optimization before prologue / epilogue 4650threading. 4651The use of target registers can typically be exposed only during reload, 4652thus hoisting loads out of loops and doing inter-block scheduling needs 4653a separate optimization pass. 4654 4655@item -fbranch-target-load-optimize2 4656@opindex fbranch-target-load-optimize2 4657Perform branch target register load optimization after prologue / epilogue 4658threading. 4659 4660@item --param @var{name}=@var{value} 4661@opindex param 4662In some places, GCC uses various constants to control the amount of 4663optimization that is done. For example, GCC will not inline functions 4664that contain more that a certain number of instructions. You can 4665control some of these constants on the command-line using the 4666@option{--param} option. 4667 4668The names of specific parameters, and the meaning of the values, are 4669tied to the internals of the compiler, and are subject to change 4670without notice in future releases. 4671 4672In each case, the @var{value} is an integer. The allowable choices for 4673@var{name} are given in the following table: 4674 4675@table @gcctabopt 4676@item max-crossjump-edges 4677The maximum number of incoming edges to consider for crossjumping. 4678The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in 4679the number of edges incoming to each block. Increasing values mean 4680more aggressive optimization, making the compile time increase with 4681probably small improvement in executable size. 4682 4683@item max-delay-slot-insn-search 4684The maximum number of instructions to consider when looking for an 4685instruction to fill a delay slot. If more than this arbitrary number of 4686instructions is searched, the time savings from filling the delay slot 4687will be minimal so stop searching. Increasing values mean more 4688aggressive optimization, making the compile time increase with probably 4689small improvement in executable run time. 4690 4691@item max-delay-slot-live-search 4692When trying to fill delay slots, the maximum number of instructions to 4693consider when searching for a block with valid live register 4694information. Increasing this arbitrarily chosen value means more 4695aggressive optimization, increasing the compile time. This parameter 4696should be removed when the delay slot code is rewritten to maintain the 4697control-flow graph. 4698 4699@item max-gcse-memory 4700The approximate maximum amount of memory that will be allocated in 4701order to perform the global common subexpression elimination 4702optimization. If more memory than specified is required, the 4703optimization will not be done. 4704 4705@item max-gcse-passes 4706The maximum number of passes of GCSE to run. 4707 4708@item max-pending-list-length 4709The maximum number of pending dependencies scheduling will allow 4710before flushing the current state and starting over. Large functions 4711with few branches or calls can create excessively large lists which 4712needlessly consume memory and resources. 4713 4714@item max-inline-insns-single 4715Several parameters control the tree inliner used in gcc. 4716This number sets the maximum number of instructions (counted in GCC's 4717internal representation) in a single function that the tree inliner 4718will consider for inlining. This only affects functions declared 4719inline and methods implemented in a class declaration (C++). 4720The default value is 500. 4721 4722@item max-inline-insns-auto 4723When you use @option{-finline-functions} (included in @option{-O3}), 4724a lot of functions that would otherwise not be considered for inlining 4725by the compiler will be investigated. To those functions, a different 4726(more restrictive) limit compared to functions declared inline can 4727be applied. 4728The default value is 100. 4729 4730@item large-function-insns 4731The limit specifying really large functions. For functions greater than this 4732limit inlining is constrained by @option{--param large-function-growth}. 4733This parameter is useful primarily to avoid extreme compilation time caused by non-linear 4734algorithms used by the backend. 4735This parameter is ignored when @option{-funit-at-a-time} is not used. 4736The default value is 3000. 4737 4738@item large-function-growth 4739Specifies maximal growth of large function caused by inlining in percents. 4740This parameter is ignored when @option{-funit-at-a-time} is not used. 4741The default value is 200. 4742 4743@item inline-unit-growth 4744Specifies maximal overall growth of the compilation unit caused by inlining. 4745This parameter is ignored when @option{-funit-at-a-time} is not used. 4746The default value is 150. 4747 4748@item max-inline-insns-rtl 4749For languages that use the RTL inliner (this happens at a later stage 4750than tree inlining), you can set the maximum allowable size (counted 4751in RTL instructions) for the RTL inliner with this parameter. 4752The default value is 600. 4753 4754@item max-unrolled-insns 4755The maximum number of instructions that a loop should have if that loop 4756is unrolled, and if the loop is unrolled, it determines how many times 4757the loop code is unrolled. 4758 4759@item max-average-unrolled-insns 4760The maximum number of instructions biased by probabilities of their execution 4761that a loop should have if that loop is unrolled, and if the loop is unrolled, 4762it determines how many times the loop code is unrolled. 4763 4764@item max-unroll-times 4765The maximum number of unrollings of a single loop. 4766 4767@item max-peeled-insns 4768The maximum number of instructions that a loop should have if that loop 4769is peeled, and if the loop is peeled, it determines how many times 4770the loop code is peeled. 4771 4772@item max-peel-times 4773The maximum number of peelings of a single loop. 4774 4775@item max-completely-peeled-insns 4776The maximum number of insns of a completely peeled loop. 4777 4778@item max-completely-peel-times 4779The maximum number of iterations of a loop to be suitable for complete peeling. 4780 4781@item max-unswitch-insns 4782The maximum number of insns of an unswitched loop. 4783 4784@item max-unswitch-level 4785The maximum number of branches unswitched in a single loop. 4786 4787@item hot-bb-count-fraction 4788Select fraction of the maximal count of repetitions of basic block in program 4789given basic block needs to have to be considered hot. 4790 4791@item hot-bb-frequency-fraction 4792Select fraction of the maximal frequency of executions of basic block in 4793function given basic block needs to have to be considered hot 4794 4795@item tracer-dynamic-coverage 4796@itemx tracer-dynamic-coverage-feedback 4797 4798This value is used to limit superblock formation once the given percentage of 4799executed instructions is covered. This limits unnecessary code size 4800expansion. 4801 4802The @option{tracer-dynamic-coverage-feedback} is used only when profile 4803feedback is available. The real profiles (as opposed to statically estimated 4804ones) are much less balanced allowing the threshold to be larger value. 4805 4806@item tracer-max-code-growth 4807Stop tail duplication once code growth has reached given percentage. This is 4808rather hokey argument, as most of the duplicates will be eliminated later in 4809cross jumping, so it may be set to much higher values than is the desired code 4810growth. 4811 4812@item tracer-min-branch-ratio 4813 4814Stop reverse growth when the reverse probability of best edge is less than this 4815threshold (in percent). 4816 4817@item tracer-min-branch-ratio 4818@itemx tracer-min-branch-ratio-feedback 4819 4820Stop forward growth if the best edge do have probability lower than this 4821threshold. 4822 4823Similarly to @option{tracer-dynamic-coverage} two values are present, one for 4824compilation for profile feedback and one for compilation without. The value 4825for compilation with profile feedback needs to be more conservative (higher) in 4826order to make tracer effective. 4827 4828@item max-cse-path-length 4829 4830Maximum number of basic blocks on path that cse considers. 4831 4832@item ggc-min-expand 4833 4834GCC uses a garbage collector to manage its own memory allocation. This 4835parameter specifies the minimum percentage by which the garbage 4836collector's heap should be allowed to expand between collections. 4837Tuning this may improve compilation speed; it has no effect on code 4838generation. 4839 4840The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when 4841RAM >= 1GB. If @code{getrlimit} is available, the notion of "RAM" is 4842the smallest of actual RAM, RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS. If 4843GCC is not able to calculate RAM on a particular platform, the lower 4844bound of 30% is used. Setting this parameter and 4845@option{ggc-min-heapsize} to zero causes a full collection to occur at 4846every opportunity. This is extremely slow, but can be useful for 4847debugging. 4848 4849@item ggc-min-heapsize 4850 4851Minimum size of the garbage collector's heap before it begins bothering 4852to collect garbage. The first collection occurs after the heap expands 4853by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}. Again, 4854tuning this may improve compilation speed, and has no effect on code 4855generation. 4856 4857The default is RAM/8, with a lower bound of 4096 (four megabytes) and an 4858upper bound of 131072 (128 megabytes). If @code{getrlimit} is 4859available, the notion of "RAM" is the smallest of actual RAM, 4860RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS. If GCC is not able to calculate 4861RAM on a particular platform, the lower bound is used. Setting this 4862parameter very large effectively disables garbage collection. Setting 4863this parameter and @option{ggc-min-expand} to zero causes a full 4864collection to occur at every opportunity. 4865 4866@item max-reload-search-insns 4867The maximum number of instruction reload should look backward for equivalent 4868register. Increasing values mean more aggressive optimization, making the 4869compile time increase with probably slightly better performance. The default 4870value is 100. 4871 4872@item max-cselib-memory-location 4873The maximum number of memory locations cselib should take into acount. 4874Increasing values mean more aggressive optimization, making the compile time 4875increase with probably slightly better performance. The default value is 500. 4876 4877@item reorder-blocks-duplicate 4878@itemx reorder-blocks-duplicate-feedback 4879 4880Used by basic block reordering pass to decide whether to use unconditional 4881branch or duplicate the code on its destination. Code is duplicated when its 4882estimated size is smaller than this value multiplied by the estimated size of 4883unconditional jump in the hot spots of the program. 4884 4885The @option{reorder-block-duplicate-feedback} is used only when profile 4886feedback is available and may be set to higher values than 4887@option{reorder-block-duplicate} since information about the hot spots is more 4888accurate. 4889@end table 4890@end table 4891 4892@node Preprocessor Options 4893@section Options Controlling the Preprocessor 4894@cindex preprocessor options 4895@cindex options, preprocessor 4896 4897These options control the C preprocessor, which is run on each C source 4898file before actual compilation. 4899 4900If you use the @option{-E} option, nothing is done except preprocessing. 4901Some of these options make sense only together with @option{-E} because 4902they cause the preprocessor output to be unsuitable for actual 4903compilation. 4904 4905@table @gcctabopt 4906@opindex Wp 4907You can use @option{-Wp,@var{option}} to bypass the compiler driver 4908and pass @var{option} directly through to the preprocessor. If 4909@var{option} contains commas, it is split into multiple options at the 4910commas. However, many options are modified, translated or interpreted 4911by the compiler driver before being passed to the preprocessor, and 4912@option{-Wp} forcibly bypasses this phase. The preprocessor's direct 4913interface is undocumented and subject to change, so whenever possible 4914you should avoid using @option{-Wp} and let the driver handle the 4915options instead. 4916 4917@item -Xpreprocessor @var{option} 4918@opindex preprocessor 4919Pass @var{option} as an option to the preprocessor. You can use this to 4920supply system-specific preprocessor options which GCC does not know how to 4921recognize. 4922 4923If you want to pass an option that takes an argument, you must use 4924@option{-Xpreprocessor} twice, once for the option and once for the argument. 4925@end table 4926 4927@include cppopts.texi 4928 4929@node Assembler Options 4930@section Passing Options to the Assembler 4931 4932@c prevent bad page break with this line 4933You can pass options to the assembler. 4934 4935@table @gcctabopt 4936@item -Wa,@var{option} 4937@opindex Wa 4938Pass @var{option} as an option to the assembler. If @var{option} 4939contains commas, it is split into multiple options at the commas. 4940 4941@item -Xassembler @var{option} 4942@opindex Xassembler 4943Pass @var{option} as an option to the assembler. You can use this to 4944supply system-specific assembler options which GCC does not know how to 4945recognize. 4946 4947If you want to pass an option that takes an argument, you must use 4948@option{-Xassembler} twice, once for the option and once for the argument. 4949 4950@end table 4951 4952@node Link Options 4953@section Options for Linking 4954@cindex link options 4955@cindex options, linking 4956 4957These options come into play when the compiler links object files into 4958an executable output file. They are meaningless if the compiler is 4959not doing a link step. 4960 4961@table @gcctabopt 4962@cindex file names 4963@item @var{object-file-name} 4964A file name that does not end in a special recognized suffix is 4965considered to name an object file or library. (Object files are 4966distinguished from libraries by the linker according to the file 4967contents.) If linking is done, these object files are used as input 4968to the linker. 4969 4970@item -c 4971@itemx -S 4972@itemx -E 4973@opindex c 4974@opindex S 4975@opindex E 4976If any of these options is used, then the linker is not run, and 4977object file names should not be used as arguments. @xref{Overall 4978Options}. 4979 4980@cindex Libraries 4981@item -l@var{library} 4982@itemx -l @var{library} 4983@opindex l 4984Search the library named @var{library} when linking. (The second 4985alternative with the library as a separate argument is only for 4986POSIX compliance and is not recommended.) 4987 4988It makes a difference where in the command you write this option; the 4989linker searches and processes libraries and object files in the order they 4990are specified. Thus, @samp{foo.o -lz bar.o} searches library @samp{z} 4991after file @file{foo.o} but before @file{bar.o}. If @file{bar.o} refers 4992to functions in @samp{z}, those functions may not be loaded. 4993 4994The linker searches a standard list of directories for the library, 4995which is actually a file named @file{lib@var{library}.a}. The linker 4996then uses this file as if it had been specified precisely by name. 4997 4998The directories searched include several standard system directories 4999plus any that you specify with @option{-L}. 5000 5001Normally the files found this way are library files---archive files 5002whose members are object files. The linker handles an archive file by 5003scanning through it for members which define symbols that have so far 5004been referenced but not defined. But if the file that is found is an 5005ordinary object file, it is linked in the usual fashion. The only 5006difference between using an @option{-l} option and specifying a file name 5007is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a} 5008and searches several directories. 5009 5010@item -lobjc 5011@opindex lobjc 5012You need this special case of the @option{-l} option in order to 5013link an Objective-C program. 5014 5015@item -nostartfiles 5016@opindex nostartfiles 5017Do not use the standard system startup files when linking. 5018The standard system libraries are used normally, unless @option{-nostdlib} 5019or @option{-nodefaultlibs} is used. 5020 5021@item -nodefaultlibs 5022@opindex nodefaultlibs 5023Do not use the standard system libraries when linking. 5024Only the libraries you specify will be passed to the linker. 5025The standard startup files are used normally, unless @option{-nostartfiles} 5026is used. The compiler may generate calls to memcmp, memset, and memcpy 5027for System V (and ISO C) environments or to bcopy and bzero for 5028BSD environments. These entries are usually resolved by entries in 5029libc. These entry points should be supplied through some other 5030mechanism when this option is specified. 5031 5032@item -nostdlib 5033@opindex nostdlib 5034Do not use the standard system startup files or libraries when linking. 5035No startup files and only the libraries you specify will be passed to 5036the linker. The compiler may generate calls to memcmp, memset, and memcpy 5037for System V (and ISO C) environments or to bcopy and bzero for 5038BSD environments. These entries are usually resolved by entries in 5039libc. These entry points should be supplied through some other 5040mechanism when this option is specified. 5041 5042@cindex @option{-lgcc}, use with @option{-nostdlib} 5043@cindex @option{-nostdlib} and unresolved references 5044@cindex unresolved references and @option{-nostdlib} 5045@cindex @option{-lgcc}, use with @option{-nodefaultlibs} 5046@cindex @option{-nodefaultlibs} and unresolved references 5047@cindex unresolved references and @option{-nodefaultlibs} 5048One of the standard libraries bypassed by @option{-nostdlib} and 5049@option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines 5050that GCC uses to overcome shortcomings of particular machines, or special 5051needs for some languages. 5052(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler 5053Collection (GCC) Internals}, 5054for more discussion of @file{libgcc.a}.) 5055In most cases, you need @file{libgcc.a} even when you want to avoid 5056other standard libraries. In other words, when you specify @option{-nostdlib} 5057or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well. 5058This ensures that you have no unresolved references to internal GCC 5059library subroutines. (For example, @samp{__main}, used to ensure C++ 5060constructors will be called; @pxref{Collect2,,@code{collect2}, gccint, 5061GNU Compiler Collection (GCC) Internals}.) 5062 5063@item -pie 5064@opindex pie 5065Produce a position independent executable on targets which support it. 5066For predictable results, you must also specify the same set of options 5067that were used to generate code (@option{-fpie}, @option{-fPIE}, 5068or model suboptions) when you specify this option. 5069 5070@item -s 5071@opindex s 5072Remove all symbol table and relocation information from the executable. 5073 5074@item -static 5075@opindex static 5076On systems that support dynamic linking, this prevents linking with the shared 5077libraries. On other systems, this option has no effect. 5078 5079@item -shared 5080@opindex shared 5081Produce a shared object which can then be linked with other objects to 5082form an executable. Not all systems support this option. For predictable 5083results, you must also specify the same set of options that were used to 5084generate code (@option{-fpic}, @option{-fPIC}, or model suboptions) 5085when you specify this option.@footnote{On some systems, @samp{gcc -shared} 5086needs to build supplementary stub code for constructors to work. On 5087multi-libbed systems, @samp{gcc -shared} must select the correct support 5088libraries to link against. Failing to supply the correct flags may lead 5089to subtle defects. Supplying them in cases where they are not necessary 5090is innocuous.} 5091 5092@item -shared-libgcc 5093@itemx -static-libgcc 5094@opindex shared-libgcc 5095@opindex static-libgcc 5096On systems that provide @file{libgcc} as a shared library, these options 5097force the use of either the shared or static version respectively. 5098If no shared version of @file{libgcc} was built when the compiler was 5099configured, these options have no effect. 5100 5101There are several situations in which an application should use the 5102shared @file{libgcc} instead of the static version. The most common 5103of these is when the application wishes to throw and catch exceptions 5104across different shared libraries. In that case, each of the libraries 5105as well as the application itself should use the shared @file{libgcc}. 5106 5107Therefore, the G++ and GCJ drivers automatically add 5108@option{-shared-libgcc} whenever you build a shared library or a main 5109executable, because C++ and Java programs typically use exceptions, so 5110this is the right thing to do. 5111 5112If, instead, you use the GCC driver to create shared libraries, you may 5113find that they will not always be linked with the shared @file{libgcc}. 5114If GCC finds, at its configuration time, that you have a non-GNU linker 5115or a GNU linker that does not support option @option{--eh-frame-hdr}, 5116it will link the shared version of @file{libgcc} into shared libraries 5117by default. Otherwise, it will take advantage of the linker and optimize 5118away the linking with the shared version of @file{libgcc}, linking with 5119the static version of libgcc by default. This allows exceptions to 5120propagate through such shared libraries, without incurring relocation 5121costs at library load time. 5122 5123However, if a library or main executable is supposed to throw or catch 5124exceptions, you must link it using the G++ or GCJ driver, as appropriate 5125for the languages used in the program, or using the option 5126@option{-shared-libgcc}, such that it is linked with the shared 5127@file{libgcc}. 5128 5129@item -symbolic 5130@opindex symbolic 5131Bind references to global symbols when building a shared object. Warn 5132about any unresolved references (unless overridden by the link editor 5133option @samp{-Xlinker -z -Xlinker defs}). Only a few systems support 5134this option. 5135 5136@item -Xlinker @var{option} 5137@opindex Xlinker 5138Pass @var{option} as an option to the linker. You can use this to 5139supply system-specific linker options which GCC does not know how to 5140recognize. 5141 5142If you want to pass an option that takes an argument, you must use 5143@option{-Xlinker} twice, once for the option and once for the argument. 5144For example, to pass @option{-assert definitions}, you must write 5145@samp{-Xlinker -assert -Xlinker definitions}. It does not work to write 5146@option{-Xlinker "-assert definitions"}, because this passes the entire 5147string as a single argument, which is not what the linker expects. 5148 5149@item -Wl,@var{option} 5150@opindex Wl 5151Pass @var{option} as an option to the linker. If @var{option} contains 5152commas, it is split into multiple options at the commas. 5153 5154@item -u @var{symbol} 5155@opindex u 5156Pretend the symbol @var{symbol} is undefined, to force linking of 5157library modules to define it. You can use @option{-u} multiple times with 5158different symbols to force loading of additional library modules. 5159@end table 5160 5161@node Directory Options 5162@section Options for Directory Search 5163@cindex directory options 5164@cindex options, directory search 5165@cindex search path 5166 5167These options specify directories to search for header files, for 5168libraries and for parts of the compiler: 5169 5170@table @gcctabopt 5171@item -I@var{dir} 5172@opindex I 5173Add the directory @var{dir} to the head of the list of directories to be 5174searched for header files. This can be used to override a system header 5175file, substituting your own version, since these directories are 5176searched before the system header file directories. However, you should 5177not use this option to add directories that contain vendor-supplied 5178system header files (use @option{-isystem} for that). If you use more than 5179one @option{-I} option, the directories are scanned in left-to-right 5180order; the standard system directories come after. 5181 5182If a standard system include directory, or a directory specified with 5183@option{-isystem}, is also specified with @option{-I}, the @option{-I} 5184option will be ignored. The directory will still be searched but as a 5185system directory at its normal position in the system include chain. 5186This is to ensure that GCC's procedure to fix buggy system headers and 5187the ordering for the include_next directive are not inadvertently changed. 5188If you really need to change the search order for system directories, 5189use the @option{-nostdinc} and/or @option{-isystem} options. 5190 5191@item -I- 5192@opindex I- 5193Any directories you specify with @option{-I} options before the @option{-I-} 5194option are searched only for the case of @samp{#include "@var{file}"}; 5195they are not searched for @samp{#include <@var{file}>}. 5196 5197If additional directories are specified with @option{-I} options after 5198the @option{-I-}, these directories are searched for all @samp{#include} 5199directives. (Ordinarily @emph{all} @option{-I} directories are used 5200this way.) 5201 5202In addition, the @option{-I-} option inhibits the use of the current 5203directory (where the current input file came from) as the first search 5204directory for @samp{#include "@var{file}"}. There is no way to 5205override this effect of @option{-I-}. With @option{-I.} you can specify 5206searching the directory which was current when the compiler was 5207invoked. That is not exactly the same as what the preprocessor does 5208by default, but it is often satisfactory. 5209 5210@option{-I-} does not inhibit the use of the standard system directories 5211for header files. Thus, @option{-I-} and @option{-nostdinc} are 5212independent. 5213 5214@item -L@var{dir} 5215@opindex L 5216Add directory @var{dir} to the list of directories to be searched 5217for @option{-l}. 5218 5219@item -B@var{prefix} 5220@opindex B 5221This option specifies where to find the executables, libraries, 5222include files, and data files of the compiler itself. 5223 5224The compiler driver program runs one or more of the subprograms 5225@file{cpp}, @file{cc1}, @file{as} and @file{ld}. It tries 5226@var{prefix} as a prefix for each program it tries to run, both with and 5227without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}). 5228 5229For each subprogram to be run, the compiler driver first tries the 5230@option{-B} prefix, if any. If that name is not found, or if @option{-B} 5231was not specified, the driver tries two standard prefixes, which are 5232@file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}. If neither of 5233those results in a file name that is found, the unmodified program 5234name is searched for using the directories specified in your 5235@env{PATH} environment variable. 5236 5237The compiler will check to see if the path provided by the @option{-B} 5238refers to a directory, and if necessary it will add a directory 5239separator character at the end of the path. 5240 5241@option{-B} prefixes that effectively specify directory names also apply 5242to libraries in the linker, because the compiler translates these 5243options into @option{-L} options for the linker. They also apply to 5244includes files in the preprocessor, because the compiler translates these 5245options into @option{-isystem} options for the preprocessor. In this case, 5246the compiler appends @samp{include} to the prefix. 5247 5248The run-time support file @file{libgcc.a} can also be searched for using 5249the @option{-B} prefix, if needed. If it is not found there, the two 5250standard prefixes above are tried, and that is all. The file is left 5251out of the link if it is not found by those means. 5252 5253Another way to specify a prefix much like the @option{-B} prefix is to use 5254the environment variable @env{GCC_EXEC_PREFIX}. @xref{Environment 5255Variables}. 5256 5257As a special kludge, if the path provided by @option{-B} is 5258@file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to 52599, then it will be replaced by @file{[dir/]include}. This is to help 5260with boot-strapping the compiler. 5261 5262@item -specs=@var{file} 5263@opindex specs 5264Process @var{file} after the compiler reads in the standard @file{specs} 5265file, in order to override the defaults that the @file{gcc} driver 5266program uses when determining what switches to pass to @file{cc1}, 5267@file{cc1plus}, @file{as}, @file{ld}, etc. More than one 5268@option{-specs=@var{file}} can be specified on the command line, and they 5269are processed in order, from left to right. 5270@end table 5271 5272@c man end 5273 5274@node Spec Files 5275@section Specifying subprocesses and the switches to pass to them 5276@cindex Spec Files 5277 5278@command{gcc} is a driver program. It performs its job by invoking a 5279sequence of other programs to do the work of compiling, assembling and 5280linking. GCC interprets its command-line parameters and uses these to 5281deduce which programs it should invoke, and which command-line options 5282it ought to place on their command lines. This behavior is controlled 5283by @dfn{spec strings}. In most cases there is one spec string for each 5284program that GCC can invoke, but a few programs have multiple spec 5285strings to control their behavior. The spec strings built into GCC can 5286be overridden by using the @option{-specs=} command-line switch to specify 5287a spec file. 5288 5289@dfn{Spec files} are plaintext files that are used to construct spec 5290strings. They consist of a sequence of directives separated by blank 5291lines. The type of directive is determined by the first non-whitespace 5292character on the line and it can be one of the following: 5293 5294@table @code 5295@item %@var{command} 5296Issues a @var{command} to the spec file processor. The commands that can 5297appear here are: 5298 5299@table @code 5300@item %include <@var{file}> 5301@cindex %include 5302Search for @var{file} and insert its text at the current point in the 5303specs file. 5304 5305@item %include_noerr <@var{file}> 5306@cindex %include_noerr 5307Just like @samp{%include}, but do not generate an error message if the include 5308file cannot be found. 5309 5310@item %rename @var{old_name} @var{new_name} 5311@cindex %rename 5312Rename the spec string @var{old_name} to @var{new_name}. 5313 5314@end table 5315 5316@item *[@var{spec_name}]: 5317This tells the compiler to create, override or delete the named spec 5318string. All lines after this directive up to the next directive or 5319blank line are considered to be the text for the spec string. If this 5320results in an empty string then the spec will be deleted. (Or, if the 5321spec did not exist, then nothing will happened.) Otherwise, if the spec 5322does not currently exist a new spec will be created. If the spec does 5323exist then its contents will be overridden by the text of this 5324directive, unless the first character of that text is the @samp{+} 5325character, in which case the text will be appended to the spec. 5326 5327@item [@var{suffix}]: 5328Creates a new @samp{[@var{suffix}] spec} pair. All lines after this directive 5329and up to the next directive or blank line are considered to make up the 5330spec string for the indicated suffix. When the compiler encounters an 5331input file with the named suffix, it will processes the spec string in 5332order to work out how to compile that file. For example: 5333 5334@smallexample 5335.ZZ: 5336z-compile -input %i 5337@end smallexample 5338 5339This says that any input file whose name ends in @samp{.ZZ} should be 5340passed to the program @samp{z-compile}, which should be invoked with the 5341command-line switch @option{-input} and with the result of performing the 5342@samp{%i} substitution. (See below.) 5343 5344As an alternative to providing a spec string, the text that follows a 5345suffix directive can be one of the following: 5346 5347@table @code 5348@item @@@var{language} 5349This says that the suffix is an alias for a known @var{language}. This is 5350similar to using the @option{-x} command-line switch to GCC to specify a 5351language explicitly. For example: 5352 5353@smallexample 5354.ZZ: 5355@@c++ 5356@end smallexample 5357 5358Says that .ZZ files are, in fact, C++ source files. 5359 5360@item #@var{name} 5361This causes an error messages saying: 5362 5363@smallexample 5364@var{name} compiler not installed on this system. 5365@end smallexample 5366@end table 5367 5368GCC already has an extensive list of suffixes built into it. 5369This directive will add an entry to the end of the list of suffixes, but 5370since the list is searched from the end backwards, it is effectively 5371possible to override earlier entries using this technique. 5372 5373@end table 5374 5375GCC has the following spec strings built into it. Spec files can 5376override these strings or create their own. Note that individual 5377targets can also add their own spec strings to this list. 5378 5379@smallexample 5380asm Options to pass to the assembler 5381asm_final Options to pass to the assembler post-processor 5382cpp Options to pass to the C preprocessor 5383cc1 Options to pass to the C compiler 5384cc1plus Options to pass to the C++ compiler 5385endfile Object files to include at the end of the link 5386link Options to pass to the linker 5387lib Libraries to include on the command line to the linker 5388libgcc Decides which GCC support library to pass to the linker 5389linker Sets the name of the linker 5390predefines Defines to be passed to the C preprocessor 5391signed_char Defines to pass to CPP to say whether @code{char} is signed 5392 by default 5393startfile Object files to include at the start of the link 5394@end smallexample 5395 5396Here is a small example of a spec file: 5397 5398@smallexample 5399%rename lib old_lib 5400 5401*lib: 5402--start-group -lgcc -lc -leval1 --end-group %(old_lib) 5403@end smallexample 5404 5405This example renames the spec called @samp{lib} to @samp{old_lib} and 5406then overrides the previous definition of @samp{lib} with a new one. 5407The new definition adds in some extra command-line options before 5408including the text of the old definition. 5409 5410@dfn{Spec strings} are a list of command-line options to be passed to their 5411corresponding program. In addition, the spec strings can contain 5412@samp{%}-prefixed sequences to substitute variable text or to 5413conditionally insert text into the command line. Using these constructs 5414it is possible to generate quite complex command lines. 5415 5416Here is a table of all defined @samp{%}-sequences for spec 5417strings. Note that spaces are not generated automatically around the 5418results of expanding these sequences. Therefore you can concatenate them 5419together or combine them with constant text in a single argument. 5420 5421@table @code 5422@item %% 5423Substitute one @samp{%} into the program name or argument. 5424 5425@item %i 5426Substitute the name of the input file being processed. 5427 5428@item %b 5429Substitute the basename of the input file being processed. 5430This is the substring up to (and not including) the last period 5431and not including the directory. 5432 5433@item %B 5434This is the same as @samp{%b}, but include the file suffix (text after 5435the last period). 5436 5437@item %d 5438Marks the argument containing or following the @samp{%d} as a 5439temporary file name, so that that file will be deleted if GCC exits 5440successfully. Unlike @samp{%g}, this contributes no text to the 5441argument. 5442 5443@item %g@var{suffix} 5444Substitute a file name that has suffix @var{suffix} and is chosen 5445once per compilation, and mark the argument in the same way as 5446@samp{%d}. To reduce exposure to denial-of-service attacks, the file 5447name is now chosen in a way that is hard to predict even when previously 5448chosen file names are known. For example, @samp{%g.s @dots{} %g.o @dots{} %g.s} 5449might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}. @var{suffix} matches 5450the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is 5451treated exactly as if @samp{%O} had been preprocessed. Previously, @samp{%g} 5452was simply substituted with a file name chosen once per compilation, 5453without regard to any appended suffix (which was therefore treated 5454just like ordinary text), making such attacks more likely to succeed. 5455 5456@item %u@var{suffix} 5457Like @samp{%g}, but generates a new temporary file name even if 5458@samp{%u@var{suffix}} was already seen. 5459 5460@item %U@var{suffix} 5461Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a 5462new one if there is no such last file name. In the absence of any 5463@samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share 5464the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s} 5465would involve the generation of two distinct file names, one 5466for each @samp{%g.s} and another for each @samp{%U.s}. Previously, @samp{%U} was 5467simply substituted with a file name chosen for the previous @samp{%u}, 5468without regard to any appended suffix. 5469 5470@item %j@var{suffix} 5471Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is 5472writable, and if save-temps is off; otherwise, substitute the name 5473of a temporary file, just like @samp{%u}. This temporary file is not 5474meant for communication between processes, but rather as a junk 5475disposal mechanism. 5476 5477@item %|@var{suffix} 5478@itemx %m@var{suffix} 5479Like @samp{%g}, except if @option{-pipe} is in effect. In that case 5480@samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at 5481all. These are the two most common ways to instruct a program that it 5482should read from standard input or write to standard output. If you 5483need something more elaborate you can use an @samp{%@{pipe:@code{X}@}} 5484construct: see for example @file{f/lang-specs.h}. 5485 5486@item %.@var{SUFFIX} 5487Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args 5488when it is subsequently output with @samp{%*}. @var{SUFFIX} is 5489terminated by the next space or %. 5490 5491@item %w 5492Marks the argument containing or following the @samp{%w} as the 5493designated output file of this compilation. This puts the argument 5494into the sequence of arguments that @samp{%o} will substitute later. 5495 5496@item %o 5497Substitutes the names of all the output files, with spaces 5498automatically placed around them. You should write spaces 5499around the @samp{%o} as well or the results are undefined. 5500@samp{%o} is for use in the specs for running the linker. 5501Input files whose names have no recognized suffix are not compiled 5502at all, but they are included among the output files, so they will 5503be linked. 5504 5505@item %O 5506Substitutes the suffix for object files. Note that this is 5507handled specially when it immediately follows @samp{%g, %u, or %U}, 5508because of the need for those to form complete file names. The 5509handling is such that @samp{%O} is treated exactly as if it had already 5510been substituted, except that @samp{%g, %u, and %U} do not currently 5511support additional @var{suffix} characters following @samp{%O} as they would 5512following, for example, @samp{.o}. 5513 5514@item %p 5515Substitutes the standard macro predefinitions for the 5516current target machine. Use this when running @code{cpp}. 5517 5518@item %P 5519Like @samp{%p}, but puts @samp{__} before and after the name of each 5520predefined macro, except for macros that start with @samp{__} or with 5521@samp{_@var{L}}, where @var{L} is an uppercase letter. This is for ISO 5522C@. 5523 5524@item %I 5525Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}), 5526@option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}), and 5527@option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options) 5528as necessary. 5529 5530@item %s 5531Current argument is the name of a library or startup file of some sort. 5532Search for that file in a standard list of directories and substitute 5533the full name found. 5534 5535@item %e@var{str} 5536Print @var{str} as an error message. @var{str} is terminated by a newline. 5537Use this when inconsistent options are detected. 5538 5539@item %(@var{name}) 5540Substitute the contents of spec string @var{name} at this point. 5541 5542@item %[@var{name}] 5543Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments. 5544 5545@item %x@{@var{option}@} 5546Accumulate an option for @samp{%X}. 5547 5548@item %X 5549Output the accumulated linker options specified by @option{-Wl} or a @samp{%x} 5550spec string. 5551 5552@item %Y 5553Output the accumulated assembler options specified by @option{-Wa}. 5554 5555@item %Z 5556Output the accumulated preprocessor options specified by @option{-Wp}. 5557 5558@item %a 5559Process the @code{asm} spec. This is used to compute the 5560switches to be passed to the assembler. 5561 5562@item %A 5563Process the @code{asm_final} spec. This is a spec string for 5564passing switches to an assembler post-processor, if such a program is 5565needed. 5566 5567@item %l 5568Process the @code{link} spec. This is the spec for computing the 5569command line passed to the linker. Typically it will make use of the 5570@samp{%L %G %S %D and %E} sequences. 5571 5572@item %D 5573Dump out a @option{-L} option for each directory that GCC believes might 5574contain startup files. If the target supports multilibs then the 5575current multilib directory will be prepended to each of these paths. 5576 5577@item %M 5578Output the multilib directory with directory separators replaced with 5579@samp{_}. If multilib directories are not set, or the multilib directory is 5580@file{.} then this option emits nothing. 5581 5582@item %L 5583Process the @code{lib} spec. This is a spec string for deciding which 5584libraries should be included on the command line to the linker. 5585 5586@item %G 5587Process the @code{libgcc} spec. This is a spec string for deciding 5588which GCC support library should be included on the command line to the linker. 5589 5590@item %S 5591Process the @code{startfile} spec. This is a spec for deciding which 5592object files should be the first ones passed to the linker. Typically 5593this might be a file named @file{crt0.o}. 5594 5595@item %E 5596Process the @code{endfile} spec. This is a spec string that specifies 5597the last object files that will be passed to the linker. 5598 5599@item %C 5600Process the @code{cpp} spec. This is used to construct the arguments 5601to be passed to the C preprocessor. 5602 5603@item %c 5604Process the @code{signed_char} spec. This is intended to be used 5605to tell cpp whether a char is signed. It typically has the definition: 5606@smallexample 5607%@{funsigned-char:-D__CHAR_UNSIGNED__@} 5608@end smallexample 5609 5610@item %1 5611Process the @code{cc1} spec. This is used to construct the options to be 5612passed to the actual C compiler (@samp{cc1}). 5613 5614@item %2 5615Process the @code{cc1plus} spec. This is used to construct the options to be 5616passed to the actual C++ compiler (@samp{cc1plus}). 5617 5618@item %* 5619Substitute the variable part of a matched option. See below. 5620Note that each comma in the substituted string is replaced by 5621a single space. 5622 5623@item %<@code{S} 5624Remove all occurrences of @code{-S} from the command line. Note---this 5625command is position dependent. @samp{%} commands in the spec string 5626before this one will see @code{-S}, @samp{%} commands in the spec string 5627after this one will not. 5628 5629@item %:@var{function}(@var{args}) 5630Call the named function @var{function}, passing it @var{args}. 5631@var{args} is first processed as a nested spec string, then split 5632into an argument vector in the usual fashion. The function returns 5633a string which is processed as if it had appeared literally as part 5634of the current spec. 5635 5636The following built-in spec functions are provided: 5637 5638@table @code 5639@item @code{if-exists} 5640The @code{if-exists} spec function takes one argument, an absolute 5641pathname to a file. If the file exists, @code{if-exists} returns the 5642pathname. Here is a small example of its usage: 5643 5644@smallexample 5645*startfile: 5646crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 5647@end smallexample 5648 5649@item @code{if-exists-else} 5650The @code{if-exists-else} spec function is similar to the @code{if-exists} 5651spec function, except that it takes two arguments. The first argument is 5652an absolute pathname to a file. If the file exists, @code{if-exists-else} 5653returns the pathname. If it does not exist, it returns the second argument. 5654This way, @code{if-exists-else} can be used to select one file or another, 5655based on the existence of the first. Here is a small example of its usage: 5656 5657@smallexample 5658*startfile: 5659crt0%O%s %:if-exists(crti%O%s) \ 5660%:if-exists-else(crtbeginT%O%s crtbegin%O%s) 5661@end smallexample 5662@end table 5663 5664@item %@{@code{S}@} 5665Substitutes the @code{-S} switch, if that switch was given to GCC@. 5666If that switch was not specified, this substitutes nothing. Note that 5667the leading dash is omitted when specifying this option, and it is 5668automatically inserted if the substitution is performed. Thus the spec 5669string @samp{%@{foo@}} would match the command-line option @option{-foo} 5670and would output the command line option @option{-foo}. 5671 5672@item %W@{@code{S}@} 5673Like %@{@code{S}@} but mark last argument supplied within as a file to be 5674deleted on failure. 5675 5676@item %@{@code{S}*@} 5677Substitutes all the switches specified to GCC whose names start 5678with @code{-S}, but which also take an argument. This is used for 5679switches like @option{-o}, @option{-D}, @option{-I}, etc. 5680GCC considers @option{-o foo} as being 5681one switch whose names starts with @samp{o}. %@{o*@} would substitute this 5682text, including the space. Thus two arguments would be generated. 5683 5684@item %@{@code{S}*&@code{T}*@} 5685Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options 5686(the order of @code{S} and @code{T} in the spec is not significant). 5687There can be any number of ampersand-separated variables; for each the 5688wild card is optional. Useful for CPP as @samp{%@{D*&U*&A*@}}. 5689 5690@item %@{@code{S}:@code{X}@} 5691Substitutes @code{X}, if the @samp{-S} switch was given to GCC@. 5692 5693@item %@{!@code{S}:@code{X}@} 5694Substitutes @code{X}, if the @samp{-S} switch was @emph{not} given to GCC@. 5695 5696@item %@{@code{S}*:@code{X}@} 5697Substitutes @code{X} if one or more switches whose names start with 5698@code{-S} are specified to GCC@. Normally @code{X} is substituted only 5699once, no matter how many such switches appeared. However, if @code{%*} 5700appears somewhere in @code{X}, then @code{X} will be substituted once 5701for each matching switch, with the @code{%*} replaced by the part of 5702that switch that matched the @code{*}. 5703 5704@item %@{.@code{S}:@code{X}@} 5705Substitutes @code{X}, if processing a file with suffix @code{S}. 5706 5707@item %@{!.@code{S}:@code{X}@} 5708Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}. 5709 5710@item %@{@code{S}|@code{P}:@code{X}@} 5711Substitutes @code{X} if either @code{-S} or @code{-P} was given to GCC@. 5712This may be combined with @samp{!}, @samp{.}, and @code{*} sequences as well, 5713although they have a stronger binding than the @samp{|}. If @code{%*} 5714appears in @code{X}, all of the alternatives must be starred, and only 5715the first matching alternative is substituted. 5716 5717For example, a spec string like this: 5718 5719@smallexample 5720%@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@} 5721@end smallexample 5722 5723will output the following command-line options from the following input 5724command-line options: 5725 5726@smallexample 5727fred.c -foo -baz 5728jim.d -bar -boggle 5729-d fred.c -foo -baz -boggle 5730-d jim.d -bar -baz -boggle 5731@end smallexample 5732 5733@item %@{S:X; T:Y; :D@} 5734 5735If @code{S} was given to GCC, substitutes @code{X}; else if @code{T} was 5736given to GCC, substitutes @code{Y}; else substitutes @code{D}. There can 5737be as many clauses as you need. This may be combined with @code{.}, 5738@code{!}, @code{|}, and @code{*} as needed. 5739 5740 5741@end table 5742 5743The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar 5744construct may contain other nested @samp{%} constructs or spaces, or 5745even newlines. They are processed as usual, as described above. 5746Trailing white space in @code{X} is ignored. White space may also 5747appear anywhere on the left side of the colon in these constructs, 5748except between @code{.} or @code{*} and the corresponding word. 5749 5750The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are 5751handled specifically in these constructs. If another value of 5752@option{-O} or the negated form of a @option{-f}, @option{-m}, or 5753@option{-W} switch is found later in the command line, the earlier 5754switch value is ignored, except with @{@code{S}*@} where @code{S} is 5755just one letter, which passes all matching options. 5756 5757The character @samp{|} at the beginning of the predicate text is used to 5758indicate that a command should be piped to the following command, but 5759only if @option{-pipe} is specified. 5760 5761It is built into GCC which switches take arguments and which do not. 5762(You might think it would be useful to generalize this to allow each 5763compiler's spec to say which switches take arguments. But this cannot 5764be done in a consistent fashion. GCC cannot even decide which input 5765files have been specified without knowing which switches take arguments, 5766and it must know which input files to compile in order to tell which 5767compilers to run). 5768 5769GCC also knows implicitly that arguments starting in @option{-l} are to be 5770treated as compiler output files, and passed to the linker in their 5771proper position among the other output files. 5772 5773@c man begin OPTIONS 5774 5775@node Target Options 5776@section Specifying Target Machine and Compiler Version 5777@cindex target options 5778@cindex cross compiling 5779@cindex specifying machine version 5780@cindex specifying compiler version and target machine 5781@cindex compiler version, specifying 5782@cindex target machine, specifying 5783 5784The usual way to run GCC is to run the executable called @file{gcc}, or 5785@file{<machine>-gcc} when cross-compiling, or 5786@file{<machine>-gcc-<version>} to run a version other than the one that 5787was installed last. Sometimes this is inconvenient, so GCC provides 5788options that will switch to another cross-compiler or version. 5789 5790@table @gcctabopt 5791@item -b @var{machine} 5792@opindex b 5793The argument @var{machine} specifies the target machine for compilation. 5794 5795The value to use for @var{machine} is the same as was specified as the 5796machine type when configuring GCC as a cross-compiler. For 5797example, if a cross-compiler was configured with @samp{configure 5798i386v}, meaning to compile for an 80386 running System V, then you 5799would specify @option{-b i386v} to run that cross compiler. 5800 5801@item -V @var{version} 5802@opindex V 5803The argument @var{version} specifies which version of GCC to run. 5804This is useful when multiple versions are installed. For example, 5805@var{version} might be @samp{2.0}, meaning to run GCC version 2.0. 5806@end table 5807 5808The @option{-V} and @option{-b} options work by running the 5809@file{<machine>-gcc-<version>} executable, so there's no real reason to 5810use them if you can just run that directly. 5811 5812@node Submodel Options 5813@section Hardware Models and Configurations 5814@cindex submodel options 5815@cindex specifying hardware config 5816@cindex hardware models and configurations, specifying 5817@cindex machine dependent options 5818 5819Earlier we discussed the standard option @option{-b} which chooses among 5820different installed compilers for completely different target 5821machines, such as VAX vs.@: 68000 vs.@: 80386. 5822 5823In addition, each of these target machine types can have its own 5824special options, starting with @samp{-m}, to choose among various 5825hardware models or configurations---for example, 68010 vs 68020, 5826floating coprocessor or none. A single installed version of the 5827compiler can compile for any model or configuration, according to the 5828options specified. 5829 5830Some configurations of the compiler also support additional special 5831options, usually for compatibility with other compilers on the same 5832platform. 5833 5834These options are defined by the macro @code{TARGET_SWITCHES} in the 5835machine description. The default for the options is also defined by 5836that macro, which enables you to change the defaults. 5837 5838@menu 5839* M680x0 Options:: 5840* M68hc1x Options:: 5841* VAX Options:: 5842* SPARC Options:: 5843* ARM Options:: 5844* MN10300 Options:: 5845* M32R/D Options:: 5846* RS/6000 and PowerPC Options:: 5847* Darwin Options:: 5848* MIPS Options:: 5849* i386 and x86-64 Options:: 5850* HPPA Options:: 5851* Intel 960 Options:: 5852* DEC Alpha Options:: 5853* DEC Alpha/VMS Options:: 5854* H8/300 Options:: 5855* SH Options:: 5856* System V Options:: 5857* TMS320C3x/C4x Options:: 5858* V850 Options:: 5859* ARC Options:: 5860* NS32K Options:: 5861* AVR Options:: 5862* MCore Options:: 5863* IA-64 Options:: 5864* D30V Options:: 5865* S/390 and zSeries Options:: 5866* CRIS Options:: 5867* MMIX Options:: 5868* PDP-11 Options:: 5869* Xstormy16 Options:: 5870* Xtensa Options:: 5871* FRV Options:: 5872@end menu 5873 5874@node M680x0 Options 5875@subsection M680x0 Options 5876@cindex M680x0 options 5877 5878These are the @samp{-m} options defined for the 68000 series. The default 5879values for these options depends on which style of 68000 was selected when 5880the compiler was configured; the defaults for the most common choices are 5881given below. 5882 5883@table @gcctabopt 5884@item -m68000 5885@itemx -mc68000 5886@opindex m68000 5887@opindex mc68000 5888Generate output for a 68000. This is the default 5889when the compiler is configured for 68000-based systems. 5890 5891Use this option for microcontrollers with a 68000 or EC000 core, 5892including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 5893 5894@item -m68020 5895@itemx -mc68020 5896@opindex m68020 5897@opindex mc68020 5898Generate output for a 68020. This is the default 5899when the compiler is configured for 68020-based systems. 5900 5901@item -m68881 5902@opindex m68881 5903Generate output containing 68881 instructions for floating point. 5904This is the default for most 68020 systems unless @option{--nfp} was 5905specified when the compiler was configured. 5906 5907@item -m68030 5908@opindex m68030 5909Generate output for a 68030. This is the default when the compiler is 5910configured for 68030-based systems. 5911 5912@item -m68040 5913@opindex m68040 5914Generate output for a 68040. This is the default when the compiler is 5915configured for 68040-based systems. 5916 5917This option inhibits the use of 68881/68882 instructions that have to be 5918emulated by software on the 68040. Use this option if your 68040 does not 5919have code to emulate those instructions. 5920 5921@item -m68060 5922@opindex m68060 5923Generate output for a 68060. This is the default when the compiler is 5924configured for 68060-based systems. 5925 5926This option inhibits the use of 68020 and 68881/68882 instructions that 5927have to be emulated by software on the 68060. Use this option if your 68060 5928does not have code to emulate those instructions. 5929 5930@item -mcpu32 5931@opindex mcpu32 5932Generate output for a CPU32. This is the default 5933when the compiler is configured for CPU32-based systems. 5934 5935Use this option for microcontrollers with a 5936CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334, 593768336, 68340, 68341, 68349 and 68360. 5938 5939@item -m5200 5940@opindex m5200 5941Generate output for a 520X ``coldfire'' family cpu. This is the default 5942when the compiler is configured for 520X-based systems. 5943 5944Use this option for microcontroller with a 5200 core, including 5945the MCF5202, MCF5203, MCF5204 and MCF5202. 5946 5947 5948@item -m68020-40 5949@opindex m68020-40 5950Generate output for a 68040, without using any of the new instructions. 5951This results in code which can run relatively efficiently on either a 595268020/68881 or a 68030 or a 68040. The generated code does use the 595368881 instructions that are emulated on the 68040. 5954 5955@item -m68020-60 5956@opindex m68020-60 5957Generate output for a 68060, without using any of the new instructions. 5958This results in code which can run relatively efficiently on either a 595968020/68881 or a 68030 or a 68040. The generated code does use the 596068881 instructions that are emulated on the 68060. 5961 5962@item -msoft-float 5963@opindex msoft-float 5964Generate output containing library calls for floating point. 5965@strong{Warning:} the requisite libraries are not available for all m68k 5966targets. Normally the facilities of the machine's usual C compiler are 5967used, but this can't be done directly in cross-compilation. You must 5968make your own arrangements to provide suitable library functions for 5969cross-compilation. The embedded targets @samp{m68k-*-aout} and 5970@samp{m68k-*-coff} do provide software floating point support. 5971 5972@item -mshort 5973@opindex mshort 5974Consider type @code{int} to be 16 bits wide, like @code{short int}. 5975 5976@item -mnobitfield 5977@opindex mnobitfield 5978Do not use the bit-field instructions. The @option{-m68000}, @option{-mcpu32} 5979and @option{-m5200} options imply @w{@option{-mnobitfield}}. 5980 5981@item -mbitfield 5982@opindex mbitfield 5983Do use the bit-field instructions. The @option{-m68020} option implies 5984@option{-mbitfield}. This is the default if you use a configuration 5985designed for a 68020. 5986 5987@item -mrtd 5988@opindex mrtd 5989Use a different function-calling convention, in which functions 5990that take a fixed number of arguments return with the @code{rtd} 5991instruction, which pops their arguments while returning. This 5992saves one instruction in the caller since there is no need to pop 5993the arguments there. 5994 5995This calling convention is incompatible with the one normally 5996used on Unix, so you cannot use it if you need to call libraries 5997compiled with the Unix compiler. 5998 5999Also, you must provide function prototypes for all functions that 6000take variable numbers of arguments (including @code{printf}); 6001otherwise incorrect code will be generated for calls to those 6002functions. 6003 6004In addition, seriously incorrect code will result if you call a 6005function with too many arguments. (Normally, extra arguments are 6006harmlessly ignored.) 6007 6008The @code{rtd} instruction is supported by the 68010, 68020, 68030, 600968040, 68060 and CPU32 processors, but not by the 68000 or 5200. 6010 6011@item -malign-int 6012@itemx -mno-align-int 6013@opindex malign-int 6014@opindex mno-align-int 6015Control whether GCC aligns @code{int}, @code{long}, @code{long long}, 6016@code{float}, @code{double}, and @code{long double} variables on a 32-bit 6017boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}). 6018Aligning variables on 32-bit boundaries produces code that runs somewhat 6019faster on processors with 32-bit busses at the expense of more memory. 6020 6021@strong{Warning:} if you use the @option{-malign-int} switch, GCC will 6022align structures containing the above types differently than 6023most published application binary interface specifications for the m68k. 6024 6025@item -mpcrel 6026@opindex mpcrel 6027Use the pc-relative addressing mode of the 68000 directly, instead of 6028using a global offset table. At present, this option implies @option{-fpic}, 6029allowing at most a 16-bit offset for pc-relative addressing. @option{-fPIC} is 6030not presently supported with @option{-mpcrel}, though this could be supported for 603168020 and higher processors. 6032 6033@item -mno-strict-align 6034@itemx -mstrict-align 6035@opindex mno-strict-align 6036@opindex mstrict-align 6037Do not (do) assume that unaligned memory references will be handled by 6038the system. 6039 6040@item -msep-data 6041Generate code that allows the data segment to be located in a different 6042area of memory from the text segment. This allows for execute in place in 6043an environment without virtual memory management. This option implies -fPIC. 6044 6045@item -mno-sep-data 6046Generate code that assumes that the data segment follows the text segment. 6047This is the default. 6048 6049@item -mid-shared-library 6050Generate code that supports shared libraries via the library ID method. 6051This allows for execute in place and shared libraries in an environment 6052without virtual memory management. This option implies -fPIC. 6053 6054@item -mno-id-shared-library 6055Generate code that doesn't assume ID based shared libraries are being used. 6056This is the default. 6057 6058@item -mshared-library-id=n 6059Specified the identification number of the ID based shared library being 6060compiled. Specifying a value of 0 will generate more compact code, specifying 6061other values will force the allocation of that number to the current 6062library but is no more space or time efficient than omitting this option. 6063 6064@end table 6065 6066@node M68hc1x Options 6067@subsection M68hc1x Options 6068@cindex M68hc1x options 6069 6070These are the @samp{-m} options defined for the 68hc11 and 68hc12 6071microcontrollers. The default values for these options depends on 6072which style of microcontroller was selected when the compiler was configured; 6073the defaults for the most common choices are given below. 6074 6075@table @gcctabopt 6076@item -m6811 6077@itemx -m68hc11 6078@opindex m6811 6079@opindex m68hc11 6080Generate output for a 68HC11. This is the default 6081when the compiler is configured for 68HC11-based systems. 6082 6083@item -m6812 6084@itemx -m68hc12 6085@opindex m6812 6086@opindex m68hc12 6087Generate output for a 68HC12. This is the default 6088when the compiler is configured for 68HC12-based systems. 6089 6090@item -m68S12 6091@itemx -m68hcs12 6092@opindex m68S12 6093@opindex m68hcs12 6094Generate output for a 68HCS12. 6095 6096@item -mauto-incdec 6097@opindex mauto-incdec 6098Enable the use of 68HC12 pre and post auto-increment and auto-decrement 6099addressing modes. 6100 6101@item -minmax 6102@itemx -nominmax 6103@opindex minmax 6104@opindex mnominmax 6105Enable the use of 68HC12 min and max instructions. 6106 6107@item -mlong-calls 6108@itemx -mno-long-calls 6109@opindex mlong-calls 6110@opindex mno-long-calls 6111Treat all calls as being far away (near). If calls are assumed to be 6112far away, the compiler will use the @code{call} instruction to 6113call a function and the @code{rtc} instruction for returning. 6114 6115@item -mshort 6116@opindex mshort 6117Consider type @code{int} to be 16 bits wide, like @code{short int}. 6118 6119@item -msoft-reg-count=@var{count} 6120@opindex msoft-reg-count 6121Specify the number of pseudo-soft registers which are used for the 6122code generation. The maximum number is 32. Using more pseudo-soft 6123register may or may not result in better code depending on the program. 6124The default is 4 for 68HC11 and 2 for 68HC12. 6125 6126@end table 6127 6128@node VAX Options 6129@subsection VAX Options 6130@cindex VAX options 6131 6132These @samp{-m} options are defined for the VAX: 6133 6134@table @gcctabopt 6135@item -munix 6136@opindex munix 6137Do not output certain jump instructions (@code{aobleq} and so on) 6138that the Unix assembler for the VAX cannot handle across long 6139ranges. 6140 6141@item -mgnu 6142@opindex mgnu 6143Do output those jump instructions, on the assumption that you 6144will assemble with the GNU assembler. 6145 6146@item -mg 6147@opindex mg 6148Output code for g-format floating point numbers instead of d-format. 6149@end table 6150 6151@node SPARC Options 6152@subsection SPARC Options 6153@cindex SPARC options 6154 6155These @samp{-m} options are supported on the SPARC: 6156 6157@table @gcctabopt 6158@item -mno-app-regs 6159@itemx -mapp-regs 6160@opindex mno-app-regs 6161@opindex mapp-regs 6162Specify @option{-mapp-regs} to generate output using the global registers 61632 through 4, which the SPARC SVR4 ABI reserves for applications. This 6164is the default. 6165 6166To be fully SVR4 ABI compliant at the cost of some performance loss, 6167specify @option{-mno-app-regs}. You should compile libraries and system 6168software with this option. 6169 6170@item -mfpu 6171@itemx -mhard-float 6172@opindex mfpu 6173@opindex mhard-float 6174Generate output containing floating point instructions. This is the 6175default. 6176 6177@item -mno-fpu 6178@itemx -msoft-float 6179@opindex mno-fpu 6180@opindex msoft-float 6181Generate output containing library calls for floating point. 6182@strong{Warning:} the requisite libraries are not available for all SPARC 6183targets. Normally the facilities of the machine's usual C compiler are 6184used, but this cannot be done directly in cross-compilation. You must make 6185your own arrangements to provide suitable library functions for 6186cross-compilation. The embedded targets @samp{sparc-*-aout} and 6187@samp{sparclite-*-*} do provide software floating point support. 6188 6189@option{-msoft-float} changes the calling convention in the output file; 6190therefore, it is only useful if you compile @emph{all} of a program with 6191this option. In particular, you need to compile @file{libgcc.a}, the 6192library that comes with GCC, with @option{-msoft-float} in order for 6193this to work. 6194 6195@item -mhard-quad-float 6196@opindex mhard-quad-float 6197Generate output containing quad-word (long double) floating point 6198instructions. 6199 6200@item -msoft-quad-float 6201@opindex msoft-quad-float 6202Generate output containing library calls for quad-word (long double) 6203floating point instructions. The functions called are those specified 6204in the SPARC ABI@. This is the default. 6205 6206As of this writing, there are no SPARC implementations that have hardware 6207support for the quad-word floating point instructions. They all invoke 6208a trap handler for one of these instructions, and then the trap handler 6209emulates the effect of the instruction. Because of the trap handler overhead, 6210this is much slower than calling the ABI library routines. Thus the 6211@option{-msoft-quad-float} option is the default. 6212 6213@item -mno-flat 6214@itemx -mflat 6215@opindex mno-flat 6216@opindex mflat 6217With @option{-mflat}, the compiler does not generate save/restore instructions 6218and will use a ``flat'' or single register window calling convention. 6219This model uses %i7 as the frame pointer and is compatible with the normal 6220register window model. Code from either may be intermixed. 6221The local registers and the input registers (0--5) are still treated as 6222``call saved'' registers and will be saved on the stack as necessary. 6223 6224With @option{-mno-flat} (the default), the compiler emits save/restore 6225instructions (except for leaf functions) and is the normal mode of operation. 6226 6227These options are deprecated and will be deleted in a future GCC release. 6228 6229@item -mno-unaligned-doubles 6230@itemx -munaligned-doubles 6231@opindex mno-unaligned-doubles 6232@opindex munaligned-doubles 6233Assume that doubles have 8 byte alignment. This is the default. 6234 6235With @option{-munaligned-doubles}, GCC assumes that doubles have 8 byte 6236alignment only if they are contained in another type, or if they have an 6237absolute address. Otherwise, it assumes they have 4 byte alignment. 6238Specifying this option avoids some rare compatibility problems with code 6239generated by other compilers. It is not the default because it results 6240in a performance loss, especially for floating point code. 6241 6242@item -mno-faster-structs 6243@itemx -mfaster-structs 6244@opindex mno-faster-structs 6245@opindex mfaster-structs 6246With @option{-mfaster-structs}, the compiler assumes that structures 6247should have 8 byte alignment. This enables the use of pairs of 6248@code{ldd} and @code{std} instructions for copies in structure 6249assignment, in place of twice as many @code{ld} and @code{st} pairs. 6250However, the use of this changed alignment directly violates the SPARC 6251ABI@. Thus, it's intended only for use on targets where the developer 6252acknowledges that their resulting code will not be directly in line with 6253the rules of the ABI@. 6254 6255@item -mimpure-text 6256@opindex mimpure-text 6257@option{-mimpure-text}, used in addition to @option{-shared}, tells 6258the compiler to not pass @option{-z text} to the linker when linking a 6259shared object. Using this option, you can link position-dependent 6260code into a shared object. 6261 6262@option{-mimpure-text} suppresses the ``relocations remain against 6263allocatable but non-writable sections'' linker error message. 6264However, the necessary relocations will trigger copy-on-write, and the 6265shared object is not actually shared across processes. Instead of 6266using @option{-mimpure-text}, you should compile all source code with 6267@option{-fpic} or @option{-fPIC}. 6268 6269This option is only available on SunOS and Solaris. 6270 6271@item -mv8 6272@itemx -msparclite 6273@opindex mv8 6274@opindex msparclite 6275These two options select variations on the SPARC architecture. 6276These options are deprecated and will be deleted in a future GCC release. 6277They have been replaced with @option{-mcpu=xxx}. 6278 6279@item -mcypress 6280@itemx -msupersparc 6281@itemx -mf930 6282@itemx -mf934 6283@opindex mcypress 6284@opindex msupersparc 6285@opindex -mf930 6286@opindex -mf934 6287These four options select the processor for which the code is optimized. 6288These options are deprecated and will be deleted in a future GCC release. 6289They have been replaced with @option{-mcpu=xxx}. 6290 6291@item -mcpu=@var{cpu_type} 6292@opindex mcpu 6293Set the instruction set, register set, and instruction scheduling parameters 6294for machine type @var{cpu_type}. Supported values for @var{cpu_type} are 6295@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite}, 6296@samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x}, 6297@samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc}, and 6298@samp{ultrasparc3}. 6299 6300Default instruction scheduling parameters are used for values that select 6301an architecture and not an implementation. These are @samp{v7}, @samp{v8}, 6302@samp{sparclite}, @samp{sparclet}, @samp{v9}. 6303 6304Here is a list of each supported architecture and their supported 6305implementations. 6306 6307@smallexample 6308 v7: cypress 6309 v8: supersparc, hypersparc 6310 sparclite: f930, f934, sparclite86x 6311 sparclet: tsc701 6312 v9: ultrasparc, ultrasparc3 6313@end smallexample 6314 6315By default (unless configured otherwise), GCC generates code for the V7 6316variant of the SPARC architecture. With @option{-mcpu=cypress}, the compiler 6317additionally optimizes it for the Cypress CY7C602 chip, as used in the 6318SPARCStation/SPARCServer 3xx series. This is also appropriate for the older 6319SPARCStation 1, 2, IPX etc. 6320 6321With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC 6322architecture. The only difference from V7 code is that the compiler emits 6323the integer multiply and integer divide instructions which exist in SPARC-V8 6324but not in SPARC-V7. With @option{-mcpu=supersparc}, the compiler additionally 6325optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and 63262000 series. 6327 6328With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of 6329the SPARC architecture. This adds the integer multiply, integer divide step 6330and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7. 6331With @option{-mcpu=f930}, the compiler additionally optimizes it for the 6332Fujitsu MB86930 chip, which is the original SPARClite, with no FPU. With 6333@option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu 6334MB86934 chip, which is the more recent SPARClite with FPU. 6335 6336With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of 6337the SPARC architecture. This adds the integer multiply, multiply/accumulate, 6338integer divide step and scan (@code{ffs}) instructions which exist in SPARClet 6339but not in SPARC-V7. With @option{-mcpu=tsc701}, the compiler additionally 6340optimizes it for the TEMIC SPARClet chip. 6341 6342With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC 6343architecture. This adds 64-bit integer and floating-point move instructions, 63443 additional floating-point condition code registers and conditional move 6345instructions. With @option{-mcpu=ultrasparc}, the compiler additionally 6346optimizes it for the Sun UltraSPARC I/II chips. With 6347@option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the 6348Sun UltraSPARC III chip. 6349 6350@item -mtune=@var{cpu_type} 6351@opindex mtune 6352Set the instruction scheduling parameters for machine type 6353@var{cpu_type}, but do not set the instruction set or register set that the 6354option @option{-mcpu=@var{cpu_type}} would. 6355 6356The same values for @option{-mcpu=@var{cpu_type}} can be used for 6357@option{-mtune=@var{cpu_type}}, but the only useful values are those 6358that select a particular cpu implementation. Those are @samp{cypress}, 6359@samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934}, 6360@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, and 6361@samp{ultrasparc3}. 6362 6363@item -mv8plus 6364@itemx -mno-v8plus 6365@opindex mv8plus 6366@opindex mno-v8plus 6367With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI. The 6368difference from the V8 ABI is that the global and out registers are 6369considered 64-bit wide. This is enabled by default on Solaris in 32-bit 6370mode for all SPARC-V9 processors. 6371 6372@item -mvis 6373@itemx -mno-vis 6374@opindex mvis 6375@opindex mno-vis 6376With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC 6377Visual Instruction Set extensions. The default is @option{-mno-vis}. 6378@end table 6379 6380These @samp{-m} options are supported in addition to the above 6381on SPARC-V9 processors in 64-bit environments: 6382 6383@table @gcctabopt 6384@item -mlittle-endian 6385@opindex mlittle-endian 6386Generate code for a processor running in little-endian mode. It is only 6387available for a few configurations and most notably not on Solaris. 6388 6389@item -m32 6390@itemx -m64 6391@opindex m32 6392@opindex m64 6393Generate code for a 32-bit or 64-bit environment. 6394The 32-bit environment sets int, long and pointer to 32 bits. 6395The 64-bit environment sets int to 32 bits and long and pointer 6396to 64 bits. 6397 6398@item -mcmodel=medlow 6399@opindex mcmodel=medlow 6400Generate code for the Medium/Low code model: 64-bit addresses, programs 6401must be linked in the low 32 bits of memory. Programs can be statically 6402or dynamically linked. 6403 6404@item -mcmodel=medmid 6405@opindex mcmodel=medmid 6406Generate code for the Medium/Middle code model: 64-bit addresses, programs 6407must be linked in the low 44 bits of memory, the text and data segments must 6408be less than 2GB in size and the data segment must be located within 2GB of 6409the text segment. 6410 6411@item -mcmodel=medany 6412@opindex mcmodel=medany 6413Generate code for the Medium/Anywhere code model: 64-bit addresses, programs 6414may be linked anywhere in memory, the text and data segments must be less 6415than 2GB in size and the data segment must be located within 2GB of the 6416text segment. 6417 6418@item -mcmodel=embmedany 6419@opindex mcmodel=embmedany 6420Generate code for the Medium/Anywhere code model for embedded systems: 642164-bit addresses, the text and data segments must be less than 2GB in 6422size, both starting anywhere in memory (determined at link time). The 6423global register %g4 points to the base of the data segment. Programs 6424are statically linked and PIC is not supported. 6425 6426@item -mstack-bias 6427@itemx -mno-stack-bias 6428@opindex mstack-bias 6429@opindex mno-stack-bias 6430With @option{-mstack-bias}, GCC assumes that the stack pointer, and 6431frame pointer if present, are offset by @minus{}2047 which must be added back 6432when making stack frame references. This is the default in 64-bit mode. 6433Otherwise, assume no such offset is present. 6434@end table 6435 6436These switches are supported in addition to the above on Solaris: 6437 6438@table @gcctabopt 6439@item -threads 6440@opindex threads 6441Add support for multithreading using the Solaris threads library. This 6442option sets flags for both the preprocessor and linker. This option does 6443not affect the thread safety of object code produced by the compiler or 6444that of libraries supplied with it. 6445 6446@item -pthreads 6447@opindex pthreads 6448Add support for multithreading using the POSIX threads library. This 6449option sets flags for both the preprocessor and linker. This option does 6450not affect the thread safety of object code produced by the compiler or 6451that of libraries supplied with it. 6452@end table 6453 6454@node ARM Options 6455@subsection ARM Options 6456@cindex ARM options 6457 6458These @samp{-m} options are defined for Advanced RISC Machines (ARM) 6459architectures: 6460 6461@table @gcctabopt 6462@item -mapcs-frame 6463@opindex mapcs-frame 6464Generate a stack frame that is compliant with the ARM Procedure Call 6465Standard for all functions, even if this is not strictly necessary for 6466correct execution of the code. Specifying @option{-fomit-frame-pointer} 6467with this option will cause the stack frames not to be generated for 6468leaf functions. The default is @option{-mno-apcs-frame}. 6469 6470@item -mapcs 6471@opindex mapcs 6472This is a synonym for @option{-mapcs-frame}. 6473 6474@item -mapcs-26 6475@opindex mapcs-26 6476Generate code for a processor running with a 26-bit program counter, 6477and conforming to the function calling standards for the APCS 26-bit 6478option. 6479 6480This option is deprecated. Future releases of the GCC will only support 6481generating code that runs in apcs-32 mode. 6482 6483@item -mapcs-32 6484@opindex mapcs-32 6485Generate code for a processor running with a 32-bit program counter, 6486and conforming to the function calling standards for the APCS 32-bit 6487option. 6488 6489This flag is deprecated. Future releases of GCC will make this flag 6490unconditional. 6491 6492@ignore 6493@c not currently implemented 6494@item -mapcs-stack-check 6495@opindex mapcs-stack-check 6496Generate code to check the amount of stack space available upon entry to 6497every function (that actually uses some stack space). If there is 6498insufficient space available then either the function 6499@samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be 6500called, depending upon the amount of stack space required. The run time 6501system is required to provide these functions. The default is 6502@option{-mno-apcs-stack-check}, since this produces smaller code. 6503 6504@c not currently implemented 6505@item -mapcs-float 6506@opindex mapcs-float 6507Pass floating point arguments using the float point registers. This is 6508one of the variants of the APCS@. This option is recommended if the 6509target hardware has a floating point unit or if a lot of floating point 6510arithmetic is going to be performed by the code. The default is 6511@option{-mno-apcs-float}, since integer only code is slightly increased in 6512size if @option{-mapcs-float} is used. 6513 6514@c not currently implemented 6515@item -mapcs-reentrant 6516@opindex mapcs-reentrant 6517Generate reentrant, position independent code. The default is 6518@option{-mno-apcs-reentrant}. 6519@end ignore 6520 6521@item -mthumb-interwork 6522@opindex mthumb-interwork 6523Generate code which supports calling between the ARM and Thumb 6524instruction sets. Without this option the two instruction sets cannot 6525be reliably used inside one program. The default is 6526@option{-mno-thumb-interwork}, since slightly larger code is generated 6527when @option{-mthumb-interwork} is specified. 6528 6529@item -mno-sched-prolog 6530@opindex mno-sched-prolog 6531Prevent the reordering of instructions in the function prolog, or the 6532merging of those instruction with the instructions in the function's 6533body. This means that all functions will start with a recognizable set 6534of instructions (or in fact one of a choice from a small set of 6535different function prologues), and this information can be used to 6536locate the start if functions inside an executable piece of code. The 6537default is @option{-msched-prolog}. 6538 6539@item -mhard-float 6540@opindex mhard-float 6541Generate output containing floating point instructions. This is the 6542default. 6543 6544@item -msoft-float 6545@opindex msoft-float 6546Generate output containing library calls for floating point. 6547@strong{Warning:} the requisite libraries are not available for all ARM 6548targets. Normally the facilities of the machine's usual C compiler are 6549used, but this cannot be done directly in cross-compilation. You must make 6550your own arrangements to provide suitable library functions for 6551cross-compilation. 6552 6553@option{-msoft-float} changes the calling convention in the output file; 6554therefore, it is only useful if you compile @emph{all} of a program with 6555this option. In particular, you need to compile @file{libgcc.a}, the 6556library that comes with GCC, with @option{-msoft-float} in order for 6557this to work. 6558 6559@item -mlittle-endian 6560@opindex mlittle-endian 6561Generate code for a processor running in little-endian mode. This is 6562the default for all standard configurations. 6563 6564@item -mbig-endian 6565@opindex mbig-endian 6566Generate code for a processor running in big-endian mode; the default is 6567to compile code for a little-endian processor. 6568 6569@item -mwords-little-endian 6570@opindex mwords-little-endian 6571This option only applies when generating code for big-endian processors. 6572Generate code for a little-endian word order but a big-endian byte 6573order. That is, a byte order of the form @samp{32107654}. Note: this 6574option should only be used if you require compatibility with code for 6575big-endian ARM processors generated by versions of the compiler prior to 65762.8. 6577 6578@item -malignment-traps 6579@opindex malignment-traps 6580Generate code that will not trap if the MMU has alignment traps enabled. 6581On ARM architectures prior to ARMv4, there were no instructions to 6582access half-word objects stored in memory. However, when reading from 6583memory a feature of the ARM architecture allows a word load to be used, 6584even if the address is unaligned, and the processor core will rotate the 6585data as it is being loaded. This option tells the compiler that such 6586misaligned accesses will cause a MMU trap and that it should instead 6587synthesize the access as a series of byte accesses. The compiler can 6588still use word accesses to load half-word data if it knows that the 6589address is aligned to a word boundary. 6590 6591This option has no effect when compiling for ARM architecture 4 or later, 6592since these processors have instructions to directly access half-word 6593objects in memory. 6594 6595@item -mno-alignment-traps 6596@opindex mno-alignment-traps 6597Generate code that assumes that the MMU will not trap unaligned 6598accesses. This produces better code when the target instruction set 6599does not have half-word memory operations (i.e.@: implementations prior to 6600ARMv4). 6601 6602Note that you cannot use this option to access unaligned word objects, 6603since the processor will only fetch one 32-bit aligned object from 6604memory. 6605 6606The default setting is @option{-malignment-traps}, since this produces 6607code that will also run on processors implementing ARM architecture 6608version 6 or later. 6609 6610This option is deprecated and will be removed in the next release of GCC. 6611 6612@item -mcpu=@var{name} 6613@opindex mcpu 6614This specifies the name of the target ARM processor. GCC uses this name 6615to determine what kind of instructions it can emit when generating 6616assembly code. Permissible names are: @samp{arm2}, @samp{arm250}, 6617@samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610}, 6618@samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm}, 6619@samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700}, 6620@samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100}, 6621@samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm8}, 6622@samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100}, 6623@samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920}, 6624@samp{arm920t}, @samp{arm926ejs}, @samp{arm940t}, @samp{arm9tdmi}, 6625@samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ejs}, 6626@samp{arm1136js}, @samp{arm1136jfs} ,@samp{xscale}, @samp{iwmmxt}, 6627@samp{ep9312}. 6628 6629@itemx -mtune=@var{name} 6630@opindex mtune 6631This option is very similar to the @option{-mcpu=} option, except that 6632instead of specifying the actual target processor type, and hence 6633restricting which instructions can be used, it specifies that GCC should 6634tune the performance of the code as if the target were of the type 6635specified in this option, but still choosing the instructions that it 6636will generate based on the cpu specified by a @option{-mcpu=} option. 6637For some ARM implementations better performance can be obtained by using 6638this option. 6639 6640@item -march=@var{name} 6641@opindex march 6642This specifies the name of the target ARM architecture. GCC uses this 6643name to determine what kind of instructions it can emit when generating 6644assembly code. This option can be used in conjunction with or instead 6645of the @option{-mcpu=} option. Permissible names are: @samp{armv2}, 6646@samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t}, 6647@samp{armv5}, @samp{armv5t}, @samp{armv5te}, @samp{armv6j}, 6648@samp{iwmmxt}, @samp{ep9312}. 6649 6650@item -mfpe=@var{number} 6651@itemx -mfp=@var{number} 6652@opindex mfpe 6653@opindex mfp 6654This specifies the version of the floating point emulation available on 6655the target. Permissible values are 2 and 3. @option{-mfp=} is a synonym 6656for @option{-mfpe=}, for compatibility with older versions of GCC@. 6657 6658@item -mstructure-size-boundary=@var{n} 6659@opindex mstructure-size-boundary 6660The size of all structures and unions will be rounded up to a multiple 6661of the number of bits set by this option. Permissible values are 8 and 666232. The default value varies for different toolchains. For the COFF 6663targeted toolchain the default value is 8. Specifying the larger number 6664can produce faster, more efficient code, but can also increase the size 6665of the program. The two values are potentially incompatible. Code 6666compiled with one value cannot necessarily expect to work with code or 6667libraries compiled with the other value, if they exchange information 6668using structures or unions. 6669 6670@item -mabort-on-noreturn 6671@opindex mabort-on-noreturn 6672Generate a call to the function @code{abort} at the end of a 6673@code{noreturn} function. It will be executed if the function tries to 6674return. 6675 6676@item -mlong-calls 6677@itemx -mno-long-calls 6678@opindex mlong-calls 6679@opindex mno-long-calls 6680Tells the compiler to perform function calls by first loading the 6681address of the function into a register and then performing a subroutine 6682call on this register. This switch is needed if the target function 6683will lie outside of the 64 megabyte addressing range of the offset based 6684version of subroutine call instruction. 6685 6686Even if this switch is enabled, not all function calls will be turned 6687into long calls. The heuristic is that static functions, functions 6688which have the @samp{short-call} attribute, functions that are inside 6689the scope of a @samp{#pragma no_long_calls} directive and functions whose 6690definitions have already been compiled within the current compilation 6691unit, will not be turned into long calls. The exception to this rule is 6692that weak function definitions, functions with the @samp{long-call} 6693attribute or the @samp{section} attribute, and functions that are within 6694the scope of a @samp{#pragma long_calls} directive, will always be 6695turned into long calls. 6696 6697This feature is not enabled by default. Specifying 6698@option{-mno-long-calls} will restore the default behavior, as will 6699placing the function calls within the scope of a @samp{#pragma 6700long_calls_off} directive. Note these switches have no effect on how 6701the compiler generates code to handle function calls via function 6702pointers. 6703 6704@item -mnop-fun-dllimport 6705@opindex mnop-fun-dllimport 6706Disable support for the @code{dllimport} attribute. 6707 6708@item -msingle-pic-base 6709@opindex msingle-pic-base 6710Treat the register used for PIC addressing as read-only, rather than 6711loading it in the prologue for each function. The run-time system is 6712responsible for initializing this register with an appropriate value 6713before execution begins. 6714 6715@item -mpic-register=@var{reg} 6716@opindex mpic-register 6717Specify the register to be used for PIC addressing. The default is R10 6718unless stack-checking is enabled, when R9 is used. 6719 6720@item -mcirrus-fix-invalid-insns 6721@opindex mcirrus-fix-invalid-insns 6722@opindex mno-cirrus-fix-invalid-insns 6723Insert NOPs into the instruction stream to in order to work around 6724problems with invalid Maverick instruction combinations. This option 6725is only valid if the @option{-mcpu=ep9312} option has been used to 6726enable generation of instructions for the Cirrus Maverick floating 6727point co-processor. This option is not enabled by default, since the 6728problem is only present in older Maverick implementations. The default 6729can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns} 6730switch. 6731 6732@item -mpoke-function-name 6733@opindex mpoke-function-name 6734Write the name of each function into the text section, directly 6735preceding the function prologue. The generated code is similar to this: 6736 6737@smallexample 6738 t0 6739 .ascii "arm_poke_function_name", 0 6740 .align 6741 t1 6742 .word 0xff000000 + (t1 - t0) 6743 arm_poke_function_name 6744 mov ip, sp 6745 stmfd sp!, @{fp, ip, lr, pc@} 6746 sub fp, ip, #4 6747@end smallexample 6748 6749When performing a stack backtrace, code can inspect the value of 6750@code{pc} stored at @code{fp + 0}. If the trace function then looks at 6751location @code{pc - 12} and the top 8 bits are set, then we know that 6752there is a function name embedded immediately preceding this location 6753and has length @code{((pc[-3]) & 0xff000000)}. 6754 6755@item -mthumb 6756@opindex mthumb 6757Generate code for the 16-bit Thumb instruction set. The default is to 6758use the 32-bit ARM instruction set. 6759 6760@item -mtpcs-frame 6761@opindex mtpcs-frame 6762Generate a stack frame that is compliant with the Thumb Procedure Call 6763Standard for all non-leaf functions. (A leaf function is one that does 6764not call any other functions.) The default is @option{-mno-tpcs-frame}. 6765 6766@item -mtpcs-leaf-frame 6767@opindex mtpcs-leaf-frame 6768Generate a stack frame that is compliant with the Thumb Procedure Call 6769Standard for all leaf functions. (A leaf function is one that does 6770not call any other functions.) The default is @option{-mno-apcs-leaf-frame}. 6771 6772@item -mcallee-super-interworking 6773@opindex mcallee-super-interworking 6774Gives all externally visible functions in the file being compiled an ARM 6775instruction set header which switches to Thumb mode before executing the 6776rest of the function. This allows these functions to be called from 6777non-interworking code. 6778 6779@item -mcaller-super-interworking 6780@opindex mcaller-super-interworking 6781Allows calls via function pointers (including virtual functions) to 6782execute correctly regardless of whether the target code has been 6783compiled for interworking or not. There is a small overhead in the cost 6784of executing a function pointer if this option is enabled. 6785 6786@end table 6787 6788@node MN10300 Options 6789@subsection MN10300 Options 6790@cindex MN10300 options 6791 6792These @option{-m} options are defined for Matsushita MN10300 architectures: 6793 6794@table @gcctabopt 6795@item -mmult-bug 6796@opindex mmult-bug 6797Generate code to avoid bugs in the multiply instructions for the MN10300 6798processors. This is the default. 6799 6800@item -mno-mult-bug 6801@opindex mno-mult-bug 6802Do not generate code to avoid bugs in the multiply instructions for the 6803MN10300 processors. 6804 6805@item -mam33 6806@opindex mam33 6807Generate code which uses features specific to the AM33 processor. 6808 6809@item -mno-am33 6810@opindex mno-am33 6811Do not generate code which uses features specific to the AM33 processor. This 6812is the default. 6813 6814@item -mno-crt0 6815@opindex mno-crt0 6816Do not link in the C run-time initialization object file. 6817 6818@item -mrelax 6819@opindex mrelax 6820Indicate to the linker that it should perform a relaxation optimization pass 6821to shorten branches, calls and absolute memory addresses. This option only 6822has an effect when used on the command line for the final link step. 6823 6824This option makes symbolic debugging impossible. 6825@end table 6826 6827 6828@node M32R/D Options 6829@subsection M32R/D Options 6830@cindex M32R/D options 6831 6832These @option{-m} options are defined for Renesas M32R/D architectures: 6833 6834@table @gcctabopt 6835@item -m32r2 6836@opindex m32r2 6837Generate code for the M32R/2@. 6838 6839@item -m32rx 6840@opindex m32rx 6841Generate code for the M32R/X@. 6842 6843@item -m32r 6844@opindex m32r 6845Generate code for the M32R@. This is the default. 6846 6847@item -mmodel=small 6848@opindex mmodel=small 6849Assume all objects live in the lower 16MB of memory (so that their addresses 6850can be loaded with the @code{ld24} instruction), and assume all subroutines 6851are reachable with the @code{bl} instruction. 6852This is the default. 6853 6854The addressability of a particular object can be set with the 6855@code{model} attribute. 6856 6857@item -mmodel=medium 6858@opindex mmodel=medium 6859Assume objects may be anywhere in the 32-bit address space (the compiler 6860will generate @code{seth/add3} instructions to load their addresses), and 6861assume all subroutines are reachable with the @code{bl} instruction. 6862 6863@item -mmodel=large 6864@opindex mmodel=large 6865Assume objects may be anywhere in the 32-bit address space (the compiler 6866will generate @code{seth/add3} instructions to load their addresses), and 6867assume subroutines may not be reachable with the @code{bl} instruction 6868(the compiler will generate the much slower @code{seth/add3/jl} 6869instruction sequence). 6870 6871@item -msdata=none 6872@opindex msdata=none 6873Disable use of the small data area. Variables will be put into 6874one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the 6875@code{section} attribute has been specified). 6876This is the default. 6877 6878The small data area consists of sections @samp{.sdata} and @samp{.sbss}. 6879Objects may be explicitly put in the small data area with the 6880@code{section} attribute using one of these sections. 6881 6882@item -msdata=sdata 6883@opindex msdata=sdata 6884Put small global and static data in the small data area, but do not 6885generate special code to reference them. 6886 6887@item -msdata=use 6888@opindex msdata=use 6889Put small global and static data in the small data area, and generate 6890special instructions to reference them. 6891 6892@item -G @var{num} 6893@opindex G 6894@cindex smaller data references 6895Put global and static objects less than or equal to @var{num} bytes 6896into the small data or bss sections instead of the normal data or bss 6897sections. The default value of @var{num} is 8. 6898The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use} 6899for this option to have any effect. 6900 6901All modules should be compiled with the same @option{-G @var{num}} value. 6902Compiling with different values of @var{num} may or may not work; if it 6903doesn't the linker will give an error message---incorrect code will not be 6904generated. 6905 6906@item -mdebug 6907@opindex mdebug 6908Makes the M32R specific code in the compiler display some statistics 6909that might help in debugging programs. 6910 6911@item -malign-loops 6912@opindex malign-loops 6913Align all loops to a 32-byte boundary. 6914 6915@item -mno-align-loops 6916@opindex mno-align-loops 6917Do not enforce a 32-byte alignment for loops. This is the default. 6918 6919@item -missue-rate=@var{number} 6920@opindex missue-rate=@var{number} 6921Issue @var{number} instructions per cycle. @var{number} can only be 1 6922or 2. 6923 6924@item -mbranch-cost=@var{number} 6925@opindex mbranch-cost=@var{number} 6926@var{number} can only be 1 or 2. If it is 1 then branches will be 6927preferred over conditional code, if it is 2, then the opposite will 6928apply. 6929 6930@item -mflush-trap=@var{number} 6931@opindex mflush-trap=@var{number} 6932Specifies the trap number to use to flush the cache. The default is 693312. Valid numbers are between 0 and 15 inclusive. 6934 6935@item -mno-flush-trap 6936@opindex mno-flush-trap 6937Specifies that the cache cannot be flushed by using a trap. 6938 6939@item -mflush-func=@var{name} 6940@opindex mflush-func=@var{name} 6941Specifies the name of the operating system function to call to flush 6942the cache. The default is @emph{_flush_cache}, but a function call 6943will only be used if a trap is not available. 6944 6945@item -mno-flush-func 6946@opindex mno-flush-func 6947Indicates that there is no OS function for flushing the cache. 6948 6949@end table 6950 6951@node RS/6000 and PowerPC Options 6952@subsection IBM RS/6000 and PowerPC Options 6953@cindex RS/6000 and PowerPC Options 6954@cindex IBM RS/6000 and PowerPC Options 6955 6956These @samp{-m} options are defined for the IBM RS/6000 and PowerPC: 6957@table @gcctabopt 6958@item -mpower 6959@itemx -mno-power 6960@itemx -mpower2 6961@itemx -mno-power2 6962@itemx -mpowerpc 6963@itemx -mno-powerpc 6964@itemx -mpowerpc-gpopt 6965@itemx -mno-powerpc-gpopt 6966@itemx -mpowerpc-gfxopt 6967@itemx -mno-powerpc-gfxopt 6968@itemx -mpowerpc64 6969@itemx -mno-powerpc64 6970@opindex mpower 6971@opindex mno-power 6972@opindex mpower2 6973@opindex mno-power2 6974@opindex mpowerpc 6975@opindex mno-powerpc 6976@opindex mpowerpc-gpopt 6977@opindex mno-powerpc-gpopt 6978@opindex mpowerpc-gfxopt 6979@opindex mno-powerpc-gfxopt 6980@opindex mpowerpc64 6981@opindex mno-powerpc64 6982GCC supports two related instruction set architectures for the 6983RS/6000 and PowerPC@. The @dfn{POWER} instruction set are those 6984instructions supported by the @samp{rios} chip set used in the original 6985RS/6000 systems and the @dfn{PowerPC} instruction set is the 6986architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and 6987the IBM 4xx microprocessors. 6988 6989Neither architecture is a subset of the other. However there is a 6990large common subset of instructions supported by both. An MQ 6991register is included in processors supporting the POWER architecture. 6992 6993You use these options to specify which instructions are available on the 6994processor you are using. The default value of these options is 6995determined when configuring GCC@. Specifying the 6996@option{-mcpu=@var{cpu_type}} overrides the specification of these 6997options. We recommend you use the @option{-mcpu=@var{cpu_type}} option 6998rather than the options listed above. 6999 7000The @option{-mpower} option allows GCC to generate instructions that 7001are found only in the POWER architecture and to use the MQ register. 7002Specifying @option{-mpower2} implies @option{-power} and also allows GCC 7003to generate instructions that are present in the POWER2 architecture but 7004not the original POWER architecture. 7005 7006The @option{-mpowerpc} option allows GCC to generate instructions that 7007are found only in the 32-bit subset of the PowerPC architecture. 7008Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows 7009GCC to use the optional PowerPC architecture instructions in the 7010General Purpose group, including floating-point square root. Specifying 7011@option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to 7012use the optional PowerPC architecture instructions in the Graphics 7013group, including floating-point select. 7014 7015The @option{-mpowerpc64} option allows GCC to generate the additional 701664-bit instructions that are found in the full PowerPC64 architecture 7017and to treat GPRs as 64-bit, doubleword quantities. GCC defaults to 7018@option{-mno-powerpc64}. 7019 7020If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC 7021will use only the instructions in the common subset of both 7022architectures plus some special AIX common-mode calls, and will not use 7023the MQ register. Specifying both @option{-mpower} and @option{-mpowerpc} 7024permits GCC to use any instruction from either architecture and to 7025allow use of the MQ register; specify this for the Motorola MPC601. 7026 7027@item -mnew-mnemonics 7028@itemx -mold-mnemonics 7029@opindex mnew-mnemonics 7030@opindex mold-mnemonics 7031Select which mnemonics to use in the generated assembler code. With 7032@option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for 7033the PowerPC architecture. With @option{-mold-mnemonics} it uses the 7034assembler mnemonics defined for the POWER architecture. Instructions 7035defined in only one architecture have only one mnemonic; GCC uses that 7036mnemonic irrespective of which of these options is specified. 7037 7038GCC defaults to the mnemonics appropriate for the architecture in 7039use. Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the 7040value of these option. Unless you are building a cross-compiler, you 7041should normally not specify either @option{-mnew-mnemonics} or 7042@option{-mold-mnemonics}, but should instead accept the default. 7043 7044@item -mcpu=@var{cpu_type} 7045@opindex mcpu 7046Set architecture type, register usage, choice of mnemonics, and 7047instruction scheduling parameters for machine type @var{cpu_type}. 7048Supported values for @var{cpu_type} are @samp{401}, @samp{403}, 7049@samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{505}, 7050@samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604}, 7051@samp{604e}, @samp{620}, @samp{630}, @samp{740}, @samp{7400}, 7052@samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823}, 7053@samp{860}, @samp{970}, @samp{common}, @samp{ec603e}, @samp{G3}, 7054@samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3}, 7055@samp{power4}, @samp{power5}, @samp{powerpc}, @samp{powerpc64}, 7056@samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64a}. 7057 7058@option{-mcpu=common} selects a completely generic processor. Code 7059generated under this option will run on any POWER or PowerPC processor. 7060GCC will use only the instructions in the common subset of both 7061architectures, and will not use the MQ register. GCC assumes a generic 7062processor model for scheduling purposes. 7063 7064@option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and 7065@option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit 7066PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine 7067types, with an appropriate, generic processor model assumed for 7068scheduling purposes. 7069 7070The other options specify a specific processor. Code generated under 7071those options will run best on that processor, and may not run at all on 7072others. 7073 7074The @option{-mcpu} options automatically enable or disable the 7075following options: @option{-maltivec}, @option{-mhard-float}, 7076@option{-mmfcrf}, @option{-mmultiple}, @option{-mnew-mnemonics}, 7077@option{-mpower}, @option{-mpower2}, @option{-mpowerpc64}, 7078@option{-mpowerpc-gpopt}, @option{-mpowerpc-gfxopt}, 7079@option{-mstring}. The particular options set for any particular CPU 7080will vary between compiler versions, depending on what setting seems 7081to produce optimal code for that CPU; it doesn't necessarily reflect 7082the actual hardware's capabilities. If you wish to set an individual 7083option to a particular value, you may specify it after the 7084@option{-mcpu} option, like @samp{-mcpu=970 -mno-altivec}. 7085 7086On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are 7087not enabled or disabled by the @option{-mcpu} option at present, since 7088AIX does not have full support for these options. You may still 7089enable or disable them individually if you're sure it'll work in your 7090environment. 7091 7092@item -mtune=@var{cpu_type} 7093@opindex mtune 7094Set the instruction scheduling parameters for machine type 7095@var{cpu_type}, but do not set the architecture type, register usage, or 7096choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would. The same 7097values for @var{cpu_type} are used for @option{-mtune} as for 7098@option{-mcpu}. If both are specified, the code generated will use the 7099architecture, registers, and mnemonics set by @option{-mcpu}, but the 7100scheduling parameters set by @option{-mtune}. 7101 7102@item -maltivec 7103@itemx -mno-altivec 7104@opindex maltivec 7105@opindex mno-altivec 7106These switches enable or disable the use of built-in functions that 7107allow access to the AltiVec instruction set. You may also need to set 7108@option{-mabi=altivec} to adjust the current ABI with AltiVec ABI 7109enhancements. 7110 7111@item -mabi=spe 7112@opindex mabi=spe 7113Extend the current ABI with SPE ABI extensions. This does not change 7114the default ABI, instead it adds the SPE ABI extensions to the current 7115ABI@. 7116 7117@item -mabi=no-spe 7118@opindex mabi=no-spe 7119Disable Booke SPE ABI extensions for the current ABI. 7120 7121@item -misel=@var{yes/no} 7122@itemx -misel 7123@opindex misel 7124This switch enables or disables the generation of ISEL instructions. 7125 7126@item -mspe=@var{yes/no} 7127@itemx -mspe 7128@opindex mspe 7129This switch enables or disables the generation of SPE simd 7130instructions. 7131 7132@item -mfloat-gprs=@var{yes/no} 7133@itemx -mfloat-gprs 7134@opindex mfloat-gprs 7135This switch enables or disables the generation of floating point 7136operations on the general purpose registers for architectures that 7137support it. This option is currently only available on the MPC8540. 7138 7139@item -mfull-toc 7140@itemx -mno-fp-in-toc 7141@itemx -mno-sum-in-toc 7142@itemx -mminimal-toc 7143@opindex mfull-toc 7144@opindex mno-fp-in-toc 7145@opindex mno-sum-in-toc 7146@opindex mminimal-toc 7147Modify generation of the TOC (Table Of Contents), which is created for 7148every executable file. The @option{-mfull-toc} option is selected by 7149default. In that case, GCC will allocate at least one TOC entry for 7150each unique non-automatic variable reference in your program. GCC 7151will also place floating-point constants in the TOC@. However, only 715216,384 entries are available in the TOC@. 7153 7154If you receive a linker error message that saying you have overflowed 7155the available TOC space, you can reduce the amount of TOC space used 7156with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options. 7157@option{-mno-fp-in-toc} prevents GCC from putting floating-point 7158constants in the TOC and @option{-mno-sum-in-toc} forces GCC to 7159generate code to calculate the sum of an address and a constant at 7160run-time instead of putting that sum into the TOC@. You may specify one 7161or both of these options. Each causes GCC to produce very slightly 7162slower and larger code at the expense of conserving TOC space. 7163 7164If you still run out of space in the TOC even when you specify both of 7165these options, specify @option{-mminimal-toc} instead. This option causes 7166GCC to make only one TOC entry for every file. When you specify this 7167option, GCC will produce code that is slower and larger but which 7168uses extremely little TOC space. You may wish to use this option 7169only on files that contain less frequently executed code. 7170 7171@item -maix64 7172@itemx -maix32 7173@opindex maix64 7174@opindex maix32 7175Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit 7176@code{long} type, and the infrastructure needed to support them. 7177Specifying @option{-maix64} implies @option{-mpowerpc64} and 7178@option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and 7179implies @option{-mno-powerpc64}. GCC defaults to @option{-maix32}. 7180 7181@item -mxl-call 7182@itemx -mno-xl-call 7183@opindex mxl-call 7184@opindex mno-xl-call 7185On AIX, pass floating-point arguments to prototyped functions beyond the 7186register save area (RSA) on the stack in addition to argument FPRs. The 7187AIX calling convention was extended but not initially documented to 7188handle an obscure K&R C case of calling a function that takes the 7189address of its arguments with fewer arguments than declared. AIX XL 7190compilers access floating point arguments which do not fit in the 7191RSA from the stack when a subroutine is compiled without 7192optimization. Because always storing floating-point arguments on the 7193stack is inefficient and rarely needed, this option is not enabled by 7194default and only is necessary when calling subroutines compiled by AIX 7195XL compilers without optimization. 7196 7197@item -mpe 7198@opindex mpe 7199Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@. Link an 7200application written to use message passing with special startup code to 7201enable the application to run. The system must have PE installed in the 7202standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file 7203must be overridden with the @option{-specs=} option to specify the 7204appropriate directory location. The Parallel Environment does not 7205support threads, so the @option{-mpe} option and the @option{-pthread} 7206option are incompatible. 7207 7208@item -malign-natural 7209@itemx -malign-power 7210@opindex malign-natural 7211@opindex malign-power 7212On AIX, Darwin, and 64-bit PowerPC GNU/Linux, the option 7213@option{-malign-natural} overrides the ABI-defined alignment of larger 7214types, such as floating-point doubles, on their natural size-based boundary. 7215The option @option{-malign-power} instructs GCC to follow the ABI-specified 7216alignment rules. GCC defaults to the standard alignment defined in the ABI. 7217 7218@item -msoft-float 7219@itemx -mhard-float 7220@opindex msoft-float 7221@opindex mhard-float 7222Generate code that does not use (uses) the floating-point register set. 7223Software floating point emulation is provided if you use the 7224@option{-msoft-float} option, and pass the option to GCC when linking. 7225 7226@item -mmultiple 7227@itemx -mno-multiple 7228@opindex mmultiple 7229@opindex mno-multiple 7230Generate code that uses (does not use) the load multiple word 7231instructions and the store multiple word instructions. These 7232instructions are generated by default on POWER systems, and not 7233generated on PowerPC systems. Do not use @option{-mmultiple} on little 7234endian PowerPC systems, since those instructions do not work when the 7235processor is in little endian mode. The exceptions are PPC740 and 7236PPC750 which permit the instructions usage in little endian mode. 7237 7238@item -mstring 7239@itemx -mno-string 7240@opindex mstring 7241@opindex mno-string 7242Generate code that uses (does not use) the load string instructions 7243and the store string word instructions to save multiple registers and 7244do small block moves. These instructions are generated by default on 7245POWER systems, and not generated on PowerPC systems. Do not use 7246@option{-mstring} on little endian PowerPC systems, since those 7247instructions do not work when the processor is in little endian mode. 7248The exceptions are PPC740 and PPC750 which permit the instructions 7249usage in little endian mode. 7250 7251@item -mupdate 7252@itemx -mno-update 7253@opindex mupdate 7254@opindex mno-update 7255Generate code that uses (does not use) the load or store instructions 7256that update the base register to the address of the calculated memory 7257location. These instructions are generated by default. If you use 7258@option{-mno-update}, there is a small window between the time that the 7259stack pointer is updated and the address of the previous frame is 7260stored, which means code that walks the stack frame across interrupts or 7261signals may get corrupted data. 7262 7263@item -mfused-madd 7264@itemx -mno-fused-madd 7265@opindex mfused-madd 7266@opindex mno-fused-madd 7267Generate code that uses (does not use) the floating point multiply and 7268accumulate instructions. These instructions are generated by default if 7269hardware floating is used. 7270 7271@item -mno-bit-align 7272@itemx -mbit-align 7273@opindex mno-bit-align 7274@opindex mbit-align 7275On System V.4 and embedded PowerPC systems do not (do) force structures 7276and unions that contain bit-fields to be aligned to the base type of the 7277bit-field. 7278 7279For example, by default a structure containing nothing but 8 7280@code{unsigned} bit-fields of length 1 would be aligned to a 4 byte 7281boundary and have a size of 4 bytes. By using @option{-mno-bit-align}, 7282the structure would be aligned to a 1 byte boundary and be one byte in 7283size. 7284 7285@item -mno-strict-align 7286@itemx -mstrict-align 7287@opindex mno-strict-align 7288@opindex mstrict-align 7289On System V.4 and embedded PowerPC systems do not (do) assume that 7290unaligned memory references will be handled by the system. 7291 7292@item -mrelocatable 7293@itemx -mno-relocatable 7294@opindex mrelocatable 7295@opindex mno-relocatable 7296On embedded PowerPC systems generate code that allows (does not allow) 7297the program to be relocated to a different address at runtime. If you 7298use @option{-mrelocatable} on any module, all objects linked together must 7299be compiled with @option{-mrelocatable} or @option{-mrelocatable-lib}. 7300 7301@item -mrelocatable-lib 7302@itemx -mno-relocatable-lib 7303@opindex mrelocatable-lib 7304@opindex mno-relocatable-lib 7305On embedded PowerPC systems generate code that allows (does not allow) 7306the program to be relocated to a different address at runtime. Modules 7307compiled with @option{-mrelocatable-lib} can be linked with either modules 7308compiled without @option{-mrelocatable} and @option{-mrelocatable-lib} or 7309with modules compiled with the @option{-mrelocatable} options. 7310 7311@item -mno-toc 7312@itemx -mtoc 7313@opindex mno-toc 7314@opindex mtoc 7315On System V.4 and embedded PowerPC systems do not (do) assume that 7316register 2 contains a pointer to a global area pointing to the addresses 7317used in the program. 7318 7319@item -mlittle 7320@itemx -mlittle-endian 7321@opindex mlittle 7322@opindex mlittle-endian 7323On System V.4 and embedded PowerPC systems compile code for the 7324processor in little endian mode. The @option{-mlittle-endian} option is 7325the same as @option{-mlittle}. 7326 7327@item -mbig 7328@itemx -mbig-endian 7329@opindex mbig 7330@opindex mbig-endian 7331On System V.4 and embedded PowerPC systems compile code for the 7332processor in big endian mode. The @option{-mbig-endian} option is 7333the same as @option{-mbig}. 7334 7335@item -mdynamic-no-pic 7336@opindex mdynamic-no-pic 7337On Darwin and Mac OS X systems, compile code so that it is not 7338relocatable, but that its external references are relocatable. The 7339resulting code is suitable for applications, but not shared 7340libraries. 7341 7342@item -mprioritize-restricted-insns=@var{priority} 7343@opindex mprioritize-restricted-insns 7344This option controls the priority that is assigned to 7345dispatch-slot restricted instructions during the second scheduling 7346pass. The argument @var{priority} takes the value @var{0/1/2} to assign 7347@var{no/highest/second-highest} priority to dispatch slot restricted 7348instructions. 7349 7350@item -msched-costly-dep=@var{dependence_type} 7351@opindex msched-costly-dep 7352This option controls which dependences are considered costly 7353by the target during instruction scheduling. The argument 7354@var{dependence_type} takes one of the following values: 7355@var{no}: no dependence is costly, 7356@var{all}: all dependences are costly, 7357@var{true_store_to_load}: a true dependence from store to load is costly, 7358@var{store_to_load}: any dependence from store to load is costly, 7359@var{number}: any dependence which latency >= @var{number} is costly. 7360 7361@item -minsert-sched-nops=@var{scheme} 7362@opindex minsert-sched-nops 7363This option controls which nop insertion scheme will be used during 7364the second scheduling pass. The argument @var{scheme} takes one of the 7365following values: 7366@var{no}: Don't insert nops. 7367@var{pad}: Pad with nops any dispatch group which has vacant issue slots, 7368according to the scheduler's grouping. 7369@var{regroup_exact}: Insert nops to force costly dependent insns into 7370separate groups. Insert exactly as many nops as needed to force an insn 7371to a new group, according to the estimated processor grouping. 7372@var{number}: Insert nops to force costly dependent insns into 7373separate groups. Insert @var{number} nops to force an insn to a new group. 7374 7375@item -mcall-sysv 7376@opindex mcall-sysv 7377On System V.4 and embedded PowerPC systems compile code using calling 7378conventions that adheres to the March 1995 draft of the System V 7379Application Binary Interface, PowerPC processor supplement. This is the 7380default unless you configured GCC using @samp{powerpc-*-eabiaix}. 7381 7382@item -mcall-sysv-eabi 7383@opindex mcall-sysv-eabi 7384Specify both @option{-mcall-sysv} and @option{-meabi} options. 7385 7386@item -mcall-sysv-noeabi 7387@opindex mcall-sysv-noeabi 7388Specify both @option{-mcall-sysv} and @option{-mno-eabi} options. 7389 7390@item -mcall-solaris 7391@opindex mcall-solaris 7392On System V.4 and embedded PowerPC systems compile code for the Solaris 7393operating system. 7394 7395@item -mcall-linux 7396@opindex mcall-linux 7397On System V.4 and embedded PowerPC systems compile code for the 7398Linux-based GNU system. 7399 7400@item -mcall-gnu 7401@opindex mcall-gnu 7402On System V.4 and embedded PowerPC systems compile code for the 7403Hurd-based GNU system. 7404 7405@item -mcall-netbsd 7406@opindex mcall-netbsd 7407On System V.4 and embedded PowerPC systems compile code for the 7408NetBSD operating system. 7409 7410@item -maix-struct-return 7411@opindex maix-struct-return 7412Return all structures in memory (as specified by the AIX ABI)@. 7413 7414@item -msvr4-struct-return 7415@opindex msvr4-struct-return 7416Return structures smaller than 8 bytes in registers (as specified by the 7417SVR4 ABI)@. 7418 7419@item -mabi=altivec 7420@opindex mabi=altivec 7421Extend the current ABI with AltiVec ABI extensions. This does not 7422change the default ABI, instead it adds the AltiVec ABI extensions to 7423the current ABI@. 7424 7425@item -mabi=no-altivec 7426@opindex mabi=no-altivec 7427Disable AltiVec ABI extensions for the current ABI. 7428 7429@item -mprototype 7430@itemx -mno-prototype 7431@opindex mprototype 7432@opindex mno-prototype 7433On System V.4 and embedded PowerPC systems assume that all calls to 7434variable argument functions are properly prototyped. Otherwise, the 7435compiler must insert an instruction before every non prototyped call to 7436set or clear bit 6 of the condition code register (@var{CR}) to 7437indicate whether floating point values were passed in the floating point 7438registers in case the function takes a variable arguments. With 7439@option{-mprototype}, only calls to prototyped variable argument functions 7440will set or clear the bit. 7441 7442@item -msim 7443@opindex msim 7444On embedded PowerPC systems, assume that the startup module is called 7445@file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and 7446@file{libc.a}. This is the default for @samp{powerpc-*-eabisim}. 7447configurations. 7448 7449@item -mmvme 7450@opindex mmvme 7451On embedded PowerPC systems, assume that the startup module is called 7452@file{crt0.o} and the standard C libraries are @file{libmvme.a} and 7453@file{libc.a}. 7454 7455@item -mads 7456@opindex mads 7457On embedded PowerPC systems, assume that the startup module is called 7458@file{crt0.o} and the standard C libraries are @file{libads.a} and 7459@file{libc.a}. 7460 7461@item -myellowknife 7462@opindex myellowknife 7463On embedded PowerPC systems, assume that the startup module is called 7464@file{crt0.o} and the standard C libraries are @file{libyk.a} and 7465@file{libc.a}. 7466 7467@item -mvxworks 7468@opindex mvxworks 7469On System V.4 and embedded PowerPC systems, specify that you are 7470compiling for a VxWorks system. 7471 7472@item -mwindiss 7473@opindex mwindiss 7474Specify that you are compiling for the WindISS simulation environment. 7475 7476@item -memb 7477@opindex memb 7478On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags 7479header to indicate that @samp{eabi} extended relocations are used. 7480 7481@item -meabi 7482@itemx -mno-eabi 7483@opindex meabi 7484@opindex mno-eabi 7485On System V.4 and embedded PowerPC systems do (do not) adhere to the 7486Embedded Applications Binary Interface (eabi) which is a set of 7487modifications to the System V.4 specifications. Selecting @option{-meabi} 7488means that the stack is aligned to an 8 byte boundary, a function 7489@code{__eabi} is called to from @code{main} to set up the eabi 7490environment, and the @option{-msdata} option can use both @code{r2} and 7491@code{r13} to point to two separate small data areas. Selecting 7492@option{-mno-eabi} means that the stack is aligned to a 16 byte boundary, 7493do not call an initialization function from @code{main}, and the 7494@option{-msdata} option will only use @code{r13} to point to a single 7495small data area. The @option{-meabi} option is on by default if you 7496configured GCC using one of the @samp{powerpc*-*-eabi*} options. 7497 7498@item -msdata=eabi 7499@opindex msdata=eabi 7500On System V.4 and embedded PowerPC systems, put small initialized 7501@code{const} global and static data in the @samp{.sdata2} section, which 7502is pointed to by register @code{r2}. Put small initialized 7503non-@code{const} global and static data in the @samp{.sdata} section, 7504which is pointed to by register @code{r13}. Put small uninitialized 7505global and static data in the @samp{.sbss} section, which is adjacent to 7506the @samp{.sdata} section. The @option{-msdata=eabi} option is 7507incompatible with the @option{-mrelocatable} option. The 7508@option{-msdata=eabi} option also sets the @option{-memb} option. 7509 7510@item -msdata=sysv 7511@opindex msdata=sysv 7512On System V.4 and embedded PowerPC systems, put small global and static 7513data in the @samp{.sdata} section, which is pointed to by register 7514@code{r13}. Put small uninitialized global and static data in the 7515@samp{.sbss} section, which is adjacent to the @samp{.sdata} section. 7516The @option{-msdata=sysv} option is incompatible with the 7517@option{-mrelocatable} option. 7518 7519@item -msdata=default 7520@itemx -msdata 7521@opindex msdata=default 7522@opindex msdata 7523On System V.4 and embedded PowerPC systems, if @option{-meabi} is used, 7524compile code the same as @option{-msdata=eabi}, otherwise compile code the 7525same as @option{-msdata=sysv}. 7526 7527@item -msdata-data 7528@opindex msdata-data 7529On System V.4 and embedded PowerPC systems, put small global and static 7530data in the @samp{.sdata} section. Put small uninitialized global and 7531static data in the @samp{.sbss} section. Do not use register @code{r13} 7532to address small data however. This is the default behavior unless 7533other @option{-msdata} options are used. 7534 7535@item -msdata=none 7536@itemx -mno-sdata 7537@opindex msdata=none 7538@opindex mno-sdata 7539On embedded PowerPC systems, put all initialized global and static data 7540in the @samp{.data} section, and all uninitialized data in the 7541@samp{.bss} section. 7542 7543@item -G @var{num} 7544@opindex G 7545@cindex smaller data references (PowerPC) 7546@cindex .sdata/.sdata2 references (PowerPC) 7547On embedded PowerPC systems, put global and static items less than or 7548equal to @var{num} bytes into the small data or bss sections instead of 7549the normal data or bss section. By default, @var{num} is 8. The 7550@option{-G @var{num}} switch is also passed to the linker. 7551All modules should be compiled with the same @option{-G @var{num}} value. 7552 7553@item -mregnames 7554@itemx -mno-regnames 7555@opindex mregnames 7556@opindex mno-regnames 7557On System V.4 and embedded PowerPC systems do (do not) emit register 7558names in the assembly language output using symbolic forms. 7559 7560@item -mlongcall 7561@itemx -mno-longcall 7562@opindex mlongcall 7563@opindex mno-longcall 7564Default to making all function calls via pointers, so that functions 7565which reside further than 64 megabytes (67,108,864 bytes) from the 7566current location can be called. This setting can be overridden by the 7567@code{shortcall} function attribute, or by @code{#pragma longcall(0)}. 7568 7569Some linkers are capable of detecting out-of-range calls and generating 7570glue code on the fly. On these systems, long calls are unnecessary and 7571generate slower code. As of this writing, the AIX linker can do this, 7572as can the GNU linker for PowerPC/64. It is planned to add this feature 7573to the GNU linker for 32-bit PowerPC systems as well. 7574 7575On Mach-O (Darwin) systems, this option directs the compiler emit to 7576the glue for every direct call, and the Darwin linker decides whether 7577to use or discard it. 7578 7579In the future, we may cause GCC to ignore all longcall specifications 7580when the linker is known to generate glue. 7581 7582@item -pthread 7583@opindex pthread 7584Adds support for multithreading with the @dfn{pthreads} library. 7585This option sets flags for both the preprocessor and linker. 7586 7587@end table 7588 7589@node Darwin Options 7590@subsection Darwin Options 7591@cindex Darwin options 7592 7593These options are defined for all architectures running the Darwin operating 7594system. They are useful for compatibility with other Mac OS compilers. 7595 7596@table @gcctabopt 7597@item -all_load 7598@opindex all_load 7599Loads all members of static archive libraries. 7600See man ld(1) for more information. 7601 7602@item -arch_errors_fatal 7603@opindex arch_errors_fatal 7604Cause the errors having to do with files that have the wrong architecture 7605to be fatal. 7606 7607@item -bind_at_load 7608@opindex bind_at_load 7609Causes the output file to be marked such that the dynamic linker will 7610bind all undefined references when the file is loaded or launched. 7611 7612@item -bundle 7613@opindex bundle 7614Produce a Mach-o bundle format file. 7615See man ld(1) for more information. 7616 7617@item -bundle_loader @var{executable} 7618@opindex bundle_loader 7619This specifies the @var{executable} that will be loading the build 7620output file being linked. See man ld(1) for more information. 7621 7622@item -allowable_client @var{client_name} 7623@itemx -arch_only 7624 7625@itemx -client_name 7626@itemx -compatibility_version 7627@itemx -current_version 7628@itemx -dependency-file 7629@itemx -dylib_file 7630@itemx -dylinker_install_name 7631@itemx -dynamic 7632@itemx -dynamiclib 7633@itemx -exported_symbols_list 7634@itemx -filelist 7635@itemx -flat_namespace 7636@itemx -force_cpusubtype_ALL 7637@itemx -force_flat_namespace 7638@itemx -headerpad_max_install_names 7639@itemx -image_base 7640@itemx -init 7641@itemx -install_name 7642@itemx -keep_private_externs 7643@itemx -multi_module 7644@itemx -multiply_defined 7645@itemx -multiply_defined_unused 7646@itemx -noall_load 7647@itemx -nofixprebinding 7648@itemx -nomultidefs 7649@itemx -noprebind 7650@itemx -noseglinkedit 7651@itemx -pagezero_size 7652@itemx -prebind 7653@itemx -prebind_all_twolevel_modules 7654@itemx -private_bundle 7655@itemx -read_only_relocs 7656@itemx -sectalign 7657@itemx -sectobjectsymbols 7658@itemx -whyload 7659@itemx -seg1addr 7660@itemx -sectcreate 7661@itemx -sectobjectsymbols 7662@itemx -sectorder 7663@itemx -seg_addr_table 7664@itemx -seg_addr_table_filename 7665@itemx -seglinkedit 7666@itemx -segprot 7667@itemx -segs_read_only_addr 7668@itemx -segs_read_write_addr 7669@itemx -single_module 7670@itemx -static 7671@itemx -sub_library 7672@itemx -sub_umbrella 7673@itemx -twolevel_namespace 7674@itemx -umbrella 7675@itemx -undefined 7676@itemx -unexported_symbols_list 7677@itemx -weak_reference_mismatches 7678@itemx -whatsloaded 7679 7680@opindex allowable_client 7681@opindex arch_only 7682@opindex client_name 7683@opindex compatibility_version 7684@opindex current_version 7685@opindex dependency-file 7686@opindex dylib_file 7687@opindex dylinker_install_name 7688@opindex dynamic 7689@opindex dynamiclib 7690@opindex exported_symbols_list 7691@opindex filelist 7692@opindex flat_namespace 7693@opindex force_cpusubtype_ALL 7694@opindex force_flat_namespace 7695@opindex headerpad_max_install_names 7696@opindex image_base 7697@opindex init 7698@opindex install_name 7699@opindex keep_private_externs 7700@opindex multi_module 7701@opindex multiply_defined 7702@opindex multiply_defined_unused 7703@opindex noall_load 7704@opindex nofixprebinding 7705@opindex nomultidefs 7706@opindex noprebind 7707@opindex noseglinkedit 7708@opindex pagezero_size 7709@opindex prebind 7710@opindex prebind_all_twolevel_modules 7711@opindex private_bundle 7712@opindex read_only_relocs 7713@opindex sectalign 7714@opindex sectobjectsymbols 7715@opindex whyload 7716@opindex seg1addr 7717@opindex sectcreate 7718@opindex sectobjectsymbols 7719@opindex sectorder 7720@opindex seg_addr_table 7721@opindex seg_addr_table_filename 7722@opindex seglinkedit 7723@opindex segprot 7724@opindex segs_read_only_addr 7725@opindex segs_read_write_addr 7726@opindex single_module 7727@opindex static 7728@opindex sub_library 7729@opindex sub_umbrella 7730@opindex twolevel_namespace 7731@opindex umbrella 7732@opindex undefined 7733@opindex unexported_symbols_list 7734@opindex weak_reference_mismatches 7735@opindex whatsloaded 7736 7737These options are available for Darwin linker. Darwin linker man page 7738describes them in detail. 7739@end table 7740 7741 7742@node MIPS Options 7743@subsection MIPS Options 7744@cindex MIPS options 7745 7746@table @gcctabopt 7747 7748@item -EB 7749@opindex EB 7750Generate big-endian code. 7751 7752@item -EL 7753@opindex EL 7754Generate little-endian code. This is the default for @samp{mips*el-*-*} 7755configurations. 7756 7757@item -march=@var{arch} 7758@opindex march 7759Generate code that will run on @var{arch}, which can be the name of a 7760generic MIPS ISA, or the name of a particular processor. 7761The ISA names are: 7762@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4}, 7763@samp{mips32}, @samp{mips32r2}, and @samp{mips64}. 7764The processor names are: 7765@samp{4kc}, @samp{4kp}, @samp{5kc}, @samp{20kc}, 7766@samp{m4k}, 7767@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400}, 7768@samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000}, @samp{rm7000}, 7769@samp{rm9000}, 7770@samp{orion}, 7771@samp{sb1}, 7772@samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4300}, 7773@samp{vr5000}, @samp{vr5400} and @samp{vr5500}. 7774The special value @samp{from-abi} selects the 7775most compatible architecture for the selected ABI (that is, 7776@samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@. 7777 7778In processor names, a final @samp{000} can be abbreviated as @samp{k} 7779(for example, @samp{-march=r2k}). Prefixes are optional, and 7780@samp{vr} may be written @samp{r}. 7781 7782GCC defines two macros based on the value of this option. The first 7783is @samp{_MIPS_ARCH}, which gives the name of target architecture, as 7784a string. The second has the form @samp{_MIPS_ARCH_@var{foo}}, 7785where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@. 7786For example, @samp{-march=r2000} will set @samp{_MIPS_ARCH} 7787to @samp{"r2000"} and define the macro @samp{_MIPS_ARCH_R2000}. 7788 7789Note that the @samp{_MIPS_ARCH} macro uses the processor names given 7790above. In other words, it will have the full prefix and will not 7791abbreviate @samp{000} as @samp{k}. In the case of @samp{from-abi}, 7792the macro names the resolved architecture (either @samp{"mips1"} or 7793@samp{"mips3"}). It names the default architecture when no 7794@option{-march} option is given. 7795 7796@item -mtune=@var{arch} 7797@opindex mtune 7798Optimize for @var{arch}. Among other things, this option controls 7799the way instructions are scheduled, and the perceived cost of arithmetic 7800operations. The list of @var{arch} values is the same as for 7801@option{-march}. 7802 7803When this option is not used, GCC will optimize for the processor 7804specified by @option{-march}. By using @option{-march} and 7805@option{-mtune} together, it is possible to generate code that will 7806run on a family of processors, but optimize the code for one 7807particular member of that family. 7808 7809@samp{-mtune} defines the macros @samp{_MIPS_TUNE} and 7810@samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the 7811@samp{-march} ones described above. 7812 7813@item -mips1 7814@opindex mips1 7815Equivalent to @samp{-march=mips1}. 7816 7817@item -mips2 7818@opindex mips2 7819Equivalent to @samp{-march=mips2}. 7820 7821@item -mips3 7822@opindex mips3 7823Equivalent to @samp{-march=mips3}. 7824 7825@item -mips4 7826@opindex mips4 7827Equivalent to @samp{-march=mips4}. 7828 7829@item -mips32 7830@opindex mips32 7831Equivalent to @samp{-march=mips32}. 7832 7833@item -mips32r2 7834@opindex mips32r2 7835Equivalent to @samp{-march=mips32r2}. 7836 7837@item -mips64 7838@opindex mips64 7839Equivalent to @samp{-march=mips64}. 7840 7841@item -mips16 7842@itemx -mno-mips16 7843@opindex mips16 7844@opindex mno-mips16 7845Use (do not use) the MIPS16 ISA. 7846 7847@item -mabi=32 7848@itemx -mabi=o64 7849@itemx -mabi=n32 7850@itemx -mabi=64 7851@itemx -mabi=eabi 7852@opindex mabi=32 7853@opindex mabi=o64 7854@opindex mabi=n32 7855@opindex mabi=64 7856@opindex mabi=eabi 7857Generate code for the given ABI@. 7858 7859Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 7860generates 64-bit code when you select a 64-bit architecture, but you 7861can use @option{-mgp32} to get 32-bit code instead. 7862 7863@item -mabicalls 7864@itemx -mno-abicalls 7865@opindex mabicalls 7866@opindex mno-abicalls 7867Generate (do not generate) SVR4-style position-independent code. 7868@option{-mabicalls} is the default for SVR4-based systems. 7869 7870@item -mxgot 7871@itemx -mno-xgot 7872@opindex mxgot 7873@opindex mno-xgot 7874Lift (do not lift) the usual restrictions on the size of the global 7875offset table. 7876 7877GCC normally uses a single instruction to load values from the GOT. 7878While this is relatively efficient, it will only work if the GOT 7879is smaller than about 64k. Anything larger will cause the linker 7880to report an error such as: 7881 7882@cindex relocation truncated to fit (MIPS) 7883@smallexample 7884relocation truncated to fit: R_MIPS_GOT16 foobar 7885@end smallexample 7886 7887If this happens, you should recompile your code with @option{-mxgot}. 7888It should then work with very large GOTs, although it will also be 7889less efficient, since it will take three instructions to fetch the 7890value of a global symbol. 7891 7892Note that some linkers can create multiple GOTs. If you have such a 7893linker, you should only need to use @option{-mxgot} when a single object 7894file accesses more than 64k's worth of GOT entries. Very few do. 7895 7896These options have no effect unless GCC is generating position 7897independent code. 7898 7899@item -membedded-pic 7900@itemx -mno-embedded-pic 7901@opindex membedded-pic 7902@opindex mno-embedded-pic 7903Generate (do not generate) position-independent code suitable for some 7904embedded systems. All calls are made using PC relative addresses, and 7905all data is addressed using the $gp register. No more than 65536 7906bytes of global data may be used. This requires GNU as and GNU ld, 7907which do most of the work. 7908 7909@item -mgp32 7910@opindex mgp32 7911Assume that general-purpose registers are 32 bits wide. 7912 7913@item -mgp64 7914@opindex mgp64 7915Assume that general-purpose registers are 64 bits wide. 7916 7917@item -mfp32 7918@opindex mfp32 7919Assume that floating-point registers are 32 bits wide. 7920 7921@item -mfp64 7922@opindex mfp64 7923Assume that floating-point registers are 64 bits wide. 7924 7925@item -mhard-float 7926@opindex mhard-float 7927Use floating-point coprocessor instructions. 7928 7929@item -msoft-float 7930@opindex msoft-float 7931Do not use floating-point coprocessor instructions. Implement 7932floating-point calculations using library calls instead. 7933 7934@item -msingle-float 7935@opindex msingle-float 7936Assume that the floating-point coprocessor only supports single-precision 7937operations. 7938 7939@itemx -mdouble-float 7940@opindex mdouble-float 7941Assume that the floating-point coprocessor supports double-precision 7942operations. This is the default. 7943 7944@item -mint64 7945@opindex mint64 7946Force @code{int} and @code{long} types to be 64 bits wide. See 7947@option{-mlong32} for an explanation of the default and the way 7948that the pointer size is determined. 7949 7950@item -mlong64 7951@opindex mlong64 7952Force @code{long} types to be 64 bits wide. See @option{-mlong32} for 7953an explanation of the default and the way that the pointer size is 7954determined. 7955 7956@item -mlong32 7957@opindex mlong32 7958Force @code{long}, @code{int}, and pointer types to be 32 bits wide. 7959 7960The default size of @code{int}s, @code{long}s and pointers depends on 7961the ABI@. All the supported ABIs use 32-bit @code{int}s. The n64 ABI 7962uses 64-bit @code{long}s, as does the 64-bit EABI; the others use 796332-bit @code{long}s. Pointers are the same size as @code{long}s, 7964or the same size as integer registers, whichever is smaller. 7965 7966@item -G @var{num} 7967@opindex G 7968@cindex smaller data references (MIPS) 7969@cindex gp-relative references (MIPS) 7970Put global and static items less than or equal to @var{num} bytes into 7971the small data or bss section instead of the normal data or bss section. 7972This allows the data to be accessed using a single instruction. 7973 7974All modules should be compiled with the same @option{-G @var{num}} 7975value. 7976 7977@item -membedded-data 7978@itemx -mno-embedded-data 7979@opindex membedded-data 7980@opindex mno-embedded-data 7981Allocate variables to the read-only data section first if possible, then 7982next in the small data section if possible, otherwise in data. This gives 7983slightly slower code than the default, but reduces the amount of RAM required 7984when executing, and thus may be preferred for some embedded systems. 7985 7986@item -muninit-const-in-rodata 7987@itemx -mno-uninit-const-in-rodata 7988@opindex muninit-const-in-rodata 7989@opindex mno-uninit-const-in-rodata 7990Put uninitialized @code{const} variables in the read-only data section. 7991This option is only meaningful in conjunction with @option{-membedded-data}. 7992 7993@item -msplit-addresses 7994@itemx -mno-split-addresses 7995@opindex msplit-addresses 7996@opindex mno-split-addresses 7997Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler 7998relocation operators. This option has been superceded by 7999@option{-mexplicit-relocs} but is retained for backwards compatibility. 8000 8001@item -mexplicit-relocs 8002@itemx -mno-explicit-relocs 8003@opindex mexplicit-relocs 8004@opindex mno-explicit-relocs 8005Use (do not use) assembler relocation operators when dealing with symbolic 8006addresses. The alternative, selected by @option{-mno-explicit-relocs}, 8007is to use assembler macros instead. 8008 8009@option{-mexplicit-relocs} is usually the default if GCC was 8010configured to use an assembler that supports relocation operators. 8011However, there are two exceptions: 8012 8013@itemize @bullet 8014@item 8015GCC is not yet able to generate explicit relocations for the combination 8016of @option{-mabi=64} and @option{-mno-abicalls}. This will be addressed 8017in a future release. 8018 8019@item 8020The combination of @option{-mabicalls} and @option{-fno-unit-at-a-time} 8021implies @option{-mno-explicit-relocs} unless explicitly overridden. 8022This is because, when generating abicalls, the choice of relocation 8023depends on whether a symbol is local or global. In some rare cases, 8024GCC will not be able to decide this until the whole compilation unit 8025has been read. 8026@end itemize 8027 8028@item -mrnames 8029@itemx -mno-rnames 8030@opindex mrnames 8031@opindex mno-rnames 8032Generate (do not generate) code that refers to registers using their 8033software names. The default is @option{-mno-rnames}, which tells GCC 8034to use hardware names like @samp{$4} instead of software names like 8035@samp{a0}. The only assembler known to support @option{-rnames} is 8036the Algorithmics assembler. 8037 8038@item -mcheck-zero-division 8039@itemx -mno-check-zero-division 8040@opindex mcheck-zero-division 8041@opindex mno-check-zero-division 8042Trap (do not trap) on integer division by zero. The default is 8043@option{-mcheck-zero-division}. 8044 8045@item -mmemcpy 8046@itemx -mno-memcpy 8047@opindex mmemcpy 8048@opindex mno-memcpy 8049Force (do not force) the use of @code{memcpy()} for non-trivial block 8050moves. The default is @option{-mno-memcpy}, which allows GCC to inline 8051most constant-sized copies. 8052 8053@item -mlong-calls 8054@itemx -mno-long-calls 8055@opindex mlong-calls 8056@opindex mno-long-calls 8057Disable (do not disable) use of the @code{jal} instruction. Calling 8058functions using @code{jal} is more efficient but requires the caller 8059and callee to be in the same 256 megabyte segment. 8060 8061This option has no effect on abicalls code. The default is 8062@option{-mno-long-calls}. 8063 8064@item -mmad 8065@itemx -mno-mad 8066@opindex mmad 8067@opindex mno-mad 8068Enable (disable) use of the @code{mad}, @code{madu} and @code{mul} 8069instructions, as provided by the R4650 ISA. 8070 8071@item -mfused-madd 8072@itemx -mno-fused-madd 8073@opindex mfused-madd 8074@opindex mno-fused-madd 8075Enable (disable) use of the floating point multiply-accumulate 8076instructions, when they are available. The default is 8077@option{-mfused-madd}. 8078 8079When multiply-accumulate instructions are used, the intermediate 8080product is calculated to infinite precision and is not subject to 8081the FCSR Flush to Zero bit. This may be undesirable in some 8082circumstances. 8083 8084@item -nocpp 8085@opindex nocpp 8086Tell the MIPS assembler to not run its preprocessor over user 8087assembler files (with a @samp{.s} suffix) when assembling them. 8088 8089@item -mfix-sb1 8090@itemx -mno-fix-sb1 8091@opindex mfix-sb1 8092Work around certain SB-1 CPU core errata. 8093(This flag currently works around the SB-1 revision 2 8094``F1'' and ``F2'' floating point errata.) 8095 8096@item -mflush-func=@var{func} 8097@itemx -mno-flush-func 8098@opindex mflush-func 8099Specifies the function to call to flush the I and D caches, or to not 8100call any such function. If called, the function must take the same 8101arguments as the common @code{_flush_func()}, that is, the address of the 8102memory range for which the cache is being flushed, the size of the 8103memory range, and the number 3 (to flush both caches). The default 8104depends on the target GCC was configured for, but commonly is either 8105@samp{_flush_func} or @samp{__cpu_flush}. 8106 8107@item -mbranch-likely 8108@itemx -mno-branch-likely 8109@opindex mbranch-likely 8110@opindex mno-branch-likely 8111Enable or disable use of Branch Likely instructions, regardless of the 8112default for the selected architecture. By default, Branch Likely 8113instructions may be generated if they are supported by the selected 8114architecture. An exception is for the MIPS32 and MIPS64 architectures 8115and processors which implement those architectures; for those, Branch 8116Likely instructions will not be generated by default because the MIPS32 8117and MIPS64 architectures specifically deprecate their use. 8118@end table 8119 8120@node i386 and x86-64 Options 8121@subsection Intel 386 and AMD x86-64 Options 8122@cindex i386 Options 8123@cindex x86-64 Options 8124@cindex Intel 386 Options 8125@cindex AMD x86-64 Options 8126 8127These @samp{-m} options are defined for the i386 and x86-64 family of 8128computers: 8129 8130@table @gcctabopt 8131@item -mtune=@var{cpu-type} 8132@opindex mtune 8133Tune to @var{cpu-type} everything applicable about the generated code, except 8134for the ABI and the set of available instructions. The choices for 8135@var{cpu-type} are: 8136@table @emph 8137@item i386 8138Original Intel's i386 CPU. 8139@item i486 8140Intel's i486 CPU. (No scheduling is implemented for this chip.) 8141@item i586, pentium 8142Intel Pentium CPU with no MMX support. 8143@item pentium-mmx 8144Intel PentiumMMX CPU based on Pentium core with MMX instruction set support. 8145@item i686, pentiumpro 8146Intel PentiumPro CPU. 8147@item pentium2 8148Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support. 8149@item pentium3, pentium3m 8150Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set 8151support. 8152@item pentium-m 8153Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set 8154support. Used by Centrino notebooks. 8155@item pentium4, pentium4m 8156Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support. 8157@item prescott 8158Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction 8159set support. 8160@item nocona 8161Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE, 8162SSE2 and SSE3 instruction set support. 8163@item k6 8164AMD K6 CPU with MMX instruction set support. 8165@item k6-2, k6-3 8166Improved versions of AMD K6 CPU with MMX and 3dNOW! instruction set support. 8167@item athlon, athlon-tbird 8168AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE prefetch instructions 8169support. 8170@item athlon-4, athlon-xp, athlon-mp 8171Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and full SSE 8172instruction set support. 8173@item k8, opteron, athlon64, athlon-fx 8174AMD K8 core based CPUs with x86-64 instruction set support. (This supersets 8175MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set extensions.) 8176@item winchip-c6 8177IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction 8178set support. 8179@item winchip2 8180IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3dNOW! 8181instruction set support. 8182@item c3 8183Via C3 CPU with MMX and 3dNOW! instruction set support. (No scheduling is 8184implemented for this chip.) 8185@item c3-2 8186Via C3-2 CPU with MMX and SSE instruction set support. (No scheduling is 8187implemented for this chip.) 8188@end table 8189 8190While picking a specific @var{cpu-type} will schedule things appropriately 8191for that particular chip, the compiler will not generate any code that 8192does not run on the i386 without the @option{-march=@var{cpu-type}} option 8193being used. 8194 8195@item -march=@var{cpu-type} 8196@opindex march 8197Generate instructions for the machine type @var{cpu-type}. The choices 8198for @var{cpu-type} are the same as for @option{-mtune}. Moreover, 8199specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}. 8200 8201@item -mcpu=@var{cpu-type} 8202@opindex mcpu 8203A deprecated synonym for @option{-mtune}. 8204 8205@item -m386 8206@itemx -m486 8207@itemx -mpentium 8208@itemx -mpentiumpro 8209@opindex m386 8210@opindex m486 8211@opindex mpentium 8212@opindex mpentiumpro 8213These options are synonyms for @option{-mtune=i386}, @option{-mtune=i486}, 8214@option{-mtune=pentium}, and @option{-mtune=pentiumpro} respectively. 8215These synonyms are deprecated. 8216 8217@item -mfpmath=@var{unit} 8218@opindex march 8219Generate floating point arithmetics for selected unit @var{unit}. The choices 8220for @var{unit} are: 8221 8222@table @samp 8223@item 387 8224Use the standard 387 floating point coprocessor present majority of chips and 8225emulated otherwise. Code compiled with this option will run almost everywhere. 8226The temporary results are computed in 80bit precision instead of precision 8227specified by the type resulting in slightly different results compared to most 8228of other chips. See @option{-ffloat-store} for more detailed description. 8229 8230This is the default choice for i386 compiler. 8231 8232@item sse 8233Use scalar floating point instructions present in the SSE instruction set. 8234This instruction set is supported by Pentium3 and newer chips, in the AMD line 8235by Athlon-4, Athlon-xp and Athlon-mp chips. The earlier version of SSE 8236instruction set supports only single precision arithmetics, thus the double and 8237extended precision arithmetics is still done using 387. Later version, present 8238only in Pentium4 and the future AMD x86-64 chips supports double precision 8239arithmetics too. 8240 8241For i387 you need to use @option{-march=@var{cpu-type}}, @option{-msse} or 8242@option{-msse2} switches to enable SSE extensions and make this option 8243effective. For x86-64 compiler, these extensions are enabled by default. 8244 8245The resulting code should be considerably faster in the majority of cases and avoid 8246the numerical instability problems of 387 code, but may break some existing 8247code that expects temporaries to be 80bit. 8248 8249This is the default choice for the x86-64 compiler. 8250 8251@item sse,387 8252Attempt to utilize both instruction sets at once. This effectively double the 8253amount of available registers and on chips with separate execution units for 8254387 and SSE the execution resources too. Use this option with care, as it is 8255still experimental, because the GCC register allocator does not model separate 8256functional units well resulting in instable performance. 8257@end table 8258 8259@item -masm=@var{dialect} 8260@opindex masm=@var{dialect} 8261Output asm instructions using selected @var{dialect}. Supported choices are 8262@samp{intel} or @samp{att} (the default one). 8263 8264@item -mieee-fp 8265@itemx -mno-ieee-fp 8266@opindex mieee-fp 8267@opindex mno-ieee-fp 8268Control whether or not the compiler uses IEEE floating point 8269comparisons. These handle correctly the case where the result of a 8270comparison is unordered. 8271 8272@item -msoft-float 8273@opindex msoft-float 8274Generate output containing library calls for floating point. 8275@strong{Warning:} the requisite libraries are not part of GCC@. 8276Normally the facilities of the machine's usual C compiler are used, but 8277this can't be done directly in cross-compilation. You must make your 8278own arrangements to provide suitable library functions for 8279cross-compilation. 8280 8281On machines where a function returns floating point results in the 80387 8282register stack, some floating point opcodes may be emitted even if 8283@option{-msoft-float} is used. 8284 8285@item -mno-fp-ret-in-387 8286@opindex mno-fp-ret-in-387 8287Do not use the FPU registers for return values of functions. 8288 8289The usual calling convention has functions return values of types 8290@code{float} and @code{double} in an FPU register, even if there 8291is no FPU@. The idea is that the operating system should emulate 8292an FPU@. 8293 8294The option @option{-mno-fp-ret-in-387} causes such values to be returned 8295in ordinary CPU registers instead. 8296 8297@item -mno-fancy-math-387 8298@opindex mno-fancy-math-387 8299Some 387 emulators do not support the @code{sin}, @code{cos} and 8300@code{sqrt} instructions for the 387. Specify this option to avoid 8301generating those instructions. This option is the default on FreeBSD, 8302OpenBSD and NetBSD@. This option is overridden when @option{-march} 8303indicates that the target cpu will always have an FPU and so the 8304instruction will not need emulation. As of revision 2.6.1, these 8305instructions are not generated unless you also use the 8306@option{-funsafe-math-optimizations} switch. 8307 8308@item -malign-double 8309@itemx -mno-align-double 8310@opindex malign-double 8311@opindex mno-align-double 8312Control whether GCC aligns @code{double}, @code{long double}, and 8313@code{long long} variables on a two word boundary or a one word 8314boundary. Aligning @code{double} variables on a two word boundary will 8315produce code that runs somewhat faster on a @samp{Pentium} at the 8316expense of more memory. 8317 8318@strong{Warning:} if you use the @option{-malign-double} switch, 8319structures containing the above types will be aligned differently than 8320the published application binary interface specifications for the 386 8321and will not be binary compatible with structures in code compiled 8322without that switch. 8323 8324@item -m96bit-long-double 8325@itemx -m128bit-long-double 8326@opindex m96bit-long-double 8327@opindex m128bit-long-double 8328These switches control the size of @code{long double} type. The i386 8329application binary interface specifies the size to be 96 bits, 8330so @option{-m96bit-long-double} is the default in 32 bit mode. 8331 8332Modern architectures (Pentium and newer) would prefer @code{long double} 8333to be aligned to an 8 or 16 byte boundary. In arrays or structures 8334conforming to the ABI, this would not be possible. So specifying a 8335@option{-m128bit-long-double} will align @code{long double} 8336to a 16 byte boundary by padding the @code{long double} with an additional 833732 bit zero. 8338 8339In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as 8340its ABI specifies that @code{long double} is to be aligned on 16 byte boundary. 8341 8342Notice that neither of these options enable any extra precision over the x87 8343standard of 80 bits for a @code{long double}. 8344 8345@strong{Warning:} if you override the default value for your target ABI, the 8346structures and arrays containing @code{long double} variables will change 8347their size as well as function calling convention for function taking 8348@code{long double} will be modified. Hence they will not be binary 8349compatible with arrays or structures in code compiled without that switch. 8350 8351 8352@item -msvr3-shlib 8353@itemx -mno-svr3-shlib 8354@opindex msvr3-shlib 8355@opindex mno-svr3-shlib 8356Control whether GCC places uninitialized local variables into the 8357@code{bss} or @code{data} segments. @option{-msvr3-shlib} places them 8358into @code{bss}. These options are meaningful only on System V Release 3. 8359 8360@item -mrtd 8361@opindex mrtd 8362Use a different function-calling convention, in which functions that 8363take a fixed number of arguments return with the @code{ret} @var{num} 8364instruction, which pops their arguments while returning. This saves one 8365instruction in the caller since there is no need to pop the arguments 8366there. 8367 8368You can specify that an individual function is called with this calling 8369sequence with the function attribute @samp{stdcall}. You can also 8370override the @option{-mrtd} option by using the function attribute 8371@samp{cdecl}. @xref{Function Attributes}. 8372 8373@strong{Warning:} this calling convention is incompatible with the one 8374normally used on Unix, so you cannot use it if you need to call 8375libraries compiled with the Unix compiler. 8376 8377Also, you must provide function prototypes for all functions that 8378take variable numbers of arguments (including @code{printf}); 8379otherwise incorrect code will be generated for calls to those 8380functions. 8381 8382In addition, seriously incorrect code will result if you call a 8383function with too many arguments. (Normally, extra arguments are 8384harmlessly ignored.) 8385 8386@item -mregparm=@var{num} 8387@opindex mregparm 8388Control how many registers are used to pass integer arguments. By 8389default, no registers are used to pass arguments, and at most 3 8390registers can be used. You can control this behavior for a specific 8391function by using the function attribute @samp{regparm}. 8392@xref{Function Attributes}. 8393 8394@strong{Warning:} if you use this switch, and 8395@var{num} is nonzero, then you must build all modules with the same 8396value, including any libraries. This includes the system libraries and 8397startup modules. 8398 8399@item -mpreferred-stack-boundary=@var{num} 8400@opindex mpreferred-stack-boundary 8401Attempt to keep the stack boundary aligned to a 2 raised to @var{num} 8402byte boundary. If @option{-mpreferred-stack-boundary} is not specified, 8403the default is 4 (16 bytes or 128 bits), except when optimizing for code 8404size (@option{-Os}), in which case the default is the minimum correct 8405alignment (4 bytes for x86, and 8 bytes for x86-64). 8406 8407On Pentium and PentiumPro, @code{double} and @code{long double} values 8408should be aligned to an 8 byte boundary (see @option{-malign-double}) or 8409suffer significant run time performance penalties. On Pentium III, the 8410Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar 8411penalties if it is not 16 byte aligned. 8412 8413To ensure proper alignment of this values on the stack, the stack boundary 8414must be as aligned as that required by any value stored on the stack. 8415Further, every function must be generated such that it keeps the stack 8416aligned. Thus calling a function compiled with a higher preferred 8417stack boundary from a function compiled with a lower preferred stack 8418boundary will most likely misalign the stack. It is recommended that 8419libraries that use callbacks always use the default setting. 8420 8421This extra alignment does consume extra stack space, and generally 8422increases code size. Code that is sensitive to stack space usage, such 8423as embedded systems and operating system kernels, may want to reduce the 8424preferred alignment to @option{-mpreferred-stack-boundary=2}. 8425 8426@item -mmmx 8427@itemx -mno-mmx 8428@item -msse 8429@itemx -mno-sse 8430@item -msse2 8431@itemx -mno-sse2 8432@item -msse3 8433@itemx -mno-sse3 8434@item -m3dnow 8435@itemx -mno-3dnow 8436@opindex mmmx 8437@opindex mno-mmx 8438@opindex msse 8439@opindex mno-sse 8440@opindex m3dnow 8441@opindex mno-3dnow 8442These switches enable or disable the use of built-in functions that allow 8443direct access to the MMX, SSE, SSE2, SSE3 and 3Dnow extensions of the 8444instruction set. 8445 8446@xref{X86 Built-in Functions}, for details of the functions enabled 8447and disabled by these switches. 8448 8449To have SSE/SSE2 instructions generated automatically from floating-point 8450code, see @option{-mfpmath=sse}. 8451 8452@item -mpush-args 8453@itemx -mno-push-args 8454@opindex mpush-args 8455@opindex mno-push-args 8456Use PUSH operations to store outgoing parameters. This method is shorter 8457and usually equally fast as method using SUB/MOV operations and is enabled 8458by default. In some cases disabling it may improve performance because of 8459improved scheduling and reduced dependencies. 8460 8461@item -maccumulate-outgoing-args 8462@opindex maccumulate-outgoing-args 8463If enabled, the maximum amount of space required for outgoing arguments will be 8464computed in the function prologue. This is faster on most modern CPUs 8465because of reduced dependencies, improved scheduling and reduced stack usage 8466when preferred stack boundary is not equal to 2. The drawback is a notable 8467increase in code size. This switch implies @option{-mno-push-args}. 8468 8469@item -mthreads 8470@opindex mthreads 8471Support thread-safe exception handling on @samp{Mingw32}. Code that relies 8472on thread-safe exception handling must compile and link all code with the 8473@option{-mthreads} option. When compiling, @option{-mthreads} defines 8474@option{-D_MT}; when linking, it links in a special thread helper library 8475@option{-lmingwthrd} which cleans up per thread exception handling data. 8476 8477@item -mno-align-stringops 8478@opindex mno-align-stringops 8479Do not align destination of inlined string operations. This switch reduces 8480code size and improves performance in case the destination is already aligned, 8481but GCC doesn't know about it. 8482 8483@item -minline-all-stringops 8484@opindex minline-all-stringops 8485By default GCC inlines string operations only when destination is known to be 8486aligned at least to 4 byte boundary. This enables more inlining, increase code 8487size, but may improve performance of code that depends on fast memcpy, strlen 8488and memset for short lengths. 8489 8490@item -momit-leaf-frame-pointer 8491@opindex momit-leaf-frame-pointer 8492Don't keep the frame pointer in a register for leaf functions. This 8493avoids the instructions to save, set up and restore frame pointers and 8494makes an extra register available in leaf functions. The option 8495@option{-fomit-frame-pointer} removes the frame pointer for all functions 8496which might make debugging harder. 8497 8498@item -mtls-direct-seg-refs 8499@itemx -mno-tls-direct-seg-refs 8500@opindex mtls-direct-seg-refs 8501Controls whether TLS variables may be accessed with offsets from the 8502TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit), 8503or whether the thread base pointer must be added. Whether or not this 8504is legal depends on the operating system, and whether it maps the 8505segment to cover the entire TLS area. 8506 8507For systems that use GNU libc, the default is on. 8508@end table 8509 8510These @samp{-m} switches are supported in addition to the above 8511on AMD x86-64 processors in 64-bit environments. 8512 8513@table @gcctabopt 8514@item -m32 8515@itemx -m64 8516@opindex m32 8517@opindex m64 8518Generate code for a 32-bit or 64-bit environment. 8519The 32-bit environment sets int, long and pointer to 32 bits and 8520generates code that runs on any i386 system. 8521The 64-bit environment sets int to 32 bits and long and pointer 8522to 64 bits and generates code for AMD's x86-64 architecture. 8523 8524@item -mno-red-zone 8525@opindex no-red-zone 8526Do not use a so called red zone for x86-64 code. The red zone is mandated 8527by the x86-64 ABI, it is a 128-byte area beyond the location of the 8528stack pointer that will not be modified by signal or interrupt handlers 8529and therefore can be used for temporary data without adjusting the stack 8530pointer. The flag @option{-mno-red-zone} disables this red zone. 8531 8532@item -mcmodel=small 8533@opindex mcmodel=small 8534Generate code for the small code model: the program and its symbols must 8535be linked in the lower 2 GB of the address space. Pointers are 64 bits. 8536Programs can be statically or dynamically linked. This is the default 8537code model. 8538 8539@item -mcmodel=kernel 8540@opindex mcmodel=kernel 8541Generate code for the kernel code model. The kernel runs in the 8542negative 2 GB of the address space. 8543This model has to be used for Linux kernel code. 8544 8545@item -mcmodel=medium 8546@opindex mcmodel=medium 8547Generate code for the medium model: The program is linked in the lower 2 8548GB of the address space but symbols can be located anywhere in the 8549address space. Programs can be statically or dynamically linked, but 8550building of shared libraries are not supported with the medium model. 8551 8552@item -mcmodel=large 8553@opindex mcmodel=large 8554Generate code for the large model: This model makes no assumptions 8555about addresses and sizes of sections. Currently GCC does not implement 8556this model. 8557@end table 8558 8559@node HPPA Options 8560@subsection HPPA Options 8561@cindex HPPA Options 8562 8563These @samp{-m} options are defined for the HPPA family of computers: 8564 8565@table @gcctabopt 8566@item -march=@var{architecture-type} 8567@opindex march 8568Generate code for the specified architecture. The choices for 8569@var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA 85701.1, and @samp{2.0} for PA 2.0 processors. Refer to 8571@file{/usr/lib/sched.models} on an HP-UX system to determine the proper 8572architecture option for your machine. Code compiled for lower numbered 8573architectures will run on higher numbered architectures, but not the 8574other way around. 8575 8576PA 2.0 support currently requires gas snapshot 19990413 or later. The 8577next release of binutils (current is 2.9.1) will probably contain PA 2.0 8578support. 8579 8580@item -mpa-risc-1-0 8581@itemx -mpa-risc-1-1 8582@itemx -mpa-risc-2-0 8583@opindex mpa-risc-1-0 8584@opindex mpa-risc-1-1 8585@opindex mpa-risc-2-0 8586Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively. 8587 8588@item -mbig-switch 8589@opindex mbig-switch 8590Generate code suitable for big switch tables. Use this option only if 8591the assembler/linker complain about out of range branches within a switch 8592table. 8593 8594@item -mjump-in-delay 8595@opindex mjump-in-delay 8596Fill delay slots of function calls with unconditional jump instructions 8597by modifying the return pointer for the function call to be the target 8598of the conditional jump. 8599 8600@item -mdisable-fpregs 8601@opindex mdisable-fpregs 8602Prevent floating point registers from being used in any manner. This is 8603necessary for compiling kernels which perform lazy context switching of 8604floating point registers. If you use this option and attempt to perform 8605floating point operations, the compiler will abort. 8606 8607@item -mdisable-indexing 8608@opindex mdisable-indexing 8609Prevent the compiler from using indexing address modes. This avoids some 8610rather obscure problems when compiling MIG generated code under MACH@. 8611 8612@item -mno-space-regs 8613@opindex mno-space-regs 8614Generate code that assumes the target has no space registers. This allows 8615GCC to generate faster indirect calls and use unscaled index address modes. 8616 8617Such code is suitable for level 0 PA systems and kernels. 8618 8619@item -mfast-indirect-calls 8620@opindex mfast-indirect-calls 8621Generate code that assumes calls never cross space boundaries. This 8622allows GCC to emit code which performs faster indirect calls. 8623 8624This option will not work in the presence of shared libraries or nested 8625functions. 8626 8627@item -mlong-load-store 8628@opindex mlong-load-store 8629Generate 3-instruction load and store sequences as sometimes required by 8630the HP-UX 10 linker. This is equivalent to the @samp{+k} option to 8631the HP compilers. 8632 8633@item -mportable-runtime 8634@opindex mportable-runtime 8635Use the portable calling conventions proposed by HP for ELF systems. 8636 8637@item -mgas 8638@opindex mgas 8639Enable the use of assembler directives only GAS understands. 8640 8641@item -mschedule=@var{cpu-type} 8642@opindex mschedule 8643Schedule code according to the constraints for the machine type 8644@var{cpu-type}. The choices for @var{cpu-type} are @samp{700} 8645@samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}. Refer 8646to @file{/usr/lib/sched.models} on an HP-UX system to determine the 8647proper scheduling option for your machine. The default scheduling is 8648@samp{8000}. 8649 8650@item -mlinker-opt 8651@opindex mlinker-opt 8652Enable the optimization pass in the HP-UX linker. Note this makes symbolic 8653debugging impossible. It also triggers a bug in the HP-UX 8 and HP-UX 9 8654linkers in which they give bogus error messages when linking some programs. 8655 8656@item -msoft-float 8657@opindex msoft-float 8658Generate output containing library calls for floating point. 8659@strong{Warning:} the requisite libraries are not available for all HPPA 8660targets. Normally the facilities of the machine's usual C compiler are 8661used, but this cannot be done directly in cross-compilation. You must make 8662your own arrangements to provide suitable library functions for 8663cross-compilation. The embedded target @samp{hppa1.1-*-pro} 8664does provide software floating point support. 8665 8666@option{-msoft-float} changes the calling convention in the output file; 8667therefore, it is only useful if you compile @emph{all} of a program with 8668this option. In particular, you need to compile @file{libgcc.a}, the 8669library that comes with GCC, with @option{-msoft-float} in order for 8670this to work. 8671 8672@item -msio 8673@opindex msio 8674Generate the predefine, @code{_SIO}, for server IO. The default is 8675@option{-mwsio}. This generates the predefines, @code{__hp9000s700}, 8676@code{__hp9000s700__} and @code{_WSIO}, for workstation IO. These 8677options are available under HP-UX and HI-UX. 8678 8679@item -mgnu-ld 8680@opindex gnu-ld 8681Use GNU ld specific options. This passes @option{-shared} to ld when 8682building a shared library. It is the default when GCC is configured, 8683explicitly or implicitly, with the GNU linker. This option does not 8684have any affect on which ld is called, it only changes what parameters 8685are passed to that ld. The ld that is called is determined by the 8686@option{--with-ld} configure option, GCC's program search path, and 8687finally by the user's @env{PATH}. The linker used by GCC can be printed 8688using @samp{which `gcc -print-prog-name=ld`}. 8689 8690@item -mhp-ld 8691@opindex hp-ld 8692Use HP ld specific options. This passes @option{-b} to ld when building 8693a shared library and passes @option{+Accept TypeMismatch} to ld on all 8694links. It is the default when GCC is configured, explicitly or 8695implicitly, with the HP linker. This option does not have any affect on 8696which ld is called, it only changes what parameters are passed to that 8697ld. The ld that is called is determined by the @option{--with-ld} 8698configure option, GCC's program search path, and finally by the user's 8699@env{PATH}. The linker used by GCC can be printed using @samp{which 8700`gcc -print-prog-name=ld`}. 8701 8702@item -mlong-calls 8703@opindex mno-long-calls 8704Generate code that uses long call sequences. This ensures that a call 8705is always able to reach linker generated stubs. The default is to generate 8706long calls only when the distance from the call site to the beginning 8707of the function or translation unit, as the case may be, exceeds a 8708predefined limit set by the branch type being used. The limits for 8709normal calls are 7,600,000 and 240,000 bytes, respectively for the 8710PA 2.0 and PA 1.X architectures. Sibcalls are always limited at 8711240,000 bytes. 8712 8713Distances are measured from the beginning of functions when using the 8714@option{-ffunction-sections} option, or when using the @option{-mgas} 8715and @option{-mno-portable-runtime} options together under HP-UX with 8716the SOM linker. 8717 8718It is normally not desirable to use this option as it will degrade 8719performance. However, it may be useful in large applications, 8720particularly when partial linking is used to build the application. 8721 8722The types of long calls used depends on the capabilities of the 8723assembler and linker, and the type of code being generated. The 8724impact on systems that support long absolute calls, and long pic 8725symbol-difference or pc-relative calls should be relatively small. 8726However, an indirect call is used on 32-bit ELF systems in pic code 8727and it is quite long. 8728 8729@item -nolibdld 8730@opindex nolibdld 8731Suppress the generation of link options to search libdld.sl when the 8732@option{-static} option is specified on HP-UX 10 and later. 8733 8734@item -static 8735@opindex static 8736The HP-UX implementation of setlocale in libc has a dependency on 8737libdld.sl. There isn't an archive version of libdld.sl. Thus, 8738when the @option{-static} option is specified, special link options 8739are needed to resolve this dependency. 8740 8741On HP-UX 10 and later, the GCC driver adds the necessary options to 8742link with libdld.sl when the @option{-static} option is specified. 8743This causes the resulting binary to be dynamic. On the 64-bit port, 8744the linkers generate dynamic binaries by default in any case. The 8745@option{-nolibdld} option can be used to prevent the GCC driver from 8746adding these link options. 8747 8748@item -threads 8749@opindex threads 8750Add support for multithreading with the @dfn{dce thread} library 8751under HP-UX. This option sets flags for both the preprocessor and 8752linker. 8753@end table 8754 8755@node Intel 960 Options 8756@subsection Intel 960 Options 8757 8758These @samp{-m} options are defined for the Intel 960 implementations: 8759 8760@table @gcctabopt 8761@item -m@var{cpu-type} 8762@opindex mka 8763@opindex mkb 8764@opindex mmc 8765@opindex mca 8766@opindex mcf 8767@opindex msa 8768@opindex msb 8769Assume the defaults for the machine type @var{cpu-type} for some of 8770the other options, including instruction scheduling, floating point 8771support, and addressing modes. The choices for @var{cpu-type} are 8772@samp{ka}, @samp{kb}, @samp{mc}, @samp{ca}, @samp{cf}, 8773@samp{sa}, and @samp{sb}. 8774The default is 8775@samp{kb}. 8776 8777@item -mnumerics 8778@itemx -msoft-float 8779@opindex mnumerics 8780@opindex msoft-float 8781The @option{-mnumerics} option indicates that the processor does support 8782floating-point instructions. The @option{-msoft-float} option indicates 8783that floating-point support should not be assumed. 8784 8785@item -mleaf-procedures 8786@itemx -mno-leaf-procedures 8787@opindex mleaf-procedures 8788@opindex mno-leaf-procedures 8789Do (or do not) attempt to alter leaf procedures to be callable with the 8790@code{bal} instruction as well as @code{call}. This will result in more 8791efficient code for explicit calls when the @code{bal} instruction can be 8792substituted by the assembler or linker, but less efficient code in other 8793cases, such as calls via function pointers, or using a linker that doesn't 8794support this optimization. 8795 8796@item -mtail-call 8797@itemx -mno-tail-call 8798@opindex mtail-call 8799@opindex mno-tail-call 8800Do (or do not) make additional attempts (beyond those of the 8801machine-independent portions of the compiler) to optimize tail-recursive 8802calls into branches. You may not want to do this because the detection of 8803cases where this is not valid is not totally complete. The default is 8804@option{-mno-tail-call}. 8805 8806@item -mcomplex-addr 8807@itemx -mno-complex-addr 8808@opindex mcomplex-addr 8809@opindex mno-complex-addr 8810Assume (or do not assume) that the use of a complex addressing mode is a 8811win on this implementation of the i960. Complex addressing modes may not 8812be worthwhile on the K-series, but they definitely are on the C-series. 8813The default is currently @option{-mcomplex-addr} for all processors except 8814the CB and CC@. 8815 8816@item -mcode-align 8817@itemx -mno-code-align 8818@opindex mcode-align 8819@opindex mno-code-align 8820Align code to 8-byte boundaries for faster fetching (or don't bother). 8821Currently turned on by default for C-series implementations only. 8822 8823@ignore 8824@item -mclean-linkage 8825@itemx -mno-clean-linkage 8826@opindex mclean-linkage 8827@opindex mno-clean-linkage 8828These options are not fully implemented. 8829@end ignore 8830 8831@item -mic-compat 8832@itemx -mic2.0-compat 8833@itemx -mic3.0-compat 8834@opindex mic-compat 8835@opindex mic2.0-compat 8836@opindex mic3.0-compat 8837Enable compatibility with iC960 v2.0 or v3.0. 8838 8839@item -masm-compat 8840@itemx -mintel-asm 8841@opindex masm-compat 8842@opindex mintel-asm 8843Enable compatibility with the iC960 assembler. 8844 8845@item -mstrict-align 8846@itemx -mno-strict-align 8847@opindex mstrict-align 8848@opindex mno-strict-align 8849Do not permit (do permit) unaligned accesses. 8850 8851@item -mold-align 8852@opindex mold-align 8853Enable structure-alignment compatibility with Intel's gcc release version 88541.3 (based on gcc 1.37). This option implies @option{-mstrict-align}. 8855 8856@item -mlong-double-64 8857@opindex mlong-double-64 8858Implement type @samp{long double} as 64-bit floating point numbers. 8859Without the option @samp{long double} is implemented by 80-bit 8860floating point numbers. The only reason we have it because there is 8861no 128-bit @samp{long double} support in @samp{fp-bit.c} yet. So it 8862is only useful for people using soft-float targets. Otherwise, we 8863should recommend against use of it. 8864 8865@end table 8866 8867@node DEC Alpha Options 8868@subsection DEC Alpha Options 8869 8870These @samp{-m} options are defined for the DEC Alpha implementations: 8871 8872@table @gcctabopt 8873@item -mno-soft-float 8874@itemx -msoft-float 8875@opindex mno-soft-float 8876@opindex msoft-float 8877Use (do not use) the hardware floating-point instructions for 8878floating-point operations. When @option{-msoft-float} is specified, 8879functions in @file{libgcc.a} will be used to perform floating-point 8880operations. Unless they are replaced by routines that emulate the 8881floating-point operations, or compiled in such a way as to call such 8882emulations routines, these routines will issue floating-point 8883operations. If you are compiling for an Alpha without floating-point 8884operations, you must ensure that the library is built so as not to call 8885them. 8886 8887Note that Alpha implementations without floating-point operations are 8888required to have floating-point registers. 8889 8890@item -mfp-reg 8891@itemx -mno-fp-regs 8892@opindex mfp-reg 8893@opindex mno-fp-regs 8894Generate code that uses (does not use) the floating-point register set. 8895@option{-mno-fp-regs} implies @option{-msoft-float}. If the floating-point 8896register set is not used, floating point operands are passed in integer 8897registers as if they were integers and floating-point results are passed 8898in @code{$0} instead of @code{$f0}. This is a non-standard calling sequence, 8899so any function with a floating-point argument or return value called by code 8900compiled with @option{-mno-fp-regs} must also be compiled with that 8901option. 8902 8903A typical use of this option is building a kernel that does not use, 8904and hence need not save and restore, any floating-point registers. 8905 8906@item -mieee 8907@opindex mieee 8908The Alpha architecture implements floating-point hardware optimized for 8909maximum performance. It is mostly compliant with the IEEE floating 8910point standard. However, for full compliance, software assistance is 8911required. This option generates code fully IEEE compliant code 8912@emph{except} that the @var{inexact-flag} is not maintained (see below). 8913If this option is turned on, the preprocessor macro @code{_IEEE_FP} is 8914defined during compilation. The resulting code is less efficient but is 8915able to correctly support denormalized numbers and exceptional IEEE 8916values such as not-a-number and plus/minus infinity. Other Alpha 8917compilers call this option @option{-ieee_with_no_inexact}. 8918 8919@item -mieee-with-inexact 8920@opindex mieee-with-inexact 8921This is like @option{-mieee} except the generated code also maintains 8922the IEEE @var{inexact-flag}. Turning on this option causes the 8923generated code to implement fully-compliant IEEE math. In addition to 8924@code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor 8925macro. On some Alpha implementations the resulting code may execute 8926significantly slower than the code generated by default. Since there is 8927very little code that depends on the @var{inexact-flag}, you should 8928normally not specify this option. Other Alpha compilers call this 8929option @option{-ieee_with_inexact}. 8930 8931@item -mfp-trap-mode=@var{trap-mode} 8932@opindex mfp-trap-mode 8933This option controls what floating-point related traps are enabled. 8934Other Alpha compilers call this option @option{-fptm @var{trap-mode}}. 8935The trap mode can be set to one of four values: 8936 8937@table @samp 8938@item n 8939This is the default (normal) setting. The only traps that are enabled 8940are the ones that cannot be disabled in software (e.g., division by zero 8941trap). 8942 8943@item u 8944In addition to the traps enabled by @samp{n}, underflow traps are enabled 8945as well. 8946 8947@item su 8948Like @samp{su}, but the instructions are marked to be safe for software 8949completion (see Alpha architecture manual for details). 8950 8951@item sui 8952Like @samp{su}, but inexact traps are enabled as well. 8953@end table 8954 8955@item -mfp-rounding-mode=@var{rounding-mode} 8956@opindex mfp-rounding-mode 8957Selects the IEEE rounding mode. Other Alpha compilers call this option 8958@option{-fprm @var{rounding-mode}}. The @var{rounding-mode} can be one 8959of: 8960 8961@table @samp 8962@item n 8963Normal IEEE rounding mode. Floating point numbers are rounded towards 8964the nearest machine number or towards the even machine number in case 8965of a tie. 8966 8967@item m 8968Round towards minus infinity. 8969 8970@item c 8971Chopped rounding mode. Floating point numbers are rounded towards zero. 8972 8973@item d 8974Dynamic rounding mode. A field in the floating point control register 8975(@var{fpcr}, see Alpha architecture reference manual) controls the 8976rounding mode in effect. The C library initializes this register for 8977rounding towards plus infinity. Thus, unless your program modifies the 8978@var{fpcr}, @samp{d} corresponds to round towards plus infinity. 8979@end table 8980 8981@item -mtrap-precision=@var{trap-precision} 8982@opindex mtrap-precision 8983In the Alpha architecture, floating point traps are imprecise. This 8984means without software assistance it is impossible to recover from a 8985floating trap and program execution normally needs to be terminated. 8986GCC can generate code that can assist operating system trap handlers 8987in determining the exact location that caused a floating point trap. 8988Depending on the requirements of an application, different levels of 8989precisions can be selected: 8990 8991@table @samp 8992@item p 8993Program precision. This option is the default and means a trap handler 8994can only identify which program caused a floating point exception. 8995 8996@item f 8997Function precision. The trap handler can determine the function that 8998caused a floating point exception. 8999 9000@item i 9001Instruction precision. The trap handler can determine the exact 9002instruction that caused a floating point exception. 9003@end table 9004 9005Other Alpha compilers provide the equivalent options called 9006@option{-scope_safe} and @option{-resumption_safe}. 9007 9008@item -mieee-conformant 9009@opindex mieee-conformant 9010This option marks the generated code as IEEE conformant. You must not 9011use this option unless you also specify @option{-mtrap-precision=i} and either 9012@option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}. Its only effect 9013is to emit the line @samp{.eflag 48} in the function prologue of the 9014generated assembly file. Under DEC Unix, this has the effect that 9015IEEE-conformant math library routines will be linked in. 9016 9017@item -mbuild-constants 9018@opindex mbuild-constants 9019Normally GCC examines a 32- or 64-bit integer constant to 9020see if it can construct it from smaller constants in two or three 9021instructions. If it cannot, it will output the constant as a literal and 9022generate code to load it from the data segment at runtime. 9023 9024Use this option to require GCC to construct @emph{all} integer constants 9025using code, even if it takes more instructions (the maximum is six). 9026 9027You would typically use this option to build a shared library dynamic 9028loader. Itself a shared library, it must relocate itself in memory 9029before it can find the variables and constants in its own data segment. 9030 9031@item -malpha-as 9032@itemx -mgas 9033@opindex malpha-as 9034@opindex mgas 9035Select whether to generate code to be assembled by the vendor-supplied 9036assembler (@option{-malpha-as}) or by the GNU assembler @option{-mgas}. 9037 9038@item -mbwx 9039@itemx -mno-bwx 9040@itemx -mcix 9041@itemx -mno-cix 9042@itemx -mfix 9043@itemx -mno-fix 9044@itemx -mmax 9045@itemx -mno-max 9046@opindex mbwx 9047@opindex mno-bwx 9048@opindex mcix 9049@opindex mno-cix 9050@opindex mfix 9051@opindex mno-fix 9052@opindex mmax 9053@opindex mno-max 9054Indicate whether GCC should generate code to use the optional BWX, 9055CIX, FIX and MAX instruction sets. The default is to use the instruction 9056sets supported by the CPU type specified via @option{-mcpu=} option or that 9057of the CPU on which GCC was built if none was specified. 9058 9059@item -mfloat-vax 9060@itemx -mfloat-ieee 9061@opindex mfloat-vax 9062@opindex mfloat-ieee 9063Generate code that uses (does not use) VAX F and G floating point 9064arithmetic instead of IEEE single and double precision. 9065 9066@item -mexplicit-relocs 9067@itemx -mno-explicit-relocs 9068@opindex mexplicit-relocs 9069@opindex mno-explicit-relocs 9070Older Alpha assemblers provided no way to generate symbol relocations 9071except via assembler macros. Use of these macros does not allow 9072optimal instruction scheduling. GNU binutils as of version 2.12 9073supports a new syntax that allows the compiler to explicitly mark 9074which relocations should apply to which instructions. This option 9075is mostly useful for debugging, as GCC detects the capabilities of 9076the assembler when it is built and sets the default accordingly. 9077 9078@item -msmall-data 9079@itemx -mlarge-data 9080@opindex msmall-data 9081@opindex mlarge-data 9082When @option{-mexplicit-relocs} is in effect, static data is 9083accessed via @dfn{gp-relative} relocations. When @option{-msmall-data} 9084is used, objects 8 bytes long or smaller are placed in a @dfn{small data area} 9085(the @code{.sdata} and @code{.sbss} sections) and are accessed via 908616-bit relocations off of the @code{$gp} register. This limits the 9087size of the small data area to 64KB, but allows the variables to be 9088directly accessed via a single instruction. 9089 9090The default is @option{-mlarge-data}. With this option the data area 9091is limited to just below 2GB. Programs that require more than 2GB of 9092data must use @code{malloc} or @code{mmap} to allocate the data in the 9093heap instead of in the program's data segment. 9094 9095When generating code for shared libraries, @option{-fpic} implies 9096@option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}. 9097 9098@item -msmall-text 9099@itemx -mlarge-text 9100@opindex msmall-text 9101@opindex mlarge-text 9102When @option{-msmall-text} is used, the compiler assumes that the 9103code of the entire program (or shared library) fits in 4MB, and is 9104thus reachable with a branch instruction. When @option{-msmall-data} 9105is used, the compiler can assume that all local symbols share the 9106same @code{$gp} value, and thus reduce the number of instructions 9107required for a function call from 4 to 1. 9108 9109The default is @option{-mlarge-text}. 9110 9111@item -mcpu=@var{cpu_type} 9112@opindex mcpu 9113Set the instruction set and instruction scheduling parameters for 9114machine type @var{cpu_type}. You can specify either the @samp{EV} 9115style name or the corresponding chip number. GCC supports scheduling 9116parameters for the EV4, EV5 and EV6 family of processors and will 9117choose the default values for the instruction set from the processor 9118you specify. If you do not specify a processor type, GCC will default 9119to the processor on which the compiler was built. 9120 9121Supported values for @var{cpu_type} are 9122 9123@table @samp 9124@item ev4 9125@itemx ev45 9126@itemx 21064 9127Schedules as an EV4 and has no instruction set extensions. 9128 9129@item ev5 9130@itemx 21164 9131Schedules as an EV5 and has no instruction set extensions. 9132 9133@item ev56 9134@itemx 21164a 9135Schedules as an EV5 and supports the BWX extension. 9136 9137@item pca56 9138@itemx 21164pc 9139@itemx 21164PC 9140Schedules as an EV5 and supports the BWX and MAX extensions. 9141 9142@item ev6 9143@itemx 21264 9144Schedules as an EV6 and supports the BWX, FIX, and MAX extensions. 9145 9146@item ev67 9147@itemx 21264a 9148Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions. 9149@end table 9150 9151@item -mtune=@var{cpu_type} 9152@opindex mtune 9153Set only the instruction scheduling parameters for machine type 9154@var{cpu_type}. The instruction set is not changed. 9155 9156@item -mmemory-latency=@var{time} 9157@opindex mmemory-latency 9158Sets the latency the scheduler should assume for typical memory 9159references as seen by the application. This number is highly 9160dependent on the memory access patterns used by the application 9161and the size of the external cache on the machine. 9162 9163Valid options for @var{time} are 9164 9165@table @samp 9166@item @var{number} 9167A decimal number representing clock cycles. 9168 9169@item L1 9170@itemx L2 9171@itemx L3 9172@itemx main 9173The compiler contains estimates of the number of clock cycles for 9174``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches 9175(also called Dcache, Scache, and Bcache), as well as to main memory. 9176Note that L3 is only valid for EV5. 9177 9178@end table 9179@end table 9180 9181@node DEC Alpha/VMS Options 9182@subsection DEC Alpha/VMS Options 9183 9184These @samp{-m} options are defined for the DEC Alpha/VMS implementations: 9185 9186@table @gcctabopt 9187@item -mvms-return-codes 9188@opindex mvms-return-codes 9189Return VMS condition codes from main. The default is to return POSIX 9190style condition (e.g.@ error) codes. 9191@end table 9192 9193@node H8/300 Options 9194@subsection H8/300 Options 9195 9196These @samp{-m} options are defined for the H8/300 implementations: 9197 9198@table @gcctabopt 9199@item -mrelax 9200@opindex mrelax 9201Shorten some address references at link time, when possible; uses the 9202linker option @option{-relax}. @xref{H8/300,, @code{ld} and the H8/300, 9203ld, Using ld}, for a fuller description. 9204 9205@item -mh 9206@opindex mh 9207Generate code for the H8/300H@. 9208 9209@item -ms 9210@opindex ms 9211Generate code for the H8S@. 9212 9213@item -mn 9214@opindex mn 9215Generate code for the H8S and H8/300H in the normal mode. This switch 9216must be used either with -mh or -ms. 9217 9218@item -ms2600 9219@opindex ms2600 9220Generate code for the H8S/2600. This switch must be used with @option{-ms}. 9221 9222@item -mint32 9223@opindex mint32 9224Make @code{int} data 32 bits by default. 9225 9226@item -malign-300 9227@opindex malign-300 9228On the H8/300H and H8S, use the same alignment rules as for the H8/300. 9229The default for the H8/300H and H8S is to align longs and floats on 4 9230byte boundaries. 9231@option{-malign-300} causes them to be aligned on 2 byte boundaries. 9232This option has no effect on the H8/300. 9233@end table 9234 9235@node SH Options 9236@subsection SH Options 9237 9238These @samp{-m} options are defined for the SH implementations: 9239 9240@table @gcctabopt 9241@item -m1 9242@opindex m1 9243Generate code for the SH1. 9244 9245@item -m2 9246@opindex m2 9247Generate code for the SH2. 9248 9249@item -m2e 9250Generate code for the SH2e. 9251 9252@item -m3 9253@opindex m3 9254Generate code for the SH3. 9255 9256@item -m3e 9257@opindex m3e 9258Generate code for the SH3e. 9259 9260@item -m4-nofpu 9261@opindex m4-nofpu 9262Generate code for the SH4 without a floating-point unit. 9263 9264@item -m4-single-only 9265@opindex m4-single-only 9266Generate code for the SH4 with a floating-point unit that only 9267supports single-precision arithmetic. 9268 9269@item -m4-single 9270@opindex m4-single 9271Generate code for the SH4 assuming the floating-point unit is in 9272single-precision mode by default. 9273 9274@item -m4 9275@opindex m4 9276Generate code for the SH4. 9277 9278@item -mb 9279@opindex mb 9280Compile code for the processor in big endian mode. 9281 9282@item -ml 9283@opindex ml 9284Compile code for the processor in little endian mode. 9285 9286@item -mdalign 9287@opindex mdalign 9288Align doubles at 64-bit boundaries. Note that this changes the calling 9289conventions, and thus some functions from the standard C library will 9290not work unless you recompile it first with @option{-mdalign}. 9291 9292@item -mrelax 9293@opindex mrelax 9294Shorten some address references at link time, when possible; uses the 9295linker option @option{-relax}. 9296 9297@item -mbigtable 9298@opindex mbigtable 9299Use 32-bit offsets in @code{switch} tables. The default is to use 930016-bit offsets. 9301 9302@item -mfmovd 9303@opindex mfmovd 9304Enable the use of the instruction @code{fmovd}. 9305 9306@item -mhitachi 9307@opindex mhitachi 9308Comply with the calling conventions defined by Renesas. 9309 9310@item -mnomacsave 9311@opindex mnomacsave 9312Mark the @code{MAC} register as call-clobbered, even if 9313@option{-mhitachi} is given. 9314 9315@item -mieee 9316@opindex mieee 9317Increase IEEE-compliance of floating-point code. 9318 9319@item -misize 9320@opindex misize 9321Dump instruction size and location in the assembly code. 9322 9323@item -mpadstruct 9324@opindex mpadstruct 9325This option is deprecated. It pads structures to multiple of 4 bytes, 9326which is incompatible with the SH ABI@. 9327 9328@item -mspace 9329@opindex mspace 9330Optimize for space instead of speed. Implied by @option{-Os}. 9331 9332@item -mprefergot 9333@opindex mprefergot 9334When generating position-independent code, emit function calls using 9335the Global Offset Table instead of the Procedure Linkage Table. 9336 9337@item -musermode 9338@opindex musermode 9339Generate a library function call to invalidate instruction cache 9340entries, after fixing up a trampoline. This library function call 9341doesn't assume it can write to the whole memory address space. This 9342is the default when the target is @code{sh-*-linux*}. 9343@end table 9344 9345@node System V Options 9346@subsection Options for System V 9347 9348These additional options are available on System V Release 4 for 9349compatibility with other compilers on those systems: 9350 9351@table @gcctabopt 9352@item -G 9353@opindex G 9354Create a shared object. 9355It is recommended that @option{-symbolic} or @option{-shared} be used instead. 9356 9357@item -Qy 9358@opindex Qy 9359Identify the versions of each tool used by the compiler, in a 9360@code{.ident} assembler directive in the output. 9361 9362@item -Qn 9363@opindex Qn 9364Refrain from adding @code{.ident} directives to the output file (this is 9365the default). 9366 9367@item -YP,@var{dirs} 9368@opindex YP 9369Search the directories @var{dirs}, and no others, for libraries 9370specified with @option{-l}. 9371 9372@item -Ym,@var{dir} 9373@opindex Ym 9374Look in the directory @var{dir} to find the M4 preprocessor. 9375The assembler uses this option. 9376@c This is supposed to go with a -Yd for predefined M4 macro files, but 9377@c the generic assembler that comes with Solaris takes just -Ym. 9378@end table 9379 9380@node TMS320C3x/C4x Options 9381@subsection TMS320C3x/C4x Options 9382@cindex TMS320C3x/C4x Options 9383 9384These @samp{-m} options are defined for TMS320C3x/C4x implementations: 9385 9386@table @gcctabopt 9387 9388@item -mcpu=@var{cpu_type} 9389@opindex mcpu 9390Set the instruction set, register set, and instruction scheduling 9391parameters for machine type @var{cpu_type}. Supported values for 9392@var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and 9393@samp{c44}. The default is @samp{c40} to generate code for the 9394TMS320C40. 9395 9396@item -mbig-memory 9397@itemx -mbig 9398@itemx -msmall-memory 9399@itemx -msmall 9400@opindex mbig-memory 9401@opindex mbig 9402@opindex msmall-memory 9403@opindex msmall 9404Generates code for the big or small memory model. The small memory 9405model assumed that all data fits into one 64K word page. At run-time 9406the data page (DP) register must be set to point to the 64K page 9407containing the .bss and .data program sections. The big memory model is 9408the default and requires reloading of the DP register for every direct 9409memory access. 9410 9411@item -mbk 9412@itemx -mno-bk 9413@opindex mbk 9414@opindex mno-bk 9415Allow (disallow) allocation of general integer operands into the block 9416count register BK@. 9417 9418@item -mdb 9419@itemx -mno-db 9420@opindex mdb 9421@opindex mno-db 9422Enable (disable) generation of code using decrement and branch, 9423DBcond(D), instructions. This is enabled by default for the C4x. To be 9424on the safe side, this is disabled for the C3x, since the maximum 9425iteration count on the C3x is @math{2^{23} + 1} (but who iterates loops more than 9426@math{2^{23}} times on the C3x?). Note that GCC will try to reverse a loop so 9427that it can utilize the decrement and branch instruction, but will give 9428up if there is more than one memory reference in the loop. Thus a loop 9429where the loop counter is decremented can generate slightly more 9430efficient code, in cases where the RPTB instruction cannot be utilized. 9431 9432@item -mdp-isr-reload 9433@itemx -mparanoid 9434@opindex mdp-isr-reload 9435@opindex mparanoid 9436Force the DP register to be saved on entry to an interrupt service 9437routine (ISR), reloaded to point to the data section, and restored on 9438exit from the ISR@. This should not be required unless someone has 9439violated the small memory model by modifying the DP register, say within 9440an object library. 9441 9442@item -mmpyi 9443@itemx -mno-mpyi 9444@opindex mmpyi 9445@opindex mno-mpyi 9446For the C3x use the 24-bit MPYI instruction for integer multiplies 9447instead of a library call to guarantee 32-bit results. Note that if one 9448of the operands is a constant, then the multiplication will be performed 9449using shifts and adds. If the @option{-mmpyi} option is not specified for the C3x, 9450then squaring operations are performed inline instead of a library call. 9451 9452@item -mfast-fix 9453@itemx -mno-fast-fix 9454@opindex mfast-fix 9455@opindex mno-fast-fix 9456The C3x/C4x FIX instruction to convert a floating point value to an 9457integer value chooses the nearest integer less than or equal to the 9458floating point value rather than to the nearest integer. Thus if the 9459floating point number is negative, the result will be incorrectly 9460truncated an additional code is necessary to detect and correct this 9461case. This option can be used to disable generation of the additional 9462code required to correct the result. 9463 9464@item -mrptb 9465@itemx -mno-rptb 9466@opindex mrptb 9467@opindex mno-rptb 9468Enable (disable) generation of repeat block sequences using the RPTB 9469instruction for zero overhead looping. The RPTB construct is only used 9470for innermost loops that do not call functions or jump across the loop 9471boundaries. There is no advantage having nested RPTB loops due to the 9472overhead required to save and restore the RC, RS, and RE registers. 9473This is enabled by default with @option{-O2}. 9474 9475@item -mrpts=@var{count} 9476@itemx -mno-rpts 9477@opindex mrpts 9478@opindex mno-rpts 9479Enable (disable) the use of the single instruction repeat instruction 9480RPTS@. If a repeat block contains a single instruction, and the loop 9481count can be guaranteed to be less than the value @var{count}, GCC will 9482emit a RPTS instruction instead of a RPTB@. If no value is specified, 9483then a RPTS will be emitted even if the loop count cannot be determined 9484at compile time. Note that the repeated instruction following RPTS does 9485not have to be reloaded from memory each iteration, thus freeing up the 9486CPU buses for operands. However, since interrupts are blocked by this 9487instruction, it is disabled by default. 9488 9489@item -mloop-unsigned 9490@itemx -mno-loop-unsigned 9491@opindex mloop-unsigned 9492@opindex mno-loop-unsigned 9493The maximum iteration count when using RPTS and RPTB (and DB on the C40) 9494is @math{2^{31} + 1} since these instructions test if the iteration count is 9495negative to terminate the loop. If the iteration count is unsigned 9496there is a possibility than the @math{2^{31} + 1} maximum iteration count may be 9497exceeded. This switch allows an unsigned iteration count. 9498 9499@item -mti 9500@opindex mti 9501Try to emit an assembler syntax that the TI assembler (asm30) is happy 9502with. This also enforces compatibility with the API employed by the TI 9503C3x C compiler. For example, long doubles are passed as structures 9504rather than in floating point registers. 9505 9506@item -mregparm 9507@itemx -mmemparm 9508@opindex mregparm 9509@opindex mmemparm 9510Generate code that uses registers (stack) for passing arguments to functions. 9511By default, arguments are passed in registers where possible rather 9512than by pushing arguments on to the stack. 9513 9514@item -mparallel-insns 9515@itemx -mno-parallel-insns 9516@opindex mparallel-insns 9517@opindex mno-parallel-insns 9518Allow the generation of parallel instructions. This is enabled by 9519default with @option{-O2}. 9520 9521@item -mparallel-mpy 9522@itemx -mno-parallel-mpy 9523@opindex mparallel-mpy 9524@opindex mno-parallel-mpy 9525Allow the generation of MPY||ADD and MPY||SUB parallel instructions, 9526provided @option{-mparallel-insns} is also specified. These instructions have 9527tight register constraints which can pessimize the code generation 9528of large functions. 9529 9530@end table 9531 9532@node V850 Options 9533@subsection V850 Options 9534@cindex V850 Options 9535 9536These @samp{-m} options are defined for V850 implementations: 9537 9538@table @gcctabopt 9539@item -mlong-calls 9540@itemx -mno-long-calls 9541@opindex mlong-calls 9542@opindex mno-long-calls 9543Treat all calls as being far away (near). If calls are assumed to be 9544far away, the compiler will always load the functions address up into a 9545register, and call indirect through the pointer. 9546 9547@item -mno-ep 9548@itemx -mep 9549@opindex mno-ep 9550@opindex mep 9551Do not optimize (do optimize) basic blocks that use the same index 9552pointer 4 or more times to copy pointer into the @code{ep} register, and 9553use the shorter @code{sld} and @code{sst} instructions. The @option{-mep} 9554option is on by default if you optimize. 9555 9556@item -mno-prolog-function 9557@itemx -mprolog-function 9558@opindex mno-prolog-function 9559@opindex mprolog-function 9560Do not use (do use) external functions to save and restore registers 9561at the prologue and epilogue of a function. The external functions 9562are slower, but use less code space if more than one function saves 9563the same number of registers. The @option{-mprolog-function} option 9564is on by default if you optimize. 9565 9566@item -mspace 9567@opindex mspace 9568Try to make the code as small as possible. At present, this just turns 9569on the @option{-mep} and @option{-mprolog-function} options. 9570 9571@item -mtda=@var{n} 9572@opindex mtda 9573Put static or global variables whose size is @var{n} bytes or less into 9574the tiny data area that register @code{ep} points to. The tiny data 9575area can hold up to 256 bytes in total (128 bytes for byte references). 9576 9577@item -msda=@var{n} 9578@opindex msda 9579Put static or global variables whose size is @var{n} bytes or less into 9580the small data area that register @code{gp} points to. The small data 9581area can hold up to 64 kilobytes. 9582 9583@item -mzda=@var{n} 9584@opindex mzda 9585Put static or global variables whose size is @var{n} bytes or less into 9586the first 32 kilobytes of memory. 9587 9588@item -mv850 9589@opindex mv850 9590Specify that the target processor is the V850. 9591 9592@item -mbig-switch 9593@opindex mbig-switch 9594Generate code suitable for big switch tables. Use this option only if 9595the assembler/linker complain about out of range branches within a switch 9596table. 9597 9598@item -mapp-regs 9599@opindex mapp-regs 9600This option will cause r2 and r5 to be used in the code generated by 9601the compiler. This setting is the default. 9602 9603@item -mno-app-regs 9604@opindex mno-app-regs 9605This option will cause r2 and r5 to be treated as fixed registers. 9606 9607@item -mv850e1 9608@opindex mv850e1 9609Specify that the target processor is the V850E1. The preprocessor 9610constants @samp{__v850e1__} and @samp{__v850e__} will be defined if 9611this option is used. 9612 9613@item -mv850e 9614@opindex mv850e 9615Specify that the target processor is the V850E. The preprocessor 9616constant @samp{__v850e__} will be defined if this option is used. 9617 9618If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1} 9619are defined then a default target processor will be chosen and the 9620relevant @samp{__v850*__} preprocessor constant will be defined. 9621 9622The preprocessor constants @samp{__v850} and @samp{__v851__} are always 9623defined, regardless of which processor variant is the target. 9624 9625@item -mdisable-callt 9626@opindex mdisable-callt 9627This option will suppress generation of the CALLT instruction for the 9628v850e and v850e1 flavors of the v850 architecture. The default is 9629@option{-mno-disable-callt} which allows the CALLT instruction to be used. 9630 9631@end table 9632 9633@node ARC Options 9634@subsection ARC Options 9635@cindex ARC Options 9636 9637These options are defined for ARC implementations: 9638 9639@table @gcctabopt 9640@item -EL 9641@opindex EL 9642Compile code for little endian mode. This is the default. 9643 9644@item -EB 9645@opindex EB 9646Compile code for big endian mode. 9647 9648@item -mmangle-cpu 9649@opindex mmangle-cpu 9650Prepend the name of the cpu to all public symbol names. 9651In multiple-processor systems, there are many ARC variants with different 9652instruction and register set characteristics. This flag prevents code 9653compiled for one cpu to be linked with code compiled for another. 9654No facility exists for handling variants that are ``almost identical''. 9655This is an all or nothing option. 9656 9657@item -mcpu=@var{cpu} 9658@opindex mcpu 9659Compile code for ARC variant @var{cpu}. 9660Which variants are supported depend on the configuration. 9661All variants support @option{-mcpu=base}, this is the default. 9662 9663@item -mtext=@var{text-section} 9664@itemx -mdata=@var{data-section} 9665@itemx -mrodata=@var{readonly-data-section} 9666@opindex mtext 9667@opindex mdata 9668@opindex mrodata 9669Put functions, data, and readonly data in @var{text-section}, 9670@var{data-section}, and @var{readonly-data-section} respectively 9671by default. This can be overridden with the @code{section} attribute. 9672@xref{Variable Attributes}. 9673 9674@end table 9675 9676@node NS32K Options 9677@subsection NS32K Options 9678@cindex NS32K options 9679 9680These are the @samp{-m} options defined for the 32000 series. The default 9681values for these options depends on which style of 32000 was selected when 9682the compiler was configured; the defaults for the most common choices are 9683given below. 9684 9685@table @gcctabopt 9686@item -m32032 9687@itemx -m32032 9688@opindex m32032 9689@opindex m32032 9690Generate output for a 32032. This is the default 9691when the compiler is configured for 32032 and 32016 based systems. 9692 9693@item -m32332 9694@itemx -m32332 9695@opindex m32332 9696@opindex m32332 9697Generate output for a 32332. This is the default 9698when the compiler is configured for 32332-based systems. 9699 9700@item -m32532 9701@itemx -m32532 9702@opindex m32532 9703@opindex m32532 9704Generate output for a 32532. This is the default 9705when the compiler is configured for 32532-based systems. 9706 9707@item -m32081 9708@opindex m32081 9709Generate output containing 32081 instructions for floating point. 9710This is the default for all systems. 9711 9712@item -m32381 9713@opindex m32381 9714Generate output containing 32381 instructions for floating point. This 9715also implies @option{-m32081}. The 32381 is only compatible with the 32332 9716and 32532 cpus. This is the default for the pc532-netbsd configuration. 9717 9718@item -mmulti-add 9719@opindex mmulti-add 9720Try and generate multiply-add floating point instructions @code{polyF} 9721and @code{dotF}. This option is only available if the @option{-m32381} 9722option is in effect. Using these instructions requires changes to 9723register allocation which generally has a negative impact on 9724performance. This option should only be enabled when compiling code 9725particularly likely to make heavy use of multiply-add instructions. 9726 9727@item -mnomulti-add 9728@opindex mnomulti-add 9729Do not try and generate multiply-add floating point instructions 9730@code{polyF} and @code{dotF}. This is the default on all platforms. 9731 9732@item -msoft-float 9733@opindex msoft-float 9734Generate output containing library calls for floating point. 9735@strong{Warning:} the requisite libraries may not be available. 9736 9737@item -mieee-compare 9738@itemx -mno-ieee-compare 9739@opindex mieee-compare 9740@opindex mno-ieee-compare 9741Control whether or not the compiler uses IEEE floating point 9742comparisons. These handle correctly the case where the result of a 9743comparison is unordered. 9744@strong{Warning:} the requisite kernel support may not be available. 9745 9746@item -mnobitfield 9747@opindex mnobitfield 9748Do not use the bit-field instructions. On some machines it is faster to 9749use shifting and masking operations. This is the default for the pc532. 9750 9751@item -mbitfield 9752@opindex mbitfield 9753Do use the bit-field instructions. This is the default for all platforms 9754except the pc532. 9755 9756@item -mrtd 9757@opindex mrtd 9758Use a different function-calling convention, in which functions 9759that take a fixed number of arguments return pop their 9760arguments on return with the @code{ret} instruction. 9761 9762This calling convention is incompatible with the one normally 9763used on Unix, so you cannot use it if you need to call libraries 9764compiled with the Unix compiler. 9765 9766Also, you must provide function prototypes for all functions that 9767take variable numbers of arguments (including @code{printf}); 9768otherwise incorrect code will be generated for calls to those 9769functions. 9770 9771In addition, seriously incorrect code will result if you call a 9772function with too many arguments. (Normally, extra arguments are 9773harmlessly ignored.) 9774 9775This option takes its name from the 680x0 @code{rtd} instruction. 9776 9777 9778@item -mregparam 9779@opindex mregparam 9780Use a different function-calling convention where the first two arguments 9781are passed in registers. 9782 9783This calling convention is incompatible with the one normally 9784used on Unix, so you cannot use it if you need to call libraries 9785compiled with the Unix compiler. 9786 9787@item -mnoregparam 9788@opindex mnoregparam 9789Do not pass any arguments in registers. This is the default for all 9790targets. 9791 9792@item -msb 9793@opindex msb 9794It is OK to use the sb as an index register which is always loaded with 9795zero. This is the default for the pc532-netbsd target. 9796 9797@item -mnosb 9798@opindex mnosb 9799The sb register is not available for use or has not been initialized to 9800zero by the run time system. This is the default for all targets except 9801the pc532-netbsd. It is also implied whenever @option{-mhimem} or 9802@option{-fpic} is set. 9803 9804@item -mhimem 9805@opindex mhimem 9806Many ns32000 series addressing modes use displacements of up to 512MB@. 9807If an address is above 512MB then displacements from zero can not be used. 9808This option causes code to be generated which can be loaded above 512MB@. 9809This may be useful for operating systems or ROM code. 9810 9811@item -mnohimem 9812@opindex mnohimem 9813Assume code will be loaded in the first 512MB of virtual address space. 9814This is the default for all platforms. 9815 9816 9817@end table 9818 9819@node AVR Options 9820@subsection AVR Options 9821@cindex AVR Options 9822 9823These options are defined for AVR implementations: 9824 9825@table @gcctabopt 9826@item -mmcu=@var{mcu} 9827@opindex mmcu 9828Specify ATMEL AVR instruction set or MCU type. 9829 9830Instruction set avr1 is for the minimal AVR core, not supported by the C 9831compiler, only for assembler programs (MCU types: at90s1200, attiny10, 9832attiny11, attiny12, attiny15, attiny28). 9833 9834Instruction set avr2 (default) is for the classic AVR core with up to 98358K program memory space (MCU types: at90s2313, at90s2323, attiny22, 9836at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515, 9837at90c8534, at90s8535). 9838 9839Instruction set avr3 is for the classic AVR core with up to 128K program 9840memory space (MCU types: atmega103, atmega603, at43usb320, at76c711). 9841 9842Instruction set avr4 is for the enhanced AVR core with up to 8K program 9843memory space (MCU types: atmega8, atmega83, atmega85). 9844 9845Instruction set avr5 is for the enhanced AVR core with up to 128K program 9846memory space (MCU types: atmega16, atmega161, atmega163, atmega32, atmega323, 9847atmega64, atmega128, at43usb355, at94k). 9848 9849@item -msize 9850@opindex msize 9851Output instruction sizes to the asm file. 9852 9853@item -minit-stack=@var{N} 9854@opindex minit-stack 9855Specify the initial stack address, which may be a symbol or numeric value, 9856@samp{__stack} is the default. 9857 9858@item -mno-interrupts 9859@opindex mno-interrupts 9860Generated code is not compatible with hardware interrupts. 9861Code size will be smaller. 9862 9863@item -mcall-prologues 9864@opindex mcall-prologues 9865Functions prologues/epilogues expanded as call to appropriate 9866subroutines. Code size will be smaller. 9867 9868@item -mno-tablejump 9869@opindex mno-tablejump 9870Do not generate tablejump insns which sometimes increase code size. 9871 9872@item -mtiny-stack 9873@opindex mtiny-stack 9874Change only the low 8 bits of the stack pointer. 9875@end table 9876 9877@node MCore Options 9878@subsection MCore Options 9879@cindex MCore options 9880 9881These are the @samp{-m} options defined for the Motorola M*Core 9882processors. 9883 9884@table @gcctabopt 9885 9886@item -mhardlit 9887@itemx -mno-hardlit 9888@opindex mhardlit 9889@opindex mno-hardlit 9890Inline constants into the code stream if it can be done in two 9891instructions or less. 9892 9893@item -mdiv 9894@itemx -mno-div 9895@opindex mdiv 9896@opindex mno-div 9897Use the divide instruction. (Enabled by default). 9898 9899@item -mrelax-immediate 9900@itemx -mno-relax-immediate 9901@opindex mrelax-immediate 9902@opindex mno-relax-immediate 9903Allow arbitrary sized immediates in bit operations. 9904 9905@item -mwide-bitfields 9906@itemx -mno-wide-bitfields 9907@opindex mwide-bitfields 9908@opindex mno-wide-bitfields 9909Always treat bit-fields as int-sized. 9910 9911@item -m4byte-functions 9912@itemx -mno-4byte-functions 9913@opindex m4byte-functions 9914@opindex mno-4byte-functions 9915Force all functions to be aligned to a four byte boundary. 9916 9917@item -mcallgraph-data 9918@itemx -mno-callgraph-data 9919@opindex mcallgraph-data 9920@opindex mno-callgraph-data 9921Emit callgraph information. 9922 9923@item -mslow-bytes 9924@itemx -mno-slow-bytes 9925@opindex mslow-bytes 9926@opindex mno-slow-bytes 9927Prefer word access when reading byte quantities. 9928 9929@item -mlittle-endian 9930@itemx -mbig-endian 9931@opindex mlittle-endian 9932@opindex mbig-endian 9933Generate code for a little endian target. 9934 9935@item -m210 9936@itemx -m340 9937@opindex m210 9938@opindex m340 9939Generate code for the 210 processor. 9940@end table 9941 9942@node IA-64 Options 9943@subsection IA-64 Options 9944@cindex IA-64 Options 9945 9946These are the @samp{-m} options defined for the Intel IA-64 architecture. 9947 9948@table @gcctabopt 9949@item -mbig-endian 9950@opindex mbig-endian 9951Generate code for a big endian target. This is the default for HP-UX@. 9952 9953@item -mlittle-endian 9954@opindex mlittle-endian 9955Generate code for a little endian target. This is the default for AIX5 9956and GNU/Linux. 9957 9958@item -mgnu-as 9959@itemx -mno-gnu-as 9960@opindex mgnu-as 9961@opindex mno-gnu-as 9962Generate (or don't) code for the GNU assembler. This is the default. 9963@c Also, this is the default if the configure option @option{--with-gnu-as} 9964@c is used. 9965 9966@item -mgnu-ld 9967@itemx -mno-gnu-ld 9968@opindex mgnu-ld 9969@opindex mno-gnu-ld 9970Generate (or don't) code for the GNU linker. This is the default. 9971@c Also, this is the default if the configure option @option{--with-gnu-ld} 9972@c is used. 9973 9974@item -mno-pic 9975@opindex mno-pic 9976Generate code that does not use a global pointer register. The result 9977is not position independent code, and violates the IA-64 ABI@. 9978 9979@item -mvolatile-asm-stop 9980@itemx -mno-volatile-asm-stop 9981@opindex mvolatile-asm-stop 9982@opindex mno-volatile-asm-stop 9983Generate (or don't) a stop bit immediately before and after volatile asm 9984statements. 9985 9986@item -mb-step 9987@opindex mb-step 9988Generate code that works around Itanium B step errata. 9989 9990@item -mregister-names 9991@itemx -mno-register-names 9992@opindex mregister-names 9993@opindex mno-register-names 9994Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for 9995the stacked registers. This may make assembler output more readable. 9996 9997@item -mno-sdata 9998@itemx -msdata 9999@opindex mno-sdata 10000@opindex msdata 10001Disable (or enable) optimizations that use the small data section. This may 10002be useful for working around optimizer bugs. 10003 10004@item -mconstant-gp 10005@opindex mconstant-gp 10006Generate code that uses a single constant global pointer value. This is 10007useful when compiling kernel code. 10008 10009@item -mauto-pic 10010@opindex mauto-pic 10011Generate code that is self-relocatable. This implies @option{-mconstant-gp}. 10012This is useful when compiling firmware code. 10013 10014@item -minline-float-divide-min-latency 10015@opindex minline-float-divide-min-latency 10016Generate code for inline divides of floating point values 10017using the minimum latency algorithm. 10018 10019@item -minline-float-divide-max-throughput 10020@opindex minline-float-divide-max-throughput 10021Generate code for inline divides of floating point values 10022using the maximum throughput algorithm. 10023 10024@item -minline-int-divide-min-latency 10025@opindex minline-int-divide-min-latency 10026Generate code for inline divides of integer values 10027using the minimum latency algorithm. 10028 10029@item -minline-int-divide-max-throughput 10030@opindex minline-int-divide-max-throughput 10031Generate code for inline divides of integer values 10032using the maximum throughput algorithm. 10033 10034@item -mno-dwarf2-asm 10035@itemx -mdwarf2-asm 10036@opindex mno-dwarf2-asm 10037@opindex mdwarf2-asm 10038Don't (or do) generate assembler code for the DWARF2 line number debugging 10039info. This may be useful when not using the GNU assembler. 10040 10041@item -mfixed-range=@var{register-range} 10042@opindex mfixed-range 10043Generate code treating the given register range as fixed registers. 10044A fixed register is one that the register allocator can not use. This is 10045useful when compiling kernel code. A register range is specified as 10046two registers separated by a dash. Multiple register ranges can be 10047specified separated by a comma. 10048 10049@item -mearly-stop-bits 10050@itemx -mno-early-stop-bits 10051@opindex mearly-stop-bits 10052@opindex mno-early-stop-bits 10053Allow stop bits to be placed earlier than immediately preceding the 10054instruction that triggered the stop bit. This can improve instruction 10055scheduling, but does not always do so. 10056@end table 10057 10058@node D30V Options 10059@subsection D30V Options 10060@cindex D30V Options 10061 10062These @samp{-m} options are defined for D30V implementations: 10063 10064@table @gcctabopt 10065@item -mextmem 10066@opindex mextmem 10067Link the @samp{.text}, @samp{.data}, @samp{.bss}, @samp{.strings}, 10068@samp{.rodata}, @samp{.rodata1}, @samp{.data1} sections into external 10069memory, which starts at location @code{0x80000000}. 10070 10071@item -mextmemory 10072@opindex mextmemory 10073Same as the @option{-mextmem} switch. 10074 10075@item -monchip 10076@opindex monchip 10077Link the @samp{.text} section into onchip text memory, which starts at 10078location @code{0x0}. Also link @samp{.data}, @samp{.bss}, 10079@samp{.strings}, @samp{.rodata}, @samp{.rodata1}, @samp{.data1} sections 10080into onchip data memory, which starts at location @code{0x20000000}. 10081 10082@item -mno-asm-optimize 10083@itemx -masm-optimize 10084@opindex mno-asm-optimize 10085@opindex masm-optimize 10086Disable (enable) passing @option{-O} to the assembler when optimizing. 10087The assembler uses the @option{-O} option to automatically parallelize 10088adjacent short instructions where possible. 10089 10090@item -mbranch-cost=@var{n} 10091@opindex mbranch-cost 10092Increase the internal costs of branches to @var{n}. Higher costs means 10093that the compiler will issue more instructions to avoid doing a branch. 10094The default is 2. 10095 10096@item -mcond-exec=@var{n} 10097@opindex mcond-exec 10098Specify the maximum number of conditionally executed instructions that 10099replace a branch. The default is 4. 10100@end table 10101 10102@node S/390 and zSeries Options 10103@subsection S/390 and zSeries Options 10104@cindex S/390 and zSeries Options 10105 10106These are the @samp{-m} options defined for the S/390 and zSeries architecture. 10107 10108@table @gcctabopt 10109@item -mhard-float 10110@itemx -msoft-float 10111@opindex mhard-float 10112@opindex msoft-float 10113Use (do not use) the hardware floating-point instructions and registers 10114for floating-point operations. When @option{-msoft-float} is specified, 10115functions in @file{libgcc.a} will be used to perform floating-point 10116operations. When @option{-mhard-float} is specified, the compiler 10117generates IEEE floating-point instructions. This is the default. 10118 10119@item -mbackchain 10120@itemx -mno-backchain 10121@opindex mbackchain 10122@opindex mno-backchain 10123Generate (or do not generate) code which maintains an explicit 10124backchain within the stack frame that points to the caller's frame. 10125This may be needed to allow debugging using tools that do not understand 10126DWARF-2 call frame information. The default is not to generate the 10127backchain. 10128 10129@item -msmall-exec 10130@itemx -mno-small-exec 10131@opindex msmall-exec 10132@opindex mno-small-exec 10133Generate (or do not generate) code using the @code{bras} instruction 10134to do subroutine calls. 10135This only works reliably if the total executable size does not 10136exceed 64k. The default is to use the @code{basr} instruction instead, 10137which does not have this limitation. 10138 10139@item -m64 10140@itemx -m31 10141@opindex m64 10142@opindex m31 10143When @option{-m31} is specified, generate code compliant to the 10144GNU/Linux for S/390 ABI@. When @option{-m64} is specified, generate 10145code compliant to the GNU/Linux for zSeries ABI@. This allows GCC in 10146particular to generate 64-bit instructions. For the @samp{s390} 10147targets, the default is @option{-m31}, while the @samp{s390x} 10148targets default to @option{-m64}. 10149 10150@item -mzarch 10151@itemx -mesa 10152@opindex mzarch 10153@opindex mesa 10154When @option{-mzarch} is specified, generate code using the 10155instructions available on z/Architecture. 10156When @option{-mesa} is specified, generate code using the 10157instructions available on ESA/390. Note that @option{-mesa} is 10158not possible with @option{-m64}. 10159When generating code compliant to the GNU/Linux for S/390 ABI, 10160the default is @option{-mesa}. When generating code compliant 10161to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}. 10162 10163@item -mmvcle 10164@itemx -mno-mvcle 10165@opindex mmvcle 10166@opindex mno-mvcle 10167Generate (or do not generate) code using the @code{mvcle} instruction 10168to perform block moves. When @option{-mno-mvcle} is specified, 10169use a @code{mvc} loop instead. This is the default. 10170 10171@item -mdebug 10172@itemx -mno-debug 10173@opindex mdebug 10174@opindex mno-debug 10175Print (or do not print) additional debug information when compiling. 10176The default is to not print debug information. 10177 10178@item -march=@var{cpu-type} 10179@opindex march 10180Generate code that will run on @var{cpu-type}, which is the name of a system 10181representing a certain processor type. Possible values for 10182@var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, and @samp{z990}. 10183When generating code using the instructions available on z/Architecture, 10184the default is @option{-march=z900}. Otherwise, the default is 10185@option{-march=g5}. 10186 10187@item -mtune=@var{cpu-type} 10188@opindex mtune 10189Tune to @var{cpu-type} everything applicable about the generated code, 10190except for the ABI and the set of available instructions. 10191The list of @var{cpu-type} values is the same as for @option{-march}. 10192The default is the value used for @option{-march}. 10193 10194@item -mfused-madd 10195@itemx -mno-fused-madd 10196@opindex mfused-madd 10197@opindex mno-fused-madd 10198Generate code that uses (does not use) the floating point multiply and 10199accumulate instructions. These instructions are generated by default if 10200hardware floating point is used. 10201@end table 10202 10203@node CRIS Options 10204@subsection CRIS Options 10205@cindex CRIS Options 10206 10207These options are defined specifically for the CRIS ports. 10208 10209@table @gcctabopt 10210@item -march=@var{architecture-type} 10211@itemx -mcpu=@var{architecture-type} 10212@opindex march 10213@opindex mcpu 10214Generate code for the specified architecture. The choices for 10215@var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for 10216respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX. 10217Default is @samp{v0} except for cris-axis-linux-gnu, where the default is 10218@samp{v10}. 10219 10220@item -mtune=@var{architecture-type} 10221@opindex mtune 10222Tune to @var{architecture-type} everything applicable about the generated 10223code, except for the ABI and the set of available instructions. The 10224choices for @var{architecture-type} are the same as for 10225@option{-march=@var{architecture-type}}. 10226 10227@item -mmax-stack-frame=@var{n} 10228@opindex mmax-stack-frame 10229Warn when the stack frame of a function exceeds @var{n} bytes. 10230 10231@item -melinux-stacksize=@var{n} 10232@opindex melinux-stacksize 10233Only available with the @samp{cris-axis-aout} target. Arranges for 10234indications in the program to the kernel loader that the stack of the 10235program should be set to @var{n} bytes. 10236 10237@item -metrax4 10238@itemx -metrax100 10239@opindex metrax4 10240@opindex metrax100 10241The options @option{-metrax4} and @option{-metrax100} are synonyms for 10242@option{-march=v3} and @option{-march=v8} respectively. 10243 10244@item -mmul-bug-workaround 10245@itemx -mno-mul-bug-workaround 10246@opindex mmul-bug-workaround 10247@opindex mno-mul-bug-workaround 10248Work around a bug in the @code{muls} and @code{mulu} instructions for CPU 10249models where it applies. This option is active by default. 10250 10251@item -mpdebug 10252@opindex mpdebug 10253Enable CRIS-specific verbose debug-related information in the assembly 10254code. This option also has the effect to turn off the @samp{#NO_APP} 10255formatted-code indicator to the assembler at the beginning of the 10256assembly file. 10257 10258@item -mcc-init 10259@opindex mcc-init 10260Do not use condition-code results from previous instruction; always emit 10261compare and test instructions before use of condition codes. 10262 10263@item -mno-side-effects 10264@opindex mno-side-effects 10265Do not emit instructions with side-effects in addressing modes other than 10266post-increment. 10267 10268@item -mstack-align 10269@itemx -mno-stack-align 10270@itemx -mdata-align 10271@itemx -mno-data-align 10272@itemx -mconst-align 10273@itemx -mno-const-align 10274@opindex mstack-align 10275@opindex mno-stack-align 10276@opindex mdata-align 10277@opindex mno-data-align 10278@opindex mconst-align 10279@opindex mno-const-align 10280These options (no-options) arranges (eliminate arrangements) for the 10281stack-frame, individual data and constants to be aligned for the maximum 10282single data access size for the chosen CPU model. The default is to 10283arrange for 32-bit alignment. ABI details such as structure layout are 10284not affected by these options. 10285 10286@item -m32-bit 10287@itemx -m16-bit 10288@itemx -m8-bit 10289@opindex m32-bit 10290@opindex m16-bit 10291@opindex m8-bit 10292Similar to the stack- data- and const-align options above, these options 10293arrange for stack-frame, writable data and constants to all be 32-bit, 1029416-bit or 8-bit aligned. The default is 32-bit alignment. 10295 10296@item -mno-prologue-epilogue 10297@itemx -mprologue-epilogue 10298@opindex mno-prologue-epilogue 10299@opindex mprologue-epilogue 10300With @option{-mno-prologue-epilogue}, the normal function prologue and 10301epilogue that sets up the stack-frame are omitted and no return 10302instructions or return sequences are generated in the code. Use this 10303option only together with visual inspection of the compiled code: no 10304warnings or errors are generated when call-saved registers must be saved, 10305or storage for local variable needs to be allocated. 10306 10307@item -mno-gotplt 10308@itemx -mgotplt 10309@opindex mno-gotplt 10310@opindex mgotplt 10311With @option{-fpic} and @option{-fPIC}, don't generate (do generate) 10312instruction sequences that load addresses for functions from the PLT part 10313of the GOT rather than (traditional on other architectures) calls to the 10314PLT. The default is @option{-mgotplt}. 10315 10316@item -maout 10317@opindex maout 10318Legacy no-op option only recognized with the cris-axis-aout target. 10319 10320@item -melf 10321@opindex melf 10322Legacy no-op option only recognized with the cris-axis-elf and 10323cris-axis-linux-gnu targets. 10324 10325@item -melinux 10326@opindex melinux 10327Only recognized with the cris-axis-aout target, where it selects a 10328GNU/linux-like multilib, include files and instruction set for 10329@option{-march=v8}. 10330 10331@item -mlinux 10332@opindex mlinux 10333Legacy no-op option only recognized with the cris-axis-linux-gnu target. 10334 10335@item -sim 10336@opindex sim 10337This option, recognized for the cris-axis-aout and cris-axis-elf arranges 10338to link with input-output functions from a simulator library. Code, 10339initialized data and zero-initialized data are allocated consecutively. 10340 10341@item -sim2 10342@opindex sim2 10343Like @option{-sim}, but pass linker options to locate initialized data at 103440x40000000 and zero-initialized data at 0x80000000. 10345@end table 10346 10347@node MMIX Options 10348@subsection MMIX Options 10349@cindex MMIX Options 10350 10351These options are defined for the MMIX: 10352 10353@table @gcctabopt 10354@item -mlibfuncs 10355@itemx -mno-libfuncs 10356@opindex mlibfuncs 10357@opindex mno-libfuncs 10358Specify that intrinsic library functions are being compiled, passing all 10359values in registers, no matter the size. 10360 10361@item -mepsilon 10362@itemx -mno-epsilon 10363@opindex mepsilon 10364@opindex mno-epsilon 10365Generate floating-point comparison instructions that compare with respect 10366to the @code{rE} epsilon register. 10367 10368@item -mabi=mmixware 10369@itemx -mabi=gnu 10370@opindex mabi-mmixware 10371@opindex mabi=gnu 10372Generate code that passes function parameters and return values that (in 10373the called function) are seen as registers @code{$0} and up, as opposed to 10374the GNU ABI which uses global registers @code{$231} and up. 10375 10376@item -mzero-extend 10377@itemx -mno-zero-extend 10378@opindex mzero-extend 10379@opindex mno-zero-extend 10380When reading data from memory in sizes shorter than 64 bits, use (do not 10381use) zero-extending load instructions by default, rather than 10382sign-extending ones. 10383 10384@item -mknuthdiv 10385@itemx -mno-knuthdiv 10386@opindex mknuthdiv 10387@opindex mno-knuthdiv 10388Make the result of a division yielding a remainder have the same sign as 10389the divisor. With the default, @option{-mno-knuthdiv}, the sign of the 10390remainder follows the sign of the dividend. Both methods are 10391arithmetically valid, the latter being almost exclusively used. 10392 10393@item -mtoplevel-symbols 10394@itemx -mno-toplevel-symbols 10395@opindex mtoplevel-symbols 10396@opindex mno-toplevel-symbols 10397Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly 10398code can be used with the @code{PREFIX} assembly directive. 10399 10400@item -melf 10401@opindex melf 10402Generate an executable in the ELF format, rather than the default 10403@samp{mmo} format used by the @command{mmix} simulator. 10404 10405@item -mbranch-predict 10406@itemx -mno-branch-predict 10407@opindex mbranch-predict 10408@opindex mno-branch-predict 10409Use (do not use) the probable-branch instructions, when static branch 10410prediction indicates a probable branch. 10411 10412@item -mbase-addresses 10413@itemx -mno-base-addresses 10414@opindex mbase-addresses 10415@opindex mno-base-addresses 10416Generate (do not generate) code that uses @emph{base addresses}. Using a 10417base address automatically generates a request (handled by the assembler 10418and the linker) for a constant to be set up in a global register. The 10419register is used for one or more base address requests within the range 0 10420to 255 from the value held in the register. The generally leads to short 10421and fast code, but the number of different data items that can be 10422addressed is limited. This means that a program that uses lots of static 10423data may require @option{-mno-base-addresses}. 10424 10425@item -msingle-exit 10426@itemx -mno-single-exit 10427@opindex msingle-exit 10428@opindex mno-single-exit 10429Force (do not force) generated code to have a single exit point in each 10430function. 10431@end table 10432 10433@node PDP-11 Options 10434@subsection PDP-11 Options 10435@cindex PDP-11 Options 10436 10437These options are defined for the PDP-11: 10438 10439@table @gcctabopt 10440@item -mfpu 10441@opindex mfpu 10442Use hardware FPP floating point. This is the default. (FIS floating 10443point on the PDP-11/40 is not supported.) 10444 10445@item -msoft-float 10446@opindex msoft-float 10447Do not use hardware floating point. 10448 10449@item -mac0 10450@opindex mac0 10451Return floating-point results in ac0 (fr0 in Unix assembler syntax). 10452 10453@item -mno-ac0 10454@opindex mno-ac0 10455Return floating-point results in memory. This is the default. 10456 10457@item -m40 10458@opindex m40 10459Generate code for a PDP-11/40. 10460 10461@item -m45 10462@opindex m45 10463Generate code for a PDP-11/45. This is the default. 10464 10465@item -m10 10466@opindex m10 10467Generate code for a PDP-11/10. 10468 10469@item -mbcopy-builtin 10470@opindex bcopy-builtin 10471Use inline @code{movstrhi} patterns for copying memory. This is the 10472default. 10473 10474@item -mbcopy 10475@opindex mbcopy 10476Do not use inline @code{movstrhi} patterns for copying memory. 10477 10478@item -mint16 10479@itemx -mno-int32 10480@opindex mint16 10481@opindex mno-int32 10482Use 16-bit @code{int}. This is the default. 10483 10484@item -mint32 10485@itemx -mno-int16 10486@opindex mint32 10487@opindex mno-int16 10488Use 32-bit @code{int}. 10489 10490@item -mfloat64 10491@itemx -mno-float32 10492@opindex mfloat64 10493@opindex mno-float32 10494Use 64-bit @code{float}. This is the default. 10495 10496@item -mfloat32 10497@itemx -mno-float64 10498@opindex mfloat32 10499@opindex mno-float64 10500Use 32-bit @code{float}. 10501 10502@item -mabshi 10503@opindex mabshi 10504Use @code{abshi2} pattern. This is the default. 10505 10506@item -mno-abshi 10507@opindex mno-abshi 10508Do not use @code{abshi2} pattern. 10509 10510@item -mbranch-expensive 10511@opindex mbranch-expensive 10512Pretend that branches are expensive. This is for experimenting with 10513code generation only. 10514 10515@item -mbranch-cheap 10516@opindex mbranch-cheap 10517Do not pretend that branches are expensive. This is the default. 10518 10519@item -msplit 10520@opindex msplit 10521Generate code for a system with split I&D. 10522 10523@item -mno-split 10524@opindex mno-split 10525Generate code for a system without split I&D. This is the default. 10526 10527@item -munix-asm 10528@opindex munix-asm 10529Use Unix assembler syntax. This is the default when configured for 10530@samp{pdp11-*-bsd}. 10531 10532@item -mdec-asm 10533@opindex mdec-asm 10534Use DEC assembler syntax. This is the default when configured for any 10535PDP-11 target other than @samp{pdp11-*-bsd}. 10536@end table 10537 10538@node Xstormy16 Options 10539@subsection Xstormy16 Options 10540@cindex Xstormy16 Options 10541 10542These options are defined for Xstormy16: 10543 10544@table @gcctabopt 10545@item -msim 10546@opindex msim 10547Choose startup files and linker script suitable for the simulator. 10548@end table 10549 10550@node FRV Options 10551@subsection FRV Options 10552@cindex FRV Options 10553 10554@table @gcctabopt 10555@item -mgpr-32 10556@opindex mgpr-32 10557 10558Only use the first 32 general purpose registers. 10559 10560@item -mgpr-64 10561@opindex mgpr-64 10562 10563Use all 64 general purpose registers. 10564 10565@item -mfpr-32 10566@opindex mfpr-32 10567 10568Use only the first 32 floating point registers. 10569 10570@item -mfpr-64 10571@opindex mfpr-64 10572 10573Use all 64 floating point registers 10574 10575@item -mhard-float 10576@opindex mhard-float 10577 10578Use hardware instructions for floating point operations. 10579 10580@item -msoft-float 10581@opindex msoft-float 10582 10583Use library routines for floating point operations. 10584 10585@item -malloc-cc 10586@opindex malloc-cc 10587 10588Dynamically allocate condition code registers. 10589 10590@item -mfixed-cc 10591@opindex mfixed-cc 10592 10593Do not try to dynamically allocate condition code registers, only 10594use @code{icc0} and @code{fcc0}. 10595 10596@item -mdword 10597@opindex mdword 10598 10599Change ABI to use double word insns. 10600 10601@item -mno-dword 10602@opindex mno-dword 10603 10604Do not use double word instructions. 10605 10606@item -mdouble 10607@opindex mdouble 10608 10609Use floating point double instructions. 10610 10611@item -mno-double 10612@opindex mno-double 10613 10614Do not use floating point double instructions. 10615 10616@item -mmedia 10617@opindex mmedia 10618 10619Use media instructions. 10620 10621@item -mno-media 10622@opindex mno-media 10623 10624Do not use media instructions. 10625 10626@item -mmuladd 10627@opindex mmuladd 10628 10629Use multiply and add/subtract instructions. 10630 10631@item -mno-muladd 10632@opindex mno-muladd 10633 10634Do not use multiply and add/subtract instructions. 10635 10636@item -mlibrary-pic 10637@opindex mlibrary-pic 10638 10639Enable PIC support for building libraries 10640 10641@item -macc-4 10642@opindex macc-4 10643 10644Use only the first four media accumulator registers. 10645 10646@item -macc-8 10647@opindex macc-8 10648 10649Use all eight media accumulator registers. 10650 10651@item -mpack 10652@opindex mpack 10653 10654Pack VLIW instructions. 10655 10656@item -mno-pack 10657@opindex mno-pack 10658 10659Do not pack VLIW instructions. 10660 10661@item -mno-eflags 10662@opindex mno-eflags 10663 10664Do not mark ABI switches in e_flags. 10665 10666@item -mcond-move 10667@opindex mcond-move 10668 10669Enable the use of conditional-move instructions (default). 10670 10671This switch is mainly for debugging the compiler and will likely be removed 10672in a future version. 10673 10674@item -mno-cond-move 10675@opindex mno-cond-move 10676 10677Disable the use of conditional-move instructions. 10678 10679This switch is mainly for debugging the compiler and will likely be removed 10680in a future version. 10681 10682@item -mscc 10683@opindex mscc 10684 10685Enable the use of conditional set instructions (default). 10686 10687This switch is mainly for debugging the compiler and will likely be removed 10688in a future version. 10689 10690@item -mno-scc 10691@opindex mno-scc 10692 10693Disable the use of conditional set instructions. 10694 10695This switch is mainly for debugging the compiler and will likely be removed 10696in a future version. 10697 10698@item -mcond-exec 10699@opindex mcond-exec 10700 10701Enable the use of conditional execution (default). 10702 10703This switch is mainly for debugging the compiler and will likely be removed 10704in a future version. 10705 10706@item -mno-cond-exec 10707@opindex mno-cond-exec 10708 10709Disable the use of conditional execution. 10710 10711This switch is mainly for debugging the compiler and will likely be removed 10712in a future version. 10713 10714@item -mvliw-branch 10715@opindex mvliw-branch 10716 10717Run a pass to pack branches into VLIW instructions (default). 10718 10719This switch is mainly for debugging the compiler and will likely be removed 10720in a future version. 10721 10722@item -mno-vliw-branch 10723@opindex mno-vliw-branch 10724 10725Do not run a pass to pack branches into VLIW instructions. 10726 10727This switch is mainly for debugging the compiler and will likely be removed 10728in a future version. 10729 10730@item -mmulti-cond-exec 10731@opindex mmulti-cond-exec 10732 10733Enable optimization of @code{&&} and @code{||} in conditional execution 10734(default). 10735 10736This switch is mainly for debugging the compiler and will likely be removed 10737in a future version. 10738 10739@item -mno-multi-cond-exec 10740@opindex mno-multi-cond-exec 10741 10742Disable optimization of @code{&&} and @code{||} in conditional execution. 10743 10744This switch is mainly for debugging the compiler and will likely be removed 10745in a future version. 10746 10747@item -mnested-cond-exec 10748@opindex mnested-cond-exec 10749 10750Enable nested conditional execution optimizations (default). 10751 10752This switch is mainly for debugging the compiler and will likely be removed 10753in a future version. 10754 10755@item -mno-nested-cond-exec 10756@opindex mno-nested-cond-exec 10757 10758Disable nested conditional execution optimizations. 10759 10760This switch is mainly for debugging the compiler and will likely be removed 10761in a future version. 10762 10763@item -mtomcat-stats 10764@opindex mtomcat-stats 10765 10766Cause gas to print out tomcat statistics. 10767 10768@item -mcpu=@var{cpu} 10769@opindex mcpu 10770 10771Select the processor type for which to generate code. Possible values are 10772@samp{simple}, @samp{tomcat}, @samp{fr500}, @samp{fr400}, @samp{fr300}, 10773@samp{frv}. 10774 10775@end table 10776 10777@node Xtensa Options 10778@subsection Xtensa Options 10779@cindex Xtensa Options 10780 10781These options are supported for Xtensa targets: 10782 10783@table @gcctabopt 10784@item -mconst16 10785@itemx -mno-const16 10786@opindex mconst16 10787@opindex mno-const16 10788Enable or disable use of @code{CONST16} instructions for loading 10789constant values. The @code{CONST16} instruction is currently not a 10790standard option from Tensilica. When enabled, @code{CONST16} 10791instructions are always used in place of the standard @code{L32R} 10792instructions. The use of @code{CONST16} is enabled by default only if 10793the @code{L32R} instruction is not available. 10794 10795@item -mfused-madd 10796@itemx -mno-fused-madd 10797@opindex mfused-madd 10798@opindex mno-fused-madd 10799Enable or disable use of fused multiply/add and multiply/subtract 10800instructions in the floating-point option. This has no effect if the 10801floating-point option is not also enabled. Disabling fused multiply/add 10802and multiply/subtract instructions forces the compiler to use separate 10803instructions for the multiply and add/subtract operations. This may be 10804desirable in some cases where strict IEEE 754-compliant results are 10805required: the fused multiply add/subtract instructions do not round the 10806intermediate result, thereby producing results with @emph{more} bits of 10807precision than specified by the IEEE standard. Disabling fused multiply 10808add/subtract instructions also ensures that the program output is not 10809sensitive to the compiler's ability to combine multiply and add/subtract 10810operations. 10811 10812@item -mtext-section-literals 10813@itemx -mno-text-section-literals 10814@opindex mtext-section-literals 10815@opindex mno-text-section-literals 10816Control the treatment of literal pools. The default is 10817@option{-mno-text-section-literals}, which places literals in a separate 10818section in the output file. This allows the literal pool to be placed 10819in a data RAM/ROM, and it also allows the linker to combine literal 10820pools from separate object files to remove redundant literals and 10821improve code size. With @option{-mtext-section-literals}, the literals 10822are interspersed in the text section in order to keep them as close as 10823possible to their references. This may be necessary for large assembly 10824files. 10825 10826@item -mtarget-align 10827@itemx -mno-target-align 10828@opindex mtarget-align 10829@opindex mno-target-align 10830When this option is enabled, GCC instructs the assembler to 10831automatically align instructions to reduce branch penalties at the 10832expense of some code density. The assembler attempts to widen density 10833instructions to align branch targets and the instructions following call 10834instructions. If there are not enough preceding safe density 10835instructions to align a target, no widening will be performed. The 10836default is @option{-mtarget-align}. These options do not affect the 10837treatment of auto-aligned instructions like @code{LOOP}, which the 10838assembler will always align, either by widening density instructions or 10839by inserting no-op instructions. 10840 10841@item -mlongcalls 10842@itemx -mno-longcalls 10843@opindex mlongcalls 10844@opindex mno-longcalls 10845When this option is enabled, GCC instructs the assembler to translate 10846direct calls to indirect calls unless it can determine that the target 10847of a direct call is in the range allowed by the call instruction. This 10848translation typically occurs for calls to functions in other source 10849files. Specifically, the assembler translates a direct @code{CALL} 10850instruction into an @code{L32R} followed by a @code{CALLX} instruction. 10851The default is @option{-mno-longcalls}. This option should be used in 10852programs where the call target can potentially be out of range. This 10853option is implemented in the assembler, not the compiler, so the 10854assembly code generated by GCC will still show direct call 10855instructions---look at the disassembled object code to see the actual 10856instructions. Note that the assembler will use an indirect call for 10857every cross-file call, not just those that really will be out of range. 10858@end table 10859 10860@node Code Gen Options 10861@section Options for Code Generation Conventions 10862@cindex code generation conventions 10863@cindex options, code generation 10864@cindex run-time options 10865 10866These machine-independent options control the interface conventions 10867used in code generation. 10868 10869Most of them have both positive and negative forms; the negative form 10870of @option{-ffoo} would be @option{-fno-foo}. In the table below, only 10871one of the forms is listed---the one which is not the default. You 10872can figure out the other form by either removing @samp{no-} or adding 10873it. 10874 10875@table @gcctabopt 10876@item -fbounds-check 10877@opindex fbounds-check 10878For front-ends that support it, generate additional code to check that 10879indices used to access arrays are within the declared range. This is 10880currently only supported by the Java and Fortran 77 front-ends, where 10881this option defaults to true and false respectively. 10882 10883@item -ftrapv 10884@opindex ftrapv 10885This option generates traps for signed overflow on addition, subtraction, 10886multiplication operations. 10887 10888@item -fwrapv 10889@opindex fwrapv 10890This option instructs the compiler to assume that signed arithmetic 10891overflow of addition, subtraction and multiplication wraps around 10892using twos-complement representation. This flag enables some optimizations 10893and disables other. This option is enabled by default for the Java 10894front-end, as required by the Java language specification. 10895 10896@item -fexceptions 10897@opindex fexceptions 10898Enable exception handling. Generates extra code needed to propagate 10899exceptions. For some targets, this implies GCC will generate frame 10900unwind information for all functions, which can produce significant data 10901size overhead, although it does not affect execution. If you do not 10902specify this option, GCC will enable it by default for languages like 10903C++ which normally require exception handling, and disable it for 10904languages like C that do not normally require it. However, you may need 10905to enable this option when compiling C code that needs to interoperate 10906properly with exception handlers written in C++. You may also wish to 10907disable this option if you are compiling older C++ programs that don't 10908use exception handling. 10909 10910@item -fnon-call-exceptions 10911@opindex fnon-call-exceptions 10912Generate code that allows trapping instructions to throw exceptions. 10913Note that this requires platform-specific runtime support that does 10914not exist everywhere. Moreover, it only allows @emph{trapping} 10915instructions to throw exceptions, i.e.@: memory references or floating 10916point instructions. It does not allow exceptions to be thrown from 10917arbitrary signal handlers such as @code{SIGALRM}. 10918 10919@item -funwind-tables 10920@opindex funwind-tables 10921Similar to @option{-fexceptions}, except that it will just generate any needed 10922static data, but will not affect the generated code in any other way. 10923You will normally not enable this option; instead, a language processor 10924that needs this handling would enable it on your behalf. 10925 10926@item -fasynchronous-unwind-tables 10927@opindex funwind-tables 10928Generate unwind table in dwarf2 format, if supported by target machine. The 10929table is exact at each instruction boundary, so it can be used for stack 10930unwinding from asynchronous events (such as debugger or garbage collector). 10931 10932@item -fpcc-struct-return 10933@opindex fpcc-struct-return 10934Return ``short'' @code{struct} and @code{union} values in memory like 10935longer ones, rather than in registers. This convention is less 10936efficient, but it has the advantage of allowing intercallability between 10937GCC-compiled files and files compiled with other compilers, particularly 10938the Portable C Compiler (pcc). 10939 10940The precise convention for returning structures in memory depends 10941on the target configuration macros. 10942 10943Short structures and unions are those whose size and alignment match 10944that of some integer type. 10945 10946@strong{Warning:} code compiled with the @option{-fpcc-struct-return} 10947switch is not binary compatible with code compiled with the 10948@option{-freg-struct-return} switch. 10949Use it to conform to a non-default application binary interface. 10950 10951@item -freg-struct-return 10952@opindex freg-struct-return 10953Return @code{struct} and @code{union} values in registers when possible. 10954This is more efficient for small structures than 10955@option{-fpcc-struct-return}. 10956 10957If you specify neither @option{-fpcc-struct-return} nor 10958@option{-freg-struct-return}, GCC defaults to whichever convention is 10959standard for the target. If there is no standard convention, GCC 10960defaults to @option{-fpcc-struct-return}, except on targets where GCC is 10961the principal compiler. In those cases, we can choose the standard, and 10962we chose the more efficient register return alternative. 10963 10964@strong{Warning:} code compiled with the @option{-freg-struct-return} 10965switch is not binary compatible with code compiled with the 10966@option{-fpcc-struct-return} switch. 10967Use it to conform to a non-default application binary interface. 10968 10969@item -fshort-enums 10970@opindex fshort-enums 10971Allocate to an @code{enum} type only as many bytes as it needs for the 10972declared range of possible values. Specifically, the @code{enum} type 10973will be equivalent to the smallest integer type which has enough room. 10974 10975@strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate 10976code that is not binary compatible with code generated without that switch. 10977Use it to conform to a non-default application binary interface. 10978 10979@item -fshort-double 10980@opindex fshort-double 10981Use the same size for @code{double} as for @code{float}. 10982 10983@strong{Warning:} the @option{-fshort-double} switch causes GCC to generate 10984code that is not binary compatible with code generated without that switch. 10985Use it to conform to a non-default application binary interface. 10986 10987@item -fshort-wchar 10988@opindex fshort-wchar 10989Override the underlying type for @samp{wchar_t} to be @samp{short 10990unsigned int} instead of the default for the target. This option is 10991useful for building programs to run under WINE@. 10992 10993@strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate 10994code that is not binary compatible with code generated without that switch. 10995Use it to conform to a non-default application binary interface. 10996 10997@item -fshared-data 10998@opindex fshared-data 10999Requests that the data and non-@code{const} variables of this 11000compilation be shared data rather than private data. The distinction 11001makes sense only on certain operating systems, where shared data is 11002shared between processes running the same program, while private data 11003exists in one copy per process. 11004 11005@item -fno-common 11006@opindex fno-common 11007In C, allocate even uninitialized global variables in the data section of the 11008object file, rather than generating them as common blocks. This has the 11009effect that if the same variable is declared (without @code{extern}) in 11010two different compilations, you will get an error when you link them. 11011The only reason this might be useful is if you wish to verify that the 11012program will work on other systems which always work this way. 11013 11014@item -fno-ident 11015@opindex fno-ident 11016Ignore the @samp{#ident} directive. 11017 11018@item -finhibit-size-directive 11019@opindex finhibit-size-directive 11020Don't output a @code{.size} assembler directive, or anything else that 11021would cause trouble if the function is split in the middle, and the 11022two halves are placed at locations far apart in memory. This option is 11023used when compiling @file{crtstuff.c}; you should not need to use it 11024for anything else. 11025 11026@item -fverbose-asm 11027@opindex fverbose-asm 11028Put extra commentary information in the generated assembly code to 11029make it more readable. This option is generally only of use to those 11030who actually need to read the generated assembly code (perhaps while 11031debugging the compiler itself). 11032 11033@option{-fno-verbose-asm}, the default, causes the 11034extra information to be omitted and is useful when comparing two assembler 11035files. 11036 11037@item -fpic 11038@opindex fpic 11039@cindex global offset table 11040@cindex PIC 11041Generate position-independent code (PIC) suitable for use in a shared 11042library, if supported for the target machine. Such code accesses all 11043constant addresses through a global offset table (GOT)@. The dynamic 11044loader resolves the GOT entries when the program starts (the dynamic 11045loader is not part of GCC; it is part of the operating system). If 11046the GOT size for the linked executable exceeds a machine-specific 11047maximum size, you get an error message from the linker indicating that 11048@option{-fpic} does not work; in that case, recompile with @option{-fPIC} 11049instead. (These maximums are 8k on the SPARC and 32k 11050on the m68k and RS/6000. The 386 has no such limit.) 11051 11052Position-independent code requires special support, and therefore works 11053only on certain machines. For the 386, GCC supports PIC for System V 11054but not for the Sun 386i. Code generated for the IBM RS/6000 is always 11055position-independent. 11056 11057@item -fPIC 11058@opindex fPIC 11059If supported for the target machine, emit position-independent code, 11060suitable for dynamic linking and avoiding any limit on the size of the 11061global offset table. This option makes a difference on the m68k 11062and the SPARC. 11063 11064Position-independent code requires special support, and therefore works 11065only on certain machines. 11066 11067@item -fpie 11068@itemx -fPIE 11069@opindex fpie 11070@opindex fPIE 11071These options are similar to @option{-fpic} and @option{-fPIC}, but 11072generated position independent code can be only linked into executables. 11073Usually these options are used when @option{-pie} GCC option will be 11074used during linking. 11075 11076@item -ffixed-@var{reg} 11077@opindex ffixed 11078Treat the register named @var{reg} as a fixed register; generated code 11079should never refer to it (except perhaps as a stack pointer, frame 11080pointer or in some other fixed role). 11081 11082@var{reg} must be the name of a register. The register names accepted 11083are machine-specific and are defined in the @code{REGISTER_NAMES} 11084macro in the machine description macro file. 11085 11086This flag does not have a negative form, because it specifies a 11087three-way choice. 11088 11089@item -fcall-used-@var{reg} 11090@opindex fcall-used 11091Treat the register named @var{reg} as an allocable register that is 11092clobbered by function calls. It may be allocated for temporaries or 11093variables that do not live across a call. Functions compiled this way 11094will not save and restore the register @var{reg}. 11095 11096It is an error to used this flag with the frame pointer or stack pointer. 11097Use of this flag for other registers that have fixed pervasive roles in 11098the machine's execution model will produce disastrous results. 11099 11100This flag does not have a negative form, because it specifies a 11101three-way choice. 11102 11103@item -fcall-saved-@var{reg} 11104@opindex fcall-saved 11105Treat the register named @var{reg} as an allocable register saved by 11106functions. It may be allocated even for temporaries or variables that 11107live across a call. Functions compiled this way will save and restore 11108the register @var{reg} if they use it. 11109 11110It is an error to used this flag with the frame pointer or stack pointer. 11111Use of this flag for other registers that have fixed pervasive roles in 11112the machine's execution model will produce disastrous results. 11113 11114A different sort of disaster will result from the use of this flag for 11115a register in which function values may be returned. 11116 11117This flag does not have a negative form, because it specifies a 11118three-way choice. 11119 11120@item -fpack-struct 11121@opindex fpack-struct 11122Pack all structure members together without holes. 11123 11124@strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate 11125code that is not binary compatible with code generated without that switch. 11126Additionally, it makes the code suboptimal. 11127Use it to conform to a non-default application binary interface. 11128 11129@item -finstrument-functions 11130@opindex finstrument-functions 11131Generate instrumentation calls for entry and exit to functions. Just 11132after function entry and just before function exit, the following 11133profiling functions will be called with the address of the current 11134function and its call site. (On some platforms, 11135@code{__builtin_return_address} does not work beyond the current 11136function, so the call site information may not be available to the 11137profiling functions otherwise.) 11138 11139@smallexample 11140void __cyg_profile_func_enter (void *this_fn, 11141 void *call_site); 11142void __cyg_profile_func_exit (void *this_fn, 11143 void *call_site); 11144@end smallexample 11145 11146The first argument is the address of the start of the current function, 11147which may be looked up exactly in the symbol table. 11148 11149This currently disables function inlining. This restriction is 11150expected to be removed in future releases. 11151 11152A function may be given the attribute @code{no_instrument_function}, in 11153which case this instrumentation will not be done. This can be used, for 11154example, for the profiling functions listed above, high-priority 11155interrupt routines, and any functions from which the profiling functions 11156cannot safely be called (perhaps signal handlers, if the profiling 11157routines generate output or allocate memory). 11158 11159@item -fstack-check 11160@opindex fstack-check 11161Generate code to verify that you do not go beyond the boundary of the 11162stack. You should specify this flag if you are running in an 11163environment with multiple threads, but only rarely need to specify it in 11164a single-threaded environment since stack overflow is automatically 11165detected on nearly all systems if there is only one stack. 11166 11167Note that this switch does not actually cause checking to be done; the 11168operating system must do that. The switch causes generation of code 11169to ensure that the operating system sees the stack being extended. 11170 11171@item -fstack-limit-register=@var{reg} 11172@itemx -fstack-limit-symbol=@var{sym} 11173@itemx -fno-stack-limit 11174@opindex fstack-limit-register 11175@opindex fstack-limit-symbol 11176@opindex fno-stack-limit 11177Generate code to ensure that the stack does not grow beyond a certain value, 11178either the value of a register or the address of a symbol. If the stack 11179would grow beyond the value, a signal is raised. For most targets, 11180the signal is raised before the stack overruns the boundary, so 11181it is possible to catch the signal without taking special precautions. 11182 11183For instance, if the stack starts at absolute address @samp{0x80000000} 11184and grows downwards, you can use the flags 11185@option{-fstack-limit-symbol=__stack_limit} and 11186@option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit 11187of 128KB@. Note that this may only work with the GNU linker. 11188 11189@cindex aliasing of parameters 11190@cindex parameters, aliased 11191@item -fargument-alias 11192@itemx -fargument-noalias 11193@itemx -fargument-noalias-global 11194@opindex fargument-alias 11195@opindex fargument-noalias 11196@opindex fargument-noalias-global 11197Specify the possible relationships among parameters and between 11198parameters and global data. 11199 11200@option{-fargument-alias} specifies that arguments (parameters) may 11201alias each other and may alias global storage.@* 11202@option{-fargument-noalias} specifies that arguments do not alias 11203each other, but may alias global storage.@* 11204@option{-fargument-noalias-global} specifies that arguments do not 11205alias each other and do not alias global storage. 11206 11207Each language will automatically use whatever option is required by 11208the language standard. You should not need to use these options yourself. 11209 11210@item -fleading-underscore 11211@opindex fleading-underscore 11212This option and its counterpart, @option{-fno-leading-underscore}, forcibly 11213change the way C symbols are represented in the object file. One use 11214is to help link with legacy assembly code. 11215 11216@strong{Warning:} the @option{-fleading-underscore} switch causes GCC to 11217generate code that is not binary compatible with code generated without that 11218switch. Use it to conform to a non-default application binary interface. 11219Not all targets provide complete support for this switch. 11220 11221@item -ftls-model=@var{model} 11222Alter the thread-local storage model to be used (@pxref{Thread-Local}). 11223The @var{model} argument should be one of @code{global-dynamic}, 11224@code{local-dynamic}, @code{initial-exec} or @code{local-exec}. 11225 11226The default without @option{-fpic} is @code{initial-exec}; with 11227@option{-fpic} the default is @code{global-dynamic}. 11228@end table 11229 11230@c man end 11231 11232@node Environment Variables 11233@section Environment Variables Affecting GCC 11234@cindex environment variables 11235 11236@c man begin ENVIRONMENT 11237This section describes several environment variables that affect how GCC 11238operates. Some of them work by specifying directories or prefixes to use 11239when searching for various kinds of files. Some are used to specify other 11240aspects of the compilation environment. 11241 11242Note that you can also specify places to search using options such as 11243@option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}). These 11244take precedence over places specified using environment variables, which 11245in turn take precedence over those specified by the configuration of GCC@. 11246@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint, 11247GNU Compiler Collection (GCC) Internals}. 11248 11249@table @env 11250@item LANG 11251@itemx LC_CTYPE 11252@c @itemx LC_COLLATE 11253@itemx LC_MESSAGES 11254@c @itemx LC_MONETARY 11255@c @itemx LC_NUMERIC 11256@c @itemx LC_TIME 11257@itemx LC_ALL 11258@findex LANG 11259@findex LC_CTYPE 11260@c @findex LC_COLLATE 11261@findex LC_MESSAGES 11262@c @findex LC_MONETARY 11263@c @findex LC_NUMERIC 11264@c @findex LC_TIME 11265@findex LC_ALL 11266@cindex locale 11267These environment variables control the way that GCC uses 11268localization information that allow GCC to work with different 11269national conventions. GCC inspects the locale categories 11270@env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do 11271so. These locale categories can be set to any value supported by your 11272installation. A typical value is @samp{en_UK} for English in the United 11273Kingdom. 11274 11275The @env{LC_CTYPE} environment variable specifies character 11276classification. GCC uses it to determine the character boundaries in 11277a string; this is needed for some multibyte encodings that contain quote 11278and escape characters that would otherwise be interpreted as a string 11279end or escape. 11280 11281The @env{LC_MESSAGES} environment variable specifies the language to 11282use in diagnostic messages. 11283 11284If the @env{LC_ALL} environment variable is set, it overrides the value 11285of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE} 11286and @env{LC_MESSAGES} default to the value of the @env{LANG} 11287environment variable. If none of these variables are set, GCC 11288defaults to traditional C English behavior. 11289 11290@item TMPDIR 11291@findex TMPDIR 11292If @env{TMPDIR} is set, it specifies the directory to use for temporary 11293files. GCC uses temporary files to hold the output of one stage of 11294compilation which is to be used as input to the next stage: for example, 11295the output of the preprocessor, which is the input to the compiler 11296proper. 11297 11298@item GCC_EXEC_PREFIX 11299@findex GCC_EXEC_PREFIX 11300If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the 11301names of the subprograms executed by the compiler. No slash is added 11302when this prefix is combined with the name of a subprogram, but you can 11303specify a prefix that ends with a slash if you wish. 11304 11305If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out 11306an appropriate prefix to use based on the pathname it was invoked with. 11307 11308If GCC cannot find the subprogram using the specified prefix, it 11309tries looking in the usual places for the subprogram. 11310 11311The default value of @env{GCC_EXEC_PREFIX} is 11312@file{@var{prefix}/lib/gcc/} where @var{prefix} is the value 11313of @code{prefix} when you ran the @file{configure} script. 11314 11315Other prefixes specified with @option{-B} take precedence over this prefix. 11316 11317This prefix is also used for finding files such as @file{crt0.o} that are 11318used for linking. 11319 11320In addition, the prefix is used in an unusual way in finding the 11321directories to search for header files. For each of the standard 11322directories whose name normally begins with @samp{/usr/local/lib/gcc} 11323(more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries 11324replacing that beginning with the specified prefix to produce an 11325alternate directory name. Thus, with @option{-Bfoo/}, GCC will search 11326@file{foo/bar} where it would normally search @file{/usr/local/lib/bar}. 11327These alternate directories are searched first; the standard directories 11328come next. 11329 11330@item COMPILER_PATH 11331@findex COMPILER_PATH 11332The value of @env{COMPILER_PATH} is a colon-separated list of 11333directories, much like @env{PATH}. GCC tries the directories thus 11334specified when searching for subprograms, if it can't find the 11335subprograms using @env{GCC_EXEC_PREFIX}. 11336 11337@item LIBRARY_PATH 11338@findex LIBRARY_PATH 11339The value of @env{LIBRARY_PATH} is a colon-separated list of 11340directories, much like @env{PATH}. When configured as a native compiler, 11341GCC tries the directories thus specified when searching for special 11342linker files, if it can't find them using @env{GCC_EXEC_PREFIX}. Linking 11343using GCC also uses these directories when searching for ordinary 11344libraries for the @option{-l} option (but directories specified with 11345@option{-L} come first). 11346 11347@item LANG 11348@findex LANG 11349@cindex locale definition 11350This variable is used to pass locale information to the compiler. One way in 11351which this information is used is to determine the character set to be used 11352when character literals, string literals and comments are parsed in C and C++. 11353When the compiler is configured to allow multibyte characters, 11354the following values for @env{LANG} are recognized: 11355 11356@table @samp 11357@item C-JIS 11358Recognize JIS characters. 11359@item C-SJIS 11360Recognize SJIS characters. 11361@item C-EUCJP 11362Recognize EUCJP characters. 11363@end table 11364 11365If @env{LANG} is not defined, or if it has some other value, then the 11366compiler will use mblen and mbtowc as defined by the default locale to 11367recognize and translate multibyte characters. 11368@end table 11369 11370@noindent 11371Some additional environments variables affect the behavior of the 11372preprocessor. 11373 11374@include cppenv.texi 11375 11376@c man end 11377 11378@node Precompiled Headers 11379@section Using Precompiled Headers 11380@cindex precompiled headers 11381@cindex speed of compilation 11382 11383Often large projects have many header files that are included in every 11384source file. The time the compiler takes to process these header files 11385over and over again can account for nearly all of the time required to 11386build the project. To make builds faster, GCC allows users to 11387`precompile' a header file; then, if builds can use the precompiled 11388header file they will be much faster. 11389 11390@strong{Caution:} There are a few known situations where GCC will 11391crash when trying to use a precompiled header. If you have trouble 11392with a precompiled header, you should remove the precompiled header 11393and compile without it. In addition, please use GCC's on-line 11394defect-tracking system to report any problems you encounter with 11395precompiled headers. @xref{Bugs}. 11396 11397To create a precompiled header file, simply compile it as you would any 11398other file, if necessary using the @option{-x} option to make the driver 11399treat it as a C or C++ header file. You will probably want to use a 11400tool like @command{make} to keep the precompiled header up-to-date when 11401the headers it contains change. 11402 11403A precompiled header file will be searched for when @code{#include} is 11404seen in the compilation. As it searches for the included file 11405(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the 11406compiler looks for a precompiled header in each directory just before it 11407looks for the include file in that directory. The name searched for is 11408the name specified in the @code{#include} with @samp{.gch} appended. If 11409the precompiled header file can't be used, it is ignored. 11410 11411For instance, if you have @code{#include "all.h"}, and you have 11412@file{all.h.gch} in the same directory as @file{all.h}, then the 11413precompiled header file will be used if possible, and the original 11414header will be used otherwise. 11415 11416Alternatively, you might decide to put the precompiled header file in a 11417directory and use @option{-I} to ensure that directory is searched 11418before (or instead of) the directory containing the original header. 11419Then, if you want to check that the precompiled header file is always 11420used, you can put a file of the same name as the original header in this 11421directory containing an @code{#error} command. 11422 11423This also works with @option{-include}. So yet another way to use 11424precompiled headers, good for projects not designed with precompiled 11425header files in mind, is to simply take most of the header files used by 11426a project, include them from another header file, precompile that header 11427file, and @option{-include} the precompiled header. If the header files 11428have guards against multiple inclusion, they will be skipped because 11429they've already been included (in the precompiled header). 11430 11431If you need to precompile the same header file for different 11432languages, targets, or compiler options, you can instead make a 11433@emph{directory} named like @file{all.h.gch}, and put each precompiled 11434header in the directory. (It doesn't matter what you call the files 11435in the directory, every precompiled header in the directory will be 11436considered.) The first precompiled header encountered in the 11437directory that is valid for this compilation will be used; they're 11438searched in no particular order. 11439 11440There are many other possibilities, limited only by your imagination, 11441good sense, and the constraints of your build system. 11442 11443A precompiled header file can be used only when these conditions apply: 11444 11445@itemize 11446@item 11447Only one precompiled header can be used in a particular compilation. 11448@item 11449A precompiled header can't be used once the first C token is seen. You 11450can have preprocessor directives before a precompiled header; you can 11451even include a precompiled header from inside another header, so long as 11452there are no C tokens before the @code{#include}. 11453@item 11454The precompiled header file must be produced for the same language as 11455the current compilation. You can't use a C precompiled header for a C++ 11456compilation. 11457@item 11458The precompiled header file must be produced by the same compiler 11459version and configuration as the current compilation is using. 11460The easiest way to guarantee this is to use the same compiler binary 11461for creating and using precompiled headers. 11462@item 11463Any macros defined before the precompiled header (including with 11464@option{-D}) must either be defined in the same way as when the 11465precompiled header was generated, or must not affect the precompiled 11466header, which usually means that the they don't appear in the 11467precompiled header at all. 11468@item 11469Certain command-line options must be defined in the same way as when the 11470precompiled header was generated. At present, it's not clear which 11471options are safe to change and which are not; the safest choice is to 11472use exactly the same options when generating and using the precompiled 11473header. 11474@end itemize 11475 11476For all of these but the last, the compiler will automatically ignore 11477the precompiled header if the conditions aren't met. For the last item, 11478some option changes will cause the precompiled header to be rejected, 11479but not all incompatible option combinations have yet been found. If 11480you find a new incompatible combination, please consider filing a bug 11481report, see @ref{Bugs}. 11482 11483@node Running Protoize 11484@section Running Protoize 11485 11486The program @code{protoize} is an optional part of GCC@. You can use 11487it to add prototypes to a program, thus converting the program to ISO 11488C in one respect. The companion program @code{unprotoize} does the 11489reverse: it removes argument types from any prototypes that are found. 11490 11491When you run these programs, you must specify a set of source files as 11492command line arguments. The conversion programs start out by compiling 11493these files to see what functions they define. The information gathered 11494about a file @var{foo} is saved in a file named @file{@var{foo}.X}. 11495 11496After scanning comes actual conversion. The specified files are all 11497eligible to be converted; any files they include (whether sources or 11498just headers) are eligible as well. 11499 11500But not all the eligible files are converted. By default, 11501@code{protoize} and @code{unprotoize} convert only source and header 11502files in the current directory. You can specify additional directories 11503whose files should be converted with the @option{-d @var{directory}} 11504option. You can also specify particular files to exclude with the 11505@option{-x @var{file}} option. A file is converted if it is eligible, its 11506directory name matches one of the specified directory names, and its 11507name within the directory has not been excluded. 11508 11509Basic conversion with @code{protoize} consists of rewriting most 11510function definitions and function declarations to specify the types of 11511the arguments. The only ones not rewritten are those for varargs 11512functions. 11513 11514@code{protoize} optionally inserts prototype declarations at the 11515beginning of the source file, to make them available for any calls that 11516precede the function's definition. Or it can insert prototype 11517declarations with block scope in the blocks where undeclared functions 11518are called. 11519 11520Basic conversion with @code{unprotoize} consists of rewriting most 11521function declarations to remove any argument types, and rewriting 11522function definitions to the old-style pre-ISO form. 11523 11524Both conversion programs print a warning for any function declaration or 11525definition that they can't convert. You can suppress these warnings 11526with @option{-q}. 11527 11528The output from @code{protoize} or @code{unprotoize} replaces the 11529original source file. The original file is renamed to a name ending 11530with @samp{.save} (for DOS, the saved filename ends in @samp{.sav} 11531without the original @samp{.c} suffix). If the @samp{.save} (@samp{.sav} 11532for DOS) file already exists, then the source file is simply discarded. 11533 11534@code{protoize} and @code{unprotoize} both depend on GCC itself to 11535scan the program and collect information about the functions it uses. 11536So neither of these programs will work until GCC is installed. 11537 11538Here is a table of the options you can use with @code{protoize} and 11539@code{unprotoize}. Each option works with both programs unless 11540otherwise stated. 11541 11542@table @code 11543@item -B @var{directory} 11544Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the 11545usual directory (normally @file{/usr/local/lib}). This file contains 11546prototype information about standard system functions. This option 11547applies only to @code{protoize}. 11548 11549@item -c @var{compilation-options} 11550Use @var{compilation-options} as the options when running @command{gcc} to 11551produce the @samp{.X} files. The special option @option{-aux-info} is 11552always passed in addition, to tell @command{gcc} to write a @samp{.X} file. 11553 11554Note that the compilation options must be given as a single argument to 11555@code{protoize} or @code{unprotoize}. If you want to specify several 11556@command{gcc} options, you must quote the entire set of compilation options 11557to make them a single word in the shell. 11558 11559There are certain @command{gcc} arguments that you cannot use, because they 11560would produce the wrong kind of output. These include @option{-g}, 11561@option{-O}, @option{-c}, @option{-S}, and @option{-o} If you include these in 11562the @var{compilation-options}, they are ignored. 11563 11564@item -C 11565Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file 11566systems) instead of @samp{.c}. This is convenient if you are converting 11567a C program to C++. This option applies only to @code{protoize}. 11568 11569@item -g 11570Add explicit global declarations. This means inserting explicit 11571declarations at the beginning of each source file for each function 11572that is called in the file and was not declared. These declarations 11573precede the first function definition that contains a call to an 11574undeclared function. This option applies only to @code{protoize}. 11575 11576@item -i @var{string} 11577Indent old-style parameter declarations with the string @var{string}. 11578This option applies only to @code{protoize}. 11579 11580@code{unprotoize} converts prototyped function definitions to old-style 11581function definitions, where the arguments are declared between the 11582argument list and the initial @samp{@{}. By default, @code{unprotoize} 11583uses five spaces as the indentation. If you want to indent with just 11584one space instead, use @option{-i " "}. 11585 11586@item -k 11587Keep the @samp{.X} files. Normally, they are deleted after conversion 11588is finished. 11589 11590@item -l 11591Add explicit local declarations. @code{protoize} with @option{-l} inserts 11592a prototype declaration for each function in each block which calls the 11593function without any declaration. This option applies only to 11594@code{protoize}. 11595 11596@item -n 11597Make no real changes. This mode just prints information about the conversions 11598that would have been done without @option{-n}. 11599 11600@item -N 11601Make no @samp{.save} files. The original files are simply deleted. 11602Use this option with caution. 11603 11604@item -p @var{program} 11605Use the program @var{program} as the compiler. Normally, the name 11606@file{gcc} is used. 11607 11608@item -q 11609Work quietly. Most warnings are suppressed. 11610 11611@item -v 11612Print the version number, just like @option{-v} for @command{gcc}. 11613@end table 11614 11615If you need special compiler options to compile one of your program's 11616source files, then you should generate that file's @samp{.X} file 11617specially, by running @command{gcc} on that source file with the 11618appropriate options and the option @option{-aux-info}. Then run 11619@code{protoize} on the entire set of files. @code{protoize} will use 11620the existing @samp{.X} file because it is newer than the source file. 11621For example: 11622 11623@smallexample 11624gcc -Dfoo=bar file1.c -aux-info file1.X 11625protoize *.c 11626@end smallexample 11627 11628@noindent 11629You need to include the special files along with the rest in the 11630@code{protoize} command, even though their @samp{.X} files already 11631exist, because otherwise they won't get converted. 11632 11633@xref{Protoize Caveats}, for more information on how to use 11634@code{protoize} successfully. 11635