1@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2@c 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 3@c Free Software Foundation, Inc. 4@c This is part of the GCC manual. 5@c For copying conditions, see the file gcc.texi. 6 7@ignore 8@c man begin INCLUDE 9@include gcc-vers.texi 10@c man end 11 12@c man begin COPYRIGHT 13Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 141999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 152012 16Free Software Foundation, Inc. 17 18Permission is granted to copy, distribute and/or modify this document 19under the terms of the GNU Free Documentation License, Version 1.3 or 20any later version published by the Free Software Foundation; with the 21Invariant Sections being ``GNU General Public License'' and ``Funding 22Free Software'', the Front-Cover texts being (a) (see below), and with 23the Back-Cover Texts being (b) (see below). A copy of the license is 24included in the gfdl(7) man page. 25 26(a) The FSF's Front-Cover Text is: 27 28 A GNU Manual 29 30(b) The FSF's Back-Cover Text is: 31 32 You have freedom to copy and modify this GNU Manual, like GNU 33 software. Copies published by the Free Software Foundation raise 34 funds for GNU development. 35@c man end 36@c Set file name and title for the man page. 37@setfilename gcc 38@settitle GNU project C and C++ compiler 39@c man begin SYNOPSIS 40gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}] 41 [@option{-g}] [@option{-pg}] [@option{-O}@var{level}] 42 [@option{-W}@var{warn}@dots{}] [@option{-pedantic}] 43 [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}] 44 [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}] 45 [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}] 46 [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{} 47 48Only the most useful options are listed here; see below for the 49remainder. @samp{g++} accepts mostly the same options as @samp{gcc}. 50@c man end 51@c man begin SEEALSO 52gpl(7), gfdl(7), fsf-funding(7), 53cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1) 54and the Info entries for @file{gcc}, @file{cpp}, @file{as}, 55@file{ld}, @file{binutils} and @file{gdb}. 56@c man end 57@c man begin BUGS 58For instructions on reporting bugs, see 59@w{@value{BUGURL}}. 60@c man end 61@c man begin AUTHOR 62See the Info entry for @command{gcc}, or 63@w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}}, 64for contributors to GCC@. 65@c man end 66@end ignore 67 68@node Invoking GCC 69@chapter GCC Command Options 70@cindex GCC command options 71@cindex command options 72@cindex options, GCC command 73 74@c man begin DESCRIPTION 75When you invoke GCC, it normally does preprocessing, compilation, 76assembly and linking. The ``overall options'' allow you to stop this 77process at an intermediate stage. For example, the @option{-c} option 78says not to run the linker. Then the output consists of object files 79output by the assembler. 80 81Other options are passed on to one stage of processing. Some options 82control the preprocessor and others the compiler itself. Yet other 83options control the assembler and linker; most of these are not 84documented here, since you rarely need to use any of them. 85 86@cindex C compilation options 87Most of the command-line options that you can use with GCC are useful 88for C programs; when an option is only useful with another language 89(usually C++), the explanation says so explicitly. If the description 90for a particular option does not mention a source language, you can use 91that option with all supported languages. 92 93@cindex C++ compilation options 94@xref{Invoking G++,,Compiling C++ Programs}, for a summary of special 95options for compiling C++ programs. 96 97@cindex grouping options 98@cindex options, grouping 99The @command{gcc} program accepts options and file names as operands. Many 100options have multi-letter names; therefore multiple single-letter options 101may @emph{not} be grouped: @option{-dv} is very different from @w{@samp{-d 102-v}}. 103 104@cindex order of options 105@cindex options, order 106You can mix options and other arguments. For the most part, the order 107you use doesn't matter. Order does matter when you use several 108options of the same kind; for example, if you specify @option{-L} more 109than once, the directories are searched in the order specified. Also, 110the placement of the @option{-l} option is significant. 111 112Many options have long names starting with @samp{-f} or with 113@samp{-W}---for example, 114@option{-fmove-loop-invariants}, @option{-Wformat} and so on. Most of 115these have both positive and negative forms; the negative form of 116@option{-ffoo} would be @option{-fno-foo}. This manual documents 117only one of these two forms, whichever one is not the default. 118 119@c man end 120 121@xref{Option Index}, for an index to GCC's options. 122 123@menu 124* Option Summary:: Brief list of all options, without explanations. 125* Overall Options:: Controlling the kind of output: 126 an executable, object files, assembler files, 127 or preprocessed source. 128* Invoking G++:: Compiling C++ programs. 129* C Dialect Options:: Controlling the variant of C language compiled. 130* C++ Dialect Options:: Variations on C++. 131* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 132 and Objective-C++. 133* Language Independent Options:: Controlling how diagnostics should be 134 formatted. 135* Warning Options:: How picky should the compiler be? 136* Debugging Options:: Symbol tables, measurements, and debugging dumps. 137* Optimize Options:: How much optimization? 138* Preprocessor Options:: Controlling header files and macro definitions. 139 Also, getting dependency information for Make. 140* Assembler Options:: Passing options to the assembler. 141* Link Options:: Specifying libraries and so on. 142* Directory Options:: Where to find header files and libraries. 143 Where to find the compiler executable files. 144* Spec Files:: How to pass switches to sub-processes. 145* Target Options:: Running a cross-compiler, or an old version of GCC. 146* Submodel Options:: Specifying minor hardware or convention variations, 147 such as 68010 vs 68020. 148* Code Gen Options:: Specifying conventions for function calls, data layout 149 and register usage. 150* Environment Variables:: Env vars that affect GCC. 151* Precompiled Headers:: Compiling a header once, and using it many times. 152@end menu 153 154@c man begin OPTIONS 155 156@node Option Summary 157@section Option Summary 158 159Here is a summary of all the options, grouped by type. Explanations are 160in the following sections. 161 162@table @emph 163@item Overall Options 164@xref{Overall Options,,Options Controlling the Kind of Output}. 165@gccoptlist{-c -S -E -o @var{file} -no-canonical-prefixes @gol 166-pipe -pass-exit-codes @gol 167-x @var{language} -v -### --help@r{[}=@var{class}@r{[},@dots{}@r{]]} --target-help @gol 168--version -wrapper @@@var{file} -fplugin=@var{file} -fplugin-arg-@var{name}=@var{arg} @gol 169-fdump-ada-spec@r{[}-slim@r{]} -fdump-go-spec=@var{file}} 170 171@item C Language Options 172@xref{C Dialect Options,,Options Controlling C Dialect}. 173@gccoptlist{-ansi -std=@var{standard} -fgnu89-inline @gol 174-aux-info @var{filename} -fallow-parameterless-variadic-functions @gol 175-fno-asm -fno-builtin -fno-builtin-@var{function} @gol 176-fhosted -ffreestanding -fopenmp -fms-extensions -fplan9-extensions @gol 177-trigraphs -no-integrated-cpp -traditional -traditional-cpp @gol 178-fallow-single-precision -fcond-mismatch -flax-vector-conversions @gol 179-fsigned-bitfields -fsigned-char @gol 180-funsigned-bitfields -funsigned-char} 181 182@item C++ Language Options 183@xref{C++ Dialect Options,,Options Controlling C++ Dialect}. 184@gccoptlist{-fabi-version=@var{n} -fno-access-control -fcheck-new @gol 185-fconserve-space -fconstexpr-depth=@var{n} -ffriend-injection @gol 186-fno-elide-constructors @gol 187-fno-enforce-eh-specs @gol 188-ffor-scope -fno-for-scope -fno-gnu-keywords @gol 189-fno-implicit-templates @gol 190-fno-implicit-inline-templates @gol 191-fno-implement-inlines -fms-extensions @gol 192-fno-nonansi-builtins -fnothrow-opt -fno-operator-names @gol 193-fno-optional-diags -fpermissive @gol 194-fno-pretty-templates @gol 195-frepo -fno-rtti -fstats -ftemplate-depth=@var{n} @gol 196-fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ @gol 197-fno-default-inline -fvisibility-inlines-hidden @gol 198-fvisibility-ms-compat @gol 199-Wabi -Wconversion-null -Wctor-dtor-privacy @gol 200-Wdelete-non-virtual-dtor -Wnarrowing -Wnoexcept @gol 201-Wnon-virtual-dtor -Wreorder @gol 202-Weffc++ -Wstrict-null-sentinel @gol 203-Wno-non-template-friend -Wold-style-cast @gol 204-Woverloaded-virtual -Wno-pmf-conversions @gol 205-Wsign-promo} 206 207@item Objective-C and Objective-C++ Language Options 208@xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling 209Objective-C and Objective-C++ Dialects}. 210@gccoptlist{-fconstant-string-class=@var{class-name} @gol 211-fgnu-runtime -fnext-runtime @gol 212-fno-nil-receivers @gol 213-fobjc-abi-version=@var{n} @gol 214-fobjc-call-cxx-cdtors @gol 215-fobjc-direct-dispatch @gol 216-fobjc-exceptions @gol 217-fobjc-gc @gol 218-fobjc-nilcheck @gol 219-fobjc-std=objc1 @gol 220-freplace-objc-classes @gol 221-fzero-link @gol 222-gen-decls @gol 223-Wassign-intercept @gol 224-Wno-protocol -Wselector @gol 225-Wstrict-selector-match @gol 226-Wundeclared-selector} 227 228@item Language Independent Options 229@xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}. 230@gccoptlist{-fmessage-length=@var{n} @gol 231-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]} @gol 232-fno-diagnostics-show-option} 233 234@item Warning Options 235@xref{Warning Options,,Options to Request or Suppress Warnings}. 236@gccoptlist{-fsyntax-only -fmax-errors=@var{n} -pedantic @gol 237-pedantic-errors @gol 238-w -Wextra -Wall -Waddress -Waggregate-return -Warray-bounds @gol 239-Wno-attributes -Wno-builtin-macro-redefined @gol 240-Wc++-compat -Wc++11-compat -Wcast-align -Wcast-qual @gol 241-Wchar-subscripts -Wclobbered -Wcomment @gol 242-Wconversion -Wcoverage-mismatch -Wno-cpp -Wno-deprecated @gol 243-Wno-deprecated-declarations -Wdisabled-optimization @gol 244-Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare @gol 245-Wno-endif-labels -Werror -Werror=* @gol 246-Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol 247-Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol 248-Wformat-security -Wformat-y2k @gol 249-Wframe-larger-than=@var{len} -Wno-free-nonheap-object -Wjump-misses-init @gol 250-Wignored-qualifiers @gol 251-Wimplicit -Wimplicit-function-declaration -Wimplicit-int @gol 252-Winit-self -Winline -Wmaybe-uninitialized @gol 253-Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol 254-Winvalid-pch -Wlarger-than=@var{len} -Wunsafe-loop-optimizations @gol 255-Wlogical-op -Wlong-long @gol 256-Wmain -Wmaybe-uninitialized -Wmissing-braces -Wmissing-field-initializers @gol 257-Wmissing-format-attribute -Wmissing-include-dirs @gol 258-Wno-mudflap @gol 259-Wno-multichar -Wnonnull -Wno-overflow @gol 260-Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded @gol 261-Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format @gol 262-Wpointer-arith -Wno-pointer-to-int-cast @gol 263-Wredundant-decls @gol 264-Wreturn-type -Wsequence-point -Wshadow @gol 265-Wsign-compare -Wsign-conversion -Wstack-protector @gol 266-Wstack-usage=@var{len} -Wstrict-aliasing -Wstrict-aliasing=n @gol 267-Wstrict-overflow -Wstrict-overflow=@var{n} @gol 268-Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{]} @gol 269-Wswitch -Wswitch-default -Wswitch-enum -Wsync-nand @gol 270-Wsystem-headers -Wtrampolines -Wtrigraphs -Wtype-limits -Wundef @gol 271-Wuninitialized -Wunknown-pragmas -Wno-pragmas @gol 272-Wunsuffixed-float-constants -Wunused -Wunused-function @gol 273-Wunused-label -Wunused-local-typedefs -Wunused-parameter @gol 274-Wno-unused-result -Wunused-value @gol -Wunused-variable @gol 275-Wunused-but-set-parameter -Wunused-but-set-variable @gol 276-Wvariadic-macros -Wvector-operation-performance -Wvla 277-Wvolatile-register-var -Wwrite-strings -Wzero-as-null-pointer-constant} 278 279@item C and Objective-C-only Warning Options 280@gccoptlist{-Wbad-function-cast -Wmissing-declarations @gol 281-Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs @gol 282-Wold-style-declaration -Wold-style-definition @gol 283-Wstrict-prototypes -Wtraditional -Wtraditional-conversion @gol 284-Wdeclaration-after-statement -Wpointer-sign} 285 286@item Debugging Options 287@xref{Debugging Options,,Options for Debugging Your Program or GCC}. 288@gccoptlist{-d@var{letters} -dumpspecs -dumpmachine -dumpversion @gol 289-fdbg-cnt-list -fdbg-cnt=@var{counter-value-list} @gol 290-fdisable-ipa-@var{pass_name} @gol 291-fdisable-rtl-@var{pass_name} @gol 292-fdisable-rtl-@var{pass-name}=@var{range-list} @gol 293-fdisable-tree-@var{pass_name} @gol 294-fdisable-tree-@var{pass-name}=@var{range-list} @gol 295-fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links @gol 296-fdump-translation-unit@r{[}-@var{n}@r{]} @gol 297-fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol 298-fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol 299-fdump-passes @gol 300-fdump-statistics @gol 301-fdump-tree-all @gol 302-fdump-tree-original@r{[}-@var{n}@r{]} @gol 303-fdump-tree-optimized@r{[}-@var{n}@r{]} @gol 304-fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol 305-fdump-tree-ch @gol 306-fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol 307-fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol 308-fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol 309-fdump-tree-dom@r{[}-@var{n}@r{]} @gol 310-fdump-tree-dse@r{[}-@var{n}@r{]} @gol 311-fdump-tree-phiprop@r{[}-@var{n}@r{]} @gol 312-fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol 313-fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol 314-fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol 315-fdump-tree-nrv -fdump-tree-vect @gol 316-fdump-tree-sink @gol 317-fdump-tree-sra@r{[}-@var{n}@r{]} @gol 318-fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol 319-fdump-tree-fre@r{[}-@var{n}@r{]} @gol 320-fdump-tree-vrp@r{[}-@var{n}@r{]} @gol 321-ftree-vectorizer-verbose=@var{n} @gol 322-fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol 323-fdump-final-insns=@var{file} @gol 324-fcompare-debug@r{[}=@var{opts}@r{]} -fcompare-debug-second @gol 325-feliminate-dwarf2-dups -feliminate-unused-debug-types @gol 326-feliminate-unused-debug-symbols -femit-class-debug-always @gol 327-fenable-@var{kind}-@var{pass} @gol 328-fenable-@var{kind}-@var{pass}=@var{range-list} @gol 329-fdebug-types-section @gol 330-fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs @gol 331-frandom-seed=@var{string} -fsched-verbose=@var{n} @gol 332-fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose @gol 333-fstack-usage -ftest-coverage -ftime-report -fvar-tracking @gol 334-fvar-tracking-assignments -fvar-tracking-assignments-toggle @gol 335-g -g@var{level} -gtoggle -gcoff -gdwarf-@var{version} @gol 336-ggdb -grecord-gcc-switches -gno-record-gcc-switches @gol 337-gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf @gol 338-gvms -gxcoff -gxcoff+ @gol 339-fno-merge-debug-strings -fno-dwarf2-cfi-asm @gol 340-fdebug-prefix-map=@var{old}=@var{new} @gol 341-femit-struct-debug-baseonly -femit-struct-debug-reduced @gol 342-femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol 343-p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol 344-print-multi-directory -print-multi-lib -print-multi-os-directory @gol 345-print-prog-name=@var{program} -print-search-dirs -Q @gol 346-print-sysroot -print-sysroot-headers-suffix @gol 347-save-temps -save-temps=cwd -save-temps=obj -time@r{[}=@var{file}@r{]}} 348 349@item Optimization Options 350@xref{Optimize Options,,Options that Control Optimization}. 351@gccoptlist{-falign-functions[=@var{n}] -falign-jumps[=@var{n}] @gol 352-falign-labels[=@var{n}] -falign-loops[=@var{n}] -fassociative-math @gol 353-fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize @gol 354-fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves @gol 355-fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack @gol 356-fcompare-elim -fcprop-registers -fcrossjumping @gol 357-fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules @gol 358-fcx-limited-range @gol 359-fdata-sections -fdce -fdelayed-branch @gol 360-fdelete-null-pointer-checks -fdevirtualize -fdse @gol 361-fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects @gol 362-ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=@var{style} @gol 363-fforward-propagate -ffp-contract=@var{style} -ffunction-sections @gol 364-fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity @gol 365-fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining @gol 366-finline-functions -finline-functions-called-once -finline-limit=@var{n} @gol 367-finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg @gol 368-fipa-pta -fipa-profile -fipa-pure-const -fipa-reference @gol 369-fira-algorithm=@var{algorithm} @gol 370-fira-region=@var{region} @gol 371-fira-loop-pressure -fno-ira-share-save-slots @gol 372-fno-ira-share-spill-slots -fira-verbose=@var{n} @gol 373-fivopts -fkeep-inline-functions -fkeep-static-consts @gol 374-floop-block -floop-flatten -floop-interchange -floop-strip-mine @gol 375-floop-parallelize-all -flto -flto-compression-level @gol 376-flto-partition=@var{alg} -flto-report -fmerge-all-constants @gol 377-fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves @gol 378-fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg @gol 379-fno-default-inline @gol 380-fno-defer-pop -fno-function-cse -fno-guess-branch-probability @gol 381-fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol 382-fno-sched-interblock -fno-sched-spec -fno-signed-zeros @gol 383-fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol 384-fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls @gol 385-fpartial-inlining -fpeel-loops -fpredictive-commoning @gol 386-fprefetch-loop-arrays @gol 387-fprofile-correction -fprofile-dir=@var{path} -fprofile-generate @gol 388-fprofile-generate=@var{path} @gol 389-fprofile-use -fprofile-use=@var{path} -fprofile-values @gol 390-freciprocal-math -free -fregmove -frename-registers -freorder-blocks @gol 391-freorder-blocks-and-partition -freorder-functions @gol 392-frerun-cse-after-loop -freschedule-modulo-scheduled-loops @gol 393-frounding-math -fsched2-use-superblocks -fsched-pressure @gol 394-fsched-spec-load -fsched-spec-load-dangerous @gol 395-fsched-stalled-insns-dep[=@var{n}] -fsched-stalled-insns[=@var{n}] @gol 396-fsched-group-heuristic -fsched-critical-path-heuristic @gol 397-fsched-spec-insn-heuristic -fsched-rank-heuristic @gol 398-fsched-last-insn-heuristic -fsched-dep-count-heuristic @gol 399-fschedule-insns -fschedule-insns2 -fsection-anchors @gol 400-fselective-scheduling -fselective-scheduling2 @gol 401-fsel-sched-pipelining -fsel-sched-pipelining-outer-loops @gol 402-fshrink-wrap -fsignaling-nans -fsingle-precision-constant @gol 403-fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector @gol 404-fstack-protector-all -fstrict-aliasing -fstrict-overflow @gol 405-fthread-jumps -ftracer -ftree-bit-ccp @gol 406-ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop @gol 407-ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse @gol 408-ftree-forwprop -ftree-fre -ftree-loop-if-convert @gol 409-ftree-loop-if-convert-stores -ftree-loop-im @gol 410-ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns @gol 411-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol 412-ftree-parallelize-loops=@var{n} -ftree-pre -ftree-pta -ftree-reassoc @gol 413-ftree-sink -ftree-sra -ftree-switch-conversion -ftree-tail-merge @gol 414-ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp @gol 415-funit-at-a-time -funroll-all-loops -funroll-loops @gol 416-funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol 417-fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb @gol 418-fwhole-program -fwpa -fuse-linker-plugin @gol 419--param @var{name}=@var{value} 420-O -O0 -O1 -O2 -O3 -Os -Ofast} 421 422@item Preprocessor Options 423@xref{Preprocessor Options,,Options Controlling the Preprocessor}. 424@gccoptlist{-A@var{question}=@var{answer} @gol 425-A-@var{question}@r{[}=@var{answer}@r{]} @gol 426-C -dD -dI -dM -dN @gol 427-D@var{macro}@r{[}=@var{defn}@r{]} -E -H @gol 428-idirafter @var{dir} @gol 429-include @var{file} -imacros @var{file} @gol 430-iprefix @var{file} -iwithprefix @var{dir} @gol 431-iwithprefixbefore @var{dir} -isystem @var{dir} @gol 432-imultilib @var{dir} -isysroot @var{dir} @gol 433-M -MM -MF -MG -MP -MQ -MT -nostdinc @gol 434-P -fdebug-cpp -ftrack-macro-expansion -fworking-directory @gol 435-remap -trigraphs -undef -U@var{macro} @gol 436-Wp,@var{option} -Xpreprocessor @var{option}} 437 438@item Assembler Option 439@xref{Assembler Options,,Passing Options to the Assembler}. 440@gccoptlist{-Wa,@var{option} -Xassembler @var{option}} 441 442@item Linker Options 443@xref{Link Options,,Options for Linking}. 444@gccoptlist{@var{object-file-name} -l@var{library} @gol 445-nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic @gol 446-s -static -static-libgcc -static-libstdc++ -shared @gol 447-shared-libgcc -symbolic @gol 448-T @var{script} -Wl,@var{option} -Xlinker @var{option} @gol 449-u @var{symbol}} 450 451@item Directory Options 452@xref{Directory Options,,Options for Directory Search}. 453@gccoptlist{-B@var{prefix} -I@var{dir} -iplugindir=@var{dir} @gol 454-iquote@var{dir} -L@var{dir} -specs=@var{file} -I- @gol 455--sysroot=@var{dir}} 456 457@item Machine Dependent Options 458@xref{Submodel Options,,Hardware Models and Configurations}. 459@c This list is ordered alphanumerically by subsection name. 460@c Try and put the significant identifier (CPU or system) first, 461@c so users have a clue at guessing where the ones they want will be. 462 463@emph{Adapteva Epiphany Options} 464@gccoptlist{-mhalf-reg-file -mprefer-short-insn-regs @gol 465-mbranch-cost=@var{num} -mcmove -mnops=@var{num} -msoft-cmpsf @gol 466-msplit-lohi -mpost-inc -mpost-modify -mstack-offset=@var{num} @gol 467-mround-nearest -mlong-calls -mshort-calls -msmall16 @gol 468-mfp-mode=@var{mode} -mvect-double -max-vect-align=@var{num} @gol 469-msplit-vecmove-early -m1reg-@var{reg}} 470 471@emph{ARM Options} 472@gccoptlist{-mapcs-frame -mno-apcs-frame @gol 473-mabi=@var{name} @gol 474-mapcs-stack-check -mno-apcs-stack-check @gol 475-mapcs-float -mno-apcs-float @gol 476-mapcs-reentrant -mno-apcs-reentrant @gol 477-msched-prolog -mno-sched-prolog @gol 478-mlittle-endian -mbig-endian -mwords-little-endian @gol 479-mfloat-abi=@var{name} -mfpe @gol 480-mfp16-format=@var{name} 481-mthumb-interwork -mno-thumb-interwork @gol 482-mcpu=@var{name} -march=@var{name} -mfpu=@var{name} @gol 483-mstructure-size-boundary=@var{n} @gol 484-mabort-on-noreturn @gol 485-mlong-calls -mno-long-calls @gol 486-msingle-pic-base -mno-single-pic-base @gol 487-mpic-register=@var{reg} @gol 488-mnop-fun-dllimport @gol 489-mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol 490-mpoke-function-name @gol 491-mthumb -marm @gol 492-mtpcs-frame -mtpcs-leaf-frame @gol 493-mcaller-super-interworking -mcallee-super-interworking @gol 494-mtp=@var{name} -mtls-dialect=@var{dialect} @gol 495-mword-relocations @gol 496-mfix-cortex-m3-ldrd @gol 497-munaligned-access} 498 499@emph{AVR Options} 500@gccoptlist{-mmcu=@var{mcu} -maccumulate-args -mbranch-cost=@var{cost} @gol 501-mcall-prologues -mint8 -mno-interrupts -mrelax -mshort-calls @gol 502-mstrict-X -mtiny-stack} 503 504@emph{Blackfin Options} 505@gccoptlist{-mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} @gol 506-msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer @gol 507-mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly @gol 508-mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library @gol 509-mno-id-shared-library -mshared-library-id=@var{n} @gol 510-mleaf-id-shared-library -mno-leaf-id-shared-library @gol 511-msep-data -mno-sep-data -mlong-calls -mno-long-calls @gol 512-mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram @gol 513-micplb} 514 515@emph{C6X Options} 516@gccoptlist{-mbig-endian -mlittle-endian -march=@var{cpu} @gol 517-msim -msdata=@var{sdata-type}} 518 519@emph{CRIS Options} 520@gccoptlist{-mcpu=@var{cpu} -march=@var{cpu} -mtune=@var{cpu} @gol 521-mmax-stack-frame=@var{n} -melinux-stacksize=@var{n} @gol 522-metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects @gol 523-mstack-align -mdata-align -mconst-align @gol 524-m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt @gol 525-melf -maout -melinux -mlinux -sim -sim2 @gol 526-mmul-bug-workaround -mno-mul-bug-workaround} 527 528@emph{CR16 Options} 529@gccoptlist{-mmac @gol 530-mcr16cplus -mcr16c @gol 531-msim -mint32 -mbit-ops 532-mdata-model=@var{model}} 533 534@emph{Darwin Options} 535@gccoptlist{-all_load -allowable_client -arch -arch_errors_fatal @gol 536-arch_only -bind_at_load -bundle -bundle_loader @gol 537-client_name -compatibility_version -current_version @gol 538-dead_strip @gol 539-dependency-file -dylib_file -dylinker_install_name @gol 540-dynamic -dynamiclib -exported_symbols_list @gol 541-filelist -flat_namespace -force_cpusubtype_ALL @gol 542-force_flat_namespace -headerpad_max_install_names @gol 543-iframework @gol 544-image_base -init -install_name -keep_private_externs @gol 545-multi_module -multiply_defined -multiply_defined_unused @gol 546-noall_load -no_dead_strip_inits_and_terms @gol 547-nofixprebinding -nomultidefs -noprebind -noseglinkedit @gol 548-pagezero_size -prebind -prebind_all_twolevel_modules @gol 549-private_bundle -read_only_relocs -sectalign @gol 550-sectobjectsymbols -whyload -seg1addr @gol 551-sectcreate -sectobjectsymbols -sectorder @gol 552-segaddr -segs_read_only_addr -segs_read_write_addr @gol 553-seg_addr_table -seg_addr_table_filename -seglinkedit @gol 554-segprot -segs_read_only_addr -segs_read_write_addr @gol 555-single_module -static -sub_library -sub_umbrella @gol 556-twolevel_namespace -umbrella -undefined @gol 557-unexported_symbols_list -weak_reference_mismatches @gol 558-whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol 559-mkernel -mone-byte-bool} 560 561@emph{DEC Alpha Options} 562@gccoptlist{-mno-fp-regs -msoft-float -malpha-as -mgas @gol 563-mieee -mieee-with-inexact -mieee-conformant @gol 564-mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode} @gol 565-mtrap-precision=@var{mode} -mbuild-constants @gol 566-mcpu=@var{cpu-type} -mtune=@var{cpu-type} @gol 567-mbwx -mmax -mfix -mcix @gol 568-mfloat-vax -mfloat-ieee @gol 569-mexplicit-relocs -msmall-data -mlarge-data @gol 570-msmall-text -mlarge-text @gol 571-mmemory-latency=@var{time}} 572 573@emph{DEC Alpha/VMS Options} 574@gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix} -mmalloc64} 575 576@emph{FR30 Options} 577@gccoptlist{-msmall-model -mno-lsim} 578 579@emph{FRV Options} 580@gccoptlist{-mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 @gol 581-mhard-float -msoft-float @gol 582-malloc-cc -mfixed-cc -mdword -mno-dword @gol 583-mdouble -mno-double @gol 584-mmedia -mno-media -mmuladd -mno-muladd @gol 585-mfdpic -minline-plt -mgprel-ro -multilib-library-pic @gol 586-mlinked-fp -mlong-calls -malign-labels @gol 587-mlibrary-pic -macc-4 -macc-8 @gol 588-mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move @gol 589-moptimize-membar -mno-optimize-membar @gol 590-mscc -mno-scc -mcond-exec -mno-cond-exec @gol 591-mvliw-branch -mno-vliw-branch @gol 592-mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec @gol 593-mno-nested-cond-exec -mtomcat-stats @gol 594-mTLS -mtls @gol 595-mcpu=@var{cpu}} 596 597@emph{GNU/Linux Options} 598@gccoptlist{-mglibc -muclibc -mbionic -mandroid @gol 599-tno-android-cc -tno-android-ld} 600 601@emph{H8/300 Options} 602@gccoptlist{-mrelax -mh -ms -mn -mint32 -malign-300} 603 604@emph{HPPA Options} 605@gccoptlist{-march=@var{architecture-type} @gol 606-mbig-switch -mdisable-fpregs -mdisable-indexing @gol 607-mfast-indirect-calls -mgas -mgnu-ld -mhp-ld @gol 608-mfixed-range=@var{register-range} @gol 609-mjump-in-delay -mlinker-opt -mlong-calls @gol 610-mlong-load-store -mno-big-switch -mno-disable-fpregs @gol 611-mno-disable-indexing -mno-fast-indirect-calls -mno-gas @gol 612-mno-jump-in-delay -mno-long-load-store @gol 613-mno-portable-runtime -mno-soft-float @gol 614-mno-space-regs -msoft-float -mpa-risc-1-0 @gol 615-mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime @gol 616-mschedule=@var{cpu-type} -mspace-regs -msio -mwsio @gol 617-munix=@var{unix-std} -nolibdld -static -threads} 618 619@emph{i386 and x86-64 Options} 620@gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol 621-mfpmath=@var{unit} @gol 622-masm=@var{dialect} -mno-fancy-math-387 @gol 623-mno-fp-ret-in-387 -msoft-float @gol 624-mno-wide-multiply -mrtd -malign-double @gol 625-mpreferred-stack-boundary=@var{num} @gol 626-mincoming-stack-boundary=@var{num} @gol 627-mcld -mcx16 -msahf -mmovbe -mcrc32 @gol 628-mrecip -mrecip=@var{opt} @gol 629-mvzeroupper -mprefer-avx128 @gol 630-mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx @gol 631-mavx2 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma @gol 632-msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt @gol 633-mbmi2 -mlwp -mthreads -mno-align-stringops -minline-all-stringops @gol 634-minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol 635-mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol 636-m96bit-long-double -mregparm=@var{num} -msseregparm @gol 637-mveclibabi=@var{type} -mvect8-ret-in-mem @gol 638-mpc32 -mpc64 -mpc80 -mstackrealign @gol 639-momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs @gol 640-mcmodel=@var{code-model} -mabi=@var{name} @gol 641-m32 -m64 -mx32 -mlarge-data-threshold=@var{num} @gol 642-msse2avx -mfentry -m8bit-idiv @gol 643-mavx256-split-unaligned-load -mavx256-split-unaligned-store} 644 645@emph{i386 and x86-64 Windows Options} 646@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol 647-mnop-fun-dllimport -mthread @gol 648-municode -mwin32 -mwindows -fno-set-stack-executable} 649 650@emph{IA-64 Options} 651@gccoptlist{-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol 652-mvolatile-asm-stop -mregister-names -msdata -mno-sdata @gol 653-mconstant-gp -mauto-pic -mfused-madd @gol 654-minline-float-divide-min-latency @gol 655-minline-float-divide-max-throughput @gol 656-mno-inline-float-divide @gol 657-minline-int-divide-min-latency @gol 658-minline-int-divide-max-throughput @gol 659-mno-inline-int-divide @gol 660-minline-sqrt-min-latency -minline-sqrt-max-throughput @gol 661-mno-inline-sqrt @gol 662-mdwarf2-asm -mearly-stop-bits @gol 663-mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol 664-mtune=@var{cpu-type} -milp32 -mlp64 @gol 665-msched-br-data-spec -msched-ar-data-spec -msched-control-spec @gol 666-msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol 667-msched-spec-ldc -msched-spec-control-ldc @gol 668-msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns @gol 669-msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path @gol 670-msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost @gol 671-msched-max-memory-insns-hard-limit -msched-max-memory-insns=@var{max-insns}} 672 673@emph{IA-64/VMS Options} 674@gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix} -mmalloc64} 675 676@emph{LM32 Options} 677@gccoptlist{-mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled @gol 678-msign-extend-enabled -muser-enabled} 679 680@emph{M32R/D Options} 681@gccoptlist{-m32r2 -m32rx -m32r @gol 682-mdebug @gol 683-malign-loops -mno-align-loops @gol 684-missue-rate=@var{number} @gol 685-mbranch-cost=@var{number} @gol 686-mmodel=@var{code-size-model-type} @gol 687-msdata=@var{sdata-type} @gol 688-mno-flush-func -mflush-func=@var{name} @gol 689-mno-flush-trap -mflush-trap=@var{number} @gol 690-G @var{num}} 691 692@emph{M32C Options} 693@gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}} 694 695@emph{M680x0 Options} 696@gccoptlist{-march=@var{arch} -mcpu=@var{cpu} -mtune=@var{tune} 697-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 @gol 698-m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 @gol 699-mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 @gol 700-mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort @gol 701-mno-short -mhard-float -m68881 -msoft-float -mpcrel @gol 702-malign-int -mstrict-align -msep-data -mno-sep-data @gol 703-mshared-library-id=n -mid-shared-library -mno-id-shared-library @gol 704-mxgot -mno-xgot} 705 706@emph{MCore Options} 707@gccoptlist{-mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates @gol 708-mno-relax-immediates -mwide-bitfields -mno-wide-bitfields @gol 709-m4byte-functions -mno-4byte-functions -mcallgraph-data @gol 710-mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim @gol 711-mlittle-endian -mbig-endian -m210 -m340 -mstack-increment} 712 713@emph{MeP Options} 714@gccoptlist{-mabsdiff -mall-opts -maverage -mbased=@var{n} -mbitops @gol 715-mc=@var{n} -mclip -mconfig=@var{name} -mcop -mcop32 -mcop64 -mivc2 @gol 716-mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax @gol 717-mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf @gol 718-mtiny=@var{n}} 719 720@emph{MicroBlaze Options} 721@gccoptlist{-msoft-float -mhard-float -msmall-divides -mcpu=@var{cpu} @gol 722-mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift @gol 723-mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss @gol 724-mxl-multiply-high -mxl-float-convert -mxl-float-sqrt @gol 725-mxl-mode-@var{app-model}} 726 727@emph{MIPS Options} 728@gccoptlist{-EL -EB -march=@var{arch} -mtune=@var{arch} @gol 729-mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 @gol 730-mips64 -mips64r2 @gol 731-mips16 -mno-mips16 -mflip-mips16 @gol 732-minterlink-mips16 -mno-interlink-mips16 @gol 733-mabi=@var{abi} -mabicalls -mno-abicalls @gol 734-mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot @gol 735-mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float @gol 736-msingle-float -mdouble-float -mdsp -mno-dsp -mdspr2 -mno-dspr2 @gol 737-mfpu=@var{fpu-type} @gol 738-msmartmips -mno-smartmips @gol 739-mpaired-single -mno-paired-single -mdmx -mno-mdmx @gol 740-mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc @gol 741-mlong64 -mlong32 -msym32 -mno-sym32 @gol 742-G@var{num} -mlocal-sdata -mno-local-sdata @gol 743-mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt @gol 744-membedded-data -mno-embedded-data @gol 745-muninit-const-in-rodata -mno-uninit-const-in-rodata @gol 746-mcode-readable=@var{setting} @gol 747-msplit-addresses -mno-split-addresses @gol 748-mexplicit-relocs -mno-explicit-relocs @gol 749-mcheck-zero-division -mno-check-zero-division @gol 750-mdivide-traps -mdivide-breaks @gol 751-mmemcpy -mno-memcpy -mlong-calls -mno-long-calls @gol 752-mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp @gol 753-mfix-24k -mno-fix-24k @gol 754-mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 @gol 755-mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120 @gol 756-mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 @gol 757-mflush-func=@var{func} -mno-flush-func @gol 758-mbranch-cost=@var{num} -mbranch-likely -mno-branch-likely @gol 759-mfp-exceptions -mno-fp-exceptions @gol 760-mvr4130-align -mno-vr4130-align -msynci -mno-synci @gol 761-mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address} 762 763@emph{MMIX Options} 764@gccoptlist{-mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu @gol 765-mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols @gol 766-melf -mbranch-predict -mno-branch-predict -mbase-addresses @gol 767-mno-base-addresses -msingle-exit -mno-single-exit} 768 769@emph{MN10300 Options} 770@gccoptlist{-mmult-bug -mno-mult-bug @gol 771-mno-am33 -mam33 -mam33-2 -mam34 @gol 772-mtune=@var{cpu-type} @gol 773-mreturn-pointer-on-d0 @gol 774-mno-crt0 -mrelax -mliw -msetlb} 775 776@emph{PDP-11 Options} 777@gccoptlist{-mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 @gol 778-mbcopy -mbcopy-builtin -mint32 -mno-int16 @gol 779-mint16 -mno-int32 -mfloat32 -mno-float64 @gol 780-mfloat64 -mno-float32 -mabshi -mno-abshi @gol 781-mbranch-expensive -mbranch-cheap @gol 782-munix-asm -mdec-asm} 783 784@emph{picoChip Options} 785@gccoptlist{-mae=@var{ae_type} -mvliw-lookahead=@var{N} @gol 786-msymbol-as-address -mno-inefficient-warnings} 787 788@emph{PowerPC Options} 789See RS/6000 and PowerPC Options. 790 791@emph{RL78 Options} 792@gccoptlist{-msim -mmul=none -mmul=g13 -mmul=rl78} 793 794@emph{RS/6000 and PowerPC Options} 795@gccoptlist{-mcpu=@var{cpu-type} @gol 796-mtune=@var{cpu-type} @gol 797-mcmodel=@var{code-model} @gol 798-mpower -mno-power -mpower2 -mno-power2 @gol 799-mpowerpc -mpowerpc64 -mno-powerpc @gol 800-maltivec -mno-altivec @gol 801-mpowerpc-gpopt -mno-powerpc-gpopt @gol 802-mpowerpc-gfxopt -mno-powerpc-gfxopt @gol 803-mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd @gol 804-mfprnd -mno-fprnd @gol 805-mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp @gol 806-mnew-mnemonics -mold-mnemonics @gol 807-mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc @gol 808-m64 -m32 -mxl-compat -mno-xl-compat -mpe @gol 809-malign-power -malign-natural @gol 810-msoft-float -mhard-float -mmultiple -mno-multiple @gol 811-msingle-float -mdouble-float -msimple-fpu @gol 812-mstring -mno-string -mupdate -mno-update @gol 813-mavoid-indexed-addresses -mno-avoid-indexed-addresses @gol 814-mfused-madd -mno-fused-madd -mbit-align -mno-bit-align @gol 815-mstrict-align -mno-strict-align -mrelocatable @gol 816-mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol 817-mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol 818-mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base @gol 819-mprioritize-restricted-insns=@var{priority} @gol 820-msched-costly-dep=@var{dependence_type} @gol 821-minsert-sched-nops=@var{scheme} @gol 822-mcall-sysv -mcall-netbsd @gol 823-maix-struct-return -msvr4-struct-return @gol 824-mabi=@var{abi-type} -msecure-plt -mbss-plt @gol 825-mblock-move-inline-limit=@var{num} @gol 826-misel -mno-isel @gol 827-misel=yes -misel=no @gol 828-mspe -mno-spe @gol 829-mspe=yes -mspe=no @gol 830-mpaired @gol 831-mgen-cell-microcode -mwarn-cell-microcode @gol 832-mvrsave -mno-vrsave @gol 833-mmulhw -mno-mulhw @gol 834-mdlmzb -mno-dlmzb @gol 835-mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol 836-mprototype -mno-prototype @gol 837-msim -mmvme -mads -myellowknife -memb -msdata @gol 838-msdata=@var{opt} -mvxworks -G @var{num} -pthread @gol 839-mrecip -mrecip=@var{opt} -mno-recip -mrecip-precision @gol 840-mno-recip-precision @gol 841-mveclibabi=@var{type} -mfriz -mno-friz @gol 842-mpointers-to-nested-functions -mno-pointers-to-nested-functions @gol 843-msave-toc-indirect -mno-save-toc-indirect} 844 845@emph{RX Options} 846@gccoptlist{-m64bit-doubles -m32bit-doubles -fpu -nofpu@gol 847-mcpu=@gol 848-mbig-endian-data -mlittle-endian-data @gol 849-msmall-data @gol 850-msim -mno-sim@gol 851-mas100-syntax -mno-as100-syntax@gol 852-mrelax@gol 853-mmax-constant-size=@gol 854-mint-register=@gol 855-mpid@gol 856-msave-acc-in-interrupts} 857 858@emph{S/390 and zSeries Options} 859@gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol 860-mhard-float -msoft-float -mhard-dfp -mno-hard-dfp @gol 861-mlong-double-64 -mlong-double-128 @gol 862-mbackchain -mno-backchain -mpacked-stack -mno-packed-stack @gol 863-msmall-exec -mno-small-exec -mmvcle -mno-mvcle @gol 864-m64 -m31 -mdebug -mno-debug -mesa -mzarch @gol 865-mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd @gol 866-mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard} 867 868@emph{Score Options} 869@gccoptlist{-meb -mel @gol 870-mnhwloop @gol 871-muls @gol 872-mmac @gol 873-mscore5 -mscore5u -mscore7 -mscore7d} 874 875@emph{SH Options} 876@gccoptlist{-m1 -m2 -m2e @gol 877-m2a-nofpu -m2a-single-only -m2a-single -m2a @gol 878-m3 -m3e @gol 879-m4-nofpu -m4-single-only -m4-single -m4 @gol 880-m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol 881-m5-64media -m5-64media-nofpu @gol 882-m5-32media -m5-32media-nofpu @gol 883-m5-compact -m5-compact-nofpu @gol 884-mb -ml -mdalign -mrelax @gol 885-mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave @gol 886-mieee -mno-ieee -mbitops -misize -minline-ic_invalidate -mpadstruct @gol 887-mspace -mprefergot -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol 888-mdivsi3_libfunc=@var{name} -mfixed-range=@var{register-range} @gol 889-madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol 890-maccumulate-outgoing-args -minvalid-symbols -msoft-atomic @gol 891-mbranch-cost=@var{num} -mcbranchdi -mcmpeqdi -mfused-madd -mpretend-cmove} 892 893@emph{Solaris 2 Options} 894@gccoptlist{-mimpure-text -mno-impure-text @gol 895-pthreads -pthread} 896 897@emph{SPARC Options} 898@gccoptlist{-mcpu=@var{cpu-type} @gol 899-mtune=@var{cpu-type} @gol 900-mcmodel=@var{code-model} @gol 901-mmemory-model=@var{mem-model} @gol 902-m32 -m64 -mapp-regs -mno-app-regs @gol 903-mfaster-structs -mno-faster-structs -mflat -mno-flat @gol 904-mfpu -mno-fpu -mhard-float -msoft-float @gol 905-mhard-quad-float -msoft-quad-float @gol 906-mstack-bias -mno-stack-bias @gol 907-munaligned-doubles -mno-unaligned-doubles @gol 908-mv8plus -mno-v8plus -mvis -mno-vis @gol 909-mvis2 -mno-vis2 -mvis3 -mno-vis3 @gol 910-mfmaf -mno-fmaf -mpopc -mno-popc @gol 911-mfix-at697f} 912 913@emph{SPU Options} 914@gccoptlist{-mwarn-reloc -merror-reloc @gol 915-msafe-dma -munsafe-dma @gol 916-mbranch-hints @gol 917-msmall-mem -mlarge-mem -mstdmain @gol 918-mfixed-range=@var{register-range} @gol 919-mea32 -mea64 @gol 920-maddress-space-conversion -mno-address-space-conversion @gol 921-mcache-size=@var{cache-size} @gol 922-matomic-updates -mno-atomic-updates} 923 924@emph{System V Options} 925@gccoptlist{-Qy -Qn -YP,@var{paths} -Ym,@var{dir}} 926 927@emph{TILE-Gx Options} 928@gccoptlist{-mcpu=@var{cpu} -m32 -m64} 929 930@emph{TILEPro Options} 931@gccoptlist{-mcpu=@var{cpu} -m32} 932 933@emph{V850 Options} 934@gccoptlist{-mlong-calls -mno-long-calls -mep -mno-ep @gol 935-mprolog-function -mno-prolog-function -mspace @gol 936-mtda=@var{n} -msda=@var{n} -mzda=@var{n} @gol 937-mapp-regs -mno-app-regs @gol 938-mdisable-callt -mno-disable-callt @gol 939-mv850e2v3 @gol 940-mv850e2 @gol 941-mv850e1 -mv850es @gol 942-mv850e @gol 943-mv850 -mbig-switch} 944 945@emph{VAX Options} 946@gccoptlist{-mg -mgnu -munix} 947 948@emph{VxWorks Options} 949@gccoptlist{-mrtp -non-static -Bstatic -Bdynamic @gol 950-Xbind-lazy -Xbind-now} 951 952@emph{x86-64 Options} 953See i386 and x86-64 Options. 954 955@emph{Xstormy16 Options} 956@gccoptlist{-msim} 957 958@emph{Xtensa Options} 959@gccoptlist{-mconst16 -mno-const16 @gol 960-mfused-madd -mno-fused-madd @gol 961-mforce-no-pic @gol 962-mserialize-volatile -mno-serialize-volatile @gol 963-mtext-section-literals -mno-text-section-literals @gol 964-mtarget-align -mno-target-align @gol 965-mlongcalls -mno-longcalls} 966 967@emph{zSeries Options} 968See S/390 and zSeries Options. 969 970@item Code Generation Options 971@xref{Code Gen Options,,Options for Code Generation Conventions}. 972@gccoptlist{-fcall-saved-@var{reg} -fcall-used-@var{reg} @gol 973-ffixed-@var{reg} -fexceptions @gol 974-fnon-call-exceptions -funwind-tables @gol 975-fasynchronous-unwind-tables @gol 976-finhibit-size-directive -finstrument-functions @gol 977-finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol 978-finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} @gol 979-fno-common -fno-ident @gol 980-fpcc-struct-return -fpic -fPIC -fpie -fPIE @gol 981-fno-jump-tables @gol 982-frecord-gcc-switches @gol 983-freg-struct-return -fshort-enums @gol 984-fshort-double -fshort-wchar @gol 985-fverbose-asm -fpack-struct[=@var{n}] -fstack-check @gol 986-fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol 987-fno-stack-limit -fsplit-stack @gol 988-fleading-underscore -ftls-model=@var{model} @gol 989-ftrapv -fwrapv -fbounds-check @gol 990-fvisibility -fstrict-volatile-bitfields} 991@end table 992 993@menu 994* Overall Options:: Controlling the kind of output: 995 an executable, object files, assembler files, 996 or preprocessed source. 997* C Dialect Options:: Controlling the variant of C language compiled. 998* C++ Dialect Options:: Variations on C++. 999* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 1000 and Objective-C++. 1001* Language Independent Options:: Controlling how diagnostics should be 1002 formatted. 1003* Warning Options:: How picky should the compiler be? 1004* Debugging Options:: Symbol tables, measurements, and debugging dumps. 1005* Optimize Options:: How much optimization? 1006* Preprocessor Options:: Controlling header files and macro definitions. 1007 Also, getting dependency information for Make. 1008* Assembler Options:: Passing options to the assembler. 1009* Link Options:: Specifying libraries and so on. 1010* Directory Options:: Where to find header files and libraries. 1011 Where to find the compiler executable files. 1012* Spec Files:: How to pass switches to sub-processes. 1013* Target Options:: Running a cross-compiler, or an old version of GCC. 1014@end menu 1015 1016@node Overall Options 1017@section Options Controlling the Kind of Output 1018 1019Compilation can involve up to four stages: preprocessing, compilation 1020proper, assembly and linking, always in that order. GCC is capable of 1021preprocessing and compiling several files either into several 1022assembler input files, or into one assembler input file; then each 1023assembler input file produces an object file, and linking combines all 1024the object files (those newly compiled, and those specified as input) 1025into an executable file. 1026 1027@cindex file name suffix 1028For any given input file, the file name suffix determines what kind of 1029compilation is done: 1030 1031@table @gcctabopt 1032@item @var{file}.c 1033C source code that must be preprocessed. 1034 1035@item @var{file}.i 1036C source code that should not be preprocessed. 1037 1038@item @var{file}.ii 1039C++ source code that should not be preprocessed. 1040 1041@item @var{file}.m 1042Objective-C source code. Note that you must link with the @file{libobjc} 1043library to make an Objective-C program work. 1044 1045@item @var{file}.mi 1046Objective-C source code that should not be preprocessed. 1047 1048@item @var{file}.mm 1049@itemx @var{file}.M 1050Objective-C++ source code. Note that you must link with the @file{libobjc} 1051library to make an Objective-C++ program work. Note that @samp{.M} refers 1052to a literal capital M@. 1053 1054@item @var{file}.mii 1055Objective-C++ source code that should not be preprocessed. 1056 1057@item @var{file}.h 1058C, C++, Objective-C or Objective-C++ header file to be turned into a 1059precompiled header (default), or C, C++ header file to be turned into an 1060Ada spec (via the @option{-fdump-ada-spec} switch). 1061 1062@item @var{file}.cc 1063@itemx @var{file}.cp 1064@itemx @var{file}.cxx 1065@itemx @var{file}.cpp 1066@itemx @var{file}.CPP 1067@itemx @var{file}.c++ 1068@itemx @var{file}.C 1069C++ source code that must be preprocessed. Note that in @samp{.cxx}, 1070the last two letters must both be literally @samp{x}. Likewise, 1071@samp{.C} refers to a literal capital C@. 1072 1073@item @var{file}.mm 1074@itemx @var{file}.M 1075Objective-C++ source code that must be preprocessed. 1076 1077@item @var{file}.mii 1078Objective-C++ source code that should not be preprocessed. 1079 1080@item @var{file}.hh 1081@itemx @var{file}.H 1082@itemx @var{file}.hp 1083@itemx @var{file}.hxx 1084@itemx @var{file}.hpp 1085@itemx @var{file}.HPP 1086@itemx @var{file}.h++ 1087@itemx @var{file}.tcc 1088C++ header file to be turned into a precompiled header or Ada spec. 1089 1090@item @var{file}.f 1091@itemx @var{file}.for 1092@itemx @var{file}.ftn 1093Fixed form Fortran source code that should not be preprocessed. 1094 1095@item @var{file}.F 1096@itemx @var{file}.FOR 1097@itemx @var{file}.fpp 1098@itemx @var{file}.FPP 1099@itemx @var{file}.FTN 1100Fixed form Fortran source code that must be preprocessed (with the traditional 1101preprocessor). 1102 1103@item @var{file}.f90 1104@itemx @var{file}.f95 1105@itemx @var{file}.f03 1106@itemx @var{file}.f08 1107Free form Fortran source code that should not be preprocessed. 1108 1109@item @var{file}.F90 1110@itemx @var{file}.F95 1111@itemx @var{file}.F03 1112@itemx @var{file}.F08 1113Free form Fortran source code that must be preprocessed (with the 1114traditional preprocessor). 1115 1116@item @var{file}.go 1117Go source code. 1118 1119@c FIXME: Descriptions of Java file types. 1120@c @var{file}.java 1121@c @var{file}.class 1122@c @var{file}.zip 1123@c @var{file}.jar 1124 1125@item @var{file}.ads 1126Ada source code file that contains a library unit declaration (a 1127declaration of a package, subprogram, or generic, or a generic 1128instantiation), or a library unit renaming declaration (a package, 1129generic, or subprogram renaming declaration). Such files are also 1130called @dfn{specs}. 1131 1132@item @var{file}.adb 1133Ada source code file containing a library unit body (a subprogram or 1134package body). Such files are also called @dfn{bodies}. 1135 1136@c GCC also knows about some suffixes for languages not yet included: 1137@c Pascal: 1138@c @var{file}.p 1139@c @var{file}.pas 1140@c Ratfor: 1141@c @var{file}.r 1142 1143@item @var{file}.s 1144Assembler code. 1145 1146@item @var{file}.S 1147@itemx @var{file}.sx 1148Assembler code that must be preprocessed. 1149 1150@item @var{other} 1151An object file to be fed straight into linking. 1152Any file name with no recognized suffix is treated this way. 1153@end table 1154 1155@opindex x 1156You can specify the input language explicitly with the @option{-x} option: 1157 1158@table @gcctabopt 1159@item -x @var{language} 1160Specify explicitly the @var{language} for the following input files 1161(rather than letting the compiler choose a default based on the file 1162name suffix). This option applies to all following input files until 1163the next @option{-x} option. Possible values for @var{language} are: 1164@smallexample 1165c c-header cpp-output 1166c++ c++-header c++-cpp-output 1167objective-c objective-c-header objective-c-cpp-output 1168objective-c++ objective-c++-header objective-c++-cpp-output 1169assembler assembler-with-cpp 1170ada 1171f77 f77-cpp-input f95 f95-cpp-input 1172go 1173java 1174@end smallexample 1175 1176@item -x none 1177Turn off any specification of a language, so that subsequent files are 1178handled according to their file name suffixes (as they are if @option{-x} 1179has not been used at all). 1180 1181@item -pass-exit-codes 1182@opindex pass-exit-codes 1183Normally the @command{gcc} program will exit with the code of 1 if any 1184phase of the compiler returns a non-success return code. If you specify 1185@option{-pass-exit-codes}, the @command{gcc} program will instead return with 1186numerically highest error produced by any phase that returned an error 1187indication. The C, C++, and Fortran frontends return 4, if an internal 1188compiler error is encountered. 1189@end table 1190 1191If you only want some of the stages of compilation, you can use 1192@option{-x} (or filename suffixes) to tell @command{gcc} where to start, and 1193one of the options @option{-c}, @option{-S}, or @option{-E} to say where 1194@command{gcc} is to stop. Note that some combinations (for example, 1195@samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all. 1196 1197@table @gcctabopt 1198@item -c 1199@opindex c 1200Compile or assemble the source files, but do not link. The linking 1201stage simply is not done. The ultimate output is in the form of an 1202object file for each source file. 1203 1204By default, the object file name for a source file is made by replacing 1205the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}. 1206 1207Unrecognized input files, not requiring compilation or assembly, are 1208ignored. 1209 1210@item -S 1211@opindex S 1212Stop after the stage of compilation proper; do not assemble. The output 1213is in the form of an assembler code file for each non-assembler input 1214file specified. 1215 1216By default, the assembler file name for a source file is made by 1217replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}. 1218 1219Input files that don't require compilation are ignored. 1220 1221@item -E 1222@opindex E 1223Stop after the preprocessing stage; do not run the compiler proper. The 1224output is in the form of preprocessed source code, which is sent to the 1225standard output. 1226 1227Input files that don't require preprocessing are ignored. 1228 1229@cindex output file option 1230@item -o @var{file} 1231@opindex o 1232Place output in file @var{file}. This applies regardless to whatever 1233sort of output is being produced, whether it be an executable file, 1234an object file, an assembler file or preprocessed C code. 1235 1236If @option{-o} is not specified, the default is to put an executable 1237file in @file{a.out}, the object file for 1238@file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its 1239assembler file in @file{@var{source}.s}, a precompiled header file in 1240@file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on 1241standard output. 1242 1243@item -v 1244@opindex v 1245Print (on standard error output) the commands executed to run the stages 1246of compilation. Also print the version number of the compiler driver 1247program and of the preprocessor and the compiler proper. 1248 1249@item -### 1250@opindex ### 1251Like @option{-v} except the commands are not executed and arguments 1252are quoted unless they contain only alphanumeric characters or @code{./-_}. 1253This is useful for shell scripts to capture the driver-generated command lines. 1254 1255@item -pipe 1256@opindex pipe 1257Use pipes rather than temporary files for communication between the 1258various stages of compilation. This fails to work on some systems where 1259the assembler is unable to read from a pipe; but the GNU assembler has 1260no trouble. 1261 1262@item --help 1263@opindex help 1264Print (on the standard output) a description of the command-line options 1265understood by @command{gcc}. If the @option{-v} option is also specified 1266then @option{--help} will also be passed on to the various processes 1267invoked by @command{gcc}, so that they can display the command-line options 1268they accept. If the @option{-Wextra} option has also been specified 1269(prior to the @option{--help} option), then command-line options that 1270have no documentation associated with them will also be displayed. 1271 1272@item --target-help 1273@opindex target-help 1274Print (on the standard output) a description of target-specific command-line 1275options for each tool. For some targets extra target-specific 1276information may also be printed. 1277 1278@item --help=@{@var{class}@r{|[}^@r{]}@var{qualifier}@}@r{[},@dots{}@r{]} 1279Print (on the standard output) a description of the command-line 1280options understood by the compiler that fit into all specified classes 1281and qualifiers. These are the supported classes: 1282 1283@table @asis 1284@item @samp{optimizers} 1285This will display all of the optimization options supported by the 1286compiler. 1287 1288@item @samp{warnings} 1289This will display all of the options controlling warning messages 1290produced by the compiler. 1291 1292@item @samp{target} 1293This will display target-specific options. Unlike the 1294@option{--target-help} option however, target-specific options of the 1295linker and assembler will not be displayed. This is because those 1296tools do not currently support the extended @option{--help=} syntax. 1297 1298@item @samp{params} 1299This will display the values recognized by the @option{--param} 1300option. 1301 1302@item @var{language} 1303This will display the options supported for @var{language}, where 1304@var{language} is the name of one of the languages supported in this 1305version of GCC. 1306 1307@item @samp{common} 1308This will display the options that are common to all languages. 1309@end table 1310 1311These are the supported qualifiers: 1312 1313@table @asis 1314@item @samp{undocumented} 1315Display only those options that are undocumented. 1316 1317@item @samp{joined} 1318Display options taking an argument that appears after an equal 1319sign in the same continuous piece of text, such as: 1320@samp{--help=target}. 1321 1322@item @samp{separate} 1323Display options taking an argument that appears as a separate word 1324following the original option, such as: @samp{-o output-file}. 1325@end table 1326 1327Thus for example to display all the undocumented target-specific 1328switches supported by the compiler the following can be used: 1329 1330@smallexample 1331--help=target,undocumented 1332@end smallexample 1333 1334The sense of a qualifier can be inverted by prefixing it with the 1335@samp{^} character, so for example to display all binary warning 1336options (i.e., ones that are either on or off and that do not take an 1337argument) that have a description, use: 1338 1339@smallexample 1340--help=warnings,^joined,^undocumented 1341@end smallexample 1342 1343The argument to @option{--help=} should not consist solely of inverted 1344qualifiers. 1345 1346Combining several classes is possible, although this usually 1347restricts the output by so much that there is nothing to display. One 1348case where it does work however is when one of the classes is 1349@var{target}. So for example to display all the target-specific 1350optimization options the following can be used: 1351 1352@smallexample 1353--help=target,optimizers 1354@end smallexample 1355 1356The @option{--help=} option can be repeated on the command line. Each 1357successive use will display its requested class of options, skipping 1358those that have already been displayed. 1359 1360If the @option{-Q} option appears on the command line before the 1361@option{--help=} option, then the descriptive text displayed by 1362@option{--help=} is changed. Instead of describing the displayed 1363options, an indication is given as to whether the option is enabled, 1364disabled or set to a specific value (assuming that the compiler 1365knows this at the point where the @option{--help=} option is used). 1366 1367Here is a truncated example from the ARM port of @command{gcc}: 1368 1369@smallexample 1370 % gcc -Q -mabi=2 --help=target -c 1371 The following options are target specific: 1372 -mabi= 2 1373 -mabort-on-noreturn [disabled] 1374 -mapcs [disabled] 1375@end smallexample 1376 1377The output is sensitive to the effects of previous command-line 1378options, so for example it is possible to find out which optimizations 1379are enabled at @option{-O2} by using: 1380 1381@smallexample 1382-Q -O2 --help=optimizers 1383@end smallexample 1384 1385Alternatively you can discover which binary optimizations are enabled 1386by @option{-O3} by using: 1387 1388@smallexample 1389gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts 1390gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts 1391diff /tmp/O2-opts /tmp/O3-opts | grep enabled 1392@end smallexample 1393 1394@item -no-canonical-prefixes 1395@opindex no-canonical-prefixes 1396Do not expand any symbolic links, resolve references to @samp{/../} 1397or @samp{/./}, or make the path absolute when generating a relative 1398prefix. 1399 1400@item --version 1401@opindex version 1402Display the version number and copyrights of the invoked GCC@. 1403 1404@item -wrapper 1405@opindex wrapper 1406Invoke all subcommands under a wrapper program. The name of the 1407wrapper program and its parameters are passed as a comma separated 1408list. 1409 1410@smallexample 1411gcc -c t.c -wrapper gdb,--args 1412@end smallexample 1413 1414This will invoke all subprograms of @command{gcc} under 1415@samp{gdb --args}, thus the invocation of @command{cc1} will be 1416@samp{gdb --args cc1 @dots{}}. 1417 1418@item -fplugin=@var{name}.so 1419Load the plugin code in file @var{name}.so, assumed to be a 1420shared object to be dlopen'd by the compiler. The base name of 1421the shared object file is used to identify the plugin for the 1422purposes of argument parsing (See 1423@option{-fplugin-arg-@var{name}-@var{key}=@var{value}} below). 1424Each plugin should define the callback functions specified in the 1425Plugins API. 1426 1427@item -fplugin-arg-@var{name}-@var{key}=@var{value} 1428Define an argument called @var{key} with a value of @var{value} 1429for the plugin called @var{name}. 1430 1431@item -fdump-ada-spec@r{[}-slim@r{]} 1432@opindex fdump-ada-spec 1433For C and C++ source and include files, generate corresponding Ada specs. 1434@xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn, 1435GNAT User's Guide}, which provides detailed documentation on this feature. 1436 1437@item -fdump-go-spec=@var{file} 1438@opindex fdump-go-spec 1439For input files in any language, generate corresponding Go 1440declarations in @var{file}. This generates Go @code{const}, 1441@code{type}, @code{var}, and @code{func} declarations which may be a 1442useful way to start writing a Go interface to code written in some 1443other language. 1444 1445@include @value{srcdir}/../libiberty/at-file.texi 1446@end table 1447 1448@node Invoking G++ 1449@section Compiling C++ Programs 1450 1451@cindex suffixes for C++ source 1452@cindex C++ source file suffixes 1453C++ source files conventionally use one of the suffixes @samp{.C}, 1454@samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or 1455@samp{.cxx}; C++ header files often use @samp{.hh}, @samp{.hpp}, 1456@samp{.H}, or (for shared template code) @samp{.tcc}; and 1457preprocessed C++ files use the suffix @samp{.ii}. GCC recognizes 1458files with these names and compiles them as C++ programs even if you 1459call the compiler the same way as for compiling C programs (usually 1460with the name @command{gcc}). 1461 1462@findex g++ 1463@findex c++ 1464However, the use of @command{gcc} does not add the C++ library. 1465@command{g++} is a program that calls GCC and treats @samp{.c}, 1466@samp{.h} and @samp{.i} files as C++ source files instead of C source 1467files unless @option{-x} is used, and automatically specifies linking 1468against the C++ library. This program is also useful when 1469precompiling a C header file with a @samp{.h} extension for use in C++ 1470compilations. On many systems, @command{g++} is also installed with 1471the name @command{c++}. 1472 1473@cindex invoking @command{g++} 1474When you compile C++ programs, you may specify many of the same 1475command-line options that you use for compiling programs in any 1476language; or command-line options meaningful for C and related 1477languages; or options that are meaningful only for C++ programs. 1478@xref{C Dialect Options,,Options Controlling C Dialect}, for 1479explanations of options for languages related to C@. 1480@xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for 1481explanations of options that are meaningful only for C++ programs. 1482 1483@node C Dialect Options 1484@section Options Controlling C Dialect 1485@cindex dialect options 1486@cindex language dialect options 1487@cindex options, dialect 1488 1489The following options control the dialect of C (or languages derived 1490from C, such as C++, Objective-C and Objective-C++) that the compiler 1491accepts: 1492 1493@table @gcctabopt 1494@cindex ANSI support 1495@cindex ISO support 1496@item -ansi 1497@opindex ansi 1498In C mode, this is equivalent to @samp{-std=c90}. In C++ mode, it is 1499equivalent to @samp{-std=c++98}. 1500 1501This turns off certain features of GCC that are incompatible with ISO 1502C90 (when compiling C code), or of standard C++ (when compiling C++ code), 1503such as the @code{asm} and @code{typeof} keywords, and 1504predefined macros such as @code{unix} and @code{vax} that identify the 1505type of system you are using. It also enables the undesirable and 1506rarely used ISO trigraph feature. For the C compiler, 1507it disables recognition of C++ style @samp{//} comments as well as 1508the @code{inline} keyword. 1509 1510The alternate keywords @code{__asm__}, @code{__extension__}, 1511@code{__inline__} and @code{__typeof__} continue to work despite 1512@option{-ansi}. You would not want to use them in an ISO C program, of 1513course, but it is useful to put them in header files that might be included 1514in compilations done with @option{-ansi}. Alternate predefined macros 1515such as @code{__unix__} and @code{__vax__} are also available, with or 1516without @option{-ansi}. 1517 1518The @option{-ansi} option does not cause non-ISO programs to be 1519rejected gratuitously. For that, @option{-pedantic} is required in 1520addition to @option{-ansi}. @xref{Warning Options}. 1521 1522The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi} 1523option is used. Some header files may notice this macro and refrain 1524from declaring certain functions or defining certain macros that the 1525ISO standard doesn't call for; this is to avoid interfering with any 1526programs that might use these names for other things. 1527 1528Functions that would normally be built in but do not have semantics 1529defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in 1530functions when @option{-ansi} is used. @xref{Other Builtins,,Other 1531built-in functions provided by GCC}, for details of the functions 1532affected. 1533 1534@item -std= 1535@opindex std 1536Determine the language standard. @xref{Standards,,Language Standards 1537Supported by GCC}, for details of these standard versions. This option 1538is currently only supported when compiling C or C++. 1539 1540The compiler can accept several base standards, such as @samp{c90} or 1541@samp{c++98}, and GNU dialects of those standards, such as 1542@samp{gnu90} or @samp{gnu++98}. By specifying a base standard, the 1543compiler will accept all programs following that standard and those 1544using GNU extensions that do not contradict it. For example, 1545@samp{-std=c90} turns off certain features of GCC that are 1546incompatible with ISO C90, such as the @code{asm} and @code{typeof} 1547keywords, but not other GNU extensions that do not have a meaning in 1548ISO C90, such as omitting the middle term of a @code{?:} 1549expression. On the other hand, by specifying a GNU dialect of a 1550standard, all features the compiler support are enabled, even when 1551those features change the meaning of the base standard and some 1552strict-conforming programs may be rejected. The particular standard 1553is used by @option{-pedantic} to identify which features are GNU 1554extensions given that version of the standard. For example 1555@samp{-std=gnu90 -pedantic} would warn about C++ style @samp{//} 1556comments, while @samp{-std=gnu99 -pedantic} would not. 1557 1558A value for this option must be provided; possible values are 1559 1560@table @samp 1561@item c90 1562@itemx c89 1563@itemx iso9899:1990 1564Support all ISO C90 programs (certain GNU extensions that conflict 1565with ISO C90 are disabled). Same as @option{-ansi} for C code. 1566 1567@item iso9899:199409 1568ISO C90 as modified in amendment 1. 1569 1570@item c99 1571@itemx c9x 1572@itemx iso9899:1999 1573@itemx iso9899:199x 1574ISO C99. Note that this standard is not yet fully supported; see 1575@w{@uref{http://gcc.gnu.org/gcc-4.7/c99status.html}} for more information. The 1576names @samp{c9x} and @samp{iso9899:199x} are deprecated. 1577 1578@item c11 1579@itemx c1x 1580@itemx iso9899:2011 1581ISO C11, the 2011 revision of the ISO C standard. 1582Support is incomplete and experimental. The name @samp{c1x} is 1583deprecated. 1584 1585@item gnu90 1586@itemx gnu89 1587GNU dialect of ISO C90 (including some C99 features). This 1588is the default for C code. 1589 1590@item gnu99 1591@itemx gnu9x 1592GNU dialect of ISO C99. When ISO C99 is fully implemented in GCC, 1593this will become the default. The name @samp{gnu9x} is deprecated. 1594 1595@item gnu11 1596@item gnu1x 1597GNU dialect of ISO C11. Support is incomplete and experimental. The 1598name @samp{gnu1x} is deprecated. 1599 1600@item c++98 1601The 1998 ISO C++ standard plus amendments. Same as @option{-ansi} for 1602C++ code. 1603 1604@item gnu++98 1605GNU dialect of @option{-std=c++98}. This is the default for 1606C++ code. 1607 1608@item c++11 1609The 2011 ISO C++ standard plus amendments. Support for C++11 is still 1610experimental, and may change in incompatible ways in future releases. 1611 1612@item gnu++11 1613GNU dialect of @option{-std=c++11}. Support for C++11 is still 1614experimental, and may change in incompatible ways in future releases. 1615@end table 1616 1617@item -fgnu89-inline 1618@opindex fgnu89-inline 1619The option @option{-fgnu89-inline} tells GCC to use the traditional 1620GNU semantics for @code{inline} functions when in C99 mode. 1621@xref{Inline,,An Inline Function is As Fast As a Macro}. This option 1622is accepted and ignored by GCC versions 4.1.3 up to but not including 16234.3. In GCC versions 4.3 and later it changes the behavior of GCC in 1624C99 mode. Using this option is roughly equivalent to adding the 1625@code{gnu_inline} function attribute to all inline functions 1626(@pxref{Function Attributes}). 1627 1628The option @option{-fno-gnu89-inline} explicitly tells GCC to use the 1629C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it 1630specifies the default behavior). This option was first supported in 1631GCC 4.3. This option is not supported in @option{-std=c90} or 1632@option{-std=gnu90} mode. 1633 1634The preprocessor macros @code{__GNUC_GNU_INLINE__} and 1635@code{__GNUC_STDC_INLINE__} may be used to check which semantics are 1636in effect for @code{inline} functions. @xref{Common Predefined 1637Macros,,,cpp,The C Preprocessor}. 1638 1639@item -aux-info @var{filename} 1640@opindex aux-info 1641Output to the given filename prototyped declarations for all functions 1642declared and/or defined in a translation unit, including those in header 1643files. This option is silently ignored in any language other than C@. 1644 1645Besides declarations, the file indicates, in comments, the origin of 1646each declaration (source file and line), whether the declaration was 1647implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or 1648@samp{O} for old, respectively, in the first character after the line 1649number and the colon), and whether it came from a declaration or a 1650definition (@samp{C} or @samp{F}, respectively, in the following 1651character). In the case of function definitions, a K&R-style list of 1652arguments followed by their declarations is also provided, inside 1653comments, after the declaration. 1654 1655@item -fallow-parameterless-variadic-functions 1656Accept variadic functions without named parameters. 1657 1658Although it is possible to define such a function, this is not very 1659useful as it is not possible to read the arguments. This is only 1660supported for C as this construct is allowed by C++. 1661 1662@item -fno-asm 1663@opindex fno-asm 1664Do not recognize @code{asm}, @code{inline} or @code{typeof} as a 1665keyword, so that code can use these words as identifiers. You can use 1666the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__} 1667instead. @option{-ansi} implies @option{-fno-asm}. 1668 1669In C++, this switch only affects the @code{typeof} keyword, since 1670@code{asm} and @code{inline} are standard keywords. You may want to 1671use the @option{-fno-gnu-keywords} flag instead, which has the same 1672effect. In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this 1673switch only affects the @code{asm} and @code{typeof} keywords, since 1674@code{inline} is a standard keyword in ISO C99. 1675 1676@item -fno-builtin 1677@itemx -fno-builtin-@var{function} 1678@opindex fno-builtin 1679@cindex built-in functions 1680Don't recognize built-in functions that do not begin with 1681@samp{__builtin_} as prefix. @xref{Other Builtins,,Other built-in 1682functions provided by GCC}, for details of the functions affected, 1683including those which are not built-in functions when @option{-ansi} or 1684@option{-std} options for strict ISO C conformance are used because they 1685do not have an ISO standard meaning. 1686 1687GCC normally generates special code to handle certain built-in functions 1688more efficiently; for instance, calls to @code{alloca} may become single 1689instructions which adjust the stack directly, and calls to @code{memcpy} 1690may become inline copy loops. The resulting code is often both smaller 1691and faster, but since the function calls no longer appear as such, you 1692cannot set a breakpoint on those calls, nor can you change the behavior 1693of the functions by linking with a different library. In addition, 1694when a function is recognized as a built-in function, GCC may use 1695information about that function to warn about problems with calls to 1696that function, or to generate more efficient code, even if the 1697resulting code still contains calls to that function. For example, 1698warnings are given with @option{-Wformat} for bad calls to 1699@code{printf}, when @code{printf} is built in, and @code{strlen} is 1700known not to modify global memory. 1701 1702With the @option{-fno-builtin-@var{function}} option 1703only the built-in function @var{function} is 1704disabled. @var{function} must not begin with @samp{__builtin_}. If a 1705function is named that is not built-in in this version of GCC, this 1706option is ignored. There is no corresponding 1707@option{-fbuiltin-@var{function}} option; if you wish to enable 1708built-in functions selectively when using @option{-fno-builtin} or 1709@option{-ffreestanding}, you may define macros such as: 1710 1711@smallexample 1712#define abs(n) __builtin_abs ((n)) 1713#define strcpy(d, s) __builtin_strcpy ((d), (s)) 1714@end smallexample 1715 1716@item -fhosted 1717@opindex fhosted 1718@cindex hosted environment 1719 1720Assert that compilation takes place in a hosted environment. This implies 1721@option{-fbuiltin}. A hosted environment is one in which the 1722entire standard library is available, and in which @code{main} has a return 1723type of @code{int}. Examples are nearly everything except a kernel. 1724This is equivalent to @option{-fno-freestanding}. 1725 1726@item -ffreestanding 1727@opindex ffreestanding 1728@cindex hosted environment 1729 1730Assert that compilation takes place in a freestanding environment. This 1731implies @option{-fno-builtin}. A freestanding environment 1732is one in which the standard library may not exist, and program startup may 1733not necessarily be at @code{main}. The most obvious example is an OS kernel. 1734This is equivalent to @option{-fno-hosted}. 1735 1736@xref{Standards,,Language Standards Supported by GCC}, for details of 1737freestanding and hosted environments. 1738 1739@item -fopenmp 1740@opindex fopenmp 1741@cindex OpenMP parallel 1742Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and 1743@code{!$omp} in Fortran. When @option{-fopenmp} is specified, the 1744compiler generates parallel code according to the OpenMP Application 1745Program Interface v3.0 @w{@uref{http://www.openmp.org/}}. This option 1746implies @option{-pthread}, and thus is only supported on targets that 1747have support for @option{-pthread}. 1748 1749@item -fgnu-tm 1750@opindex fgnu-tm 1751When the option @option{-fgnu-tm} is specified, the compiler will 1752generate code for the Linux variant of Intel's current Transactional 1753Memory ABI specification document (Revision 1.1, May 6 2009). This is 1754an experimental feature whose interface may change in future versions 1755of GCC, as the official specification changes. Please note that not 1756all architectures are supported for this feature. 1757 1758For more information on GCC's support for transactional memory, 1759@xref{Enabling libitm,,The GNU Transactional Memory Library,libitm,GNU 1760Transactional Memory Library}. 1761 1762Note that the transactional memory feature is not supported with 1763non-call exceptions (@option{-fnon-call-exceptions}). 1764 1765@item -fms-extensions 1766@opindex fms-extensions 1767Accept some non-standard constructs used in Microsoft header files. 1768 1769In C++ code, this allows member names in structures to be similar 1770to previous types declarations. 1771 1772@smallexample 1773typedef int UOW; 1774struct ABC @{ 1775 UOW UOW; 1776@}; 1777@end smallexample 1778 1779Some cases of unnamed fields in structures and unions are only 1780accepted with this option. @xref{Unnamed Fields,,Unnamed struct/union 1781fields within structs/unions}, for details. 1782 1783@item -fplan9-extensions 1784Accept some non-standard constructs used in Plan 9 code. 1785 1786This enables @option{-fms-extensions}, permits passing pointers to 1787structures with anonymous fields to functions that expect pointers to 1788elements of the type of the field, and permits referring to anonymous 1789fields declared using a typedef. @xref{Unnamed Fields,,Unnamed 1790struct/union fields within structs/unions}, for details. This is only 1791supported for C, not C++. 1792 1793@item -trigraphs 1794@opindex trigraphs 1795Support ISO C trigraphs. The @option{-ansi} option (and @option{-std} 1796options for strict ISO C conformance) implies @option{-trigraphs}. 1797 1798@item -no-integrated-cpp 1799@opindex no-integrated-cpp 1800Performs a compilation in two passes: preprocessing and compiling. This 1801option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the 1802@option{-B} option. The user supplied compilation step can then add in 1803an additional preprocessing step after normal preprocessing but before 1804compiling. The default is to use the integrated cpp (internal cpp) 1805 1806The semantics of this option will change if "cc1", "cc1plus", and 1807"cc1obj" are merged. 1808 1809@cindex traditional C language 1810@cindex C language, traditional 1811@item -traditional 1812@itemx -traditional-cpp 1813@opindex traditional-cpp 1814@opindex traditional 1815Formerly, these options caused GCC to attempt to emulate a pre-standard 1816C compiler. They are now only supported with the @option{-E} switch. 1817The preprocessor continues to support a pre-standard mode. See the GNU 1818CPP manual for details. 1819 1820@item -fcond-mismatch 1821@opindex fcond-mismatch 1822Allow conditional expressions with mismatched types in the second and 1823third arguments. The value of such an expression is void. This option 1824is not supported for C++. 1825 1826@item -flax-vector-conversions 1827@opindex flax-vector-conversions 1828Allow implicit conversions between vectors with differing numbers of 1829elements and/or incompatible element types. This option should not be 1830used for new code. 1831 1832@item -funsigned-char 1833@opindex funsigned-char 1834Let the type @code{char} be unsigned, like @code{unsigned char}. 1835 1836Each kind of machine has a default for what @code{char} should 1837be. It is either like @code{unsigned char} by default or like 1838@code{signed char} by default. 1839 1840Ideally, a portable program should always use @code{signed char} or 1841@code{unsigned char} when it depends on the signedness of an object. 1842But many programs have been written to use plain @code{char} and 1843expect it to be signed, or expect it to be unsigned, depending on the 1844machines they were written for. This option, and its inverse, let you 1845make such a program work with the opposite default. 1846 1847The type @code{char} is always a distinct type from each of 1848@code{signed char} or @code{unsigned char}, even though its behavior 1849is always just like one of those two. 1850 1851@item -fsigned-char 1852@opindex fsigned-char 1853Let the type @code{char} be signed, like @code{signed char}. 1854 1855Note that this is equivalent to @option{-fno-unsigned-char}, which is 1856the negative form of @option{-funsigned-char}. Likewise, the option 1857@option{-fno-signed-char} is equivalent to @option{-funsigned-char}. 1858 1859@item -fsigned-bitfields 1860@itemx -funsigned-bitfields 1861@itemx -fno-signed-bitfields 1862@itemx -fno-unsigned-bitfields 1863@opindex fsigned-bitfields 1864@opindex funsigned-bitfields 1865@opindex fno-signed-bitfields 1866@opindex fno-unsigned-bitfields 1867These options control whether a bit-field is signed or unsigned, when the 1868declaration does not use either @code{signed} or @code{unsigned}. By 1869default, such a bit-field is signed, because this is consistent: the 1870basic integer types such as @code{int} are signed types. 1871@end table 1872 1873@node C++ Dialect Options 1874@section Options Controlling C++ Dialect 1875 1876@cindex compiler options, C++ 1877@cindex C++ options, command-line 1878@cindex options, C++ 1879This section describes the command-line options that are only meaningful 1880for C++ programs; but you can also use most of the GNU compiler options 1881regardless of what language your program is in. For example, you 1882might compile a file @code{firstClass.C} like this: 1883 1884@smallexample 1885g++ -g -frepo -O -c firstClass.C 1886@end smallexample 1887 1888@noindent 1889In this example, only @option{-frepo} is an option meant 1890only for C++ programs; you can use the other options with any 1891language supported by GCC@. 1892 1893Here is a list of options that are @emph{only} for compiling C++ programs: 1894 1895@table @gcctabopt 1896 1897@item -fabi-version=@var{n} 1898@opindex fabi-version 1899Use version @var{n} of the C++ ABI@. Version 2 is the version of the 1900C++ ABI that first appeared in G++ 3.4. Version 1 is the version of 1901the C++ ABI that first appeared in G++ 3.2. Version 0 will always be 1902the version that conforms most closely to the C++ ABI specification. 1903Therefore, the ABI obtained using version 0 will change as ABI bugs 1904are fixed. 1905 1906The default is version 2. 1907 1908Version 3 corrects an error in mangling a constant address as a 1909template argument. 1910 1911Version 4, which first appeared in G++ 4.5, implements a standard 1912mangling for vector types. 1913 1914Version 5, which first appeared in G++ 4.6, corrects the mangling of 1915attribute const/volatile on function pointer types, decltype of a 1916plain decl, and use of a function parameter in the declaration of 1917another parameter. 1918 1919Version 6, which first appeared in G++ 4.7, corrects the promotion 1920behavior of C++11 scoped enums and the mangling of template argument 1921packs, const/static_cast, prefix ++ and --, and a class scope function 1922used as a template argument. 1923 1924See also @option{-Wabi}. 1925 1926@item -fno-access-control 1927@opindex fno-access-control 1928Turn off all access checking. This switch is mainly useful for working 1929around bugs in the access control code. 1930 1931@item -fcheck-new 1932@opindex fcheck-new 1933Check that the pointer returned by @code{operator new} is non-null 1934before attempting to modify the storage allocated. This check is 1935normally unnecessary because the C++ standard specifies that 1936@code{operator new} will only return @code{0} if it is declared 1937@samp{throw()}, in which case the compiler will always check the 1938return value even without this option. In all other cases, when 1939@code{operator new} has a non-empty exception specification, memory 1940exhaustion is signalled by throwing @code{std::bad_alloc}. See also 1941@samp{new (nothrow)}. 1942 1943@item -fconserve-space 1944@opindex fconserve-space 1945Put uninitialized or run-time-initialized global variables into the 1946common segment, as C does. This saves space in the executable at the 1947cost of not diagnosing duplicate definitions. If you compile with this 1948flag and your program mysteriously crashes after @code{main()} has 1949completed, you may have an object that is being destroyed twice because 1950two definitions were merged. 1951 1952This option is no longer useful on most targets, now that support has 1953been added for putting variables into BSS without making them common. 1954 1955@item -fconstexpr-depth=@var{n} 1956@opindex fconstexpr-depth 1957Set the maximum nested evaluation depth for C++11 constexpr functions 1958to @var{n}. A limit is needed to detect endless recursion during 1959constant expression evaluation. The minimum specified by the standard 1960is 512. 1961 1962@item -fdeduce-init-list 1963@opindex fdeduce-init-list 1964Enable deduction of a template type parameter as 1965std::initializer_list from a brace-enclosed initializer list, i.e. 1966 1967@smallexample 1968template <class T> auto forward(T t) -> decltype (realfn (t)) 1969@{ 1970 return realfn (t); 1971@} 1972 1973void f() 1974@{ 1975 forward(@{1,2@}); // call forward<std::initializer_list<int>> 1976@} 1977@end smallexample 1978 1979This deduction was implemented as a possible extension to the 1980originally proposed semantics for the C++11 standard, but was not part 1981of the final standard, so it is disabled by default. This option is 1982deprecated, and may be removed in a future version of G++. 1983 1984@item -ffriend-injection 1985@opindex ffriend-injection 1986Inject friend functions into the enclosing namespace, so that they are 1987visible outside the scope of the class in which they are declared. 1988Friend functions were documented to work this way in the old Annotated 1989C++ Reference Manual, and versions of G++ before 4.1 always worked 1990that way. However, in ISO C++ a friend function that is not declared 1991in an enclosing scope can only be found using argument dependent 1992lookup. This option causes friends to be injected as they were in 1993earlier releases. 1994 1995This option is for compatibility, and may be removed in a future 1996release of G++. 1997 1998@item -fno-elide-constructors 1999@opindex fno-elide-constructors 2000The C++ standard allows an implementation to omit creating a temporary 2001that is only used to initialize another object of the same type. 2002Specifying this option disables that optimization, and forces G++ to 2003call the copy constructor in all cases. 2004 2005@item -fno-enforce-eh-specs 2006@opindex fno-enforce-eh-specs 2007Don't generate code to check for violation of exception specifications 2008at run time. This option violates the C++ standard, but may be useful 2009for reducing code size in production builds, much like defining 2010@samp{NDEBUG}. This does not give user code permission to throw 2011exceptions in violation of the exception specifications; the compiler 2012will still optimize based on the specifications, so throwing an 2013unexpected exception will result in undefined behavior. 2014 2015@item -ffor-scope 2016@itemx -fno-for-scope 2017@opindex ffor-scope 2018@opindex fno-for-scope 2019If @option{-ffor-scope} is specified, the scope of variables declared in 2020a @i{for-init-statement} is limited to the @samp{for} loop itself, 2021as specified by the C++ standard. 2022If @option{-fno-for-scope} is specified, the scope of variables declared in 2023a @i{for-init-statement} extends to the end of the enclosing scope, 2024as was the case in old versions of G++, and other (traditional) 2025implementations of C++. 2026 2027The default if neither flag is given to follow the standard, 2028but to allow and give a warning for old-style code that would 2029otherwise be invalid, or have different behavior. 2030 2031@item -fno-gnu-keywords 2032@opindex fno-gnu-keywords 2033Do not recognize @code{typeof} as a keyword, so that code can use this 2034word as an identifier. You can use the keyword @code{__typeof__} instead. 2035@option{-ansi} implies @option{-fno-gnu-keywords}. 2036 2037@item -fno-implicit-templates 2038@opindex fno-implicit-templates 2039Never emit code for non-inline templates that are instantiated 2040implicitly (i.e.@: by use); only emit code for explicit instantiations. 2041@xref{Template Instantiation}, for more information. 2042 2043@item -fno-implicit-inline-templates 2044@opindex fno-implicit-inline-templates 2045Don't emit code for implicit instantiations of inline templates, either. 2046The default is to handle inlines differently so that compiles with and 2047without optimization will need the same set of explicit instantiations. 2048 2049@item -fno-implement-inlines 2050@opindex fno-implement-inlines 2051To save space, do not emit out-of-line copies of inline functions 2052controlled by @samp{#pragma implementation}. This will cause linker 2053errors if these functions are not inlined everywhere they are called. 2054 2055@item -fms-extensions 2056@opindex fms-extensions 2057Disable pedantic warnings about constructs used in MFC, such as implicit 2058int and getting a pointer to member function via non-standard syntax. 2059 2060@item -fno-nonansi-builtins 2061@opindex fno-nonansi-builtins 2062Disable built-in declarations of functions that are not mandated by 2063ANSI/ISO C@. These include @code{ffs}, @code{alloca}, @code{_exit}, 2064@code{index}, @code{bzero}, @code{conjf}, and other related functions. 2065 2066@item -fnothrow-opt 2067@opindex fnothrow-opt 2068Treat a @code{throw()} exception specification as though it were a 2069@code{noexcept} specification to reduce or eliminate the text size 2070overhead relative to a function with no exception specification. If 2071the function has local variables of types with non-trivial 2072destructors, the exception specification will actually make the 2073function smaller because the EH cleanups for those variables can be 2074optimized away. The semantic effect is that an exception thrown out of 2075a function with such an exception specification will result in a call 2076to @code{terminate} rather than @code{unexpected}. 2077 2078@item -fno-operator-names 2079@opindex fno-operator-names 2080Do not treat the operator name keywords @code{and}, @code{bitand}, 2081@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as 2082synonyms as keywords. 2083 2084@item -fno-optional-diags 2085@opindex fno-optional-diags 2086Disable diagnostics that the standard says a compiler does not need to 2087issue. Currently, the only such diagnostic issued by G++ is the one for 2088a name having multiple meanings within a class. 2089 2090@item -fpermissive 2091@opindex fpermissive 2092Downgrade some diagnostics about nonconformant code from errors to 2093warnings. Thus, using @option{-fpermissive} will allow some 2094nonconforming code to compile. 2095 2096@item -fno-pretty-templates 2097@opindex fno-pretty-templates 2098When an error message refers to a specialization of a function 2099template, the compiler will normally print the signature of the 2100template followed by the template arguments and any typedefs or 2101typenames in the signature (e.g. @code{void f(T) [with T = int]} 2102rather than @code{void f(int)}) so that it's clear which template is 2103involved. When an error message refers to a specialization of a class 2104template, the compiler will omit any template arguments that match 2105the default template arguments for that template. If either of these 2106behaviors make it harder to understand the error message rather than 2107easier, using @option{-fno-pretty-templates} will disable them. 2108 2109@item -frepo 2110@opindex frepo 2111Enable automatic template instantiation at link time. This option also 2112implies @option{-fno-implicit-templates}. @xref{Template 2113Instantiation}, for more information. 2114 2115@item -fno-rtti 2116@opindex fno-rtti 2117Disable generation of information about every class with virtual 2118functions for use by the C++ run-time type identification features 2119(@samp{dynamic_cast} and @samp{typeid}). If you don't use those parts 2120of the language, you can save some space by using this flag. Note that 2121exception handling uses the same information, but it will generate it as 2122needed. The @samp{dynamic_cast} operator can still be used for casts that 2123do not require run-time type information, i.e.@: casts to @code{void *} or to 2124unambiguous base classes. 2125 2126@item -fstats 2127@opindex fstats 2128Emit statistics about front-end processing at the end of the compilation. 2129This information is generally only useful to the G++ development team. 2130 2131@item -fstrict-enums 2132@opindex fstrict-enums 2133Allow the compiler to optimize using the assumption that a value of 2134enumerated type can only be one of the values of the enumeration (as 2135defined in the C++ standard; basically, a value that can be 2136represented in the minimum number of bits needed to represent all the 2137enumerators). This assumption may not be valid if the program uses a 2138cast to convert an arbitrary integer value to the enumerated type. 2139 2140@item -ftemplate-depth=@var{n} 2141@opindex ftemplate-depth 2142Set the maximum instantiation depth for template classes to @var{n}. 2143A limit on the template instantiation depth is needed to detect 2144endless recursions during template class instantiation. ANSI/ISO C++ 2145conforming programs must not rely on a maximum depth greater than 17 2146(changed to 1024 in C++11). The default value is 900, as the compiler 2147can run out of stack space before hitting 1024 in some situations. 2148 2149@item -fno-threadsafe-statics 2150@opindex fno-threadsafe-statics 2151Do not emit the extra code to use the routines specified in the C++ 2152ABI for thread-safe initialization of local statics. You can use this 2153option to reduce code size slightly in code that doesn't need to be 2154thread-safe. 2155 2156@item -fuse-cxa-atexit 2157@opindex fuse-cxa-atexit 2158Register destructors for objects with static storage duration with the 2159@code{__cxa_atexit} function rather than the @code{atexit} function. 2160This option is required for fully standards-compliant handling of static 2161destructors, but will only work if your C library supports 2162@code{__cxa_atexit}. 2163 2164@item -fno-use-cxa-get-exception-ptr 2165@opindex fno-use-cxa-get-exception-ptr 2166Don't use the @code{__cxa_get_exception_ptr} runtime routine. This 2167will cause @code{std::uncaught_exception} to be incorrect, but is necessary 2168if the runtime routine is not available. 2169 2170@item -fvisibility-inlines-hidden 2171@opindex fvisibility-inlines-hidden 2172This switch declares that the user does not attempt to compare 2173pointers to inline functions or methods where the addresses of the two functions 2174were taken in different shared objects. 2175 2176The effect of this is that GCC may, effectively, mark inline methods with 2177@code{__attribute__ ((visibility ("hidden")))} so that they do not 2178appear in the export table of a DSO and do not require a PLT indirection 2179when used within the DSO@. Enabling this option can have a dramatic effect 2180on load and link times of a DSO as it massively reduces the size of the 2181dynamic export table when the library makes heavy use of templates. 2182 2183The behavior of this switch is not quite the same as marking the 2184methods as hidden directly, because it does not affect static variables 2185local to the function or cause the compiler to deduce that 2186the function is defined in only one shared object. 2187 2188You may mark a method as having a visibility explicitly to negate the 2189effect of the switch for that method. For example, if you do want to 2190compare pointers to a particular inline method, you might mark it as 2191having default visibility. Marking the enclosing class with explicit 2192visibility will have no effect. 2193 2194Explicitly instantiated inline methods are unaffected by this option 2195as their linkage might otherwise cross a shared library boundary. 2196@xref{Template Instantiation}. 2197 2198@item -fvisibility-ms-compat 2199@opindex fvisibility-ms-compat 2200This flag attempts to use visibility settings to make GCC's C++ 2201linkage model compatible with that of Microsoft Visual Studio. 2202 2203The flag makes these changes to GCC's linkage model: 2204 2205@enumerate 2206@item 2207It sets the default visibility to @code{hidden}, like 2208@option{-fvisibility=hidden}. 2209 2210@item 2211Types, but not their members, are not hidden by default. 2212 2213@item 2214The One Definition Rule is relaxed for types without explicit 2215visibility specifications that are defined in more than one different 2216shared object: those declarations are permitted if they would have 2217been permitted when this option was not used. 2218@end enumerate 2219 2220In new code it is better to use @option{-fvisibility=hidden} and 2221export those classes that are intended to be externally visible. 2222Unfortunately it is possible for code to rely, perhaps accidentally, 2223on the Visual Studio behavior. 2224 2225Among the consequences of these changes are that static data members 2226of the same type with the same name but defined in different shared 2227objects will be different, so changing one will not change the other; 2228and that pointers to function members defined in different shared 2229objects may not compare equal. When this flag is given, it is a 2230violation of the ODR to define types with the same name differently. 2231 2232@item -fno-weak 2233@opindex fno-weak 2234Do not use weak symbol support, even if it is provided by the linker. 2235By default, G++ will use weak symbols if they are available. This 2236option exists only for testing, and should not be used by end-users; 2237it will result in inferior code and has no benefits. This option may 2238be removed in a future release of G++. 2239 2240@item -nostdinc++ 2241@opindex nostdinc++ 2242Do not search for header files in the standard directories specific to 2243C++, but do still search the other standard directories. (This option 2244is used when building the C++ library.) 2245@end table 2246 2247In addition, these optimization, warning, and code generation options 2248have meanings only for C++ programs: 2249 2250@table @gcctabopt 2251@item -fno-default-inline 2252@opindex fno-default-inline 2253Do not assume @samp{inline} for functions defined inside a class scope. 2254@xref{Optimize Options,,Options That Control Optimization}. Note that these 2255functions will have linkage like inline functions; they just won't be 2256inlined by default. 2257 2258@item -Wabi @r{(C, Objective-C, C++ and Objective-C++ only)} 2259@opindex Wabi 2260@opindex Wno-abi 2261Warn when G++ generates code that is probably not compatible with the 2262vendor-neutral C++ ABI@. Although an effort has been made to warn about 2263all such cases, there are probably some cases that are not warned about, 2264even though G++ is generating incompatible code. There may also be 2265cases where warnings are emitted even though the code that is generated 2266will be compatible. 2267 2268You should rewrite your code to avoid these warnings if you are 2269concerned about the fact that code generated by G++ may not be binary 2270compatible with code generated by other compilers. 2271 2272The known incompatibilities in @option{-fabi-version=2} (the default) include: 2273 2274@itemize @bullet 2275 2276@item 2277A template with a non-type template parameter of reference type is 2278mangled incorrectly: 2279@smallexample 2280extern int N; 2281template <int &> struct S @{@}; 2282void n (S<N>) @{2@} 2283@end smallexample 2284 2285This is fixed in @option{-fabi-version=3}. 2286 2287@item 2288SIMD vector types declared using @code{__attribute ((vector_size))} are 2289mangled in a non-standard way that does not allow for overloading of 2290functions taking vectors of different sizes. 2291 2292The mangling is changed in @option{-fabi-version=4}. 2293@end itemize 2294 2295The known incompatibilities in @option{-fabi-version=1} include: 2296 2297@itemize @bullet 2298 2299@item 2300Incorrect handling of tail-padding for bit-fields. G++ may attempt to 2301pack data into the same byte as a base class. For example: 2302 2303@smallexample 2304struct A @{ virtual void f(); int f1 : 1; @}; 2305struct B : public A @{ int f2 : 1; @}; 2306@end smallexample 2307 2308@noindent 2309In this case, G++ will place @code{B::f2} into the same byte 2310as@code{A::f1}; other compilers will not. You can avoid this problem 2311by explicitly padding @code{A} so that its size is a multiple of the 2312byte size on your platform; that will cause G++ and other compilers to 2313layout @code{B} identically. 2314 2315@item 2316Incorrect handling of tail-padding for virtual bases. G++ does not use 2317tail padding when laying out virtual bases. For example: 2318 2319@smallexample 2320struct A @{ virtual void f(); char c1; @}; 2321struct B @{ B(); char c2; @}; 2322struct C : public A, public virtual B @{@}; 2323@end smallexample 2324 2325@noindent 2326In this case, G++ will not place @code{B} into the tail-padding for 2327@code{A}; other compilers will. You can avoid this problem by 2328explicitly padding @code{A} so that its size is a multiple of its 2329alignment (ignoring virtual base classes); that will cause G++ and other 2330compilers to layout @code{C} identically. 2331 2332@item 2333Incorrect handling of bit-fields with declared widths greater than that 2334of their underlying types, when the bit-fields appear in a union. For 2335example: 2336 2337@smallexample 2338union U @{ int i : 4096; @}; 2339@end smallexample 2340 2341@noindent 2342Assuming that an @code{int} does not have 4096 bits, G++ will make the 2343union too small by the number of bits in an @code{int}. 2344 2345@item 2346Empty classes can be placed at incorrect offsets. For example: 2347 2348@smallexample 2349struct A @{@}; 2350 2351struct B @{ 2352 A a; 2353 virtual void f (); 2354@}; 2355 2356struct C : public B, public A @{@}; 2357@end smallexample 2358 2359@noindent 2360G++ will place the @code{A} base class of @code{C} at a nonzero offset; 2361it should be placed at offset zero. G++ mistakenly believes that the 2362@code{A} data member of @code{B} is already at offset zero. 2363 2364@item 2365Names of template functions whose types involve @code{typename} or 2366template template parameters can be mangled incorrectly. 2367 2368@smallexample 2369template <typename Q> 2370void f(typename Q::X) @{@} 2371 2372template <template <typename> class Q> 2373void f(typename Q<int>::X) @{@} 2374@end smallexample 2375 2376@noindent 2377Instantiations of these templates may be mangled incorrectly. 2378 2379@end itemize 2380 2381It also warns psABI related changes. The known psABI changes at this 2382point include: 2383 2384@itemize @bullet 2385 2386@item 2387For SYSV/x86-64, when passing union with long double, it is changed to 2388pass in memory as specified in psABI. For example: 2389 2390@smallexample 2391union U @{ 2392 long double ld; 2393 int i; 2394@}; 2395@end smallexample 2396 2397@noindent 2398@code{union U} will always be passed in memory. 2399 2400@end itemize 2401 2402@item -Wctor-dtor-privacy @r{(C++ and Objective-C++ only)} 2403@opindex Wctor-dtor-privacy 2404@opindex Wno-ctor-dtor-privacy 2405Warn when a class seems unusable because all the constructors or 2406destructors in that class are private, and it has neither friends nor 2407public static member functions. 2408 2409@item -Wdelete-non-virtual-dtor @r{(C++ and Objective-C++ only)} 2410@opindex Wdelete-non-virtual-dtor 2411@opindex Wno-delete-non-virtual-dtor 2412Warn when @samp{delete} is used to destroy an instance of a class that 2413has virtual functions and non-virtual destructor. It is unsafe to delete 2414an instance of a derived class through a pointer to a base class if the 2415base class does not have a virtual destructor. This warning is enabled 2416by @option{-Wall}. 2417 2418@item -Wnarrowing @r{(C++ and Objective-C++ only)} 2419@opindex Wnarrowing 2420@opindex Wno-narrowing 2421Warn when a narrowing conversion prohibited by C++11 occurs within 2422@samp{@{ @}}, e.g. 2423 2424@smallexample 2425int i = @{ 2.2 @}; // error: narrowing from double to int 2426@end smallexample 2427 2428This flag is included in @option{-Wall} and @option{-Wc++11-compat}. 2429 2430With -std=c++11, @option{-Wno-narrowing} suppresses the diagnostic 2431required by the standard. Note that this does not affect the meaning 2432of well-formed code; narrowing conversions are still considered 2433ill-formed in SFINAE context. 2434 2435@item -Wnoexcept @r{(C++ and Objective-C++ only)} 2436@opindex Wnoexcept 2437@opindex Wno-noexcept 2438Warn when a noexcept-expression evaluates to false because of a call 2439to a function that does not have a non-throwing exception 2440specification (i.e. @samp{throw()} or @samp{noexcept}) but is known by 2441the compiler to never throw an exception. 2442 2443@item -Wnon-virtual-dtor @r{(C++ and Objective-C++ only)} 2444@opindex Wnon-virtual-dtor 2445@opindex Wno-non-virtual-dtor 2446Warn when a class has virtual functions and accessible non-virtual 2447destructor, in which case it would be possible but unsafe to delete 2448an instance of a derived class through a pointer to the base class. 2449This warning is also enabled if @option{-Weffc++} is specified. 2450 2451@item -Wreorder @r{(C++ and Objective-C++ only)} 2452@opindex Wreorder 2453@opindex Wno-reorder 2454@cindex reordering, warning 2455@cindex warning for reordering of member initializers 2456Warn when the order of member initializers given in the code does not 2457match the order in which they must be executed. For instance: 2458 2459@smallexample 2460struct A @{ 2461 int i; 2462 int j; 2463 A(): j (0), i (1) @{ @} 2464@}; 2465@end smallexample 2466 2467The compiler will rearrange the member initializers for @samp{i} 2468and @samp{j} to match the declaration order of the members, emitting 2469a warning to that effect. This warning is enabled by @option{-Wall}. 2470@end table 2471 2472The following @option{-W@dots{}} options are not affected by @option{-Wall}. 2473 2474@table @gcctabopt 2475@item -Weffc++ @r{(C++ and Objective-C++ only)} 2476@opindex Weffc++ 2477@opindex Wno-effc++ 2478Warn about violations of the following style guidelines from Scott Meyers' 2479@cite{Effective C++, Second Edition} book: 2480 2481@itemize @bullet 2482@item 2483Item 11: Define a copy constructor and an assignment operator for classes 2484with dynamically allocated memory. 2485 2486@item 2487Item 12: Prefer initialization to assignment in constructors. 2488 2489@item 2490Item 14: Make destructors virtual in base classes. 2491 2492@item 2493Item 15: Have @code{operator=} return a reference to @code{*this}. 2494 2495@item 2496Item 23: Don't try to return a reference when you must return an object. 2497 2498@end itemize 2499 2500Also warn about violations of the following style guidelines from 2501Scott Meyers' @cite{More Effective C++} book: 2502 2503@itemize @bullet 2504@item 2505Item 6: Distinguish between prefix and postfix forms of increment and 2506decrement operators. 2507 2508@item 2509Item 7: Never overload @code{&&}, @code{||}, or @code{,}. 2510 2511@end itemize 2512 2513When selecting this option, be aware that the standard library 2514headers do not obey all of these guidelines; use @samp{grep -v} 2515to filter out those warnings. 2516 2517@item -Wstrict-null-sentinel @r{(C++ and Objective-C++ only)} 2518@opindex Wstrict-null-sentinel 2519@opindex Wno-strict-null-sentinel 2520Warn also about the use of an uncasted @code{NULL} as sentinel. When 2521compiling only with GCC this is a valid sentinel, as @code{NULL} is defined 2522to @code{__null}. Although it is a null pointer constant not a null pointer, 2523it is guaranteed to be of the same size as a pointer. But this use is 2524not portable across different compilers. 2525 2526@item -Wno-non-template-friend @r{(C++ and Objective-C++ only)} 2527@opindex Wno-non-template-friend 2528@opindex Wnon-template-friend 2529Disable warnings when non-templatized friend functions are declared 2530within a template. Since the advent of explicit template specification 2531support in G++, if the name of the friend is an unqualified-id (i.e., 2532@samp{friend foo(int)}), the C++ language specification demands that the 2533friend declare or define an ordinary, nontemplate function. (Section 253414.5.3). Before G++ implemented explicit specification, unqualified-ids 2535could be interpreted as a particular specialization of a templatized 2536function. Because this non-conforming behavior is no longer the default 2537behavior for G++, @option{-Wnon-template-friend} allows the compiler to 2538check existing code for potential trouble spots and is on by default. 2539This new compiler behavior can be turned off with 2540@option{-Wno-non-template-friend}, which keeps the conformant compiler code 2541but disables the helpful warning. 2542 2543@item -Wold-style-cast @r{(C++ and Objective-C++ only)} 2544@opindex Wold-style-cast 2545@opindex Wno-old-style-cast 2546Warn if an old-style (C-style) cast to a non-void type is used within 2547a C++ program. The new-style casts (@samp{dynamic_cast}, 2548@samp{static_cast}, @samp{reinterpret_cast}, and @samp{const_cast}) are 2549less vulnerable to unintended effects and much easier to search for. 2550 2551@item -Woverloaded-virtual @r{(C++ and Objective-C++ only)} 2552@opindex Woverloaded-virtual 2553@opindex Wno-overloaded-virtual 2554@cindex overloaded virtual function, warning 2555@cindex warning for overloaded virtual function 2556Warn when a function declaration hides virtual functions from a 2557base class. For example, in: 2558 2559@smallexample 2560struct A @{ 2561 virtual void f(); 2562@}; 2563 2564struct B: public A @{ 2565 void f(int); 2566@}; 2567@end smallexample 2568 2569the @code{A} class version of @code{f} is hidden in @code{B}, and code 2570like: 2571 2572@smallexample 2573B* b; 2574b->f(); 2575@end smallexample 2576 2577will fail to compile. 2578 2579@item -Wno-pmf-conversions @r{(C++ and Objective-C++ only)} 2580@opindex Wno-pmf-conversions 2581@opindex Wpmf-conversions 2582Disable the diagnostic for converting a bound pointer to member function 2583to a plain pointer. 2584 2585@item -Wsign-promo @r{(C++ and Objective-C++ only)} 2586@opindex Wsign-promo 2587@opindex Wno-sign-promo 2588Warn when overload resolution chooses a promotion from unsigned or 2589enumerated type to a signed type, over a conversion to an unsigned type of 2590the same size. Previous versions of G++ would try to preserve 2591unsignedness, but the standard mandates the current behavior. 2592 2593@smallexample 2594struct A @{ 2595 operator int (); 2596 A& operator = (int); 2597@}; 2598 2599main () 2600@{ 2601 A a,b; 2602 a = b; 2603@} 2604@end smallexample 2605 2606In this example, G++ will synthesize a default @samp{A& operator = 2607(const A&);}, while cfront will use the user-defined @samp{operator =}. 2608@end table 2609 2610@node Objective-C and Objective-C++ Dialect Options 2611@section Options Controlling Objective-C and Objective-C++ Dialects 2612 2613@cindex compiler options, Objective-C and Objective-C++ 2614@cindex Objective-C and Objective-C++ options, command-line 2615@cindex options, Objective-C and Objective-C++ 2616(NOTE: This manual does not describe the Objective-C and Objective-C++ 2617languages themselves. @xref{Standards,,Language Standards 2618Supported by GCC}, for references.) 2619 2620This section describes the command-line options that are only meaningful 2621for Objective-C and Objective-C++ programs, but you can also use most of 2622the language-independent GNU compiler options. 2623For example, you might compile a file @code{some_class.m} like this: 2624 2625@smallexample 2626gcc -g -fgnu-runtime -O -c some_class.m 2627@end smallexample 2628 2629@noindent 2630In this example, @option{-fgnu-runtime} is an option meant only for 2631Objective-C and Objective-C++ programs; you can use the other options with 2632any language supported by GCC@. 2633 2634Note that since Objective-C is an extension of the C language, Objective-C 2635compilations may also use options specific to the C front-end (e.g., 2636@option{-Wtraditional}). Similarly, Objective-C++ compilations may use 2637C++-specific options (e.g., @option{-Wabi}). 2638 2639Here is a list of options that are @emph{only} for compiling Objective-C 2640and Objective-C++ programs: 2641 2642@table @gcctabopt 2643@item -fconstant-string-class=@var{class-name} 2644@opindex fconstant-string-class 2645Use @var{class-name} as the name of the class to instantiate for each 2646literal string specified with the syntax @code{@@"@dots{}"}. The default 2647class name is @code{NXConstantString} if the GNU runtime is being used, and 2648@code{NSConstantString} if the NeXT runtime is being used (see below). The 2649@option{-fconstant-cfstrings} option, if also present, will override the 2650@option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals 2651to be laid out as constant CoreFoundation strings. 2652 2653@item -fgnu-runtime 2654@opindex fgnu-runtime 2655Generate object code compatible with the standard GNU Objective-C 2656runtime. This is the default for most types of systems. 2657 2658@item -fnext-runtime 2659@opindex fnext-runtime 2660Generate output compatible with the NeXT runtime. This is the default 2661for NeXT-based systems, including Darwin and Mac OS X@. The macro 2662@code{__NEXT_RUNTIME__} is predefined if (and only if) this option is 2663used. 2664 2665@item -fno-nil-receivers 2666@opindex fno-nil-receivers 2667Assume that all Objective-C message dispatches (@code{[receiver 2668message:arg]}) in this translation unit ensure that the receiver is 2669not @code{nil}. This allows for more efficient entry points in the 2670runtime to be used. This option is only available in conjunction with 2671the NeXT runtime and ABI version 0 or 1. 2672 2673@item -fobjc-abi-version=@var{n} 2674@opindex fobjc-abi-version 2675Use version @var{n} of the Objective-C ABI for the selected runtime. 2676This option is currently supported only for the NeXT runtime. In that 2677case, Version 0 is the traditional (32-bit) ABI without support for 2678properties and other Objective-C 2.0 additions. Version 1 is the 2679traditional (32-bit) ABI with support for properties and other 2680Objective-C 2.0 additions. Version 2 is the modern (64-bit) ABI. If 2681nothing is specified, the default is Version 0 on 32-bit target 2682machines, and Version 2 on 64-bit target machines. 2683 2684@item -fobjc-call-cxx-cdtors 2685@opindex fobjc-call-cxx-cdtors 2686For each Objective-C class, check if any of its instance variables is a 2687C++ object with a non-trivial default constructor. If so, synthesize a 2688special @code{- (id) .cxx_construct} instance method which will run 2689non-trivial default constructors on any such instance variables, in order, 2690and then return @code{self}. Similarly, check if any instance variable 2691is a C++ object with a non-trivial destructor, and if so, synthesize a 2692special @code{- (void) .cxx_destruct} method which will run 2693all such default destructors, in reverse order. 2694 2695The @code{- (id) .cxx_construct} and @code{- (void) .cxx_destruct} 2696methods thusly generated will only operate on instance variables 2697declared in the current Objective-C class, and not those inherited 2698from superclasses. It is the responsibility of the Objective-C 2699runtime to invoke all such methods in an object's inheritance 2700hierarchy. The @code{- (id) .cxx_construct} methods will be invoked 2701by the runtime immediately after a new object instance is allocated; 2702the @code{- (void) .cxx_destruct} methods will be invoked immediately 2703before the runtime deallocates an object instance. 2704 2705As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has 2706support for invoking the @code{- (id) .cxx_construct} and 2707@code{- (void) .cxx_destruct} methods. 2708 2709@item -fobjc-direct-dispatch 2710@opindex fobjc-direct-dispatch 2711Allow fast jumps to the message dispatcher. On Darwin this is 2712accomplished via the comm page. 2713 2714@item -fobjc-exceptions 2715@opindex fobjc-exceptions 2716Enable syntactic support for structured exception handling in 2717Objective-C, similar to what is offered by C++ and Java. This option 2718is required to use the Objective-C keywords @code{@@try}, 2719@code{@@throw}, @code{@@catch}, @code{@@finally} and 2720@code{@@synchronized}. This option is available with both the GNU 2721runtime and the NeXT runtime (but not available in conjunction with 2722the NeXT runtime on Mac OS X 10.2 and earlier). 2723 2724@item -fobjc-gc 2725@opindex fobjc-gc 2726Enable garbage collection (GC) in Objective-C and Objective-C++ 2727programs. This option is only available with the NeXT runtime; the 2728GNU runtime has a different garbage collection implementation that 2729does not require special compiler flags. 2730 2731@item -fobjc-nilcheck 2732@opindex fobjc-nilcheck 2733For the NeXT runtime with version 2 of the ABI, check for a nil 2734receiver in method invocations before doing the actual method call. 2735This is the default and can be disabled using 2736@option{-fno-objc-nilcheck}. Class methods and super calls are never 2737checked for nil in this way no matter what this flag is set to. 2738Currently this flag does nothing when the GNU runtime, or an older 2739version of the NeXT runtime ABI, is used. 2740 2741@item -fobjc-std=objc1 2742@opindex fobjc-std 2743Conform to the language syntax of Objective-C 1.0, the language 2744recognized by GCC 4.0. This only affects the Objective-C additions to 2745the C/C++ language; it does not affect conformance to C/C++ standards, 2746which is controlled by the separate C/C++ dialect option flags. When 2747this option is used with the Objective-C or Objective-C++ compiler, 2748any Objective-C syntax that is not recognized by GCC 4.0 is rejected. 2749This is useful if you need to make sure that your Objective-C code can 2750be compiled with older versions of GCC. 2751 2752@item -freplace-objc-classes 2753@opindex freplace-objc-classes 2754Emit a special marker instructing @command{ld(1)} not to statically link in 2755the resulting object file, and allow @command{dyld(1)} to load it in at 2756run time instead. This is used in conjunction with the Fix-and-Continue 2757debugging mode, where the object file in question may be recompiled and 2758dynamically reloaded in the course of program execution, without the need 2759to restart the program itself. Currently, Fix-and-Continue functionality 2760is only available in conjunction with the NeXT runtime on Mac OS X 10.3 2761and later. 2762 2763@item -fzero-link 2764@opindex fzero-link 2765When compiling for the NeXT runtime, the compiler ordinarily replaces calls 2766to @code{objc_getClass("@dots{}")} (when the name of the class is known at 2767compile time) with static class references that get initialized at load time, 2768which improves run-time performance. Specifying the @option{-fzero-link} flag 2769suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")} 2770to be retained. This is useful in Zero-Link debugging mode, since it allows 2771for individual class implementations to be modified during program execution. 2772The GNU runtime currently always retains calls to @code{objc_get_class("@dots{}")} 2773regardless of command-line options. 2774 2775@item -gen-decls 2776@opindex gen-decls 2777Dump interface declarations for all classes seen in the source file to a 2778file named @file{@var{sourcename}.decl}. 2779 2780@item -Wassign-intercept @r{(Objective-C and Objective-C++ only)} 2781@opindex Wassign-intercept 2782@opindex Wno-assign-intercept 2783Warn whenever an Objective-C assignment is being intercepted by the 2784garbage collector. 2785 2786@item -Wno-protocol @r{(Objective-C and Objective-C++ only)} 2787@opindex Wno-protocol 2788@opindex Wprotocol 2789If a class is declared to implement a protocol, a warning is issued for 2790every method in the protocol that is not implemented by the class. The 2791default behavior is to issue a warning for every method not explicitly 2792implemented in the class, even if a method implementation is inherited 2793from the superclass. If you use the @option{-Wno-protocol} option, then 2794methods inherited from the superclass are considered to be implemented, 2795and no warning is issued for them. 2796 2797@item -Wselector @r{(Objective-C and Objective-C++ only)} 2798@opindex Wselector 2799@opindex Wno-selector 2800Warn if multiple methods of different types for the same selector are 2801found during compilation. The check is performed on the list of methods 2802in the final stage of compilation. Additionally, a check is performed 2803for each selector appearing in a @code{@@selector(@dots{})} 2804expression, and a corresponding method for that selector has been found 2805during compilation. Because these checks scan the method table only at 2806the end of compilation, these warnings are not produced if the final 2807stage of compilation is not reached, for example because an error is 2808found during compilation, or because the @option{-fsyntax-only} option is 2809being used. 2810 2811@item -Wstrict-selector-match @r{(Objective-C and Objective-C++ only)} 2812@opindex Wstrict-selector-match 2813@opindex Wno-strict-selector-match 2814Warn if multiple methods with differing argument and/or return types are 2815found for a given selector when attempting to send a message using this 2816selector to a receiver of type @code{id} or @code{Class}. When this flag 2817is off (which is the default behavior), the compiler will omit such warnings 2818if any differences found are confined to types that share the same size 2819and alignment. 2820 2821@item -Wundeclared-selector @r{(Objective-C and Objective-C++ only)} 2822@opindex Wundeclared-selector 2823@opindex Wno-undeclared-selector 2824Warn if a @code{@@selector(@dots{})} expression referring to an 2825undeclared selector is found. A selector is considered undeclared if no 2826method with that name has been declared before the 2827@code{@@selector(@dots{})} expression, either explicitly in an 2828@code{@@interface} or @code{@@protocol} declaration, or implicitly in 2829an @code{@@implementation} section. This option always performs its 2830checks as soon as a @code{@@selector(@dots{})} expression is found, 2831while @option{-Wselector} only performs its checks in the final stage of 2832compilation. This also enforces the coding style convention 2833that methods and selectors must be declared before being used. 2834 2835@item -print-objc-runtime-info 2836@opindex print-objc-runtime-info 2837Generate C header describing the largest structure that is passed by 2838value, if any. 2839 2840@end table 2841 2842@node Language Independent Options 2843@section Options to Control Diagnostic Messages Formatting 2844@cindex options to control diagnostics formatting 2845@cindex diagnostic messages 2846@cindex message formatting 2847 2848Traditionally, diagnostic messages have been formatted irrespective of 2849the output device's aspect (e.g.@: its width, @dots{}). The options described 2850below can be used to control the diagnostic messages formatting 2851algorithm, e.g.@: how many characters per line, how often source location 2852information should be reported. Right now, only the C++ front end can 2853honor these options. However it is expected, in the near future, that 2854the remaining front ends would be able to digest them correctly. 2855 2856@table @gcctabopt 2857@item -fmessage-length=@var{n} 2858@opindex fmessage-length 2859Try to format error messages so that they fit on lines of about @var{n} 2860characters. The default is 72 characters for @command{g++} and 0 for the rest of 2861the front ends supported by GCC@. If @var{n} is zero, then no 2862line-wrapping will be done; each error message will appear on a single 2863line. 2864 2865@opindex fdiagnostics-show-location 2866@item -fdiagnostics-show-location=once 2867Only meaningful in line-wrapping mode. Instructs the diagnostic messages 2868reporter to emit @emph{once} source location information; that is, in 2869case the message is too long to fit on a single physical line and has to 2870be wrapped, the source location won't be emitted (as prefix) again, 2871over and over, in subsequent continuation lines. This is the default 2872behavior. 2873 2874@item -fdiagnostics-show-location=every-line 2875Only meaningful in line-wrapping mode. Instructs the diagnostic 2876messages reporter to emit the same source location information (as 2877prefix) for physical lines that result from the process of breaking 2878a message which is too long to fit on a single line. 2879 2880@item -fno-diagnostics-show-option 2881@opindex fno-diagnostics-show-option 2882@opindex fdiagnostics-show-option 2883By default, each diagnostic emitted includes text indicating the 2884command-line option that directly controls the diagnostic (if such an 2885option is known to the diagnostic machinery). Specifying the 2886@option{-fno-diagnostics-show-option} flag suppresses that behavior. 2887 2888@end table 2889 2890@node Warning Options 2891@section Options to Request or Suppress Warnings 2892@cindex options to control warnings 2893@cindex warning messages 2894@cindex messages, warning 2895@cindex suppressing warnings 2896 2897Warnings are diagnostic messages that report constructions that 2898are not inherently erroneous but that are risky or suggest there 2899may have been an error. 2900 2901The following language-independent options do not enable specific 2902warnings but control the kinds of diagnostics produced by GCC. 2903 2904@table @gcctabopt 2905@cindex syntax checking 2906@item -fsyntax-only 2907@opindex fsyntax-only 2908Check the code for syntax errors, but don't do anything beyond that. 2909 2910@item -fmax-errors=@var{n} 2911@opindex fmax-errors 2912Limits the maximum number of error messages to @var{n}, at which point 2913GCC bails out rather than attempting to continue processing the source 2914code. If @var{n} is 0 (the default), there is no limit on the number 2915of error messages produced. If @option{-Wfatal-errors} is also 2916specified, then @option{-Wfatal-errors} takes precedence over this 2917option. 2918 2919@item -w 2920@opindex w 2921Inhibit all warning messages. 2922 2923@item -Werror 2924@opindex Werror 2925@opindex Wno-error 2926Make all warnings into errors. 2927 2928@item -Werror= 2929@opindex Werror= 2930@opindex Wno-error= 2931Make the specified warning into an error. The specifier for a warning 2932is appended, for example @option{-Werror=switch} turns the warnings 2933controlled by @option{-Wswitch} into errors. This switch takes a 2934negative form, to be used to negate @option{-Werror} for specific 2935warnings, for example @option{-Wno-error=switch} makes 2936@option{-Wswitch} warnings not be errors, even when @option{-Werror} 2937is in effect. 2938 2939The warning message for each controllable warning includes the 2940option that controls the warning. That option can then be used with 2941@option{-Werror=} and @option{-Wno-error=} as described above. 2942(Printing of the option in the warning message can be disabled using the 2943@option{-fno-diagnostics-show-option} flag.) 2944 2945Note that specifying @option{-Werror=}@var{foo} automatically implies 2946@option{-W}@var{foo}. However, @option{-Wno-error=}@var{foo} does not 2947imply anything. 2948 2949@item -Wfatal-errors 2950@opindex Wfatal-errors 2951@opindex Wno-fatal-errors 2952This option causes the compiler to abort compilation on the first error 2953occurred rather than trying to keep going and printing further error 2954messages. 2955 2956@end table 2957 2958You can request many specific warnings with options beginning 2959@samp{-W}, for example @option{-Wimplicit} to request warnings on 2960implicit declarations. Each of these specific warning options also 2961has a negative form beginning @samp{-Wno-} to turn off warnings; for 2962example, @option{-Wno-implicit}. This manual lists only one of the 2963two forms, whichever is not the default. For further, 2964language-specific options also refer to @ref{C++ Dialect Options} and 2965@ref{Objective-C and Objective-C++ Dialect Options}. 2966 2967When an unrecognized warning option is requested (e.g., 2968@option{-Wunknown-warning}), GCC will emit a diagnostic stating 2969that the option is not recognized. However, if the @option{-Wno-} form 2970is used, the behavior is slightly different: No diagnostic will be 2971produced for @option{-Wno-unknown-warning} unless other diagnostics 2972are being produced. This allows the use of new @option{-Wno-} options 2973with old compilers, but if something goes wrong, the compiler will 2974warn that an unrecognized option was used. 2975 2976@table @gcctabopt 2977@item -pedantic 2978@opindex pedantic 2979Issue all the warnings demanded by strict ISO C and ISO C++; 2980reject all programs that use forbidden extensions, and some other 2981programs that do not follow ISO C and ISO C++. For ISO C, follows the 2982version of the ISO C standard specified by any @option{-std} option used. 2983 2984Valid ISO C and ISO C++ programs should compile properly with or without 2985this option (though a rare few will require @option{-ansi} or a 2986@option{-std} option specifying the required version of ISO C)@. However, 2987without this option, certain GNU extensions and traditional C and C++ 2988features are supported as well. With this option, they are rejected. 2989 2990@option{-pedantic} does not cause warning messages for use of the 2991alternate keywords whose names begin and end with @samp{__}. Pedantic 2992warnings are also disabled in the expression that follows 2993@code{__extension__}. However, only system header files should use 2994these escape routes; application programs should avoid them. 2995@xref{Alternate Keywords}. 2996 2997Some users try to use @option{-pedantic} to check programs for strict ISO 2998C conformance. They soon find that it does not do quite what they want: 2999it finds some non-ISO practices, but not all---only those for which 3000ISO C @emph{requires} a diagnostic, and some others for which 3001diagnostics have been added. 3002 3003A feature to report any failure to conform to ISO C might be useful in 3004some instances, but would require considerable additional work and would 3005be quite different from @option{-pedantic}. We don't have plans to 3006support such a feature in the near future. 3007 3008Where the standard specified with @option{-std} represents a GNU 3009extended dialect of C, such as @samp{gnu90} or @samp{gnu99}, there is a 3010corresponding @dfn{base standard}, the version of ISO C on which the GNU 3011extended dialect is based. Warnings from @option{-pedantic} are given 3012where they are required by the base standard. (It would not make sense 3013for such warnings to be given only for features not in the specified GNU 3014C dialect, since by definition the GNU dialects of C include all 3015features the compiler supports with the given option, and there would be 3016nothing to warn about.) 3017 3018@item -pedantic-errors 3019@opindex pedantic-errors 3020Like @option{-pedantic}, except that errors are produced rather than 3021warnings. 3022 3023@item -Wall 3024@opindex Wall 3025@opindex Wno-all 3026This enables all the warnings about constructions that some users 3027consider questionable, and that are easy to avoid (or modify to 3028prevent the warning), even in conjunction with macros. This also 3029enables some language-specific warnings described in @ref{C++ Dialect 3030Options} and @ref{Objective-C and Objective-C++ Dialect Options}. 3031 3032@option{-Wall} turns on the following warning flags: 3033 3034@gccoptlist{-Waddress @gol 3035-Warray-bounds @r{(only with} @option{-O2}@r{)} @gol 3036-Wc++11-compat @gol 3037-Wchar-subscripts @gol 3038-Wenum-compare @r{(in C/Objc; this is on by default in C++)} @gol 3039-Wimplicit-int @r{(C and Objective-C only)} @gol 3040-Wimplicit-function-declaration @r{(C and Objective-C only)} @gol 3041-Wcomment @gol 3042-Wformat @gol 3043-Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)} @gol 3044-Wmaybe-uninitialized @gol 3045-Wmissing-braces @gol 3046-Wnonnull @gol 3047-Wparentheses @gol 3048-Wpointer-sign @gol 3049-Wreorder @gol 3050-Wreturn-type @gol 3051-Wsequence-point @gol 3052-Wsign-compare @r{(only in C++)} @gol 3053-Wstrict-aliasing @gol 3054-Wstrict-overflow=1 @gol 3055-Wswitch @gol 3056-Wtrigraphs @gol 3057-Wuninitialized @gol 3058-Wunknown-pragmas @gol 3059-Wunused-function @gol 3060-Wunused-label @gol 3061-Wunused-value @gol 3062-Wunused-variable @gol 3063-Wvolatile-register-var @gol 3064} 3065 3066Note that some warning flags are not implied by @option{-Wall}. Some of 3067them warn about constructions that users generally do not consider 3068questionable, but which occasionally you might wish to check for; 3069others warn about constructions that are necessary or hard to avoid in 3070some cases, and there is no simple way to modify the code to suppress 3071the warning. Some of them are enabled by @option{-Wextra} but many of 3072them must be enabled individually. 3073 3074@item -Wextra 3075@opindex W 3076@opindex Wextra 3077@opindex Wno-extra 3078This enables some extra warning flags that are not enabled by 3079@option{-Wall}. (This option used to be called @option{-W}. The older 3080name is still supported, but the newer name is more descriptive.) 3081 3082@gccoptlist{-Wclobbered @gol 3083-Wempty-body @gol 3084-Wignored-qualifiers @gol 3085-Wmissing-field-initializers @gol 3086-Wmissing-parameter-type @r{(C only)} @gol 3087-Wold-style-declaration @r{(C only)} @gol 3088-Woverride-init @gol 3089-Wsign-compare @gol 3090-Wtype-limits @gol 3091-Wuninitialized @gol 3092-Wunused-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)} @gol 3093-Wunused-but-set-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)} @gol 3094} 3095 3096The option @option{-Wextra} also prints warning messages for the 3097following cases: 3098 3099@itemize @bullet 3100 3101@item 3102A pointer is compared against integer zero with @samp{<}, @samp{<=}, 3103@samp{>}, or @samp{>=}. 3104 3105@item 3106(C++ only) An enumerator and a non-enumerator both appear in a 3107conditional expression. 3108 3109@item 3110(C++ only) Ambiguous virtual bases. 3111 3112@item 3113(C++ only) Subscripting an array that has been declared @samp{register}. 3114 3115@item 3116(C++ only) Taking the address of a variable that has been declared 3117@samp{register}. 3118 3119@item 3120(C++ only) A base class is not initialized in a derived class' copy 3121constructor. 3122 3123@end itemize 3124 3125@item -Wchar-subscripts 3126@opindex Wchar-subscripts 3127@opindex Wno-char-subscripts 3128Warn if an array subscript has type @code{char}. This is a common cause 3129of error, as programmers often forget that this type is signed on some 3130machines. 3131This warning is enabled by @option{-Wall}. 3132 3133@item -Wcomment 3134@opindex Wcomment 3135@opindex Wno-comment 3136Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*} 3137comment, or whenever a Backslash-Newline appears in a @samp{//} comment. 3138This warning is enabled by @option{-Wall}. 3139 3140@item -Wno-coverage-mismatch 3141@opindex Wno-coverage-mismatch 3142Warn if feedback profiles do not match when using the 3143@option{-fprofile-use} option. 3144If a source file was changed between @option{-fprofile-gen} and 3145@option{-fprofile-use}, the files with the profile feedback can fail 3146to match the source file and GCC cannot use the profile feedback 3147information. By default, this warning is enabled and is treated as an 3148error. @option{-Wno-coverage-mismatch} can be used to disable the 3149warning or @option{-Wno-error=coverage-mismatch} can be used to 3150disable the error. Disabling the error for this warning can result in 3151poorly optimized code and is useful only in the 3152case of very minor changes such as bug fixes to an existing code-base. 3153Completely disabling the warning is not recommended. 3154 3155@item -Wno-cpp 3156@r{(C, Objective-C, C++, Objective-C++ and Fortran only)} 3157 3158Suppress warning messages emitted by @code{#warning} directives. 3159 3160@item -Wdouble-promotion @r{(C, C++, Objective-C and Objective-C++ only)} 3161@opindex Wdouble-promotion 3162@opindex Wno-double-promotion 3163Give a warning when a value of type @code{float} is implicitly 3164promoted to @code{double}. CPUs with a 32-bit ``single-precision'' 3165floating-point unit implement @code{float} in hardware, but emulate 3166@code{double} in software. On such a machine, doing computations 3167using @code{double} values is much more expensive because of the 3168overhead required for software emulation. 3169 3170It is easy to accidentally do computations with @code{double} because 3171floating-point literals are implicitly of type @code{double}. For 3172example, in: 3173@smallexample 3174@group 3175float area(float radius) 3176@{ 3177 return 3.14159 * radius * radius; 3178@} 3179@end group 3180@end smallexample 3181the compiler will perform the entire computation with @code{double} 3182because the floating-point literal is a @code{double}. 3183 3184@item -Wformat 3185@opindex Wformat 3186@opindex Wno-format 3187@opindex ffreestanding 3188@opindex fno-builtin 3189Check calls to @code{printf} and @code{scanf}, etc., to make sure that 3190the arguments supplied have types appropriate to the format string 3191specified, and that the conversions specified in the format string make 3192sense. This includes standard functions, and others specified by format 3193attributes (@pxref{Function Attributes}), in the @code{printf}, 3194@code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension, 3195not in the C standard) families (or other target-specific families). 3196Which functions are checked without format attributes having been 3197specified depends on the standard version selected, and such checks of 3198functions without the attribute specified are disabled by 3199@option{-ffreestanding} or @option{-fno-builtin}. 3200 3201The formats are checked against the format features supported by GNU 3202libc version 2.2. These include all ISO C90 and C99 features, as well 3203as features from the Single Unix Specification and some BSD and GNU 3204extensions. Other library implementations may not support all these 3205features; GCC does not support warning about features that go beyond a 3206particular library's limitations. However, if @option{-pedantic} is used 3207with @option{-Wformat}, warnings will be given about format features not 3208in the selected standard version (but not for @code{strfmon} formats, 3209since those are not in any version of the C standard). @xref{C Dialect 3210Options,,Options Controlling C Dialect}. 3211 3212Since @option{-Wformat} also checks for null format arguments for 3213several functions, @option{-Wformat} also implies @option{-Wnonnull}. 3214 3215@option{-Wformat} is included in @option{-Wall}. For more control over some 3216aspects of format checking, the options @option{-Wformat-y2k}, 3217@option{-Wno-format-extra-args}, @option{-Wno-format-zero-length}, 3218@option{-Wformat-nonliteral}, @option{-Wformat-security}, and 3219@option{-Wformat=2} are available, but are not included in @option{-Wall}. 3220 3221@item -Wformat-y2k 3222@opindex Wformat-y2k 3223@opindex Wno-format-y2k 3224If @option{-Wformat} is specified, also warn about @code{strftime} 3225formats that may yield only a two-digit year. 3226 3227@item -Wno-format-contains-nul 3228@opindex Wno-format-contains-nul 3229@opindex Wformat-contains-nul 3230If @option{-Wformat} is specified, do not warn about format strings that 3231contain NUL bytes. 3232 3233@item -Wno-format-extra-args 3234@opindex Wno-format-extra-args 3235@opindex Wformat-extra-args 3236If @option{-Wformat} is specified, do not warn about excess arguments to a 3237@code{printf} or @code{scanf} format function. The C standard specifies 3238that such arguments are ignored. 3239 3240Where the unused arguments lie between used arguments that are 3241specified with @samp{$} operand number specifications, normally 3242warnings are still given, since the implementation could not know what 3243type to pass to @code{va_arg} to skip the unused arguments. However, 3244in the case of @code{scanf} formats, this option will suppress the 3245warning if the unused arguments are all pointers, since the Single 3246Unix Specification says that such unused arguments are allowed. 3247 3248@item -Wno-format-zero-length 3249@opindex Wno-format-zero-length 3250@opindex Wformat-zero-length 3251If @option{-Wformat} is specified, do not warn about zero-length formats. 3252The C standard specifies that zero-length formats are allowed. 3253 3254@item -Wformat-nonliteral 3255@opindex Wformat-nonliteral 3256@opindex Wno-format-nonliteral 3257If @option{-Wformat} is specified, also warn if the format string is not a 3258string literal and so cannot be checked, unless the format function 3259takes its format arguments as a @code{va_list}. 3260 3261@item -Wformat-security 3262@opindex Wformat-security 3263@opindex Wno-format-security 3264If @option{-Wformat} is specified, also warn about uses of format 3265functions that represent possible security problems. At present, this 3266warns about calls to @code{printf} and @code{scanf} functions where the 3267format string is not a string literal and there are no format arguments, 3268as in @code{printf (foo);}. This may be a security hole if the format 3269string came from untrusted input and contains @samp{%n}. (This is 3270currently a subset of what @option{-Wformat-nonliteral} warns about, but 3271in future warnings may be added to @option{-Wformat-security} that are not 3272included in @option{-Wformat-nonliteral}.) 3273 3274@item -Wformat=2 3275@opindex Wformat=2 3276@opindex Wno-format=2 3277Enable @option{-Wformat} plus format checks not included in 3278@option{-Wformat}. Currently equivalent to @samp{-Wformat 3279-Wformat-nonliteral -Wformat-security -Wformat-y2k}. 3280 3281@item -Wnonnull 3282@opindex Wnonnull 3283@opindex Wno-nonnull 3284Warn about passing a null pointer for arguments marked as 3285requiring a non-null value by the @code{nonnull} function attribute. 3286 3287@option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}. It 3288can be disabled with the @option{-Wno-nonnull} option. 3289 3290@item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)} 3291@opindex Winit-self 3292@opindex Wno-init-self 3293Warn about uninitialized variables that are initialized with themselves. 3294Note this option can only be used with the @option{-Wuninitialized} option. 3295 3296For example, GCC will warn about @code{i} being uninitialized in the 3297following snippet only when @option{-Winit-self} has been specified: 3298@smallexample 3299@group 3300int f() 3301@{ 3302 int i = i; 3303 return i; 3304@} 3305@end group 3306@end smallexample 3307 3308@item -Wimplicit-int @r{(C and Objective-C only)} 3309@opindex Wimplicit-int 3310@opindex Wno-implicit-int 3311Warn when a declaration does not specify a type. 3312This warning is enabled by @option{-Wall}. 3313 3314@item -Wimplicit-function-declaration @r{(C and Objective-C only)} 3315@opindex Wimplicit-function-declaration 3316@opindex Wno-implicit-function-declaration 3317Give a warning whenever a function is used before being declared. In 3318C99 mode (@option{-std=c99} or @option{-std=gnu99}), this warning is 3319enabled by default and it is made into an error by 3320@option{-pedantic-errors}. This warning is also enabled by 3321@option{-Wall}. 3322 3323@item -Wimplicit @r{(C and Objective-C only)} 3324@opindex Wimplicit 3325@opindex Wno-implicit 3326Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}. 3327This warning is enabled by @option{-Wall}. 3328 3329@item -Wignored-qualifiers @r{(C and C++ only)} 3330@opindex Wignored-qualifiers 3331@opindex Wno-ignored-qualifiers 3332Warn if the return type of a function has a type qualifier 3333such as @code{const}. For ISO C such a type qualifier has no effect, 3334since the value returned by a function is not an lvalue. 3335For C++, the warning is only emitted for scalar types or @code{void}. 3336ISO C prohibits qualified @code{void} return types on function 3337definitions, so such return types always receive a warning 3338even without this option. 3339 3340This warning is also enabled by @option{-Wextra}. 3341 3342@item -Wmain 3343@opindex Wmain 3344@opindex Wno-main 3345Warn if the type of @samp{main} is suspicious. @samp{main} should be 3346a function with external linkage, returning int, taking either zero 3347arguments, two, or three arguments of appropriate types. This warning 3348is enabled by default in C++ and is enabled by either @option{-Wall} 3349or @option{-pedantic}. 3350 3351@item -Wmissing-braces 3352@opindex Wmissing-braces 3353@opindex Wno-missing-braces 3354Warn if an aggregate or union initializer is not fully bracketed. In 3355the following example, the initializer for @samp{a} is not fully 3356bracketed, but that for @samp{b} is fully bracketed. 3357 3358@smallexample 3359int a[2][2] = @{ 0, 1, 2, 3 @}; 3360int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @}; 3361@end smallexample 3362 3363This warning is enabled by @option{-Wall}. 3364 3365@item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)} 3366@opindex Wmissing-include-dirs 3367@opindex Wno-missing-include-dirs 3368Warn if a user-supplied include directory does not exist. 3369 3370@item -Wparentheses 3371@opindex Wparentheses 3372@opindex Wno-parentheses 3373Warn if parentheses are omitted in certain contexts, such 3374as when there is an assignment in a context where a truth value 3375is expected, or when operators are nested whose precedence people 3376often get confused about. 3377 3378Also warn if a comparison like @samp{x<=y<=z} appears; this is 3379equivalent to @samp{(x<=y ? 1 : 0) <= z}, which is a different 3380interpretation from that of ordinary mathematical notation. 3381 3382Also warn about constructions where there may be confusion to which 3383@code{if} statement an @code{else} branch belongs. Here is an example of 3384such a case: 3385 3386@smallexample 3387@group 3388@{ 3389 if (a) 3390 if (b) 3391 foo (); 3392 else 3393 bar (); 3394@} 3395@end group 3396@end smallexample 3397 3398In C/C++, every @code{else} branch belongs to the innermost possible 3399@code{if} statement, which in this example is @code{if (b)}. This is 3400often not what the programmer expected, as illustrated in the above 3401example by indentation the programmer chose. When there is the 3402potential for this confusion, GCC will issue a warning when this flag 3403is specified. To eliminate the warning, add explicit braces around 3404the innermost @code{if} statement so there is no way the @code{else} 3405could belong to the enclosing @code{if}. The resulting code would 3406look like this: 3407 3408@smallexample 3409@group 3410@{ 3411 if (a) 3412 @{ 3413 if (b) 3414 foo (); 3415 else 3416 bar (); 3417 @} 3418@} 3419@end group 3420@end smallexample 3421 3422Also warn for dangerous uses of the 3423?: with omitted middle operand GNU extension. When the condition 3424in the ?: operator is a boolean expression the omitted value will 3425be always 1. Often the user expects it to be a value computed 3426inside the conditional expression instead. 3427 3428This warning is enabled by @option{-Wall}. 3429 3430@item -Wsequence-point 3431@opindex Wsequence-point 3432@opindex Wno-sequence-point 3433Warn about code that may have undefined semantics because of violations 3434of sequence point rules in the C and C++ standards. 3435 3436The C and C++ standards defines the order in which expressions in a C/C++ 3437program are evaluated in terms of @dfn{sequence points}, which represent 3438a partial ordering between the execution of parts of the program: those 3439executed before the sequence point, and those executed after it. These 3440occur after the evaluation of a full expression (one which is not part 3441of a larger expression), after the evaluation of the first operand of a 3442@code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a 3443function is called (but after the evaluation of its arguments and the 3444expression denoting the called function), and in certain other places. 3445Other than as expressed by the sequence point rules, the order of 3446evaluation of subexpressions of an expression is not specified. All 3447these rules describe only a partial order rather than a total order, 3448since, for example, if two functions are called within one expression 3449with no sequence point between them, the order in which the functions 3450are called is not specified. However, the standards committee have 3451ruled that function calls do not overlap. 3452 3453It is not specified when between sequence points modifications to the 3454values of objects take effect. Programs whose behavior depends on this 3455have undefined behavior; the C and C++ standards specify that ``Between 3456the previous and next sequence point an object shall have its stored 3457value modified at most once by the evaluation of an expression. 3458Furthermore, the prior value shall be read only to determine the value 3459to be stored.''. If a program breaks these rules, the results on any 3460particular implementation are entirely unpredictable. 3461 3462Examples of code with undefined behavior are @code{a = a++;}, @code{a[n] 3463= b[n++]} and @code{a[i++] = i;}. Some more complicated cases are not 3464diagnosed by this option, and it may give an occasional false positive 3465result, but in general it has been found fairly effective at detecting 3466this sort of problem in programs. 3467 3468The standard is worded confusingly, therefore there is some debate 3469over the precise meaning of the sequence point rules in subtle cases. 3470Links to discussions of the problem, including proposed formal 3471definitions, may be found on the GCC readings page, at 3472@uref{http://gcc.gnu.org/@/readings.html}. 3473 3474This warning is enabled by @option{-Wall} for C and C++. 3475 3476@item -Wreturn-type 3477@opindex Wreturn-type 3478@opindex Wno-return-type 3479Warn whenever a function is defined with a return-type that defaults 3480to @code{int}. Also warn about any @code{return} statement with no 3481return-value in a function whose return-type is not @code{void} 3482(falling off the end of the function body is considered returning 3483without a value), and about a @code{return} statement with an 3484expression in a function whose return-type is @code{void}. 3485 3486For C++, a function without return type always produces a diagnostic 3487message, even when @option{-Wno-return-type} is specified. The only 3488exceptions are @samp{main} and functions defined in system headers. 3489 3490This warning is enabled by @option{-Wall}. 3491 3492@item -Wswitch 3493@opindex Wswitch 3494@opindex Wno-switch 3495Warn whenever a @code{switch} statement has an index of enumerated type 3496and lacks a @code{case} for one or more of the named codes of that 3497enumeration. (The presence of a @code{default} label prevents this 3498warning.) @code{case} labels outside the enumeration range also 3499provoke warnings when this option is used (even if there is a 3500@code{default} label). 3501This warning is enabled by @option{-Wall}. 3502 3503@item -Wswitch-default 3504@opindex Wswitch-default 3505@opindex Wno-switch-default 3506Warn whenever a @code{switch} statement does not have a @code{default} 3507case. 3508 3509@item -Wswitch-enum 3510@opindex Wswitch-enum 3511@opindex Wno-switch-enum 3512Warn whenever a @code{switch} statement has an index of enumerated type 3513and lacks a @code{case} for one or more of the named codes of that 3514enumeration. @code{case} labels outside the enumeration range also 3515provoke warnings when this option is used. The only difference 3516between @option{-Wswitch} and this option is that this option gives a 3517warning about an omitted enumeration code even if there is a 3518@code{default} label. 3519 3520@item -Wsync-nand @r{(C and C++ only)} 3521@opindex Wsync-nand 3522@opindex Wno-sync-nand 3523Warn when @code{__sync_fetch_and_nand} and @code{__sync_nand_and_fetch} 3524built-in functions are used. These functions changed semantics in GCC 4.4. 3525 3526@item -Wtrigraphs 3527@opindex Wtrigraphs 3528@opindex Wno-trigraphs 3529Warn if any trigraphs are encountered that might change the meaning of 3530the program (trigraphs within comments are not warned about). 3531This warning is enabled by @option{-Wall}. 3532 3533@item -Wunused-but-set-parameter 3534@opindex Wunused-but-set-parameter 3535@opindex Wno-unused-but-set-parameter 3536Warn whenever a function parameter is assigned to, but otherwise unused 3537(aside from its declaration). 3538 3539To suppress this warning use the @samp{unused} attribute 3540(@pxref{Variable Attributes}). 3541 3542This warning is also enabled by @option{-Wunused} together with 3543@option{-Wextra}. 3544 3545@item -Wunused-but-set-variable 3546@opindex Wunused-but-set-variable 3547@opindex Wno-unused-but-set-variable 3548Warn whenever a local variable is assigned to, but otherwise unused 3549(aside from its declaration). 3550This warning is enabled by @option{-Wall}. 3551 3552To suppress this warning use the @samp{unused} attribute 3553(@pxref{Variable Attributes}). 3554 3555This warning is also enabled by @option{-Wunused}, which is enabled 3556by @option{-Wall}. 3557 3558@item -Wunused-function 3559@opindex Wunused-function 3560@opindex Wno-unused-function 3561Warn whenever a static function is declared but not defined or a 3562non-inline static function is unused. 3563This warning is enabled by @option{-Wall}. 3564 3565@item -Wunused-label 3566@opindex Wunused-label 3567@opindex Wno-unused-label 3568Warn whenever a label is declared but not used. 3569This warning is enabled by @option{-Wall}. 3570 3571To suppress this warning use the @samp{unused} attribute 3572(@pxref{Variable Attributes}). 3573 3574@item -Wunused-local-typedefs @r{(C, Objective-C, C++ and Objective-C++ only)} 3575@opindex Wunused-local-typedefs 3576Warn when a typedef locally defined in a function is not used. 3577 3578@item -Wunused-parameter 3579@opindex Wunused-parameter 3580@opindex Wno-unused-parameter 3581Warn whenever a function parameter is unused aside from its declaration. 3582 3583To suppress this warning use the @samp{unused} attribute 3584(@pxref{Variable Attributes}). 3585 3586@item -Wno-unused-result 3587@opindex Wunused-result 3588@opindex Wno-unused-result 3589Do not warn if a caller of a function marked with attribute 3590@code{warn_unused_result} (@pxref{Function Attributes}) does not use 3591its return value. The default is @option{-Wunused-result}. 3592 3593@item -Wunused-variable 3594@opindex Wunused-variable 3595@opindex Wno-unused-variable 3596Warn whenever a local variable or non-constant static variable is unused 3597aside from its declaration. 3598This warning is enabled by @option{-Wall}. 3599 3600To suppress this warning use the @samp{unused} attribute 3601(@pxref{Variable Attributes}). 3602 3603@item -Wunused-value 3604@opindex Wunused-value 3605@opindex Wno-unused-value 3606Warn whenever a statement computes a result that is explicitly not 3607used. To suppress this warning cast the unused expression to 3608@samp{void}. This includes an expression-statement or the left-hand 3609side of a comma expression that contains no side effects. For example, 3610an expression such as @samp{x[i,j]} will cause a warning, while 3611@samp{x[(void)i,j]} will not. 3612 3613This warning is enabled by @option{-Wall}. 3614 3615@item -Wunused 3616@opindex Wunused 3617@opindex Wno-unused 3618All the above @option{-Wunused} options combined. 3619 3620In order to get a warning about an unused function parameter, you must 3621either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies 3622@samp{-Wunused}), or separately specify @option{-Wunused-parameter}. 3623 3624@item -Wuninitialized 3625@opindex Wuninitialized 3626@opindex Wno-uninitialized 3627Warn if an automatic variable is used without first being initialized 3628or if a variable may be clobbered by a @code{setjmp} call. In C++, 3629warn if a non-static reference or non-static @samp{const} member 3630appears in a class without constructors. 3631 3632If you want to warn about code that uses the uninitialized value of the 3633variable in its own initializer, use the @option{-Winit-self} option. 3634 3635These warnings occur for individual uninitialized or clobbered 3636elements of structure, union or array variables as well as for 3637variables that are uninitialized or clobbered as a whole. They do 3638not occur for variables or elements declared @code{volatile}. Because 3639these warnings depend on optimization, the exact variables or elements 3640for which there are warnings will depend on the precise optimization 3641options and version of GCC used. 3642 3643Note that there may be no warning about a variable that is used only 3644to compute a value that itself is never used, because such 3645computations may be deleted by data flow analysis before the warnings 3646are printed. 3647 3648@item -Wmaybe-uninitialized 3649@opindex Wmaybe-uninitialized 3650@opindex Wno-maybe-uninitialized 3651For an automatic variable, if there exists a path from the function 3652entry to a use of the variable that is initialized, but there exist 3653some other paths the variable is not initialized, the compiler will 3654emit a warning if it can not prove the uninitialized paths do not 3655happen at run time. These warnings are made optional because GCC is 3656not smart enough to see all the reasons why the code might be correct 3657despite appearing to have an error. Here is one example of how 3658this can happen: 3659 3660@smallexample 3661@group 3662@{ 3663 int x; 3664 switch (y) 3665 @{ 3666 case 1: x = 1; 3667 break; 3668 case 2: x = 4; 3669 break; 3670 case 3: x = 5; 3671 @} 3672 foo (x); 3673@} 3674@end group 3675@end smallexample 3676 3677@noindent 3678If the value of @code{y} is always 1, 2 or 3, then @code{x} is 3679always initialized, but GCC doesn't know this. To suppress the 3680warning, the user needs to provide a default case with assert(0) or 3681similar code. 3682 3683@cindex @code{longjmp} warnings 3684This option also warns when a non-volatile automatic variable might be 3685changed by a call to @code{longjmp}. These warnings as well are possible 3686only in optimizing compilation. 3687 3688The compiler sees only the calls to @code{setjmp}. It cannot know 3689where @code{longjmp} will be called; in fact, a signal handler could 3690call it at any point in the code. As a result, you may get a warning 3691even when there is in fact no problem because @code{longjmp} cannot 3692in fact be called at the place that would cause a problem. 3693 3694Some spurious warnings can be avoided if you declare all the functions 3695you use that never return as @code{noreturn}. @xref{Function 3696Attributes}. 3697 3698This warning is enabled by @option{-Wall} or @option{-Wextra}. 3699 3700@item -Wunknown-pragmas 3701@opindex Wunknown-pragmas 3702@opindex Wno-unknown-pragmas 3703@cindex warning for unknown pragmas 3704@cindex unknown pragmas, warning 3705@cindex pragmas, warning of unknown 3706Warn when a @code{#pragma} directive is encountered that is not understood by 3707GCC@. If this command-line option is used, warnings will even be issued 3708for unknown pragmas in system header files. This is not the case if 3709the warnings were only enabled by the @option{-Wall} command-line option. 3710 3711@item -Wno-pragmas 3712@opindex Wno-pragmas 3713@opindex Wpragmas 3714Do not warn about misuses of pragmas, such as incorrect parameters, 3715invalid syntax, or conflicts between pragmas. See also 3716@samp{-Wunknown-pragmas}. 3717 3718@item -Wstrict-aliasing 3719@opindex Wstrict-aliasing 3720@opindex Wno-strict-aliasing 3721This option is only active when @option{-fstrict-aliasing} is active. 3722It warns about code that might break the strict aliasing rules that the 3723compiler is using for optimization. The warning does not catch all 3724cases, but does attempt to catch the more common pitfalls. It is 3725included in @option{-Wall}. 3726It is equivalent to @option{-Wstrict-aliasing=3} 3727 3728@item -Wstrict-aliasing=n 3729@opindex Wstrict-aliasing=n 3730@opindex Wno-strict-aliasing=n 3731This option is only active when @option{-fstrict-aliasing} is active. 3732It warns about code that might break the strict aliasing rules that the 3733compiler is using for optimization. 3734Higher levels correspond to higher accuracy (fewer false positives). 3735Higher levels also correspond to more effort, similar to the way -O works. 3736@option{-Wstrict-aliasing} is equivalent to @option{-Wstrict-aliasing=n}, 3737with n=3. 3738 3739Level 1: Most aggressive, quick, least accurate. 3740Possibly useful when higher levels 3741do not warn but -fstrict-aliasing still breaks the code, as it has very few 3742false negatives. However, it has many false positives. 3743Warns for all pointer conversions between possibly incompatible types, 3744even if never dereferenced. Runs in the front end only. 3745 3746Level 2: Aggressive, quick, not too precise. 3747May still have many false positives (not as many as level 1 though), 3748and few false negatives (but possibly more than level 1). 3749Unlike level 1, it only warns when an address is taken. Warns about 3750incomplete types. Runs in the front end only. 3751 3752Level 3 (default for @option{-Wstrict-aliasing}): 3753Should have very few false positives and few false 3754negatives. Slightly slower than levels 1 or 2 when optimization is enabled. 3755Takes care of the common pun+dereference pattern in the front end: 3756@code{*(int*)&some_float}. 3757If optimization is enabled, it also runs in the back end, where it deals 3758with multiple statement cases using flow-sensitive points-to information. 3759Only warns when the converted pointer is dereferenced. 3760Does not warn about incomplete types. 3761 3762@item -Wstrict-overflow 3763@itemx -Wstrict-overflow=@var{n} 3764@opindex Wstrict-overflow 3765@opindex Wno-strict-overflow 3766This option is only active when @option{-fstrict-overflow} is active. 3767It warns about cases where the compiler optimizes based on the 3768assumption that signed overflow does not occur. Note that it does not 3769warn about all cases where the code might overflow: it only warns 3770about cases where the compiler implements some optimization. Thus 3771this warning depends on the optimization level. 3772 3773An optimization that assumes that signed overflow does not occur is 3774perfectly safe if the values of the variables involved are such that 3775overflow never does, in fact, occur. Therefore this warning can 3776easily give a false positive: a warning about code that is not 3777actually a problem. To help focus on important issues, several 3778warning levels are defined. No warnings are issued for the use of 3779undefined signed overflow when estimating how many iterations a loop 3780will require, in particular when determining whether a loop will be 3781executed at all. 3782 3783@table @gcctabopt 3784@item -Wstrict-overflow=1 3785Warn about cases that are both questionable and easy to avoid. For 3786example: @code{x + 1 > x}; with @option{-fstrict-overflow}, the 3787compiler will simplify this to @code{1}. This level of 3788@option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels 3789are not, and must be explicitly requested. 3790 3791@item -Wstrict-overflow=2 3792Also warn about other cases where a comparison is simplified to a 3793constant. For example: @code{abs (x) >= 0}. This can only be 3794simplified when @option{-fstrict-overflow} is in effect, because 3795@code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than 3796zero. @option{-Wstrict-overflow} (with no level) is the same as 3797@option{-Wstrict-overflow=2}. 3798 3799@item -Wstrict-overflow=3 3800Also warn about other cases where a comparison is simplified. For 3801example: @code{x + 1 > 1} will be simplified to @code{x > 0}. 3802 3803@item -Wstrict-overflow=4 3804Also warn about other simplifications not covered by the above cases. 3805For example: @code{(x * 10) / 5} will be simplified to @code{x * 2}. 3806 3807@item -Wstrict-overflow=5 3808Also warn about cases where the compiler reduces the magnitude of a 3809constant involved in a comparison. For example: @code{x + 2 > y} will 3810be simplified to @code{x + 1 >= y}. This is reported only at the 3811highest warning level because this simplification applies to many 3812comparisons, so this warning level will give a very large number of 3813false positives. 3814@end table 3815 3816@item -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{]} 3817@opindex Wsuggest-attribute= 3818@opindex Wno-suggest-attribute= 3819Warn for cases where adding an attribute may be beneficial. The 3820attributes currently supported are listed below. 3821 3822@table @gcctabopt 3823@item -Wsuggest-attribute=pure 3824@itemx -Wsuggest-attribute=const 3825@itemx -Wsuggest-attribute=noreturn 3826@opindex Wsuggest-attribute=pure 3827@opindex Wno-suggest-attribute=pure 3828@opindex Wsuggest-attribute=const 3829@opindex Wno-suggest-attribute=const 3830@opindex Wsuggest-attribute=noreturn 3831@opindex Wno-suggest-attribute=noreturn 3832 3833Warn about functions that might be candidates for attributes 3834@code{pure}, @code{const} or @code{noreturn}. The compiler only warns for 3835functions visible in other compilation units or (in the case of @code{pure} and 3836@code{const}) if it cannot prove that the function returns normally. A function 3837returns normally if it doesn't contain an infinite loop nor returns abnormally 3838by throwing, calling @code{abort()} or trapping. This analysis requires option 3839@option{-fipa-pure-const}, which is enabled by default at @option{-O} and 3840higher. Higher optimization levels improve the accuracy of the analysis. 3841@end table 3842 3843@item -Warray-bounds 3844@opindex Wno-array-bounds 3845@opindex Warray-bounds 3846This option is only active when @option{-ftree-vrp} is active 3847(default for @option{-O2} and above). It warns about subscripts to arrays 3848that are always out of bounds. This warning is enabled by @option{-Wall}. 3849 3850@item -Wno-div-by-zero 3851@opindex Wno-div-by-zero 3852@opindex Wdiv-by-zero 3853Do not warn about compile-time integer division by zero. Floating-point 3854division by zero is not warned about, as it can be a legitimate way of 3855obtaining infinities and NaNs. 3856 3857@item -Wsystem-headers 3858@opindex Wsystem-headers 3859@opindex Wno-system-headers 3860@cindex warnings from system headers 3861@cindex system headers, warnings from 3862Print warning messages for constructs found in system header files. 3863Warnings from system headers are normally suppressed, on the assumption 3864that they usually do not indicate real problems and would only make the 3865compiler output harder to read. Using this command-line option tells 3866GCC to emit warnings from system headers as if they occurred in user 3867code. However, note that using @option{-Wall} in conjunction with this 3868option will @emph{not} warn about unknown pragmas in system 3869headers---for that, @option{-Wunknown-pragmas} must also be used. 3870 3871@item -Wtrampolines 3872@opindex Wtrampolines 3873@opindex Wno-trampolines 3874 Warn about trampolines generated for pointers to nested functions. 3875 3876 A trampoline is a small piece of data or code that is created at run 3877 time on the stack when the address of a nested function is taken, and 3878 is used to call the nested function indirectly. For some targets, it 3879 is made up of data only and thus requires no special treatment. But, 3880 for most targets, it is made up of code and thus requires the stack 3881 to be made executable in order for the program to work properly. 3882 3883@item -Wfloat-equal 3884@opindex Wfloat-equal 3885@opindex Wno-float-equal 3886Warn if floating-point values are used in equality comparisons. 3887 3888The idea behind this is that sometimes it is convenient (for the 3889programmer) to consider floating-point values as approximations to 3890infinitely precise real numbers. If you are doing this, then you need 3891to compute (by analyzing the code, or in some other way) the maximum or 3892likely maximum error that the computation introduces, and allow for it 3893when performing comparisons (and when producing output, but that's a 3894different problem). In particular, instead of testing for equality, you 3895would check to see whether the two values have ranges that overlap; and 3896this is done with the relational operators, so equality comparisons are 3897probably mistaken. 3898 3899@item -Wtraditional @r{(C and Objective-C only)} 3900@opindex Wtraditional 3901@opindex Wno-traditional 3902Warn about certain constructs that behave differently in traditional and 3903ISO C@. Also warn about ISO C constructs that have no traditional C 3904equivalent, and/or problematic constructs that should be avoided. 3905 3906@itemize @bullet 3907@item 3908Macro parameters that appear within string literals in the macro body. 3909In traditional C macro replacement takes place within string literals, 3910but does not in ISO C@. 3911 3912@item 3913In traditional C, some preprocessor directives did not exist. 3914Traditional preprocessors would only consider a line to be a directive 3915if the @samp{#} appeared in column 1 on the line. Therefore 3916@option{-Wtraditional} warns about directives that traditional C 3917understands but would ignore because the @samp{#} does not appear as the 3918first character on the line. It also suggests you hide directives like 3919@samp{#pragma} not understood by traditional C by indenting them. Some 3920traditional implementations would not recognize @samp{#elif}, so it 3921suggests avoiding it altogether. 3922 3923@item 3924A function-like macro that appears without arguments. 3925 3926@item 3927The unary plus operator. 3928 3929@item 3930The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating-point 3931constant suffixes. (Traditional C does support the @samp{L} suffix on integer 3932constants.) Note, these suffixes appear in macros defined in the system 3933headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}. 3934Use of these macros in user code might normally lead to spurious 3935warnings, however GCC's integrated preprocessor has enough context to 3936avoid warning in these cases. 3937 3938@item 3939A function declared external in one block and then used after the end of 3940the block. 3941 3942@item 3943A @code{switch} statement has an operand of type @code{long}. 3944 3945@item 3946A non-@code{static} function declaration follows a @code{static} one. 3947This construct is not accepted by some traditional C compilers. 3948 3949@item 3950The ISO type of an integer constant has a different width or 3951signedness from its traditional type. This warning is only issued if 3952the base of the constant is ten. I.e.@: hexadecimal or octal values, which 3953typically represent bit patterns, are not warned about. 3954 3955@item 3956Usage of ISO string concatenation is detected. 3957 3958@item 3959Initialization of automatic aggregates. 3960 3961@item 3962Identifier conflicts with labels. Traditional C lacks a separate 3963namespace for labels. 3964 3965@item 3966Initialization of unions. If the initializer is zero, the warning is 3967omitted. This is done under the assumption that the zero initializer in 3968user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing 3969initializer warnings and relies on default initialization to zero in the 3970traditional C case. 3971 3972@item 3973Conversions by prototypes between fixed/floating-point values and vice 3974versa. The absence of these prototypes when compiling with traditional 3975C would cause serious problems. This is a subset of the possible 3976conversion warnings, for the full set use @option{-Wtraditional-conversion}. 3977 3978@item 3979Use of ISO C style function definitions. This warning intentionally is 3980@emph{not} issued for prototype declarations or variadic functions 3981because these ISO C features will appear in your code when using 3982libiberty's traditional C compatibility macros, @code{PARAMS} and 3983@code{VPARAMS}. This warning is also bypassed for nested functions 3984because that feature is already a GCC extension and thus not relevant to 3985traditional C compatibility. 3986@end itemize 3987 3988@item -Wtraditional-conversion @r{(C and Objective-C only)} 3989@opindex Wtraditional-conversion 3990@opindex Wno-traditional-conversion 3991Warn if a prototype causes a type conversion that is different from what 3992would happen to the same argument in the absence of a prototype. This 3993includes conversions of fixed point to floating and vice versa, and 3994conversions changing the width or signedness of a fixed-point argument 3995except when the same as the default promotion. 3996 3997@item -Wdeclaration-after-statement @r{(C and Objective-C only)} 3998@opindex Wdeclaration-after-statement 3999@opindex Wno-declaration-after-statement 4000Warn when a declaration is found after a statement in a block. This 4001construct, known from C++, was introduced with ISO C99 and is by default 4002allowed in GCC@. It is not supported by ISO C90 and was not supported by 4003GCC versions before GCC 3.0. @xref{Mixed Declarations}. 4004 4005@item -Wundef 4006@opindex Wundef 4007@opindex Wno-undef 4008Warn if an undefined identifier is evaluated in an @samp{#if} directive. 4009 4010@item -Wno-endif-labels 4011@opindex Wno-endif-labels 4012@opindex Wendif-labels 4013Do not warn whenever an @samp{#else} or an @samp{#endif} are followed by text. 4014 4015@item -Wshadow 4016@opindex Wshadow 4017@opindex Wno-shadow 4018Warn whenever a local variable or type declaration shadows another variable, 4019parameter, type, or class member (in C++), or whenever a built-in function 4020is shadowed. Note that in C++, the compiler will not warn if a local variable 4021shadows a struct/class/enum, but will warn if it shadows an explicit typedef. 4022 4023@item -Wlarger-than=@var{len} 4024@opindex Wlarger-than=@var{len} 4025@opindex Wlarger-than-@var{len} 4026Warn whenever an object of larger than @var{len} bytes is defined. 4027 4028@item -Wframe-larger-than=@var{len} 4029@opindex Wframe-larger-than 4030Warn if the size of a function frame is larger than @var{len} bytes. 4031The computation done to determine the stack frame size is approximate 4032and not conservative. 4033The actual requirements may be somewhat greater than @var{len} 4034even if you do not get a warning. In addition, any space allocated 4035via @code{alloca}, variable-length arrays, or related constructs 4036is not included by the compiler when determining 4037whether or not to issue a warning. 4038 4039@item -Wno-free-nonheap-object 4040@opindex Wno-free-nonheap-object 4041@opindex Wfree-nonheap-object 4042Do not warn when attempting to free an object that was not allocated 4043on the heap. 4044 4045@item -Wstack-usage=@var{len} 4046@opindex Wstack-usage 4047Warn if the stack usage of a function might be larger than @var{len} bytes. 4048The computation done to determine the stack usage is conservative. 4049Any space allocated via @code{alloca}, variable-length arrays, or related 4050constructs is included by the compiler when determining whether or not to 4051issue a warning. 4052 4053The message is in keeping with the output of @option{-fstack-usage}. 4054 4055@itemize 4056@item 4057If the stack usage is fully static but exceeds the specified amount, it's: 4058 4059@smallexample 4060 warning: stack usage is 1120 bytes 4061@end smallexample 4062@item 4063If the stack usage is (partly) dynamic but bounded, it's: 4064 4065@smallexample 4066 warning: stack usage might be 1648 bytes 4067@end smallexample 4068@item 4069If the stack usage is (partly) dynamic and not bounded, it's: 4070 4071@smallexample 4072 warning: stack usage might be unbounded 4073@end smallexample 4074@end itemize 4075 4076@item -Wunsafe-loop-optimizations 4077@opindex Wunsafe-loop-optimizations 4078@opindex Wno-unsafe-loop-optimizations 4079Warn if the loop cannot be optimized because the compiler could not 4080assume anything on the bounds of the loop indices. With 4081@option{-funsafe-loop-optimizations} warn if the compiler made 4082such assumptions. 4083 4084@item -Wno-pedantic-ms-format @r{(MinGW targets only)} 4085@opindex Wno-pedantic-ms-format 4086@opindex Wpedantic-ms-format 4087Disables the warnings about non-ISO @code{printf} / @code{scanf} format 4088width specifiers @code{I32}, @code{I64}, and @code{I} used on Windows targets 4089depending on the MS runtime, when you are using the options @option{-Wformat} 4090and @option{-pedantic} without gnu-extensions. 4091 4092@item -Wpointer-arith 4093@opindex Wpointer-arith 4094@opindex Wno-pointer-arith 4095Warn about anything that depends on the ``size of'' a function type or 4096of @code{void}. GNU C assigns these types a size of 1, for 4097convenience in calculations with @code{void *} pointers and pointers 4098to functions. In C++, warn also when an arithmetic operation involves 4099@code{NULL}. This warning is also enabled by @option{-pedantic}. 4100 4101@item -Wtype-limits 4102@opindex Wtype-limits 4103@opindex Wno-type-limits 4104Warn if a comparison is always true or always false due to the limited 4105range of the data type, but do not warn for constant expressions. For 4106example, warn if an unsigned variable is compared against zero with 4107@samp{<} or @samp{>=}. This warning is also enabled by 4108@option{-Wextra}. 4109 4110@item -Wbad-function-cast @r{(C and Objective-C only)} 4111@opindex Wbad-function-cast 4112@opindex Wno-bad-function-cast 4113Warn whenever a function call is cast to a non-matching type. 4114For example, warn if @code{int malloc()} is cast to @code{anything *}. 4115 4116@item -Wc++-compat @r{(C and Objective-C only)} 4117Warn about ISO C constructs that are outside of the common subset of 4118ISO C and ISO C++, e.g.@: request for implicit conversion from 4119@code{void *} to a pointer to non-@code{void} type. 4120 4121@item -Wc++11-compat @r{(C++ and Objective-C++ only)} 4122Warn about C++ constructs whose meaning differs between ISO C++ 1998 4123and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are keywords 4124in ISO C++ 2011. This warning turns on @option{-Wnarrowing} and is 4125enabled by @option{-Wall}. 4126 4127@item -Wcast-qual 4128@opindex Wcast-qual 4129@opindex Wno-cast-qual 4130Warn whenever a pointer is cast so as to remove a type qualifier from 4131the target type. For example, warn if a @code{const char *} is cast 4132to an ordinary @code{char *}. 4133 4134Also warn when making a cast that introduces a type qualifier in an 4135unsafe way. For example, casting @code{char **} to @code{const char **} 4136is unsafe, as in this example: 4137 4138@smallexample 4139 /* p is char ** value. */ 4140 const char **q = (const char **) p; 4141 /* Assignment of readonly string to const char * is OK. */ 4142 *q = "string"; 4143 /* Now char** pointer points to read-only memory. */ 4144 **p = 'b'; 4145@end smallexample 4146 4147@item -Wcast-align 4148@opindex Wcast-align 4149@opindex Wno-cast-align 4150Warn whenever a pointer is cast such that the required alignment of the 4151target is increased. For example, warn if a @code{char *} is cast to 4152an @code{int *} on machines where integers can only be accessed at 4153two- or four-byte boundaries. 4154 4155@item -Wwrite-strings 4156@opindex Wwrite-strings 4157@opindex Wno-write-strings 4158When compiling C, give string constants the type @code{const 4159char[@var{length}]} so that copying the address of one into a 4160non-@code{const} @code{char *} pointer will get a warning. These 4161warnings will help you find at compile time code that can try to write 4162into a string constant, but only if you have been very careful about 4163using @code{const} in declarations and prototypes. Otherwise, it will 4164just be a nuisance. This is why we did not make @option{-Wall} request 4165these warnings. 4166 4167When compiling C++, warn about the deprecated conversion from string 4168literals to @code{char *}. This warning is enabled by default for C++ 4169programs. 4170 4171@item -Wclobbered 4172@opindex Wclobbered 4173@opindex Wno-clobbered 4174Warn for variables that might be changed by @samp{longjmp} or 4175@samp{vfork}. This warning is also enabled by @option{-Wextra}. 4176 4177@item -Wconversion 4178@opindex Wconversion 4179@opindex Wno-conversion 4180Warn for implicit conversions that may alter a value. This includes 4181conversions between real and integer, like @code{abs (x)} when 4182@code{x} is @code{double}; conversions between signed and unsigned, 4183like @code{unsigned ui = -1}; and conversions to smaller types, like 4184@code{sqrtf (M_PI)}. Do not warn for explicit casts like @code{abs 4185((int) x)} and @code{ui = (unsigned) -1}, or if the value is not 4186changed by the conversion like in @code{abs (2.0)}. Warnings about 4187conversions between signed and unsigned integers can be disabled by 4188using @option{-Wno-sign-conversion}. 4189 4190For C++, also warn for confusing overload resolution for user-defined 4191conversions; and conversions that will never use a type conversion 4192operator: conversions to @code{void}, the same type, a base class or a 4193reference to them. Warnings about conversions between signed and 4194unsigned integers are disabled by default in C++ unless 4195@option{-Wsign-conversion} is explicitly enabled. 4196 4197@item -Wno-conversion-null @r{(C++ and Objective-C++ only)} 4198@opindex Wconversion-null 4199@opindex Wno-conversion-null 4200Do not warn for conversions between @code{NULL} and non-pointer 4201types. @option{-Wconversion-null} is enabled by default. 4202 4203@item -Wzero-as-null-pointer-constant @r{(C++ and Objective-C++ only)} 4204@opindex Wzero-as-null-pointer-constant 4205@opindex Wno-zero-as-null-pointer-constant 4206Warn when a literal '0' is used as null pointer constant. This can 4207be useful to facilitate the conversion to @code{nullptr} in C++11. 4208 4209@item -Wempty-body 4210@opindex Wempty-body 4211@opindex Wno-empty-body 4212Warn if an empty body occurs in an @samp{if}, @samp{else} or @samp{do 4213while} statement. This warning is also enabled by @option{-Wextra}. 4214 4215@item -Wenum-compare 4216@opindex Wenum-compare 4217@opindex Wno-enum-compare 4218Warn about a comparison between values of different enumerated types. 4219In C++ enumeral mismatches in conditional expressions are also 4220diagnosed and the warning is enabled by default. In C this warning is 4221enabled by @option{-Wall}. 4222 4223@item -Wjump-misses-init @r{(C, Objective-C only)} 4224@opindex Wjump-misses-init 4225@opindex Wno-jump-misses-init 4226Warn if a @code{goto} statement or a @code{switch} statement jumps 4227forward across the initialization of a variable, or jumps backward to a 4228label after the variable has been initialized. This only warns about 4229variables that are initialized when they are declared. This warning is 4230only supported for C and Objective-C; in C++ this sort of branch is an 4231error in any case. 4232 4233@option{-Wjump-misses-init} is included in @option{-Wc++-compat}. It 4234can be disabled with the @option{-Wno-jump-misses-init} option. 4235 4236@item -Wsign-compare 4237@opindex Wsign-compare 4238@opindex Wno-sign-compare 4239@cindex warning for comparison of signed and unsigned values 4240@cindex comparison of signed and unsigned values, warning 4241@cindex signed and unsigned values, comparison warning 4242Warn when a comparison between signed and unsigned values could produce 4243an incorrect result when the signed value is converted to unsigned. 4244This warning is also enabled by @option{-Wextra}; to get the other warnings 4245of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}. 4246 4247@item -Wsign-conversion 4248@opindex Wsign-conversion 4249@opindex Wno-sign-conversion 4250Warn for implicit conversions that may change the sign of an integer 4251value, like assigning a signed integer expression to an unsigned 4252integer variable. An explicit cast silences the warning. In C, this 4253option is enabled also by @option{-Wconversion}. 4254 4255@item -Waddress 4256@opindex Waddress 4257@opindex Wno-address 4258Warn about suspicious uses of memory addresses. These include using 4259the address of a function in a conditional expression, such as 4260@code{void func(void); if (func)}, and comparisons against the memory 4261address of a string literal, such as @code{if (x == "abc")}. Such 4262uses typically indicate a programmer error: the address of a function 4263always evaluates to true, so their use in a conditional usually 4264indicate that the programmer forgot the parentheses in a function 4265call; and comparisons against string literals result in unspecified 4266behavior and are not portable in C, so they usually indicate that the 4267programmer intended to use @code{strcmp}. This warning is enabled by 4268@option{-Wall}. 4269 4270@item -Wlogical-op 4271@opindex Wlogical-op 4272@opindex Wno-logical-op 4273Warn about suspicious uses of logical operators in expressions. 4274This includes using logical operators in contexts where a 4275bit-wise operator is likely to be expected. 4276 4277@item -Waggregate-return 4278@opindex Waggregate-return 4279@opindex Wno-aggregate-return 4280Warn if any functions that return structures or unions are defined or 4281called. (In languages where you can return an array, this also elicits 4282a warning.) 4283 4284@item -Wno-attributes 4285@opindex Wno-attributes 4286@opindex Wattributes 4287Do not warn if an unexpected @code{__attribute__} is used, such as 4288unrecognized attributes, function attributes applied to variables, 4289etc. This will not stop errors for incorrect use of supported 4290attributes. 4291 4292@item -Wno-builtin-macro-redefined 4293@opindex Wno-builtin-macro-redefined 4294@opindex Wbuiltin-macro-redefined 4295Do not warn if certain built-in macros are redefined. This suppresses 4296warnings for redefinition of @code{__TIMESTAMP__}, @code{__TIME__}, 4297@code{__DATE__}, @code{__FILE__}, and @code{__BASE_FILE__}. 4298 4299@item -Wstrict-prototypes @r{(C and Objective-C only)} 4300@opindex Wstrict-prototypes 4301@opindex Wno-strict-prototypes 4302Warn if a function is declared or defined without specifying the 4303argument types. (An old-style function definition is permitted without 4304a warning if preceded by a declaration that specifies the argument 4305types.) 4306 4307@item -Wold-style-declaration @r{(C and Objective-C only)} 4308@opindex Wold-style-declaration 4309@opindex Wno-old-style-declaration 4310Warn for obsolescent usages, according to the C Standard, in a 4311declaration. For example, warn if storage-class specifiers like 4312@code{static} are not the first things in a declaration. This warning 4313is also enabled by @option{-Wextra}. 4314 4315@item -Wold-style-definition @r{(C and Objective-C only)} 4316@opindex Wold-style-definition 4317@opindex Wno-old-style-definition 4318Warn if an old-style function definition is used. A warning is given 4319even if there is a previous prototype. 4320 4321@item -Wmissing-parameter-type @r{(C and Objective-C only)} 4322@opindex Wmissing-parameter-type 4323@opindex Wno-missing-parameter-type 4324A function parameter is declared without a type specifier in K&R-style 4325functions: 4326 4327@smallexample 4328void foo(bar) @{ @} 4329@end smallexample 4330 4331This warning is also enabled by @option{-Wextra}. 4332 4333@item -Wmissing-prototypes @r{(C and Objective-C only)} 4334@opindex Wmissing-prototypes 4335@opindex Wno-missing-prototypes 4336Warn if a global function is defined without a previous prototype 4337declaration. This warning is issued even if the definition itself 4338provides a prototype. The aim is to detect global functions that 4339are not declared in header files. 4340 4341@item -Wmissing-declarations 4342@opindex Wmissing-declarations 4343@opindex Wno-missing-declarations 4344Warn if a global function is defined without a previous declaration. 4345Do so even if the definition itself provides a prototype. 4346Use this option to detect global functions that are not declared in 4347header files. In C++, no warnings are issued for function templates, 4348or for inline functions, or for functions in anonymous namespaces. 4349 4350@item -Wmissing-field-initializers 4351@opindex Wmissing-field-initializers 4352@opindex Wno-missing-field-initializers 4353@opindex W 4354@opindex Wextra 4355@opindex Wno-extra 4356Warn if a structure's initializer has some fields missing. For 4357example, the following code would cause such a warning, because 4358@code{x.h} is implicitly zero: 4359 4360@smallexample 4361struct s @{ int f, g, h; @}; 4362struct s x = @{ 3, 4 @}; 4363@end smallexample 4364 4365This option does not warn about designated initializers, so the following 4366modification would not trigger a warning: 4367 4368@smallexample 4369struct s @{ int f, g, h; @}; 4370struct s x = @{ .f = 3, .g = 4 @}; 4371@end smallexample 4372 4373This warning is included in @option{-Wextra}. To get other @option{-Wextra} 4374warnings without this one, use @samp{-Wextra -Wno-missing-field-initializers}. 4375 4376@item -Wmissing-format-attribute 4377@opindex Wmissing-format-attribute 4378@opindex Wno-missing-format-attribute 4379@opindex Wformat 4380@opindex Wno-format 4381Warn about function pointers that might be candidates for @code{format} 4382attributes. Note these are only possible candidates, not absolute ones. 4383GCC will guess that function pointers with @code{format} attributes that 4384are used in assignment, initialization, parameter passing or return 4385statements should have a corresponding @code{format} attribute in the 4386resulting type. I.e.@: the left-hand side of the assignment or 4387initialization, the type of the parameter variable, or the return type 4388of the containing function respectively should also have a @code{format} 4389attribute to avoid the warning. 4390 4391GCC will also warn about function definitions that might be 4392candidates for @code{format} attributes. Again, these are only 4393possible candidates. GCC will guess that @code{format} attributes 4394might be appropriate for any function that calls a function like 4395@code{vprintf} or @code{vscanf}, but this might not always be the 4396case, and some functions for which @code{format} attributes are 4397appropriate may not be detected. 4398 4399@item -Wno-multichar 4400@opindex Wno-multichar 4401@opindex Wmultichar 4402Do not warn if a multicharacter constant (@samp{'FOOF'}) is used. 4403Usually they indicate a typo in the user's code, as they have 4404implementation-defined values, and should not be used in portable code. 4405 4406@item -Wnormalized=<none|id|nfc|nfkc> 4407@opindex Wnormalized= 4408@cindex NFC 4409@cindex NFKC 4410@cindex character set, input normalization 4411In ISO C and ISO C++, two identifiers are different if they are 4412different sequences of characters. However, sometimes when characters 4413outside the basic ASCII character set are used, you can have two 4414different character sequences that look the same. To avoid confusion, 4415the ISO 10646 standard sets out some @dfn{normalization rules} which 4416when applied ensure that two sequences that look the same are turned into 4417the same sequence. GCC can warn you if you are using identifiers that 4418have not been normalized; this option controls that warning. 4419 4420There are four levels of warning supported by GCC. The default is 4421@option{-Wnormalized=nfc}, which warns about any identifier that is 4422not in the ISO 10646 ``C'' normalized form, @dfn{NFC}. NFC is the 4423recommended form for most uses. 4424 4425Unfortunately, there are some characters allowed in identifiers by 4426ISO C and ISO C++ that, when turned into NFC, are not allowed in 4427identifiers. That is, there's no way to use these symbols in portable 4428ISO C or C++ and have all your identifiers in NFC@. 4429@option{-Wnormalized=id} suppresses the warning for these characters. 4430It is hoped that future versions of the standards involved will correct 4431this, which is why this option is not the default. 4432 4433You can switch the warning off for all characters by writing 4434@option{-Wnormalized=none}. You would only want to do this if you 4435were using some other normalization scheme (like ``D''), because 4436otherwise you can easily create bugs that are literally impossible to see. 4437 4438Some characters in ISO 10646 have distinct meanings but look identical 4439in some fonts or display methodologies, especially once formatting has 4440been applied. For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL 4441LETTER N'', will display just like a regular @code{n} that has been 4442placed in a superscript. ISO 10646 defines the @dfn{NFKC} 4443normalization scheme to convert all these into a standard form as 4444well, and GCC will warn if your code is not in NFKC if you use 4445@option{-Wnormalized=nfkc}. This warning is comparable to warning 4446about every identifier that contains the letter O because it might be 4447confused with the digit 0, and so is not the default, but may be 4448useful as a local coding convention if the programming environment is 4449unable to be fixed to display these characters distinctly. 4450 4451@item -Wno-deprecated 4452@opindex Wno-deprecated 4453@opindex Wdeprecated 4454Do not warn about usage of deprecated features. @xref{Deprecated Features}. 4455 4456@item -Wno-deprecated-declarations 4457@opindex Wno-deprecated-declarations 4458@opindex Wdeprecated-declarations 4459Do not warn about uses of functions (@pxref{Function Attributes}), 4460variables (@pxref{Variable Attributes}), and types (@pxref{Type 4461Attributes}) marked as deprecated by using the @code{deprecated} 4462attribute. 4463 4464@item -Wno-overflow 4465@opindex Wno-overflow 4466@opindex Woverflow 4467Do not warn about compile-time overflow in constant expressions. 4468 4469@item -Woverride-init @r{(C and Objective-C only)} 4470@opindex Woverride-init 4471@opindex Wno-override-init 4472@opindex W 4473@opindex Wextra 4474@opindex Wno-extra 4475Warn if an initialized field without side effects is overridden when 4476using designated initializers (@pxref{Designated Inits, , Designated 4477Initializers}). 4478 4479This warning is included in @option{-Wextra}. To get other 4480@option{-Wextra} warnings without this one, use @samp{-Wextra 4481-Wno-override-init}. 4482 4483@item -Wpacked 4484@opindex Wpacked 4485@opindex Wno-packed 4486Warn if a structure is given the packed attribute, but the packed 4487attribute has no effect on the layout or size of the structure. 4488Such structures may be mis-aligned for little benefit. For 4489instance, in this code, the variable @code{f.x} in @code{struct bar} 4490will be misaligned even though @code{struct bar} does not itself 4491have the packed attribute: 4492 4493@smallexample 4494@group 4495struct foo @{ 4496 int x; 4497 char a, b, c, d; 4498@} __attribute__((packed)); 4499struct bar @{ 4500 char z; 4501 struct foo f; 4502@}; 4503@end group 4504@end smallexample 4505 4506@item -Wpacked-bitfield-compat 4507@opindex Wpacked-bitfield-compat 4508@opindex Wno-packed-bitfield-compat 4509The 4.1, 4.2 and 4.3 series of GCC ignore the @code{packed} attribute 4510on bit-fields of type @code{char}. This has been fixed in GCC 4.4 but 4511the change can lead to differences in the structure layout. GCC 4512informs you when the offset of such a field has changed in GCC 4.4. 4513For example there is no longer a 4-bit padding between field @code{a} 4514and @code{b} in this structure: 4515 4516@smallexample 4517struct foo 4518@{ 4519 char a:4; 4520 char b:8; 4521@} __attribute__ ((packed)); 4522@end smallexample 4523 4524This warning is enabled by default. Use 4525@option{-Wno-packed-bitfield-compat} to disable this warning. 4526 4527@item -Wpadded 4528@opindex Wpadded 4529@opindex Wno-padded 4530Warn if padding is included in a structure, either to align an element 4531of the structure or to align the whole structure. Sometimes when this 4532happens it is possible to rearrange the fields of the structure to 4533reduce the padding and so make the structure smaller. 4534 4535@item -Wredundant-decls 4536@opindex Wredundant-decls 4537@opindex Wno-redundant-decls 4538Warn if anything is declared more than once in the same scope, even in 4539cases where multiple declaration is valid and changes nothing. 4540 4541@item -Wnested-externs @r{(C and Objective-C only)} 4542@opindex Wnested-externs 4543@opindex Wno-nested-externs 4544Warn if an @code{extern} declaration is encountered within a function. 4545 4546@item -Winline 4547@opindex Winline 4548@opindex Wno-inline 4549Warn if a function can not be inlined and it was declared as inline. 4550Even with this option, the compiler will not warn about failures to 4551inline functions declared in system headers. 4552 4553The compiler uses a variety of heuristics to determine whether or not 4554to inline a function. For example, the compiler takes into account 4555the size of the function being inlined and the amount of inlining 4556that has already been done in the current function. Therefore, 4557seemingly insignificant changes in the source program can cause the 4558warnings produced by @option{-Winline} to appear or disappear. 4559 4560@item -Wno-invalid-offsetof @r{(C++ and Objective-C++ only)} 4561@opindex Wno-invalid-offsetof 4562@opindex Winvalid-offsetof 4563Suppress warnings from applying the @samp{offsetof} macro to a non-POD 4564type. According to the 1998 ISO C++ standard, applying @samp{offsetof} 4565to a non-POD type is undefined. In existing C++ implementations, 4566however, @samp{offsetof} typically gives meaningful results even when 4567applied to certain kinds of non-POD types. (Such as a simple 4568@samp{struct} that fails to be a POD type only by virtue of having a 4569constructor.) This flag is for users who are aware that they are 4570writing nonportable code and who have deliberately chosen to ignore the 4571warning about it. 4572 4573The restrictions on @samp{offsetof} may be relaxed in a future version 4574of the C++ standard. 4575 4576@item -Wno-int-to-pointer-cast 4577@opindex Wno-int-to-pointer-cast 4578@opindex Wint-to-pointer-cast 4579Suppress warnings from casts to pointer type of an integer of a 4580different size. In C++, casting to a pointer type of smaller size is 4581an error. @option{Wint-to-pointer-cast} is enabled by default. 4582 4583 4584@item -Wno-pointer-to-int-cast @r{(C and Objective-C only)} 4585@opindex Wno-pointer-to-int-cast 4586@opindex Wpointer-to-int-cast 4587Suppress warnings from casts from a pointer to an integer type of a 4588different size. 4589 4590@item -Winvalid-pch 4591@opindex Winvalid-pch 4592@opindex Wno-invalid-pch 4593Warn if a precompiled header (@pxref{Precompiled Headers}) is found in 4594the search path but can't be used. 4595 4596@item -Wlong-long 4597@opindex Wlong-long 4598@opindex Wno-long-long 4599Warn if @samp{long long} type is used. This is enabled by either 4600@option{-pedantic} or @option{-Wtraditional} in ISO C90 and C++98 4601modes. To inhibit the warning messages, use @option{-Wno-long-long}. 4602 4603@item -Wvariadic-macros 4604@opindex Wvariadic-macros 4605@opindex Wno-variadic-macros 4606Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU 4607alternate syntax when in pedantic ISO C99 mode. This is default. 4608To inhibit the warning messages, use @option{-Wno-variadic-macros}. 4609 4610@item -Wvector-operation-performance 4611@opindex Wvector-operation-performance 4612@opindex Wno-vector-operation-performance 4613Warn if vector operation is not implemented via SIMD capabilities of the 4614architecture. Mainly useful for the performance tuning. 4615Vector operation can be implemented @code{piecewise}, which means that the 4616scalar operation is performed on every vector element; 4617@code{in parallel}, which means that the vector operation is implemented 4618using scalars of wider type, which normally is more performance efficient; 4619and @code{as a single scalar}, which means that vector fits into a 4620scalar type. 4621 4622@item -Wvla 4623@opindex Wvla 4624@opindex Wno-vla 4625Warn if variable length array is used in the code. 4626@option{-Wno-vla} will prevent the @option{-pedantic} warning of 4627the variable length array. 4628 4629@item -Wvolatile-register-var 4630@opindex Wvolatile-register-var 4631@opindex Wno-volatile-register-var 4632Warn if a register variable is declared volatile. The volatile 4633modifier does not inhibit all optimizations that may eliminate reads 4634and/or writes to register variables. This warning is enabled by 4635@option{-Wall}. 4636 4637@item -Wdisabled-optimization 4638@opindex Wdisabled-optimization 4639@opindex Wno-disabled-optimization 4640Warn if a requested optimization pass is disabled. This warning does 4641not generally indicate that there is anything wrong with your code; it 4642merely indicates that GCC's optimizers were unable to handle the code 4643effectively. Often, the problem is that your code is too big or too 4644complex; GCC will refuse to optimize programs when the optimization 4645itself is likely to take inordinate amounts of time. 4646 4647@item -Wpointer-sign @r{(C and Objective-C only)} 4648@opindex Wpointer-sign 4649@opindex Wno-pointer-sign 4650Warn for pointer argument passing or assignment with different signedness. 4651This option is only supported for C and Objective-C@. It is implied by 4652@option{-Wall} and by @option{-pedantic}, which can be disabled with 4653@option{-Wno-pointer-sign}. 4654 4655@item -Wstack-protector 4656@opindex Wstack-protector 4657@opindex Wno-stack-protector 4658This option is only active when @option{-fstack-protector} is active. It 4659warns about functions that will not be protected against stack smashing. 4660 4661@item -Wno-mudflap 4662@opindex Wno-mudflap 4663Suppress warnings about constructs that cannot be instrumented by 4664@option{-fmudflap}. 4665 4666@item -Woverlength-strings 4667@opindex Woverlength-strings 4668@opindex Wno-overlength-strings 4669Warn about string constants that are longer than the ``minimum 4670maximum'' length specified in the C standard. Modern compilers 4671generally allow string constants that are much longer than the 4672standard's minimum limit, but very portable programs should avoid 4673using longer strings. 4674 4675The limit applies @emph{after} string constant concatenation, and does 4676not count the trailing NUL@. In C90, the limit was 509 characters; in 4677C99, it was raised to 4095. C++98 does not specify a normative 4678minimum maximum, so we do not diagnose overlength strings in C++@. 4679 4680This option is implied by @option{-pedantic}, and can be disabled with 4681@option{-Wno-overlength-strings}. 4682 4683@item -Wunsuffixed-float-constants @r{(C and Objective-C only)} 4684@opindex Wunsuffixed-float-constants 4685 4686GCC will issue a warning for any floating constant that does not have 4687a suffix. When used together with @option{-Wsystem-headers} it will 4688warn about such constants in system header files. This can be useful 4689when preparing code to use with the @code{FLOAT_CONST_DECIMAL64} pragma 4690from the decimal floating-point extension to C99. 4691@end table 4692 4693@node Debugging Options 4694@section Options for Debugging Your Program or GCC 4695@cindex options, debugging 4696@cindex debugging information options 4697 4698GCC has various special options that are used for debugging 4699either your program or GCC: 4700 4701@table @gcctabopt 4702@item -g 4703@opindex g 4704Produce debugging information in the operating system's native format 4705(stabs, COFF, XCOFF, or DWARF 2)@. GDB can work with this debugging 4706information. 4707 4708On most systems that use stabs format, @option{-g} enables use of extra 4709debugging information that only GDB can use; this extra information 4710makes debugging work better in GDB but will probably make other debuggers 4711crash or 4712refuse to read the program. If you want to control for certain whether 4713to generate the extra information, use @option{-gstabs+}, @option{-gstabs}, 4714@option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below). 4715 4716GCC allows you to use @option{-g} with 4717@option{-O}. The shortcuts taken by optimized code may occasionally 4718produce surprising results: some variables you declared may not exist 4719at all; flow of control may briefly move where you did not expect it; 4720some statements may not be executed because they compute constant 4721results or their values were already at hand; some statements may 4722execute in different places because they were moved out of loops. 4723 4724Nevertheless it proves possible to debug optimized output. This makes 4725it reasonable to use the optimizer for programs that might have bugs. 4726 4727The following options are useful when GCC is generated with the 4728capability for more than one debugging format. 4729 4730@item -ggdb 4731@opindex ggdb 4732Produce debugging information for use by GDB@. This means to use the 4733most expressive format available (DWARF 2, stabs, or the native format 4734if neither of those are supported), including GDB extensions if at all 4735possible. 4736 4737@item -gstabs 4738@opindex gstabs 4739Produce debugging information in stabs format (if that is supported), 4740without GDB extensions. This is the format used by DBX on most BSD 4741systems. On MIPS, Alpha and System V Release 4 systems this option 4742produces stabs debugging output that is not understood by DBX or SDB@. 4743On System V Release 4 systems this option requires the GNU assembler. 4744 4745@item -feliminate-unused-debug-symbols 4746@opindex feliminate-unused-debug-symbols 4747Produce debugging information in stabs format (if that is supported), 4748for only symbols that are actually used. 4749 4750@item -femit-class-debug-always 4751Instead of emitting debugging information for a C++ class in only one 4752object file, emit it in all object files using the class. This option 4753should be used only with debuggers that are unable to handle the way GCC 4754normally emits debugging information for classes because using this 4755option will increase the size of debugging information by as much as a 4756factor of two. 4757 4758@item -fno-debug-types-section 4759@opindex fno-debug-types-section 4760@opindex fdebug-types-section 4761By default when using DWARF v4 or higher type DIEs will be put into 4762their own .debug_types section instead of making them part of the 4763.debug_info section. It is more efficient to put them in a separate 4764comdat sections since the linker will then be able to remove duplicates. 4765But not all DWARF consumers support .debug_types sections yet. 4766 4767@item -gstabs+ 4768@opindex gstabs+ 4769Produce debugging information in stabs format (if that is supported), 4770using GNU extensions understood only by the GNU debugger (GDB)@. The 4771use of these extensions is likely to make other debuggers crash or 4772refuse to read the program. 4773 4774@item -gcoff 4775@opindex gcoff 4776Produce debugging information in COFF format (if that is supported). 4777This is the format used by SDB on most System V systems prior to 4778System V Release 4. 4779 4780@item -gxcoff 4781@opindex gxcoff 4782Produce debugging information in XCOFF format (if that is supported). 4783This is the format used by the DBX debugger on IBM RS/6000 systems. 4784 4785@item -gxcoff+ 4786@opindex gxcoff+ 4787Produce debugging information in XCOFF format (if that is supported), 4788using GNU extensions understood only by the GNU debugger (GDB)@. The 4789use of these extensions is likely to make other debuggers crash or 4790refuse to read the program, and may cause assemblers other than the GNU 4791assembler (GAS) to fail with an error. 4792 4793@item -gdwarf-@var{version} 4794@opindex gdwarf-@var{version} 4795Produce debugging information in DWARF format (if that is 4796supported). This is the format used by DBX on IRIX 6. The value 4797of @var{version} may be either 2, 3 or 4; the default version is 2. 4798 4799Note that with DWARF version 2 some ports require, and will always 4800use, some non-conflicting DWARF 3 extensions in the unwind tables. 4801 4802Version 4 may require GDB 7.0 and @option{-fvar-tracking-assignments} 4803for maximum benefit. 4804 4805@item -grecord-gcc-switches 4806@opindex grecord-gcc-switches 4807This switch causes the command-line options used to invoke the 4808compiler that may affect code generation to be appended to the 4809DW_AT_producer attribute in DWARF debugging information. The options 4810are concatenated with spaces separating them from each other and from 4811the compiler version. See also @option{-frecord-gcc-switches} for another 4812way of storing compiler options into the object file. 4813 4814@item -gno-record-gcc-switches 4815@opindex gno-record-gcc-switches 4816Disallow appending command-line options to the DW_AT_producer attribute 4817in DWARF debugging information. This is the default. 4818 4819@item -gstrict-dwarf 4820@opindex gstrict-dwarf 4821Disallow using extensions of later DWARF standard version than selected 4822with @option{-gdwarf-@var{version}}. On most targets using non-conflicting 4823DWARF extensions from later standard versions is allowed. 4824 4825@item -gno-strict-dwarf 4826@opindex gno-strict-dwarf 4827Allow using extensions of later DWARF standard version than selected with 4828@option{-gdwarf-@var{version}}. 4829 4830@item -gvms 4831@opindex gvms 4832Produce debugging information in VMS debug format (if that is 4833supported). This is the format used by DEBUG on VMS systems. 4834 4835@item -g@var{level} 4836@itemx -ggdb@var{level} 4837@itemx -gstabs@var{level} 4838@itemx -gcoff@var{level} 4839@itemx -gxcoff@var{level} 4840@itemx -gvms@var{level} 4841Request debugging information and also use @var{level} to specify how 4842much information. The default level is 2. 4843 4844Level 0 produces no debug information at all. Thus, @option{-g0} negates 4845@option{-g}. 4846 4847Level 1 produces minimal information, enough for making backtraces in 4848parts of the program that you don't plan to debug. This includes 4849descriptions of functions and external variables, but no information 4850about local variables and no line numbers. 4851 4852Level 3 includes extra information, such as all the macro definitions 4853present in the program. Some debuggers support macro expansion when 4854you use @option{-g3}. 4855 4856@option{-gdwarf-2} does not accept a concatenated debug level, because 4857GCC used to support an option @option{-gdwarf} that meant to generate 4858debug information in version 1 of the DWARF format (which is very 4859different from version 2), and it would have been too confusing. That 4860debug format is long obsolete, but the option cannot be changed now. 4861Instead use an additional @option{-g@var{level}} option to change the 4862debug level for DWARF. 4863 4864@item -gtoggle 4865@opindex gtoggle 4866Turn off generation of debug info, if leaving out this option would have 4867generated it, or turn it on at level 2 otherwise. The position of this 4868argument in the command line does not matter, it takes effect after all 4869other options are processed, and it does so only once, no matter how 4870many times it is given. This is mainly intended to be used with 4871@option{-fcompare-debug}. 4872 4873@item -fdump-final-insns@r{[}=@var{file}@r{]} 4874@opindex fdump-final-insns 4875Dump the final internal representation (RTL) to @var{file}. If the 4876optional argument is omitted (or if @var{file} is @code{.}), the name 4877of the dump file will be determined by appending @code{.gkd} to the 4878compilation output file name. 4879 4880@item -fcompare-debug@r{[}=@var{opts}@r{]} 4881@opindex fcompare-debug 4882@opindex fno-compare-debug 4883If no error occurs during compilation, run the compiler a second time, 4884adding @var{opts} and @option{-fcompare-debug-second} to the arguments 4885passed to the second compilation. Dump the final internal 4886representation in both compilations, and print an error if they differ. 4887 4888If the equal sign is omitted, the default @option{-gtoggle} is used. 4889 4890The environment variable @env{GCC_COMPARE_DEBUG}, if defined, non-empty 4891and nonzero, implicitly enables @option{-fcompare-debug}. If 4892@env{GCC_COMPARE_DEBUG} is defined to a string starting with a dash, 4893then it is used for @var{opts}, otherwise the default @option{-gtoggle} 4894is used. 4895 4896@option{-fcompare-debug=}, with the equal sign but without @var{opts}, 4897is equivalent to @option{-fno-compare-debug}, which disables the dumping 4898of the final representation and the second compilation, preventing even 4899@env{GCC_COMPARE_DEBUG} from taking effect. 4900 4901To verify full coverage during @option{-fcompare-debug} testing, set 4902@env{GCC_COMPARE_DEBUG} to say @samp{-fcompare-debug-not-overridden}, 4903which GCC will reject as an invalid option in any actual compilation 4904(rather than preprocessing, assembly or linking). To get just a 4905warning, setting @env{GCC_COMPARE_DEBUG} to @samp{-w%n-fcompare-debug 4906not overridden} will do. 4907 4908@item -fcompare-debug-second 4909@opindex fcompare-debug-second 4910This option is implicitly passed to the compiler for the second 4911compilation requested by @option{-fcompare-debug}, along with options to 4912silence warnings, and omitting other options that would cause 4913side-effect compiler outputs to files or to the standard output. Dump 4914files and preserved temporary files are renamed so as to contain the 4915@code{.gk} additional extension during the second compilation, to avoid 4916overwriting those generated by the first. 4917 4918When this option is passed to the compiler driver, it causes the 4919@emph{first} compilation to be skipped, which makes it useful for little 4920other than debugging the compiler proper. 4921 4922@item -feliminate-dwarf2-dups 4923@opindex feliminate-dwarf2-dups 4924Compress DWARF2 debugging information by eliminating duplicated 4925information about each symbol. This option only makes sense when 4926generating DWARF2 debugging information with @option{-gdwarf-2}. 4927 4928@item -femit-struct-debug-baseonly 4929Emit debug information for struct-like types 4930only when the base name of the compilation source file 4931matches the base name of file in which the struct was defined. 4932 4933This option substantially reduces the size of debugging information, 4934but at significant potential loss in type information to the debugger. 4935See @option{-femit-struct-debug-reduced} for a less aggressive option. 4936See @option{-femit-struct-debug-detailed} for more detailed control. 4937 4938This option works only with DWARF 2. 4939 4940@item -femit-struct-debug-reduced 4941Emit debug information for struct-like types 4942only when the base name of the compilation source file 4943matches the base name of file in which the type was defined, 4944unless the struct is a template or defined in a system header. 4945 4946This option significantly reduces the size of debugging information, 4947with some potential loss in type information to the debugger. 4948See @option{-femit-struct-debug-baseonly} for a more aggressive option. 4949See @option{-femit-struct-debug-detailed} for more detailed control. 4950 4951This option works only with DWARF 2. 4952 4953@item -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} 4954Specify the struct-like types 4955for which the compiler will generate debug information. 4956The intent is to reduce duplicate struct debug information 4957between different object files within the same program. 4958 4959This option is a detailed version of 4960@option{-femit-struct-debug-reduced} and @option{-femit-struct-debug-baseonly}, 4961which will serve for most needs. 4962 4963A specification has the syntax@* 4964[@samp{dir:}|@samp{ind:}][@samp{ord:}|@samp{gen:}](@samp{any}|@samp{sys}|@samp{base}|@samp{none}) 4965 4966The optional first word limits the specification to 4967structs that are used directly (@samp{dir:}) or used indirectly (@samp{ind:}). 4968A struct type is used directly when it is the type of a variable, member. 4969Indirect uses arise through pointers to structs. 4970That is, when use of an incomplete struct would be legal, the use is indirect. 4971An example is 4972@samp{struct one direct; struct two * indirect;}. 4973 4974The optional second word limits the specification to 4975ordinary structs (@samp{ord:}) or generic structs (@samp{gen:}). 4976Generic structs are a bit complicated to explain. 4977For C++, these are non-explicit specializations of template classes, 4978or non-template classes within the above. 4979Other programming languages have generics, 4980but @samp{-femit-struct-debug-detailed} does not yet implement them. 4981 4982The third word specifies the source files for those 4983structs for which the compiler will emit debug information. 4984The values @samp{none} and @samp{any} have the normal meaning. 4985The value @samp{base} means that 4986the base of name of the file in which the type declaration appears 4987must match the base of the name of the main compilation file. 4988In practice, this means that 4989types declared in @file{foo.c} and @file{foo.h} will have debug information, 4990but types declared in other header will not. 4991The value @samp{sys} means those types satisfying @samp{base} 4992or declared in system or compiler headers. 4993 4994You may need to experiment to determine the best settings for your application. 4995 4996The default is @samp{-femit-struct-debug-detailed=all}. 4997 4998This option works only with DWARF 2. 4999 5000@item -fno-merge-debug-strings 5001@opindex fmerge-debug-strings 5002@opindex fno-merge-debug-strings 5003Direct the linker to not merge together strings in the debugging 5004information that are identical in different object files. Merging is 5005not supported by all assemblers or linkers. Merging decreases the size 5006of the debug information in the output file at the cost of increasing 5007link processing time. Merging is enabled by default. 5008 5009@item -fdebug-prefix-map=@var{old}=@var{new} 5010@opindex fdebug-prefix-map 5011When compiling files in directory @file{@var{old}}, record debugging 5012information describing them as in @file{@var{new}} instead. 5013 5014@item -fno-dwarf2-cfi-asm 5015@opindex fdwarf2-cfi-asm 5016@opindex fno-dwarf2-cfi-asm 5017Emit DWARF 2 unwind info as compiler generated @code{.eh_frame} section 5018instead of using GAS @code{.cfi_*} directives. 5019 5020@cindex @command{prof} 5021@item -p 5022@opindex p 5023Generate extra code to write profile information suitable for the 5024analysis program @command{prof}. You must use this option when compiling 5025the source files you want data about, and you must also use it when 5026linking. 5027 5028@cindex @command{gprof} 5029@item -pg 5030@opindex pg 5031Generate extra code to write profile information suitable for the 5032analysis program @command{gprof}. You must use this option when compiling 5033the source files you want data about, and you must also use it when 5034linking. 5035 5036@item -Q 5037@opindex Q 5038Makes the compiler print out each function name as it is compiled, and 5039print some statistics about each pass when it finishes. 5040 5041@item -ftime-report 5042@opindex ftime-report 5043Makes the compiler print some statistics about the time consumed by each 5044pass when it finishes. 5045 5046@item -fmem-report 5047@opindex fmem-report 5048Makes the compiler print some statistics about permanent memory 5049allocation when it finishes. 5050 5051@item -fpre-ipa-mem-report 5052@opindex fpre-ipa-mem-report 5053@item -fpost-ipa-mem-report 5054@opindex fpost-ipa-mem-report 5055Makes the compiler print some statistics about permanent memory 5056allocation before or after interprocedural optimization. 5057 5058@item -fstack-usage 5059@opindex fstack-usage 5060Makes the compiler output stack usage information for the program, on a 5061per-function basis. The filename for the dump is made by appending 5062@file{.su} to the @var{auxname}. @var{auxname} is generated from the name of 5063the output file, if explicitly specified and it is not an executable, 5064otherwise it is the basename of the source file. An entry is made up 5065of three fields: 5066 5067@itemize 5068@item 5069The name of the function. 5070@item 5071A number of bytes. 5072@item 5073One or more qualifiers: @code{static}, @code{dynamic}, @code{bounded}. 5074@end itemize 5075 5076The qualifier @code{static} means that the function manipulates the stack 5077statically: a fixed number of bytes are allocated for the frame on function 5078entry and released on function exit; no stack adjustments are otherwise made 5079in the function. The second field is this fixed number of bytes. 5080 5081The qualifier @code{dynamic} means that the function manipulates the stack 5082dynamically: in addition to the static allocation described above, stack 5083adjustments are made in the body of the function, for example to push/pop 5084arguments around function calls. If the qualifier @code{bounded} is also 5085present, the amount of these adjustments is bounded at compile time and 5086the second field is an upper bound of the total amount of stack used by 5087the function. If it is not present, the amount of these adjustments is 5088not bounded at compile time and the second field only represents the 5089bounded part. 5090 5091@item -fprofile-arcs 5092@opindex fprofile-arcs 5093Add code so that program flow @dfn{arcs} are instrumented. During 5094execution the program records how many times each branch and call is 5095executed and how many times it is taken or returns. When the compiled 5096program exits it saves this data to a file called 5097@file{@var{auxname}.gcda} for each source file. The data may be used for 5098profile-directed optimizations (@option{-fbranch-probabilities}), or for 5099test coverage analysis (@option{-ftest-coverage}). Each object file's 5100@var{auxname} is generated from the name of the output file, if 5101explicitly specified and it is not the final executable, otherwise it is 5102the basename of the source file. In both cases any suffix is removed 5103(e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or 5104@file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}). 5105@xref{Cross-profiling}. 5106 5107@cindex @command{gcov} 5108@item --coverage 5109@opindex coverage 5110 5111This option is used to compile and link code instrumented for coverage 5112analysis. The option is a synonym for @option{-fprofile-arcs} 5113@option{-ftest-coverage} (when compiling) and @option{-lgcov} (when 5114linking). See the documentation for those options for more details. 5115 5116@itemize 5117 5118@item 5119Compile the source files with @option{-fprofile-arcs} plus optimization 5120and code generation options. For test coverage analysis, use the 5121additional @option{-ftest-coverage} option. You do not need to profile 5122every source file in a program. 5123 5124@item 5125Link your object files with @option{-lgcov} or @option{-fprofile-arcs} 5126(the latter implies the former). 5127 5128@item 5129Run the program on a representative workload to generate the arc profile 5130information. This may be repeated any number of times. You can run 5131concurrent instances of your program, and provided that the file system 5132supports locking, the data files will be correctly updated. Also 5133@code{fork} calls are detected and correctly handled (double counting 5134will not happen). 5135 5136@item 5137For profile-directed optimizations, compile the source files again with 5138the same optimization and code generation options plus 5139@option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that 5140Control Optimization}). 5141 5142@item 5143For test coverage analysis, use @command{gcov} to produce human readable 5144information from the @file{.gcno} and @file{.gcda} files. Refer to the 5145@command{gcov} documentation for further information. 5146 5147@end itemize 5148 5149With @option{-fprofile-arcs}, for each function of your program GCC 5150creates a program flow graph, then finds a spanning tree for the graph. 5151Only arcs that are not on the spanning tree have to be instrumented: the 5152compiler adds code to count the number of times that these arcs are 5153executed. When an arc is the only exit or only entrance to a block, the 5154instrumentation code can be added to the block; otherwise, a new basic 5155block must be created to hold the instrumentation code. 5156 5157@need 2000 5158@item -ftest-coverage 5159@opindex ftest-coverage 5160Produce a notes file that the @command{gcov} code-coverage utility 5161(@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to 5162show program coverage. Each source file's note file is called 5163@file{@var{auxname}.gcno}. Refer to the @option{-fprofile-arcs} option 5164above for a description of @var{auxname} and instructions on how to 5165generate test coverage data. Coverage data will match the source files 5166more closely, if you do not optimize. 5167 5168@item -fdbg-cnt-list 5169@opindex fdbg-cnt-list 5170Print the name and the counter upper bound for all debug counters. 5171 5172 5173@item -fdbg-cnt=@var{counter-value-list} 5174@opindex fdbg-cnt 5175Set the internal debug counter upper bound. @var{counter-value-list} 5176is a comma-separated list of @var{name}:@var{value} pairs 5177which sets the upper bound of each debug counter @var{name} to @var{value}. 5178All debug counters have the initial upper bound of @var{UINT_MAX}, 5179thus dbg_cnt() returns true always unless the upper bound is set by this option. 5180e.g. With -fdbg-cnt=dce:10,tail_call:0 5181dbg_cnt(dce) will return true only for first 10 invocations 5182 5183@item -fenable-@var{kind}-@var{pass} 5184@itemx -fdisable-@var{kind}-@var{pass}=@var{range-list} 5185@opindex fdisable- 5186@opindex fenable- 5187 5188This is a set of debugging options that are used to explicitly disable/enable 5189optimization passes. For compiler users, regular options for enabling/disabling 5190passes should be used instead. 5191 5192@itemize 5193 5194@item -fdisable-ipa-@var{pass} 5195Disable ipa pass @var{pass}. @var{pass} is the pass name. If the same pass is 5196statically invoked in the compiler multiple times, the pass name should be 5197appended with a sequential number starting from 1. 5198 5199@item -fdisable-rtl-@var{pass} 5200@item -fdisable-rtl-@var{pass}=@var{range-list} 5201Disable rtl pass @var{pass}. @var{pass} is the pass name. If the same pass is 5202statically invoked in the compiler multiple times, the pass name should be 5203appended with a sequential number starting from 1. @var{range-list} is a comma 5204seperated list of function ranges or assembler names. Each range is a number 5205pair seperated by a colon. The range is inclusive in both ends. If the range 5206is trivial, the number pair can be simplified as a single number. If the 5207function's cgraph node's @var{uid} is falling within one of the specified ranges, 5208the @var{pass} is disabled for that function. The @var{uid} is shown in the 5209function header of a dump file, and the pass names can be dumped by using 5210option @option{-fdump-passes}. 5211 5212@item -fdisable-tree-@var{pass} 5213@item -fdisable-tree-@var{pass}=@var{range-list} 5214Disable tree pass @var{pass}. See @option{-fdisable-rtl} for the description of 5215option arguments. 5216 5217@item -fenable-ipa-@var{pass} 5218Enable ipa pass @var{pass}. @var{pass} is the pass name. If the same pass is 5219statically invoked in the compiler multiple times, the pass name should be 5220appended with a sequential number starting from 1. 5221 5222@item -fenable-rtl-@var{pass} 5223@item -fenable-rtl-@var{pass}=@var{range-list} 5224Enable rtl pass @var{pass}. See @option{-fdisable-rtl} for option argument 5225description and examples. 5226 5227@item -fenable-tree-@var{pass} 5228@item -fenable-tree-@var{pass}=@var{range-list} 5229Enable tree pass @var{pass}. See @option{-fdisable-rtl} for the description 5230of option arguments. 5231 5232@smallexample 5233 5234# disable ccp1 for all functions 5235 -fdisable-tree-ccp1 5236# disable complete unroll for function whose cgraph node uid is 1 5237 -fenable-tree-cunroll=1 5238# disable gcse2 for functions at the following ranges [1,1], 5239# [300,400], and [400,1000] 5240# disable gcse2 for functions foo and foo2 5241 -fdisable-rtl-gcse2=foo,foo2 5242# disable early inlining 5243 -fdisable-tree-einline 5244# disable ipa inlining 5245 -fdisable-ipa-inline 5246# enable tree full unroll 5247 -fenable-tree-unroll 5248 5249@end smallexample 5250 5251@end itemize 5252 5253@item -d@var{letters} 5254@itemx -fdump-rtl-@var{pass} 5255@opindex d 5256Says to make debugging dumps during compilation at times specified by 5257@var{letters}. This is used for debugging the RTL-based passes of the 5258compiler. The file names for most of the dumps are made by appending 5259a pass number and a word to the @var{dumpname}, and the files are 5260created in the directory of the output file. Note that the pass 5261number is computed statically as passes get registered into the pass 5262manager. Thus the numbering is not related to the dynamic order of 5263execution of passes. In particular, a pass installed by a plugin 5264could have a number over 200 even if it executed quite early. 5265@var{dumpname} is generated from the name of the output file, if 5266explicitly specified and it is not an executable, otherwise it is the 5267basename of the source file. These switches may have different effects 5268when @option{-E} is used for preprocessing. 5269 5270Debug dumps can be enabled with a @option{-fdump-rtl} switch or some 5271@option{-d} option @var{letters}. Here are the possible 5272letters for use in @var{pass} and @var{letters}, and their meanings: 5273 5274@table @gcctabopt 5275 5276@item -fdump-rtl-alignments 5277@opindex fdump-rtl-alignments 5278Dump after branch alignments have been computed. 5279 5280@item -fdump-rtl-asmcons 5281@opindex fdump-rtl-asmcons 5282Dump after fixing rtl statements that have unsatisfied in/out constraints. 5283 5284@item -fdump-rtl-auto_inc_dec 5285@opindex fdump-rtl-auto_inc_dec 5286Dump after auto-inc-dec discovery. This pass is only run on 5287architectures that have auto inc or auto dec instructions. 5288 5289@item -fdump-rtl-barriers 5290@opindex fdump-rtl-barriers 5291Dump after cleaning up the barrier instructions. 5292 5293@item -fdump-rtl-bbpart 5294@opindex fdump-rtl-bbpart 5295Dump after partitioning hot and cold basic blocks. 5296 5297@item -fdump-rtl-bbro 5298@opindex fdump-rtl-bbro 5299Dump after block reordering. 5300 5301@item -fdump-rtl-btl1 5302@itemx -fdump-rtl-btl2 5303@opindex fdump-rtl-btl2 5304@opindex fdump-rtl-btl2 5305@option{-fdump-rtl-btl1} and @option{-fdump-rtl-btl2} enable dumping 5306after the two branch 5307target load optimization passes. 5308 5309@item -fdump-rtl-bypass 5310@opindex fdump-rtl-bypass 5311Dump after jump bypassing and control flow optimizations. 5312 5313@item -fdump-rtl-combine 5314@opindex fdump-rtl-combine 5315Dump after the RTL instruction combination pass. 5316 5317@item -fdump-rtl-compgotos 5318@opindex fdump-rtl-compgotos 5319Dump after duplicating the computed gotos. 5320 5321@item -fdump-rtl-ce1 5322@itemx -fdump-rtl-ce2 5323@itemx -fdump-rtl-ce3 5324@opindex fdump-rtl-ce1 5325@opindex fdump-rtl-ce2 5326@opindex fdump-rtl-ce3 5327@option{-fdump-rtl-ce1}, @option{-fdump-rtl-ce2}, and 5328@option{-fdump-rtl-ce3} enable dumping after the three 5329if conversion passes. 5330 5331@item -fdump-rtl-cprop_hardreg 5332@opindex fdump-rtl-cprop_hardreg 5333Dump after hard register copy propagation. 5334 5335@item -fdump-rtl-csa 5336@opindex fdump-rtl-csa 5337Dump after combining stack adjustments. 5338 5339@item -fdump-rtl-cse1 5340@itemx -fdump-rtl-cse2 5341@opindex fdump-rtl-cse1 5342@opindex fdump-rtl-cse2 5343@option{-fdump-rtl-cse1} and @option{-fdump-rtl-cse2} enable dumping after 5344the two common sub-expression elimination passes. 5345 5346@item -fdump-rtl-dce 5347@opindex fdump-rtl-dce 5348Dump after the standalone dead code elimination passes. 5349 5350@item -fdump-rtl-dbr 5351@opindex fdump-rtl-dbr 5352Dump after delayed branch scheduling. 5353 5354@item -fdump-rtl-dce1 5355@itemx -fdump-rtl-dce2 5356@opindex fdump-rtl-dce1 5357@opindex fdump-rtl-dce2 5358@option{-fdump-rtl-dce1} and @option{-fdump-rtl-dce2} enable dumping after 5359the two dead store elimination passes. 5360 5361@item -fdump-rtl-eh 5362@opindex fdump-rtl-eh 5363Dump after finalization of EH handling code. 5364 5365@item -fdump-rtl-eh_ranges 5366@opindex fdump-rtl-eh_ranges 5367Dump after conversion of EH handling range regions. 5368 5369@item -fdump-rtl-expand 5370@opindex fdump-rtl-expand 5371Dump after RTL generation. 5372 5373@item -fdump-rtl-fwprop1 5374@itemx -fdump-rtl-fwprop2 5375@opindex fdump-rtl-fwprop1 5376@opindex fdump-rtl-fwprop2 5377@option{-fdump-rtl-fwprop1} and @option{-fdump-rtl-fwprop2} enable 5378dumping after the two forward propagation passes. 5379 5380@item -fdump-rtl-gcse1 5381@itemx -fdump-rtl-gcse2 5382@opindex fdump-rtl-gcse1 5383@opindex fdump-rtl-gcse2 5384@option{-fdump-rtl-gcse1} and @option{-fdump-rtl-gcse2} enable dumping 5385after global common subexpression elimination. 5386 5387@item -fdump-rtl-init-regs 5388@opindex fdump-rtl-init-regs 5389Dump after the initialization of the registers. 5390 5391@item -fdump-rtl-initvals 5392@opindex fdump-rtl-initvals 5393Dump after the computation of the initial value sets. 5394 5395@item -fdump-rtl-into_cfglayout 5396@opindex fdump-rtl-into_cfglayout 5397Dump after converting to cfglayout mode. 5398 5399@item -fdump-rtl-ira 5400@opindex fdump-rtl-ira 5401Dump after iterated register allocation. 5402 5403@item -fdump-rtl-jump 5404@opindex fdump-rtl-jump 5405Dump after the second jump optimization. 5406 5407@item -fdump-rtl-loop2 5408@opindex fdump-rtl-loop2 5409@option{-fdump-rtl-loop2} enables dumping after the rtl 5410loop optimization passes. 5411 5412@item -fdump-rtl-mach 5413@opindex fdump-rtl-mach 5414Dump after performing the machine dependent reorganization pass, if that 5415pass exists. 5416 5417@item -fdump-rtl-mode_sw 5418@opindex fdump-rtl-mode_sw 5419Dump after removing redundant mode switches. 5420 5421@item -fdump-rtl-rnreg 5422@opindex fdump-rtl-rnreg 5423Dump after register renumbering. 5424 5425@item -fdump-rtl-outof_cfglayout 5426@opindex fdump-rtl-outof_cfglayout 5427Dump after converting from cfglayout mode. 5428 5429@item -fdump-rtl-peephole2 5430@opindex fdump-rtl-peephole2 5431Dump after the peephole pass. 5432 5433@item -fdump-rtl-postreload 5434@opindex fdump-rtl-postreload 5435Dump after post-reload optimizations. 5436 5437@item -fdump-rtl-pro_and_epilogue 5438@opindex fdump-rtl-pro_and_epilogue 5439Dump after generating the function prologues and epilogues. 5440 5441@item -fdump-rtl-regmove 5442@opindex fdump-rtl-regmove 5443Dump after the register move pass. 5444 5445@item -fdump-rtl-sched1 5446@itemx -fdump-rtl-sched2 5447@opindex fdump-rtl-sched1 5448@opindex fdump-rtl-sched2 5449@option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2} enable dumping 5450after the basic block scheduling passes. 5451 5452@item -fdump-rtl-see 5453@opindex fdump-rtl-see 5454Dump after sign extension elimination. 5455 5456@item -fdump-rtl-seqabstr 5457@opindex fdump-rtl-seqabstr 5458Dump after common sequence discovery. 5459 5460@item -fdump-rtl-shorten 5461@opindex fdump-rtl-shorten 5462Dump after shortening branches. 5463 5464@item -fdump-rtl-sibling 5465@opindex fdump-rtl-sibling 5466Dump after sibling call optimizations. 5467 5468@item -fdump-rtl-split1 5469@itemx -fdump-rtl-split2 5470@itemx -fdump-rtl-split3 5471@itemx -fdump-rtl-split4 5472@itemx -fdump-rtl-split5 5473@opindex fdump-rtl-split1 5474@opindex fdump-rtl-split2 5475@opindex fdump-rtl-split3 5476@opindex fdump-rtl-split4 5477@opindex fdump-rtl-split5 5478@option{-fdump-rtl-split1}, @option{-fdump-rtl-split2}, 5479@option{-fdump-rtl-split3}, @option{-fdump-rtl-split4} and 5480@option{-fdump-rtl-split5} enable dumping after five rounds of 5481instruction splitting. 5482 5483@item -fdump-rtl-sms 5484@opindex fdump-rtl-sms 5485Dump after modulo scheduling. This pass is only run on some 5486architectures. 5487 5488@item -fdump-rtl-stack 5489@opindex fdump-rtl-stack 5490Dump after conversion from GCC's "flat register file" registers to the 5491x87's stack-like registers. This pass is only run on x86 variants. 5492 5493@item -fdump-rtl-subreg1 5494@itemx -fdump-rtl-subreg2 5495@opindex fdump-rtl-subreg1 5496@opindex fdump-rtl-subreg2 5497@option{-fdump-rtl-subreg1} and @option{-fdump-rtl-subreg2} enable dumping after 5498the two subreg expansion passes. 5499 5500@item -fdump-rtl-unshare 5501@opindex fdump-rtl-unshare 5502Dump after all rtl has been unshared. 5503 5504@item -fdump-rtl-vartrack 5505@opindex fdump-rtl-vartrack 5506Dump after variable tracking. 5507 5508@item -fdump-rtl-vregs 5509@opindex fdump-rtl-vregs 5510Dump after converting virtual registers to hard registers. 5511 5512@item -fdump-rtl-web 5513@opindex fdump-rtl-web 5514Dump after live range splitting. 5515 5516@item -fdump-rtl-regclass 5517@itemx -fdump-rtl-subregs_of_mode_init 5518@itemx -fdump-rtl-subregs_of_mode_finish 5519@itemx -fdump-rtl-dfinit 5520@itemx -fdump-rtl-dfinish 5521@opindex fdump-rtl-regclass 5522@opindex fdump-rtl-subregs_of_mode_init 5523@opindex fdump-rtl-subregs_of_mode_finish 5524@opindex fdump-rtl-dfinit 5525@opindex fdump-rtl-dfinish 5526These dumps are defined but always produce empty files. 5527 5528@item -da 5529@itemx -fdump-rtl-all 5530@opindex da 5531@opindex fdump-rtl-all 5532Produce all the dumps listed above. 5533 5534@item -dA 5535@opindex dA 5536Annotate the assembler output with miscellaneous debugging information. 5537 5538@item -dD 5539@opindex dD 5540Dump all macro definitions, at the end of preprocessing, in addition to 5541normal output. 5542 5543@item -dH 5544@opindex dH 5545Produce a core dump whenever an error occurs. 5546 5547@item -dp 5548@opindex dp 5549Annotate the assembler output with a comment indicating which 5550pattern and alternative was used. The length of each instruction is 5551also printed. 5552 5553@item -dP 5554@opindex dP 5555Dump the RTL in the assembler output as a comment before each instruction. 5556Also turns on @option{-dp} annotation. 5557 5558@item -dv 5559@opindex dv 5560For each of the other indicated dump files (@option{-fdump-rtl-@var{pass}}), 5561dump a representation of the control flow graph suitable for viewing with VCG 5562to @file{@var{file}.@var{pass}.vcg}. 5563 5564@item -dx 5565@opindex dx 5566Just generate RTL for a function instead of compiling it. Usually used 5567with @option{-fdump-rtl-expand}. 5568@end table 5569 5570@item -fdump-noaddr 5571@opindex fdump-noaddr 5572When doing debugging dumps, suppress address output. This makes it more 5573feasible to use diff on debugging dumps for compiler invocations with 5574different compiler binaries and/or different 5575text / bss / data / heap / stack / dso start locations. 5576 5577@item -fdump-unnumbered 5578@opindex fdump-unnumbered 5579When doing debugging dumps, suppress instruction numbers and address output. 5580This makes it more feasible to use diff on debugging dumps for compiler 5581invocations with different options, in particular with and without 5582@option{-g}. 5583 5584@item -fdump-unnumbered-links 5585@opindex fdump-unnumbered-links 5586When doing debugging dumps (see @option{-d} option above), suppress 5587instruction numbers for the links to the previous and next instructions 5588in a sequence. 5589 5590@item -fdump-translation-unit @r{(C++ only)} 5591@itemx -fdump-translation-unit-@var{options} @r{(C++ only)} 5592@opindex fdump-translation-unit 5593Dump a representation of the tree structure for the entire translation 5594unit to a file. The file name is made by appending @file{.tu} to the 5595source file name, and the file is created in the same directory as the 5596output file. If the @samp{-@var{options}} form is used, @var{options} 5597controls the details of the dump as described for the 5598@option{-fdump-tree} options. 5599 5600@item -fdump-class-hierarchy @r{(C++ only)} 5601@itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)} 5602@opindex fdump-class-hierarchy 5603Dump a representation of each class's hierarchy and virtual function 5604table layout to a file. The file name is made by appending 5605@file{.class} to the source file name, and the file is created in the 5606same directory as the output file. If the @samp{-@var{options}} form 5607is used, @var{options} controls the details of the dump as described 5608for the @option{-fdump-tree} options. 5609 5610@item -fdump-ipa-@var{switch} 5611@opindex fdump-ipa 5612Control the dumping at various stages of inter-procedural analysis 5613language tree to a file. The file name is generated by appending a 5614switch specific suffix to the source file name, and the file is created 5615in the same directory as the output file. The following dumps are 5616possible: 5617 5618@table @samp 5619@item all 5620Enables all inter-procedural analysis dumps. 5621 5622@item cgraph 5623Dumps information about call-graph optimization, unused function removal, 5624and inlining decisions. 5625 5626@item inline 5627Dump after function inlining. 5628 5629@end table 5630 5631@item -fdump-passes 5632@opindex fdump-passes 5633Dump the list of optimization passes that are turned on and off by 5634the current command-line options. 5635 5636@item -fdump-statistics-@var{option} 5637@opindex fdump-statistics 5638Enable and control dumping of pass statistics in a separate file. The 5639file name is generated by appending a suffix ending in 5640@samp{.statistics} to the source file name, and the file is created in 5641the same directory as the output file. If the @samp{-@var{option}} 5642form is used, @samp{-stats} will cause counters to be summed over the 5643whole compilation unit while @samp{-details} will dump every event as 5644the passes generate them. The default with no option is to sum 5645counters for each function compiled. 5646 5647@item -fdump-tree-@var{switch} 5648@itemx -fdump-tree-@var{switch}-@var{options} 5649@opindex fdump-tree 5650Control the dumping at various stages of processing the intermediate 5651language tree to a file. The file name is generated by appending a 5652switch specific suffix to the source file name, and the file is 5653created in the same directory as the output file. If the 5654@samp{-@var{options}} form is used, @var{options} is a list of 5655@samp{-} separated options which control the details of the dump. Not 5656all options are applicable to all dumps; those that are not 5657meaningful will be ignored. The following options are available 5658 5659@table @samp 5660@item address 5661Print the address of each node. Usually this is not meaningful as it 5662changes according to the environment and source file. Its primary use 5663is for tying up a dump file with a debug environment. 5664@item asmname 5665If @code{DECL_ASSEMBLER_NAME} has been set for a given decl, use that 5666in the dump instead of @code{DECL_NAME}. Its primary use is ease of 5667use working backward from mangled names in the assembly file. 5668@item slim 5669Inhibit dumping of members of a scope or body of a function merely 5670because that scope has been reached. Only dump such items when they 5671are directly reachable by some other path. When dumping pretty-printed 5672trees, this option inhibits dumping the bodies of control structures. 5673@item raw 5674Print a raw representation of the tree. By default, trees are 5675pretty-printed into a C-like representation. 5676@item details 5677Enable more detailed dumps (not honored by every dump option). 5678@item stats 5679Enable dumping various statistics about the pass (not honored by every dump 5680option). 5681@item blocks 5682Enable showing basic block boundaries (disabled in raw dumps). 5683@item vops 5684Enable showing virtual operands for every statement. 5685@item lineno 5686Enable showing line numbers for statements. 5687@item uid 5688Enable showing the unique ID (@code{DECL_UID}) for each variable. 5689@item verbose 5690Enable showing the tree dump for each statement. 5691@item eh 5692Enable showing the EH region number holding each statement. 5693@item scev 5694Enable showing scalar evolution analysis details. 5695@item all 5696Turn on all options, except @option{raw}, @option{slim}, @option{verbose} 5697and @option{lineno}. 5698@end table 5699 5700The following tree dumps are possible: 5701@table @samp 5702 5703@item original 5704@opindex fdump-tree-original 5705Dump before any tree based optimization, to @file{@var{file}.original}. 5706 5707@item optimized 5708@opindex fdump-tree-optimized 5709Dump after all tree based optimization, to @file{@var{file}.optimized}. 5710 5711@item gimple 5712@opindex fdump-tree-gimple 5713Dump each function before and after the gimplification pass to a file. The 5714file name is made by appending @file{.gimple} to the source file name. 5715 5716@item cfg 5717@opindex fdump-tree-cfg 5718Dump the control flow graph of each function to a file. The file name is 5719made by appending @file{.cfg} to the source file name. 5720 5721@item vcg 5722@opindex fdump-tree-vcg 5723Dump the control flow graph of each function to a file in VCG format. The 5724file name is made by appending @file{.vcg} to the source file name. Note 5725that if the file contains more than one function, the generated file cannot 5726be used directly by VCG@. You will need to cut and paste each function's 5727graph into its own separate file first. 5728 5729@item ch 5730@opindex fdump-tree-ch 5731Dump each function after copying loop headers. The file name is made by 5732appending @file{.ch} to the source file name. 5733 5734@item ssa 5735@opindex fdump-tree-ssa 5736Dump SSA related information to a file. The file name is made by appending 5737@file{.ssa} to the source file name. 5738 5739@item alias 5740@opindex fdump-tree-alias 5741Dump aliasing information for each function. The file name is made by 5742appending @file{.alias} to the source file name. 5743 5744@item ccp 5745@opindex fdump-tree-ccp 5746Dump each function after CCP@. The file name is made by appending 5747@file{.ccp} to the source file name. 5748 5749@item storeccp 5750@opindex fdump-tree-storeccp 5751Dump each function after STORE-CCP@. The file name is made by appending 5752@file{.storeccp} to the source file name. 5753 5754@item pre 5755@opindex fdump-tree-pre 5756Dump trees after partial redundancy elimination. The file name is made 5757by appending @file{.pre} to the source file name. 5758 5759@item fre 5760@opindex fdump-tree-fre 5761Dump trees after full redundancy elimination. The file name is made 5762by appending @file{.fre} to the source file name. 5763 5764@item copyprop 5765@opindex fdump-tree-copyprop 5766Dump trees after copy propagation. The file name is made 5767by appending @file{.copyprop} to the source file name. 5768 5769@item store_copyprop 5770@opindex fdump-tree-store_copyprop 5771Dump trees after store copy-propagation. The file name is made 5772by appending @file{.store_copyprop} to the source file name. 5773 5774@item dce 5775@opindex fdump-tree-dce 5776Dump each function after dead code elimination. The file name is made by 5777appending @file{.dce} to the source file name. 5778 5779@item mudflap 5780@opindex fdump-tree-mudflap 5781Dump each function after adding mudflap instrumentation. The file name is 5782made by appending @file{.mudflap} to the source file name. 5783 5784@item sra 5785@opindex fdump-tree-sra 5786Dump each function after performing scalar replacement of aggregates. The 5787file name is made by appending @file{.sra} to the source file name. 5788 5789@item sink 5790@opindex fdump-tree-sink 5791Dump each function after performing code sinking. The file name is made 5792by appending @file{.sink} to the source file name. 5793 5794@item dom 5795@opindex fdump-tree-dom 5796Dump each function after applying dominator tree optimizations. The file 5797name is made by appending @file{.dom} to the source file name. 5798 5799@item dse 5800@opindex fdump-tree-dse 5801Dump each function after applying dead store elimination. The file 5802name is made by appending @file{.dse} to the source file name. 5803 5804@item phiopt 5805@opindex fdump-tree-phiopt 5806Dump each function after optimizing PHI nodes into straightline code. The file 5807name is made by appending @file{.phiopt} to the source file name. 5808 5809@item forwprop 5810@opindex fdump-tree-forwprop 5811Dump each function after forward propagating single use variables. The file 5812name is made by appending @file{.forwprop} to the source file name. 5813 5814@item copyrename 5815@opindex fdump-tree-copyrename 5816Dump each function after applying the copy rename optimization. The file 5817name is made by appending @file{.copyrename} to the source file name. 5818 5819@item nrv 5820@opindex fdump-tree-nrv 5821Dump each function after applying the named return value optimization on 5822generic trees. The file name is made by appending @file{.nrv} to the source 5823file name. 5824 5825@item vect 5826@opindex fdump-tree-vect 5827Dump each function after applying vectorization of loops. The file name is 5828made by appending @file{.vect} to the source file name. 5829 5830@item slp 5831@opindex fdump-tree-slp 5832Dump each function after applying vectorization of basic blocks. The file name 5833is made by appending @file{.slp} to the source file name. 5834 5835@item vrp 5836@opindex fdump-tree-vrp 5837Dump each function after Value Range Propagation (VRP). The file name 5838is made by appending @file{.vrp} to the source file name. 5839 5840@item all 5841@opindex fdump-tree-all 5842Enable all the available tree dumps with the flags provided in this option. 5843@end table 5844 5845@item -ftree-vectorizer-verbose=@var{n} 5846@opindex ftree-vectorizer-verbose 5847This option controls the amount of debugging output the vectorizer prints. 5848This information is written to standard error, unless 5849@option{-fdump-tree-all} or @option{-fdump-tree-vect} is specified, 5850in which case it is output to the usual dump listing file, @file{.vect}. 5851For @var{n}=0 no diagnostic information is reported. 5852If @var{n}=1 the vectorizer reports each loop that got vectorized, 5853and the total number of loops that got vectorized. 5854If @var{n}=2 the vectorizer also reports non-vectorized loops that passed 5855the first analysis phase (vect_analyze_loop_form) - i.e.@: countable, 5856inner-most, single-bb, single-entry/exit loops. This is the same verbosity 5857level that @option{-fdump-tree-vect-stats} uses. 5858Higher verbosity levels mean either more information dumped for each 5859reported loop, or same amount of information reported for more loops: 5860if @var{n}=3, vectorizer cost model information is reported. 5861If @var{n}=4, alignment related information is added to the reports. 5862If @var{n}=5, data-references related information (e.g.@: memory dependences, 5863memory access-patterns) is added to the reports. 5864If @var{n}=6, the vectorizer reports also non-vectorized inner-most loops 5865that did not pass the first analysis phase (i.e., may not be countable, or 5866may have complicated control-flow). 5867If @var{n}=7, the vectorizer reports also non-vectorized nested loops. 5868If @var{n}=8, SLP related information is added to the reports. 5869For @var{n}=9, all the information the vectorizer generates during its 5870analysis and transformation is reported. This is the same verbosity level 5871that @option{-fdump-tree-vect-details} uses. 5872 5873@item -frandom-seed=@var{string} 5874@opindex frandom-seed 5875This option provides a seed that GCC uses when it would otherwise use 5876random numbers. It is used to generate certain symbol names 5877that have to be different in every compiled file. It is also used to 5878place unique stamps in coverage data files and the object files that 5879produce them. You can use the @option{-frandom-seed} option to produce 5880reproducibly identical object files. 5881 5882The @var{string} should be different for every file you compile. 5883 5884@item -fsched-verbose=@var{n} 5885@opindex fsched-verbose 5886On targets that use instruction scheduling, this option controls the 5887amount of debugging output the scheduler prints. This information is 5888written to standard error, unless @option{-fdump-rtl-sched1} or 5889@option{-fdump-rtl-sched2} is specified, in which case it is output 5890to the usual dump listing file, @file{.sched1} or @file{.sched2} 5891respectively. However for @var{n} greater than nine, the output is 5892always printed to standard error. 5893 5894For @var{n} greater than zero, @option{-fsched-verbose} outputs the 5895same information as @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2}. 5896For @var{n} greater than one, it also output basic block probabilities, 5897detailed ready list information and unit/insn info. For @var{n} greater 5898than two, it includes RTL at abort point, control-flow and regions info. 5899And for @var{n} over four, @option{-fsched-verbose} also includes 5900dependence info. 5901 5902@item -save-temps 5903@itemx -save-temps=cwd 5904@opindex save-temps 5905Store the usual ``temporary'' intermediate files permanently; place them 5906in the current directory and name them based on the source file. Thus, 5907compiling @file{foo.c} with @samp{-c -save-temps} would produce files 5908@file{foo.i} and @file{foo.s}, as well as @file{foo.o}. This creates a 5909preprocessed @file{foo.i} output file even though the compiler now 5910normally uses an integrated preprocessor. 5911 5912When used in combination with the @option{-x} command-line option, 5913@option{-save-temps} is sensible enough to avoid over writing an 5914input source file with the same extension as an intermediate file. 5915The corresponding intermediate file may be obtained by renaming the 5916source file before using @option{-save-temps}. 5917 5918If you invoke GCC in parallel, compiling several different source 5919files that share a common base name in different subdirectories or the 5920same source file compiled for multiple output destinations, it is 5921likely that the different parallel compilers will interfere with each 5922other, and overwrite the temporary files. For instance: 5923 5924@smallexample 5925gcc -save-temps -o outdir1/foo.o indir1/foo.c& 5926gcc -save-temps -o outdir2/foo.o indir2/foo.c& 5927@end smallexample 5928 5929may result in @file{foo.i} and @file{foo.o} being written to 5930simultaneously by both compilers. 5931 5932@item -save-temps=obj 5933@opindex save-temps=obj 5934Store the usual ``temporary'' intermediate files permanently. If the 5935@option{-o} option is used, the temporary files are based on the 5936object file. If the @option{-o} option is not used, the 5937@option{-save-temps=obj} switch behaves like @option{-save-temps}. 5938 5939For example: 5940 5941@smallexample 5942gcc -save-temps=obj -c foo.c 5943gcc -save-temps=obj -c bar.c -o dir/xbar.o 5944gcc -save-temps=obj foobar.c -o dir2/yfoobar 5945@end smallexample 5946 5947would create @file{foo.i}, @file{foo.s}, @file{dir/xbar.i}, 5948@file{dir/xbar.s}, @file{dir2/yfoobar.i}, @file{dir2/yfoobar.s}, and 5949@file{dir2/yfoobar.o}. 5950 5951@item -time@r{[}=@var{file}@r{]} 5952@opindex time 5953Report the CPU time taken by each subprocess in the compilation 5954sequence. For C source files, this is the compiler proper and assembler 5955(plus the linker if linking is done). 5956 5957Without the specification of an output file, the output looks like this: 5958 5959@smallexample 5960# cc1 0.12 0.01 5961# as 0.00 0.01 5962@end smallexample 5963 5964The first number on each line is the ``user time'', that is time spent 5965executing the program itself. The second number is ``system time'', 5966time spent executing operating system routines on behalf of the program. 5967Both numbers are in seconds. 5968 5969With the specification of an output file, the output is appended to the 5970named file, and it looks like this: 5971 5972@smallexample 59730.12 0.01 cc1 @var{options} 59740.00 0.01 as @var{options} 5975@end smallexample 5976 5977The ``user time'' and the ``system time'' are moved before the program 5978name, and the options passed to the program are displayed, so that one 5979can later tell what file was being compiled, and with which options. 5980 5981@item -fvar-tracking 5982@opindex fvar-tracking 5983Run variable tracking pass. It computes where variables are stored at each 5984position in code. Better debugging information is then generated 5985(if the debugging information format supports this information). 5986 5987It is enabled by default when compiling with optimization (@option{-Os}, 5988@option{-O}, @option{-O2}, @dots{}), debugging information (@option{-g}) and 5989the debug info format supports it. 5990 5991@item -fvar-tracking-assignments 5992@opindex fvar-tracking-assignments 5993@opindex fno-var-tracking-assignments 5994Annotate assignments to user variables early in the compilation and 5995attempt to carry the annotations over throughout the compilation all the 5996way to the end, in an attempt to improve debug information while 5997optimizing. Use of @option{-gdwarf-4} is recommended along with it. 5998 5999It can be enabled even if var-tracking is disabled, in which case 6000annotations will be created and maintained, but discarded at the end. 6001 6002@item -fvar-tracking-assignments-toggle 6003@opindex fvar-tracking-assignments-toggle 6004@opindex fno-var-tracking-assignments-toggle 6005Toggle @option{-fvar-tracking-assignments}, in the same way that 6006@option{-gtoggle} toggles @option{-g}. 6007 6008@item -print-file-name=@var{library} 6009@opindex print-file-name 6010Print the full absolute name of the library file @var{library} that 6011would be used when linking---and don't do anything else. With this 6012option, GCC does not compile or link anything; it just prints the 6013file name. 6014 6015@item -print-multi-directory 6016@opindex print-multi-directory 6017Print the directory name corresponding to the multilib selected by any 6018other switches present in the command line. This directory is supposed 6019to exist in @env{GCC_EXEC_PREFIX}. 6020 6021@item -print-multi-lib 6022@opindex print-multi-lib 6023Print the mapping from multilib directory names to compiler switches 6024that enable them. The directory name is separated from the switches by 6025@samp{;}, and each switch starts with an @samp{@@} instead of the 6026@samp{-}, without spaces between multiple switches. This is supposed to 6027ease shell-processing. 6028 6029@item -print-multi-os-directory 6030@opindex print-multi-os-directory 6031Print the path to OS libraries for the selected 6032multilib, relative to some @file{lib} subdirectory. If OS libraries are 6033present in the @file{lib} subdirectory and no multilibs are used, this is 6034usually just @file{.}, if OS libraries are present in @file{lib@var{suffix}} 6035sibling directories this prints e.g.@: @file{../lib64}, @file{../lib} or 6036@file{../lib32}, or if OS libraries are present in @file{lib/@var{subdir}} 6037subdirectories it prints e.g.@: @file{amd64}, @file{sparcv9} or @file{ev6}. 6038 6039@item -print-multiarch 6040@opindex print-multiarch 6041Print the path to OS libraries for the selected multiarch, 6042relative to some @file{lib} subdirectory. 6043 6044@item -print-prog-name=@var{program} 6045@opindex print-prog-name 6046Like @option{-print-file-name}, but searches for a program such as @samp{cpp}. 6047 6048@item -print-libgcc-file-name 6049@opindex print-libgcc-file-name 6050Same as @option{-print-file-name=libgcc.a}. 6051 6052This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs} 6053but you do want to link with @file{libgcc.a}. You can do 6054 6055@smallexample 6056gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name` 6057@end smallexample 6058 6059@item -print-search-dirs 6060@opindex print-search-dirs 6061Print the name of the configured installation directory and a list of 6062program and library directories @command{gcc} will search---and don't do anything else. 6063 6064This is useful when @command{gcc} prints the error message 6065@samp{installation problem, cannot exec cpp0: No such file or directory}. 6066To resolve this you either need to put @file{cpp0} and the other compiler 6067components where @command{gcc} expects to find them, or you can set the environment 6068variable @env{GCC_EXEC_PREFIX} to the directory where you installed them. 6069Don't forget the trailing @samp{/}. 6070@xref{Environment Variables}. 6071 6072@item -print-sysroot 6073@opindex print-sysroot 6074Print the target sysroot directory that will be used during 6075compilation. This is the target sysroot specified either at configure 6076time or using the @option{--sysroot} option, possibly with an extra 6077suffix that depends on compilation options. If no target sysroot is 6078specified, the option prints nothing. 6079 6080@item -print-sysroot-headers-suffix 6081@opindex print-sysroot-headers-suffix 6082Print the suffix added to the target sysroot when searching for 6083headers, or give an error if the compiler is not configured with such 6084a suffix---and don't do anything else. 6085 6086@item -dumpmachine 6087@opindex dumpmachine 6088Print the compiler's target machine (for example, 6089@samp{i686-pc-linux-gnu})---and don't do anything else. 6090 6091@item -dumpversion 6092@opindex dumpversion 6093Print the compiler version (for example, @samp{3.0})---and don't do 6094anything else. 6095 6096@item -dumpspecs 6097@opindex dumpspecs 6098Print the compiler's built-in specs---and don't do anything else. (This 6099is used when GCC itself is being built.) @xref{Spec Files}. 6100 6101@item -feliminate-unused-debug-types 6102@opindex feliminate-unused-debug-types 6103Normally, when producing DWARF2 output, GCC will emit debugging 6104information for all types declared in a compilation 6105unit, regardless of whether or not they are actually used 6106in that compilation unit. Sometimes this is useful, such as 6107if, in the debugger, you want to cast a value to a type that is 6108not actually used in your program (but is declared). More often, 6109however, this results in a significant amount of wasted space. 6110With this option, GCC will avoid producing debug symbol output 6111for types that are nowhere used in the source file being compiled. 6112@end table 6113 6114@node Optimize Options 6115@section Options That Control Optimization 6116@cindex optimize options 6117@cindex options, optimization 6118 6119These options control various sorts of optimizations. 6120 6121Without any optimization option, the compiler's goal is to reduce the 6122cost of compilation and to make debugging produce the expected 6123results. Statements are independent: if you stop the program with a 6124breakpoint between statements, you can then assign a new value to any 6125variable or change the program counter to any other statement in the 6126function and get exactly the results you would expect from the source 6127code. 6128 6129Turning on optimization flags makes the compiler attempt to improve 6130the performance and/or code size at the expense of compilation time 6131and possibly the ability to debug the program. 6132 6133The compiler performs optimization based on the knowledge it has of the 6134program. Compiling multiple files at once to a single output file mode allows 6135the compiler to use information gained from all of the files when compiling 6136each of them. 6137 6138Not all optimizations are controlled directly by a flag. Only 6139optimizations that have a flag are listed in this section. 6140 6141Most optimizations are only enabled if an @option{-O} level is set on 6142the command line. Otherwise they are disabled, even if individual 6143optimization flags are specified. 6144 6145Depending on the target and how GCC was configured, a slightly different 6146set of optimizations may be enabled at each @option{-O} level than 6147those listed here. You can invoke GCC with @samp{-Q --help=optimizers} 6148to find out the exact set of optimizations that are enabled at each level. 6149@xref{Overall Options}, for examples. 6150 6151@table @gcctabopt 6152@item -O 6153@itemx -O1 6154@opindex O 6155@opindex O1 6156Optimize. Optimizing compilation takes somewhat more time, and a lot 6157more memory for a large function. 6158 6159With @option{-O}, the compiler tries to reduce code size and execution 6160time, without performing any optimizations that take a great deal of 6161compilation time. 6162 6163@option{-O} turns on the following optimization flags: 6164@gccoptlist{ 6165-fauto-inc-dec @gol 6166-fcompare-elim @gol 6167-fcprop-registers @gol 6168-fdce @gol 6169-fdefer-pop @gol 6170-fdelayed-branch @gol 6171-fdse @gol 6172-fguess-branch-probability @gol 6173-fif-conversion2 @gol 6174-fif-conversion @gol 6175-fipa-pure-const @gol 6176-fipa-profile @gol 6177-fipa-reference @gol 6178-fmerge-constants 6179-fsplit-wide-types @gol 6180-ftree-bit-ccp @gol 6181-ftree-builtin-call-dce @gol 6182-ftree-ccp @gol 6183-ftree-ch @gol 6184-ftree-copyrename @gol 6185-ftree-dce @gol 6186-ftree-dominator-opts @gol 6187-ftree-dse @gol 6188-ftree-forwprop @gol 6189-ftree-fre @gol 6190-ftree-phiprop @gol 6191-ftree-sra @gol 6192-ftree-pta @gol 6193-ftree-ter @gol 6194-funit-at-a-time} 6195 6196@option{-O} also turns on @option{-fomit-frame-pointer} on machines 6197where doing so does not interfere with debugging. 6198 6199@item -O2 6200@opindex O2 6201Optimize even more. GCC performs nearly all supported optimizations 6202that do not involve a space-speed tradeoff. 6203As compared to @option{-O}, this option increases both compilation time 6204and the performance of the generated code. 6205 6206@option{-O2} turns on all optimization flags specified by @option{-O}. It 6207also turns on the following optimization flags: 6208@gccoptlist{-fthread-jumps @gol 6209-falign-functions -falign-jumps @gol 6210-falign-loops -falign-labels @gol 6211-fcaller-saves @gol 6212-fcrossjumping @gol 6213-fcse-follow-jumps -fcse-skip-blocks @gol 6214-fdelete-null-pointer-checks @gol 6215-fdevirtualize @gol 6216-fexpensive-optimizations @gol 6217-fgcse -fgcse-lm @gol 6218-finline-small-functions @gol 6219-findirect-inlining @gol 6220-fipa-sra @gol 6221-foptimize-sibling-calls @gol 6222-fpartial-inlining @gol 6223-fpeephole2 @gol 6224-fregmove @gol 6225-freorder-blocks -freorder-functions @gol 6226-frerun-cse-after-loop @gol 6227-fsched-interblock -fsched-spec @gol 6228-fschedule-insns -fschedule-insns2 @gol 6229-fstrict-aliasing -fstrict-overflow @gol 6230-ftree-switch-conversion -ftree-tail-merge @gol 6231-ftree-pre @gol 6232-ftree-vrp} 6233 6234Please note the warning under @option{-fgcse} about 6235invoking @option{-O2} on programs that use computed gotos. 6236 6237@item -O3 6238@opindex O3 6239Optimize yet more. @option{-O3} turns on all optimizations specified 6240by @option{-O2} and also turns on the @option{-finline-functions}, 6241@option{-funswitch-loops}, @option{-fpredictive-commoning}, 6242@option{-fgcse-after-reload}, @option{-ftree-vectorize} and 6243@option{-fipa-cp-clone} options. 6244 6245@item -O0 6246@opindex O0 6247Reduce compilation time and make debugging produce the expected 6248results. This is the default. 6249 6250@item -Os 6251@opindex Os 6252Optimize for size. @option{-Os} enables all @option{-O2} optimizations that 6253do not typically increase code size. It also performs further 6254optimizations designed to reduce code size. 6255 6256@option{-Os} disables the following optimization flags: 6257@gccoptlist{-falign-functions -falign-jumps -falign-loops @gol 6258-falign-labels -freorder-blocks -freorder-blocks-and-partition @gol 6259-fprefetch-loop-arrays -ftree-vect-loop-version} 6260 6261@item -Ofast 6262@opindex Ofast 6263Disregard strict standards compliance. @option{-Ofast} enables all 6264@option{-O3} optimizations. It also enables optimizations that are not 6265valid for all standard compliant programs. 6266It turns on @option{-ffast-math} and the Fortran-specific 6267@option{-fno-protect-parens} and @option{-fstack-arrays}. 6268 6269If you use multiple @option{-O} options, with or without level numbers, 6270the last such option is the one that is effective. 6271@end table 6272 6273Options of the form @option{-f@var{flag}} specify machine-independent 6274flags. Most flags have both positive and negative forms; the negative 6275form of @option{-ffoo} would be @option{-fno-foo}. In the table 6276below, only one of the forms is listed---the one you typically will 6277use. You can figure out the other form by either removing @samp{no-} 6278or adding it. 6279 6280The following options control specific optimizations. They are either 6281activated by @option{-O} options or are related to ones that are. You 6282can use the following flags in the rare cases when ``fine-tuning'' of 6283optimizations to be performed is desired. 6284 6285@table @gcctabopt 6286@item -fno-default-inline 6287@opindex fno-default-inline 6288Do not make member functions inline by default merely because they are 6289defined inside the class scope (C++ only). Otherwise, when you specify 6290@w{@option{-O}}, member functions defined inside class scope are compiled 6291inline by default; i.e., you don't need to add @samp{inline} in front of 6292the member function name. 6293 6294@item -fno-defer-pop 6295@opindex fno-defer-pop 6296Always pop the arguments to each function call as soon as that function 6297returns. For machines that must pop arguments after a function call, 6298the compiler normally lets arguments accumulate on the stack for several 6299function calls and pops them all at once. 6300 6301Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 6302 6303@item -fforward-propagate 6304@opindex fforward-propagate 6305Perform a forward propagation pass on RTL@. The pass tries to combine two 6306instructions and checks if the result can be simplified. If loop unrolling 6307is active, two passes are performed and the second is scheduled after 6308loop unrolling. 6309 6310This option is enabled by default at optimization levels @option{-O}, 6311@option{-O2}, @option{-O3}, @option{-Os}. 6312 6313@item -ffp-contract=@var{style} 6314@opindex ffp-contract 6315@option{-ffp-contract=off} disables floating-point expression contraction. 6316@option{-ffp-contract=fast} enables floating-point expression contraction 6317such as forming of fused multiply-add operations if the target has 6318native support for them. 6319@option{-ffp-contract=on} enables floating-point expression contraction 6320if allowed by the language standard. This is currently not implemented 6321and treated equal to @option{-ffp-contract=off}. 6322 6323The default is @option{-ffp-contract=fast}. 6324 6325@item -fomit-frame-pointer 6326@opindex fomit-frame-pointer 6327Don't keep the frame pointer in a register for functions that 6328don't need one. This avoids the instructions to save, set up and 6329restore frame pointers; it also makes an extra register available 6330in many functions. @strong{It also makes debugging impossible on 6331some machines.} 6332 6333On some machines, such as the VAX, this flag has no effect, because 6334the standard calling sequence automatically handles the frame pointer 6335and nothing is saved by pretending it doesn't exist. The 6336machine-description macro @code{FRAME_POINTER_REQUIRED} controls 6337whether a target machine supports this flag. @xref{Registers,,Register 6338Usage, gccint, GNU Compiler Collection (GCC) Internals}. 6339 6340Starting with GCC version 4.6, the default setting (when not optimizing for 6341size) for 32-bit Linux x86 and 32-bit Darwin x86 targets has been changed to 6342@option{-fomit-frame-pointer}. The default can be reverted to 6343@option{-fno-omit-frame-pointer} by configuring GCC with the 6344@option{--enable-frame-pointer} configure option. 6345 6346Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 6347 6348@item -foptimize-sibling-calls 6349@opindex foptimize-sibling-calls 6350Optimize sibling and tail recursive calls. 6351 6352Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 6353 6354@item -fno-inline 6355@opindex fno-inline 6356Do not expand any functions inline apart from those marked with 6357the @code{always_inline} attribute. This is the default when not 6358optimizing. 6359 6360Single functions can be exempted from inlining by marking them 6361with the @code{noinline} attribute. 6362 6363@item -finline-small-functions 6364@opindex finline-small-functions 6365Integrate functions into their callers when their body is smaller than expected 6366function call code (so overall size of program gets smaller). The compiler 6367heuristically decides which functions are simple enough to be worth integrating 6368in this way. This inlining applies to all functions, even those not declared 6369inline. 6370 6371Enabled at level @option{-O2}. 6372 6373@item -findirect-inlining 6374@opindex findirect-inlining 6375Inline also indirect calls that are discovered to be known at compile 6376time thanks to previous inlining. This option has any effect only 6377when inlining itself is turned on by the @option{-finline-functions} 6378or @option{-finline-small-functions} options. 6379 6380Enabled at level @option{-O2}. 6381 6382@item -finline-functions 6383@opindex finline-functions 6384Consider all functions for inlining, even if they are not declared inline. 6385The compiler heuristically decides which functions are worth integrating 6386in this way. 6387 6388If all calls to a given function are integrated, and the function is 6389declared @code{static}, then the function is normally not output as 6390assembler code in its own right. 6391 6392Enabled at level @option{-O3}. 6393 6394@item -finline-functions-called-once 6395@opindex finline-functions-called-once 6396Consider all @code{static} functions called once for inlining into their 6397caller even if they are not marked @code{inline}. If a call to a given 6398function is integrated, then the function is not output as assembler code 6399in its own right. 6400 6401Enabled at levels @option{-O1}, @option{-O2}, @option{-O3} and @option{-Os}. 6402 6403@item -fearly-inlining 6404@opindex fearly-inlining 6405Inline functions marked by @code{always_inline} and functions whose body seems 6406smaller than the function call overhead early before doing 6407@option{-fprofile-generate} instrumentation and real inlining pass. Doing so 6408makes profiling significantly cheaper and usually inlining faster on programs 6409having large chains of nested wrapper functions. 6410 6411Enabled by default. 6412 6413@item -fipa-sra 6414@opindex fipa-sra 6415Perform interprocedural scalar replacement of aggregates, removal of 6416unused parameters and replacement of parameters passed by reference 6417by parameters passed by value. 6418 6419Enabled at levels @option{-O2}, @option{-O3} and @option{-Os}. 6420 6421@item -finline-limit=@var{n} 6422@opindex finline-limit 6423By default, GCC limits the size of functions that can be inlined. This flag 6424allows coarse control of this limit. @var{n} is the size of functions that 6425can be inlined in number of pseudo instructions. 6426 6427Inlining is actually controlled by a number of parameters, which may be 6428specified individually by using @option{--param @var{name}=@var{value}}. 6429The @option{-finline-limit=@var{n}} option sets some of these parameters 6430as follows: 6431 6432@table @gcctabopt 6433@item max-inline-insns-single 6434is set to @var{n}/2. 6435@item max-inline-insns-auto 6436is set to @var{n}/2. 6437@end table 6438 6439See below for a documentation of the individual 6440parameters controlling inlining and for the defaults of these parameters. 6441 6442@emph{Note:} there may be no value to @option{-finline-limit} that results 6443in default behavior. 6444 6445@emph{Note:} pseudo instruction represents, in this particular context, an 6446abstract measurement of function's size. In no way does it represent a count 6447of assembly instructions and as such its exact meaning might change from one 6448release to an another. 6449 6450@item -fno-keep-inline-dllexport 6451@opindex -fno-keep-inline-dllexport 6452This is a more fine-grained version of @option{-fkeep-inline-functions}, 6453which applies only to functions that are declared using the @code{dllexport} 6454attribute or declspec (@xref{Function Attributes,,Declaring Attributes of 6455Functions}.) 6456 6457@item -fkeep-inline-functions 6458@opindex fkeep-inline-functions 6459In C, emit @code{static} functions that are declared @code{inline} 6460into the object file, even if the function has been inlined into all 6461of its callers. This switch does not affect functions using the 6462@code{extern inline} extension in GNU C90@. In C++, emit any and all 6463inline functions into the object file. 6464 6465@item -fkeep-static-consts 6466@opindex fkeep-static-consts 6467Emit variables declared @code{static const} when optimization isn't turned 6468on, even if the variables aren't referenced. 6469 6470GCC enables this option by default. If you want to force the compiler to 6471check if the variable was referenced, regardless of whether or not 6472optimization is turned on, use the @option{-fno-keep-static-consts} option. 6473 6474@item -fmerge-constants 6475@opindex fmerge-constants 6476Attempt to merge identical constants (string constants and floating-point 6477constants) across compilation units. 6478 6479This option is the default for optimized compilation if the assembler and 6480linker support it. Use @option{-fno-merge-constants} to inhibit this 6481behavior. 6482 6483Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 6484 6485@item -fmerge-all-constants 6486@opindex fmerge-all-constants 6487Attempt to merge identical constants and identical variables. 6488 6489This option implies @option{-fmerge-constants}. In addition to 6490@option{-fmerge-constants} this considers e.g.@: even constant initialized 6491arrays or initialized constant variables with integral or floating-point 6492types. Languages like C or C++ require each variable, including multiple 6493instances of the same variable in recursive calls, to have distinct locations, 6494so using this option will result in non-conforming 6495behavior. 6496 6497@item -fmodulo-sched 6498@opindex fmodulo-sched 6499Perform swing modulo scheduling immediately before the first scheduling 6500pass. This pass looks at innermost loops and reorders their 6501instructions by overlapping different iterations. 6502 6503@item -fmodulo-sched-allow-regmoves 6504@opindex fmodulo-sched-allow-regmoves 6505Perform more aggressive SMS based modulo scheduling with register moves 6506allowed. By setting this flag certain anti-dependences edges will be 6507deleted which will trigger the generation of reg-moves based on the 6508life-range analysis. This option is effective only with 6509@option{-fmodulo-sched} enabled. 6510 6511@item -fno-branch-count-reg 6512@opindex fno-branch-count-reg 6513Do not use ``decrement and branch'' instructions on a count register, 6514but instead generate a sequence of instructions that decrement a 6515register, compare it against zero, then branch based upon the result. 6516This option is only meaningful on architectures that support such 6517instructions, which include x86, PowerPC, IA-64 and S/390. 6518 6519The default is @option{-fbranch-count-reg}. 6520 6521@item -fno-function-cse 6522@opindex fno-function-cse 6523Do not put function addresses in registers; make each instruction that 6524calls a constant function contain the function's address explicitly. 6525 6526This option results in less efficient code, but some strange hacks 6527that alter the assembler output may be confused by the optimizations 6528performed when this option is not used. 6529 6530The default is @option{-ffunction-cse} 6531 6532@item -fno-zero-initialized-in-bss 6533@opindex fno-zero-initialized-in-bss 6534If the target supports a BSS section, GCC by default puts variables that 6535are initialized to zero into BSS@. This can save space in the resulting 6536code. 6537 6538This option turns off this behavior because some programs explicitly 6539rely on variables going to the data section. E.g., so that the 6540resulting executable can find the beginning of that section and/or make 6541assumptions based on that. 6542 6543The default is @option{-fzero-initialized-in-bss}. 6544 6545@item -fmudflap -fmudflapth -fmudflapir 6546@opindex fmudflap 6547@opindex fmudflapth 6548@opindex fmudflapir 6549@cindex bounds checking 6550@cindex mudflap 6551For front-ends that support it (C and C++), instrument all risky 6552pointer/array dereferencing operations, some standard library 6553string/heap functions, and some other associated constructs with 6554range/validity tests. Modules so instrumented should be immune to 6555buffer overflows, invalid heap use, and some other classes of C/C++ 6556programming errors. The instrumentation relies on a separate runtime 6557library (@file{libmudflap}), which will be linked into a program if 6558@option{-fmudflap} is given at link time. Run-time behavior of the 6559instrumented program is controlled by the @env{MUDFLAP_OPTIONS} 6560environment variable. See @code{env MUDFLAP_OPTIONS=-help a.out} 6561for its options. 6562 6563Use @option{-fmudflapth} instead of @option{-fmudflap} to compile and to 6564link if your program is multi-threaded. Use @option{-fmudflapir}, in 6565addition to @option{-fmudflap} or @option{-fmudflapth}, if 6566instrumentation should ignore pointer reads. This produces less 6567instrumentation (and therefore faster execution) and still provides 6568some protection against outright memory corrupting writes, but allows 6569erroneously read data to propagate within a program. 6570 6571@item -fthread-jumps 6572@opindex fthread-jumps 6573Perform optimizations where we check to see if a jump branches to a 6574location where another comparison subsumed by the first is found. If 6575so, the first branch is redirected to either the destination of the 6576second branch or a point immediately following it, depending on whether 6577the condition is known to be true or false. 6578 6579Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 6580 6581@item -fsplit-wide-types 6582@opindex fsplit-wide-types 6583When using a type that occupies multiple registers, such as @code{long 6584long} on a 32-bit system, split the registers apart and allocate them 6585independently. This normally generates better code for those types, 6586but may make debugging more difficult. 6587 6588Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, 6589@option{-Os}. 6590 6591@item -fcse-follow-jumps 6592@opindex fcse-follow-jumps 6593In common subexpression elimination (CSE), scan through jump instructions 6594when the target of the jump is not reached by any other path. For 6595example, when CSE encounters an @code{if} statement with an 6596@code{else} clause, CSE will follow the jump when the condition 6597tested is false. 6598 6599Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 6600 6601@item -fcse-skip-blocks 6602@opindex fcse-skip-blocks 6603This is similar to @option{-fcse-follow-jumps}, but causes CSE to 6604follow jumps that conditionally skip over blocks. When CSE 6605encounters a simple @code{if} statement with no else clause, 6606@option{-fcse-skip-blocks} causes CSE to follow the jump around the 6607body of the @code{if}. 6608 6609Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 6610 6611@item -frerun-cse-after-loop 6612@opindex frerun-cse-after-loop 6613Re-run common subexpression elimination after loop optimizations has been 6614performed. 6615 6616Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 6617 6618@item -fgcse 6619@opindex fgcse 6620Perform a global common subexpression elimination pass. 6621This pass also performs global constant and copy propagation. 6622 6623@emph{Note:} When compiling a program using computed gotos, a GCC 6624extension, you may get better run-time performance if you disable 6625the global common subexpression elimination pass by adding 6626@option{-fno-gcse} to the command line. 6627 6628Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 6629 6630@item -fgcse-lm 6631@opindex fgcse-lm 6632When @option{-fgcse-lm} is enabled, global common subexpression elimination will 6633attempt to move loads that are only killed by stores into themselves. This 6634allows a loop containing a load/store sequence to be changed to a load outside 6635the loop, and a copy/store within the loop. 6636 6637Enabled by default when gcse is enabled. 6638 6639@item -fgcse-sm 6640@opindex fgcse-sm 6641When @option{-fgcse-sm} is enabled, a store motion pass is run after 6642global common subexpression elimination. This pass will attempt to move 6643stores out of loops. When used in conjunction with @option{-fgcse-lm}, 6644loops containing a load/store sequence can be changed to a load before 6645the loop and a store after the loop. 6646 6647Not enabled at any optimization level. 6648 6649@item -fgcse-las 6650@opindex fgcse-las 6651When @option{-fgcse-las} is enabled, the global common subexpression 6652elimination pass eliminates redundant loads that come after stores to the 6653same memory location (both partial and full redundancies). 6654 6655Not enabled at any optimization level. 6656 6657@item -fgcse-after-reload 6658@opindex fgcse-after-reload 6659When @option{-fgcse-after-reload} is enabled, a redundant load elimination 6660pass is performed after reload. The purpose of this pass is to cleanup 6661redundant spilling. 6662 6663@item -funsafe-loop-optimizations 6664@opindex funsafe-loop-optimizations 6665If given, the loop optimizer will assume that loop indices do not 6666overflow, and that the loops with nontrivial exit condition are not 6667infinite. This enables a wider range of loop optimizations even if 6668the loop optimizer itself cannot prove that these assumptions are valid. 6669Using @option{-Wunsafe-loop-optimizations}, the compiler will warn you 6670if it finds this kind of loop. 6671 6672@item -fcrossjumping 6673@opindex fcrossjumping 6674Perform cross-jumping transformation. This transformation unifies equivalent code and save code size. The 6675resulting code may or may not perform better than without cross-jumping. 6676 6677Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 6678 6679@item -fauto-inc-dec 6680@opindex fauto-inc-dec 6681Combine increments or decrements of addresses with memory accesses. 6682This pass is always skipped on architectures that do not have 6683instructions to support this. Enabled by default at @option{-O} and 6684higher on architectures that support this. 6685 6686@item -fdce 6687@opindex fdce 6688Perform dead code elimination (DCE) on RTL@. 6689Enabled by default at @option{-O} and higher. 6690 6691@item -fdse 6692@opindex fdse 6693Perform dead store elimination (DSE) on RTL@. 6694Enabled by default at @option{-O} and higher. 6695 6696@item -fif-conversion 6697@opindex fif-conversion 6698Attempt to transform conditional jumps into branch-less equivalents. This 6699include use of conditional moves, min, max, set flags and abs instructions, and 6700some tricks doable by standard arithmetics. The use of conditional execution 6701on chips where it is available is controlled by @code{if-conversion2}. 6702 6703Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 6704 6705@item -fif-conversion2 6706@opindex fif-conversion2 6707Use conditional execution (where available) to transform conditional jumps into 6708branch-less equivalents. 6709 6710Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 6711 6712@item -fdelete-null-pointer-checks 6713@opindex fdelete-null-pointer-checks 6714Assume that programs cannot safely dereference null pointers, and that 6715no code or data element resides there. This enables simple constant 6716folding optimizations at all optimization levels. In addition, other 6717optimization passes in GCC use this flag to control global dataflow 6718analyses that eliminate useless checks for null pointers; these assume 6719that if a pointer is checked after it has already been dereferenced, 6720it cannot be null. 6721 6722Note however that in some environments this assumption is not true. 6723Use @option{-fno-delete-null-pointer-checks} to disable this optimization 6724for programs that depend on that behavior. 6725 6726Some targets, especially embedded ones, disable this option at all levels. 6727Otherwise it is enabled at all levels: @option{-O0}, @option{-O1}, 6728@option{-O2}, @option{-O3}, @option{-Os}. Passes that use the information 6729are enabled independently at different optimization levels. 6730 6731@item -fdevirtualize 6732@opindex fdevirtualize 6733Attempt to convert calls to virtual functions to direct calls. This 6734is done both within a procedure and interprocedurally as part of 6735indirect inlining (@code{-findirect-inlining}) and interprocedural constant 6736propagation (@option{-fipa-cp}). 6737Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 6738 6739@item -fexpensive-optimizations 6740@opindex fexpensive-optimizations 6741Perform a number of minor optimizations that are relatively expensive. 6742 6743Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 6744 6745@item -free 6746@opindex free 6747Attempt to remove redundant extension instructions. This is especially 6748helpful for the x86-64 architecture which implicitly zero-extends in 64-bit 6749registers after writing to their lower 32-bit half. 6750 6751Enabled for x86 at levels @option{-O2}, @option{-O3}. 6752 6753@item -foptimize-register-move 6754@itemx -fregmove 6755@opindex foptimize-register-move 6756@opindex fregmove 6757Attempt to reassign register numbers in move instructions and as 6758operands of other simple instructions in order to maximize the amount of 6759register tying. This is especially helpful on machines with two-operand 6760instructions. 6761 6762Note @option{-fregmove} and @option{-foptimize-register-move} are the same 6763optimization. 6764 6765Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 6766 6767@item -fira-algorithm=@var{algorithm} 6768Use the specified coloring algorithm for the integrated register 6769allocator. The @var{algorithm} argument can be @samp{priority}, which 6770specifies Chow's priority coloring, or @samp{CB}, which specifies 6771Chaitin-Briggs coloring. Chaitin-Briggs coloring is not implemented 6772for all architectures, but for those targets that do support it, it is 6773the default because it generates better code. 6774 6775@item -fira-region=@var{region} 6776Use specified regions for the integrated register allocator. The 6777@var{region} argument should be one of the following: 6778 6779@table @samp 6780 6781@item all 6782Use all loops as register allocation regions. 6783This can give the best results for machines with a small and/or 6784irregular register set. 6785 6786@item mixed 6787Use all loops except for loops with small register pressure 6788as the regions. This value usually gives 6789the best results in most cases and for most architectures, 6790and is enabled by default when compiling with optimization for speed 6791(@option{-O}, @option{-O2}, @dots{}). 6792 6793@item one 6794Use all functions as a single region. 6795This typically results in the smallest code size, and is enabled by default for 6796@option{-Os} or @option{-O0}. 6797 6798@end table 6799 6800@item -fira-loop-pressure 6801@opindex fira-loop-pressure 6802Use IRA to evaluate register pressure in loops for decisions to move 6803loop invariants. This option usually results in generation 6804of faster and smaller code on machines with large register files (>= 32 6805registers), but it can slow the compiler down. 6806 6807This option is enabled at level @option{-O3} for some targets. 6808 6809@item -fno-ira-share-save-slots 6810@opindex fno-ira-share-save-slots 6811Disable sharing of stack slots used for saving call-used hard 6812registers living through a call. Each hard register gets a 6813separate stack slot, and as a result function stack frames are 6814larger. 6815 6816@item -fno-ira-share-spill-slots 6817@opindex fno-ira-share-spill-slots 6818Disable sharing of stack slots allocated for pseudo-registers. Each 6819pseudo-register that does not get a hard register gets a separate 6820stack slot, and as a result function stack frames are larger. 6821 6822@item -fira-verbose=@var{n} 6823@opindex fira-verbose 6824Control the verbosity of the dump file for the integrated register allocator. 6825The default value is 5. If the value @var{n} is greater or equal to 10, 6826the dump output is sent to stderr using the same format as @var{n} minus 10. 6827 6828@item -fdelayed-branch 6829@opindex fdelayed-branch 6830If supported for the target machine, attempt to reorder instructions 6831to exploit instruction slots available after delayed branch 6832instructions. 6833 6834Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 6835 6836@item -fschedule-insns 6837@opindex fschedule-insns 6838If supported for the target machine, attempt to reorder instructions to 6839eliminate execution stalls due to required data being unavailable. This 6840helps machines that have slow floating point or memory load instructions 6841by allowing other instructions to be issued until the result of the load 6842or floating-point instruction is required. 6843 6844Enabled at levels @option{-O2}, @option{-O3}. 6845 6846@item -fschedule-insns2 6847@opindex fschedule-insns2 6848Similar to @option{-fschedule-insns}, but requests an additional pass of 6849instruction scheduling after register allocation has been done. This is 6850especially useful on machines with a relatively small number of 6851registers and where memory load instructions take more than one cycle. 6852 6853Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 6854 6855@item -fno-sched-interblock 6856@opindex fno-sched-interblock 6857Don't schedule instructions across basic blocks. This is normally 6858enabled by default when scheduling before register allocation, i.e.@: 6859with @option{-fschedule-insns} or at @option{-O2} or higher. 6860 6861@item -fno-sched-spec 6862@opindex fno-sched-spec 6863Don't allow speculative motion of non-load instructions. This is normally 6864enabled by default when scheduling before register allocation, i.e.@: 6865with @option{-fschedule-insns} or at @option{-O2} or higher. 6866 6867@item -fsched-pressure 6868@opindex fsched-pressure 6869Enable register pressure sensitive insn scheduling before the register 6870allocation. This only makes sense when scheduling before register 6871allocation is enabled, i.e.@: with @option{-fschedule-insns} or at 6872@option{-O2} or higher. Usage of this option can improve the 6873generated code and decrease its size by preventing register pressure 6874increase above the number of available hard registers and as a 6875consequence register spills in the register allocation. 6876 6877@item -fsched-spec-load 6878@opindex fsched-spec-load 6879Allow speculative motion of some load instructions. This only makes 6880sense when scheduling before register allocation, i.e.@: with 6881@option{-fschedule-insns} or at @option{-O2} or higher. 6882 6883@item -fsched-spec-load-dangerous 6884@opindex fsched-spec-load-dangerous 6885Allow speculative motion of more load instructions. This only makes 6886sense when scheduling before register allocation, i.e.@: with 6887@option{-fschedule-insns} or at @option{-O2} or higher. 6888 6889@item -fsched-stalled-insns 6890@itemx -fsched-stalled-insns=@var{n} 6891@opindex fsched-stalled-insns 6892Define how many insns (if any) can be moved prematurely from the queue 6893of stalled insns into the ready list, during the second scheduling pass. 6894@option{-fno-sched-stalled-insns} means that no insns will be moved 6895prematurely, @option{-fsched-stalled-insns=0} means there is no limit 6896on how many queued insns can be moved prematurely. 6897@option{-fsched-stalled-insns} without a value is equivalent to 6898@option{-fsched-stalled-insns=1}. 6899 6900@item -fsched-stalled-insns-dep 6901@itemx -fsched-stalled-insns-dep=@var{n} 6902@opindex fsched-stalled-insns-dep 6903Define how many insn groups (cycles) will be examined for a dependency 6904on a stalled insn that is candidate for premature removal from the queue 6905of stalled insns. This has an effect only during the second scheduling pass, 6906and only if @option{-fsched-stalled-insns} is used. 6907@option{-fno-sched-stalled-insns-dep} is equivalent to 6908@option{-fsched-stalled-insns-dep=0}. 6909@option{-fsched-stalled-insns-dep} without a value is equivalent to 6910@option{-fsched-stalled-insns-dep=1}. 6911 6912@item -fsched2-use-superblocks 6913@opindex fsched2-use-superblocks 6914When scheduling after register allocation, do use superblock scheduling 6915algorithm. Superblock scheduling allows motion across basic block boundaries 6916resulting on faster schedules. This option is experimental, as not all machine 6917descriptions used by GCC model the CPU closely enough to avoid unreliable 6918results from the algorithm. 6919 6920This only makes sense when scheduling after register allocation, i.e.@: with 6921@option{-fschedule-insns2} or at @option{-O2} or higher. 6922 6923@item -fsched-group-heuristic 6924@opindex fsched-group-heuristic 6925Enable the group heuristic in the scheduler. This heuristic favors 6926the instruction that belongs to a schedule group. This is enabled 6927by default when scheduling is enabled, i.e.@: with @option{-fschedule-insns} 6928or @option{-fschedule-insns2} or at @option{-O2} or higher. 6929 6930@item -fsched-critical-path-heuristic 6931@opindex fsched-critical-path-heuristic 6932Enable the critical-path heuristic in the scheduler. This heuristic favors 6933instructions on the critical path. This is enabled by default when 6934scheduling is enabled, i.e.@: with @option{-fschedule-insns} 6935or @option{-fschedule-insns2} or at @option{-O2} or higher. 6936 6937@item -fsched-spec-insn-heuristic 6938@opindex fsched-spec-insn-heuristic 6939Enable the speculative instruction heuristic in the scheduler. This 6940heuristic favors speculative instructions with greater dependency weakness. 6941This is enabled by default when scheduling is enabled, i.e.@: 6942with @option{-fschedule-insns} or @option{-fschedule-insns2} 6943or at @option{-O2} or higher. 6944 6945@item -fsched-rank-heuristic 6946@opindex fsched-rank-heuristic 6947Enable the rank heuristic in the scheduler. This heuristic favors 6948the instruction belonging to a basic block with greater size or frequency. 6949This is enabled by default when scheduling is enabled, i.e.@: 6950with @option{-fschedule-insns} or @option{-fschedule-insns2} or 6951at @option{-O2} or higher. 6952 6953@item -fsched-last-insn-heuristic 6954@opindex fsched-last-insn-heuristic 6955Enable the last-instruction heuristic in the scheduler. This heuristic 6956favors the instruction that is less dependent on the last instruction 6957scheduled. This is enabled by default when scheduling is enabled, 6958i.e.@: with @option{-fschedule-insns} or @option{-fschedule-insns2} or 6959at @option{-O2} or higher. 6960 6961@item -fsched-dep-count-heuristic 6962@opindex fsched-dep-count-heuristic 6963Enable the dependent-count heuristic in the scheduler. This heuristic 6964favors the instruction that has more instructions depending on it. 6965This is enabled by default when scheduling is enabled, i.e.@: 6966with @option{-fschedule-insns} or @option{-fschedule-insns2} or 6967at @option{-O2} or higher. 6968 6969@item -freschedule-modulo-scheduled-loops 6970@opindex freschedule-modulo-scheduled-loops 6971The modulo scheduling comes before the traditional scheduling, if a loop 6972was modulo scheduled we may want to prevent the later scheduling passes 6973from changing its schedule, we use this option to control that. 6974 6975@item -fselective-scheduling 6976@opindex fselective-scheduling 6977Schedule instructions using selective scheduling algorithm. Selective 6978scheduling runs instead of the first scheduler pass. 6979 6980@item -fselective-scheduling2 6981@opindex fselective-scheduling2 6982Schedule instructions using selective scheduling algorithm. Selective 6983scheduling runs instead of the second scheduler pass. 6984 6985@item -fsel-sched-pipelining 6986@opindex fsel-sched-pipelining 6987Enable software pipelining of innermost loops during selective scheduling. 6988This option has no effect until one of @option{-fselective-scheduling} or 6989@option{-fselective-scheduling2} is turned on. 6990 6991@item -fsel-sched-pipelining-outer-loops 6992@opindex fsel-sched-pipelining-outer-loops 6993When pipelining loops during selective scheduling, also pipeline outer loops. 6994This option has no effect until @option{-fsel-sched-pipelining} is turned on. 6995 6996@item -fshrink-wrap 6997@opindex fshrink-wrap 6998Emit function prologues only before parts of the function that need it, 6999rather than at the top of the function. This flag is enabled by default at 7000@option{-O} and higher. 7001 7002@item -fcaller-saves 7003@opindex fcaller-saves 7004Enable values to be allocated in registers that will be clobbered by 7005function calls, by emitting extra instructions to save and restore the 7006registers around such calls. Such allocation is done only when it 7007seems to result in better code than would otherwise be produced. 7008 7009This option is always enabled by default on certain machines, usually 7010those which have no call-preserved registers to use instead. 7011 7012Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 7013 7014@item -fcombine-stack-adjustments 7015@opindex fcombine-stack-adjustments 7016Tracks stack adjustments (pushes and pops) and stack memory references 7017and then tries to find ways to combine them. 7018 7019Enabled by default at @option{-O1} and higher. 7020 7021@item -fconserve-stack 7022@opindex fconserve-stack 7023Attempt to minimize stack usage. The compiler will attempt to use less 7024stack space, even if that makes the program slower. This option 7025implies setting the @option{large-stack-frame} parameter to 100 7026and the @option{large-stack-frame-growth} parameter to 400. 7027 7028@item -ftree-reassoc 7029@opindex ftree-reassoc 7030Perform reassociation on trees. This flag is enabled by default 7031at @option{-O} and higher. 7032 7033@item -ftree-pre 7034@opindex ftree-pre 7035Perform partial redundancy elimination (PRE) on trees. This flag is 7036enabled by default at @option{-O2} and @option{-O3}. 7037 7038@item -ftree-forwprop 7039@opindex ftree-forwprop 7040Perform forward propagation on trees. This flag is enabled by default 7041at @option{-O} and higher. 7042 7043@item -ftree-fre 7044@opindex ftree-fre 7045Perform full redundancy elimination (FRE) on trees. The difference 7046between FRE and PRE is that FRE only considers expressions 7047that are computed on all paths leading to the redundant computation. 7048This analysis is faster than PRE, though it exposes fewer redundancies. 7049This flag is enabled by default at @option{-O} and higher. 7050 7051@item -ftree-phiprop 7052@opindex ftree-phiprop 7053Perform hoisting of loads from conditional pointers on trees. This 7054pass is enabled by default at @option{-O} and higher. 7055 7056@item -ftree-copy-prop 7057@opindex ftree-copy-prop 7058Perform copy propagation on trees. This pass eliminates unnecessary 7059copy operations. This flag is enabled by default at @option{-O} and 7060higher. 7061 7062@item -fipa-pure-const 7063@opindex fipa-pure-const 7064Discover which functions are pure or constant. 7065Enabled by default at @option{-O} and higher. 7066 7067@item -fipa-reference 7068@opindex fipa-reference 7069Discover which static variables do not escape cannot escape the 7070compilation unit. 7071Enabled by default at @option{-O} and higher. 7072 7073@item -fipa-pta 7074@opindex fipa-pta 7075Perform interprocedural pointer analysis and interprocedural modification 7076and reference analysis. This option can cause excessive memory and 7077compile-time usage on large compilation units. It is not enabled by 7078default at any optimization level. 7079 7080@item -fipa-profile 7081@opindex fipa-profile 7082Perform interprocedural profile propagation. The functions called only from 7083cold functions are marked as cold. Also functions executed once (such as 7084@code{cold}, @code{noreturn}, static constructors or destructors) are identified. Cold 7085functions and loop less parts of functions executed once are then optimized for 7086size. 7087Enabled by default at @option{-O} and higher. 7088 7089@item -fipa-cp 7090@opindex fipa-cp 7091Perform interprocedural constant propagation. 7092This optimization analyzes the program to determine when values passed 7093to functions are constants and then optimizes accordingly. 7094This optimization can substantially increase performance 7095if the application has constants passed to functions. 7096This flag is enabled by default at @option{-O2}, @option{-Os} and @option{-O3}. 7097 7098@item -fipa-cp-clone 7099@opindex fipa-cp-clone 7100Perform function cloning to make interprocedural constant propagation stronger. 7101When enabled, interprocedural constant propagation will perform function cloning 7102when externally visible function can be called with constant arguments. 7103Because this optimization can create multiple copies of functions, 7104it may significantly increase code size 7105(see @option{--param ipcp-unit-growth=@var{value}}). 7106This flag is enabled by default at @option{-O3}. 7107 7108@item -fipa-matrix-reorg 7109@opindex fipa-matrix-reorg 7110Perform matrix flattening and transposing. 7111Matrix flattening tries to replace an @math{m}-dimensional matrix 7112with its equivalent @math{n}-dimensional matrix, where @math{n < m}. 7113This reduces the level of indirection needed for accessing the elements 7114of the matrix. The second optimization is matrix transposing, which 7115attempts to change the order of the matrix's dimensions in order to 7116improve cache locality. 7117Both optimizations need the @option{-fwhole-program} flag. 7118Transposing is enabled only if profiling information is available. 7119 7120@item -ftree-sink 7121@opindex ftree-sink 7122Perform forward store motion on trees. This flag is 7123enabled by default at @option{-O} and higher. 7124 7125@item -ftree-bit-ccp 7126@opindex ftree-bit-ccp 7127Perform sparse conditional bit constant propagation on trees and propagate 7128pointer alignment information. 7129This pass only operates on local scalar variables and is enabled by default 7130at @option{-O} and higher. It requires that @option{-ftree-ccp} is enabled. 7131 7132@item -ftree-ccp 7133@opindex ftree-ccp 7134Perform sparse conditional constant propagation (CCP) on trees. This 7135pass only operates on local scalar variables and is enabled by default 7136at @option{-O} and higher. 7137 7138@item -ftree-switch-conversion 7139Perform conversion of simple initializations in a switch to 7140initializations from a scalar array. This flag is enabled by default 7141at @option{-O2} and higher. 7142 7143@item -ftree-tail-merge 7144Look for identical code sequences. When found, replace one with a jump to the 7145other. This optimization is known as tail merging or cross jumping. This flag 7146is enabled by default at @option{-O2} and higher. The compilation time 7147in this pass can 7148be limited using @option{max-tail-merge-comparisons} parameter and 7149@option{max-tail-merge-iterations} parameter. 7150 7151@item -ftree-dce 7152@opindex ftree-dce 7153Perform dead code elimination (DCE) on trees. This flag is enabled by 7154default at @option{-O} and higher. 7155 7156@item -ftree-builtin-call-dce 7157@opindex ftree-builtin-call-dce 7158Perform conditional dead code elimination (DCE) for calls to builtin functions 7159that may set @code{errno} but are otherwise side-effect free. This flag is 7160enabled by default at @option{-O2} and higher if @option{-Os} is not also 7161specified. 7162 7163@item -ftree-dominator-opts 7164@opindex ftree-dominator-opts 7165Perform a variety of simple scalar cleanups (constant/copy 7166propagation, redundancy elimination, range propagation and expression 7167simplification) based on a dominator tree traversal. This also 7168performs jump threading (to reduce jumps to jumps). This flag is 7169enabled by default at @option{-O} and higher. 7170 7171@item -ftree-dse 7172@opindex ftree-dse 7173Perform dead store elimination (DSE) on trees. A dead store is a store into 7174a memory location that is later overwritten by another store without 7175any intervening loads. In this case the earlier store can be deleted. This 7176flag is enabled by default at @option{-O} and higher. 7177 7178@item -ftree-ch 7179@opindex ftree-ch 7180Perform loop header copying on trees. This is beneficial since it increases 7181effectiveness of code motion optimizations. It also saves one jump. This flag 7182is enabled by default at @option{-O} and higher. It is not enabled 7183for @option{-Os}, since it usually increases code size. 7184 7185@item -ftree-loop-optimize 7186@opindex ftree-loop-optimize 7187Perform loop optimizations on trees. This flag is enabled by default 7188at @option{-O} and higher. 7189 7190@item -ftree-loop-linear 7191@opindex ftree-loop-linear 7192Perform loop interchange transformations on tree. Same as 7193@option{-floop-interchange}. To use this code transformation, GCC has 7194to be configured with @option{--with-ppl} and @option{--with-cloog} to 7195enable the Graphite loop transformation infrastructure. 7196 7197@item -floop-interchange 7198@opindex floop-interchange 7199Perform loop interchange transformations on loops. Interchanging two 7200nested loops switches the inner and outer loops. For example, given a 7201loop like: 7202@smallexample 7203DO J = 1, M 7204 DO I = 1, N 7205 A(J, I) = A(J, I) * C 7206 ENDDO 7207ENDDO 7208@end smallexample 7209loop interchange will transform the loop as if the user had written: 7210@smallexample 7211DO I = 1, N 7212 DO J = 1, M 7213 A(J, I) = A(J, I) * C 7214 ENDDO 7215ENDDO 7216@end smallexample 7217which can be beneficial when @code{N} is larger than the caches, 7218because in Fortran, the elements of an array are stored in memory 7219contiguously by column, and the original loop iterates over rows, 7220potentially creating at each access a cache miss. This optimization 7221applies to all the languages supported by GCC and is not limited to 7222Fortran. To use this code transformation, GCC has to be configured 7223with @option{--with-ppl} and @option{--with-cloog} to enable the 7224Graphite loop transformation infrastructure. 7225 7226@item -floop-strip-mine 7227@opindex floop-strip-mine 7228Perform loop strip mining transformations on loops. Strip mining 7229splits a loop into two nested loops. The outer loop has strides 7230equal to the strip size and the inner loop has strides of the 7231original loop within a strip. The strip length can be changed 7232using the @option{loop-block-tile-size} parameter. For example, 7233given a loop like: 7234@smallexample 7235DO I = 1, N 7236 A(I) = A(I) + C 7237ENDDO 7238@end smallexample 7239loop strip mining will transform the loop as if the user had written: 7240@smallexample 7241DO II = 1, N, 51 7242 DO I = II, min (II + 50, N) 7243 A(I) = A(I) + C 7244 ENDDO 7245ENDDO 7246@end smallexample 7247This optimization applies to all the languages supported by GCC and is 7248not limited to Fortran. To use this code transformation, GCC has to 7249be configured with @option{--with-ppl} and @option{--with-cloog} to 7250enable the Graphite loop transformation infrastructure. 7251 7252@item -floop-block 7253@opindex floop-block 7254Perform loop blocking transformations on loops. Blocking strip mines 7255each loop in the loop nest such that the memory accesses of the 7256element loops fit inside caches. The strip length can be changed 7257using the @option{loop-block-tile-size} parameter. For example, given 7258a loop like: 7259@smallexample 7260DO I = 1, N 7261 DO J = 1, M 7262 A(J, I) = B(I) + C(J) 7263 ENDDO 7264ENDDO 7265@end smallexample 7266loop blocking will transform the loop as if the user had written: 7267@smallexample 7268DO II = 1, N, 51 7269 DO JJ = 1, M, 51 7270 DO I = II, min (II + 50, N) 7271 DO J = JJ, min (JJ + 50, M) 7272 A(J, I) = B(I) + C(J) 7273 ENDDO 7274 ENDDO 7275 ENDDO 7276ENDDO 7277@end smallexample 7278which can be beneficial when @code{M} is larger than the caches, 7279because the innermost loop will iterate over a smaller amount of data 7280which can be kept in the caches. This optimization applies to all the 7281languages supported by GCC and is not limited to Fortran. To use this 7282code transformation, GCC has to be configured with @option{--with-ppl} 7283and @option{--with-cloog} to enable the Graphite loop transformation 7284infrastructure. 7285 7286@item -fgraphite-identity 7287@opindex fgraphite-identity 7288Enable the identity transformation for graphite. For every SCoP we generate 7289the polyhedral representation and transform it back to gimple. Using 7290@option{-fgraphite-identity} we can check the costs or benefits of the 7291GIMPLE -> GRAPHITE -> GIMPLE transformation. Some minimal optimizations 7292are also performed by the code generator CLooG, like index splitting and 7293dead code elimination in loops. 7294 7295@item -floop-flatten 7296@opindex floop-flatten 7297Removes the loop nesting structure: transforms the loop nest into a 7298single loop. This transformation can be useful as an enablement 7299transform for vectorization and parallelization. This feature 7300is experimental. 7301To use this code transformation, GCC has to be configured 7302with @option{--with-ppl} and @option{--with-cloog} to enable the 7303Graphite loop transformation infrastructure. 7304 7305@item -floop-parallelize-all 7306@opindex floop-parallelize-all 7307Use the Graphite data dependence analysis to identify loops that can 7308be parallelized. Parallelize all the loops that can be analyzed to 7309not contain loop carried dependences without checking that it is 7310profitable to parallelize the loops. 7311 7312@item -fcheck-data-deps 7313@opindex fcheck-data-deps 7314Compare the results of several data dependence analyzers. This option 7315is used for debugging the data dependence analyzers. 7316 7317@item -ftree-loop-if-convert 7318Attempt to transform conditional jumps in the innermost loops to 7319branch-less equivalents. The intent is to remove control-flow from 7320the innermost loops in order to improve the ability of the 7321vectorization pass to handle these loops. This is enabled by default 7322if vectorization is enabled. 7323 7324@item -ftree-loop-if-convert-stores 7325Attempt to also if-convert conditional jumps containing memory writes. 7326This transformation can be unsafe for multi-threaded programs as it 7327transforms conditional memory writes into unconditional memory writes. 7328For example, 7329@smallexample 7330for (i = 0; i < N; i++) 7331 if (cond) 7332 A[i] = expr; 7333@end smallexample 7334would be transformed to 7335@smallexample 7336for (i = 0; i < N; i++) 7337 A[i] = cond ? expr : A[i]; 7338@end smallexample 7339potentially producing data races. 7340 7341@item -ftree-loop-distribution 7342Perform loop distribution. This flag can improve cache performance on 7343big loop bodies and allow further loop optimizations, like 7344parallelization or vectorization, to take place. For example, the loop 7345@smallexample 7346DO I = 1, N 7347 A(I) = B(I) + C 7348 D(I) = E(I) * F 7349ENDDO 7350@end smallexample 7351is transformed to 7352@smallexample 7353DO I = 1, N 7354 A(I) = B(I) + C 7355ENDDO 7356DO I = 1, N 7357 D(I) = E(I) * F 7358ENDDO 7359@end smallexample 7360 7361@item -ftree-loop-distribute-patterns 7362Perform loop distribution of patterns that can be code generated with 7363calls to a library. This flag is enabled by default at @option{-O3}. 7364 7365This pass distributes the initialization loops and generates a call to 7366memset zero. For example, the loop 7367@smallexample 7368DO I = 1, N 7369 A(I) = 0 7370 B(I) = A(I) + I 7371ENDDO 7372@end smallexample 7373is transformed to 7374@smallexample 7375DO I = 1, N 7376 A(I) = 0 7377ENDDO 7378DO I = 1, N 7379 B(I) = A(I) + I 7380ENDDO 7381@end smallexample 7382and the initialization loop is transformed into a call to memset zero. 7383 7384@item -ftree-loop-im 7385@opindex ftree-loop-im 7386Perform loop invariant motion on trees. This pass moves only invariants that 7387would be hard to handle at RTL level (function calls, operations that expand to 7388nontrivial sequences of insns). With @option{-funswitch-loops} it also moves 7389operands of conditions that are invariant out of the loop, so that we can use 7390just trivial invariantness analysis in loop unswitching. The pass also includes 7391store motion. 7392 7393@item -ftree-loop-ivcanon 7394@opindex ftree-loop-ivcanon 7395Create a canonical counter for number of iterations in loops for which 7396determining number of iterations requires complicated analysis. Later 7397optimizations then may determine the number easily. Useful especially 7398in connection with unrolling. 7399 7400@item -fivopts 7401@opindex fivopts 7402Perform induction variable optimizations (strength reduction, induction 7403variable merging and induction variable elimination) on trees. 7404 7405@item -ftree-parallelize-loops=n 7406@opindex ftree-parallelize-loops 7407Parallelize loops, i.e., split their iteration space to run in n threads. 7408This is only possible for loops whose iterations are independent 7409and can be arbitrarily reordered. The optimization is only 7410profitable on multiprocessor machines, for loops that are CPU-intensive, 7411rather than constrained e.g.@: by memory bandwidth. This option 7412implies @option{-pthread}, and thus is only supported on targets 7413that have support for @option{-pthread}. 7414 7415@item -ftree-pta 7416@opindex ftree-pta 7417Perform function-local points-to analysis on trees. This flag is 7418enabled by default at @option{-O} and higher. 7419 7420@item -ftree-sra 7421@opindex ftree-sra 7422Perform scalar replacement of aggregates. This pass replaces structure 7423references with scalars to prevent committing structures to memory too 7424early. This flag is enabled by default at @option{-O} and higher. 7425 7426@item -ftree-copyrename 7427@opindex ftree-copyrename 7428Perform copy renaming on trees. This pass attempts to rename compiler 7429temporaries to other variables at copy locations, usually resulting in 7430variable names which more closely resemble the original variables. This flag 7431is enabled by default at @option{-O} and higher. 7432 7433@item -ftree-ter 7434@opindex ftree-ter 7435Perform temporary expression replacement during the SSA->normal phase. Single 7436use/single def temporaries are replaced at their use location with their 7437defining expression. This results in non-GIMPLE code, but gives the expanders 7438much more complex trees to work on resulting in better RTL generation. This is 7439enabled by default at @option{-O} and higher. 7440 7441@item -ftree-vectorize 7442@opindex ftree-vectorize 7443Perform loop vectorization on trees. This flag is enabled by default at 7444@option{-O3}. 7445 7446@item -ftree-slp-vectorize 7447@opindex ftree-slp-vectorize 7448Perform basic block vectorization on trees. This flag is enabled by default at 7449@option{-O3} and when @option{-ftree-vectorize} is enabled. 7450 7451@item -ftree-vect-loop-version 7452@opindex ftree-vect-loop-version 7453Perform loop versioning when doing loop vectorization on trees. When a loop 7454appears to be vectorizable except that data alignment or data dependence cannot 7455be determined at compile time, then vectorized and non-vectorized versions of 7456the loop are generated along with run-time checks for alignment or dependence 7457to control which version is executed. This option is enabled by default 7458except at level @option{-Os} where it is disabled. 7459 7460@item -fvect-cost-model 7461@opindex fvect-cost-model 7462Enable cost model for vectorization. 7463 7464@item -ftree-vrp 7465@opindex ftree-vrp 7466Perform Value Range Propagation on trees. This is similar to the 7467constant propagation pass, but instead of values, ranges of values are 7468propagated. This allows the optimizers to remove unnecessary range 7469checks like array bound checks and null pointer checks. This is 7470enabled by default at @option{-O2} and higher. Null pointer check 7471elimination is only done if @option{-fdelete-null-pointer-checks} is 7472enabled. 7473 7474@item -ftracer 7475@opindex ftracer 7476Perform tail duplication to enlarge superblock size. This transformation 7477simplifies the control flow of the function allowing other optimizations to do 7478better job. 7479 7480@item -funroll-loops 7481@opindex funroll-loops 7482Unroll loops whose number of iterations can be determined at compile 7483time or upon entry to the loop. @option{-funroll-loops} implies 7484@option{-frerun-cse-after-loop}. This option makes code larger, 7485and may or may not make it run faster. 7486 7487@item -funroll-all-loops 7488@opindex funroll-all-loops 7489Unroll all loops, even if their number of iterations is uncertain when 7490the loop is entered. This usually makes programs run more slowly. 7491@option{-funroll-all-loops} implies the same options as 7492@option{-funroll-loops}, 7493 7494@item -fsplit-ivs-in-unroller 7495@opindex fsplit-ivs-in-unroller 7496Enables expressing of values of induction variables in later iterations 7497of the unrolled loop using the value in the first iteration. This breaks 7498long dependency chains, thus improving efficiency of the scheduling passes. 7499 7500Combination of @option{-fweb} and CSE is often sufficient to obtain the 7501same effect. However in cases the loop body is more complicated than 7502a single basic block, this is not reliable. It also does not work at all 7503on some of the architectures due to restrictions in the CSE pass. 7504 7505This optimization is enabled by default. 7506 7507@item -fvariable-expansion-in-unroller 7508@opindex fvariable-expansion-in-unroller 7509With this option, the compiler will create multiple copies of some 7510local variables when unrolling a loop which can result in superior code. 7511 7512@item -fpartial-inlining 7513@opindex fpartial-inlining 7514Inline parts of functions. This option has any effect only 7515when inlining itself is turned on by the @option{-finline-functions} 7516or @option{-finline-small-functions} options. 7517 7518Enabled at level @option{-O2}. 7519 7520@item -fpredictive-commoning 7521@opindex fpredictive-commoning 7522Perform predictive commoning optimization, i.e., reusing computations 7523(especially memory loads and stores) performed in previous 7524iterations of loops. 7525 7526This option is enabled at level @option{-O3}. 7527 7528@item -fprefetch-loop-arrays 7529@opindex fprefetch-loop-arrays 7530If supported by the target machine, generate instructions to prefetch 7531memory to improve the performance of loops that access large arrays. 7532 7533This option may generate better or worse code; results are highly 7534dependent on the structure of loops within the source code. 7535 7536Disabled at level @option{-Os}. 7537 7538@item -fno-peephole 7539@itemx -fno-peephole2 7540@opindex fno-peephole 7541@opindex fno-peephole2 7542Disable any machine-specific peephole optimizations. The difference 7543between @option{-fno-peephole} and @option{-fno-peephole2} is in how they 7544are implemented in the compiler; some targets use one, some use the 7545other, a few use both. 7546 7547@option{-fpeephole} is enabled by default. 7548@option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 7549 7550@item -fno-guess-branch-probability 7551@opindex fno-guess-branch-probability 7552Do not guess branch probabilities using heuristics. 7553 7554GCC will use heuristics to guess branch probabilities if they are 7555not provided by profiling feedback (@option{-fprofile-arcs}). These 7556heuristics are based on the control flow graph. If some branch probabilities 7557are specified by @samp{__builtin_expect}, then the heuristics will be 7558used to guess branch probabilities for the rest of the control flow graph, 7559taking the @samp{__builtin_expect} info into account. The interactions 7560between the heuristics and @samp{__builtin_expect} can be complex, and in 7561some cases, it may be useful to disable the heuristics so that the effects 7562of @samp{__builtin_expect} are easier to understand. 7563 7564The default is @option{-fguess-branch-probability} at levels 7565@option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 7566 7567@item -freorder-blocks 7568@opindex freorder-blocks 7569Reorder basic blocks in the compiled function in order to reduce number of 7570taken branches and improve code locality. 7571 7572Enabled at levels @option{-O2}, @option{-O3}. 7573 7574@item -freorder-blocks-and-partition 7575@opindex freorder-blocks-and-partition 7576In addition to reordering basic blocks in the compiled function, in order 7577to reduce number of taken branches, partitions hot and cold basic blocks 7578into separate sections of the assembly and .o files, to improve 7579paging and cache locality performance. 7580 7581This optimization is automatically turned off in the presence of 7582exception handling, for linkonce sections, for functions with a user-defined 7583section attribute and on any architecture that does not support named 7584sections. 7585 7586@item -freorder-functions 7587@opindex freorder-functions 7588Reorder functions in the object file in order to 7589improve code locality. This is implemented by using special 7590subsections @code{.text.hot} for most frequently executed functions and 7591@code{.text.unlikely} for unlikely executed functions. Reordering is done by 7592the linker so object file format must support named sections and linker must 7593place them in a reasonable way. 7594 7595Also profile feedback must be available in to make this option effective. See 7596@option{-fprofile-arcs} for details. 7597 7598Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 7599 7600@item -fstrict-aliasing 7601@opindex fstrict-aliasing 7602Allow the compiler to assume the strictest aliasing rules applicable to 7603the language being compiled. For C (and C++), this activates 7604optimizations based on the type of expressions. In particular, an 7605object of one type is assumed never to reside at the same address as an 7606object of a different type, unless the types are almost the same. For 7607example, an @code{unsigned int} can alias an @code{int}, but not a 7608@code{void*} or a @code{double}. A character type may alias any other 7609type. 7610 7611@anchor{Type-punning}Pay special attention to code like this: 7612@smallexample 7613union a_union @{ 7614 int i; 7615 double d; 7616@}; 7617 7618int f() @{ 7619 union a_union t; 7620 t.d = 3.0; 7621 return t.i; 7622@} 7623@end smallexample 7624The practice of reading from a different union member than the one most 7625recently written to (called ``type-punning'') is common. Even with 7626@option{-fstrict-aliasing}, type-punning is allowed, provided the memory 7627is accessed through the union type. So, the code above will work as 7628expected. @xref{Structures unions enumerations and bit-fields 7629implementation}. However, this code might not: 7630@smallexample 7631int f() @{ 7632 union a_union t; 7633 int* ip; 7634 t.d = 3.0; 7635 ip = &t.i; 7636 return *ip; 7637@} 7638@end smallexample 7639 7640Similarly, access by taking the address, casting the resulting pointer 7641and dereferencing the result has undefined behavior, even if the cast 7642uses a union type, e.g.: 7643@smallexample 7644int f() @{ 7645 double d = 3.0; 7646 return ((union a_union *) &d)->i; 7647@} 7648@end smallexample 7649 7650The @option{-fstrict-aliasing} option is enabled at levels 7651@option{-O2}, @option{-O3}, @option{-Os}. 7652 7653@item -fstrict-overflow 7654@opindex fstrict-overflow 7655Allow the compiler to assume strict signed overflow rules, depending 7656on the language being compiled. For C (and C++) this means that 7657overflow when doing arithmetic with signed numbers is undefined, which 7658means that the compiler may assume that it will not happen. This 7659permits various optimizations. For example, the compiler will assume 7660that an expression like @code{i + 10 > i} will always be true for 7661signed @code{i}. This assumption is only valid if signed overflow is 7662undefined, as the expression is false if @code{i + 10} overflows when 7663using twos complement arithmetic. When this option is in effect any 7664attempt to determine whether an operation on signed numbers will 7665overflow must be written carefully to not actually involve overflow. 7666 7667This option also allows the compiler to assume strict pointer 7668semantics: given a pointer to an object, if adding an offset to that 7669pointer does not produce a pointer to the same object, the addition is 7670undefined. This permits the compiler to conclude that @code{p + u > 7671p} is always true for a pointer @code{p} and unsigned integer 7672@code{u}. This assumption is only valid because pointer wraparound is 7673undefined, as the expression is false if @code{p + u} overflows using 7674twos complement arithmetic. 7675 7676See also the @option{-fwrapv} option. Using @option{-fwrapv} means 7677that integer signed overflow is fully defined: it wraps. When 7678@option{-fwrapv} is used, there is no difference between 7679@option{-fstrict-overflow} and @option{-fno-strict-overflow} for 7680integers. With @option{-fwrapv} certain types of overflow are 7681permitted. For example, if the compiler gets an overflow when doing 7682arithmetic on constants, the overflowed value can still be used with 7683@option{-fwrapv}, but not otherwise. 7684 7685The @option{-fstrict-overflow} option is enabled at levels 7686@option{-O2}, @option{-O3}, @option{-Os}. 7687 7688@item -falign-functions 7689@itemx -falign-functions=@var{n} 7690@opindex falign-functions 7691Align the start of functions to the next power-of-two greater than 7692@var{n}, skipping up to @var{n} bytes. For instance, 7693@option{-falign-functions=32} aligns functions to the next 32-byte 7694boundary, but @option{-falign-functions=24} would align to the next 769532-byte boundary only if this can be done by skipping 23 bytes or less. 7696 7697@option{-fno-align-functions} and @option{-falign-functions=1} are 7698equivalent and mean that functions will not be aligned. 7699 7700Some assemblers only support this flag when @var{n} is a power of two; 7701in that case, it is rounded up. 7702 7703If @var{n} is not specified or is zero, use a machine-dependent default. 7704 7705Enabled at levels @option{-O2}, @option{-O3}. 7706 7707@item -falign-labels 7708@itemx -falign-labels=@var{n} 7709@opindex falign-labels 7710Align all branch targets to a power-of-two boundary, skipping up to 7711@var{n} bytes like @option{-falign-functions}. This option can easily 7712make code slower, because it must insert dummy operations for when the 7713branch target is reached in the usual flow of the code. 7714 7715@option{-fno-align-labels} and @option{-falign-labels=1} are 7716equivalent and mean that labels will not be aligned. 7717 7718If @option{-falign-loops} or @option{-falign-jumps} are applicable and 7719are greater than this value, then their values are used instead. 7720 7721If @var{n} is not specified or is zero, use a machine-dependent default 7722which is very likely to be @samp{1}, meaning no alignment. 7723 7724Enabled at levels @option{-O2}, @option{-O3}. 7725 7726@item -falign-loops 7727@itemx -falign-loops=@var{n} 7728@opindex falign-loops 7729Align loops to a power-of-two boundary, skipping up to @var{n} bytes 7730like @option{-falign-functions}. The hope is that the loop will be 7731executed many times, which will make up for any execution of the dummy 7732operations. 7733 7734@option{-fno-align-loops} and @option{-falign-loops=1} are 7735equivalent and mean that loops will not be aligned. 7736 7737If @var{n} is not specified or is zero, use a machine-dependent default. 7738 7739Enabled at levels @option{-O2}, @option{-O3}. 7740 7741@item -falign-jumps 7742@itemx -falign-jumps=@var{n} 7743@opindex falign-jumps 7744Align branch targets to a power-of-two boundary, for branch targets 7745where the targets can only be reached by jumping, skipping up to @var{n} 7746bytes like @option{-falign-functions}. In this case, no dummy operations 7747need be executed. 7748 7749@option{-fno-align-jumps} and @option{-falign-jumps=1} are 7750equivalent and mean that loops will not be aligned. 7751 7752If @var{n} is not specified or is zero, use a machine-dependent default. 7753 7754Enabled at levels @option{-O2}, @option{-O3}. 7755 7756@item -funit-at-a-time 7757@opindex funit-at-a-time 7758This option is left for compatibility reasons. @option{-funit-at-a-time} 7759has no effect, while @option{-fno-unit-at-a-time} implies 7760@option{-fno-toplevel-reorder} and @option{-fno-section-anchors}. 7761 7762Enabled by default. 7763 7764@item -fno-toplevel-reorder 7765@opindex fno-toplevel-reorder 7766Do not reorder top-level functions, variables, and @code{asm} 7767statements. Output them in the same order that they appear in the 7768input file. When this option is used, unreferenced static variables 7769will not be removed. This option is intended to support existing code 7770that relies on a particular ordering. For new code, it is better to 7771use attributes. 7772 7773Enabled at level @option{-O0}. When disabled explicitly, it also implies 7774@option{-fno-section-anchors}, which is otherwise enabled at @option{-O0} on some 7775targets. 7776 7777@item -fweb 7778@opindex fweb 7779Constructs webs as commonly used for register allocation purposes and assign 7780each web individual pseudo register. This allows the register allocation pass 7781to operate on pseudos directly, but also strengthens several other optimization 7782passes, such as CSE, loop optimizer and trivial dead code remover. It can, 7783however, make debugging impossible, since variables will no longer stay in a 7784``home register''. 7785 7786Enabled by default with @option{-funroll-loops}. 7787 7788@item -fwhole-program 7789@opindex fwhole-program 7790Assume that the current compilation unit represents the whole program being 7791compiled. All public functions and variables with the exception of @code{main} 7792and those merged by attribute @code{externally_visible} become static functions 7793and in effect are optimized more aggressively by interprocedural optimizers. If @command{gold} is used as the linker plugin, @code{externally_visible} attributes are automatically added to functions (not variable yet due to a current @command{gold} issue) that are accessed outside of LTO objects according to resolution file produced by @command{gold}. For other linkers that cannot generate resolution file, explicit @code{externally_visible} attributes are still necessary. 7794While this option is equivalent to proper use of the @code{static} keyword for 7795programs consisting of a single file, in combination with option 7796@option{-flto} this flag can be used to 7797compile many smaller scale programs since the functions and variables become 7798local for the whole combined compilation unit, not for the single source file 7799itself. 7800 7801This option implies @option{-fwhole-file} for Fortran programs. 7802 7803@item -flto[=@var{n}] 7804@opindex flto 7805This option runs the standard link-time optimizer. When invoked 7806with source code, it generates GIMPLE (one of GCC's internal 7807representations) and writes it to special ELF sections in the object 7808file. When the object files are linked together, all the function 7809bodies are read from these ELF sections and instantiated as if they 7810had been part of the same translation unit. 7811 7812To use the link-time optimizer, @option{-flto} needs to be specified at 7813compile time and during the final link. For example: 7814 7815@smallexample 7816gcc -c -O2 -flto foo.c 7817gcc -c -O2 -flto bar.c 7818gcc -o myprog -flto -O2 foo.o bar.o 7819@end smallexample 7820 7821The first two invocations to GCC save a bytecode representation 7822of GIMPLE into special ELF sections inside @file{foo.o} and 7823@file{bar.o}. The final invocation reads the GIMPLE bytecode from 7824@file{foo.o} and @file{bar.o}, merges the two files into a single 7825internal image, and compiles the result as usual. Since both 7826@file{foo.o} and @file{bar.o} are merged into a single image, this 7827causes all the interprocedural analyses and optimizations in GCC to 7828work across the two files as if they were a single one. This means, 7829for example, that the inliner is able to inline functions in 7830@file{bar.o} into functions in @file{foo.o} and vice-versa. 7831 7832Another (simpler) way to enable link-time optimization is: 7833 7834@smallexample 7835gcc -o myprog -flto -O2 foo.c bar.c 7836@end smallexample 7837 7838The above generates bytecode for @file{foo.c} and @file{bar.c}, 7839merges them together into a single GIMPLE representation and optimizes 7840them as usual to produce @file{myprog}. 7841 7842The only important thing to keep in mind is that to enable link-time 7843optimizations the @option{-flto} flag needs to be passed to both the 7844compile and the link commands. 7845 7846To make whole program optimization effective, it is necessary to make 7847certain whole program assumptions. The compiler needs to know 7848what functions and variables can be accessed by libraries and runtime 7849outside of the link-time optimized unit. When supported by the linker, 7850the linker plugin (see @option{-fuse-linker-plugin}) passes information 7851to the compiler about used and externally visible symbols. When 7852the linker plugin is not available, @option{-fwhole-program} should be 7853used to allow the compiler to make these assumptions, which leads 7854to more aggressive optimization decisions. 7855 7856Note that when a file is compiled with @option{-flto}, the generated 7857object file is larger than a regular object file because it 7858contains GIMPLE bytecodes and the usual final code. This means that 7859object files with LTO information can be linked as normal object 7860files; if @option{-flto} is not passed to the linker, no 7861interprocedural optimizations are applied. 7862 7863Additionally, the optimization flags used to compile individual files 7864are not necessarily related to those used at link time. For instance, 7865 7866@smallexample 7867gcc -c -O0 -flto foo.c 7868gcc -c -O0 -flto bar.c 7869gcc -o myprog -flto -O3 foo.o bar.o 7870@end smallexample 7871 7872This produces individual object files with unoptimized assembler 7873code, but the resulting binary @file{myprog} is optimized at 7874@option{-O3}. If, instead, the final binary is generated without 7875@option{-flto}, then @file{myprog} is not optimized. 7876 7877When producing the final binary with @option{-flto}, GCC only 7878applies link-time optimizations to those files that contain bytecode. 7879Therefore, you can mix and match object files and libraries with 7880GIMPLE bytecodes and final object code. GCC automatically selects 7881which files to optimize in LTO mode and which files to link without 7882further processing. 7883 7884There are some code generation flags preserved by GCC when 7885generating bytecodes, as they need to be used during the final link 7886stage. Currently, the following options are saved into the GIMPLE 7887bytecode files: @option{-fPIC}, @option{-fcommon} and all the 7888@option{-m} target flags. 7889 7890At link time, these options are read in and reapplied. Note that the 7891current implementation makes no attempt to recognize conflicting 7892values for these options. If different files have conflicting option 7893values (e.g., one file is compiled with @option{-fPIC} and another 7894isn't), the compiler simply uses the last value read from the 7895bytecode files. It is recommended, then, that you compile all the files 7896participating in the same link with the same options. 7897 7898If LTO encounters objects with C linkage declared with incompatible 7899types in separate translation units to be linked together (undefined 7900behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be 7901issued. The behavior is still undefined at run time. 7902 7903Another feature of LTO is that it is possible to apply interprocedural 7904optimizations on files written in different languages. This requires 7905support in the language front end. Currently, the C, C++ and 7906Fortran front ends are capable of emitting GIMPLE bytecodes, so 7907something like this should work: 7908 7909@smallexample 7910gcc -c -flto foo.c 7911g++ -c -flto bar.cc 7912gfortran -c -flto baz.f90 7913g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran 7914@end smallexample 7915 7916Notice that the final link is done with @command{g++} to get the C++ 7917runtime libraries and @option{-lgfortran} is added to get the Fortran 7918runtime libraries. In general, when mixing languages in LTO mode, you 7919should use the same link command options as when mixing languages in a 7920regular (non-LTO) compilation; all you need to add is @option{-flto} to 7921all the compile and link commands. 7922 7923If object files containing GIMPLE bytecode are stored in a library archive, say 7924@file{libfoo.a}, it is possible to extract and use them in an LTO link if you 7925are using a linker with plugin support. To enable this feature, use 7926the flag @option{-fuse-linker-plugin} at link time: 7927 7928@smallexample 7929gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo 7930@end smallexample 7931 7932With the linker plugin enabled, the linker extracts the needed 7933GIMPLE files from @file{libfoo.a} and passes them on to the running GCC 7934to make them part of the aggregated GIMPLE image to be optimized. 7935 7936If you are not using a linker with plugin support and/or do not 7937enable the linker plugin, then the objects inside @file{libfoo.a} 7938are extracted and linked as usual, but they do not participate 7939in the LTO optimization process. 7940 7941Link-time optimizations do not require the presence of the whole program to 7942operate. If the program does not require any symbols to be exported, it is 7943possible to combine @option{-flto} and @option{-fwhole-program} to allow 7944the interprocedural optimizers to use more aggressive assumptions which may 7945lead to improved optimization opportunities. 7946Use of @option{-fwhole-program} is not needed when linker plugin is 7947active (see @option{-fuse-linker-plugin}). 7948 7949The current implementation of LTO makes no 7950attempt to generate bytecode that is portable between different 7951types of hosts. The bytecode files are versioned and there is a 7952strict version check, so bytecode files generated in one version of 7953GCC will not work with an older/newer version of GCC. 7954 7955Link-time optimization does not work well with generation of debugging 7956information. Combining @option{-flto} with 7957@option{-g} is currently experimental and expected to produce wrong 7958results. 7959 7960If you specify the optional @var{n}, the optimization and code 7961generation done at link time is executed in parallel using @var{n} 7962parallel jobs by utilizing an installed @command{make} program. The 7963environment variable @env{MAKE} may be used to override the program 7964used. The default value for @var{n} is 1. 7965 7966You can also specify @option{-flto=jobserver} to use GNU make's 7967job server mode to determine the number of parallel jobs. This 7968is useful when the Makefile calling GCC is already executing in parallel. 7969You must prepend a @samp{+} to the command recipe in the parent Makefile 7970for this to work. This option likely only works if @env{MAKE} is 7971GNU make. 7972 7973This option is disabled by default 7974 7975@item -flto-partition=@var{alg} 7976@opindex flto-partition 7977Specify the partitioning algorithm used by the link-time optimizer. 7978The value is either @code{1to1} to specify a partitioning mirroring 7979the original source files or @code{balanced} to specify partitioning 7980into equally sized chunks (whenever possible). Specifying @code{none} 7981as an algorithm disables partitioning and streaming completely. The 7982default value is @code{balanced}. 7983 7984@item -flto-compression-level=@var{n} 7985This option specifies the level of compression used for intermediate 7986language written to LTO object files, and is only meaningful in 7987conjunction with LTO mode (@option{-flto}). Valid 7988values are 0 (no compression) to 9 (maximum compression). Values 7989outside this range are clamped to either 0 or 9. If the option is not 7990given, a default balanced compression setting is used. 7991 7992@item -flto-report 7993Prints a report with internal details on the workings of the link-time 7994optimizer. The contents of this report vary from version to version. 7995It is meant to be useful to GCC developers when processing object 7996files in LTO mode (via @option{-flto}). 7997 7998Disabled by default. 7999 8000@item -fuse-linker-plugin 8001Enables the use of a linker plugin during link-time optimization. This 8002option relies on plugin support in the linker, which is available in gold 8003or in GNU ld 2.21 or newer. 8004 8005This option enables the extraction of object files with GIMPLE bytecode out 8006of library archives. This improves the quality of optimization by exposing 8007more code to the link-time optimizer. This information specifies what 8008symbols can be accessed externally (by non-LTO object or during dynamic 8009linking). Resulting code quality improvements on binaries (and shared 8010libraries that use hidden visibility) are similar to @code{-fwhole-program}. 8011See @option{-flto} for a description of the effect of this flag and how to 8012use it. 8013 8014This option is enabled by default when LTO support in GCC is enabled 8015and GCC was configured for use with 8016a linker supporting plugins (GNU ld 2.21 or newer or gold). 8017 8018@item -ffat-lto-objects 8019@opindex ffat-lto-objects 8020Fat LTO objects are object files that contain both the intermediate language 8021and the object code. This makes them usable for both LTO linking and normal 8022linking. This option is effective only when compiling with @option{-flto} 8023and is ignored at link time. 8024 8025@option{-fno-fat-lto-objects} improves compilation time over plain LTO, but 8026requires the complete toolchain to be aware of LTO. It requires a linker with 8027linker plugin support for basic functionality. Additionally, nm, ar and ranlib 8028need to support linker plugins to allow a full-featured build environment 8029(capable of building static libraries etc). 8030 8031The default is @option{-ffat-lto-objects} but this default is intended to 8032change in future releases when linker plugin enabled environments become more 8033common. 8034 8035@item -fcompare-elim 8036@opindex fcompare-elim 8037After register allocation and post-register allocation instruction splitting, 8038identify arithmetic instructions that compute processor flags similar to a 8039comparison operation based on that arithmetic. If possible, eliminate the 8040explicit comparison operation. 8041 8042This pass only applies to certain targets that cannot explicitly represent 8043the comparison operation before register allocation is complete. 8044 8045Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 8046 8047@item -fcprop-registers 8048@opindex fcprop-registers 8049After register allocation and post-register allocation instruction splitting, 8050we perform a copy-propagation pass to try to reduce scheduling dependencies 8051and occasionally eliminate the copy. 8052 8053Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 8054 8055@item -fprofile-correction 8056@opindex fprofile-correction 8057Profiles collected using an instrumented binary for multi-threaded programs may 8058be inconsistent due to missed counter updates. When this option is specified, 8059GCC will use heuristics to correct or smooth out such inconsistencies. By 8060default, GCC will emit an error message when an inconsistent profile is detected. 8061 8062@item -fprofile-dir=@var{path} 8063@opindex fprofile-dir 8064 8065Set the directory to search for the profile data files in to @var{path}. 8066This option affects only the profile data generated by 8067@option{-fprofile-generate}, @option{-ftest-coverage}, @option{-fprofile-arcs} 8068and used by @option{-fprofile-use} and @option{-fbranch-probabilities} 8069and its related options. Both absolute and relative paths can be used. 8070By default, GCC will use the current directory as @var{path}, thus the 8071profile data file will appear in the same directory as the object file. 8072 8073@item -fprofile-generate 8074@itemx -fprofile-generate=@var{path} 8075@opindex fprofile-generate 8076 8077Enable options usually used for instrumenting application to produce 8078profile useful for later recompilation with profile feedback based 8079optimization. You must use @option{-fprofile-generate} both when 8080compiling and when linking your program. 8081 8082The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}. 8083 8084If @var{path} is specified, GCC will look at the @var{path} to find 8085the profile feedback data files. See @option{-fprofile-dir}. 8086 8087@item -fprofile-use 8088@itemx -fprofile-use=@var{path} 8089@opindex fprofile-use 8090Enable profile feedback directed optimizations, and optimizations 8091generally profitable only with profile feedback available. 8092 8093The following options are enabled: @code{-fbranch-probabilities}, @code{-fvpt}, 8094@code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer} 8095 8096By default, GCC emits an error message if the feedback profiles do not 8097match the source code. This error can be turned into a warning by using 8098@option{-Wcoverage-mismatch}. Note this may result in poorly optimized 8099code. 8100 8101If @var{path} is specified, GCC will look at the @var{path} to find 8102the profile feedback data files. See @option{-fprofile-dir}. 8103@end table 8104 8105The following options control compiler behavior regarding floating-point 8106arithmetic. These options trade off between speed and 8107correctness. All must be specifically enabled. 8108 8109@table @gcctabopt 8110@item -ffloat-store 8111@opindex ffloat-store 8112Do not store floating-point variables in registers, and inhibit other 8113options that might change whether a floating-point value is taken from a 8114register or memory. 8115 8116@cindex floating-point precision 8117This option prevents undesirable excess precision on machines such as 8118the 68000 where the floating registers (of the 68881) keep more 8119precision than a @code{double} is supposed to have. Similarly for the 8120x86 architecture. For most programs, the excess precision does only 8121good, but a few programs rely on the precise definition of IEEE floating 8122point. Use @option{-ffloat-store} for such programs, after modifying 8123them to store all pertinent intermediate computations into variables. 8124 8125@item -fexcess-precision=@var{style} 8126@opindex fexcess-precision 8127This option allows further control over excess precision on machines 8128where floating-point registers have more precision than the IEEE 8129@code{float} and @code{double} types and the processor does not 8130support operations rounding to those types. By default, 8131@option{-fexcess-precision=fast} is in effect; this means that 8132operations are carried out in the precision of the registers and that 8133it is unpredictable when rounding to the types specified in the source 8134code takes place. When compiling C, if 8135@option{-fexcess-precision=standard} is specified then excess 8136precision will follow the rules specified in ISO C99; in particular, 8137both casts and assignments cause values to be rounded to their 8138semantic types (whereas @option{-ffloat-store} only affects 8139assignments). This option is enabled by default for C if a strict 8140conformance option such as @option{-std=c99} is used. 8141 8142@opindex mfpmath 8143@option{-fexcess-precision=standard} is not implemented for languages 8144other than C, and has no effect if 8145@option{-funsafe-math-optimizations} or @option{-ffast-math} is 8146specified. On the x86, it also has no effect if @option{-mfpmath=sse} 8147or @option{-mfpmath=sse+387} is specified; in the former case, IEEE 8148semantics apply without excess precision, and in the latter, rounding 8149is unpredictable. 8150 8151@item -ffast-math 8152@opindex ffast-math 8153Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, 8154@option{-ffinite-math-only}, @option{-fno-rounding-math}, 8155@option{-fno-signaling-nans} and @option{-fcx-limited-range}. 8156 8157This option causes the preprocessor macro @code{__FAST_MATH__} to be defined. 8158 8159This option is not turned on by any @option{-O} option besides 8160@option{-Ofast} since it can result in incorrect output for programs 8161that depend on an exact implementation of IEEE or ISO rules/specifications 8162for math functions. It may, however, yield faster code for programs 8163that do not require the guarantees of these specifications. 8164 8165@item -fno-math-errno 8166@opindex fno-math-errno 8167Do not set ERRNO after calling math functions that are executed 8168with a single instruction, e.g., sqrt. A program that relies on 8169IEEE exceptions for math error handling may want to use this flag 8170for speed while maintaining IEEE arithmetic compatibility. 8171 8172This option is not turned on by any @option{-O} option since 8173it can result in incorrect output for programs that depend on 8174an exact implementation of IEEE or ISO rules/specifications for 8175math functions. It may, however, yield faster code for programs 8176that do not require the guarantees of these specifications. 8177 8178The default is @option{-fmath-errno}. 8179 8180On Darwin systems, the math library never sets @code{errno}. There is 8181therefore no reason for the compiler to consider the possibility that 8182it might, and @option{-fno-math-errno} is the default. 8183 8184@item -funsafe-math-optimizations 8185@opindex funsafe-math-optimizations 8186 8187Allow optimizations for floating-point arithmetic that (a) assume 8188that arguments and results are valid and (b) may violate IEEE or 8189ANSI standards. When used at link-time, it may include libraries 8190or startup files that change the default FPU control word or other 8191similar optimizations. 8192 8193This option is not turned on by any @option{-O} option since 8194it can result in incorrect output for programs that depend on 8195an exact implementation of IEEE or ISO rules/specifications for 8196math functions. It may, however, yield faster code for programs 8197that do not require the guarantees of these specifications. 8198Enables @option{-fno-signed-zeros}, @option{-fno-trapping-math}, 8199@option{-fassociative-math} and @option{-freciprocal-math}. 8200 8201The default is @option{-fno-unsafe-math-optimizations}. 8202 8203@item -fassociative-math 8204@opindex fassociative-math 8205 8206Allow re-association of operands in series of floating-point operations. 8207This violates the ISO C and C++ language standard by possibly changing 8208computation result. NOTE: re-ordering may change the sign of zero as 8209well as ignore NaNs and inhibit or create underflow or overflow (and 8210thus cannot be used on code that relies on rounding behavior like 8211@code{(x + 2**52) - 2**52}. May also reorder floating-point comparisons 8212and thus may not be used when ordered comparisons are required. 8213This option requires that both @option{-fno-signed-zeros} and 8214@option{-fno-trapping-math} be in effect. Moreover, it doesn't make 8215much sense with @option{-frounding-math}. For Fortran the option 8216is automatically enabled when both @option{-fno-signed-zeros} and 8217@option{-fno-trapping-math} are in effect. 8218 8219The default is @option{-fno-associative-math}. 8220 8221@item -freciprocal-math 8222@opindex freciprocal-math 8223 8224Allow the reciprocal of a value to be used instead of dividing by 8225the value if this enables optimizations. For example @code{x / y} 8226can be replaced with @code{x * (1/y)}, which is useful if @code{(1/y)} 8227is subject to common subexpression elimination. Note that this loses 8228precision and increases the number of flops operating on the value. 8229 8230The default is @option{-fno-reciprocal-math}. 8231 8232@item -ffinite-math-only 8233@opindex ffinite-math-only 8234Allow optimizations for floating-point arithmetic that assume 8235that arguments and results are not NaNs or +-Infs. 8236 8237This option is not turned on by any @option{-O} option since 8238it can result in incorrect output for programs that depend on 8239an exact implementation of IEEE or ISO rules/specifications for 8240math functions. It may, however, yield faster code for programs 8241that do not require the guarantees of these specifications. 8242 8243The default is @option{-fno-finite-math-only}. 8244 8245@item -fno-signed-zeros 8246@opindex fno-signed-zeros 8247Allow optimizations for floating-point arithmetic that ignore the 8248signedness of zero. IEEE arithmetic specifies the behavior of 8249distinct +0.0 and @minus{}0.0 values, which then prohibits simplification 8250of expressions such as x+0.0 or 0.0*x (even with @option{-ffinite-math-only}). 8251This option implies that the sign of a zero result isn't significant. 8252 8253The default is @option{-fsigned-zeros}. 8254 8255@item -fno-trapping-math 8256@opindex fno-trapping-math 8257Compile code assuming that floating-point operations cannot generate 8258user-visible traps. These traps include division by zero, overflow, 8259underflow, inexact result and invalid operation. This option requires 8260that @option{-fno-signaling-nans} be in effect. Setting this option may 8261allow faster code if one relies on ``non-stop'' IEEE arithmetic, for example. 8262 8263This option should never be turned on by any @option{-O} option since 8264it can result in incorrect output for programs that depend on 8265an exact implementation of IEEE or ISO rules/specifications for 8266math functions. 8267 8268The default is @option{-ftrapping-math}. 8269 8270@item -frounding-math 8271@opindex frounding-math 8272Disable transformations and optimizations that assume default floating-point 8273rounding behavior. This is round-to-zero for all floating point 8274to integer conversions, and round-to-nearest for all other arithmetic 8275truncations. This option should be specified for programs that change 8276the FP rounding mode dynamically, or that may be executed with a 8277non-default rounding mode. This option disables constant folding of 8278floating-point expressions at compile time (which may be affected by 8279rounding mode) and arithmetic transformations that are unsafe in the 8280presence of sign-dependent rounding modes. 8281 8282The default is @option{-fno-rounding-math}. 8283 8284This option is experimental and does not currently guarantee to 8285disable all GCC optimizations that are affected by rounding mode. 8286Future versions of GCC may provide finer control of this setting 8287using C99's @code{FENV_ACCESS} pragma. This command-line option 8288will be used to specify the default state for @code{FENV_ACCESS}. 8289 8290@item -fsignaling-nans 8291@opindex fsignaling-nans 8292Compile code assuming that IEEE signaling NaNs may generate user-visible 8293traps during floating-point operations. Setting this option disables 8294optimizations that may change the number of exceptions visible with 8295signaling NaNs. This option implies @option{-ftrapping-math}. 8296 8297This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to 8298be defined. 8299 8300The default is @option{-fno-signaling-nans}. 8301 8302This option is experimental and does not currently guarantee to 8303disable all GCC optimizations that affect signaling NaN behavior. 8304 8305@item -fsingle-precision-constant 8306@opindex fsingle-precision-constant 8307Treat floating-point constants as single precision instead of 8308implicitly converting them to double-precision constants. 8309 8310@item -fcx-limited-range 8311@opindex fcx-limited-range 8312When enabled, this option states that a range reduction step is not 8313needed when performing complex division. Also, there is no checking 8314whether the result of a complex multiplication or division is @code{NaN 8315+ I*NaN}, with an attempt to rescue the situation in that case. The 8316default is @option{-fno-cx-limited-range}, but is enabled by 8317@option{-ffast-math}. 8318 8319This option controls the default setting of the ISO C99 8320@code{CX_LIMITED_RANGE} pragma. Nevertheless, the option applies to 8321all languages. 8322 8323@item -fcx-fortran-rules 8324@opindex fcx-fortran-rules 8325Complex multiplication and division follow Fortran rules. Range 8326reduction is done as part of complex division, but there is no checking 8327whether the result of a complex multiplication or division is @code{NaN 8328+ I*NaN}, with an attempt to rescue the situation in that case. 8329 8330The default is @option{-fno-cx-fortran-rules}. 8331 8332@end table 8333 8334The following options control optimizations that may improve 8335performance, but are not enabled by any @option{-O} options. This 8336section includes experimental options that may produce broken code. 8337 8338@table @gcctabopt 8339@item -fbranch-probabilities 8340@opindex fbranch-probabilities 8341After running a program compiled with @option{-fprofile-arcs} 8342(@pxref{Debugging Options,, Options for Debugging Your Program or 8343@command{gcc}}), you can compile it a second time using 8344@option{-fbranch-probabilities}, to improve optimizations based on 8345the number of times each branch was taken. When the program 8346compiled with @option{-fprofile-arcs} exits it saves arc execution 8347counts to a file called @file{@var{sourcename}.gcda} for each source 8348file. The information in this data file is very dependent on the 8349structure of the generated code, so you must use the same source code 8350and the same optimization options for both compilations. 8351 8352With @option{-fbranch-probabilities}, GCC puts a 8353@samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}. 8354These can be used to improve optimization. Currently, they are only 8355used in one place: in @file{reorg.c}, instead of guessing which path a 8356branch is most likely to take, the @samp{REG_BR_PROB} values are used to 8357exactly determine which path is taken more often. 8358 8359@item -fprofile-values 8360@opindex fprofile-values 8361If combined with @option{-fprofile-arcs}, it adds code so that some 8362data about values of expressions in the program is gathered. 8363 8364With @option{-fbranch-probabilities}, it reads back the data gathered 8365from profiling values of expressions for usage in optimizations. 8366 8367Enabled with @option{-fprofile-generate} and @option{-fprofile-use}. 8368 8369@item -fvpt 8370@opindex fvpt 8371If combined with @option{-fprofile-arcs}, it instructs the compiler to add 8372a code to gather information about values of expressions. 8373 8374With @option{-fbranch-probabilities}, it reads back the data gathered 8375and actually performs the optimizations based on them. 8376Currently the optimizations include specialization of division operation 8377using the knowledge about the value of the denominator. 8378 8379@item -frename-registers 8380@opindex frename-registers 8381Attempt to avoid false dependencies in scheduled code by making use 8382of registers left over after register allocation. This optimization 8383will most benefit processors with lots of registers. Depending on the 8384debug information format adopted by the target, however, it can 8385make debugging impossible, since variables will no longer stay in 8386a ``home register''. 8387 8388Enabled by default with @option{-funroll-loops} and @option{-fpeel-loops}. 8389 8390@item -ftracer 8391@opindex ftracer 8392Perform tail duplication to enlarge superblock size. This transformation 8393simplifies the control flow of the function allowing other optimizations to do 8394better job. 8395 8396Enabled with @option{-fprofile-use}. 8397 8398@item -funroll-loops 8399@opindex funroll-loops 8400Unroll loops whose number of iterations can be determined at compile time or 8401upon entry to the loop. @option{-funroll-loops} implies 8402@option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}. 8403It also turns on complete loop peeling (i.e.@: complete removal of loops with 8404small constant number of iterations). This option makes code larger, and may 8405or may not make it run faster. 8406 8407Enabled with @option{-fprofile-use}. 8408 8409@item -funroll-all-loops 8410@opindex funroll-all-loops 8411Unroll all loops, even if their number of iterations is uncertain when 8412the loop is entered. This usually makes programs run more slowly. 8413@option{-funroll-all-loops} implies the same options as 8414@option{-funroll-loops}. 8415 8416@item -fpeel-loops 8417@opindex fpeel-loops 8418Peels loops for which there is enough information that they do not 8419roll much (from profile feedback). It also turns on complete loop peeling 8420(i.e.@: complete removal of loops with small constant number of iterations). 8421 8422Enabled with @option{-fprofile-use}. 8423 8424@item -fmove-loop-invariants 8425@opindex fmove-loop-invariants 8426Enables the loop invariant motion pass in the RTL loop optimizer. Enabled 8427at level @option{-O1} 8428 8429@item -funswitch-loops 8430@opindex funswitch-loops 8431Move branches with loop invariant conditions out of the loop, with duplicates 8432of the loop on both branches (modified according to result of the condition). 8433 8434@item -ffunction-sections 8435@itemx -fdata-sections 8436@opindex ffunction-sections 8437@opindex fdata-sections 8438Place each function or data item into its own section in the output 8439file if the target supports arbitrary sections. The name of the 8440function or the name of the data item determines the section's name 8441in the output file. 8442 8443Use these options on systems where the linker can perform optimizations 8444to improve locality of reference in the instruction space. Most systems 8445using the ELF object format and SPARC processors running Solaris 2 have 8446linkers with such optimizations. AIX may have these optimizations in 8447the future. 8448 8449Only use these options when there are significant benefits from doing 8450so. When you specify these options, the assembler and linker will 8451create larger object and executable files and will also be slower. 8452You will not be able to use @code{gprof} on all systems if you 8453specify this option and you may have problems with debugging if 8454you specify both this option and @option{-g}. 8455 8456@item -fbranch-target-load-optimize 8457@opindex fbranch-target-load-optimize 8458Perform branch target register load optimization before prologue / epilogue 8459threading. 8460The use of target registers can typically be exposed only during reload, 8461thus hoisting loads out of loops and doing inter-block scheduling needs 8462a separate optimization pass. 8463 8464@item -fbranch-target-load-optimize2 8465@opindex fbranch-target-load-optimize2 8466Perform branch target register load optimization after prologue / epilogue 8467threading. 8468 8469@item -fbtr-bb-exclusive 8470@opindex fbtr-bb-exclusive 8471When performing branch target register load optimization, don't reuse 8472branch target registers in within any basic block. 8473 8474@item -fstack-protector 8475@opindex fstack-protector 8476Emit extra code to check for buffer overflows, such as stack smashing 8477attacks. This is done by adding a guard variable to functions with 8478vulnerable objects. This includes functions that call alloca, and 8479functions with buffers larger than 8 bytes. The guards are initialized 8480when a function is entered and then checked when the function exits. 8481If a guard check fails, an error message is printed and the program exits. 8482 8483@item -fstack-protector-all 8484@opindex fstack-protector-all 8485Like @option{-fstack-protector} except that all functions are protected. 8486 8487@item -fsection-anchors 8488@opindex fsection-anchors 8489Try to reduce the number of symbolic address calculations by using 8490shared ``anchor'' symbols to address nearby objects. This transformation 8491can help to reduce the number of GOT entries and GOT accesses on some 8492targets. 8493 8494For example, the implementation of the following function @code{foo}: 8495 8496@smallexample 8497static int a, b, c; 8498int foo (void) @{ return a + b + c; @} 8499@end smallexample 8500 8501would usually calculate the addresses of all three variables, but if you 8502compile it with @option{-fsection-anchors}, it will access the variables 8503from a common anchor point instead. The effect is similar to the 8504following pseudocode (which isn't valid C): 8505 8506@smallexample 8507int foo (void) 8508@{ 8509 register int *xr = &x; 8510 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 8511@} 8512@end smallexample 8513 8514Not all targets support this option. 8515 8516@item --param @var{name}=@var{value} 8517@opindex param 8518In some places, GCC uses various constants to control the amount of 8519optimization that is done. For example, GCC will not inline functions 8520that contain more than a certain number of instructions. You can 8521control some of these constants on the command line using the 8522@option{--param} option. 8523 8524The names of specific parameters, and the meaning of the values, are 8525tied to the internals of the compiler, and are subject to change 8526without notice in future releases. 8527 8528In each case, the @var{value} is an integer. The allowable choices for 8529@var{name} are given in the following table: 8530 8531@table @gcctabopt 8532@item predictable-branch-outcome 8533When branch is predicted to be taken with probability lower than this threshold 8534(in percent), then it is considered well predictable. The default is 10. 8535 8536@item max-crossjump-edges 8537The maximum number of incoming edges to consider for crossjumping. 8538The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in 8539the number of edges incoming to each block. Increasing values mean 8540more aggressive optimization, making the compilation time increase with 8541probably small improvement in executable size. 8542 8543@item min-crossjump-insns 8544The minimum number of instructions that must be matched at the end 8545of two blocks before crossjumping will be performed on them. This 8546value is ignored in the case where all instructions in the block being 8547crossjumped from are matched. The default value is 5. 8548 8549@item max-grow-copy-bb-insns 8550The maximum code size expansion factor when copying basic blocks 8551instead of jumping. The expansion is relative to a jump instruction. 8552The default value is 8. 8553 8554@item max-goto-duplication-insns 8555The maximum number of instructions to duplicate to a block that jumps 8556to a computed goto. To avoid @math{O(N^2)} behavior in a number of 8557passes, GCC factors computed gotos early in the compilation process, 8558and unfactors them as late as possible. Only computed jumps at the 8559end of a basic blocks with no more than max-goto-duplication-insns are 8560unfactored. The default value is 8. 8561 8562@item max-delay-slot-insn-search 8563The maximum number of instructions to consider when looking for an 8564instruction to fill a delay slot. If more than this arbitrary number of 8565instructions is searched, the time savings from filling the delay slot 8566will be minimal so stop searching. Increasing values mean more 8567aggressive optimization, making the compilation time increase with probably 8568small improvement in execution time. 8569 8570@item max-delay-slot-live-search 8571When trying to fill delay slots, the maximum number of instructions to 8572consider when searching for a block with valid live register 8573information. Increasing this arbitrarily chosen value means more 8574aggressive optimization, increasing the compilation time. This parameter 8575should be removed when the delay slot code is rewritten to maintain the 8576control-flow graph. 8577 8578@item max-gcse-memory 8579The approximate maximum amount of memory that will be allocated in 8580order to perform the global common subexpression elimination 8581optimization. If more memory than specified is required, the 8582optimization will not be done. 8583 8584@item max-gcse-insertion-ratio 8585If the ratio of expression insertions to deletions is larger than this value 8586for any expression, then RTL PRE will insert or remove the expression and thus 8587leave partially redundant computations in the instruction stream. The default value is 20. 8588 8589@item max-pending-list-length 8590The maximum number of pending dependencies scheduling will allow 8591before flushing the current state and starting over. Large functions 8592with few branches or calls can create excessively large lists which 8593needlessly consume memory and resources. 8594 8595@item max-modulo-backtrack-attempts 8596The maximum number of backtrack attempts the scheduler should make 8597when modulo scheduling a loop. Larger values can exponentially increase 8598compilation time. 8599 8600@item max-inline-insns-single 8601Several parameters control the tree inliner used in gcc. 8602This number sets the maximum number of instructions (counted in GCC's 8603internal representation) in a single function that the tree inliner 8604will consider for inlining. This only affects functions declared 8605inline and methods implemented in a class declaration (C++). 8606The default value is 400. 8607 8608@item max-inline-insns-auto 8609When you use @option{-finline-functions} (included in @option{-O3}), 8610a lot of functions that would otherwise not be considered for inlining 8611by the compiler will be investigated. To those functions, a different 8612(more restrictive) limit compared to functions declared inline can 8613be applied. 8614The default value is 40. 8615 8616@item large-function-insns 8617The limit specifying really large functions. For functions larger than this 8618limit after inlining, inlining is constrained by 8619@option{--param large-function-growth}. This parameter is useful primarily 8620to avoid extreme compilation time caused by non-linear algorithms used by the 8621back end. 8622The default value is 2700. 8623 8624@item large-function-growth 8625Specifies maximal growth of large function caused by inlining in percents. 8626The default value is 100 which limits large function growth to 2.0 times 8627the original size. 8628 8629@item large-unit-insns 8630The limit specifying large translation unit. Growth caused by inlining of 8631units larger than this limit is limited by @option{--param inline-unit-growth}. 8632For small units this might be too tight (consider unit consisting of function A 8633that is inline and B that just calls A three time. If B is small relative to 8634A, the growth of unit is 300\% and yet such inlining is very sane. For very 8635large units consisting of small inlineable functions however the overall unit 8636growth limit is needed to avoid exponential explosion of code size. Thus for 8637smaller units, the size is increased to @option{--param large-unit-insns} 8638before applying @option{--param inline-unit-growth}. The default is 10000 8639 8640@item inline-unit-growth 8641Specifies maximal overall growth of the compilation unit caused by inlining. 8642The default value is 30 which limits unit growth to 1.3 times the original 8643size. 8644 8645@item ipcp-unit-growth 8646Specifies maximal overall growth of the compilation unit caused by 8647interprocedural constant propagation. The default value is 10 which limits 8648unit growth to 1.1 times the original size. 8649 8650@item large-stack-frame 8651The limit specifying large stack frames. While inlining the algorithm is trying 8652to not grow past this limit too much. Default value is 256 bytes. 8653 8654@item large-stack-frame-growth 8655Specifies maximal growth of large stack frames caused by inlining in percents. 8656The default value is 1000 which limits large stack frame growth to 11 times 8657the original size. 8658 8659@item max-inline-insns-recursive 8660@itemx max-inline-insns-recursive-auto 8661Specifies maximum number of instructions out-of-line copy of self recursive inline 8662function can grow into by performing recursive inlining. 8663 8664For functions declared inline @option{--param max-inline-insns-recursive} is 8665taken into account. For function not declared inline, recursive inlining 8666happens only when @option{-finline-functions} (included in @option{-O3}) is 8667enabled and @option{--param max-inline-insns-recursive-auto} is used. The 8668default value is 450. 8669 8670@item max-inline-recursive-depth 8671@itemx max-inline-recursive-depth-auto 8672Specifies maximum recursion depth used by the recursive inlining. 8673 8674For functions declared inline @option{--param max-inline-recursive-depth} is 8675taken into account. For function not declared inline, recursive inlining 8676happens only when @option{-finline-functions} (included in @option{-O3}) is 8677enabled and @option{--param max-inline-recursive-depth-auto} is used. The 8678default value is 8. 8679 8680@item min-inline-recursive-probability 8681Recursive inlining is profitable only for function having deep recursion 8682in average and can hurt for function having little recursion depth by 8683increasing the prologue size or complexity of function body to other 8684optimizers. 8685 8686When profile feedback is available (see @option{-fprofile-generate}) the actual 8687recursion depth can be guessed from probability that function will recurse via 8688given call expression. This parameter limits inlining only to call expression 8689whose probability exceeds given threshold (in percents). The default value is 869010. 8691 8692@item early-inlining-insns 8693Specify growth that early inliner can make. In effect it increases amount of 8694inlining for code having large abstraction penalty. The default value is 10. 8695 8696@item max-early-inliner-iterations 8697@itemx max-early-inliner-iterations 8698Limit of iterations of early inliner. This basically bounds number of nested 8699indirect calls early inliner can resolve. Deeper chains are still handled by 8700late inlining. 8701 8702@item comdat-sharing-probability 8703@itemx comdat-sharing-probability 8704Probability (in percent) that C++ inline function with comdat visibility 8705will be shared across multiple compilation units. The default value is 20. 8706 8707@item min-vect-loop-bound 8708The minimum number of iterations under which a loop will not get vectorized 8709when @option{-ftree-vectorize} is used. The number of iterations after 8710vectorization needs to be greater than the value specified by this option 8711to allow vectorization. The default value is 0. 8712 8713@item gcse-cost-distance-ratio 8714Scaling factor in calculation of maximum distance an expression 8715can be moved by GCSE optimizations. This is currently supported only in the 8716code hoisting pass. The bigger the ratio, the more aggressive code hoisting 8717will be with simple expressions, i.e., the expressions that have cost 8718less than @option{gcse-unrestricted-cost}. Specifying 0 will disable 8719hoisting of simple expressions. The default value is 10. 8720 8721@item gcse-unrestricted-cost 8722Cost, roughly measured as the cost of a single typical machine 8723instruction, at which GCSE optimizations will not constrain 8724the distance an expression can travel. This is currently 8725supported only in the code hoisting pass. The lesser the cost, 8726the more aggressive code hoisting will be. Specifying 0 will 8727allow all expressions to travel unrestricted distances. 8728The default value is 3. 8729 8730@item max-hoist-depth 8731The depth of search in the dominator tree for expressions to hoist. 8732This is used to avoid quadratic behavior in hoisting algorithm. 8733The value of 0 will avoid limiting the search, but may slow down compilation 8734of huge functions. The default value is 30. 8735 8736@item max-tail-merge-comparisons 8737The maximum amount of similar bbs to compare a bb with. This is used to 8738avoid quadratic behavior in tree tail merging. The default value is 10. 8739 8740@item max-tail-merge-iterations 8741The maximum amount of iterations of the pass over the function. This is used to 8742limit compilation time in tree tail merging. The default value is 2. 8743 8744@item max-unrolled-insns 8745The maximum number of instructions that a loop should have if that loop 8746is unrolled, and if the loop is unrolled, it determines how many times 8747the loop code is unrolled. 8748 8749@item max-average-unrolled-insns 8750The maximum number of instructions biased by probabilities of their execution 8751that a loop should have if that loop is unrolled, and if the loop is unrolled, 8752it determines how many times the loop code is unrolled. 8753 8754@item max-unroll-times 8755The maximum number of unrollings of a single loop. 8756 8757@item max-peeled-insns 8758The maximum number of instructions that a loop should have if that loop 8759is peeled, and if the loop is peeled, it determines how many times 8760the loop code is peeled. 8761 8762@item max-peel-times 8763The maximum number of peelings of a single loop. 8764 8765@item max-completely-peeled-insns 8766The maximum number of insns of a completely peeled loop. 8767 8768@item max-completely-peel-times 8769The maximum number of iterations of a loop to be suitable for complete peeling. 8770 8771@item max-completely-peel-loop-nest-depth 8772The maximum depth of a loop nest suitable for complete peeling. 8773 8774@item max-unswitch-insns 8775The maximum number of insns of an unswitched loop. 8776 8777@item max-unswitch-level 8778The maximum number of branches unswitched in a single loop. 8779 8780@item lim-expensive 8781The minimum cost of an expensive expression in the loop invariant motion. 8782 8783@item iv-consider-all-candidates-bound 8784Bound on number of candidates for induction variables below that 8785all candidates are considered for each use in induction variable 8786optimizations. Only the most relevant candidates are considered 8787if there are more candidates, to avoid quadratic time complexity. 8788 8789@item iv-max-considered-uses 8790The induction variable optimizations give up on loops that contain more 8791induction variable uses. 8792 8793@item iv-always-prune-cand-set-bound 8794If number of candidates in the set is smaller than this value, 8795we always try to remove unnecessary ivs from the set during its 8796optimization when a new iv is added to the set. 8797 8798@item scev-max-expr-size 8799Bound on size of expressions used in the scalar evolutions analyzer. 8800Large expressions slow the analyzer. 8801 8802@item scev-max-expr-complexity 8803Bound on the complexity of the expressions in the scalar evolutions analyzer. 8804Complex expressions slow the analyzer. 8805 8806@item omega-max-vars 8807The maximum number of variables in an Omega constraint system. 8808The default value is 128. 8809 8810@item omega-max-geqs 8811The maximum number of inequalities in an Omega constraint system. 8812The default value is 256. 8813 8814@item omega-max-eqs 8815The maximum number of equalities in an Omega constraint system. 8816The default value is 128. 8817 8818@item omega-max-wild-cards 8819The maximum number of wildcard variables that the Omega solver will 8820be able to insert. The default value is 18. 8821 8822@item omega-hash-table-size 8823The size of the hash table in the Omega solver. The default value is 8824550. 8825 8826@item omega-max-keys 8827The maximal number of keys used by the Omega solver. The default 8828value is 500. 8829 8830@item omega-eliminate-redundant-constraints 8831When set to 1, use expensive methods to eliminate all redundant 8832constraints. The default value is 0. 8833 8834@item vect-max-version-for-alignment-checks 8835The maximum number of run-time checks that can be performed when 8836doing loop versioning for alignment in the vectorizer. See option 8837ftree-vect-loop-version for more information. 8838 8839@item vect-max-version-for-alias-checks 8840The maximum number of run-time checks that can be performed when 8841doing loop versioning for alias in the vectorizer. See option 8842ftree-vect-loop-version for more information. 8843 8844@item max-iterations-to-track 8845 8846The maximum number of iterations of a loop the brute force algorithm 8847for analysis of # of iterations of the loop tries to evaluate. 8848 8849@item hot-bb-count-fraction 8850Select fraction of the maximal count of repetitions of basic block in program 8851given basic block needs to have to be considered hot. 8852 8853@item hot-bb-frequency-fraction 8854Select fraction of the entry block frequency of executions of basic block in 8855function given basic block needs to have to be considered hot. 8856 8857@item max-predicted-iterations 8858The maximum number of loop iterations we predict statically. This is useful 8859in cases where function contain single loop with known bound and other loop 8860with unknown. We predict the known number of iterations correctly, while 8861the unknown number of iterations average to roughly 10. This means that the 8862loop without bounds would appear artificially cold relative to the other one. 8863 8864@item align-threshold 8865 8866Select fraction of the maximal frequency of executions of basic block in 8867function given basic block will get aligned. 8868 8869@item align-loop-iterations 8870 8871A loop expected to iterate at lest the selected number of iterations will get 8872aligned. 8873 8874@item tracer-dynamic-coverage 8875@itemx tracer-dynamic-coverage-feedback 8876 8877This value is used to limit superblock formation once the given percentage of 8878executed instructions is covered. This limits unnecessary code size 8879expansion. 8880 8881The @option{tracer-dynamic-coverage-feedback} is used only when profile 8882feedback is available. The real profiles (as opposed to statically estimated 8883ones) are much less balanced allowing the threshold to be larger value. 8884 8885@item tracer-max-code-growth 8886Stop tail duplication once code growth has reached given percentage. This is 8887rather hokey argument, as most of the duplicates will be eliminated later in 8888cross jumping, so it may be set to much higher values than is the desired code 8889growth. 8890 8891@item tracer-min-branch-ratio 8892 8893Stop reverse growth when the reverse probability of best edge is less than this 8894threshold (in percent). 8895 8896@item tracer-min-branch-ratio 8897@itemx tracer-min-branch-ratio-feedback 8898 8899Stop forward growth if the best edge do have probability lower than this 8900threshold. 8901 8902Similarly to @option{tracer-dynamic-coverage} two values are present, one for 8903compilation for profile feedback and one for compilation without. The value 8904for compilation with profile feedback needs to be more conservative (higher) in 8905order to make tracer effective. 8906 8907@item max-cse-path-length 8908 8909Maximum number of basic blocks on path that cse considers. The default is 10. 8910 8911@item max-cse-insns 8912The maximum instructions CSE process before flushing. The default is 1000. 8913 8914@item ggc-min-expand 8915 8916GCC uses a garbage collector to manage its own memory allocation. This 8917parameter specifies the minimum percentage by which the garbage 8918collector's heap should be allowed to expand between collections. 8919Tuning this may improve compilation speed; it has no effect on code 8920generation. 8921 8922The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when 8923RAM >= 1GB@. If @code{getrlimit} is available, the notion of "RAM" is 8924the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}. If 8925GCC is not able to calculate RAM on a particular platform, the lower 8926bound of 30% is used. Setting this parameter and 8927@option{ggc-min-heapsize} to zero causes a full collection to occur at 8928every opportunity. This is extremely slow, but can be useful for 8929debugging. 8930 8931@item ggc-min-heapsize 8932 8933Minimum size of the garbage collector's heap before it begins bothering 8934to collect garbage. The first collection occurs after the heap expands 8935by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}. Again, 8936tuning this may improve compilation speed, and has no effect on code 8937generation. 8938 8939The default is the smaller of RAM/8, RLIMIT_RSS, or a limit that 8940tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but 8941with a lower bound of 4096 (four megabytes) and an upper bound of 8942131072 (128 megabytes). If GCC is not able to calculate RAM on a 8943particular platform, the lower bound is used. Setting this parameter 8944very large effectively disables garbage collection. Setting this 8945parameter and @option{ggc-min-expand} to zero causes a full collection 8946to occur at every opportunity. 8947 8948@item max-reload-search-insns 8949The maximum number of instruction reload should look backward for equivalent 8950register. Increasing values mean more aggressive optimization, making the 8951compilation time increase with probably slightly better performance. 8952The default value is 100. 8953 8954@item max-cselib-memory-locations 8955The maximum number of memory locations cselib should take into account. 8956Increasing values mean more aggressive optimization, making the compilation time 8957increase with probably slightly better performance. The default value is 500. 8958 8959@item reorder-blocks-duplicate 8960@itemx reorder-blocks-duplicate-feedback 8961 8962Used by basic block reordering pass to decide whether to use unconditional 8963branch or duplicate the code on its destination. Code is duplicated when its 8964estimated size is smaller than this value multiplied by the estimated size of 8965unconditional jump in the hot spots of the program. 8966 8967The @option{reorder-block-duplicate-feedback} is used only when profile 8968feedback is available and may be set to higher values than 8969@option{reorder-block-duplicate} since information about the hot spots is more 8970accurate. 8971 8972@item max-sched-ready-insns 8973The maximum number of instructions ready to be issued the scheduler should 8974consider at any given time during the first scheduling pass. Increasing 8975values mean more thorough searches, making the compilation time increase 8976with probably little benefit. The default value is 100. 8977 8978@item max-sched-region-blocks 8979The maximum number of blocks in a region to be considered for 8980interblock scheduling. The default value is 10. 8981 8982@item max-pipeline-region-blocks 8983The maximum number of blocks in a region to be considered for 8984pipelining in the selective scheduler. The default value is 15. 8985 8986@item max-sched-region-insns 8987The maximum number of insns in a region to be considered for 8988interblock scheduling. The default value is 100. 8989 8990@item max-pipeline-region-insns 8991The maximum number of insns in a region to be considered for 8992pipelining in the selective scheduler. The default value is 200. 8993 8994@item min-spec-prob 8995The minimum probability (in percents) of reaching a source block 8996for interblock speculative scheduling. The default value is 40. 8997 8998@item max-sched-extend-regions-iters 8999The maximum number of iterations through CFG to extend regions. 90000 - disable region extension, 9001N - do at most N iterations. 9002The default value is 0. 9003 9004@item max-sched-insn-conflict-delay 9005The maximum conflict delay for an insn to be considered for speculative motion. 9006The default value is 3. 9007 9008@item sched-spec-prob-cutoff 9009The minimal probability of speculation success (in percents), so that 9010speculative insn will be scheduled. 9011The default value is 40. 9012 9013@item sched-mem-true-dep-cost 9014Minimal distance (in CPU cycles) between store and load targeting same 9015memory locations. The default value is 1. 9016 9017@item selsched-max-lookahead 9018The maximum size of the lookahead window of selective scheduling. It is a 9019depth of search for available instructions. 9020The default value is 50. 9021 9022@item selsched-max-sched-times 9023The maximum number of times that an instruction will be scheduled during 9024selective scheduling. This is the limit on the number of iterations 9025through which the instruction may be pipelined. The default value is 2. 9026 9027@item selsched-max-insns-to-rename 9028The maximum number of best instructions in the ready list that are considered 9029for renaming in the selective scheduler. The default value is 2. 9030 9031@item sms-min-sc 9032The minimum value of stage count that swing modulo scheduler will 9033generate. The default value is 2. 9034 9035@item max-last-value-rtl 9036The maximum size measured as number of RTLs that can be recorded in an expression 9037in combiner for a pseudo register as last known value of that register. The default 9038is 10000. 9039 9040@item integer-share-limit 9041Small integer constants can use a shared data structure, reducing the 9042compiler's memory usage and increasing its speed. This sets the maximum 9043value of a shared integer constant. The default value is 256. 9044 9045@item min-virtual-mappings 9046Specifies the minimum number of virtual mappings in the incremental 9047SSA updater that should be registered to trigger the virtual mappings 9048heuristic defined by virtual-mappings-ratio. The default value is 9049100. 9050 9051@item virtual-mappings-ratio 9052If the number of virtual mappings is virtual-mappings-ratio bigger 9053than the number of virtual symbols to be updated, then the incremental 9054SSA updater switches to a full update for those symbols. The default 9055ratio is 3. 9056 9057@item ssp-buffer-size 9058The minimum size of buffers (i.e.@: arrays) that will receive stack smashing 9059protection when @option{-fstack-protection} is used. 9060 9061@item max-jump-thread-duplication-stmts 9062Maximum number of statements allowed in a block that needs to be 9063duplicated when threading jumps. 9064 9065@item max-fields-for-field-sensitive 9066Maximum number of fields in a structure we will treat in 9067a field sensitive manner during pointer analysis. The default is zero 9068for -O0, and -O1 and 100 for -Os, -O2, and -O3. 9069 9070@item prefetch-latency 9071Estimate on average number of instructions that are executed before 9072prefetch finishes. The distance we prefetch ahead is proportional 9073to this constant. Increasing this number may also lead to less 9074streams being prefetched (see @option{simultaneous-prefetches}). 9075 9076@item simultaneous-prefetches 9077Maximum number of prefetches that can run at the same time. 9078 9079@item l1-cache-line-size 9080The size of cache line in L1 cache, in bytes. 9081 9082@item l1-cache-size 9083The size of L1 cache, in kilobytes. 9084 9085@item l2-cache-size 9086The size of L2 cache, in kilobytes. 9087 9088@item min-insn-to-prefetch-ratio 9089The minimum ratio between the number of instructions and the 9090number of prefetches to enable prefetching in a loop. 9091 9092@item prefetch-min-insn-to-mem-ratio 9093The minimum ratio between the number of instructions and the 9094number of memory references to enable prefetching in a loop. 9095 9096@item use-canonical-types 9097Whether the compiler should use the ``canonical'' type system. By 9098default, this should always be 1, which uses a more efficient internal 9099mechanism for comparing types in C++ and Objective-C++. However, if 9100bugs in the canonical type system are causing compilation failures, 9101set this value to 0 to disable canonical types. 9102 9103@item switch-conversion-max-branch-ratio 9104Switch initialization conversion will refuse to create arrays that are 9105bigger than @option{switch-conversion-max-branch-ratio} times the number of 9106branches in the switch. 9107 9108@item max-partial-antic-length 9109Maximum length of the partial antic set computed during the tree 9110partial redundancy elimination optimization (@option{-ftree-pre}) when 9111optimizing at @option{-O3} and above. For some sorts of source code 9112the enhanced partial redundancy elimination optimization can run away, 9113consuming all of the memory available on the host machine. This 9114parameter sets a limit on the length of the sets that are computed, 9115which prevents the runaway behavior. Setting a value of 0 for 9116this parameter will allow an unlimited set length. 9117 9118@item sccvn-max-scc-size 9119Maximum size of a strongly connected component (SCC) during SCCVN 9120processing. If this limit is hit, SCCVN processing for the whole 9121function will not be done and optimizations depending on it will 9122be disabled. The default maximum SCC size is 10000. 9123 9124@item ira-max-loops-num 9125IRA uses regional register allocation by default. If a function 9126contains more loops than the number given by this parameter, only at most 9127the given number of the most frequently-executed loops form regions 9128for regional register allocation. The default value of the 9129parameter is 100. 9130 9131@item ira-max-conflict-table-size 9132Although IRA uses a sophisticated algorithm to compress the conflict 9133table, the table can still require excessive amounts of memory for 9134huge functions. If the conflict table for a function could be more 9135than the size in MB given by this parameter, the register allocator 9136instead uses a faster, simpler, and lower-quality 9137algorithm that does not require building a pseudo-register conflict table. 9138The default value of the parameter is 2000. 9139 9140@item ira-loop-reserved-regs 9141IRA can be used to evaluate more accurate register pressure in loops 9142for decisions to move loop invariants (see @option{-O3}). The number 9143of available registers reserved for some other purposes is given 9144by this parameter. The default value of the parameter is 2, which is 9145the minimal number of registers needed by typical instructions. 9146This value is the best found from numerous experiments. 9147 9148@item loop-invariant-max-bbs-in-loop 9149Loop invariant motion can be very expensive, both in compilation time and 9150in amount of needed compile-time memory, with very large loops. Loops 9151with more basic blocks than this parameter won't have loop invariant 9152motion optimization performed on them. The default value of the 9153parameter is 1000 for -O1 and 10000 for -O2 and above. 9154 9155@item loop-max-datarefs-for-datadeps 9156Building data dapendencies is expensive for very large loops. This 9157parameter limits the number of data references in loops that are 9158considered for data dependence analysis. These large loops will not 9159be handled then by the optimizations using loop data dependencies. 9160The default value is 1000. 9161 9162@item max-vartrack-size 9163Sets a maximum number of hash table slots to use during variable 9164tracking dataflow analysis of any function. If this limit is exceeded 9165with variable tracking at assignments enabled, analysis for that 9166function is retried without it, after removing all debug insns from 9167the function. If the limit is exceeded even without debug insns, var 9168tracking analysis is completely disabled for the function. Setting 9169the parameter to zero makes it unlimited. 9170 9171@item max-vartrack-expr-depth 9172Sets a maximum number of recursion levels when attempting to map 9173variable names or debug temporaries to value expressions. This trades 9174compilation time for more complete debug information. If this is set too 9175low, value expressions that are available and could be represented in 9176debug information may end up not being used; setting this higher may 9177enable the compiler to find more complex debug expressions, but compile 9178time and memory use may grow. The default is 12. 9179 9180@item min-nondebug-insn-uid 9181Use uids starting at this parameter for nondebug insns. The range below 9182the parameter is reserved exclusively for debug insns created by 9183@option{-fvar-tracking-assignments}, but debug insns may get 9184(non-overlapping) uids above it if the reserved range is exhausted. 9185 9186@item ipa-sra-ptr-growth-factor 9187IPA-SRA will replace a pointer to an aggregate with one or more new 9188parameters only when their cumulative size is less or equal to 9189@option{ipa-sra-ptr-growth-factor} times the size of the original 9190pointer parameter. 9191 9192@item tm-max-aggregate-size 9193When making copies of thread-local variables in a transaction, this 9194parameter specifies the size in bytes after which variables will be 9195saved with the logging functions as opposed to save/restore code 9196sequence pairs. This option only applies when using 9197@option{-fgnu-tm}. 9198 9199@item graphite-max-nb-scop-params 9200To avoid exponential effects in the Graphite loop transforms, the 9201number of parameters in a Static Control Part (SCoP) is bounded. The 9202default value is 10 parameters. A variable whose value is unknown at 9203compilation time and defined outside a SCoP is a parameter of the SCoP. 9204 9205@item graphite-max-bbs-per-function 9206To avoid exponential effects in the detection of SCoPs, the size of 9207the functions analyzed by Graphite is bounded. The default value is 9208100 basic blocks. 9209 9210@item loop-block-tile-size 9211Loop blocking or strip mining transforms, enabled with 9212@option{-floop-block} or @option{-floop-strip-mine}, strip mine each 9213loop in the loop nest by a given number of iterations. The strip 9214length can be changed using the @option{loop-block-tile-size} 9215parameter. The default value is 51 iterations. 9216 9217@item ipa-cp-value-list-size 9218IPA-CP attempts to track all possible values and types passed to a function's 9219parameter in order to propagate them and perform devirtualization. 9220@option{ipa-cp-value-list-size} is the maximum number of values and types it 9221stores per one formal parameter of a function. 9222 9223@item lto-partitions 9224Specify desired number of partitions produced during WHOPR compilation. 9225The number of partitions should exceed the number of CPUs used for compilation. 9226The default value is 32. 9227 9228@item lto-minpartition 9229Size of minimal partition for WHOPR (in estimated instructions). 9230This prevents expenses of splitting very small programs into too many 9231partitions. 9232 9233@item cxx-max-namespaces-for-diagnostic-help 9234The maximum number of namespaces to consult for suggestions when C++ 9235name lookup fails for an identifier. The default is 1000. 9236 9237@item sink-frequency-threshold 9238The maximum relative execution frequency (in percents) of the target block 9239relative to a statement's original block to allow statement sinking of a 9240statement. Larger numbers result in more aggressive statement sinking. 9241The default value is 75. A small positive adjustment is applied for 9242statements with memory operands as those are even more profitable so sink. 9243 9244@item max-stores-to-sink 9245The maximum number of conditional stores paires that can be sunk. Set to 0 9246if either vectorization (@option{-ftree-vectorize}) or if-conversion 9247(@option{-ftree-loop-if-convert}) is disabled. The default is 2. 9248 9249@item allow-load-data-races 9250Allow optimizers to introduce new data races on loads. 9251Set to 1 to allow, otherwise to 0. This option is enabled by default 9252unless implicitly set by the @option{-fmemory-model=} option. 9253 9254@item allow-store-data-races 9255Allow optimizers to introduce new data races on stores. 9256Set to 1 to allow, otherwise to 0. This option is enabled by default 9257unless implicitly set by the @option{-fmemory-model=} option. 9258 9259@item allow-packed-load-data-races 9260Allow optimizers to introduce new data races on packed data loads. 9261Set to 1 to allow, otherwise to 0. This option is enabled by default 9262unless implicitly set by the @option{-fmemory-model=} option. 9263 9264@item allow-packed-store-data-races 9265Allow optimizers to introduce new data races on packed data stores. 9266Set to 1 to allow, otherwise to 0. This option is enabled by default 9267unless implicitly set by the @option{-fmemory-model=} option. 9268 9269@item case-values-threshold 9270The smallest number of different values for which it is best to use a 9271jump-table instead of a tree of conditional branches. If the value is 92720, use the default for the machine. The default is 0. 9273 9274@item tree-reassoc-width 9275Set the maximum number of instructions executed in parallel in 9276reassociated tree. This parameter overrides target dependent 9277heuristics used by default if has non zero value. 9278 9279@end table 9280@end table 9281 9282@node Preprocessor Options 9283@section Options Controlling the Preprocessor 9284@cindex preprocessor options 9285@cindex options, preprocessor 9286 9287These options control the C preprocessor, which is run on each C source 9288file before actual compilation. 9289 9290If you use the @option{-E} option, nothing is done except preprocessing. 9291Some of these options make sense only together with @option{-E} because 9292they cause the preprocessor output to be unsuitable for actual 9293compilation. 9294 9295@table @gcctabopt 9296@item -Wp,@var{option} 9297@opindex Wp 9298You can use @option{-Wp,@var{option}} to bypass the compiler driver 9299and pass @var{option} directly through to the preprocessor. If 9300@var{option} contains commas, it is split into multiple options at the 9301commas. However, many options are modified, translated or interpreted 9302by the compiler driver before being passed to the preprocessor, and 9303@option{-Wp} forcibly bypasses this phase. The preprocessor's direct 9304interface is undocumented and subject to change, so whenever possible 9305you should avoid using @option{-Wp} and let the driver handle the 9306options instead. 9307 9308@item -Xpreprocessor @var{option} 9309@opindex Xpreprocessor 9310Pass @var{option} as an option to the preprocessor. You can use this to 9311supply system-specific preprocessor options that GCC does not know how to 9312recognize. 9313 9314If you want to pass an option that takes an argument, you must use 9315@option{-Xpreprocessor} twice, once for the option and once for the argument. 9316@end table 9317 9318@include cppopts.texi 9319 9320@node Assembler Options 9321@section Passing Options to the Assembler 9322 9323@c prevent bad page break with this line 9324You can pass options to the assembler. 9325 9326@table @gcctabopt 9327@item -Wa,@var{option} 9328@opindex Wa 9329Pass @var{option} as an option to the assembler. If @var{option} 9330contains commas, it is split into multiple options at the commas. 9331 9332@item -Xassembler @var{option} 9333@opindex Xassembler 9334Pass @var{option} as an option to the assembler. You can use this to 9335supply system-specific assembler options that GCC does not know how to 9336recognize. 9337 9338If you want to pass an option that takes an argument, you must use 9339@option{-Xassembler} twice, once for the option and once for the argument. 9340 9341@end table 9342 9343@node Link Options 9344@section Options for Linking 9345@cindex link options 9346@cindex options, linking 9347 9348These options come into play when the compiler links object files into 9349an executable output file. They are meaningless if the compiler is 9350not doing a link step. 9351 9352@table @gcctabopt 9353@cindex file names 9354@item @var{object-file-name} 9355A file name that does not end in a special recognized suffix is 9356considered to name an object file or library. (Object files are 9357distinguished from libraries by the linker according to the file 9358contents.) If linking is done, these object files are used as input 9359to the linker. 9360 9361@item -c 9362@itemx -S 9363@itemx -E 9364@opindex c 9365@opindex S 9366@opindex E 9367If any of these options is used, then the linker is not run, and 9368object file names should not be used as arguments. @xref{Overall 9369Options}. 9370 9371@cindex Libraries 9372@item -l@var{library} 9373@itemx -l @var{library} 9374@opindex l 9375Search the library named @var{library} when linking. (The second 9376alternative with the library as a separate argument is only for 9377POSIX compliance and is not recommended.) 9378 9379It makes a difference where in the command you write this option; the 9380linker searches and processes libraries and object files in the order they 9381are specified. Thus, @samp{foo.o -lz bar.o} searches library @samp{z} 9382after file @file{foo.o} but before @file{bar.o}. If @file{bar.o} refers 9383to functions in @samp{z}, those functions may not be loaded. 9384 9385The linker searches a standard list of directories for the library, 9386which is actually a file named @file{lib@var{library}.a}. The linker 9387then uses this file as if it had been specified precisely by name. 9388 9389The directories searched include several standard system directories 9390plus any that you specify with @option{-L}. 9391 9392Normally the files found this way are library files---archive files 9393whose members are object files. The linker handles an archive file by 9394scanning through it for members which define symbols that have so far 9395been referenced but not defined. But if the file that is found is an 9396ordinary object file, it is linked in the usual fashion. The only 9397difference between using an @option{-l} option and specifying a file name 9398is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a} 9399and searches several directories. 9400 9401@item -lobjc 9402@opindex lobjc 9403You need this special case of the @option{-l} option in order to 9404link an Objective-C or Objective-C++ program. 9405 9406@item -nostartfiles 9407@opindex nostartfiles 9408Do not use the standard system startup files when linking. 9409The standard system libraries are used normally, unless @option{-nostdlib} 9410or @option{-nodefaultlibs} is used. 9411 9412@item -nodefaultlibs 9413@opindex nodefaultlibs 9414Do not use the standard system libraries when linking. 9415Only the libraries you specify will be passed to the linker, options 9416specifying linkage of the system libraries, such as @code{-static-libgcc} 9417or @code{-shared-libgcc}, will be ignored. 9418The standard startup files are used normally, unless @option{-nostartfiles} 9419is used. The compiler may generate calls to @code{memcmp}, 9420@code{memset}, @code{memcpy} and @code{memmove}. 9421These entries are usually resolved by entries in 9422libc. These entry points should be supplied through some other 9423mechanism when this option is specified. 9424 9425@item -nostdlib 9426@opindex nostdlib 9427Do not use the standard system startup files or libraries when linking. 9428No startup files and only the libraries you specify will be passed to 9429the linker, options specifying linkage of the system libraries, such as 9430@code{-static-libgcc} or @code{-shared-libgcc}, will be ignored. 9431The compiler may generate calls to @code{memcmp}, @code{memset}, 9432@code{memcpy} and @code{memmove}. 9433These entries are usually resolved by entries in 9434libc. These entry points should be supplied through some other 9435mechanism when this option is specified. 9436 9437@cindex @option{-lgcc}, use with @option{-nostdlib} 9438@cindex @option{-nostdlib} and unresolved references 9439@cindex unresolved references and @option{-nostdlib} 9440@cindex @option{-lgcc}, use with @option{-nodefaultlibs} 9441@cindex @option{-nodefaultlibs} and unresolved references 9442@cindex unresolved references and @option{-nodefaultlibs} 9443One of the standard libraries bypassed by @option{-nostdlib} and 9444@option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines 9445which GCC uses to overcome shortcomings of particular machines, or special 9446needs for some languages. 9447(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler 9448Collection (GCC) Internals}, 9449for more discussion of @file{libgcc.a}.) 9450In most cases, you need @file{libgcc.a} even when you want to avoid 9451other standard libraries. In other words, when you specify @option{-nostdlib} 9452or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well. 9453This ensures that you have no unresolved references to internal GCC 9454library subroutines. (For example, @samp{__main}, used to ensure C++ 9455constructors will be called; @pxref{Collect2,,@code{collect2}, gccint, 9456GNU Compiler Collection (GCC) Internals}.) 9457 9458@item -pie 9459@opindex pie 9460Produce a position independent executable on targets that support it. 9461For predictable results, you must also specify the same set of options 9462that were used to generate code (@option{-fpie}, @option{-fPIE}, 9463or model suboptions) when you specify this option. 9464 9465@item -rdynamic 9466@opindex rdynamic 9467Pass the flag @option{-export-dynamic} to the ELF linker, on targets 9468that support it. This instructs the linker to add all symbols, not 9469only used ones, to the dynamic symbol table. This option is needed 9470for some uses of @code{dlopen} or to allow obtaining backtraces 9471from within a program. 9472 9473@item -s 9474@opindex s 9475Remove all symbol table and relocation information from the executable. 9476 9477@item -static 9478@opindex static 9479On systems that support dynamic linking, this prevents linking with the shared 9480libraries. On other systems, this option has no effect. 9481 9482@item -shared 9483@opindex shared 9484Produce a shared object which can then be linked with other objects to 9485form an executable. Not all systems support this option. For predictable 9486results, you must also specify the same set of options that were used to 9487generate code (@option{-fpic}, @option{-fPIC}, or model suboptions) 9488when you specify this option.@footnote{On some systems, @samp{gcc -shared} 9489needs to build supplementary stub code for constructors to work. On 9490multi-libbed systems, @samp{gcc -shared} must select the correct support 9491libraries to link against. Failing to supply the correct flags may lead 9492to subtle defects. Supplying them in cases where they are not necessary 9493is innocuous.} 9494 9495@item -shared-libgcc 9496@itemx -static-libgcc 9497@opindex shared-libgcc 9498@opindex static-libgcc 9499On systems that provide @file{libgcc} as a shared library, these options 9500force the use of either the shared or static version respectively. 9501If no shared version of @file{libgcc} was built when the compiler was 9502configured, these options have no effect. 9503 9504There are several situations in which an application should use the 9505shared @file{libgcc} instead of the static version. The most common 9506of these is when the application wishes to throw and catch exceptions 9507across different shared libraries. In that case, each of the libraries 9508as well as the application itself should use the shared @file{libgcc}. 9509 9510Therefore, the G++ and GCJ drivers automatically add 9511@option{-shared-libgcc} whenever you build a shared library or a main 9512executable, because C++ and Java programs typically use exceptions, so 9513this is the right thing to do. 9514 9515If, instead, you use the GCC driver to create shared libraries, you may 9516find that they will not always be linked with the shared @file{libgcc}. 9517If GCC finds, at its configuration time, that you have a non-GNU linker 9518or a GNU linker that does not support option @option{--eh-frame-hdr}, 9519it will link the shared version of @file{libgcc} into shared libraries 9520by default. Otherwise, it will take advantage of the linker and optimize 9521away the linking with the shared version of @file{libgcc}, linking with 9522the static version of libgcc by default. This allows exceptions to 9523propagate through such shared libraries, without incurring relocation 9524costs at library load time. 9525 9526However, if a library or main executable is supposed to throw or catch 9527exceptions, you must link it using the G++ or GCJ driver, as appropriate 9528for the languages used in the program, or using the option 9529@option{-shared-libgcc}, such that it is linked with the shared 9530@file{libgcc}. 9531 9532@item -static-libstdc++ 9533When the @command{g++} program is used to link a C++ program, it will 9534normally automatically link against @option{libstdc++}. If 9535@file{libstdc++} is available as a shared library, and the 9536@option{-static} option is not used, then this will link against the 9537shared version of @file{libstdc++}. That is normally fine. However, it 9538is sometimes useful to freeze the version of @file{libstdc++} used by 9539the program without going all the way to a fully static link. The 9540@option{-static-libstdc++} option directs the @command{g++} driver to 9541link @file{libstdc++} statically, without necessarily linking other 9542libraries statically. 9543 9544@item -symbolic 9545@opindex symbolic 9546Bind references to global symbols when building a shared object. Warn 9547about any unresolved references (unless overridden by the link editor 9548option @samp{-Xlinker -z -Xlinker defs}). Only a few systems support 9549this option. 9550 9551@item -T @var{script} 9552@opindex T 9553@cindex linker script 9554Use @var{script} as the linker script. This option is supported by most 9555systems using the GNU linker. On some targets, such as bare-board 9556targets without an operating system, the @option{-T} option may be required 9557when linking to avoid references to undefined symbols. 9558 9559@item -Xlinker @var{option} 9560@opindex Xlinker 9561Pass @var{option} as an option to the linker. You can use this to 9562supply system-specific linker options that GCC does not recognize. 9563 9564If you want to pass an option that takes a separate argument, you must use 9565@option{-Xlinker} twice, once for the option and once for the argument. 9566For example, to pass @option{-assert definitions}, you must write 9567@samp{-Xlinker -assert -Xlinker definitions}. It does not work to write 9568@option{-Xlinker "-assert definitions"}, because this passes the entire 9569string as a single argument, which is not what the linker expects. 9570 9571When using the GNU linker, it is usually more convenient to pass 9572arguments to linker options using the @option{@var{option}=@var{value}} 9573syntax than as separate arguments. For example, you can specify 9574@samp{-Xlinker -Map=output.map} rather than 9575@samp{-Xlinker -Map -Xlinker output.map}. Other linkers may not support 9576this syntax for command-line options. 9577 9578@item -Wl,@var{option} 9579@opindex Wl 9580Pass @var{option} as an option to the linker. If @var{option} contains 9581commas, it is split into multiple options at the commas. You can use this 9582syntax to pass an argument to the option. 9583For example, @samp{-Wl,-Map,output.map} passes @samp{-Map output.map} to the 9584linker. When using the GNU linker, you can also get the same effect with 9585@samp{-Wl,-Map=output.map}. 9586 9587@item -u @var{symbol} 9588@opindex u 9589Pretend the symbol @var{symbol} is undefined, to force linking of 9590library modules to define it. You can use @option{-u} multiple times with 9591different symbols to force loading of additional library modules. 9592@end table 9593 9594@node Directory Options 9595@section Options for Directory Search 9596@cindex directory options 9597@cindex options, directory search 9598@cindex search path 9599 9600These options specify directories to search for header files, for 9601libraries and for parts of the compiler: 9602 9603@table @gcctabopt 9604@item -I@var{dir} 9605@opindex I 9606Add the directory @var{dir} to the head of the list of directories to be 9607searched for header files. This can be used to override a system header 9608file, substituting your own version, since these directories are 9609searched before the system header file directories. However, you should 9610not use this option to add directories that contain vendor-supplied 9611system header files (use @option{-isystem} for that). If you use more than 9612one @option{-I} option, the directories are scanned in left-to-right 9613order; the standard system directories come after. 9614 9615If a standard system include directory, or a directory specified with 9616@option{-isystem}, is also specified with @option{-I}, the @option{-I} 9617option will be ignored. The directory will still be searched but as a 9618system directory at its normal position in the system include chain. 9619This is to ensure that GCC's procedure to fix buggy system headers and 9620the ordering for the include_next directive are not inadvertently changed. 9621If you really need to change the search order for system directories, 9622use the @option{-nostdinc} and/or @option{-isystem} options. 9623 9624@item -iplugindir=@var{dir} 9625Set the directory to search for plugins that are passed 9626by @option{-fplugin=@var{name}} instead of 9627@option{-fplugin=@var{path}/@var{name}.so}. This option is not meant 9628to be used by the user, but only passed by the driver. 9629 9630@item -iquote@var{dir} 9631@opindex iquote 9632Add the directory @var{dir} to the head of the list of directories to 9633be searched for header files only for the case of @samp{#include 9634"@var{file}"}; they are not searched for @samp{#include <@var{file}>}, 9635otherwise just like @option{-I}. 9636 9637@item -L@var{dir} 9638@opindex L 9639Add directory @var{dir} to the list of directories to be searched 9640for @option{-l}. 9641 9642@item -B@var{prefix} 9643@opindex B 9644This option specifies where to find the executables, libraries, 9645include files, and data files of the compiler itself. 9646 9647The compiler driver program runs one or more of the subprograms 9648@file{cpp}, @file{cc1}, @file{as} and @file{ld}. It tries 9649@var{prefix} as a prefix for each program it tries to run, both with and 9650without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}). 9651 9652For each subprogram to be run, the compiler driver first tries the 9653@option{-B} prefix, if any. If that name is not found, or if @option{-B} 9654was not specified, the driver tries two standard prefixes, 9655@file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}. If neither of 9656those results in a file name that is found, the unmodified program 9657name is searched for using the directories specified in your 9658@env{PATH} environment variable. 9659 9660The compiler will check to see if the path provided by the @option{-B} 9661refers to a directory, and if necessary it will add a directory 9662separator character at the end of the path. 9663 9664@option{-B} prefixes that effectively specify directory names also apply 9665to libraries in the linker, because the compiler translates these 9666options into @option{-L} options for the linker. They also apply to 9667includes files in the preprocessor, because the compiler translates these 9668options into @option{-isystem} options for the preprocessor. In this case, 9669the compiler appends @samp{include} to the prefix. 9670 9671The runtime support file @file{libgcc.a} can also be searched for using 9672the @option{-B} prefix, if needed. If it is not found there, the two 9673standard prefixes above are tried, and that is all. The file is left 9674out of the link if it is not found by those means. 9675 9676Another way to specify a prefix much like the @option{-B} prefix is to use 9677the environment variable @env{GCC_EXEC_PREFIX}. @xref{Environment 9678Variables}. 9679 9680As a special kludge, if the path provided by @option{-B} is 9681@file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to 96829, then it will be replaced by @file{[dir/]include}. This is to help 9683with boot-strapping the compiler. 9684 9685@item -specs=@var{file} 9686@opindex specs 9687Process @var{file} after the compiler reads in the standard @file{specs} 9688file, in order to override the defaults which the @file{gcc} driver 9689program uses when determining what switches to pass to @file{cc1}, 9690@file{cc1plus}, @file{as}, @file{ld}, etc. More than one 9691@option{-specs=@var{file}} can be specified on the command line, and they 9692are processed in order, from left to right. 9693 9694@item --sysroot=@var{dir} 9695@opindex sysroot 9696Use @var{dir} as the logical root directory for headers and libraries. 9697For example, if the compiler would normally search for headers in 9698@file{/usr/include} and libraries in @file{/usr/lib}, it will instead 9699search @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}. 9700 9701If you use both this option and the @option{-isysroot} option, then 9702the @option{--sysroot} option will apply to libraries, but the 9703@option{-isysroot} option will apply to header files. 9704 9705The GNU linker (beginning with version 2.16) has the necessary support 9706for this option. If your linker does not support this option, the 9707header file aspect of @option{--sysroot} will still work, but the 9708library aspect will not. 9709 9710@item -I- 9711@opindex I- 9712This option has been deprecated. Please use @option{-iquote} instead for 9713@option{-I} directories before the @option{-I-} and remove the @option{-I-}. 9714Any directories you specify with @option{-I} options before the @option{-I-} 9715option are searched only for the case of @samp{#include "@var{file}"}; 9716they are not searched for @samp{#include <@var{file}>}. 9717 9718If additional directories are specified with @option{-I} options after 9719the @option{-I-}, these directories are searched for all @samp{#include} 9720directives. (Ordinarily @emph{all} @option{-I} directories are used 9721this way.) 9722 9723In addition, the @option{-I-} option inhibits the use of the current 9724directory (where the current input file came from) as the first search 9725directory for @samp{#include "@var{file}"}. There is no way to 9726override this effect of @option{-I-}. With @option{-I.} you can specify 9727searching the directory that was current when the compiler was 9728invoked. That is not exactly the same as what the preprocessor does 9729by default, but it is often satisfactory. 9730 9731@option{-I-} does not inhibit the use of the standard system directories 9732for header files. Thus, @option{-I-} and @option{-nostdinc} are 9733independent. 9734@end table 9735 9736@c man end 9737 9738@node Spec Files 9739@section Specifying subprocesses and the switches to pass to them 9740@cindex Spec Files 9741 9742@command{gcc} is a driver program. It performs its job by invoking a 9743sequence of other programs to do the work of compiling, assembling and 9744linking. GCC interprets its command-line parameters and uses these to 9745deduce which programs it should invoke, and which command-line options 9746it ought to place on their command lines. This behavior is controlled 9747by @dfn{spec strings}. In most cases there is one spec string for each 9748program that GCC can invoke, but a few programs have multiple spec 9749strings to control their behavior. The spec strings built into GCC can 9750be overridden by using the @option{-specs=} command-line switch to specify 9751a spec file. 9752 9753@dfn{Spec files} are plaintext files that are used to construct spec 9754strings. They consist of a sequence of directives separated by blank 9755lines. The type of directive is determined by the first non-whitespace 9756character on the line, which can be one of the following: 9757 9758@table @code 9759@item %@var{command} 9760Issues a @var{command} to the spec file processor. The commands that can 9761appear here are: 9762 9763@table @code 9764@item %include <@var{file}> 9765@cindex @code{%include} 9766Search for @var{file} and insert its text at the current point in the 9767specs file. 9768 9769@item %include_noerr <@var{file}> 9770@cindex @code{%include_noerr} 9771Just like @samp{%include}, but do not generate an error message if the include 9772file cannot be found. 9773 9774@item %rename @var{old_name} @var{new_name} 9775@cindex @code{%rename} 9776Rename the spec string @var{old_name} to @var{new_name}. 9777 9778@end table 9779 9780@item *[@var{spec_name}]: 9781This tells the compiler to create, override or delete the named spec 9782string. All lines after this directive up to the next directive or 9783blank line are considered to be the text for the spec string. If this 9784results in an empty string then the spec will be deleted. (Or, if the 9785spec did not exist, then nothing will happen.) Otherwise, if the spec 9786does not currently exist a new spec will be created. If the spec does 9787exist then its contents will be overridden by the text of this 9788directive, unless the first character of that text is the @samp{+} 9789character, in which case the text will be appended to the spec. 9790 9791@item [@var{suffix}]: 9792Creates a new @samp{[@var{suffix}] spec} pair. All lines after this directive 9793and up to the next directive or blank line are considered to make up the 9794spec string for the indicated suffix. When the compiler encounters an 9795input file with the named suffix, it will processes the spec string in 9796order to work out how to compile that file. For example: 9797 9798@smallexample 9799.ZZ: 9800z-compile -input %i 9801@end smallexample 9802 9803This says that any input file whose name ends in @samp{.ZZ} should be 9804passed to the program @samp{z-compile}, which should be invoked with the 9805command-line switch @option{-input} and with the result of performing the 9806@samp{%i} substitution. (See below.) 9807 9808As an alternative to providing a spec string, the text that follows a 9809suffix directive can be one of the following: 9810 9811@table @code 9812@item @@@var{language} 9813This says that the suffix is an alias for a known @var{language}. This is 9814similar to using the @option{-x} command-line switch to GCC to specify a 9815language explicitly. For example: 9816 9817@smallexample 9818.ZZ: 9819@@c++ 9820@end smallexample 9821 9822Says that .ZZ files are, in fact, C++ source files. 9823 9824@item #@var{name} 9825This causes an error messages saying: 9826 9827@smallexample 9828@var{name} compiler not installed on this system. 9829@end smallexample 9830@end table 9831 9832GCC already has an extensive list of suffixes built into it. 9833This directive will add an entry to the end of the list of suffixes, but 9834since the list is searched from the end backwards, it is effectively 9835possible to override earlier entries using this technique. 9836 9837@end table 9838 9839GCC has the following spec strings built into it. Spec files can 9840override these strings or create their own. Note that individual 9841targets can also add their own spec strings to this list. 9842 9843@smallexample 9844asm Options to pass to the assembler 9845asm_final Options to pass to the assembler post-processor 9846cpp Options to pass to the C preprocessor 9847cc1 Options to pass to the C compiler 9848cc1plus Options to pass to the C++ compiler 9849endfile Object files to include at the end of the link 9850link Options to pass to the linker 9851lib Libraries to include on the command line to the linker 9852libgcc Decides which GCC support library to pass to the linker 9853linker Sets the name of the linker 9854predefines Defines to be passed to the C preprocessor 9855signed_char Defines to pass to CPP to say whether @code{char} is signed 9856 by default 9857startfile Object files to include at the start of the link 9858@end smallexample 9859 9860Here is a small example of a spec file: 9861 9862@smallexample 9863%rename lib old_lib 9864 9865*lib: 9866--start-group -lgcc -lc -leval1 --end-group %(old_lib) 9867@end smallexample 9868 9869This example renames the spec called @samp{lib} to @samp{old_lib} and 9870then overrides the previous definition of @samp{lib} with a new one. 9871The new definition adds in some extra command-line options before 9872including the text of the old definition. 9873 9874@dfn{Spec strings} are a list of command-line options to be passed to their 9875corresponding program. In addition, the spec strings can contain 9876@samp{%}-prefixed sequences to substitute variable text or to 9877conditionally insert text into the command line. Using these constructs 9878it is possible to generate quite complex command lines. 9879 9880Here is a table of all defined @samp{%}-sequences for spec 9881strings. Note that spaces are not generated automatically around the 9882results of expanding these sequences. Therefore you can concatenate them 9883together or combine them with constant text in a single argument. 9884 9885@table @code 9886@item %% 9887Substitute one @samp{%} into the program name or argument. 9888 9889@item %i 9890Substitute the name of the input file being processed. 9891 9892@item %b 9893Substitute the basename of the input file being processed. 9894This is the substring up to (and not including) the last period 9895and not including the directory. 9896 9897@item %B 9898This is the same as @samp{%b}, but include the file suffix (text after 9899the last period). 9900 9901@item %d 9902Marks the argument containing or following the @samp{%d} as a 9903temporary file name, so that that file will be deleted if GCC exits 9904successfully. Unlike @samp{%g}, this contributes no text to the 9905argument. 9906 9907@item %g@var{suffix} 9908Substitute a file name that has suffix @var{suffix} and is chosen 9909once per compilation, and mark the argument in the same way as 9910@samp{%d}. To reduce exposure to denial-of-service attacks, the file 9911name is now chosen in a way that is hard to predict even when previously 9912chosen file names are known. For example, @samp{%g.s @dots{} %g.o @dots{} %g.s} 9913might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}. @var{suffix} matches 9914the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is 9915treated exactly as if @samp{%O} had been preprocessed. Previously, @samp{%g} 9916was simply substituted with a file name chosen once per compilation, 9917without regard to any appended suffix (which was therefore treated 9918just like ordinary text), making such attacks more likely to succeed. 9919 9920@item %u@var{suffix} 9921Like @samp{%g}, but generates a new temporary file name even if 9922@samp{%u@var{suffix}} was already seen. 9923 9924@item %U@var{suffix} 9925Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a 9926new one if there is no such last file name. In the absence of any 9927@samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share 9928the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s} 9929would involve the generation of two distinct file names, one 9930for each @samp{%g.s} and another for each @samp{%U.s}. Previously, @samp{%U} was 9931simply substituted with a file name chosen for the previous @samp{%u}, 9932without regard to any appended suffix. 9933 9934@item %j@var{suffix} 9935Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is 9936writable, and if save-temps is off; otherwise, substitute the name 9937of a temporary file, just like @samp{%u}. This temporary file is not 9938meant for communication between processes, but rather as a junk 9939disposal mechanism. 9940 9941@item %|@var{suffix} 9942@itemx %m@var{suffix} 9943Like @samp{%g}, except if @option{-pipe} is in effect. In that case 9944@samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at 9945all. These are the two most common ways to instruct a program that it 9946should read from standard input or write to standard output. If you 9947need something more elaborate you can use an @samp{%@{pipe:@code{X}@}} 9948construct: see for example @file{f/lang-specs.h}. 9949 9950@item %.@var{SUFFIX} 9951Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args 9952when it is subsequently output with @samp{%*}. @var{SUFFIX} is 9953terminated by the next space or %. 9954 9955@item %w 9956Marks the argument containing or following the @samp{%w} as the 9957designated output file of this compilation. This puts the argument 9958into the sequence of arguments that @samp{%o} will substitute later. 9959 9960@item %o 9961Substitutes the names of all the output files, with spaces 9962automatically placed around them. You should write spaces 9963around the @samp{%o} as well or the results are undefined. 9964@samp{%o} is for use in the specs for running the linker. 9965Input files whose names have no recognized suffix are not compiled 9966at all, but they are included among the output files, so they will 9967be linked. 9968 9969@item %O 9970Substitutes the suffix for object files. Note that this is 9971handled specially when it immediately follows @samp{%g, %u, or %U}, 9972because of the need for those to form complete file names. The 9973handling is such that @samp{%O} is treated exactly as if it had already 9974been substituted, except that @samp{%g, %u, and %U} do not currently 9975support additional @var{suffix} characters following @samp{%O} as they would 9976following, for example, @samp{.o}. 9977 9978@item %p 9979Substitutes the standard macro predefinitions for the 9980current target machine. Use this when running @code{cpp}. 9981 9982@item %P 9983Like @samp{%p}, but puts @samp{__} before and after the name of each 9984predefined macro, except for macros that start with @samp{__} or with 9985@samp{_@var{L}}, where @var{L} is an uppercase letter. This is for ISO 9986C@. 9987 9988@item %I 9989Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}), 9990@option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}), 9991@option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options) 9992and @option{-imultilib} as necessary. 9993 9994@item %s 9995Current argument is the name of a library or startup file of some sort. 9996Search for that file in a standard list of directories and substitute 9997the full name found. The current working directory is included in the 9998list of directories scanned. 9999 10000@item %T 10001Current argument is the name of a linker script. Search for that file 10002in the current list of directories to scan for libraries. If the file 10003is located insert a @option{--script} option into the command line 10004followed by the full path name found. If the file is not found then 10005generate an error message. Note: the current working directory is not 10006searched. 10007 10008@item %e@var{str} 10009Print @var{str} as an error message. @var{str} is terminated by a newline. 10010Use this when inconsistent options are detected. 10011 10012@item %(@var{name}) 10013Substitute the contents of spec string @var{name} at this point. 10014 10015@item %x@{@var{option}@} 10016Accumulate an option for @samp{%X}. 10017 10018@item %X 10019Output the accumulated linker options specified by @option{-Wl} or a @samp{%x} 10020spec string. 10021 10022@item %Y 10023Output the accumulated assembler options specified by @option{-Wa}. 10024 10025@item %Z 10026Output the accumulated preprocessor options specified by @option{-Wp}. 10027 10028@item %a 10029Process the @code{asm} spec. This is used to compute the 10030switches to be passed to the assembler. 10031 10032@item %A 10033Process the @code{asm_final} spec. This is a spec string for 10034passing switches to an assembler post-processor, if such a program is 10035needed. 10036 10037@item %l 10038Process the @code{link} spec. This is the spec for computing the 10039command line passed to the linker. Typically it will make use of the 10040@samp{%L %G %S %D and %E} sequences. 10041 10042@item %D 10043Dump out a @option{-L} option for each directory that GCC believes might 10044contain startup files. If the target supports multilibs then the 10045current multilib directory will be prepended to each of these paths. 10046 10047@item %L 10048Process the @code{lib} spec. This is a spec string for deciding which 10049libraries should be included on the command line to the linker. 10050 10051@item %G 10052Process the @code{libgcc} spec. This is a spec string for deciding 10053which GCC support library should be included on the command line to the linker. 10054 10055@item %S 10056Process the @code{startfile} spec. This is a spec for deciding which 10057object files should be the first ones passed to the linker. Typically 10058this might be a file named @file{crt0.o}. 10059 10060@item %E 10061Process the @code{endfile} spec. This is a spec string that specifies 10062the last object files that will be passed to the linker. 10063 10064@item %C 10065Process the @code{cpp} spec. This is used to construct the arguments 10066to be passed to the C preprocessor. 10067 10068@item %1 10069Process the @code{cc1} spec. This is used to construct the options to be 10070passed to the actual C compiler (@samp{cc1}). 10071 10072@item %2 10073Process the @code{cc1plus} spec. This is used to construct the options to be 10074passed to the actual C++ compiler (@samp{cc1plus}). 10075 10076@item %* 10077Substitute the variable part of a matched option. See below. 10078Note that each comma in the substituted string is replaced by 10079a single space. 10080 10081@item %<@code{S} 10082Remove all occurrences of @code{-S} from the command line. Note---this 10083command is position dependent. @samp{%} commands in the spec string 10084before this one will see @code{-S}, @samp{%} commands in the spec string 10085after this one will not. 10086 10087@item %:@var{function}(@var{args}) 10088Call the named function @var{function}, passing it @var{args}. 10089@var{args} is first processed as a nested spec string, then split 10090into an argument vector in the usual fashion. The function returns 10091a string which is processed as if it had appeared literally as part 10092of the current spec. 10093 10094The following built-in spec functions are provided: 10095 10096@table @code 10097@item @code{getenv} 10098The @code{getenv} spec function takes two arguments: an environment 10099variable name and a string. If the environment variable is not 10100defined, a fatal error is issued. Otherwise, the return value is the 10101value of the environment variable concatenated with the string. For 10102example, if @env{TOPDIR} is defined as @file{/path/to/top}, then: 10103 10104@smallexample 10105%:getenv(TOPDIR /include) 10106@end smallexample 10107 10108expands to @file{/path/to/top/include}. 10109 10110@item @code{if-exists} 10111The @code{if-exists} spec function takes one argument, an absolute 10112pathname to a file. If the file exists, @code{if-exists} returns the 10113pathname. Here is a small example of its usage: 10114 10115@smallexample 10116*startfile: 10117crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 10118@end smallexample 10119 10120@item @code{if-exists-else} 10121The @code{if-exists-else} spec function is similar to the @code{if-exists} 10122spec function, except that it takes two arguments. The first argument is 10123an absolute pathname to a file. If the file exists, @code{if-exists-else} 10124returns the pathname. If it does not exist, it returns the second argument. 10125This way, @code{if-exists-else} can be used to select one file or another, 10126based on the existence of the first. Here is a small example of its usage: 10127 10128@smallexample 10129*startfile: 10130crt0%O%s %:if-exists(crti%O%s) \ 10131%:if-exists-else(crtbeginT%O%s crtbegin%O%s) 10132@end smallexample 10133 10134@item @code{replace-outfile} 10135The @code{replace-outfile} spec function takes two arguments. It looks for the 10136first argument in the outfiles array and replaces it with the second argument. Here 10137is a small example of its usage: 10138 10139@smallexample 10140%@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@} 10141@end smallexample 10142 10143@item @code{remove-outfile} 10144The @code{remove-outfile} spec function takes one argument. It looks for the 10145first argument in the outfiles array and removes it. Here is a small example 10146its usage: 10147 10148@smallexample 10149%:remove-outfile(-lm) 10150@end smallexample 10151 10152@item @code{pass-through-libs} 10153The @code{pass-through-libs} spec function takes any number of arguments. It 10154finds any @option{-l} options and any non-options ending in ".a" (which it 10155assumes are the names of linker input library archive files) and returns a 10156result containing all the found arguments each prepended by 10157@option{-plugin-opt=-pass-through=} and joined by spaces. This list is 10158intended to be passed to the LTO linker plugin. 10159 10160@smallexample 10161%:pass-through-libs(%G %L %G) 10162@end smallexample 10163 10164@item @code{print-asm-header} 10165The @code{print-asm-header} function takes no arguments and simply 10166prints a banner like: 10167 10168@smallexample 10169Assembler options 10170================= 10171 10172Use "-Wa,OPTION" to pass "OPTION" to the assembler. 10173@end smallexample 10174 10175It is used to separate compiler options from assembler options 10176in the @option{--target-help} output. 10177@end table 10178 10179@item %@{@code{S}@} 10180Substitutes the @code{-S} switch, if that switch was given to GCC@. 10181If that switch was not specified, this substitutes nothing. Note that 10182the leading dash is omitted when specifying this option, and it is 10183automatically inserted if the substitution is performed. Thus the spec 10184string @samp{%@{foo@}} would match the command-line option @option{-foo} 10185and would output the command-line option @option{-foo}. 10186 10187@item %W@{@code{S}@} 10188Like %@{@code{S}@} but mark last argument supplied within as a file to be 10189deleted on failure. 10190 10191@item %@{@code{S}*@} 10192Substitutes all the switches specified to GCC whose names start 10193with @code{-S}, but which also take an argument. This is used for 10194switches like @option{-o}, @option{-D}, @option{-I}, etc. 10195GCC considers @option{-o foo} as being 10196one switch whose names starts with @samp{o}. %@{o*@} would substitute this 10197text, including the space. Thus two arguments would be generated. 10198 10199@item %@{@code{S}*&@code{T}*@} 10200Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options 10201(the order of @code{S} and @code{T} in the spec is not significant). 10202There can be any number of ampersand-separated variables; for each the 10203wild card is optional. Useful for CPP as @samp{%@{D*&U*&A*@}}. 10204 10205@item %@{@code{S}:@code{X}@} 10206Substitutes @code{X}, if the @samp{-S} switch was given to GCC@. 10207 10208@item %@{!@code{S}:@code{X}@} 10209Substitutes @code{X}, if the @samp{-S} switch was @emph{not} given to GCC@. 10210 10211@item %@{@code{S}*:@code{X}@} 10212Substitutes @code{X} if one or more switches whose names start with 10213@code{-S} are specified to GCC@. Normally @code{X} is substituted only 10214once, no matter how many such switches appeared. However, if @code{%*} 10215appears somewhere in @code{X}, then @code{X} will be substituted once 10216for each matching switch, with the @code{%*} replaced by the part of 10217that switch that matched the @code{*}. 10218 10219@item %@{.@code{S}:@code{X}@} 10220Substitutes @code{X}, if processing a file with suffix @code{S}. 10221 10222@item %@{!.@code{S}:@code{X}@} 10223Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}. 10224 10225@item %@{,@code{S}:@code{X}@} 10226Substitutes @code{X}, if processing a file for language @code{S}. 10227 10228@item %@{!,@code{S}:@code{X}@} 10229Substitutes @code{X}, if not processing a file for language @code{S}. 10230 10231@item %@{@code{S}|@code{P}:@code{X}@} 10232Substitutes @code{X} if either @code{-S} or @code{-P} was given to 10233GCC@. This may be combined with @samp{!}, @samp{.}, @samp{,}, and 10234@code{*} sequences as well, although they have a stronger binding than 10235the @samp{|}. If @code{%*} appears in @code{X}, all of the 10236alternatives must be starred, and only the first matching alternative 10237is substituted. 10238 10239For example, a spec string like this: 10240 10241@smallexample 10242%@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@} 10243@end smallexample 10244 10245will output the following command-line options from the following input 10246command-line options: 10247 10248@smallexample 10249fred.c -foo -baz 10250jim.d -bar -boggle 10251-d fred.c -foo -baz -boggle 10252-d jim.d -bar -baz -boggle 10253@end smallexample 10254 10255@item %@{S:X; T:Y; :D@} 10256 10257If @code{S} was given to GCC, substitutes @code{X}; else if @code{T} was 10258given to GCC, substitutes @code{Y}; else substitutes @code{D}. There can 10259be as many clauses as you need. This may be combined with @code{.}, 10260@code{,}, @code{!}, @code{|}, and @code{*} as needed. 10261 10262 10263@end table 10264 10265The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar 10266construct may contain other nested @samp{%} constructs or spaces, or 10267even newlines. They are processed as usual, as described above. 10268Trailing white space in @code{X} is ignored. White space may also 10269appear anywhere on the left side of the colon in these constructs, 10270except between @code{.} or @code{*} and the corresponding word. 10271 10272The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are 10273handled specifically in these constructs. If another value of 10274@option{-O} or the negated form of a @option{-f}, @option{-m}, or 10275@option{-W} switch is found later in the command line, the earlier 10276switch value is ignored, except with @{@code{S}*@} where @code{S} is 10277just one letter, which passes all matching options. 10278 10279The character @samp{|} at the beginning of the predicate text is used to 10280indicate that a command should be piped to the following command, but 10281only if @option{-pipe} is specified. 10282 10283It is built into GCC which switches take arguments and which do not. 10284(You might think it would be useful to generalize this to allow each 10285compiler's spec to say which switches take arguments. But this cannot 10286be done in a consistent fashion. GCC cannot even decide which input 10287files have been specified without knowing which switches take arguments, 10288and it must know which input files to compile in order to tell which 10289compilers to run). 10290 10291GCC also knows implicitly that arguments starting in @option{-l} are to be 10292treated as compiler output files, and passed to the linker in their 10293proper position among the other output files. 10294 10295@c man begin OPTIONS 10296 10297@node Target Options 10298@section Specifying Target Machine and Compiler Version 10299@cindex target options 10300@cindex cross compiling 10301@cindex specifying machine version 10302@cindex specifying compiler version and target machine 10303@cindex compiler version, specifying 10304@cindex target machine, specifying 10305 10306The usual way to run GCC is to run the executable called @command{gcc}, or 10307@command{@var{machine}-gcc} when cross-compiling, or 10308@command{@var{machine}-gcc-@var{version}} to run a version other than the 10309one that was installed last. 10310 10311@node Submodel Options 10312@section Hardware Models and Configurations 10313@cindex submodel options 10314@cindex specifying hardware config 10315@cindex hardware models and configurations, specifying 10316@cindex machine dependent options 10317 10318Each target machine types can have its own 10319special options, starting with @samp{-m}, to choose among various 10320hardware models or configurations---for example, 68010 vs 68020, 10321floating coprocessor or none. A single installed version of the 10322compiler can compile for any model or configuration, according to the 10323options specified. 10324 10325Some configurations of the compiler also support additional special 10326options, usually for compatibility with other compilers on the same 10327platform. 10328 10329@c This list is ordered alphanumerically by subsection name. 10330@c It should be the same order and spelling as these options are listed 10331@c in Machine Dependent Options 10332 10333@menu 10334* Adapteva Epiphany Options:: 10335* ARM Options:: 10336* AVR Options:: 10337* Blackfin Options:: 10338* C6X Options:: 10339* CRIS Options:: 10340* CR16 Options:: 10341* Darwin Options:: 10342* DEC Alpha Options:: 10343* DEC Alpha/VMS Options:: 10344* FR30 Options:: 10345* FRV Options:: 10346* GNU/Linux Options:: 10347* H8/300 Options:: 10348* HPPA Options:: 10349* i386 and x86-64 Options:: 10350* i386 and x86-64 Windows Options:: 10351* IA-64 Options:: 10352* IA-64/VMS Options:: 10353* LM32 Options:: 10354* M32C Options:: 10355* M32R/D Options:: 10356* M680x0 Options:: 10357* MCore Options:: 10358* MeP Options:: 10359* MicroBlaze Options:: 10360* MIPS Options:: 10361* MMIX Options:: 10362* MN10300 Options:: 10363* PDP-11 Options:: 10364* picoChip Options:: 10365* PowerPC Options:: 10366* RL78 Options:: 10367* RS/6000 and PowerPC Options:: 10368* RX Options:: 10369* S/390 and zSeries Options:: 10370* Score Options:: 10371* SH Options:: 10372* Solaris 2 Options:: 10373* SPARC Options:: 10374* SPU Options:: 10375* System V Options:: 10376* TILE-Gx Options:: 10377* TILEPro Options:: 10378* V850 Options:: 10379* VAX Options:: 10380* VxWorks Options:: 10381* x86-64 Options:: 10382* Xstormy16 Options:: 10383* Xtensa Options:: 10384* zSeries Options:: 10385@end menu 10386 10387@node Adapteva Epiphany Options 10388@subsection Adapteva Epiphany Options 10389 10390These @samp{-m} options are defined for Adapteva Epiphany: 10391 10392@table @gcctabopt 10393@item -mhalf-reg-file 10394@opindex mhalf-reg-file 10395Don't allocate any register in the range @code{r32}@dots{}@code{r63}. 10396That allows code to run on hardware variants that lack these registers. 10397 10398@item -mprefer-short-insn-regs 10399@opindex mprefer-short-insn-regs 10400Preferrentially allocate registers that allow short instruction generation. 10401This can result in increasesd instruction count, so if this reduces or 10402increases code size might vary from case to case. 10403 10404@item -mbranch-cost=@var{num} 10405@opindex mbranch-cost 10406Set the cost of branches to roughly @var{num} ``simple'' instructions. 10407This cost is only a heuristic and is not guaranteed to produce 10408consistent results across releases. 10409 10410@item -mcmove 10411@opindex mcmove 10412Enable the generation of conditional moves. 10413 10414@item -mnops=@var{num} 10415@opindex mnops 10416Emit @var{num} nops before every other generated instruction. 10417 10418@item -mno-soft-cmpsf 10419@opindex mno-soft-cmpsf 10420For single-precision floating-point comparisons, emit an fsub instruction 10421and test the flags. This is faster than a software comparison, but can 10422get incorrect results in the presence of NaNs, or when two different small 10423numbers are compared such that their difference is calculated as zero. 10424The default is @option{-msoft-cmpsf}, which uses slower, but IEEE-compliant, 10425software comparisons. 10426 10427@item -mstack-offset=@var{num} 10428@opindex mstack-offset 10429Set the offset between the top of the stack and the stack pointer. 10430E.g., a value of 8 means that the eight bytes in the range sp+0@dots{}sp+7 10431can be used by leaf functions without stack allocation. 10432Values other than @samp{8} or @samp{16} are untested and unlikely to work. 10433Note also that this option changes the ABI, compiling a program with a 10434different stack offset than the libraries have been compiled with 10435will generally not work. 10436This option can be useful if you want to evaluate if a different stack 10437offset would give you better code, but to actually use a different stack 10438offset to build working programs, it is recommended to configure the 10439toolchain with the appropriate @samp{--with-stack-offset=@var{num}} option. 10440 10441@item -mno-round-nearest 10442@opindex mno-round-nearest 10443Make the scheduler assume that the rounding mode has been set to 10444truncating. The default is @option{-mround-nearest}. 10445 10446@item -mlong-calls 10447@opindex mlong-calls 10448If not otherwise specified by an attribute, assume all calls might be beyond 10449the offset range of the b / bl instructions, and therefore load the 10450function address into a register before performing a (otherwise direct) call. 10451This is the default. 10452 10453@item -mshort-calls 10454@opindex short-calls 10455If not otherwise specified by an attribute, assume all direct calls are 10456in the range of the b / bl instructions, so use these instructions 10457for direct calls. The default is @option{-mlong-calls}. 10458 10459@item -msmall16 10460@opindex msmall16 10461Assume addresses can be loaded as 16-bit unsigned values. This does not 10462apply to function addresses for which @option{-mlong-calls} semantics 10463are in effect. 10464 10465@item -mfp-mode=@var{mode} 10466@opindex mfp-mode 10467Set the prevailing mode of the floating-point unit. 10468This determines the floating-point mode that is provided and expected 10469at function call and return time. Making this mode match the mode you 10470predominantly need at function start can make your programs smaller and 10471faster by avoiding unnecessary mode switches. 10472 10473@var{mode} can be set to one the following values: 10474 10475@table @samp 10476@item caller 10477Any mode at function entry is valid, and retained or restored when 10478the function returns, and when it calls other functions. 10479This mode is useful for compiling libraries or other compilation units 10480you might want to incorporate into different programs with different 10481prevailing FPU modes, and the convenience of being able to use a single 10482object file outweighs the size and speed overhead for any extra 10483mode switching that might be needed, compared with what would be needed 10484with a more specific choice of prevailing FPU mode. 10485 10486@item truncate 10487This is the mode used for floating-point calculations with 10488truncating (i.e.@: round towards zero) rounding mode. That includes 10489conversion from floating point to integer. 10490 10491@item round-nearest 10492This is the mode used for floating-point calculations with 10493round-to-nearest-or-even rounding mode. 10494 10495@item int 10496This is the mode used to perform integer calculations in the FPU, e.g.@: 10497integer multiply, or integer multiply-and-accumulate. 10498@end table 10499 10500The default is @option{-mfp-mode=caller} 10501 10502@item -mnosplit-lohi 10503@opindex mnosplit-lohi 10504@item -mno-postinc 10505@opindex mno-postinc 10506@item -mno-postmodify 10507@opindex mno-postmodify 10508Code generation tweaks that disable, respectively, splitting of 32-bit 10509loads, generation of post-increment addresses, and generation of 10510post-modify addresses. The defaults are @option{msplit-lohi}, 10511@option{-mpost-inc}, and @option{-mpost-modify}. 10512 10513@item -mnovect-double 10514@opindex mno-vect-double 10515Change the preferred SIMD mode to SImode. The default is 10516@option{-mvect-double}, which uses DImode as preferred SIMD mode. 10517 10518@item -max-vect-align=@var{num} 10519@opindex max-vect-align 10520The maximum alignment for SIMD vector mode types. 10521@var{num} may be 4 or 8. The default is 8. 10522Note that this is an ABI change, even though many library function 10523interfaces will be unaffected, if they don't use SIMD vector modes 10524in places where they affect size and/or alignment of relevant types. 10525 10526@item -msplit-vecmove-early 10527@opindex msplit-vecmove-early 10528Split vector moves into single word moves before reload. In theory this 10529could give better register allocation, but so far the reverse seems to be 10530generally the case. 10531 10532@item -m1reg-@var{reg} 10533@opindex m1reg- 10534Specify a register to hold the constant @minus{}1, which makes loading small negative 10535constants and certain bitmasks faster. 10536Allowable values for reg are r43 and r63, which specify to use that register 10537as a fixed register, and none, which means that no register is used for this 10538purpose. The default is @option{-m1reg-none}. 10539 10540@end table 10541 10542@node ARM Options 10543@subsection ARM Options 10544@cindex ARM options 10545 10546These @samp{-m} options are defined for Advanced RISC Machines (ARM) 10547architectures: 10548 10549@table @gcctabopt 10550@item -mabi=@var{name} 10551@opindex mabi 10552Generate code for the specified ABI@. Permissible values are: @samp{apcs-gnu}, 10553@samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}. 10554 10555@item -mapcs-frame 10556@opindex mapcs-frame 10557Generate a stack frame that is compliant with the ARM Procedure Call 10558Standard for all functions, even if this is not strictly necessary for 10559correct execution of the code. Specifying @option{-fomit-frame-pointer} 10560with this option will cause the stack frames not to be generated for 10561leaf functions. The default is @option{-mno-apcs-frame}. 10562 10563@item -mapcs 10564@opindex mapcs 10565This is a synonym for @option{-mapcs-frame}. 10566 10567@ignore 10568@c not currently implemented 10569@item -mapcs-stack-check 10570@opindex mapcs-stack-check 10571Generate code to check the amount of stack space available upon entry to 10572every function (that actually uses some stack space). If there is 10573insufficient space available then either the function 10574@samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be 10575called, depending upon the amount of stack space required. The runtime 10576system is required to provide these functions. The default is 10577@option{-mno-apcs-stack-check}, since this produces smaller code. 10578 10579@c not currently implemented 10580@item -mapcs-float 10581@opindex mapcs-float 10582Pass floating-point arguments using the floating-point registers. This is 10583one of the variants of the APCS@. This option is recommended if the 10584target hardware has a floating-point unit or if a lot of floating-point 10585arithmetic is going to be performed by the code. The default is 10586@option{-mno-apcs-float}, since integer only code is slightly increased in 10587size if @option{-mapcs-float} is used. 10588 10589@c not currently implemented 10590@item -mapcs-reentrant 10591@opindex mapcs-reentrant 10592Generate reentrant, position independent code. The default is 10593@option{-mno-apcs-reentrant}. 10594@end ignore 10595 10596@item -mthumb-interwork 10597@opindex mthumb-interwork 10598Generate code that supports calling between the ARM and Thumb 10599instruction sets. Without this option, on pre-v5 architectures, the 10600two instruction sets cannot be reliably used inside one program. The 10601default is @option{-mno-thumb-interwork}, since slightly larger code 10602is generated when @option{-mthumb-interwork} is specified. In AAPCS 10603configurations this option is meaningless. 10604 10605@item -mno-sched-prolog 10606@opindex mno-sched-prolog 10607Prevent the reordering of instructions in the function prologue, or the 10608merging of those instruction with the instructions in the function's 10609body. This means that all functions will start with a recognizable set 10610of instructions (or in fact one of a choice from a small set of 10611different function prologues), and this information can be used to 10612locate the start if functions inside an executable piece of code. The 10613default is @option{-msched-prolog}. 10614 10615@item -mfloat-abi=@var{name} 10616@opindex mfloat-abi 10617Specifies which floating-point ABI to use. Permissible values 10618are: @samp{soft}, @samp{softfp} and @samp{hard}. 10619 10620Specifying @samp{soft} causes GCC to generate output containing 10621library calls for floating-point operations. 10622@samp{softfp} allows the generation of code using hardware floating-point 10623instructions, but still uses the soft-float calling conventions. 10624@samp{hard} allows generation of floating-point instructions 10625and uses FPU-specific calling conventions. 10626 10627The default depends on the specific target configuration. Note that 10628the hard-float and soft-float ABIs are not link-compatible; you must 10629compile your entire program with the same ABI, and link with a 10630compatible set of libraries. 10631 10632@item -mlittle-endian 10633@opindex mlittle-endian 10634Generate code for a processor running in little-endian mode. This is 10635the default for all standard configurations. 10636 10637@item -mbig-endian 10638@opindex mbig-endian 10639Generate code for a processor running in big-endian mode; the default is 10640to compile code for a little-endian processor. 10641 10642@item -mwords-little-endian 10643@opindex mwords-little-endian 10644This option only applies when generating code for big-endian processors. 10645Generate code for a little-endian word order but a big-endian byte 10646order. That is, a byte order of the form @samp{32107654}. Note: this 10647option should only be used if you require compatibility with code for 10648big-endian ARM processors generated by versions of the compiler prior to 106492.8. This option is now deprecated. 10650 10651@item -march=@var{name} 10652@opindex march 10653This specifies the name of the target ARM architecture. GCC uses this 10654name to determine what kind of instructions it can emit when generating 10655assembly code. This option can be used in conjunction with or instead 10656of the @option{-mcpu=} option. Permissible names are: @samp{armv2}, 10657@samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t}, 10658@samp{armv5}, @samp{armv5t}, @samp{armv5e}, @samp{armv5te}, 10659@samp{armv6}, @samp{armv6j}, 10660@samp{armv6t2}, @samp{armv6z}, @samp{armv6zk}, @samp{armv6-m}, 10661@samp{armv7}, @samp{armv7-a}, @samp{armv7-r}, @samp{armv7-m}, @samp{armv7e-m}, 10662@samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}. 10663 10664@option{-march=native} causes the compiler to auto-detect the architecture 10665of the build computer. At present, this feature is only supported on 10666Linux, and not all architectures are recognized. If the auto-detect is 10667unsuccessful the option has no effect. 10668 10669@item -mtune=@var{name} 10670@opindex mtune 10671This option specifies the name of the target ARM processor for 10672which GCC should tune the performance of the code. 10673For some ARM implementations better performance can be obtained by using 10674this option. 10675Permissible names are: @samp{arm2}, @samp{arm250}, 10676@samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610}, 10677@samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm}, 10678@samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700}, 10679@samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100}, 10680@samp{arm720}, 10681@samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s}, 10682@samp{arm710t}, @samp{arm720t}, @samp{arm740t}, 10683@samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100}, 10684@samp{strongarm1110}, 10685@samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920}, 10686@samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s}, 10687@samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi}, 10688@samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s}, 10689@samp{arm10e}, @samp{arm1020e}, @samp{arm1022e}, 10690@samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp}, 10691@samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s}, 10692@samp{cortex-a5}, @samp{cortex-a7}, @samp{cortex-a8}, @samp{cortex-a9}, 10693@samp{cortex-a15}, @samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-r5}, 10694@samp{cortex-m4}, @samp{cortex-m3}, 10695@samp{cortex-m1}, 10696@samp{cortex-m0}, 10697@samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}, 10698@samp{fa526}, @samp{fa626}, 10699@samp{fa606te}, @samp{fa626te}, @samp{fmp626}, @samp{fa726te}. 10700 10701@option{-mtune=generic-@var{arch}} specifies that GCC should tune the 10702performance for a blend of processors within architecture @var{arch}. 10703The aim is to generate code that run well on the current most popular 10704processors, balancing between optimizations that benefit some CPUs in the 10705range, and avoiding performance pitfalls of other CPUs. The effects of 10706this option may change in future GCC versions as CPU models come and go. 10707 10708@option{-mtune=native} causes the compiler to auto-detect the CPU 10709of the build computer. At present, this feature is only supported on 10710Linux, and not all architectures are recognized. If the auto-detect is 10711unsuccessful the option has no effect. 10712 10713@item -mcpu=@var{name} 10714@opindex mcpu 10715This specifies the name of the target ARM processor. GCC uses this name 10716to derive the name of the target ARM architecture (as if specified 10717by @option{-march}) and the ARM processor type for which to tune for 10718performance (as if specified by @option{-mtune}). Where this option 10719is used in conjunction with @option{-march} or @option{-mtune}, 10720those options take precedence over the appropriate part of this option. 10721 10722Permissible names for this option are the same as those for 10723@option{-mtune}. 10724 10725@option{-mcpu=generic-@var{arch}} is also permissible, and is 10726equivalent to @option{-march=@var{arch} -mtune=generic-@var{arch}}. 10727See @option{-mtune} for more information. 10728 10729@option{-mcpu=native} causes the compiler to auto-detect the CPU 10730of the build computer. At present, this feature is only supported on 10731Linux, and not all architectures are recognized. If the auto-detect is 10732unsuccessful the option has no effect. 10733 10734@item -mfpu=@var{name} 10735@itemx -mfpe=@var{number} 10736@itemx -mfp=@var{number} 10737@opindex mfpu 10738@opindex mfpe 10739@opindex mfp 10740This specifies what floating-point hardware (or hardware emulation) is 10741available on the target. Permissible names are: @samp{fpa}, @samp{fpe2}, 10742@samp{fpe3}, @samp{maverick}, @samp{vfp}, @samp{vfpv3}, @samp{vfpv3-fp16}, 10743@samp{vfpv3-d16}, @samp{vfpv3-d16-fp16}, @samp{vfpv3xd}, @samp{vfpv3xd-fp16}, 10744@samp{neon}, @samp{neon-fp16}, @samp{vfpv4}, @samp{vfpv4-d16}, 10745@samp{fpv4-sp-d16} and @samp{neon-vfpv4}. 10746@option{-mfp} and @option{-mfpe} are synonyms for 10747@option{-mfpu}=@samp{fpe}@var{number}, for compatibility with older versions 10748of GCC@. 10749 10750If @option{-msoft-float} is specified this specifies the format of 10751floating-point values. 10752 10753If the selected floating-point hardware includes the NEON extension 10754(e.g. @option{-mfpu}=@samp{neon}), note that floating-point 10755operations will not be used by GCC's auto-vectorization pass unless 10756@option{-funsafe-math-optimizations} is also specified. This is 10757because NEON hardware does not fully implement the IEEE 754 standard for 10758floating-point arithmetic (in particular denormal values are treated as 10759zero), so the use of NEON instructions may lead to a loss of precision. 10760 10761@item -mfp16-format=@var{name} 10762@opindex mfp16-format 10763Specify the format of the @code{__fp16} half-precision floating-point type. 10764Permissible names are @samp{none}, @samp{ieee}, and @samp{alternative}; 10765the default is @samp{none}, in which case the @code{__fp16} type is not 10766defined. @xref{Half-Precision}, for more information. 10767 10768@item -mstructure-size-boundary=@var{n} 10769@opindex mstructure-size-boundary 10770The size of all structures and unions will be rounded up to a multiple 10771of the number of bits set by this option. Permissible values are 8, 32 10772and 64. The default value varies for different toolchains. For the COFF 10773targeted toolchain the default value is 8. A value of 64 is only allowed 10774if the underlying ABI supports it. 10775 10776Specifying the larger number can produce faster, more efficient code, but 10777can also increase the size of the program. Different values are potentially 10778incompatible. Code compiled with one value cannot necessarily expect to 10779work with code or libraries compiled with another value, if they exchange 10780information using structures or unions. 10781 10782@item -mabort-on-noreturn 10783@opindex mabort-on-noreturn 10784Generate a call to the function @code{abort} at the end of a 10785@code{noreturn} function. It will be executed if the function tries to 10786return. 10787 10788@item -mlong-calls 10789@itemx -mno-long-calls 10790@opindex mlong-calls 10791@opindex mno-long-calls 10792Tells the compiler to perform function calls by first loading the 10793address of the function into a register and then performing a subroutine 10794call on this register. This switch is needed if the target function 10795will lie outside of the 64 megabyte addressing range of the offset based 10796version of subroutine call instruction. 10797 10798Even if this switch is enabled, not all function calls will be turned 10799into long calls. The heuristic is that static functions, functions 10800that have the @samp{short-call} attribute, functions that are inside 10801the scope of a @samp{#pragma no_long_calls} directive and functions whose 10802definitions have already been compiled within the current compilation 10803unit, will not be turned into long calls. The exception to this rule is 10804that weak function definitions, functions with the @samp{long-call} 10805attribute or the @samp{section} attribute, and functions that are within 10806the scope of a @samp{#pragma long_calls} directive, will always be 10807turned into long calls. 10808 10809This feature is not enabled by default. Specifying 10810@option{-mno-long-calls} will restore the default behavior, as will 10811placing the function calls within the scope of a @samp{#pragma 10812long_calls_off} directive. Note these switches have no effect on how 10813the compiler generates code to handle function calls via function 10814pointers. 10815 10816@item -msingle-pic-base 10817@opindex msingle-pic-base 10818Treat the register used for PIC addressing as read-only, rather than 10819loading it in the prologue for each function. The runtime system is 10820responsible for initializing this register with an appropriate value 10821before execution begins. 10822 10823@item -mpic-register=@var{reg} 10824@opindex mpic-register 10825Specify the register to be used for PIC addressing. The default is R10 10826unless stack-checking is enabled, when R9 is used. 10827 10828@item -mcirrus-fix-invalid-insns 10829@opindex mcirrus-fix-invalid-insns 10830@opindex mno-cirrus-fix-invalid-insns 10831Insert NOPs into the instruction stream to in order to work around 10832problems with invalid Maverick instruction combinations. This option 10833is only valid if the @option{-mcpu=ep9312} option has been used to 10834enable generation of instructions for the Cirrus Maverick floating-point 10835co-processor. This option is not enabled by default, since the 10836problem is only present in older Maverick implementations. The default 10837can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns} 10838switch. 10839 10840@item -mpoke-function-name 10841@opindex mpoke-function-name 10842Write the name of each function into the text section, directly 10843preceding the function prologue. The generated code is similar to this: 10844 10845@smallexample 10846 t0 10847 .ascii "arm_poke_function_name", 0 10848 .align 10849 t1 10850 .word 0xff000000 + (t1 - t0) 10851 arm_poke_function_name 10852 mov ip, sp 10853 stmfd sp!, @{fp, ip, lr, pc@} 10854 sub fp, ip, #4 10855@end smallexample 10856 10857When performing a stack backtrace, code can inspect the value of 10858@code{pc} stored at @code{fp + 0}. If the trace function then looks at 10859location @code{pc - 12} and the top 8 bits are set, then we know that 10860there is a function name embedded immediately preceding this location 10861and has length @code{((pc[-3]) & 0xff000000)}. 10862 10863@item -mthumb 10864@itemx -marm 10865@opindex marm 10866@opindex mthumb 10867 10868Select between generating code that executes in ARM and Thumb 10869states. The default for most configurations is to generate code 10870that executes in ARM state, but the default can be changed by 10871configuring GCC with the @option{--with-mode=}@var{state} 10872configure option. 10873 10874@item -mtpcs-frame 10875@opindex mtpcs-frame 10876Generate a stack frame that is compliant with the Thumb Procedure Call 10877Standard for all non-leaf functions. (A leaf function is one that does 10878not call any other functions.) The default is @option{-mno-tpcs-frame}. 10879 10880@item -mtpcs-leaf-frame 10881@opindex mtpcs-leaf-frame 10882Generate a stack frame that is compliant with the Thumb Procedure Call 10883Standard for all leaf functions. (A leaf function is one that does 10884not call any other functions.) The default is @option{-mno-apcs-leaf-frame}. 10885 10886@item -mcallee-super-interworking 10887@opindex mcallee-super-interworking 10888Gives all externally visible functions in the file being compiled an ARM 10889instruction set header which switches to Thumb mode before executing the 10890rest of the function. This allows these functions to be called from 10891non-interworking code. This option is not valid in AAPCS configurations 10892because interworking is enabled by default. 10893 10894@item -mcaller-super-interworking 10895@opindex mcaller-super-interworking 10896Allows calls via function pointers (including virtual functions) to 10897execute correctly regardless of whether the target code has been 10898compiled for interworking or not. There is a small overhead in the cost 10899of executing a function pointer if this option is enabled. This option 10900is not valid in AAPCS configurations because interworking is enabled 10901by default. 10902 10903@item -mtp=@var{name} 10904@opindex mtp 10905Specify the access model for the thread local storage pointer. The valid 10906models are @option{soft}, which generates calls to @code{__aeabi_read_tp}, 10907@option{cp15}, which fetches the thread pointer from @code{cp15} directly 10908(supported in the arm6k architecture), and @option{auto}, which uses the 10909best available method for the selected processor. The default setting is 10910@option{auto}. 10911 10912@item -mtls-dialect=@var{dialect} 10913@opindex mtls-dialect 10914Specify the dialect to use for accessing thread local storage. Two 10915dialects are supported --- @option{gnu} and @option{gnu2}. The 10916@option{gnu} dialect selects the original GNU scheme for supporting 10917local and global dynamic TLS models. The @option{gnu2} dialect 10918selects the GNU descriptor scheme, which provides better performance 10919for shared libraries. The GNU descriptor scheme is compatible with 10920the original scheme, but does require new assembler, linker and 10921library support. Initial and local exec TLS models are unaffected by 10922this option and always use the original scheme. 10923 10924@item -mword-relocations 10925@opindex mword-relocations 10926Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32). 10927This is enabled by default on targets (uClinux, SymbianOS) where the runtime 10928loader imposes this restriction, and when @option{-fpic} or @option{-fPIC} 10929is specified. 10930 10931@item -mfix-cortex-m3-ldrd 10932@opindex mfix-cortex-m3-ldrd 10933Some Cortex-M3 cores can cause data corruption when @code{ldrd} instructions 10934with overlapping destination and base registers are used. This option avoids 10935generating these instructions. This option is enabled by default when 10936@option{-mcpu=cortex-m3} is specified. 10937 10938@item -munaligned-access 10939@itemx -mno-unaligned-access 10940@opindex munaligned-access 10941@opindex mno-unaligned-access 10942Enables (or disables) reading and writing of 16- and 32- bit values 10943from addresses that are not 16- or 32- bit aligned. By default 10944unaligned access is disabled for all pre-ARMv6 and all ARMv6-M 10945architectures, and enabled for all other architectures. If unaligned 10946access is not enabled then words in packed data structures will be 10947accessed a byte at a time. 10948 10949The ARM attribute @code{Tag_CPU_unaligned_access} will be set in the 10950generated object file to either true or false, depending upon the 10951setting of this option. If unaligned access is enabled then the 10952preprocessor symbol @code{__ARM_FEATURE_UNALIGNED} will also be 10953defined. 10954 10955@end table 10956 10957@node AVR Options 10958@subsection AVR Options 10959@cindex AVR Options 10960 10961@table @gcctabopt 10962@item -mmcu=@var{mcu} 10963@opindex mmcu 10964Specify Atmel AVR instruction set architectures (ISA) or MCU type. 10965 10966The default for this option is@tie{}@code{avr2}. 10967 10968GCC supports the following AVR devices and ISAs: 10969 10970@table @code 10971 10972@item avr2 10973``Classic'' devices with up to 8@tie{}KiB of program memory. 10974@*@var{mcu}@tie{}= @code{attiny22}, @code{attiny26}, @code{at90c8534}, 10975@code{at90s2313}, @code{at90s2323}, @code{at90s2333}, 10976@code{at90s2343}, @code{at90s4414}, @code{at90s4433}, 10977@code{at90s4434}, @code{at90s8515}, @code{at90s8535}. 10978 10979@item avr25 10980``Classic'' devices with up to 8@tie{}KiB of program memory and with 10981the @code{MOVW} instruction. 10982@*@var{mcu}@tie{}= @code{ata6289}, @code{attiny13}, @code{attiny13a}, 10983@code{attiny2313}, @code{attiny2313a}, @code{attiny24}, 10984@code{attiny24a}, @code{attiny25}, @code{attiny261}, 10985@code{attiny261a}, @code{attiny43u}, @code{attiny4313}, 10986@code{attiny44}, @code{attiny44a}, @code{attiny45}, @code{attiny461}, 10987@code{attiny461a}, @code{attiny48}, @code{attiny84}, @code{attiny84a}, 10988@code{attiny85}, @code{attiny861}, @code{attiny861a}, @code{attiny87}, 10989@code{attiny88}, @code{at86rf401}. 10990 10991@item avr3 10992``Classic'' devices with 16@tie{}KiB up to 64@tie{}KiB of program memory. 10993@*@var{mcu}@tie{}= @code{at43usb355}, @code{at76c711}. 10994 10995@item avr31 10996``Classic'' devices with 128@tie{}KiB of program memory. 10997@*@var{mcu}@tie{}= @code{atmega103}, @code{at43usb320}. 10998 10999@item avr35 11000``Classic'' devices with 16@tie{}KiB up to 64@tie{}KiB of program 11001memory and with the @code{MOVW} instruction. 11002@*@var{mcu}@tie{}= @code{atmega16u2}, @code{atmega32u2}, 11003@code{atmega8u2}, @code{attiny167}, @code{at90usb162}, 11004@code{at90usb82}. 11005 11006@item avr4 11007``Enhanced'' devices with up to 8@tie{}KiB of program memory. 11008@*@var{mcu}@tie{}= @code{atmega48}, @code{atmega48a}, 11009@code{atmega48p}, @code{atmega8}, @code{atmega8hva}, 11010@code{atmega8515}, @code{atmega8535}, @code{atmega88}, 11011@code{atmega88a}, @code{atmega88p}, @code{atmega88pa}, 11012@code{at90pwm1}, @code{at90pwm2}, @code{at90pwm2b}, @code{at90pwm3}, 11013@code{at90pwm3b}, @code{at90pwm81}. 11014 11015@item avr5 11016``Enhanced'' devices with 16@tie{}KiB up to 64@tie{}KiB of program memory. 11017@*@var{mcu}@tie{}= @code{atmega16}, @code{atmega16a}, 11018@code{atmega16hva}, @code{atmega16hva2}, @code{atmega16hvb}, 11019@code{atmega16m1}, @code{atmega16u4}, @code{atmega161}, 11020@code{atmega162}, @code{atmega163}, @code{atmega164a}, 11021@code{atmega164p}, @code{atmega165}, @code{atmega165a}, 11022@code{atmega165p}, @code{atmega168}, @code{atmega168a}, 11023@code{atmega168p}, @code{atmega169}, @code{atmega169a}, 11024@code{atmega169p}, @code{atmega169pa}, @code{atmega32}, 11025@code{atmega32c1}, @code{atmega32hvb}, @code{atmega32m1}, 11026@code{atmega32u4}, @code{atmega32u6}, @code{atmega323}, 11027@code{atmega324a}, @code{atmega324p}, @code{atmega324pa}, 11028@code{atmega325}, @code{atmega325a}, @code{atmega325p}, 11029@code{atmega3250}, @code{atmega3250a}, @code{atmega3250p}, 11030@code{atmega328}, @code{atmega328p}, @code{atmega329}, 11031@code{atmega329a}, @code{atmega329p}, @code{atmega329pa}, 11032@code{atmega3290}, @code{atmega3290a}, @code{atmega3290p}, 11033@code{atmega406}, @code{atmega64}, @code{atmega64c1}, 11034@code{atmega64hve}, @code{atmega64m1}, @code{atmega640}, 11035@code{atmega644}, @code{atmega644a}, @code{atmega644p}, 11036@code{atmega644pa}, @code{atmega645}, @code{atmega645a}, 11037@code{atmega645p}, @code{atmega6450}, @code{atmega6450a}, 11038@code{atmega6450p}, @code{atmega649}, @code{atmega649a}, 11039@code{atmega649p}, @code{atmega6490}, @code{at90can32}, 11040@code{at90can64}, @code{at90pwm216}, @code{at90pwm316}, 11041@code{at90scr100}, @code{at90usb646}, @code{at90usb647}, @code{at94k}, 11042@code{m3000}. 11043 11044@item avr51 11045``Enhanced'' devices with 128@tie{}KiB of program memory. 11046@*@var{mcu}@tie{}= @code{atmega128}, @code{atmega128rfa1}, 11047@code{atmega1280}, @code{atmega1281}, @code{atmega1284p}, 11048@code{at90can128}, @code{at90usb1286}, @code{at90usb1287}. 11049 11050@item avr6 11051``Enhanced'' devices with 3-byte PC, i.e.@: with more than 11052128@tie{}KiB of program memory. 11053@*@var{mcu}@tie{}= @code{atmega2560}, @code{atmega2561}. 11054 11055@item avrxmega2 11056``XMEGA'' devices with more than 8@tie{}KiB and up to 64@tie{}KiB of 11057program memory. 11058@*@var{mcu}@tie{}= @code{atxmega16a4}, @code{atxmega16d4}, 11059@code{atxmega16x1}, @code{atxmega32a4}, @code{atxmega32d4}, 11060@code{atxmega32x1}. 11061 11062@item avrxmega4 11063``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of 11064program memory. 11065@*@var{mcu}@tie{}= @code{atxmega64a3}, @code{atxmega64d3}. 11066 11067@item avrxmega5 11068``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of 11069program memory and more than 64@tie{}KiB of RAM. 11070@*@var{mcu}@tie{}= @code{atxmega64a1}, @code{atxmega64a1u}. 11071 11072@item avrxmega6 11073``XMEGA'' devices with more than 128@tie{}KiB of program memory. 11074@*@var{mcu}@tie{}= @code{atxmega128a3}, @code{atxmega128d3}, 11075@code{atxmega192a3}, @code{atxmega192d3}, @code{atxmega256a3}, 11076@code{atxmega256a3b}, @code{atxmega256a3bu}, @code{atxmega256d3}. 11077 11078@item avrxmega7 11079``XMEGA'' devices with more than 128@tie{}KiB of program memory and 11080more than 64@tie{}KiB of RAM. 11081@*@var{mcu}@tie{}= @code{atxmega128a1}, @code{atxmega128a1u}. 11082 11083@item avr1 11084This ISA is implemented by the minimal AVR core and supported for 11085assembler only. 11086@*@var{mcu}@tie{}= @code{attiny11}, @code{attiny12}, @code{attiny15}, 11087@code{attiny28}, @code{at90s1200}. 11088 11089@end table 11090 11091@item -maccumulate-args 11092@opindex maccumulate-args 11093Accumulate outgoing function arguments and acquire/release the needed 11094stack space for outgoing function arguments once in function 11095prologue/epilogue. Without this option, outgoing arguments are pushed 11096before calling a function and popped afterwards. 11097 11098Popping the arguments after the function call can be expensive on 11099AVR so that accumulating the stack space might lead to smaller 11100executables because arguments need not to be removed from the 11101stack after such a function call. 11102 11103This option can lead to reduced code size for functions that perform 11104several calls to functions that get their arguments on the stack like 11105calls to printf-like functions. 11106 11107@item -mbranch-cost=@var{cost} 11108@opindex mbranch-cost 11109Set the branch costs for conditional branch instructions to 11110@var{cost}. Reasonable values for @var{cost} are small, non-negative 11111integers. The default branch cost is 0. 11112 11113@item -mcall-prologues 11114@opindex mcall-prologues 11115Functions prologues/epilogues are expanded as calls to appropriate 11116subroutines. Code size is smaller. 11117 11118@item -mint8 11119@opindex mint8 11120Assume @code{int} to be 8-bit integer. This affects the sizes of all types: a 11121@code{char} is 1 byte, an @code{int} is 1 byte, a @code{long} is 2 bytes, 11122and @code{long long} is 4 bytes. Please note that this option does not 11123conform to the C standards, but it results in smaller code 11124size. 11125 11126@item -mno-interrupts 11127@opindex mno-interrupts 11128Generated code is not compatible with hardware interrupts. 11129Code size is smaller. 11130 11131@item -mrelax 11132@opindex mrelax 11133Try to replace @code{CALL} resp.@: @code{JMP} instruction by the shorter 11134@code{RCALL} resp.@: @code{RJMP} instruction if applicable. 11135Setting @code{-mrelax} just adds the @code{--relax} option to the 11136linker command line when the linker is called. 11137 11138Jump relaxing is performed by the linker because jump offsets are not 11139known before code is located. Therefore, the assembler code generated by the 11140compiler is the same, but the instructions in the executable may 11141differ from instructions in the assembler code. 11142 11143Relaxing must be turned on if linker stubs are needed, see the 11144section on @code{EIND} and linker stubs below. 11145 11146@item -mshort-calls 11147@opindex mshort-calls 11148This option has been deprecated and will be removed in GCC 4.8. 11149See @code{-mrelax} for a replacement. 11150 11151Use @code{RCALL}/@code{RJMP} instructions even on devices with 1115216@tie{}KiB or more of program memory, i.e.@: on devices that 11153have the @code{CALL} and @code{JMP} instructions. 11154 11155@item -msp8 11156@opindex msp8 11157Treat the stack pointer register as an 8-bit register, 11158i.e.@: assume the high byte of the stack pointer is zero. 11159In general, you don't need to set this option by hand. 11160 11161This option is used internally by the compiler to select and 11162build multilibs for architectures @code{avr2} and @code{avr25}. 11163These architectures mix devices with and without @code{SPH}. 11164For any setting other than @code{-mmcu=avr2} or @code{-mmcu=avr25} 11165the compiler driver will add or remove this option from the compiler 11166proper's command line, because the compiler then knows if the device 11167or architecture has an 8-bit stack pointer and thus no @code{SPH} 11168register or not. 11169 11170@item -mstrict-X 11171@opindex mstrict-X 11172Use address register @code{X} in a way proposed by the hardware. This means 11173that @code{X} is only used in indirect, post-increment or 11174pre-decrement addressing. 11175 11176Without this option, the @code{X} register may be used in the same way 11177as @code{Y} or @code{Z} which then is emulated by additional 11178instructions. 11179For example, loading a value with @code{X+const} addressing with a 11180small non-negative @code{const < 64} to a register @var{Rn} is 11181performed as 11182 11183@example 11184adiw r26, const ; X += const 11185ld @var{Rn}, X ; @var{Rn} = *X 11186sbiw r26, const ; X -= const 11187@end example 11188 11189@item -mtiny-stack 11190@opindex mtiny-stack 11191Only change the lower 8@tie{}bits of the stack pointer. 11192@end table 11193 11194@subsubsection @code{EIND} and Devices with more than 128 Ki Bytes of Flash 11195@cindex @code{EIND} 11196Pointers in the implementation are 16@tie{}bits wide. 11197The address of a function or label is represented as word address so 11198that indirect jumps and calls can target any code address in the 11199range of 64@tie{}Ki words. 11200 11201In order to facilitate indirect jump on devices with more than 128@tie{}Ki 11202bytes of program memory space, there is a special function register called 11203@code{EIND} that serves as most significant part of the target address 11204when @code{EICALL} or @code{EIJMP} instructions are used. 11205 11206Indirect jumps and calls on these devices are handled as follows by 11207the compiler and are subject to some limitations: 11208 11209@itemize @bullet 11210 11211@item 11212The compiler never sets @code{EIND}. 11213 11214@item 11215The compiler uses @code{EIND} implicitely in @code{EICALL}/@code{EIJMP} 11216instructions or might read @code{EIND} directly in order to emulate an 11217indirect call/jump by means of a @code{RET} instruction. 11218 11219@item 11220The compiler assumes that @code{EIND} never changes during the startup 11221code or during the application. In particular, @code{EIND} is not 11222saved/restored in function or interrupt service routine 11223prologue/epilogue. 11224 11225@item 11226For indirect calls to functions and computed goto, the linker 11227generates @emph{stubs}. Stubs are jump pads sometimes also called 11228@emph{trampolines}. Thus, the indirect call/jump jumps to such a stub. 11229The stub contains a direct jump to the desired address. 11230 11231@item 11232Linker relaxation must be turned on so that the linker will generate 11233the stubs correctly an all situaltion. See the compiler option 11234@code{-mrelax} and the linler option @code{--relax}. 11235There are corner cases where the linker is supposed to generate stubs 11236but aborts without relaxation and without a helpful error message. 11237 11238@item 11239The default linker script is arranged for code with @code{EIND = 0}. 11240If code is supposed to work for a setup with @code{EIND != 0}, a custom 11241linker script has to be used in order to place the sections whose 11242name start with @code{.trampolines} into the segment where @code{EIND} 11243points to. 11244 11245@item 11246The startup code from libgcc never sets @code{EIND}. 11247Notice that startup code is a blend of code from libgcc and AVR-LibC. 11248For the impact of AVR-LibC on @code{EIND}, see the 11249@w{@uref{http://nongnu.org/avr-libc/user-manual/,AVR-LibC user manual}}. 11250 11251@item 11252It is legitimate for user-specific startup code to set up @code{EIND} 11253early, for example by means of initialization code located in 11254section @code{.init3}. Such code runs prior to general startup code 11255that initializes RAM and calls constructors, but after the bit 11256of startup code from AVR-LibC that sets @code{EIND} to the segment 11257where the vector table is located. 11258@example 11259#include <avr/io.h> 11260 11261static void 11262__attribute__((section(".init3"),naked,used,no_instrument_function)) 11263init3_set_eind (void) 11264@{ 11265 __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t" 11266 "out %i0,r24" :: "n" (&EIND) : "r24","memory"); 11267@} 11268@end example 11269 11270@noindent 11271The @code{__trampolines_start} symbol is defined in the linker script. 11272 11273@item 11274Stubs are generated automatically by the linker if 11275the following two conditions are met: 11276@itemize @minus 11277 11278@item The address of a label is taken by means of the @code{gs} modifier 11279(short for @emph{generate stubs}) like so: 11280@example 11281LDI r24, lo8(gs(@var{func})) 11282LDI r25, hi8(gs(@var{func})) 11283@end example 11284@item The final location of that label is in a code segment 11285@emph{outside} the segment where the stubs are located. 11286@end itemize 11287 11288@item 11289The compiler emits such @code{gs} modifiers for code labels in the 11290following situations: 11291@itemize @minus 11292@item Taking address of a function or code label. 11293@item Computed goto. 11294@item If prologue-save function is used, see @option{-mcall-prologues} 11295command-line option. 11296@item Switch/case dispatch tables. If you do not want such dispatch 11297tables you can specify the @option{-fno-jump-tables} command-line option. 11298@item C and C++ constructors/destructors called during startup/shutdown. 11299@item If the tools hit a @code{gs()} modifier explained above. 11300@end itemize 11301 11302@item 11303Jumping to non-symbolic addresses like so is @emph{not} supported: 11304 11305@example 11306int main (void) 11307@{ 11308 /* Call function at word address 0x2 */ 11309 return ((int(*)(void)) 0x2)(); 11310@} 11311@end example 11312 11313Instead, a stub has to be set up, i.e.@: the function has to be called 11314through a symbol (@code{func_4} in the example): 11315 11316@example 11317int main (void) 11318@{ 11319 extern int func_4 (void); 11320 11321 /* Call function at byte address 0x4 */ 11322 return func_4(); 11323@} 11324@end example 11325 11326and the application be linked with @code{-Wl,--defsym,func_4=0x4}. 11327Alternatively, @code{func_4} can be defined in the linker script. 11328@end itemize 11329 11330@subsubsection Handling of the @code{RAMPD}, @code{RAMPX}, @code{RAMPY} and @code{RAMPZ} Special Function Registers 11331@cindex @code{RAMPD} 11332@cindex @code{RAMPX} 11333@cindex @code{RAMPY} 11334@cindex @code{RAMPZ} 11335Some AVR devices support memories larger than the 64@tie{}KiB range 11336that can be accessed with 16-bit pointers. To access memory locations 11337outside this 64@tie{}KiB range, the contentent of a @code{RAMP} 11338register is used as high part of the address: 11339The @code{X}, @code{Y}, @code{Z} address register is concatenated 11340with the @code{RAMPX}, @code{RAMPY}, @code{RAMPZ} special function 11341register, respectively, to get a wide address. Similarly, 11342@code{RAMPD} is used together with direct addressing. 11343 11344@itemize 11345@item 11346The startup code initializes the @code{RAMP} special function 11347registers with zero. 11348 11349@item 11350If a @ref{AVR Named Address Spaces,named address space} other than 11351generic or @code{__flash} is used, then @code{RAMPZ} is set 11352as needed before the operation. 11353 11354@item 11355If the device supports RAM larger than 64@tie{KiB} and the compiler 11356needs to change @code{RAMPZ} to accomplish an operation, @code{RAMPZ} 11357is reset to zero after the operation. 11358 11359@item 11360If the device comes with a specific @code{RAMP} register, the ISR 11361prologue/epilogue saves/restores that SFR and initializes it with 11362zero in case the ISR code might (implicitly) use it. 11363 11364@item 11365RAM larger than 64@tie{KiB} is not supported by GCC for AVR targets. 11366If you use inline assembler to read from locations outside the 1136716-bit address range and change one of the @code{RAMP} registers, 11368you must reset it to zero after the access. 11369 11370@end itemize 11371 11372@subsubsection AVR Built-in Macros 11373 11374GCC defines several built-in macros so that the user code can test 11375for the presence or absence of features. Almost any of the following 11376built-in macros are deduced from device capabilities and thus 11377triggered by the @code{-mmcu=} command-line option. 11378 11379For even more AVR-specific built-in macros see 11380@ref{AVR Named Address Spaces} and @ref{AVR Built-in Functions}. 11381 11382@table @code 11383 11384@item __AVR_ARCH__ 11385Build-in macro that resolves to a decimal number that identifies the 11386architecture and depends on the @code{-mmcu=@var{mcu}} option. 11387Possible values are: 11388 11389@code{2}, @code{25}, @code{3}, @code{31}, @code{35}, 11390@code{4}, @code{5}, @code{51}, @code{6}, @code{102}, @code{104}, 11391@code{105}, @code{106}, @code{107} 11392 11393for @var{mcu}=@code{avr2}, @code{avr25}, @code{avr3}, 11394@code{avr31}, @code{avr35}, @code{avr4}, @code{avr5}, @code{avr51}, 11395@code{avr6}, @code{avrxmega2}, @code{avrxmega4}, @code{avrxmega5}, 11396@code{avrxmega6}, @code{avrxmega7}, respectively. 11397If @var{mcu} specifies a device, this built-in macro is set 11398accordingly. For example, with @code{-mmcu=atmega8} the macro will be 11399defined to @code{4}. 11400 11401@item __AVR_@var{Device}__ 11402Setting @code{-mmcu=@var{device}} defines this built-in macro which reflects 11403the device's name. For example, @code{-mmcu=atmega8} defines the 11404built-in macro @code{__AVR_ATmega8__}, @code{-mmcu=attiny261a} defines 11405@code{__AVR_ATtiny261A__}, etc. 11406 11407The built-in macros' names follow 11408the scheme @code{__AVR_@var{Device}__} where @var{Device} is 11409the device name as from the AVR user manual. The difference between 11410@var{Device} in the built-in macro and @var{device} in 11411@code{-mmcu=@var{device}} is that the latter is always lowercase. 11412 11413If @var{device} is not a device but only a core architecture like 11414@code{avr51}, this macro will not be defined. 11415 11416@item __AVR_XMEGA__ 11417The device/architecture belongs to the XMEGA family of devices. 11418 11419@item __AVR_HAVE_ELPM__ 11420The device has the the @code{ELPM} instruction. 11421 11422@item __AVR_HAVE_ELPMX__ 11423The device has the @code{ELPM R@var{n},Z} and @code{ELPM 11424R@var{n},Z+} instructions. 11425 11426@item __AVR_HAVE_MOVW__ 11427The device has the @code{MOVW} instruction to perform 16-bit 11428register-register moves. 11429 11430@item __AVR_HAVE_LPMX__ 11431The device has the @code{LPM R@var{n},Z} and 11432@code{LPM R@var{n},Z+} instructions. 11433 11434@item __AVR_HAVE_MUL__ 11435The device has a hardware multiplier. 11436 11437@item __AVR_HAVE_JMP_CALL__ 11438The device has the @code{JMP} and @code{CALL} instructions. 11439This is the case for devices with at least 16@tie{}KiB of program 11440memory and if @code{-mshort-calls} is not set. 11441 11442@item __AVR_HAVE_EIJMP_EICALL__ 11443@item __AVR_3_BYTE_PC__ 11444The device has the @code{EIJMP} and @code{EICALL} instructions. 11445This is the case for devices with more than 128@tie{}KiB of program memory. 11446This also means that the program counter 11447(PC) is 3@tie{}bytes wide. 11448 11449@item __AVR_2_BYTE_PC__ 11450The program counter (PC) is 2@tie{}bytes wide. This is the case for devices 11451with up to 128@tie{}KiB of program memory. 11452 11453@item __AVR_HAVE_8BIT_SP__ 11454@item __AVR_HAVE_16BIT_SP__ 11455The stack pointer (SP) register is treated as 8-bit respectively 1145616-bit register by the compiler. 11457The definition of these macros is affected by @code{-mtiny-stack}. 11458 11459@item __AVR_HAVE_SPH__ 11460@item __AVR_SP8__ 11461The device has the SPH (high part of stack pointer) special function 11462register or has an 8-bit stack pointer, respectively. 11463The definition of these macros is affected by @code{-mmcu=} and 11464in the cases of @code{-mmcu=avr2} and @code{-mmcu=avr25} also 11465by @code{-msp8}. 11466 11467@item __AVR_HAVE_RAMPD__ 11468@item __AVR_HAVE_RAMPX__ 11469@item __AVR_HAVE_RAMPY__ 11470@item __AVR_HAVE_RAMPZ__ 11471The device has the @code{RAMPD}, @code{RAMPX}, @code{RAMPY}, 11472@code{RAMPZ} special function register, respectively. 11473 11474@item __NO_INTERRUPTS__ 11475This macro reflects the @code{-mno-interrupts} command line option. 11476 11477@item __AVR_ERRATA_SKIP__ 11478@item __AVR_ERRATA_SKIP_JMP_CALL__ 11479Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit 11480instructions because of a hardware erratum. Skip instructions are 11481@code{SBRS}, @code{SBRC}, @code{SBIS}, @code{SBIC} and @code{CPSE}. 11482The second macro is only defined if @code{__AVR_HAVE_JMP_CALL__} is also 11483set. 11484 11485@item __AVR_SFR_OFFSET__=@var{offset} 11486Instructions that can address I/O special function registers directly 11487like @code{IN}, @code{OUT}, @code{SBI}, etc.@: may use a different 11488address as if addressed by an instruction to access RAM like @code{LD} 11489or @code{STS}. This offset depends on the device architecture and has 11490to be subtracted from the RAM address in order to get the 11491respective I/O@tie{}address. 11492 11493@item __WITH_AVRLIBC__ 11494The compiler is configured to be used together with AVR-Libc. 11495See the @code{--with-avrlibc} configure option. 11496 11497@end table 11498 11499@node Blackfin Options 11500@subsection Blackfin Options 11501@cindex Blackfin Options 11502 11503@table @gcctabopt 11504@item -mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} 11505@opindex mcpu= 11506Specifies the name of the target Blackfin processor. Currently, @var{cpu} 11507can be one of @samp{bf512}, @samp{bf514}, @samp{bf516}, @samp{bf518}, 11508@samp{bf522}, @samp{bf523}, @samp{bf524}, @samp{bf525}, @samp{bf526}, 11509@samp{bf527}, @samp{bf531}, @samp{bf532}, @samp{bf533}, 11510@samp{bf534}, @samp{bf536}, @samp{bf537}, @samp{bf538}, @samp{bf539}, 11511@samp{bf542}, @samp{bf544}, @samp{bf547}, @samp{bf548}, @samp{bf549}, 11512@samp{bf542m}, @samp{bf544m}, @samp{bf547m}, @samp{bf548m}, @samp{bf549m}, 11513@samp{bf561}, @samp{bf592}. 11514The optional @var{sirevision} specifies the silicon revision of the target 11515Blackfin processor. Any workarounds available for the targeted silicon revision 11516will be enabled. If @var{sirevision} is @samp{none}, no workarounds are enabled. 11517If @var{sirevision} is @samp{any}, all workarounds for the targeted processor 11518will be enabled. The @code{__SILICON_REVISION__} macro is defined to two 11519hexadecimal digits representing the major and minor numbers in the silicon 11520revision. If @var{sirevision} is @samp{none}, the @code{__SILICON_REVISION__} 11521is not defined. If @var{sirevision} is @samp{any}, the 11522@code{__SILICON_REVISION__} is defined to be @code{0xffff}. 11523If this optional @var{sirevision} is not used, GCC assumes the latest known 11524silicon revision of the targeted Blackfin processor. 11525 11526Support for @samp{bf561} is incomplete. For @samp{bf561}, 11527Only the processor macro is defined. 11528Without this option, @samp{bf532} is used as the processor by default. 11529The corresponding predefined processor macros for @var{cpu} is to 11530be defined. And for @samp{bfin-elf} toolchain, this causes the hardware BSP 11531provided by libgloss to be linked in if @option{-msim} is not given. 11532 11533@item -msim 11534@opindex msim 11535Specifies that the program will be run on the simulator. This causes 11536the simulator BSP provided by libgloss to be linked in. This option 11537has effect only for @samp{bfin-elf} toolchain. 11538Certain other options, such as @option{-mid-shared-library} and 11539@option{-mfdpic}, imply @option{-msim}. 11540 11541@item -momit-leaf-frame-pointer 11542@opindex momit-leaf-frame-pointer 11543Don't keep the frame pointer in a register for leaf functions. This 11544avoids the instructions to save, set up and restore frame pointers and 11545makes an extra register available in leaf functions. The option 11546@option{-fomit-frame-pointer} removes the frame pointer for all functions, 11547which might make debugging harder. 11548 11549@item -mspecld-anomaly 11550@opindex mspecld-anomaly 11551When enabled, the compiler will ensure that the generated code does not 11552contain speculative loads after jump instructions. If this option is used, 11553@code{__WORKAROUND_SPECULATIVE_LOADS} is defined. 11554 11555@item -mno-specld-anomaly 11556@opindex mno-specld-anomaly 11557Don't generate extra code to prevent speculative loads from occurring. 11558 11559@item -mcsync-anomaly 11560@opindex mcsync-anomaly 11561When enabled, the compiler will ensure that the generated code does not 11562contain CSYNC or SSYNC instructions too soon after conditional branches. 11563If this option is used, @code{__WORKAROUND_SPECULATIVE_SYNCS} is defined. 11564 11565@item -mno-csync-anomaly 11566@opindex mno-csync-anomaly 11567Don't generate extra code to prevent CSYNC or SSYNC instructions from 11568occurring too soon after a conditional branch. 11569 11570@item -mlow-64k 11571@opindex mlow-64k 11572When enabled, the compiler is free to take advantage of the knowledge that 11573the entire program fits into the low 64k of memory. 11574 11575@item -mno-low-64k 11576@opindex mno-low-64k 11577Assume that the program is arbitrarily large. This is the default. 11578 11579@item -mstack-check-l1 11580@opindex mstack-check-l1 11581Do stack checking using information placed into L1 scratchpad memory by the 11582uClinux kernel. 11583 11584@item -mid-shared-library 11585@opindex mid-shared-library 11586Generate code that supports shared libraries via the library ID method. 11587This allows for execute in place and shared libraries in an environment 11588without virtual memory management. This option implies @option{-fPIC}. 11589With a @samp{bfin-elf} target, this option implies @option{-msim}. 11590 11591@item -mno-id-shared-library 11592@opindex mno-id-shared-library 11593Generate code that doesn't assume ID based shared libraries are being used. 11594This is the default. 11595 11596@item -mleaf-id-shared-library 11597@opindex mleaf-id-shared-library 11598Generate code that supports shared libraries via the library ID method, 11599but assumes that this library or executable won't link against any other 11600ID shared libraries. That allows the compiler to use faster code for jumps 11601and calls. 11602 11603@item -mno-leaf-id-shared-library 11604@opindex mno-leaf-id-shared-library 11605Do not assume that the code being compiled won't link against any ID shared 11606libraries. Slower code will be generated for jump and call insns. 11607 11608@item -mshared-library-id=n 11609@opindex mshared-library-id 11610Specified the identification number of the ID based shared library being 11611compiled. Specifying a value of 0 will generate more compact code, specifying 11612other values will force the allocation of that number to the current 11613library but is no more space or time efficient than omitting this option. 11614 11615@item -msep-data 11616@opindex msep-data 11617Generate code that allows the data segment to be located in a different 11618area of memory from the text segment. This allows for execute in place in 11619an environment without virtual memory management by eliminating relocations 11620against the text section. 11621 11622@item -mno-sep-data 11623@opindex mno-sep-data 11624Generate code that assumes that the data segment follows the text segment. 11625This is the default. 11626 11627@item -mlong-calls 11628@itemx -mno-long-calls 11629@opindex mlong-calls 11630@opindex mno-long-calls 11631Tells the compiler to perform function calls by first loading the 11632address of the function into a register and then performing a subroutine 11633call on this register. This switch is needed if the target function 11634lies outside of the 24-bit addressing range of the offset-based 11635version of subroutine call instruction. 11636 11637This feature is not enabled by default. Specifying 11638@option{-mno-long-calls} will restore the default behavior. Note these 11639switches have no effect on how the compiler generates code to handle 11640function calls via function pointers. 11641 11642@item -mfast-fp 11643@opindex mfast-fp 11644Link with the fast floating-point library. This library relaxes some of 11645the IEEE floating-point standard's rules for checking inputs against 11646Not-a-Number (NAN), in the interest of performance. 11647 11648@item -minline-plt 11649@opindex minline-plt 11650Enable inlining of PLT entries in function calls to functions that are 11651not known to bind locally. It has no effect without @option{-mfdpic}. 11652 11653@item -mmulticore 11654@opindex mmulticore 11655Build standalone application for multicore Blackfin processor. Proper 11656start files and link scripts will be used to support multicore. 11657This option defines @code{__BFIN_MULTICORE}. It can only be used with 11658@option{-mcpu=bf561@r{[}-@var{sirevision}@r{]}}. It can be used with 11659@option{-mcorea} or @option{-mcoreb}. If it's used without 11660@option{-mcorea} or @option{-mcoreb}, single application/dual core 11661programming model is used. In this model, the main function of Core B 11662should be named as coreb_main. If it's used with @option{-mcorea} or 11663@option{-mcoreb}, one application per core programming model is used. 11664If this option is not used, single core application programming 11665model is used. 11666 11667@item -mcorea 11668@opindex mcorea 11669Build standalone application for Core A of BF561 when using 11670one application per core programming model. Proper start files 11671and link scripts will be used to support Core A. This option 11672defines @code{__BFIN_COREA}. It must be used with @option{-mmulticore}. 11673 11674@item -mcoreb 11675@opindex mcoreb 11676Build standalone application for Core B of BF561 when using 11677one application per core programming model. Proper start files 11678and link scripts will be used to support Core B. This option 11679defines @code{__BFIN_COREB}. When this option is used, coreb_main 11680should be used instead of main. It must be used with 11681@option{-mmulticore}. 11682 11683@item -msdram 11684@opindex msdram 11685Build standalone application for SDRAM. Proper start files and 11686link scripts will be used to put the application into SDRAM. 11687Loader should initialize SDRAM before loading the application 11688into SDRAM. This option defines @code{__BFIN_SDRAM}. 11689 11690@item -micplb 11691@opindex micplb 11692Assume that ICPLBs are enabled at run time. This has an effect on certain 11693anomaly workarounds. For Linux targets, the default is to assume ICPLBs 11694are enabled; for standalone applications the default is off. 11695@end table 11696 11697@node C6X Options 11698@subsection C6X Options 11699@cindex C6X Options 11700 11701@table @gcctabopt 11702@item -march=@var{name} 11703@opindex march 11704This specifies the name of the target architecture. GCC uses this 11705name to determine what kind of instructions it can emit when generating 11706assembly code. Permissible names are: @samp{c62x}, 11707@samp{c64x}, @samp{c64x+}, @samp{c67x}, @samp{c67x+}, @samp{c674x}. 11708 11709@item -mbig-endian 11710@opindex mbig-endian 11711Generate code for a big-endian target. 11712 11713@item -mlittle-endian 11714@opindex mlittle-endian 11715Generate code for a little-endian target. This is the default. 11716 11717@item -msim 11718@opindex msim 11719Choose startup files and linker script suitable for the simulator. 11720 11721@item -msdata=default 11722@opindex msdata=default 11723Put small global and static data in the @samp{.neardata} section, 11724which is pointed to by register @code{B14}. Put small uninitialized 11725global and static data in the @samp{.bss} section, which is adjacent 11726to the @samp{.neardata} section. Put small read-only data into the 11727@samp{.rodata} section. The corresponding sections used for large 11728pieces of data are @samp{.fardata}, @samp{.far} and @samp{.const}. 11729 11730@item -msdata=all 11731@opindex msdata=all 11732Put all data, not just small objets, into the sections reserved for 11733small data, and use addressing relative to the @code{B14} register to 11734access them. 11735 11736@item -msdata=none 11737@opindex msdata=none 11738Make no use of the sections reserved for small data, and use absolute 11739addresses to access all data. Put all initialized global and static 11740data in the @samp{.fardata} section, and all uninitialized data in the 11741@samp{.far} section. Put all constant data into the @samp{.const} 11742section. 11743@end table 11744 11745@node CRIS Options 11746@subsection CRIS Options 11747@cindex CRIS Options 11748 11749These options are defined specifically for the CRIS ports. 11750 11751@table @gcctabopt 11752@item -march=@var{architecture-type} 11753@itemx -mcpu=@var{architecture-type} 11754@opindex march 11755@opindex mcpu 11756Generate code for the specified architecture. The choices for 11757@var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for 11758respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@. 11759Default is @samp{v0} except for cris-axis-linux-gnu, where the default is 11760@samp{v10}. 11761 11762@item -mtune=@var{architecture-type} 11763@opindex mtune 11764Tune to @var{architecture-type} everything applicable about the generated 11765code, except for the ABI and the set of available instructions. The 11766choices for @var{architecture-type} are the same as for 11767@option{-march=@var{architecture-type}}. 11768 11769@item -mmax-stack-frame=@var{n} 11770@opindex mmax-stack-frame 11771Warn when the stack frame of a function exceeds @var{n} bytes. 11772 11773@item -metrax4 11774@itemx -metrax100 11775@opindex metrax4 11776@opindex metrax100 11777The options @option{-metrax4} and @option{-metrax100} are synonyms for 11778@option{-march=v3} and @option{-march=v8} respectively. 11779 11780@item -mmul-bug-workaround 11781@itemx -mno-mul-bug-workaround 11782@opindex mmul-bug-workaround 11783@opindex mno-mul-bug-workaround 11784Work around a bug in the @code{muls} and @code{mulu} instructions for CPU 11785models where it applies. This option is active by default. 11786 11787@item -mpdebug 11788@opindex mpdebug 11789Enable CRIS-specific verbose debug-related information in the assembly 11790code. This option also has the effect to turn off the @samp{#NO_APP} 11791formatted-code indicator to the assembler at the beginning of the 11792assembly file. 11793 11794@item -mcc-init 11795@opindex mcc-init 11796Do not use condition-code results from previous instruction; always emit 11797compare and test instructions before use of condition codes. 11798 11799@item -mno-side-effects 11800@opindex mno-side-effects 11801Do not emit instructions with side-effects in addressing modes other than 11802post-increment. 11803 11804@item -mstack-align 11805@itemx -mno-stack-align 11806@itemx -mdata-align 11807@itemx -mno-data-align 11808@itemx -mconst-align 11809@itemx -mno-const-align 11810@opindex mstack-align 11811@opindex mno-stack-align 11812@opindex mdata-align 11813@opindex mno-data-align 11814@opindex mconst-align 11815@opindex mno-const-align 11816These options (no-options) arranges (eliminate arrangements) for the 11817stack-frame, individual data and constants to be aligned for the maximum 11818single data access size for the chosen CPU model. The default is to 11819arrange for 32-bit alignment. ABI details such as structure layout are 11820not affected by these options. 11821 11822@item -m32-bit 11823@itemx -m16-bit 11824@itemx -m8-bit 11825@opindex m32-bit 11826@opindex m16-bit 11827@opindex m8-bit 11828Similar to the stack- data- and const-align options above, these options 11829arrange for stack-frame, writable data and constants to all be 32-bit, 1183016-bit or 8-bit aligned. The default is 32-bit alignment. 11831 11832@item -mno-prologue-epilogue 11833@itemx -mprologue-epilogue 11834@opindex mno-prologue-epilogue 11835@opindex mprologue-epilogue 11836With @option{-mno-prologue-epilogue}, the normal function prologue and 11837epilogue which set up the stack frame are omitted and no return 11838instructions or return sequences are generated in the code. Use this 11839option only together with visual inspection of the compiled code: no 11840warnings or errors are generated when call-saved registers must be saved, 11841or storage for local variable needs to be allocated. 11842 11843@item -mno-gotplt 11844@itemx -mgotplt 11845@opindex mno-gotplt 11846@opindex mgotplt 11847With @option{-fpic} and @option{-fPIC}, don't generate (do generate) 11848instruction sequences that load addresses for functions from the PLT part 11849of the GOT rather than (traditional on other architectures) calls to the 11850PLT@. The default is @option{-mgotplt}. 11851 11852@item -melf 11853@opindex melf 11854Legacy no-op option only recognized with the cris-axis-elf and 11855cris-axis-linux-gnu targets. 11856 11857@item -mlinux 11858@opindex mlinux 11859Legacy no-op option only recognized with the cris-axis-linux-gnu target. 11860 11861@item -sim 11862@opindex sim 11863This option, recognized for the cris-axis-elf arranges 11864to link with input-output functions from a simulator library. Code, 11865initialized data and zero-initialized data are allocated consecutively. 11866 11867@item -sim2 11868@opindex sim2 11869Like @option{-sim}, but pass linker options to locate initialized data at 118700x40000000 and zero-initialized data at 0x80000000. 11871@end table 11872 11873@node CR16 Options 11874@subsection CR16 Options 11875@cindex CR16 Options 11876 11877These options are defined specifically for the CR16 ports. 11878 11879@table @gcctabopt 11880 11881@item -mmac 11882@opindex mmac 11883Enable the use of multiply-accumulate instructions. Disabled by default. 11884 11885@item -mcr16cplus 11886@itemx -mcr16c 11887@opindex mcr16cplus 11888@opindex mcr16c 11889Generate code for CR16C or CR16C+ architecture. CR16C+ architecture 11890is default. 11891 11892@item -msim 11893@opindex msim 11894Links the library libsim.a which is in compatible with simulator. Applicable 11895to elf compiler only. 11896 11897@item -mint32 11898@opindex mint32 11899Choose integer type as 32-bit wide. 11900 11901@item -mbit-ops 11902@opindex mbit-ops 11903Generates sbit/cbit instructions for bit manipulations. 11904 11905@item -mdata-model=@var{model} 11906@opindex mdata-model 11907Choose a data model. The choices for @var{model} are @samp{near}, 11908@samp{far} or @samp{medium}. @samp{medium} is default. 11909However, @samp{far} is not valid when -mcr16c option is chosen as 11910CR16C architecture does not support far data model. 11911@end table 11912 11913@node Darwin Options 11914@subsection Darwin Options 11915@cindex Darwin options 11916 11917These options are defined for all architectures running the Darwin operating 11918system. 11919 11920FSF GCC on Darwin does not create ``fat'' object files; it will create 11921an object file for the single architecture that it was built to 11922target. Apple's GCC on Darwin does create ``fat'' files if multiple 11923@option{-arch} options are used; it does so by running the compiler or 11924linker multiple times and joining the results together with 11925@file{lipo}. 11926 11927The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or 11928@samp{i686}) is determined by the flags that specify the ISA 11929that GCC is targetting, like @option{-mcpu} or @option{-march}. The 11930@option{-force_cpusubtype_ALL} option can be used to override this. 11931 11932The Darwin tools vary in their behavior when presented with an ISA 11933mismatch. The assembler, @file{as}, will only permit instructions to 11934be used that are valid for the subtype of the file it is generating, 11935so you cannot put 64-bit instructions in a @samp{ppc750} object file. 11936The linker for shared libraries, @file{/usr/bin/libtool}, will fail 11937and print an error if asked to create a shared library with a less 11938restrictive subtype than its input files (for instance, trying to put 11939a @samp{ppc970} object file in a @samp{ppc7400} library). The linker 11940for executables, @file{ld}, will quietly give the executable the most 11941restrictive subtype of any of its input files. 11942 11943@table @gcctabopt 11944@item -F@var{dir} 11945@opindex F 11946Add the framework directory @var{dir} to the head of the list of 11947directories to be searched for header files. These directories are 11948interleaved with those specified by @option{-I} options and are 11949scanned in a left-to-right order. 11950 11951A framework directory is a directory with frameworks in it. A 11952framework is a directory with a @samp{"Headers"} and/or 11953@samp{"PrivateHeaders"} directory contained directly in it that ends 11954in @samp{".framework"}. The name of a framework is the name of this 11955directory excluding the @samp{".framework"}. Headers associated with 11956the framework are found in one of those two directories, with 11957@samp{"Headers"} being searched first. A subframework is a framework 11958directory that is in a framework's @samp{"Frameworks"} directory. 11959Includes of subframework headers can only appear in a header of a 11960framework that contains the subframework, or in a sibling subframework 11961header. Two subframeworks are siblings if they occur in the same 11962framework. A subframework should not have the same name as a 11963framework, a warning will be issued if this is violated. Currently a 11964subframework cannot have subframeworks, in the future, the mechanism 11965may be extended to support this. The standard frameworks can be found 11966in @samp{"/System/Library/Frameworks"} and 11967@samp{"/Library/Frameworks"}. An example include looks like 11968@code{#include <Framework/header.h>}, where @samp{Framework} denotes 11969the name of the framework and header.h is found in the 11970@samp{"PrivateHeaders"} or @samp{"Headers"} directory. 11971 11972@item -iframework@var{dir} 11973@opindex iframework 11974Like @option{-F} except the directory is a treated as a system 11975directory. The main difference between this @option{-iframework} and 11976@option{-F} is that with @option{-iframework} the compiler does not 11977warn about constructs contained within header files found via 11978@var{dir}. This option is valid only for the C family of languages. 11979 11980@item -gused 11981@opindex gused 11982Emit debugging information for symbols that are used. For STABS 11983debugging format, this enables @option{-feliminate-unused-debug-symbols}. 11984This is by default ON@. 11985 11986@item -gfull 11987@opindex gfull 11988Emit debugging information for all symbols and types. 11989 11990@item -mmacosx-version-min=@var{version} 11991The earliest version of MacOS X that this executable will run on 11992is @var{version}. Typical values of @var{version} include @code{10.1}, 11993@code{10.2}, and @code{10.3.9}. 11994 11995If the compiler was built to use the system's headers by default, 11996then the default for this option is the system version on which the 11997compiler is running, otherwise the default is to make choices that 11998are compatible with as many systems and code bases as possible. 11999 12000@item -mkernel 12001@opindex mkernel 12002Enable kernel development mode. The @option{-mkernel} option sets 12003@option{-static}, @option{-fno-common}, @option{-fno-cxa-atexit}, 12004@option{-fno-exceptions}, @option{-fno-non-call-exceptions}, 12005@option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where 12006applicable. This mode also sets @option{-mno-altivec}, 12007@option{-msoft-float}, @option{-fno-builtin} and 12008@option{-mlong-branch} for PowerPC targets. 12009 12010@item -mone-byte-bool 12011@opindex mone-byte-bool 12012Override the defaults for @samp{bool} so that @samp{sizeof(bool)==1}. 12013By default @samp{sizeof(bool)} is @samp{4} when compiling for 12014Darwin/PowerPC and @samp{1} when compiling for Darwin/x86, so this 12015option has no effect on x86. 12016 12017@strong{Warning:} The @option{-mone-byte-bool} switch causes GCC 12018to generate code that is not binary compatible with code generated 12019without that switch. Using this switch may require recompiling all 12020other modules in a program, including system libraries. Use this 12021switch to conform to a non-default data model. 12022 12023@item -mfix-and-continue 12024@itemx -ffix-and-continue 12025@itemx -findirect-data 12026@opindex mfix-and-continue 12027@opindex ffix-and-continue 12028@opindex findirect-data 12029Generate code suitable for fast turn around development. Needed to 12030enable gdb to dynamically load @code{.o} files into already running 12031programs. @option{-findirect-data} and @option{-ffix-and-continue} 12032are provided for backwards compatibility. 12033 12034@item -all_load 12035@opindex all_load 12036Loads all members of static archive libraries. 12037See man ld(1) for more information. 12038 12039@item -arch_errors_fatal 12040@opindex arch_errors_fatal 12041Cause the errors having to do with files that have the wrong architecture 12042to be fatal. 12043 12044@item -bind_at_load 12045@opindex bind_at_load 12046Causes the output file to be marked such that the dynamic linker will 12047bind all undefined references when the file is loaded or launched. 12048 12049@item -bundle 12050@opindex bundle 12051Produce a Mach-o bundle format file. 12052See man ld(1) for more information. 12053 12054@item -bundle_loader @var{executable} 12055@opindex bundle_loader 12056This option specifies the @var{executable} that will be loading the build 12057output file being linked. See man ld(1) for more information. 12058 12059@item -dynamiclib 12060@opindex dynamiclib 12061When passed this option, GCC will produce a dynamic library instead of 12062an executable when linking, using the Darwin @file{libtool} command. 12063 12064@item -force_cpusubtype_ALL 12065@opindex force_cpusubtype_ALL 12066This causes GCC's output file to have the @var{ALL} subtype, instead of 12067one controlled by the @option{-mcpu} or @option{-march} option. 12068 12069@item -allowable_client @var{client_name} 12070@itemx -client_name 12071@itemx -compatibility_version 12072@itemx -current_version 12073@itemx -dead_strip 12074@itemx -dependency-file 12075@itemx -dylib_file 12076@itemx -dylinker_install_name 12077@itemx -dynamic 12078@itemx -exported_symbols_list 12079@itemx -filelist 12080@need 800 12081@itemx -flat_namespace 12082@itemx -force_flat_namespace 12083@itemx -headerpad_max_install_names 12084@itemx -image_base 12085@itemx -init 12086@itemx -install_name 12087@itemx -keep_private_externs 12088@itemx -multi_module 12089@itemx -multiply_defined 12090@itemx -multiply_defined_unused 12091@need 800 12092@itemx -noall_load 12093@itemx -no_dead_strip_inits_and_terms 12094@itemx -nofixprebinding 12095@itemx -nomultidefs 12096@itemx -noprebind 12097@itemx -noseglinkedit 12098@itemx -pagezero_size 12099@itemx -prebind 12100@itemx -prebind_all_twolevel_modules 12101@itemx -private_bundle 12102@need 800 12103@itemx -read_only_relocs 12104@itemx -sectalign 12105@itemx -sectobjectsymbols 12106@itemx -whyload 12107@itemx -seg1addr 12108@itemx -sectcreate 12109@itemx -sectobjectsymbols 12110@itemx -sectorder 12111@itemx -segaddr 12112@itemx -segs_read_only_addr 12113@need 800 12114@itemx -segs_read_write_addr 12115@itemx -seg_addr_table 12116@itemx -seg_addr_table_filename 12117@itemx -seglinkedit 12118@itemx -segprot 12119@itemx -segs_read_only_addr 12120@itemx -segs_read_write_addr 12121@itemx -single_module 12122@itemx -static 12123@itemx -sub_library 12124@need 800 12125@itemx -sub_umbrella 12126@itemx -twolevel_namespace 12127@itemx -umbrella 12128@itemx -undefined 12129@itemx -unexported_symbols_list 12130@itemx -weak_reference_mismatches 12131@itemx -whatsloaded 12132@opindex allowable_client 12133@opindex client_name 12134@opindex compatibility_version 12135@opindex current_version 12136@opindex dead_strip 12137@opindex dependency-file 12138@opindex dylib_file 12139@opindex dylinker_install_name 12140@opindex dynamic 12141@opindex exported_symbols_list 12142@opindex filelist 12143@opindex flat_namespace 12144@opindex force_flat_namespace 12145@opindex headerpad_max_install_names 12146@opindex image_base 12147@opindex init 12148@opindex install_name 12149@opindex keep_private_externs 12150@opindex multi_module 12151@opindex multiply_defined 12152@opindex multiply_defined_unused 12153@opindex noall_load 12154@opindex no_dead_strip_inits_and_terms 12155@opindex nofixprebinding 12156@opindex nomultidefs 12157@opindex noprebind 12158@opindex noseglinkedit 12159@opindex pagezero_size 12160@opindex prebind 12161@opindex prebind_all_twolevel_modules 12162@opindex private_bundle 12163@opindex read_only_relocs 12164@opindex sectalign 12165@opindex sectobjectsymbols 12166@opindex whyload 12167@opindex seg1addr 12168@opindex sectcreate 12169@opindex sectobjectsymbols 12170@opindex sectorder 12171@opindex segaddr 12172@opindex segs_read_only_addr 12173@opindex segs_read_write_addr 12174@opindex seg_addr_table 12175@opindex seg_addr_table_filename 12176@opindex seglinkedit 12177@opindex segprot 12178@opindex segs_read_only_addr 12179@opindex segs_read_write_addr 12180@opindex single_module 12181@opindex static 12182@opindex sub_library 12183@opindex sub_umbrella 12184@opindex twolevel_namespace 12185@opindex umbrella 12186@opindex undefined 12187@opindex unexported_symbols_list 12188@opindex weak_reference_mismatches 12189@opindex whatsloaded 12190These options are passed to the Darwin linker. The Darwin linker man page 12191describes them in detail. 12192@end table 12193 12194@node DEC Alpha Options 12195@subsection DEC Alpha Options 12196 12197These @samp{-m} options are defined for the DEC Alpha implementations: 12198 12199@table @gcctabopt 12200@item -mno-soft-float 12201@itemx -msoft-float 12202@opindex mno-soft-float 12203@opindex msoft-float 12204Use (do not use) the hardware floating-point instructions for 12205floating-point operations. When @option{-msoft-float} is specified, 12206functions in @file{libgcc.a} will be used to perform floating-point 12207operations. Unless they are replaced by routines that emulate the 12208floating-point operations, or compiled in such a way as to call such 12209emulations routines, these routines will issue floating-point 12210operations. If you are compiling for an Alpha without floating-point 12211operations, you must ensure that the library is built so as not to call 12212them. 12213 12214Note that Alpha implementations without floating-point operations are 12215required to have floating-point registers. 12216 12217@item -mfp-reg 12218@itemx -mno-fp-regs 12219@opindex mfp-reg 12220@opindex mno-fp-regs 12221Generate code that uses (does not use) the floating-point register set. 12222@option{-mno-fp-regs} implies @option{-msoft-float}. If the floating-point 12223register set is not used, floating-point operands are passed in integer 12224registers as if they were integers and floating-point results are passed 12225in @code{$0} instead of @code{$f0}. This is a non-standard calling sequence, 12226so any function with a floating-point argument or return value called by code 12227compiled with @option{-mno-fp-regs} must also be compiled with that 12228option. 12229 12230A typical use of this option is building a kernel that does not use, 12231and hence need not save and restore, any floating-point registers. 12232 12233@item -mieee 12234@opindex mieee 12235The Alpha architecture implements floating-point hardware optimized for 12236maximum performance. It is mostly compliant with the IEEE floating-point 12237standard. However, for full compliance, software assistance is 12238required. This option generates code fully IEEE-compliant code 12239@emph{except} that the @var{inexact-flag} is not maintained (see below). 12240If this option is turned on, the preprocessor macro @code{_IEEE_FP} is 12241defined during compilation. The resulting code is less efficient but is 12242able to correctly support denormalized numbers and exceptional IEEE 12243values such as not-a-number and plus/minus infinity. Other Alpha 12244compilers call this option @option{-ieee_with_no_inexact}. 12245 12246@item -mieee-with-inexact 12247@opindex mieee-with-inexact 12248This is like @option{-mieee} except the generated code also maintains 12249the IEEE @var{inexact-flag}. Turning on this option causes the 12250generated code to implement fully-compliant IEEE math. In addition to 12251@code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor 12252macro. On some Alpha implementations the resulting code may execute 12253significantly slower than the code generated by default. Since there is 12254very little code that depends on the @var{inexact-flag}, you should 12255normally not specify this option. Other Alpha compilers call this 12256option @option{-ieee_with_inexact}. 12257 12258@item -mfp-trap-mode=@var{trap-mode} 12259@opindex mfp-trap-mode 12260This option controls what floating-point related traps are enabled. 12261Other Alpha compilers call this option @option{-fptm @var{trap-mode}}. 12262The trap mode can be set to one of four values: 12263 12264@table @samp 12265@item n 12266This is the default (normal) setting. The only traps that are enabled 12267are the ones that cannot be disabled in software (e.g., division by zero 12268trap). 12269 12270@item u 12271In addition to the traps enabled by @samp{n}, underflow traps are enabled 12272as well. 12273 12274@item su 12275Like @samp{u}, but the instructions are marked to be safe for software 12276completion (see Alpha architecture manual for details). 12277 12278@item sui 12279Like @samp{su}, but inexact traps are enabled as well. 12280@end table 12281 12282@item -mfp-rounding-mode=@var{rounding-mode} 12283@opindex mfp-rounding-mode 12284Selects the IEEE rounding mode. Other Alpha compilers call this option 12285@option{-fprm @var{rounding-mode}}. The @var{rounding-mode} can be one 12286of: 12287 12288@table @samp 12289@item n 12290Normal IEEE rounding mode. Floating-point numbers are rounded towards 12291the nearest machine number or towards the even machine number in case 12292of a tie. 12293 12294@item m 12295Round towards minus infinity. 12296 12297@item c 12298Chopped rounding mode. Floating-point numbers are rounded towards zero. 12299 12300@item d 12301Dynamic rounding mode. A field in the floating-point control register 12302(@var{fpcr}, see Alpha architecture reference manual) controls the 12303rounding mode in effect. The C library initializes this register for 12304rounding towards plus infinity. Thus, unless your program modifies the 12305@var{fpcr}, @samp{d} corresponds to round towards plus infinity. 12306@end table 12307 12308@item -mtrap-precision=@var{trap-precision} 12309@opindex mtrap-precision 12310In the Alpha architecture, floating-point traps are imprecise. This 12311means without software assistance it is impossible to recover from a 12312floating trap and program execution normally needs to be terminated. 12313GCC can generate code that can assist operating system trap handlers 12314in determining the exact location that caused a floating-point trap. 12315Depending on the requirements of an application, different levels of 12316precisions can be selected: 12317 12318@table @samp 12319@item p 12320Program precision. This option is the default and means a trap handler 12321can only identify which program caused a floating-point exception. 12322 12323@item f 12324Function precision. The trap handler can determine the function that 12325caused a floating-point exception. 12326 12327@item i 12328Instruction precision. The trap handler can determine the exact 12329instruction that caused a floating-point exception. 12330@end table 12331 12332Other Alpha compilers provide the equivalent options called 12333@option{-scope_safe} and @option{-resumption_safe}. 12334 12335@item -mieee-conformant 12336@opindex mieee-conformant 12337This option marks the generated code as IEEE conformant. You must not 12338use this option unless you also specify @option{-mtrap-precision=i} and either 12339@option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}. Its only effect 12340is to emit the line @samp{.eflag 48} in the function prologue of the 12341generated assembly file. Under DEC Unix, this has the effect that 12342IEEE-conformant math library routines will be linked in. 12343 12344@item -mbuild-constants 12345@opindex mbuild-constants 12346Normally GCC examines a 32- or 64-bit integer constant to 12347see if it can construct it from smaller constants in two or three 12348instructions. If it cannot, it will output the constant as a literal and 12349generate code to load it from the data segment at run time. 12350 12351Use this option to require GCC to construct @emph{all} integer constants 12352using code, even if it takes more instructions (the maximum is six). 12353 12354You would typically use this option to build a shared library dynamic 12355loader. Itself a shared library, it must relocate itself in memory 12356before it can find the variables and constants in its own data segment. 12357 12358@item -malpha-as 12359@itemx -mgas 12360@opindex malpha-as 12361@opindex mgas 12362Select whether to generate code to be assembled by the vendor-supplied 12363assembler (@option{-malpha-as}) or by the GNU assembler @option{-mgas}. 12364 12365@item -mbwx 12366@itemx -mno-bwx 12367@itemx -mcix 12368@itemx -mno-cix 12369@itemx -mfix 12370@itemx -mno-fix 12371@itemx -mmax 12372@itemx -mno-max 12373@opindex mbwx 12374@opindex mno-bwx 12375@opindex mcix 12376@opindex mno-cix 12377@opindex mfix 12378@opindex mno-fix 12379@opindex mmax 12380@opindex mno-max 12381Indicate whether GCC should generate code to use the optional BWX, 12382CIX, FIX and MAX instruction sets. The default is to use the instruction 12383sets supported by the CPU type specified via @option{-mcpu=} option or that 12384of the CPU on which GCC was built if none was specified. 12385 12386@item -mfloat-vax 12387@itemx -mfloat-ieee 12388@opindex mfloat-vax 12389@opindex mfloat-ieee 12390Generate code that uses (does not use) VAX F and G floating-point 12391arithmetic instead of IEEE single and double precision. 12392 12393@item -mexplicit-relocs 12394@itemx -mno-explicit-relocs 12395@opindex mexplicit-relocs 12396@opindex mno-explicit-relocs 12397Older Alpha assemblers provided no way to generate symbol relocations 12398except via assembler macros. Use of these macros does not allow 12399optimal instruction scheduling. GNU binutils as of version 2.12 12400supports a new syntax that allows the compiler to explicitly mark 12401which relocations should apply to which instructions. This option 12402is mostly useful for debugging, as GCC detects the capabilities of 12403the assembler when it is built and sets the default accordingly. 12404 12405@item -msmall-data 12406@itemx -mlarge-data 12407@opindex msmall-data 12408@opindex mlarge-data 12409When @option{-mexplicit-relocs} is in effect, static data is 12410accessed via @dfn{gp-relative} relocations. When @option{-msmall-data} 12411is used, objects 8 bytes long or smaller are placed in a @dfn{small data area} 12412(the @code{.sdata} and @code{.sbss} sections) and are accessed via 1241316-bit relocations off of the @code{$gp} register. This limits the 12414size of the small data area to 64KB, but allows the variables to be 12415directly accessed via a single instruction. 12416 12417The default is @option{-mlarge-data}. With this option the data area 12418is limited to just below 2GB@. Programs that require more than 2GB of 12419data must use @code{malloc} or @code{mmap} to allocate the data in the 12420heap instead of in the program's data segment. 12421 12422When generating code for shared libraries, @option{-fpic} implies 12423@option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}. 12424 12425@item -msmall-text 12426@itemx -mlarge-text 12427@opindex msmall-text 12428@opindex mlarge-text 12429When @option{-msmall-text} is used, the compiler assumes that the 12430code of the entire program (or shared library) fits in 4MB, and is 12431thus reachable with a branch instruction. When @option{-msmall-data} 12432is used, the compiler can assume that all local symbols share the 12433same @code{$gp} value, and thus reduce the number of instructions 12434required for a function call from 4 to 1. 12435 12436The default is @option{-mlarge-text}. 12437 12438@item -mcpu=@var{cpu_type} 12439@opindex mcpu 12440Set the instruction set and instruction scheduling parameters for 12441machine type @var{cpu_type}. You can specify either the @samp{EV} 12442style name or the corresponding chip number. GCC supports scheduling 12443parameters for the EV4, EV5 and EV6 family of processors and will 12444choose the default values for the instruction set from the processor 12445you specify. If you do not specify a processor type, GCC will default 12446to the processor on which the compiler was built. 12447 12448Supported values for @var{cpu_type} are 12449 12450@table @samp 12451@item ev4 12452@itemx ev45 12453@itemx 21064 12454Schedules as an EV4 and has no instruction set extensions. 12455 12456@item ev5 12457@itemx 21164 12458Schedules as an EV5 and has no instruction set extensions. 12459 12460@item ev56 12461@itemx 21164a 12462Schedules as an EV5 and supports the BWX extension. 12463 12464@item pca56 12465@itemx 21164pc 12466@itemx 21164PC 12467Schedules as an EV5 and supports the BWX and MAX extensions. 12468 12469@item ev6 12470@itemx 21264 12471Schedules as an EV6 and supports the BWX, FIX, and MAX extensions. 12472 12473@item ev67 12474@itemx 21264a 12475Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions. 12476@end table 12477 12478Native toolchains also support the value @samp{native}, 12479which selects the best architecture option for the host processor. 12480@option{-mcpu=native} has no effect if GCC does not recognize 12481the processor. 12482 12483@item -mtune=@var{cpu_type} 12484@opindex mtune 12485Set only the instruction scheduling parameters for machine type 12486@var{cpu_type}. The instruction set is not changed. 12487 12488Native toolchains also support the value @samp{native}, 12489which selects the best architecture option for the host processor. 12490@option{-mtune=native} has no effect if GCC does not recognize 12491the processor. 12492 12493@item -mmemory-latency=@var{time} 12494@opindex mmemory-latency 12495Sets the latency the scheduler should assume for typical memory 12496references as seen by the application. This number is highly 12497dependent on the memory access patterns used by the application 12498and the size of the external cache on the machine. 12499 12500Valid options for @var{time} are 12501 12502@table @samp 12503@item @var{number} 12504A decimal number representing clock cycles. 12505 12506@item L1 12507@itemx L2 12508@itemx L3 12509@itemx main 12510The compiler contains estimates of the number of clock cycles for 12511``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches 12512(also called Dcache, Scache, and Bcache), as well as to main memory. 12513Note that L3 is only valid for EV5. 12514 12515@end table 12516@end table 12517 12518@node DEC Alpha/VMS Options 12519@subsection DEC Alpha/VMS Options 12520 12521These @samp{-m} options are defined for the DEC Alpha/VMS implementations: 12522 12523@table @gcctabopt 12524@item -mvms-return-codes 12525@opindex mvms-return-codes 12526Return VMS condition codes from main. The default is to return POSIX 12527style condition (e.g.@: error) codes. 12528 12529@item -mdebug-main=@var{prefix} 12530@opindex mdebug-main=@var{prefix} 12531Flag the first routine whose name starts with @var{prefix} as the main 12532routine for the debugger. 12533 12534@item -mmalloc64 12535@opindex mmalloc64 12536Default to 64-bit memory allocation routines. 12537@end table 12538 12539@node FR30 Options 12540@subsection FR30 Options 12541@cindex FR30 Options 12542 12543These options are defined specifically for the FR30 port. 12544 12545@table @gcctabopt 12546 12547@item -msmall-model 12548@opindex msmall-model 12549Use the small address space model. This can produce smaller code, but 12550it does assume that all symbolic values and addresses will fit into a 1255120-bit range. 12552 12553@item -mno-lsim 12554@opindex mno-lsim 12555Assume that runtime support has been provided and so there is no need 12556to include the simulator library (@file{libsim.a}) on the linker 12557command line. 12558 12559@end table 12560 12561@node FRV Options 12562@subsection FRV Options 12563@cindex FRV Options 12564 12565@table @gcctabopt 12566@item -mgpr-32 12567@opindex mgpr-32 12568 12569Only use the first 32 general-purpose registers. 12570 12571@item -mgpr-64 12572@opindex mgpr-64 12573 12574Use all 64 general-purpose registers. 12575 12576@item -mfpr-32 12577@opindex mfpr-32 12578 12579Use only the first 32 floating-point registers. 12580 12581@item -mfpr-64 12582@opindex mfpr-64 12583 12584Use all 64 floating-point registers. 12585 12586@item -mhard-float 12587@opindex mhard-float 12588 12589Use hardware instructions for floating-point operations. 12590 12591@item -msoft-float 12592@opindex msoft-float 12593 12594Use library routines for floating-point operations. 12595 12596@item -malloc-cc 12597@opindex malloc-cc 12598 12599Dynamically allocate condition code registers. 12600 12601@item -mfixed-cc 12602@opindex mfixed-cc 12603 12604Do not try to dynamically allocate condition code registers, only 12605use @code{icc0} and @code{fcc0}. 12606 12607@item -mdword 12608@opindex mdword 12609 12610Change ABI to use double word insns. 12611 12612@item -mno-dword 12613@opindex mno-dword 12614 12615Do not use double word instructions. 12616 12617@item -mdouble 12618@opindex mdouble 12619 12620Use floating-point double instructions. 12621 12622@item -mno-double 12623@opindex mno-double 12624 12625Do not use floating-point double instructions. 12626 12627@item -mmedia 12628@opindex mmedia 12629 12630Use media instructions. 12631 12632@item -mno-media 12633@opindex mno-media 12634 12635Do not use media instructions. 12636 12637@item -mmuladd 12638@opindex mmuladd 12639 12640Use multiply and add/subtract instructions. 12641 12642@item -mno-muladd 12643@opindex mno-muladd 12644 12645Do not use multiply and add/subtract instructions. 12646 12647@item -mfdpic 12648@opindex mfdpic 12649 12650Select the FDPIC ABI, which uses function descriptors to represent 12651pointers to functions. Without any PIC/PIE-related options, it 12652implies @option{-fPIE}. With @option{-fpic} or @option{-fpie}, it 12653assumes GOT entries and small data are within a 12-bit range from the 12654GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets 12655are computed with 32 bits. 12656With a @samp{bfin-elf} target, this option implies @option{-msim}. 12657 12658@item -minline-plt 12659@opindex minline-plt 12660 12661Enable inlining of PLT entries in function calls to functions that are 12662not known to bind locally. It has no effect without @option{-mfdpic}. 12663It's enabled by default if optimizing for speed and compiling for 12664shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an 12665optimization option such as @option{-O3} or above is present in the 12666command line. 12667 12668@item -mTLS 12669@opindex mTLS 12670 12671Assume a large TLS segment when generating thread-local code. 12672 12673@item -mtls 12674@opindex mtls 12675 12676Do not assume a large TLS segment when generating thread-local code. 12677 12678@item -mgprel-ro 12679@opindex mgprel-ro 12680 12681Enable the use of @code{GPREL} relocations in the FDPIC ABI for data 12682that is known to be in read-only sections. It's enabled by default, 12683except for @option{-fpic} or @option{-fpie}: even though it may help 12684make the global offset table smaller, it trades 1 instruction for 4. 12685With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4, 12686one of which may be shared by multiple symbols, and it avoids the need 12687for a GOT entry for the referenced symbol, so it's more likely to be a 12688win. If it is not, @option{-mno-gprel-ro} can be used to disable it. 12689 12690@item -multilib-library-pic 12691@opindex multilib-library-pic 12692 12693Link with the (library, not FD) pic libraries. It's implied by 12694@option{-mlibrary-pic}, as well as by @option{-fPIC} and 12695@option{-fpic} without @option{-mfdpic}. You should never have to use 12696it explicitly. 12697 12698@item -mlinked-fp 12699@opindex mlinked-fp 12700 12701Follow the EABI requirement of always creating a frame pointer whenever 12702a stack frame is allocated. This option is enabled by default and can 12703be disabled with @option{-mno-linked-fp}. 12704 12705@item -mlong-calls 12706@opindex mlong-calls 12707 12708Use indirect addressing to call functions outside the current 12709compilation unit. This allows the functions to be placed anywhere 12710within the 32-bit address space. 12711 12712@item -malign-labels 12713@opindex malign-labels 12714 12715Try to align labels to an 8-byte boundary by inserting nops into the 12716previous packet. This option only has an effect when VLIW packing 12717is enabled. It doesn't create new packets; it merely adds nops to 12718existing ones. 12719 12720@item -mlibrary-pic 12721@opindex mlibrary-pic 12722 12723Generate position-independent EABI code. 12724 12725@item -macc-4 12726@opindex macc-4 12727 12728Use only the first four media accumulator registers. 12729 12730@item -macc-8 12731@opindex macc-8 12732 12733Use all eight media accumulator registers. 12734 12735@item -mpack 12736@opindex mpack 12737 12738Pack VLIW instructions. 12739 12740@item -mno-pack 12741@opindex mno-pack 12742 12743Do not pack VLIW instructions. 12744 12745@item -mno-eflags 12746@opindex mno-eflags 12747 12748Do not mark ABI switches in e_flags. 12749 12750@item -mcond-move 12751@opindex mcond-move 12752 12753Enable the use of conditional-move instructions (default). 12754 12755This switch is mainly for debugging the compiler and will likely be removed 12756in a future version. 12757 12758@item -mno-cond-move 12759@opindex mno-cond-move 12760 12761Disable the use of conditional-move instructions. 12762 12763This switch is mainly for debugging the compiler and will likely be removed 12764in a future version. 12765 12766@item -mscc 12767@opindex mscc 12768 12769Enable the use of conditional set instructions (default). 12770 12771This switch is mainly for debugging the compiler and will likely be removed 12772in a future version. 12773 12774@item -mno-scc 12775@opindex mno-scc 12776 12777Disable the use of conditional set instructions. 12778 12779This switch is mainly for debugging the compiler and will likely be removed 12780in a future version. 12781 12782@item -mcond-exec 12783@opindex mcond-exec 12784 12785Enable the use of conditional execution (default). 12786 12787This switch is mainly for debugging the compiler and will likely be removed 12788in a future version. 12789 12790@item -mno-cond-exec 12791@opindex mno-cond-exec 12792 12793Disable the use of conditional execution. 12794 12795This switch is mainly for debugging the compiler and will likely be removed 12796in a future version. 12797 12798@item -mvliw-branch 12799@opindex mvliw-branch 12800 12801Run a pass to pack branches into VLIW instructions (default). 12802 12803This switch is mainly for debugging the compiler and will likely be removed 12804in a future version. 12805 12806@item -mno-vliw-branch 12807@opindex mno-vliw-branch 12808 12809Do not run a pass to pack branches into VLIW instructions. 12810 12811This switch is mainly for debugging the compiler and will likely be removed 12812in a future version. 12813 12814@item -mmulti-cond-exec 12815@opindex mmulti-cond-exec 12816 12817Enable optimization of @code{&&} and @code{||} in conditional execution 12818(default). 12819 12820This switch is mainly for debugging the compiler and will likely be removed 12821in a future version. 12822 12823@item -mno-multi-cond-exec 12824@opindex mno-multi-cond-exec 12825 12826Disable optimization of @code{&&} and @code{||} in conditional execution. 12827 12828This switch is mainly for debugging the compiler and will likely be removed 12829in a future version. 12830 12831@item -mnested-cond-exec 12832@opindex mnested-cond-exec 12833 12834Enable nested conditional execution optimizations (default). 12835 12836This switch is mainly for debugging the compiler and will likely be removed 12837in a future version. 12838 12839@item -mno-nested-cond-exec 12840@opindex mno-nested-cond-exec 12841 12842Disable nested conditional execution optimizations. 12843 12844This switch is mainly for debugging the compiler and will likely be removed 12845in a future version. 12846 12847@item -moptimize-membar 12848@opindex moptimize-membar 12849 12850This switch removes redundant @code{membar} instructions from the 12851compiler generated code. It is enabled by default. 12852 12853@item -mno-optimize-membar 12854@opindex mno-optimize-membar 12855 12856This switch disables the automatic removal of redundant @code{membar} 12857instructions from the generated code. 12858 12859@item -mtomcat-stats 12860@opindex mtomcat-stats 12861 12862Cause gas to print out tomcat statistics. 12863 12864@item -mcpu=@var{cpu} 12865@opindex mcpu 12866 12867Select the processor type for which to generate code. Possible values are 12868@samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450}, 12869@samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}. 12870 12871@end table 12872 12873@node GNU/Linux Options 12874@subsection GNU/Linux Options 12875 12876These @samp{-m} options are defined for GNU/Linux targets: 12877 12878@table @gcctabopt 12879@item -mglibc 12880@opindex mglibc 12881Use the GNU C library. This is the default except 12882on @samp{*-*-linux-*uclibc*} and @samp{*-*-linux-*android*} targets. 12883 12884@item -muclibc 12885@opindex muclibc 12886Use uClibc C library. This is the default on 12887@samp{*-*-linux-*uclibc*} targets. 12888 12889@item -mbionic 12890@opindex mbionic 12891Use Bionic C library. This is the default on 12892@samp{*-*-linux-*android*} targets. 12893 12894@item -mandroid 12895@opindex mandroid 12896Compile code compatible with Android platform. This is the default on 12897@samp{*-*-linux-*android*} targets. 12898 12899When compiling, this option enables @option{-mbionic}, @option{-fPIC}, 12900@option{-fno-exceptions} and @option{-fno-rtti} by default. When linking, 12901this option makes the GCC driver pass Android-specific options to the linker. 12902Finally, this option causes the preprocessor macro @code{__ANDROID__} 12903to be defined. 12904 12905@item -tno-android-cc 12906@opindex tno-android-cc 12907Disable compilation effects of @option{-mandroid}, i.e., do not enable 12908@option{-mbionic}, @option{-fPIC}, @option{-fno-exceptions} and 12909@option{-fno-rtti} by default. 12910 12911@item -tno-android-ld 12912@opindex tno-android-ld 12913Disable linking effects of @option{-mandroid}, i.e., pass standard Linux 12914linking options to the linker. 12915 12916@end table 12917 12918@node H8/300 Options 12919@subsection H8/300 Options 12920 12921These @samp{-m} options are defined for the H8/300 implementations: 12922 12923@table @gcctabopt 12924@item -mrelax 12925@opindex mrelax 12926Shorten some address references at link time, when possible; uses the 12927linker option @option{-relax}. @xref{H8/300,, @code{ld} and the H8/300, 12928ld, Using ld}, for a fuller description. 12929 12930@item -mh 12931@opindex mh 12932Generate code for the H8/300H@. 12933 12934@item -ms 12935@opindex ms 12936Generate code for the H8S@. 12937 12938@item -mn 12939@opindex mn 12940Generate code for the H8S and H8/300H in the normal mode. This switch 12941must be used either with @option{-mh} or @option{-ms}. 12942 12943@item -ms2600 12944@opindex ms2600 12945Generate code for the H8S/2600. This switch must be used with @option{-ms}. 12946 12947@item -mint32 12948@opindex mint32 12949Make @code{int} data 32 bits by default. 12950 12951@item -malign-300 12952@opindex malign-300 12953On the H8/300H and H8S, use the same alignment rules as for the H8/300. 12954The default for the H8/300H and H8S is to align longs and floats on 129554-byte boundaries. 12956@option{-malign-300} causes them to be aligned on 2-byte boundaries. 12957This option has no effect on the H8/300. 12958@end table 12959 12960@node HPPA Options 12961@subsection HPPA Options 12962@cindex HPPA Options 12963 12964These @samp{-m} options are defined for the HPPA family of computers: 12965 12966@table @gcctabopt 12967@item -march=@var{architecture-type} 12968@opindex march 12969Generate code for the specified architecture. The choices for 12970@var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA 129711.1, and @samp{2.0} for PA 2.0 processors. Refer to 12972@file{/usr/lib/sched.models} on an HP-UX system to determine the proper 12973architecture option for your machine. Code compiled for lower numbered 12974architectures will run on higher numbered architectures, but not the 12975other way around. 12976 12977@item -mpa-risc-1-0 12978@itemx -mpa-risc-1-1 12979@itemx -mpa-risc-2-0 12980@opindex mpa-risc-1-0 12981@opindex mpa-risc-1-1 12982@opindex mpa-risc-2-0 12983Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively. 12984 12985@item -mbig-switch 12986@opindex mbig-switch 12987Generate code suitable for big switch tables. Use this option only if 12988the assembler/linker complain about out of range branches within a switch 12989table. 12990 12991@item -mjump-in-delay 12992@opindex mjump-in-delay 12993Fill delay slots of function calls with unconditional jump instructions 12994by modifying the return pointer for the function call to be the target 12995of the conditional jump. 12996 12997@item -mdisable-fpregs 12998@opindex mdisable-fpregs 12999Prevent floating-point registers from being used in any manner. This is 13000necessary for compiling kernels that perform lazy context switching of 13001floating-point registers. If you use this option and attempt to perform 13002floating-point operations, the compiler aborts. 13003 13004@item -mdisable-indexing 13005@opindex mdisable-indexing 13006Prevent the compiler from using indexing address modes. This avoids some 13007rather obscure problems when compiling MIG generated code under MACH@. 13008 13009@item -mno-space-regs 13010@opindex mno-space-regs 13011Generate code that assumes the target has no space registers. This allows 13012GCC to generate faster indirect calls and use unscaled index address modes. 13013 13014Such code is suitable for level 0 PA systems and kernels. 13015 13016@item -mfast-indirect-calls 13017@opindex mfast-indirect-calls 13018Generate code that assumes calls never cross space boundaries. This 13019allows GCC to emit code that performs faster indirect calls. 13020 13021This option will not work in the presence of shared libraries or nested 13022functions. 13023 13024@item -mfixed-range=@var{register-range} 13025@opindex mfixed-range 13026Generate code treating the given register range as fixed registers. 13027A fixed register is one that the register allocator can not use. This is 13028useful when compiling kernel code. A register range is specified as 13029two registers separated by a dash. Multiple register ranges can be 13030specified separated by a comma. 13031 13032@item -mlong-load-store 13033@opindex mlong-load-store 13034Generate 3-instruction load and store sequences as sometimes required by 13035the HP-UX 10 linker. This is equivalent to the @samp{+k} option to 13036the HP compilers. 13037 13038@item -mportable-runtime 13039@opindex mportable-runtime 13040Use the portable calling conventions proposed by HP for ELF systems. 13041 13042@item -mgas 13043@opindex mgas 13044Enable the use of assembler directives only GAS understands. 13045 13046@item -mschedule=@var{cpu-type} 13047@opindex mschedule 13048Schedule code according to the constraints for the machine type 13049@var{cpu-type}. The choices for @var{cpu-type} are @samp{700} 13050@samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}. Refer 13051to @file{/usr/lib/sched.models} on an HP-UX system to determine the 13052proper scheduling option for your machine. The default scheduling is 13053@samp{8000}. 13054 13055@item -mlinker-opt 13056@opindex mlinker-opt 13057Enable the optimization pass in the HP-UX linker. Note this makes symbolic 13058debugging impossible. It also triggers a bug in the HP-UX 8 and HP-UX 9 13059linkers in which they give bogus error messages when linking some programs. 13060 13061@item -msoft-float 13062@opindex msoft-float 13063Generate output containing library calls for floating point. 13064@strong{Warning:} the requisite libraries are not available for all HPPA 13065targets. Normally the facilities of the machine's usual C compiler are 13066used, but this cannot be done directly in cross-compilation. You must make 13067your own arrangements to provide suitable library functions for 13068cross-compilation. 13069 13070@option{-msoft-float} changes the calling convention in the output file; 13071therefore, it is only useful if you compile @emph{all} of a program with 13072this option. In particular, you need to compile @file{libgcc.a}, the 13073library that comes with GCC, with @option{-msoft-float} in order for 13074this to work. 13075 13076@item -msio 13077@opindex msio 13078Generate the predefine, @code{_SIO}, for server IO@. The default is 13079@option{-mwsio}. This generates the predefines, @code{__hp9000s700}, 13080@code{__hp9000s700__} and @code{_WSIO}, for workstation IO@. These 13081options are available under HP-UX and HI-UX@. 13082 13083@item -mgnu-ld 13084@opindex mgnu-ld 13085Use GNU ld specific options. This passes @option{-shared} to ld when 13086building a shared library. It is the default when GCC is configured, 13087explicitly or implicitly, with the GNU linker. This option does not 13088have any affect on which ld is called, it only changes what parameters 13089are passed to that ld. The ld that is called is determined by the 13090@option{--with-ld} configure option, GCC's program search path, and 13091finally by the user's @env{PATH}. The linker used by GCC can be printed 13092using @samp{which `gcc -print-prog-name=ld`}. This option is only available 13093on the 64-bit HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}. 13094 13095@item -mhp-ld 13096@opindex mhp-ld 13097Use HP ld specific options. This passes @option{-b} to ld when building 13098a shared library and passes @option{+Accept TypeMismatch} to ld on all 13099links. It is the default when GCC is configured, explicitly or 13100implicitly, with the HP linker. This option does not have any affect on 13101which ld is called, it only changes what parameters are passed to that 13102ld. The ld that is called is determined by the @option{--with-ld} 13103configure option, GCC's program search path, and finally by the user's 13104@env{PATH}. The linker used by GCC can be printed using @samp{which 13105`gcc -print-prog-name=ld`}. This option is only available on the 64-bit 13106HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}. 13107 13108@item -mlong-calls 13109@opindex mno-long-calls 13110Generate code that uses long call sequences. This ensures that a call 13111is always able to reach linker generated stubs. The default is to generate 13112long calls only when the distance from the call site to the beginning 13113of the function or translation unit, as the case may be, exceeds a 13114predefined limit set by the branch type being used. The limits for 13115normal calls are 7,600,000 and 240,000 bytes, respectively for the 13116PA 2.0 and PA 1.X architectures. Sibcalls are always limited at 13117240,000 bytes. 13118 13119Distances are measured from the beginning of functions when using the 13120@option{-ffunction-sections} option, or when using the @option{-mgas} 13121and @option{-mno-portable-runtime} options together under HP-UX with 13122the SOM linker. 13123 13124It is normally not desirable to use this option as it will degrade 13125performance. However, it may be useful in large applications, 13126particularly when partial linking is used to build the application. 13127 13128The types of long calls used depends on the capabilities of the 13129assembler and linker, and the type of code being generated. The 13130impact on systems that support long absolute calls, and long pic 13131symbol-difference or pc-relative calls should be relatively small. 13132However, an indirect call is used on 32-bit ELF systems in pic code 13133and it is quite long. 13134 13135@item -munix=@var{unix-std} 13136@opindex march 13137Generate compiler predefines and select a startfile for the specified 13138UNIX standard. The choices for @var{unix-std} are @samp{93}, @samp{95} 13139and @samp{98}. @samp{93} is supported on all HP-UX versions. @samp{95} 13140is available on HP-UX 10.10 and later. @samp{98} is available on HP-UX 1314111.11 and later. The default values are @samp{93} for HP-UX 10.00, 13142@samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11 13143and later. 13144 13145@option{-munix=93} provides the same predefines as GCC 3.3 and 3.4. 13146@option{-munix=95} provides additional predefines for @code{XOPEN_UNIX} 13147and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}. 13148@option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX}, 13149@code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and 13150@code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}. 13151 13152It is @emph{important} to note that this option changes the interfaces 13153for various library routines. It also affects the operational behavior 13154of the C library. Thus, @emph{extreme} care is needed in using this 13155option. 13156 13157Library code that is intended to operate with more than one UNIX 13158standard must test, set and restore the variable @var{__xpg4_extended_mask} 13159as appropriate. Most GNU software doesn't provide this capability. 13160 13161@item -nolibdld 13162@opindex nolibdld 13163Suppress the generation of link options to search libdld.sl when the 13164@option{-static} option is specified on HP-UX 10 and later. 13165 13166@item -static 13167@opindex static 13168The HP-UX implementation of setlocale in libc has a dependency on 13169libdld.sl. There isn't an archive version of libdld.sl. Thus, 13170when the @option{-static} option is specified, special link options 13171are needed to resolve this dependency. 13172 13173On HP-UX 10 and later, the GCC driver adds the necessary options to 13174link with libdld.sl when the @option{-static} option is specified. 13175This causes the resulting binary to be dynamic. On the 64-bit port, 13176the linkers generate dynamic binaries by default in any case. The 13177@option{-nolibdld} option can be used to prevent the GCC driver from 13178adding these link options. 13179 13180@item -threads 13181@opindex threads 13182Add support for multithreading with the @dfn{dce thread} library 13183under HP-UX@. This option sets flags for both the preprocessor and 13184linker. 13185@end table 13186 13187@node i386 and x86-64 Options 13188@subsection Intel 386 and AMD x86-64 Options 13189@cindex i386 Options 13190@cindex x86-64 Options 13191@cindex Intel 386 Options 13192@cindex AMD x86-64 Options 13193 13194These @samp{-m} options are defined for the i386 and x86-64 family of 13195computers: 13196 13197@table @gcctabopt 13198@item -mtune=@var{cpu-type} 13199@opindex mtune 13200Tune to @var{cpu-type} everything applicable about the generated code, except 13201for the ABI and the set of available instructions. The choices for 13202@var{cpu-type} are: 13203@table @emph 13204@item generic 13205Produce code optimized for the most common IA32/@/AMD64/@/EM64T processors. 13206If you know the CPU on which your code will run, then you should use 13207the corresponding @option{-mtune} option instead of 13208@option{-mtune=generic}. But, if you do not know exactly what CPU users 13209of your application will have, then you should use this option. 13210 13211As new processors are deployed in the marketplace, the behavior of this 13212option will change. Therefore, if you upgrade to a newer version of 13213GCC, the code generated option will change to reflect the processors 13214that were most common when that version of GCC was released. 13215 13216There is no @option{-march=generic} option because @option{-march} 13217indicates the instruction set the compiler can use, and there is no 13218generic instruction set applicable to all processors. In contrast, 13219@option{-mtune} indicates the processor (or, in this case, collection of 13220processors) for which the code is optimized. 13221@item native 13222This selects the CPU to tune for at compilation time by determining 13223the processor type of the compiling machine. Using @option{-mtune=native} 13224will produce code optimized for the local machine under the constraints 13225of the selected instruction set. Using @option{-march=native} will 13226enable all instruction subsets supported by the local machine (hence 13227the result might not run on different machines). 13228@item i386 13229Original Intel's i386 CPU@. 13230@item i486 13231Intel's i486 CPU@. (No scheduling is implemented for this chip.) 13232@item i586, pentium 13233Intel Pentium CPU with no MMX support. 13234@item pentium-mmx 13235Intel PentiumMMX CPU based on Pentium core with MMX instruction set support. 13236@item pentiumpro 13237Intel PentiumPro CPU@. 13238@item i686 13239Same as @code{generic}, but when used as @code{march} option, PentiumPro 13240instruction set will be used, so the code will run on all i686 family chips. 13241@item pentium2 13242Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support. 13243@item pentium3, pentium3m 13244Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set 13245support. 13246@item pentium-m 13247Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set 13248support. Used by Centrino notebooks. 13249@item pentium4, pentium4m 13250Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support. 13251@item prescott 13252Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction 13253set support. 13254@item nocona 13255Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE, 13256SSE2 and SSE3 instruction set support. 13257@item core2 13258Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3 13259instruction set support. 13260@item corei7 13261Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 13262and SSE4.2 instruction set support. 13263@item corei7-avx 13264Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, 13265SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction set support. 13266@item core-avx-i 13267Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, 13268SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and F16C instruction 13269set support. 13270@item atom 13271Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3 13272instruction set support. 13273@item k6 13274AMD K6 CPU with MMX instruction set support. 13275@item k6-2, k6-3 13276Improved versions of AMD K6 CPU with MMX and 3DNow!@: instruction set support. 13277@item athlon, athlon-tbird 13278AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow!@: and SSE prefetch instructions 13279support. 13280@item athlon-4, athlon-xp, athlon-mp 13281Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow!@: and full SSE 13282instruction set support. 13283@item k8, opteron, athlon64, athlon-fx 13284AMD K8 core based CPUs with x86-64 instruction set support. (This supersets 13285MMX, SSE, SSE2, 3DNow!, enhanced 3DNow!@: and 64-bit instruction set extensions.) 13286@item k8-sse3, opteron-sse3, athlon64-sse3 13287Improved versions of k8, opteron and athlon64 with SSE3 instruction set support. 13288@item amdfam10, barcelona 13289AMD Family 10h core based CPUs with x86-64 instruction set support. (This 13290supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM and 64-bit 13291instruction set extensions.) 13292@item bdver1 13293AMD Family 15h core based CPUs with x86-64 instruction set support. (This 13294supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, 13295SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.) 13296@item bdver2 13297AMD Family 15h core based CPUs with x86-64 instruction set support. (This 13298supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, 13299SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set 13300extensions.) 13301@item btver1 13302AMD Family 14h core based CPUs with x86-64 instruction set support. (This 13303supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 64-bit 13304instruction set extensions.) 13305@item winchip-c6 13306IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction 13307set support. 13308@item winchip2 13309IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3DNow!@: 13310instruction set support. 13311@item c3 13312Via C3 CPU with MMX and 3DNow!@: instruction set support. (No scheduling is 13313implemented for this chip.) 13314@item c3-2 13315Via C3-2 CPU with MMX and SSE instruction set support. (No scheduling is 13316implemented for this chip.) 13317@item geode 13318Embedded AMD CPU with MMX and 3DNow!@: instruction set support. 13319@end table 13320 13321While picking a specific @var{cpu-type} will schedule things appropriately 13322for that particular chip, the compiler will not generate any code that 13323does not run on the default machine type without the @option{-march=@var{cpu-type}} 13324option being used. For example, if GCC is configured for i686-pc-linux-gnu 13325then @option{-mtune=pentium4} will generate code that is tuned for Pentium4 13326but will still run on i686 machines. 13327 13328@item -march=@var{cpu-type} 13329@opindex march 13330Generate instructions for the machine type @var{cpu-type}. The choices 13331for @var{cpu-type} are the same as for @option{-mtune}. Moreover, 13332specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}. 13333 13334@item -mcpu=@var{cpu-type} 13335@opindex mcpu 13336A deprecated synonym for @option{-mtune}. 13337 13338@item -mfpmath=@var{unit} 13339@opindex mfpmath 13340Generate floating-point arithmetic for selected unit @var{unit}. The choices 13341for @var{unit} are: 13342 13343@table @samp 13344@item 387 13345Use the standard 387 floating-point coprocessor present on the majority of chips and 13346emulated otherwise. Code compiled with this option runs almost everywhere. 13347The temporary results are computed in 80-bit precision instead of the precision 13348specified by the type, resulting in slightly different results compared to most 13349of other chips. See @option{-ffloat-store} for more detailed description. 13350 13351This is the default choice for i386 compiler. 13352 13353@item sse 13354Use scalar floating-point instructions present in the SSE instruction set. 13355This instruction set is supported by Pentium3 and newer chips, in the AMD line 13356by Athlon-4, Athlon-xp and Athlon-mp chips. The earlier version of SSE 13357instruction set supports only single-precision arithmetic, thus the double and 13358extended-precision arithmetic are still done using 387. A later version, present 13359only in Pentium4 and the future AMD x86-64 chips, supports double-precision 13360arithmetic too. 13361 13362For the i386 compiler, you need to use @option{-march=@var{cpu-type}}, @option{-msse} 13363or @option{-msse2} switches to enable SSE extensions and make this option 13364effective. For the x86-64 compiler, these extensions are enabled by default. 13365 13366The resulting code should be considerably faster in the majority of cases and avoid 13367the numerical instability problems of 387 code, but may break some existing 13368code that expects temporaries to be 80 bits. 13369 13370This is the default choice for the x86-64 compiler. 13371 13372@item sse,387 13373@itemx sse+387 13374@itemx both 13375Attempt to utilize both instruction sets at once. This effectively double the 13376amount of available registers and on chips with separate execution units for 13377387 and SSE the execution resources too. Use this option with care, as it is 13378still experimental, because the GCC register allocator does not model separate 13379functional units well resulting in instable performance. 13380@end table 13381 13382@item -masm=@var{dialect} 13383@opindex masm=@var{dialect} 13384Output asm instructions using selected @var{dialect}. Supported 13385choices are @samp{intel} or @samp{att} (the default one). Darwin does 13386not support @samp{intel}. 13387 13388@item -mieee-fp 13389@itemx -mno-ieee-fp 13390@opindex mieee-fp 13391@opindex mno-ieee-fp 13392Control whether or not the compiler uses IEEE floating-point 13393comparisons. These handle correctly the case where the result of a 13394comparison is unordered. 13395 13396@item -msoft-float 13397@opindex msoft-float 13398Generate output containing library calls for floating point. 13399@strong{Warning:} the requisite libraries are not part of GCC@. 13400Normally the facilities of the machine's usual C compiler are used, but 13401this can't be done directly in cross-compilation. You must make your 13402own arrangements to provide suitable library functions for 13403cross-compilation. 13404 13405On machines where a function returns floating-point results in the 80387 13406register stack, some floating-point opcodes may be emitted even if 13407@option{-msoft-float} is used. 13408 13409@item -mno-fp-ret-in-387 13410@opindex mno-fp-ret-in-387 13411Do not use the FPU registers for return values of functions. 13412 13413The usual calling convention has functions return values of types 13414@code{float} and @code{double} in an FPU register, even if there 13415is no FPU@. The idea is that the operating system should emulate 13416an FPU@. 13417 13418The option @option{-mno-fp-ret-in-387} causes such values to be returned 13419in ordinary CPU registers instead. 13420 13421@item -mno-fancy-math-387 13422@opindex mno-fancy-math-387 13423Some 387 emulators do not support the @code{sin}, @code{cos} and 13424@code{sqrt} instructions for the 387. Specify this option to avoid 13425generating those instructions. This option is the default on FreeBSD, 13426OpenBSD and NetBSD@. This option is overridden when @option{-march} 13427indicates that the target CPU will always have an FPU and so the 13428instruction will not need emulation. As of revision 2.6.1, these 13429instructions are not generated unless you also use the 13430@option{-funsafe-math-optimizations} switch. 13431 13432@item -malign-double 13433@itemx -mno-align-double 13434@opindex malign-double 13435@opindex mno-align-double 13436Control whether GCC aligns @code{double}, @code{long double}, and 13437@code{long long} variables on a two-word boundary or a one-word 13438boundary. Aligning @code{double} variables on a two-word boundary 13439produces code that runs somewhat faster on a @samp{Pentium} at the 13440expense of more memory. 13441 13442On x86-64, @option{-malign-double} is enabled by default. 13443 13444@strong{Warning:} if you use the @option{-malign-double} switch, 13445structures containing the above types will be aligned differently than 13446the published application binary interface specifications for the 386 13447and will not be binary compatible with structures in code compiled 13448without that switch. 13449 13450@item -m96bit-long-double 13451@itemx -m128bit-long-double 13452@opindex m96bit-long-double 13453@opindex m128bit-long-double 13454These switches control the size of @code{long double} type. The i386 13455application binary interface specifies the size to be 96 bits, 13456so @option{-m96bit-long-double} is the default in 32-bit mode. 13457 13458Modern architectures (Pentium and newer) prefer @code{long double} 13459to be aligned to an 8- or 16-byte boundary. In arrays or structures 13460conforming to the ABI, this is not possible. So specifying 13461@option{-m128bit-long-double} aligns @code{long double} 13462to a 16-byte boundary by padding the @code{long double} with an additional 1346332-bit zero. 13464 13465In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as 13466its ABI specifies that @code{long double} is to be aligned on 16-byte boundary. 13467 13468Notice that neither of these options enable any extra precision over the x87 13469standard of 80 bits for a @code{long double}. 13470 13471@strong{Warning:} if you override the default value for your target ABI, the 13472structures and arrays containing @code{long double} variables will change 13473their size as well as function calling convention for function taking 13474@code{long double} will be modified. Hence they will not be binary 13475compatible with arrays or structures in code compiled without that switch. 13476 13477@item -mlarge-data-threshold=@var{number} 13478@opindex mlarge-data-threshold=@var{number} 13479When @option{-mcmodel=medium} is specified, the data greater than 13480@var{threshold} are placed in large data section. This value must be the 13481same across all object linked into the binary and defaults to 65535. 13482 13483@item -mrtd 13484@opindex mrtd 13485Use a different function-calling convention, in which functions that 13486take a fixed number of arguments return with the @code{ret} @var{num} 13487instruction, which pops their arguments while returning. This saves one 13488instruction in the caller since there is no need to pop the arguments 13489there. 13490 13491You can specify that an individual function is called with this calling 13492sequence with the function attribute @samp{stdcall}. You can also 13493override the @option{-mrtd} option by using the function attribute 13494@samp{cdecl}. @xref{Function Attributes}. 13495 13496@strong{Warning:} this calling convention is incompatible with the one 13497normally used on Unix, so you cannot use it if you need to call 13498libraries compiled with the Unix compiler. 13499 13500Also, you must provide function prototypes for all functions that 13501take variable numbers of arguments (including @code{printf}); 13502otherwise incorrect code will be generated for calls to those 13503functions. 13504 13505In addition, seriously incorrect code will result if you call a 13506function with too many arguments. (Normally, extra arguments are 13507harmlessly ignored.) 13508 13509@item -mregparm=@var{num} 13510@opindex mregparm 13511Control how many registers are used to pass integer arguments. By 13512default, no registers are used to pass arguments, and at most 3 13513registers can be used. You can control this behavior for a specific 13514function by using the function attribute @samp{regparm}. 13515@xref{Function Attributes}. 13516 13517@strong{Warning:} if you use this switch, and 13518@var{num} is nonzero, then you must build all modules with the same 13519value, including any libraries. This includes the system libraries and 13520startup modules. 13521 13522@item -msseregparm 13523@opindex msseregparm 13524Use SSE register passing conventions for float and double arguments 13525and return values. You can control this behavior for a specific 13526function by using the function attribute @samp{sseregparm}. 13527@xref{Function Attributes}. 13528 13529@strong{Warning:} if you use this switch then you must build all 13530modules with the same value, including any libraries. This includes 13531the system libraries and startup modules. 13532 13533@item -mvect8-ret-in-mem 13534@opindex mvect8-ret-in-mem 13535Return 8-byte vectors in memory instead of MMX registers. This is the 13536default on Solaris@tie{}8 and 9 and VxWorks to match the ABI of the Sun 13537Studio compilers until version 12. Later compiler versions (starting 13538with Studio 12 Update@tie{}1) follow the ABI used by other x86 targets, which 13539is the default on Solaris@tie{}10 and later. @emph{Only} use this option if 13540you need to remain compatible with existing code produced by those 13541previous compiler versions or older versions of GCC. 13542 13543@item -mpc32 13544@itemx -mpc64 13545@itemx -mpc80 13546@opindex mpc32 13547@opindex mpc64 13548@opindex mpc80 13549 13550Set 80387 floating-point precision to 32, 64 or 80 bits. When @option{-mpc32} 13551is specified, the significands of results of floating-point operations are 13552rounded to 24 bits (single precision); @option{-mpc64} rounds the 13553significands of results of floating-point operations to 53 bits (double 13554precision) and @option{-mpc80} rounds the significands of results of 13555floating-point operations to 64 bits (extended double precision), which is 13556the default. When this option is used, floating-point operations in higher 13557precisions are not available to the programmer without setting the FPU 13558control word explicitly. 13559 13560Setting the rounding of floating-point operations to less than the default 1356180 bits can speed some programs by 2% or more. Note that some mathematical 13562libraries assume that extended-precision (80-bit) floating-point operations 13563are enabled by default; routines in such libraries could suffer significant 13564loss of accuracy, typically through so-called "catastrophic cancellation", 13565when this option is used to set the precision to less than extended precision. 13566 13567@item -mstackrealign 13568@opindex mstackrealign 13569Realign the stack at entry. On the Intel x86, the @option{-mstackrealign} 13570option will generate an alternate prologue and epilogue that realigns the 13571run-time stack if necessary. This supports mixing legacy codes that keep 13572a 4-byte aligned stack with modern codes that keep a 16-byte stack for 13573SSE compatibility. See also the attribute @code{force_align_arg_pointer}, 13574applicable to individual functions. 13575 13576@item -mpreferred-stack-boundary=@var{num} 13577@opindex mpreferred-stack-boundary 13578Attempt to keep the stack boundary aligned to a 2 raised to @var{num} 13579byte boundary. If @option{-mpreferred-stack-boundary} is not specified, 13580the default is 4 (16 bytes or 128 bits). 13581 13582@item -mincoming-stack-boundary=@var{num} 13583@opindex mincoming-stack-boundary 13584Assume the incoming stack is aligned to a 2 raised to @var{num} byte 13585boundary. If @option{-mincoming-stack-boundary} is not specified, 13586the one specified by @option{-mpreferred-stack-boundary} will be used. 13587 13588On Pentium and PentiumPro, @code{double} and @code{long double} values 13589should be aligned to an 8-byte boundary (see @option{-malign-double}) or 13590suffer significant run time performance penalties. On Pentium III, the 13591Streaming SIMD Extension (SSE) data type @code{__m128} may not work 13592properly if it is not 16-byte aligned. 13593 13594To ensure proper alignment of this values on the stack, the stack boundary 13595must be as aligned as that required by any value stored on the stack. 13596Further, every function must be generated such that it keeps the stack 13597aligned. Thus calling a function compiled with a higher preferred 13598stack boundary from a function compiled with a lower preferred stack 13599boundary will most likely misalign the stack. It is recommended that 13600libraries that use callbacks always use the default setting. 13601 13602This extra alignment does consume extra stack space, and generally 13603increases code size. Code that is sensitive to stack space usage, such 13604as embedded systems and operating system kernels, may want to reduce the 13605preferred alignment to @option{-mpreferred-stack-boundary=2}. 13606 13607@item -mmmx 13608@itemx -mno-mmx 13609@itemx -msse 13610@itemx -mno-sse 13611@itemx -msse2 13612@itemx -mno-sse2 13613@itemx -msse3 13614@itemx -mno-sse3 13615@itemx -mssse3 13616@itemx -mno-ssse3 13617@itemx -msse4.1 13618@need 800 13619@itemx -mno-sse4.1 13620@itemx -msse4.2 13621@itemx -mno-sse4.2 13622@itemx -msse4 13623@itemx -mno-sse4 13624@itemx -mavx 13625@itemx -mno-avx 13626@itemx -mavx2 13627@itemx -mno-avx2 13628@itemx -maes 13629@itemx -mno-aes 13630@itemx -mpclmul 13631@need 800 13632@itemx -mno-pclmul 13633@itemx -mfsgsbase 13634@itemx -mno-fsgsbase 13635@itemx -mrdrnd 13636@itemx -mno-rdrnd 13637@itemx -mf16c 13638@itemx -mno-f16c 13639@itemx -mfma 13640@itemx -mno-fma 13641@itemx -msse4a 13642@itemx -mno-sse4a 13643@itemx -mfma4 13644@need 800 13645@itemx -mno-fma4 13646@itemx -mxop 13647@itemx -mno-xop 13648@itemx -mlwp 13649@itemx -mno-lwp 13650@itemx -m3dnow 13651@itemx -mno-3dnow 13652@itemx -mpopcnt 13653@itemx -mno-popcnt 13654@itemx -mabm 13655@itemx -mno-abm 13656@itemx -mbmi 13657@itemx -mbmi2 13658@itemx -mno-bmi 13659@itemx -mno-bmi2 13660@itemx -mlzcnt 13661@itemx -mno-lzcnt 13662@itemx -mtbm 13663@itemx -mno-tbm 13664@opindex mmmx 13665@opindex mno-mmx 13666@opindex msse 13667@opindex mno-sse 13668@opindex m3dnow 13669@opindex mno-3dnow 13670These switches enable or disable the use of instructions in the MMX, SSE, 13671SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, 13672FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, LZCNT or 3DNow! 13673@: extended instruction sets. 13674These extensions are also available as built-in functions: see 13675@ref{X86 Built-in Functions}, for details of the functions enabled and 13676disabled by these switches. 13677 13678To have SSE/SSE2 instructions generated automatically from floating-point 13679code (as opposed to 387 instructions), see @option{-mfpmath=sse}. 13680 13681GCC depresses SSEx instructions when @option{-mavx} is used. Instead, it 13682generates new AVX instructions or AVX equivalence for all SSEx instructions 13683when needed. 13684 13685These options will enable GCC to use these extended instructions in 13686generated code, even without @option{-mfpmath=sse}. Applications that 13687perform run-time CPU detection must compile separate files for each 13688supported architecture, using the appropriate flags. In particular, 13689the file containing the CPU detection code should be compiled without 13690these options. 13691 13692@item -mcld 13693@opindex mcld 13694This option instructs GCC to emit a @code{cld} instruction in the prologue 13695of functions that use string instructions. String instructions depend on 13696the DF flag to select between autoincrement or autodecrement mode. While the 13697ABI specifies the DF flag to be cleared on function entry, some operating 13698systems violate this specification by not clearing the DF flag in their 13699exception dispatchers. The exception handler can be invoked with the DF flag 13700set, which leads to wrong direction mode when string instructions are used. 13701This option can be enabled by default on 32-bit x86 targets by configuring 13702GCC with the @option{--enable-cld} configure option. Generation of @code{cld} 13703instructions can be suppressed with the @option{-mno-cld} compiler option 13704in this case. 13705 13706@item -mvzeroupper 13707@opindex mvzeroupper 13708This option instructs GCC to emit a @code{vzeroupper} instruction 13709before a transfer of control flow out of the function to minimize 13710AVX to SSE transition penalty as well as remove unnecessary zeroupper 13711intrinsics. 13712 13713@item -mprefer-avx128 13714@opindex mprefer-avx128 13715This option instructs GCC to use 128-bit AVX instructions instead of 13716256-bit AVX instructions in the auto-vectorizer. 13717 13718@item -mcx16 13719@opindex mcx16 13720This option will enable GCC to use CMPXCHG16B instruction in generated code. 13721CMPXCHG16B allows for atomic operations on 128-bit double quadword (or oword) 13722data types. This is useful for high resolution counters that could be updated 13723by multiple processors (or cores). This instruction is generated as part of 13724atomic built-in functions: see @ref{__sync Builtins} or 13725@ref{__atomic Builtins} for details. 13726 13727@item -msahf 13728@opindex msahf 13729This option will enable GCC to use SAHF instruction in generated 64-bit code. 13730Early Intel CPUs with Intel 64 lacked LAHF and SAHF instructions supported 13731by AMD64 until introduction of Pentium 4 G1 step in December 2005. LAHF and 13732SAHF are load and store instructions, respectively, for certain status flags. 13733In 64-bit mode, SAHF instruction is used to optimize @code{fmod}, @code{drem} 13734or @code{remainder} built-in functions: see @ref{Other Builtins} for details. 13735 13736@item -mmovbe 13737@opindex mmovbe 13738This option will enable GCC to use movbe instruction to implement 13739@code{__builtin_bswap32} and @code{__builtin_bswap64}. 13740 13741@item -mcrc32 13742@opindex mcrc32 13743This option will enable built-in functions, @code{__builtin_ia32_crc32qi}, 13744@code{__builtin_ia32_crc32hi}. @code{__builtin_ia32_crc32si} and 13745@code{__builtin_ia32_crc32di} to generate the crc32 machine instruction. 13746 13747@item -mrecip 13748@opindex mrecip 13749This option will enable GCC to use RCPSS and RSQRTSS instructions (and their 13750vectorized variants RCPPS and RSQRTPS) with an additional Newton-Raphson step 13751to increase precision instead of DIVSS and SQRTSS (and their vectorized 13752variants) for single-precision floating-point arguments. These instructions 13753are generated only when @option{-funsafe-math-optimizations} is enabled 13754together with @option{-finite-math-only} and @option{-fno-trapping-math}. 13755Note that while the throughput of the sequence is higher than the throughput 13756of the non-reciprocal instruction, the precision of the sequence can be 13757decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994). 13758 13759Note that GCC implements @code{1.0f/sqrtf(@var{x})} in terms of RSQRTSS 13760(or RSQRTPS) already with @option{-ffast-math} (or the above option 13761combination), and doesn't need @option{-mrecip}. 13762 13763Also note that GCC emits the above sequence with additional Newton-Raphson step 13764for vectorized single-float division and vectorized @code{sqrtf(@var{x})} 13765already with @option{-ffast-math} (or the above option combination), and 13766doesn't need @option{-mrecip}. 13767 13768@item -mrecip=@var{opt} 13769@opindex mrecip=opt 13770This option allows to control which reciprocal estimate instructions 13771may be used. @var{opt} is a comma separated list of options, which may 13772be preceded by a @code{!} to invert the option: 13773@code{all}: enable all estimate instructions, 13774@code{default}: enable the default instructions, equivalent to @option{-mrecip}, 13775@code{none}: disable all estimate instructions, equivalent to @option{-mno-recip}, 13776@code{div}: enable the approximation for scalar division, 13777@code{vec-div}: enable the approximation for vectorized division, 13778@code{sqrt}: enable the approximation for scalar square root, 13779@code{vec-sqrt}: enable the approximation for vectorized square root. 13780 13781So for example, @option{-mrecip=all,!sqrt} would enable 13782all of the reciprocal approximations, except for square root. 13783 13784@item -mveclibabi=@var{type} 13785@opindex mveclibabi 13786Specifies the ABI type to use for vectorizing intrinsics using an 13787external library. Supported types are @code{svml} for the Intel short 13788vector math library and @code{acml} for the AMD math core library style 13789of interfacing. GCC will currently emit calls to @code{vmldExp2}, 13790@code{vmldLn2}, @code{vmldLog102}, @code{vmldLog102}, @code{vmldPow2}, 13791@code{vmldTanh2}, @code{vmldTan2}, @code{vmldAtan2}, @code{vmldAtanh2}, 13792@code{vmldCbrt2}, @code{vmldSinh2}, @code{vmldSin2}, @code{vmldAsinh2}, 13793@code{vmldAsin2}, @code{vmldCosh2}, @code{vmldCos2}, @code{vmldAcosh2}, 13794@code{vmldAcos2}, @code{vmlsExp4}, @code{vmlsLn4}, @code{vmlsLog104}, 13795@code{vmlsLog104}, @code{vmlsPow4}, @code{vmlsTanh4}, @code{vmlsTan4}, 13796@code{vmlsAtan4}, @code{vmlsAtanh4}, @code{vmlsCbrt4}, @code{vmlsSinh4}, 13797@code{vmlsSin4}, @code{vmlsAsinh4}, @code{vmlsAsin4}, @code{vmlsCosh4}, 13798@code{vmlsCos4}, @code{vmlsAcosh4} and @code{vmlsAcos4} for corresponding 13799function type when @option{-mveclibabi=svml} is used and @code{__vrd2_sin}, 13800@code{__vrd2_cos}, @code{__vrd2_exp}, @code{__vrd2_log}, @code{__vrd2_log2}, 13801@code{__vrd2_log10}, @code{__vrs4_sinf}, @code{__vrs4_cosf}, 13802@code{__vrs4_expf}, @code{__vrs4_logf}, @code{__vrs4_log2f}, 13803@code{__vrs4_log10f} and @code{__vrs4_powf} for corresponding function type 13804when @option{-mveclibabi=acml} is used. Both @option{-ftree-vectorize} and 13805@option{-funsafe-math-optimizations} have to be enabled. A SVML or ACML ABI 13806compatible library will have to be specified at link time. 13807 13808@item -mabi=@var{name} 13809@opindex mabi 13810Generate code for the specified calling convention. Permissible values 13811are: @samp{sysv} for the ABI used on GNU/Linux and other systems and 13812@samp{ms} for the Microsoft ABI. The default is to use the Microsoft 13813ABI when targeting Windows. On all other systems, the default is the 13814SYSV ABI. You can control this behavior for a specific function by 13815using the function attribute @samp{ms_abi}/@samp{sysv_abi}. 13816@xref{Function Attributes}. 13817 13818@item -mtls-dialect=@var{type} 13819@opindex mtls-dialect 13820Generate code to access thread-local storage using the @samp{gnu} or 13821@samp{gnu2} conventions. @samp{gnu} is the conservative default; 13822@samp{gnu2} is more efficient, but it may add compile- and run-time 13823requirements that cannot be satisfied on all systems. 13824 13825@item -mpush-args 13826@itemx -mno-push-args 13827@opindex mpush-args 13828@opindex mno-push-args 13829Use PUSH operations to store outgoing parameters. This method is shorter 13830and usually equally fast as method using SUB/MOV operations and is enabled 13831by default. In some cases disabling it may improve performance because of 13832improved scheduling and reduced dependencies. 13833 13834@item -maccumulate-outgoing-args 13835@opindex maccumulate-outgoing-args 13836If enabled, the maximum amount of space required for outgoing arguments will be 13837computed in the function prologue. This is faster on most modern CPUs 13838because of reduced dependencies, improved scheduling and reduced stack usage 13839when preferred stack boundary is not equal to 2. The drawback is a notable 13840increase in code size. This switch implies @option{-mno-push-args}. 13841 13842@item -mthreads 13843@opindex mthreads 13844Support thread-safe exception handling on @samp{Mingw32}. Code that relies 13845on thread-safe exception handling must compile and link all code with the 13846@option{-mthreads} option. When compiling, @option{-mthreads} defines 13847@option{-D_MT}; when linking, it links in a special thread helper library 13848@option{-lmingwthrd} which cleans up per thread exception handling data. 13849 13850@item -mno-align-stringops 13851@opindex mno-align-stringops 13852Do not align destination of inlined string operations. This switch reduces 13853code size and improves performance in case the destination is already aligned, 13854but GCC doesn't know about it. 13855 13856@item -minline-all-stringops 13857@opindex minline-all-stringops 13858By default GCC inlines string operations only when the destination is 13859known to be aligned to least a 4-byte boundary. 13860This enables more inlining, increase code 13861size, but may improve performance of code that depends on fast memcpy, strlen 13862and memset for short lengths. 13863 13864@item -minline-stringops-dynamically 13865@opindex minline-stringops-dynamically 13866For string operations of unknown size, use run-time checks with 13867inline code for small blocks and a library call for large blocks. 13868 13869@item -mstringop-strategy=@var{alg} 13870@opindex mstringop-strategy=@var{alg} 13871Overwrite internal decision heuristic about particular algorithm to inline 13872string operation with. The allowed values are @code{rep_byte}, 13873@code{rep_4byte}, @code{rep_8byte} for expanding using i386 @code{rep} prefix 13874of specified size, @code{byte_loop}, @code{loop}, @code{unrolled_loop} for 13875expanding inline loop, @code{libcall} for always expanding library call. 13876 13877@item -momit-leaf-frame-pointer 13878@opindex momit-leaf-frame-pointer 13879Don't keep the frame pointer in a register for leaf functions. This 13880avoids the instructions to save, set up and restore frame pointers and 13881makes an extra register available in leaf functions. The option 13882@option{-fomit-frame-pointer} removes the frame pointer for all functions, 13883which might make debugging harder. 13884 13885@item -mtls-direct-seg-refs 13886@itemx -mno-tls-direct-seg-refs 13887@opindex mtls-direct-seg-refs 13888Controls whether TLS variables may be accessed with offsets from the 13889TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit), 13890or whether the thread base pointer must be added. Whether or not this 13891is legal depends on the operating system, and whether it maps the 13892segment to cover the entire TLS area. 13893 13894For systems that use GNU libc, the default is on. 13895 13896@item -msse2avx 13897@itemx -mno-sse2avx 13898@opindex msse2avx 13899Specify that the assembler should encode SSE instructions with VEX 13900prefix. The option @option{-mavx} turns this on by default. 13901 13902@item -mfentry 13903@itemx -mno-fentry 13904@opindex mfentry 13905If profiling is active @option{-pg} put the profiling 13906counter call before prologue. 13907Note: On x86 architectures the attribute @code{ms_hook_prologue} 13908isn't possible at the moment for @option{-mfentry} and @option{-pg}. 13909 13910@item -m8bit-idiv 13911@itemx -mno-8bit-idiv 13912@opindex 8bit-idiv 13913On some processors, like Intel Atom, 8-bit unsigned integer divide is 13914much faster than 32-bit/64-bit integer divide. This option generates a 13915run-time check. If both dividend and divisor are within range of 0 13916to 255, 8-bit unsigned integer divide is used instead of 1391732-bit/64-bit integer divide. 13918 13919@item -mavx256-split-unaligned-load 13920@item -mavx256-split-unaligned-store 13921@opindex avx256-split-unaligned-load 13922@opindex avx256-split-unaligned-store 13923Split 32-byte AVX unaligned load and store. 13924 13925@end table 13926 13927These @samp{-m} switches are supported in addition to the above 13928on AMD x86-64 processors in 64-bit environments. 13929 13930@table @gcctabopt 13931@item -m32 13932@itemx -m64 13933@itemx -mx32 13934@opindex m32 13935@opindex m64 13936@opindex mx32 13937Generate code for a 32-bit or 64-bit environment. 13938The @option{-m32} option sets int, long and pointer to 32 bits and 13939generates code that runs on any i386 system. 13940The @option{-m64} option sets int to 32 bits and long and pointer 13941to 64 bits and generates code for AMD's x86-64 architecture. 13942The @option{-mx32} option sets int, long and pointer to 32 bits and 13943generates code for AMD's x86-64 architecture. 13944For darwin only the @option{-m64} option turns off the @option{-fno-pic} 13945and @option{-mdynamic-no-pic} options. 13946 13947@item -mno-red-zone 13948@opindex mno-red-zone 13949Do not use a so called red zone for x86-64 code. The red zone is mandated 13950by the x86-64 ABI, it is a 128-byte area beyond the location of the 13951stack pointer that will not be modified by signal or interrupt handlers 13952and therefore can be used for temporary data without adjusting the stack 13953pointer. The flag @option{-mno-red-zone} disables this red zone. 13954 13955@item -mcmodel=small 13956@opindex mcmodel=small 13957Generate code for the small code model: the program and its symbols must 13958be linked in the lower 2 GB of the address space. Pointers are 64 bits. 13959Programs can be statically or dynamically linked. This is the default 13960code model. 13961 13962@item -mcmodel=kernel 13963@opindex mcmodel=kernel 13964Generate code for the kernel code model. The kernel runs in the 13965negative 2 GB of the address space. 13966This model has to be used for Linux kernel code. 13967 13968@item -mcmodel=medium 13969@opindex mcmodel=medium 13970Generate code for the medium model: The program is linked in the lower 2 13971GB of the address space. Small symbols are also placed there. Symbols 13972with sizes larger than @option{-mlarge-data-threshold} are put into 13973large data or bss sections and can be located above 2GB. Programs can 13974be statically or dynamically linked. 13975 13976@item -mcmodel=large 13977@opindex mcmodel=large 13978Generate code for the large model: This model makes no assumptions 13979about addresses and sizes of sections. 13980@end table 13981 13982@node i386 and x86-64 Windows Options 13983@subsection i386 and x86-64 Windows Options 13984@cindex i386 and x86-64 Windows Options 13985 13986These additional options are available for Windows targets: 13987 13988@table @gcctabopt 13989@item -mconsole 13990@opindex mconsole 13991This option is available for Cygwin and MinGW targets. It 13992specifies that a console application is to be generated, by 13993instructing the linker to set the PE header subsystem type 13994required for console applications. 13995This is the default behavior for Cygwin and MinGW targets. 13996 13997@item -mdll 13998@opindex mdll 13999This option is available for Cygwin and MinGW targets. It 14000specifies that a DLL - a dynamic link library - is to be 14001generated, enabling the selection of the required runtime 14002startup object and entry point. 14003 14004@item -mnop-fun-dllimport 14005@opindex mnop-fun-dllimport 14006This option is available for Cygwin and MinGW targets. It 14007specifies that the dllimport attribute should be ignored. 14008 14009@item -mthread 14010@opindex mthread 14011This option is available for MinGW targets. It specifies 14012that MinGW-specific thread support is to be used. 14013 14014@item -municode 14015@opindex municode 14016This option is available for mingw-w64 targets. It specifies 14017that the UNICODE macro is getting pre-defined and that the 14018unicode capable runtime startup code is chosen. 14019 14020@item -mwin32 14021@opindex mwin32 14022This option is available for Cygwin and MinGW targets. It 14023specifies that the typical Windows pre-defined macros are to 14024be set in the pre-processor, but does not influence the choice 14025of runtime library/startup code. 14026 14027@item -mwindows 14028@opindex mwindows 14029This option is available for Cygwin and MinGW targets. It 14030specifies that a GUI application is to be generated by 14031instructing the linker to set the PE header subsystem type 14032appropriately. 14033 14034@item -fno-set-stack-executable 14035@opindex fno-set-stack-executable 14036This option is available for MinGW targets. It specifies that 14037the executable flag for stack used by nested functions isn't 14038set. This is necessary for binaries running in kernel mode of 14039Windows, as there the user32 API, which is used to set executable 14040privileges, isn't available. 14041 14042@item -mpe-aligned-commons 14043@opindex mpe-aligned-commons 14044This option is available for Cygwin and MinGW targets. It 14045specifies that the GNU extension to the PE file format that 14046permits the correct alignment of COMMON variables should be 14047used when generating code. It will be enabled by default if 14048GCC detects that the target assembler found during configuration 14049supports the feature. 14050@end table 14051 14052See also under @ref{i386 and x86-64 Options} for standard options. 14053 14054@node IA-64 Options 14055@subsection IA-64 Options 14056@cindex IA-64 Options 14057 14058These are the @samp{-m} options defined for the Intel IA-64 architecture. 14059 14060@table @gcctabopt 14061@item -mbig-endian 14062@opindex mbig-endian 14063Generate code for a big-endian target. This is the default for HP-UX@. 14064 14065@item -mlittle-endian 14066@opindex mlittle-endian 14067Generate code for a little-endian target. This is the default for AIX5 14068and GNU/Linux. 14069 14070@item -mgnu-as 14071@itemx -mno-gnu-as 14072@opindex mgnu-as 14073@opindex mno-gnu-as 14074Generate (or don't) code for the GNU assembler. This is the default. 14075@c Also, this is the default if the configure option @option{--with-gnu-as} 14076@c is used. 14077 14078@item -mgnu-ld 14079@itemx -mno-gnu-ld 14080@opindex mgnu-ld 14081@opindex mno-gnu-ld 14082Generate (or don't) code for the GNU linker. This is the default. 14083@c Also, this is the default if the configure option @option{--with-gnu-ld} 14084@c is used. 14085 14086@item -mno-pic 14087@opindex mno-pic 14088Generate code that does not use a global pointer register. The result 14089is not position independent code, and violates the IA-64 ABI@. 14090 14091@item -mvolatile-asm-stop 14092@itemx -mno-volatile-asm-stop 14093@opindex mvolatile-asm-stop 14094@opindex mno-volatile-asm-stop 14095Generate (or don't) a stop bit immediately before and after volatile asm 14096statements. 14097 14098@item -mregister-names 14099@itemx -mno-register-names 14100@opindex mregister-names 14101@opindex mno-register-names 14102Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for 14103the stacked registers. This may make assembler output more readable. 14104 14105@item -mno-sdata 14106@itemx -msdata 14107@opindex mno-sdata 14108@opindex msdata 14109Disable (or enable) optimizations that use the small data section. This may 14110be useful for working around optimizer bugs. 14111 14112@item -mconstant-gp 14113@opindex mconstant-gp 14114Generate code that uses a single constant global pointer value. This is 14115useful when compiling kernel code. 14116 14117@item -mauto-pic 14118@opindex mauto-pic 14119Generate code that is self-relocatable. This implies @option{-mconstant-gp}. 14120This is useful when compiling firmware code. 14121 14122@item -minline-float-divide-min-latency 14123@opindex minline-float-divide-min-latency 14124Generate code for inline divides of floating-point values 14125using the minimum latency algorithm. 14126 14127@item -minline-float-divide-max-throughput 14128@opindex minline-float-divide-max-throughput 14129Generate code for inline divides of floating-point values 14130using the maximum throughput algorithm. 14131 14132@item -mno-inline-float-divide 14133@opindex mno-inline-float-divide 14134Do not generate inline code for divides of floating-point values. 14135 14136@item -minline-int-divide-min-latency 14137@opindex minline-int-divide-min-latency 14138Generate code for inline divides of integer values 14139using the minimum latency algorithm. 14140 14141@item -minline-int-divide-max-throughput 14142@opindex minline-int-divide-max-throughput 14143Generate code for inline divides of integer values 14144using the maximum throughput algorithm. 14145 14146@item -mno-inline-int-divide 14147@opindex mno-inline-int-divide 14148Do not generate inline code for divides of integer values. 14149 14150@item -minline-sqrt-min-latency 14151@opindex minline-sqrt-min-latency 14152Generate code for inline square roots 14153using the minimum latency algorithm. 14154 14155@item -minline-sqrt-max-throughput 14156@opindex minline-sqrt-max-throughput 14157Generate code for inline square roots 14158using the maximum throughput algorithm. 14159 14160@item -mno-inline-sqrt 14161@opindex mno-inline-sqrt 14162Do not generate inline code for sqrt. 14163 14164@item -mfused-madd 14165@itemx -mno-fused-madd 14166@opindex mfused-madd 14167@opindex mno-fused-madd 14168Do (don't) generate code that uses the fused multiply/add or multiply/subtract 14169instructions. The default is to use these instructions. 14170 14171@item -mno-dwarf2-asm 14172@itemx -mdwarf2-asm 14173@opindex mno-dwarf2-asm 14174@opindex mdwarf2-asm 14175Don't (or do) generate assembler code for the DWARF2 line number debugging 14176info. This may be useful when not using the GNU assembler. 14177 14178@item -mearly-stop-bits 14179@itemx -mno-early-stop-bits 14180@opindex mearly-stop-bits 14181@opindex mno-early-stop-bits 14182Allow stop bits to be placed earlier than immediately preceding the 14183instruction that triggered the stop bit. This can improve instruction 14184scheduling, but does not always do so. 14185 14186@item -mfixed-range=@var{register-range} 14187@opindex mfixed-range 14188Generate code treating the given register range as fixed registers. 14189A fixed register is one that the register allocator can not use. This is 14190useful when compiling kernel code. A register range is specified as 14191two registers separated by a dash. Multiple register ranges can be 14192specified separated by a comma. 14193 14194@item -mtls-size=@var{tls-size} 14195@opindex mtls-size 14196Specify bit size of immediate TLS offsets. Valid values are 14, 22, and 1419764. 14198 14199@item -mtune=@var{cpu-type} 14200@opindex mtune 14201Tune the instruction scheduling for a particular CPU, Valid values are 14202itanium, itanium1, merced, itanium2, and mckinley. 14203 14204@item -milp32 14205@itemx -mlp64 14206@opindex milp32 14207@opindex mlp64 14208Generate code for a 32-bit or 64-bit environment. 14209The 32-bit environment sets int, long and pointer to 32 bits. 14210The 64-bit environment sets int to 32 bits and long and pointer 14211to 64 bits. These are HP-UX specific flags. 14212 14213@item -mno-sched-br-data-spec 14214@itemx -msched-br-data-spec 14215@opindex mno-sched-br-data-spec 14216@opindex msched-br-data-spec 14217(Dis/En)able data speculative scheduling before reload. 14218This will result in generation of the ld.a instructions and 14219the corresponding check instructions (ld.c / chk.a). 14220The default is 'disable'. 14221 14222@item -msched-ar-data-spec 14223@itemx -mno-sched-ar-data-spec 14224@opindex msched-ar-data-spec 14225@opindex mno-sched-ar-data-spec 14226(En/Dis)able data speculative scheduling after reload. 14227This will result in generation of the ld.a instructions and 14228the corresponding check instructions (ld.c / chk.a). 14229The default is 'enable'. 14230 14231@item -mno-sched-control-spec 14232@itemx -msched-control-spec 14233@opindex mno-sched-control-spec 14234@opindex msched-control-spec 14235(Dis/En)able control speculative scheduling. This feature is 14236available only during region scheduling (i.e.@: before reload). 14237This will result in generation of the ld.s instructions and 14238the corresponding check instructions chk.s . 14239The default is 'disable'. 14240 14241@item -msched-br-in-data-spec 14242@itemx -mno-sched-br-in-data-spec 14243@opindex msched-br-in-data-spec 14244@opindex mno-sched-br-in-data-spec 14245(En/Dis)able speculative scheduling of the instructions that 14246are dependent on the data speculative loads before reload. 14247This is effective only with @option{-msched-br-data-spec} enabled. 14248The default is 'enable'. 14249 14250@item -msched-ar-in-data-spec 14251@itemx -mno-sched-ar-in-data-spec 14252@opindex msched-ar-in-data-spec 14253@opindex mno-sched-ar-in-data-spec 14254(En/Dis)able speculative scheduling of the instructions that 14255are dependent on the data speculative loads after reload. 14256This is effective only with @option{-msched-ar-data-spec} enabled. 14257The default is 'enable'. 14258 14259@item -msched-in-control-spec 14260@itemx -mno-sched-in-control-spec 14261@opindex msched-in-control-spec 14262@opindex mno-sched-in-control-spec 14263(En/Dis)able speculative scheduling of the instructions that 14264are dependent on the control speculative loads. 14265This is effective only with @option{-msched-control-spec} enabled. 14266The default is 'enable'. 14267 14268@item -mno-sched-prefer-non-data-spec-insns 14269@itemx -msched-prefer-non-data-spec-insns 14270@opindex mno-sched-prefer-non-data-spec-insns 14271@opindex msched-prefer-non-data-spec-insns 14272If enabled, data speculative instructions will be chosen for schedule 14273only if there are no other choices at the moment. This will make 14274the use of the data speculation much more conservative. 14275The default is 'disable'. 14276 14277@item -mno-sched-prefer-non-control-spec-insns 14278@itemx -msched-prefer-non-control-spec-insns 14279@opindex mno-sched-prefer-non-control-spec-insns 14280@opindex msched-prefer-non-control-spec-insns 14281If enabled, control speculative instructions will be chosen for schedule 14282only if there are no other choices at the moment. This will make 14283the use of the control speculation much more conservative. 14284The default is 'disable'. 14285 14286@item -mno-sched-count-spec-in-critical-path 14287@itemx -msched-count-spec-in-critical-path 14288@opindex mno-sched-count-spec-in-critical-path 14289@opindex msched-count-spec-in-critical-path 14290If enabled, speculative dependencies will be considered during 14291computation of the instructions priorities. This will make the use of the 14292speculation a bit more conservative. 14293The default is 'disable'. 14294 14295@item -msched-spec-ldc 14296@opindex msched-spec-ldc 14297Use a simple data speculation check. This option is on by default. 14298 14299@item -msched-control-spec-ldc 14300@opindex msched-spec-ldc 14301Use a simple check for control speculation. This option is on by default. 14302 14303@item -msched-stop-bits-after-every-cycle 14304@opindex msched-stop-bits-after-every-cycle 14305Place a stop bit after every cycle when scheduling. This option is on 14306by default. 14307 14308@item -msched-fp-mem-deps-zero-cost 14309@opindex msched-fp-mem-deps-zero-cost 14310Assume that floating-point stores and loads are not likely to cause a conflict 14311when placed into the same instruction group. This option is disabled by 14312default. 14313 14314@item -msel-sched-dont-check-control-spec 14315@opindex msel-sched-dont-check-control-spec 14316Generate checks for control speculation in selective scheduling. 14317This flag is disabled by default. 14318 14319@item -msched-max-memory-insns=@var{max-insns} 14320@opindex msched-max-memory-insns 14321Limit on the number of memory insns per instruction group, giving lower 14322priority to subsequent memory insns attempting to schedule in the same 14323instruction group. Frequently useful to prevent cache bank conflicts. 14324The default value is 1. 14325 14326@item -msched-max-memory-insns-hard-limit 14327@opindex msched-max-memory-insns-hard-limit 14328Disallow more than `msched-max-memory-insns' in instruction group. 14329Otherwise, limit is `soft' meaning that we would prefer non-memory operations 14330when limit is reached but may still schedule memory operations. 14331 14332@end table 14333 14334@node IA-64/VMS Options 14335@subsection IA-64/VMS Options 14336 14337These @samp{-m} options are defined for the IA-64/VMS implementations: 14338 14339@table @gcctabopt 14340@item -mvms-return-codes 14341@opindex mvms-return-codes 14342Return VMS condition codes from main. The default is to return POSIX 14343style condition (e.g.@ error) codes. 14344 14345@item -mdebug-main=@var{prefix} 14346@opindex mdebug-main=@var{prefix} 14347Flag the first routine whose name starts with @var{prefix} as the main 14348routine for the debugger. 14349 14350@item -mmalloc64 14351@opindex mmalloc64 14352Default to 64-bit memory allocation routines. 14353@end table 14354 14355@node LM32 Options 14356@subsection LM32 Options 14357@cindex LM32 options 14358 14359These @option{-m} options are defined for the Lattice Mico32 architecture: 14360 14361@table @gcctabopt 14362@item -mbarrel-shift-enabled 14363@opindex mbarrel-shift-enabled 14364Enable barrel-shift instructions. 14365 14366@item -mdivide-enabled 14367@opindex mdivide-enabled 14368Enable divide and modulus instructions. 14369 14370@item -mmultiply-enabled 14371@opindex multiply-enabled 14372Enable multiply instructions. 14373 14374@item -msign-extend-enabled 14375@opindex msign-extend-enabled 14376Enable sign extend instructions. 14377 14378@item -muser-enabled 14379@opindex muser-enabled 14380Enable user-defined instructions. 14381 14382@end table 14383 14384@node M32C Options 14385@subsection M32C Options 14386@cindex M32C options 14387 14388@table @gcctabopt 14389@item -mcpu=@var{name} 14390@opindex mcpu= 14391Select the CPU for which code is generated. @var{name} may be one of 14392@samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to 14393/60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for 14394the M32C/80 series. 14395 14396@item -msim 14397@opindex msim 14398Specifies that the program will be run on the simulator. This causes 14399an alternate runtime library to be linked in which supports, for 14400example, file I/O@. You must not use this option when generating 14401programs that will run on real hardware; you must provide your own 14402runtime library for whatever I/O functions are needed. 14403 14404@item -memregs=@var{number} 14405@opindex memregs= 14406Specifies the number of memory-based pseudo-registers GCC will use 14407during code generation. These pseudo-registers will be used like real 14408registers, so there is a tradeoff between GCC's ability to fit the 14409code into available registers, and the performance penalty of using 14410memory instead of registers. Note that all modules in a program must 14411be compiled with the same value for this option. Because of that, you 14412must not use this option with the default runtime libraries gcc 14413builds. 14414 14415@end table 14416 14417@node M32R/D Options 14418@subsection M32R/D Options 14419@cindex M32R/D options 14420 14421These @option{-m} options are defined for Renesas M32R/D architectures: 14422 14423@table @gcctabopt 14424@item -m32r2 14425@opindex m32r2 14426Generate code for the M32R/2@. 14427 14428@item -m32rx 14429@opindex m32rx 14430Generate code for the M32R/X@. 14431 14432@item -m32r 14433@opindex m32r 14434Generate code for the M32R@. This is the default. 14435 14436@item -mmodel=small 14437@opindex mmodel=small 14438Assume all objects live in the lower 16MB of memory (so that their addresses 14439can be loaded with the @code{ld24} instruction), and assume all subroutines 14440are reachable with the @code{bl} instruction. 14441This is the default. 14442 14443The addressability of a particular object can be set with the 14444@code{model} attribute. 14445 14446@item -mmodel=medium 14447@opindex mmodel=medium 14448Assume objects may be anywhere in the 32-bit address space (the compiler 14449will generate @code{seth/add3} instructions to load their addresses), and 14450assume all subroutines are reachable with the @code{bl} instruction. 14451 14452@item -mmodel=large 14453@opindex mmodel=large 14454Assume objects may be anywhere in the 32-bit address space (the compiler 14455will generate @code{seth/add3} instructions to load their addresses), and 14456assume subroutines may not be reachable with the @code{bl} instruction 14457(the compiler will generate the much slower @code{seth/add3/jl} 14458instruction sequence). 14459 14460@item -msdata=none 14461@opindex msdata=none 14462Disable use of the small data area. Variables will be put into 14463one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the 14464@code{section} attribute has been specified). 14465This is the default. 14466 14467The small data area consists of sections @samp{.sdata} and @samp{.sbss}. 14468Objects may be explicitly put in the small data area with the 14469@code{section} attribute using one of these sections. 14470 14471@item -msdata=sdata 14472@opindex msdata=sdata 14473Put small global and static data in the small data area, but do not 14474generate special code to reference them. 14475 14476@item -msdata=use 14477@opindex msdata=use 14478Put small global and static data in the small data area, and generate 14479special instructions to reference them. 14480 14481@item -G @var{num} 14482@opindex G 14483@cindex smaller data references 14484Put global and static objects less than or equal to @var{num} bytes 14485into the small data or bss sections instead of the normal data or bss 14486sections. The default value of @var{num} is 8. 14487The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use} 14488for this option to have any effect. 14489 14490All modules should be compiled with the same @option{-G @var{num}} value. 14491Compiling with different values of @var{num} may or may not work; if it 14492doesn't the linker will give an error message---incorrect code will not be 14493generated. 14494 14495@item -mdebug 14496@opindex mdebug 14497Makes the M32R specific code in the compiler display some statistics 14498that might help in debugging programs. 14499 14500@item -malign-loops 14501@opindex malign-loops 14502Align all loops to a 32-byte boundary. 14503 14504@item -mno-align-loops 14505@opindex mno-align-loops 14506Do not enforce a 32-byte alignment for loops. This is the default. 14507 14508@item -missue-rate=@var{number} 14509@opindex missue-rate=@var{number} 14510Issue @var{number} instructions per cycle. @var{number} can only be 1 14511or 2. 14512 14513@item -mbranch-cost=@var{number} 14514@opindex mbranch-cost=@var{number} 14515@var{number} can only be 1 or 2. If it is 1 then branches will be 14516preferred over conditional code, if it is 2, then the opposite will 14517apply. 14518 14519@item -mflush-trap=@var{number} 14520@opindex mflush-trap=@var{number} 14521Specifies the trap number to use to flush the cache. The default is 1452212. Valid numbers are between 0 and 15 inclusive. 14523 14524@item -mno-flush-trap 14525@opindex mno-flush-trap 14526Specifies that the cache cannot be flushed by using a trap. 14527 14528@item -mflush-func=@var{name} 14529@opindex mflush-func=@var{name} 14530Specifies the name of the operating system function to call to flush 14531the cache. The default is @emph{_flush_cache}, but a function call 14532will only be used if a trap is not available. 14533 14534@item -mno-flush-func 14535@opindex mno-flush-func 14536Indicates that there is no OS function for flushing the cache. 14537 14538@end table 14539 14540@node M680x0 Options 14541@subsection M680x0 Options 14542@cindex M680x0 options 14543 14544These are the @samp{-m} options defined for M680x0 and ColdFire processors. 14545The default settings depend on which architecture was selected when 14546the compiler was configured; the defaults for the most common choices 14547are given below. 14548 14549@table @gcctabopt 14550@item -march=@var{arch} 14551@opindex march 14552Generate code for a specific M680x0 or ColdFire instruction set 14553architecture. Permissible values of @var{arch} for M680x0 14554architectures are: @samp{68000}, @samp{68010}, @samp{68020}, 14555@samp{68030}, @samp{68040}, @samp{68060} and @samp{cpu32}. ColdFire 14556architectures are selected according to Freescale's ISA classification 14557and the permissible values are: @samp{isaa}, @samp{isaaplus}, 14558@samp{isab} and @samp{isac}. 14559 14560gcc defines a macro @samp{__mcf@var{arch}__} whenever it is generating 14561code for a ColdFire target. The @var{arch} in this macro is one of the 14562@option{-march} arguments given above. 14563 14564When used together, @option{-march} and @option{-mtune} select code 14565that runs on a family of similar processors but that is optimized 14566for a particular microarchitecture. 14567 14568@item -mcpu=@var{cpu} 14569@opindex mcpu 14570Generate code for a specific M680x0 or ColdFire processor. 14571The M680x0 @var{cpu}s are: @samp{68000}, @samp{68010}, @samp{68020}, 14572@samp{68030}, @samp{68040}, @samp{68060}, @samp{68302}, @samp{68332} 14573and @samp{cpu32}. The ColdFire @var{cpu}s are given by the table 14574below, which also classifies the CPUs into families: 14575 14576@multitable @columnfractions 0.20 0.80 14577@item @strong{Family} @tab @strong{@samp{-mcpu} arguments} 14578@item @samp{51} @tab @samp{51} @samp{51ac} @samp{51cn} @samp{51em} @samp{51qe} 14579@item @samp{5206} @tab @samp{5202} @samp{5204} @samp{5206} 14580@item @samp{5206e} @tab @samp{5206e} 14581@item @samp{5208} @tab @samp{5207} @samp{5208} 14582@item @samp{5211a} @tab @samp{5210a} @samp{5211a} 14583@item @samp{5213} @tab @samp{5211} @samp{5212} @samp{5213} 14584@item @samp{5216} @tab @samp{5214} @samp{5216} 14585@item @samp{52235} @tab @samp{52230} @samp{52231} @samp{52232} @samp{52233} @samp{52234} @samp{52235} 14586@item @samp{5225} @tab @samp{5224} @samp{5225} 14587@item @samp{52259} @tab @samp{52252} @samp{52254} @samp{52255} @samp{52256} @samp{52258} @samp{52259} 14588@item @samp{5235} @tab @samp{5232} @samp{5233} @samp{5234} @samp{5235} @samp{523x} 14589@item @samp{5249} @tab @samp{5249} 14590@item @samp{5250} @tab @samp{5250} 14591@item @samp{5271} @tab @samp{5270} @samp{5271} 14592@item @samp{5272} @tab @samp{5272} 14593@item @samp{5275} @tab @samp{5274} @samp{5275} 14594@item @samp{5282} @tab @samp{5280} @samp{5281} @samp{5282} @samp{528x} 14595@item @samp{53017} @tab @samp{53011} @samp{53012} @samp{53013} @samp{53014} @samp{53015} @samp{53016} @samp{53017} 14596@item @samp{5307} @tab @samp{5307} 14597@item @samp{5329} @tab @samp{5327} @samp{5328} @samp{5329} @samp{532x} 14598@item @samp{5373} @tab @samp{5372} @samp{5373} @samp{537x} 14599@item @samp{5407} @tab @samp{5407} 14600@item @samp{5475} @tab @samp{5470} @samp{5471} @samp{5472} @samp{5473} @samp{5474} @samp{5475} @samp{547x} @samp{5480} @samp{5481} @samp{5482} @samp{5483} @samp{5484} @samp{5485} 14601@end multitable 14602 14603@option{-mcpu=@var{cpu}} overrides @option{-march=@var{arch}} if 14604@var{arch} is compatible with @var{cpu}. Other combinations of 14605@option{-mcpu} and @option{-march} are rejected. 14606 14607gcc defines the macro @samp{__mcf_cpu_@var{cpu}} when ColdFire target 14608@var{cpu} is selected. It also defines @samp{__mcf_family_@var{family}}, 14609where the value of @var{family} is given by the table above. 14610 14611@item -mtune=@var{tune} 14612@opindex mtune 14613Tune the code for a particular microarchitecture, within the 14614constraints set by @option{-march} and @option{-mcpu}. 14615The M680x0 microarchitectures are: @samp{68000}, @samp{68010}, 14616@samp{68020}, @samp{68030}, @samp{68040}, @samp{68060} 14617and @samp{cpu32}. The ColdFire microarchitectures 14618are: @samp{cfv1}, @samp{cfv2}, @samp{cfv3}, @samp{cfv4} and @samp{cfv4e}. 14619 14620You can also use @option{-mtune=68020-40} for code that needs 14621to run relatively well on 68020, 68030 and 68040 targets. 14622@option{-mtune=68020-60} is similar but includes 68060 targets 14623as well. These two options select the same tuning decisions as 14624@option{-m68020-40} and @option{-m68020-60} respectively. 14625 14626gcc defines the macros @samp{__mc@var{arch}} and @samp{__mc@var{arch}__} 14627when tuning for 680x0 architecture @var{arch}. It also defines 14628@samp{mc@var{arch}} unless either @option{-ansi} or a non-GNU @option{-std} 14629option is used. If gcc is tuning for a range of architectures, 14630as selected by @option{-mtune=68020-40} or @option{-mtune=68020-60}, 14631it defines the macros for every architecture in the range. 14632 14633gcc also defines the macro @samp{__m@var{uarch}__} when tuning for 14634ColdFire microarchitecture @var{uarch}, where @var{uarch} is one 14635of the arguments given above. 14636 14637@item -m68000 14638@itemx -mc68000 14639@opindex m68000 14640@opindex mc68000 14641Generate output for a 68000. This is the default 14642when the compiler is configured for 68000-based systems. 14643It is equivalent to @option{-march=68000}. 14644 14645Use this option for microcontrollers with a 68000 or EC000 core, 14646including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 14647 14648@item -m68010 14649@opindex m68010 14650Generate output for a 68010. This is the default 14651when the compiler is configured for 68010-based systems. 14652It is equivalent to @option{-march=68010}. 14653 14654@item -m68020 14655@itemx -mc68020 14656@opindex m68020 14657@opindex mc68020 14658Generate output for a 68020. This is the default 14659when the compiler is configured for 68020-based systems. 14660It is equivalent to @option{-march=68020}. 14661 14662@item -m68030 14663@opindex m68030 14664Generate output for a 68030. This is the default when the compiler is 14665configured for 68030-based systems. It is equivalent to 14666@option{-march=68030}. 14667 14668@item -m68040 14669@opindex m68040 14670Generate output for a 68040. This is the default when the compiler is 14671configured for 68040-based systems. It is equivalent to 14672@option{-march=68040}. 14673 14674This option inhibits the use of 68881/68882 instructions that have to be 14675emulated by software on the 68040. Use this option if your 68040 does not 14676have code to emulate those instructions. 14677 14678@item -m68060 14679@opindex m68060 14680Generate output for a 68060. This is the default when the compiler is 14681configured for 68060-based systems. It is equivalent to 14682@option{-march=68060}. 14683 14684This option inhibits the use of 68020 and 68881/68882 instructions that 14685have to be emulated by software on the 68060. Use this option if your 68060 14686does not have code to emulate those instructions. 14687 14688@item -mcpu32 14689@opindex mcpu32 14690Generate output for a CPU32. This is the default 14691when the compiler is configured for CPU32-based systems. 14692It is equivalent to @option{-march=cpu32}. 14693 14694Use this option for microcontrollers with a 14695CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334, 1469668336, 68340, 68341, 68349 and 68360. 14697 14698@item -m5200 14699@opindex m5200 14700Generate output for a 520X ColdFire CPU@. This is the default 14701when the compiler is configured for 520X-based systems. 14702It is equivalent to @option{-mcpu=5206}, and is now deprecated 14703in favor of that option. 14704 14705Use this option for microcontroller with a 5200 core, including 14706the MCF5202, MCF5203, MCF5204 and MCF5206. 14707 14708@item -m5206e 14709@opindex m5206e 14710Generate output for a 5206e ColdFire CPU@. The option is now 14711deprecated in favor of the equivalent @option{-mcpu=5206e}. 14712 14713@item -m528x 14714@opindex m528x 14715Generate output for a member of the ColdFire 528X family. 14716The option is now deprecated in favor of the equivalent 14717@option{-mcpu=528x}. 14718 14719@item -m5307 14720@opindex m5307 14721Generate output for a ColdFire 5307 CPU@. The option is now deprecated 14722in favor of the equivalent @option{-mcpu=5307}. 14723 14724@item -m5407 14725@opindex m5407 14726Generate output for a ColdFire 5407 CPU@. The option is now deprecated 14727in favor of the equivalent @option{-mcpu=5407}. 14728 14729@item -mcfv4e 14730@opindex mcfv4e 14731Generate output for a ColdFire V4e family CPU (e.g.@: 547x/548x). 14732This includes use of hardware floating-point instructions. 14733The option is equivalent to @option{-mcpu=547x}, and is now 14734deprecated in favor of that option. 14735 14736@item -m68020-40 14737@opindex m68020-40 14738Generate output for a 68040, without using any of the new instructions. 14739This results in code that can run relatively efficiently on either a 1474068020/68881 or a 68030 or a 68040. The generated code does use the 1474168881 instructions that are emulated on the 68040. 14742 14743The option is equivalent to @option{-march=68020} @option{-mtune=68020-40}. 14744 14745@item -m68020-60 14746@opindex m68020-60 14747Generate output for a 68060, without using any of the new instructions. 14748This results in code that can run relatively efficiently on either a 1474968020/68881 or a 68030 or a 68040. The generated code does use the 1475068881 instructions that are emulated on the 68060. 14751 14752The option is equivalent to @option{-march=68020} @option{-mtune=68020-60}. 14753 14754@item -mhard-float 14755@itemx -m68881 14756@opindex mhard-float 14757@opindex m68881 14758Generate floating-point instructions. This is the default for 68020 14759and above, and for ColdFire devices that have an FPU@. It defines the 14760macro @samp{__HAVE_68881__} on M680x0 targets and @samp{__mcffpu__} 14761on ColdFire targets. 14762 14763@item -msoft-float 14764@opindex msoft-float 14765Do not generate floating-point instructions; use library calls instead. 14766This is the default for 68000, 68010, and 68832 targets. It is also 14767the default for ColdFire devices that have no FPU. 14768 14769@item -mdiv 14770@itemx -mno-div 14771@opindex mdiv 14772@opindex mno-div 14773Generate (do not generate) ColdFire hardware divide and remainder 14774instructions. If @option{-march} is used without @option{-mcpu}, 14775the default is ``on'' for ColdFire architectures and ``off'' for M680x0 14776architectures. Otherwise, the default is taken from the target CPU 14777(either the default CPU, or the one specified by @option{-mcpu}). For 14778example, the default is ``off'' for @option{-mcpu=5206} and ``on'' for 14779@option{-mcpu=5206e}. 14780 14781gcc defines the macro @samp{__mcfhwdiv__} when this option is enabled. 14782 14783@item -mshort 14784@opindex mshort 14785Consider type @code{int} to be 16 bits wide, like @code{short int}. 14786Additionally, parameters passed on the stack are also aligned to a 1478716-bit boundary even on targets whose API mandates promotion to 32-bit. 14788 14789@item -mno-short 14790@opindex mno-short 14791Do not consider type @code{int} to be 16 bits wide. This is the default. 14792 14793@item -mnobitfield 14794@itemx -mno-bitfield 14795@opindex mnobitfield 14796@opindex mno-bitfield 14797Do not use the bit-field instructions. The @option{-m68000}, @option{-mcpu32} 14798and @option{-m5200} options imply @w{@option{-mnobitfield}}. 14799 14800@item -mbitfield 14801@opindex mbitfield 14802Do use the bit-field instructions. The @option{-m68020} option implies 14803@option{-mbitfield}. This is the default if you use a configuration 14804designed for a 68020. 14805 14806@item -mrtd 14807@opindex mrtd 14808Use a different function-calling convention, in which functions 14809that take a fixed number of arguments return with the @code{rtd} 14810instruction, which pops their arguments while returning. This 14811saves one instruction in the caller since there is no need to pop 14812the arguments there. 14813 14814This calling convention is incompatible with the one normally 14815used on Unix, so you cannot use it if you need to call libraries 14816compiled with the Unix compiler. 14817 14818Also, you must provide function prototypes for all functions that 14819take variable numbers of arguments (including @code{printf}); 14820otherwise incorrect code will be generated for calls to those 14821functions. 14822 14823In addition, seriously incorrect code will result if you call a 14824function with too many arguments. (Normally, extra arguments are 14825harmlessly ignored.) 14826 14827The @code{rtd} instruction is supported by the 68010, 68020, 68030, 1482868040, 68060 and CPU32 processors, but not by the 68000 or 5200. 14829 14830@item -mno-rtd 14831@opindex mno-rtd 14832Do not use the calling conventions selected by @option{-mrtd}. 14833This is the default. 14834 14835@item -malign-int 14836@itemx -mno-align-int 14837@opindex malign-int 14838@opindex mno-align-int 14839Control whether GCC aligns @code{int}, @code{long}, @code{long long}, 14840@code{float}, @code{double}, and @code{long double} variables on a 32-bit 14841boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}). 14842Aligning variables on 32-bit boundaries produces code that runs somewhat 14843faster on processors with 32-bit busses at the expense of more memory. 14844 14845@strong{Warning:} if you use the @option{-malign-int} switch, GCC will 14846align structures containing the above types differently than 14847most published application binary interface specifications for the m68k. 14848 14849@item -mpcrel 14850@opindex mpcrel 14851Use the pc-relative addressing mode of the 68000 directly, instead of 14852using a global offset table. At present, this option implies @option{-fpic}, 14853allowing at most a 16-bit offset for pc-relative addressing. @option{-fPIC} is 14854not presently supported with @option{-mpcrel}, though this could be supported for 1485568020 and higher processors. 14856 14857@item -mno-strict-align 14858@itemx -mstrict-align 14859@opindex mno-strict-align 14860@opindex mstrict-align 14861Do not (do) assume that unaligned memory references will be handled by 14862the system. 14863 14864@item -msep-data 14865Generate code that allows the data segment to be located in a different 14866area of memory from the text segment. This allows for execute in place in 14867an environment without virtual memory management. This option implies 14868@option{-fPIC}. 14869 14870@item -mno-sep-data 14871Generate code that assumes that the data segment follows the text segment. 14872This is the default. 14873 14874@item -mid-shared-library 14875Generate code that supports shared libraries via the library ID method. 14876This allows for execute in place and shared libraries in an environment 14877without virtual memory management. This option implies @option{-fPIC}. 14878 14879@item -mno-id-shared-library 14880Generate code that doesn't assume ID based shared libraries are being used. 14881This is the default. 14882 14883@item -mshared-library-id=n 14884Specified the identification number of the ID based shared library being 14885compiled. Specifying a value of 0 will generate more compact code, specifying 14886other values will force the allocation of that number to the current 14887library but is no more space or time efficient than omitting this option. 14888 14889@item -mxgot 14890@itemx -mno-xgot 14891@opindex mxgot 14892@opindex mno-xgot 14893When generating position-independent code for ColdFire, generate code 14894that works if the GOT has more than 8192 entries. This code is 14895larger and slower than code generated without this option. On M680x0 14896processors, this option is not needed; @option{-fPIC} suffices. 14897 14898GCC normally uses a single instruction to load values from the GOT@. 14899While this is relatively efficient, it only works if the GOT 14900is smaller than about 64k. Anything larger causes the linker 14901to report an error such as: 14902 14903@cindex relocation truncated to fit (ColdFire) 14904@smallexample 14905relocation truncated to fit: R_68K_GOT16O foobar 14906@end smallexample 14907 14908If this happens, you should recompile your code with @option{-mxgot}. 14909It should then work with very large GOTs. However, code generated with 14910@option{-mxgot} is less efficient, since it takes 4 instructions to fetch 14911the value of a global symbol. 14912 14913Note that some linkers, including newer versions of the GNU linker, 14914can create multiple GOTs and sort GOT entries. If you have such a linker, 14915you should only need to use @option{-mxgot} when compiling a single 14916object file that accesses more than 8192 GOT entries. Very few do. 14917 14918These options have no effect unless GCC is generating 14919position-independent code. 14920 14921@end table 14922 14923@node MCore Options 14924@subsection MCore Options 14925@cindex MCore options 14926 14927These are the @samp{-m} options defined for the Motorola M*Core 14928processors. 14929 14930@table @gcctabopt 14931 14932@item -mhardlit 14933@itemx -mno-hardlit 14934@opindex mhardlit 14935@opindex mno-hardlit 14936Inline constants into the code stream if it can be done in two 14937instructions or less. 14938 14939@item -mdiv 14940@itemx -mno-div 14941@opindex mdiv 14942@opindex mno-div 14943Use the divide instruction. (Enabled by default). 14944 14945@item -mrelax-immediate 14946@itemx -mno-relax-immediate 14947@opindex mrelax-immediate 14948@opindex mno-relax-immediate 14949Allow arbitrary sized immediates in bit operations. 14950 14951@item -mwide-bitfields 14952@itemx -mno-wide-bitfields 14953@opindex mwide-bitfields 14954@opindex mno-wide-bitfields 14955Always treat bit-fields as int-sized. 14956 14957@item -m4byte-functions 14958@itemx -mno-4byte-functions 14959@opindex m4byte-functions 14960@opindex mno-4byte-functions 14961Force all functions to be aligned to a 4-byte boundary. 14962 14963@item -mcallgraph-data 14964@itemx -mno-callgraph-data 14965@opindex mcallgraph-data 14966@opindex mno-callgraph-data 14967Emit callgraph information. 14968 14969@item -mslow-bytes 14970@itemx -mno-slow-bytes 14971@opindex mslow-bytes 14972@opindex mno-slow-bytes 14973Prefer word access when reading byte quantities. 14974 14975@item -mlittle-endian 14976@itemx -mbig-endian 14977@opindex mlittle-endian 14978@opindex mbig-endian 14979Generate code for a little-endian target. 14980 14981@item -m210 14982@itemx -m340 14983@opindex m210 14984@opindex m340 14985Generate code for the 210 processor. 14986 14987@item -mno-lsim 14988@opindex mno-lsim 14989Assume that runtime support has been provided and so omit the 14990simulator library (@file{libsim.a)} from the linker command line. 14991 14992@item -mstack-increment=@var{size} 14993@opindex mstack-increment 14994Set the maximum amount for a single stack increment operation. Large 14995values can increase the speed of programs that contain functions 14996that need a large amount of stack space, but they can also trigger a 14997segmentation fault if the stack is extended too much. The default 14998value is 0x1000. 14999 15000@end table 15001 15002@node MeP Options 15003@subsection MeP Options 15004@cindex MeP options 15005 15006@table @gcctabopt 15007 15008@item -mabsdiff 15009@opindex mabsdiff 15010Enables the @code{abs} instruction, which is the absolute difference 15011between two registers. 15012 15013@item -mall-opts 15014@opindex mall-opts 15015Enables all the optional instructions - average, multiply, divide, bit 15016operations, leading zero, absolute difference, min/max, clip, and 15017saturation. 15018 15019 15020@item -maverage 15021@opindex maverage 15022Enables the @code{ave} instruction, which computes the average of two 15023registers. 15024 15025@item -mbased=@var{n} 15026@opindex mbased= 15027Variables of size @var{n} bytes or smaller will be placed in the 15028@code{.based} section by default. Based variables use the @code{$tp} 15029register as a base register, and there is a 128-byte limit to the 15030@code{.based} section. 15031 15032@item -mbitops 15033@opindex mbitops 15034Enables the bit operation instructions - bit test (@code{btstm}), set 15035(@code{bsetm}), clear (@code{bclrm}), invert (@code{bnotm}), and 15036test-and-set (@code{tas}). 15037 15038@item -mc=@var{name} 15039@opindex mc= 15040Selects which section constant data will be placed in. @var{name} may 15041be @code{tiny}, @code{near}, or @code{far}. 15042 15043@item -mclip 15044@opindex mclip 15045Enables the @code{clip} instruction. Note that @code{-mclip} is not 15046useful unless you also provide @code{-mminmax}. 15047 15048@item -mconfig=@var{name} 15049@opindex mconfig= 15050Selects one of the build-in core configurations. Each MeP chip has 15051one or more modules in it; each module has a core CPU and a variety of 15052coprocessors, optional instructions, and peripherals. The 15053@code{MeP-Integrator} tool, not part of GCC, provides these 15054configurations through this option; using this option is the same as 15055using all the corresponding command-line options. The default 15056configuration is @code{default}. 15057 15058@item -mcop 15059@opindex mcop 15060Enables the coprocessor instructions. By default, this is a 32-bit 15061coprocessor. Note that the coprocessor is normally enabled via the 15062@code{-mconfig=} option. 15063 15064@item -mcop32 15065@opindex mcop32 15066Enables the 32-bit coprocessor's instructions. 15067 15068@item -mcop64 15069@opindex mcop64 15070Enables the 64-bit coprocessor's instructions. 15071 15072@item -mivc2 15073@opindex mivc2 15074Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor. 15075 15076@item -mdc 15077@opindex mdc 15078Causes constant variables to be placed in the @code{.near} section. 15079 15080@item -mdiv 15081@opindex mdiv 15082Enables the @code{div} and @code{divu} instructions. 15083 15084@item -meb 15085@opindex meb 15086Generate big-endian code. 15087 15088@item -mel 15089@opindex mel 15090Generate little-endian code. 15091 15092@item -mio-volatile 15093@opindex mio-volatile 15094Tells the compiler that any variable marked with the @code{io} 15095attribute is to be considered volatile. 15096 15097@item -ml 15098@opindex ml 15099Causes variables to be assigned to the @code{.far} section by default. 15100 15101@item -mleadz 15102@opindex mleadz 15103Enables the @code{leadz} (leading zero) instruction. 15104 15105@item -mm 15106@opindex mm 15107Causes variables to be assigned to the @code{.near} section by default. 15108 15109@item -mminmax 15110@opindex mminmax 15111Enables the @code{min} and @code{max} instructions. 15112 15113@item -mmult 15114@opindex mmult 15115Enables the multiplication and multiply-accumulate instructions. 15116 15117@item -mno-opts 15118@opindex mno-opts 15119Disables all the optional instructions enabled by @code{-mall-opts}. 15120 15121@item -mrepeat 15122@opindex mrepeat 15123Enables the @code{repeat} and @code{erepeat} instructions, used for 15124low-overhead looping. 15125 15126@item -ms 15127@opindex ms 15128Causes all variables to default to the @code{.tiny} section. Note 15129that there is a 65536-byte limit to this section. Accesses to these 15130variables use the @code{%gp} base register. 15131 15132@item -msatur 15133@opindex msatur 15134Enables the saturation instructions. Note that the compiler does not 15135currently generate these itself, but this option is included for 15136compatibility with other tools, like @code{as}. 15137 15138@item -msdram 15139@opindex msdram 15140Link the SDRAM-based runtime instead of the default ROM-based runtime. 15141 15142@item -msim 15143@opindex msim 15144Link the simulator runtime libraries. 15145 15146@item -msimnovec 15147@opindex msimnovec 15148Link the simulator runtime libraries, excluding built-in support 15149for reset and exception vectors and tables. 15150 15151@item -mtf 15152@opindex mtf 15153Causes all functions to default to the @code{.far} section. Without 15154this option, functions default to the @code{.near} section. 15155 15156@item -mtiny=@var{n} 15157@opindex mtiny= 15158Variables that are @var{n} bytes or smaller will be allocated to the 15159@code{.tiny} section. These variables use the @code{$gp} base 15160register. The default for this option is 4, but note that there's a 1516165536-byte limit to the @code{.tiny} section. 15162 15163@end table 15164 15165@node MicroBlaze Options 15166@subsection MicroBlaze Options 15167@cindex MicroBlaze Options 15168 15169@table @gcctabopt 15170 15171@item -msoft-float 15172@opindex msoft-float 15173Use software emulation for floating point (default). 15174 15175@item -mhard-float 15176@opindex mhard-float 15177Use hardware floating-point instructions. 15178 15179@item -mmemcpy 15180@opindex mmemcpy 15181Do not optimize block moves, use @code{memcpy}. 15182 15183@item -mno-clearbss 15184@opindex mno-clearbss 15185This option is deprecated. Use @option{-fno-zero-initialized-in-bss} instead. 15186 15187@item -mcpu=@var{cpu-type} 15188@opindex mcpu= 15189Use features of and schedule code for given CPU. 15190Supported values are in the format @samp{v@var{X}.@var{YY}.@var{Z}}, 15191where @var{X} is a major version, @var{YY} is the minor version, and 15192@var{Z} is compatibility code. Example values are @samp{v3.00.a}, 15193@samp{v4.00.b}, @samp{v5.00.a}, @samp{v5.00.b}, @samp{v5.00.b}, @samp{v6.00.a}. 15194 15195@item -mxl-soft-mul 15196@opindex mxl-soft-mul 15197Use software multiply emulation (default). 15198 15199@item -mxl-soft-div 15200@opindex mxl-soft-div 15201Use software emulation for divides (default). 15202 15203@item -mxl-barrel-shift 15204@opindex mxl-barrel-shift 15205Use the hardware barrel shifter. 15206 15207@item -mxl-pattern-compare 15208@opindex mxl-pattern-compare 15209Use pattern compare instructions. 15210 15211@item -msmall-divides 15212@opindex msmall-divides 15213Use table lookup optimization for small signed integer divisions. 15214 15215@item -mxl-stack-check 15216@opindex mxl-stack-check 15217This option is deprecated. Use -fstack-check instead. 15218 15219@item -mxl-gp-opt 15220@opindex mxl-gp-opt 15221Use GP relative sdata/sbss sections. 15222 15223@item -mxl-multiply-high 15224@opindex mxl-multiply-high 15225Use multiply high instructions for high part of 32x32 multiply. 15226 15227@item -mxl-float-convert 15228@opindex mxl-float-convert 15229Use hardware floating-point conversion instructions. 15230 15231@item -mxl-float-sqrt 15232@opindex mxl-float-sqrt 15233Use hardware floating-point square root instruction. 15234 15235@item -mxl-mode-@var{app-model} 15236Select application model @var{app-model}. Valid models are 15237@table @samp 15238@item executable 15239normal executable (default), uses startup code @file{crt0.o}. 15240 15241@item xmdstub 15242for use with Xilinx Microprocessor Debugger (XMD) based 15243software intrusive debug agent called xmdstub. This uses startup file 15244@file{crt1.o} and sets the start address of the program to be 0x800. 15245 15246@item bootstrap 15247for applications that are loaded using a bootloader. 15248This model uses startup file @file{crt2.o} which does not contain a processor 15249reset vector handler. This is suitable for transferring control on a 15250processor reset to the bootloader rather than the application. 15251 15252@item novectors 15253for applications that do not require any of the 15254MicroBlaze vectors. This option may be useful for applications running 15255within a monitoring application. This model uses @file{crt3.o} as a startup file. 15256@end table 15257 15258Option @option{-xl-mode-@var{app-model}} is a deprecated alias for 15259@option{-mxl-mode-@var{app-model}}. 15260 15261@end table 15262 15263@node MIPS Options 15264@subsection MIPS Options 15265@cindex MIPS options 15266 15267@table @gcctabopt 15268 15269@item -EB 15270@opindex EB 15271Generate big-endian code. 15272 15273@item -EL 15274@opindex EL 15275Generate little-endian code. This is the default for @samp{mips*el-*-*} 15276configurations. 15277 15278@item -march=@var{arch} 15279@opindex march 15280Generate code that will run on @var{arch}, which can be the name of a 15281generic MIPS ISA, or the name of a particular processor. 15282The ISA names are: 15283@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4}, 15284@samp{mips32}, @samp{mips32r2}, @samp{mips64} and @samp{mips64r2}. 15285The processor names are: 15286@samp{4kc}, @samp{4km}, @samp{4kp}, @samp{4ksc}, 15287@samp{4kec}, @samp{4kem}, @samp{4kep}, @samp{4ksd}, 15288@samp{5kc}, @samp{5kf}, 15289@samp{20kc}, 15290@samp{24kc}, @samp{24kf2_1}, @samp{24kf1_1}, 15291@samp{24kec}, @samp{24kef2_1}, @samp{24kef1_1}, 15292@samp{34kc}, @samp{34kf2_1}, @samp{34kf1_1}, 15293@samp{74kc}, @samp{74kf2_1}, @samp{74kf1_1}, @samp{74kf3_2}, 15294@samp{1004kc}, @samp{1004kf2_1}, @samp{1004kf1_1}, 15295@samp{loongson2e}, @samp{loongson2f}, @samp{loongson3a}, 15296@samp{m4k}, 15297@samp{octeon}, @samp{octeon+}, @samp{octeon2}, 15298@samp{orion}, 15299@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400}, 15300@samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000}, 15301@samp{rm7000}, @samp{rm9000}, 15302@samp{r10000}, @samp{r12000}, @samp{r14000}, @samp{r16000}, 15303@samp{sb1}, 15304@samp{sr71000}, 15305@samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300}, 15306@samp{vr5000}, @samp{vr5400}, @samp{vr5500} 15307and @samp{xlr}. 15308The special value @samp{from-abi} selects the 15309most compatible architecture for the selected ABI (that is, 15310@samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@. 15311 15312Native Linux/GNU and IRIX toolchains also support the value @samp{native}, 15313which selects the best architecture option for the host processor. 15314@option{-march=native} has no effect if GCC does not recognize 15315the processor. 15316 15317In processor names, a final @samp{000} can be abbreviated as @samp{k} 15318(for example, @samp{-march=r2k}). Prefixes are optional, and 15319@samp{vr} may be written @samp{r}. 15320 15321Names of the form @samp{@var{n}f2_1} refer to processors with 15322FPUs clocked at half the rate of the core, names of the form 15323@samp{@var{n}f1_1} refer to processors with FPUs clocked at the same 15324rate as the core, and names of the form @samp{@var{n}f3_2} refer to 15325processors with FPUs clocked a ratio of 3:2 with respect to the core. 15326For compatibility reasons, @samp{@var{n}f} is accepted as a synonym 15327for @samp{@var{n}f2_1} while @samp{@var{n}x} and @samp{@var{b}fx} are 15328accepted as synonyms for @samp{@var{n}f1_1}. 15329 15330GCC defines two macros based on the value of this option. The first 15331is @samp{_MIPS_ARCH}, which gives the name of target architecture, as 15332a string. The second has the form @samp{_MIPS_ARCH_@var{foo}}, 15333where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@. 15334For example, @samp{-march=r2000} will set @samp{_MIPS_ARCH} 15335to @samp{"r2000"} and define the macro @samp{_MIPS_ARCH_R2000}. 15336 15337Note that the @samp{_MIPS_ARCH} macro uses the processor names given 15338above. In other words, it will have the full prefix and will not 15339abbreviate @samp{000} as @samp{k}. In the case of @samp{from-abi}, 15340the macro names the resolved architecture (either @samp{"mips1"} or 15341@samp{"mips3"}). It names the default architecture when no 15342@option{-march} option is given. 15343 15344@item -mtune=@var{arch} 15345@opindex mtune 15346Optimize for @var{arch}. Among other things, this option controls 15347the way instructions are scheduled, and the perceived cost of arithmetic 15348operations. The list of @var{arch} values is the same as for 15349@option{-march}. 15350 15351When this option is not used, GCC will optimize for the processor 15352specified by @option{-march}. By using @option{-march} and 15353@option{-mtune} together, it is possible to generate code that will 15354run on a family of processors, but optimize the code for one 15355particular member of that family. 15356 15357@samp{-mtune} defines the macros @samp{_MIPS_TUNE} and 15358@samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the 15359@samp{-march} ones described above. 15360 15361@item -mips1 15362@opindex mips1 15363Equivalent to @samp{-march=mips1}. 15364 15365@item -mips2 15366@opindex mips2 15367Equivalent to @samp{-march=mips2}. 15368 15369@item -mips3 15370@opindex mips3 15371Equivalent to @samp{-march=mips3}. 15372 15373@item -mips4 15374@opindex mips4 15375Equivalent to @samp{-march=mips4}. 15376 15377@item -mips32 15378@opindex mips32 15379Equivalent to @samp{-march=mips32}. 15380 15381@item -mips32r2 15382@opindex mips32r2 15383Equivalent to @samp{-march=mips32r2}. 15384 15385@item -mips64 15386@opindex mips64 15387Equivalent to @samp{-march=mips64}. 15388 15389@item -mips64r2 15390@opindex mips64r2 15391Equivalent to @samp{-march=mips64r2}. 15392 15393@item -mips16 15394@itemx -mno-mips16 15395@opindex mips16 15396@opindex mno-mips16 15397Generate (do not generate) MIPS16 code. If GCC is targetting a 15398MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE@. 15399 15400MIPS16 code generation can also be controlled on a per-function basis 15401by means of @code{mips16} and @code{nomips16} attributes. 15402@xref{Function Attributes}, for more information. 15403 15404@item -mflip-mips16 15405@opindex mflip-mips16 15406Generate MIPS16 code on alternating functions. This option is provided 15407for regression testing of mixed MIPS16/non-MIPS16 code generation, and is 15408not intended for ordinary use in compiling user code. 15409 15410@item -minterlink-mips16 15411@itemx -mno-interlink-mips16 15412@opindex minterlink-mips16 15413@opindex mno-interlink-mips16 15414Require (do not require) that non-MIPS16 code be link-compatible with 15415MIPS16 code. 15416 15417For example, non-MIPS16 code cannot jump directly to MIPS16 code; 15418it must either use a call or an indirect jump. @option{-minterlink-mips16} 15419therefore disables direct jumps unless GCC knows that the target of the 15420jump is not MIPS16. 15421 15422@item -mabi=32 15423@itemx -mabi=o64 15424@itemx -mabi=n32 15425@itemx -mabi=64 15426@itemx -mabi=eabi 15427@opindex mabi=32 15428@opindex mabi=o64 15429@opindex mabi=n32 15430@opindex mabi=64 15431@opindex mabi=eabi 15432Generate code for the given ABI@. 15433 15434Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 15435generates 64-bit code when you select a 64-bit architecture, but you 15436can use @option{-mgp32} to get 32-bit code instead. 15437 15438For information about the O64 ABI, see 15439@uref{http://gcc.gnu.org/@/projects/@/mipso64-abi.html}. 15440 15441GCC supports a variant of the o32 ABI in which floating-point registers 15442are 64 rather than 32 bits wide. You can select this combination with 15443@option{-mabi=32} @option{-mfp64}. This ABI relies on the @samp{mthc1} 15444and @samp{mfhc1} instructions and is therefore only supported for 15445MIPS32R2 processors. 15446 15447The register assignments for arguments and return values remain the 15448same, but each scalar value is passed in a single 64-bit register 15449rather than a pair of 32-bit registers. For example, scalar 15450floating-point values are returned in @samp{$f0} only, not a 15451@samp{$f0}/@samp{$f1} pair. The set of call-saved registers also 15452remains the same, but all 64 bits are saved. 15453 15454@item -mabicalls 15455@itemx -mno-abicalls 15456@opindex mabicalls 15457@opindex mno-abicalls 15458Generate (do not generate) code that is suitable for SVR4-style 15459dynamic objects. @option{-mabicalls} is the default for SVR4-based 15460systems. 15461 15462@item -mshared 15463@itemx -mno-shared 15464Generate (do not generate) code that is fully position-independent, 15465and that can therefore be linked into shared libraries. This option 15466only affects @option{-mabicalls}. 15467 15468All @option{-mabicalls} code has traditionally been position-independent, 15469regardless of options like @option{-fPIC} and @option{-fpic}. However, 15470as an extension, the GNU toolchain allows executables to use absolute 15471accesses for locally-binding symbols. It can also use shorter GP 15472initialization sequences and generate direct calls to locally-defined 15473functions. This mode is selected by @option{-mno-shared}. 15474 15475@option{-mno-shared} depends on binutils 2.16 or higher and generates 15476objects that can only be linked by the GNU linker. However, the option 15477does not affect the ABI of the final executable; it only affects the ABI 15478of relocatable objects. Using @option{-mno-shared} will generally make 15479executables both smaller and quicker. 15480 15481@option{-mshared} is the default. 15482 15483@item -mplt 15484@itemx -mno-plt 15485@opindex mplt 15486@opindex mno-plt 15487Assume (do not assume) that the static and dynamic linkers 15488support PLTs and copy relocations. This option only affects 15489@samp{-mno-shared -mabicalls}. For the n64 ABI, this option 15490has no effect without @samp{-msym32}. 15491 15492You can make @option{-mplt} the default by configuring 15493GCC with @option{--with-mips-plt}. The default is 15494@option{-mno-plt} otherwise. 15495 15496@item -mxgot 15497@itemx -mno-xgot 15498@opindex mxgot 15499@opindex mno-xgot 15500Lift (do not lift) the usual restrictions on the size of the global 15501offset table. 15502 15503GCC normally uses a single instruction to load values from the GOT@. 15504While this is relatively efficient, it will only work if the GOT 15505is smaller than about 64k. Anything larger will cause the linker 15506to report an error such as: 15507 15508@cindex relocation truncated to fit (MIPS) 15509@smallexample 15510relocation truncated to fit: R_MIPS_GOT16 foobar 15511@end smallexample 15512 15513If this happens, you should recompile your code with @option{-mxgot}. 15514It should then work with very large GOTs, although it will also be 15515less efficient, since it will take three instructions to fetch the 15516value of a global symbol. 15517 15518Note that some linkers can create multiple GOTs. If you have such a 15519linker, you should only need to use @option{-mxgot} when a single object 15520file accesses more than 64k's worth of GOT entries. Very few do. 15521 15522These options have no effect unless GCC is generating position 15523independent code. 15524 15525@item -mgp32 15526@opindex mgp32 15527Assume that general-purpose registers are 32 bits wide. 15528 15529@item -mgp64 15530@opindex mgp64 15531Assume that general-purpose registers are 64 bits wide. 15532 15533@item -mfp32 15534@opindex mfp32 15535Assume that floating-point registers are 32 bits wide. 15536 15537@item -mfp64 15538@opindex mfp64 15539Assume that floating-point registers are 64 bits wide. 15540 15541@item -mhard-float 15542@opindex mhard-float 15543Use floating-point coprocessor instructions. 15544 15545@item -msoft-float 15546@opindex msoft-float 15547Do not use floating-point coprocessor instructions. Implement 15548floating-point calculations using library calls instead. 15549 15550@item -msingle-float 15551@opindex msingle-float 15552Assume that the floating-point coprocessor only supports single-precision 15553operations. 15554 15555@item -mdouble-float 15556@opindex mdouble-float 15557Assume that the floating-point coprocessor supports double-precision 15558operations. This is the default. 15559 15560@item -mllsc 15561@itemx -mno-llsc 15562@opindex mllsc 15563@opindex mno-llsc 15564Use (do not use) @samp{ll}, @samp{sc}, and @samp{sync} instructions to 15565implement atomic memory built-in functions. When neither option is 15566specified, GCC will use the instructions if the target architecture 15567supports them. 15568 15569@option{-mllsc} is useful if the runtime environment can emulate the 15570instructions and @option{-mno-llsc} can be useful when compiling for 15571nonstandard ISAs. You can make either option the default by 15572configuring GCC with @option{--with-llsc} and @option{--without-llsc} 15573respectively. @option{--with-llsc} is the default for some 15574configurations; see the installation documentation for details. 15575 15576@item -mdsp 15577@itemx -mno-dsp 15578@opindex mdsp 15579@opindex mno-dsp 15580Use (do not use) revision 1 of the MIPS DSP ASE@. 15581@xref{MIPS DSP Built-in Functions}. This option defines the 15582preprocessor macro @samp{__mips_dsp}. It also defines 15583@samp{__mips_dsp_rev} to 1. 15584 15585@item -mdspr2 15586@itemx -mno-dspr2 15587@opindex mdspr2 15588@opindex mno-dspr2 15589Use (do not use) revision 2 of the MIPS DSP ASE@. 15590@xref{MIPS DSP Built-in Functions}. This option defines the 15591preprocessor macros @samp{__mips_dsp} and @samp{__mips_dspr2}. 15592It also defines @samp{__mips_dsp_rev} to 2. 15593 15594@item -msmartmips 15595@itemx -mno-smartmips 15596@opindex msmartmips 15597@opindex mno-smartmips 15598Use (do not use) the MIPS SmartMIPS ASE. 15599 15600@item -mpaired-single 15601@itemx -mno-paired-single 15602@opindex mpaired-single 15603@opindex mno-paired-single 15604Use (do not use) paired-single floating-point instructions. 15605@xref{MIPS Paired-Single Support}. This option requires 15606hardware floating-point support to be enabled. 15607 15608@item -mdmx 15609@itemx -mno-mdmx 15610@opindex mdmx 15611@opindex mno-mdmx 15612Use (do not use) MIPS Digital Media Extension instructions. 15613This option can only be used when generating 64-bit code and requires 15614hardware floating-point support to be enabled. 15615 15616@item -mips3d 15617@itemx -mno-mips3d 15618@opindex mips3d 15619@opindex mno-mips3d 15620Use (do not use) the MIPS-3D ASE@. @xref{MIPS-3D Built-in Functions}. 15621The option @option{-mips3d} implies @option{-mpaired-single}. 15622 15623@item -mmt 15624@itemx -mno-mt 15625@opindex mmt 15626@opindex mno-mt 15627Use (do not use) MT Multithreading instructions. 15628 15629@item -mlong64 15630@opindex mlong64 15631Force @code{long} types to be 64 bits wide. See @option{-mlong32} for 15632an explanation of the default and the way that the pointer size is 15633determined. 15634 15635@item -mlong32 15636@opindex mlong32 15637Force @code{long}, @code{int}, and pointer types to be 32 bits wide. 15638 15639The default size of @code{int}s, @code{long}s and pointers depends on 15640the ABI@. All the supported ABIs use 32-bit @code{int}s. The n64 ABI 15641uses 64-bit @code{long}s, as does the 64-bit EABI; the others use 1564232-bit @code{long}s. Pointers are the same size as @code{long}s, 15643or the same size as integer registers, whichever is smaller. 15644 15645@item -msym32 15646@itemx -mno-sym32 15647@opindex msym32 15648@opindex mno-sym32 15649Assume (do not assume) that all symbols have 32-bit values, regardless 15650of the selected ABI@. This option is useful in combination with 15651@option{-mabi=64} and @option{-mno-abicalls} because it allows GCC 15652to generate shorter and faster references to symbolic addresses. 15653 15654@item -G @var{num} 15655@opindex G 15656Put definitions of externally-visible data in a small data section 15657if that data is no bigger than @var{num} bytes. GCC can then access 15658the data more efficiently; see @option{-mgpopt} for details. 15659 15660The default @option{-G} option depends on the configuration. 15661 15662@item -mlocal-sdata 15663@itemx -mno-local-sdata 15664@opindex mlocal-sdata 15665@opindex mno-local-sdata 15666Extend (do not extend) the @option{-G} behavior to local data too, 15667such as to static variables in C@. @option{-mlocal-sdata} is the 15668default for all configurations. 15669 15670If the linker complains that an application is using too much small data, 15671you might want to try rebuilding the less performance-critical parts with 15672@option{-mno-local-sdata}. You might also want to build large 15673libraries with @option{-mno-local-sdata}, so that the libraries leave 15674more room for the main program. 15675 15676@item -mextern-sdata 15677@itemx -mno-extern-sdata 15678@opindex mextern-sdata 15679@opindex mno-extern-sdata 15680Assume (do not assume) that externally-defined data will be in 15681a small data section if that data is within the @option{-G} limit. 15682@option{-mextern-sdata} is the default for all configurations. 15683 15684If you compile a module @var{Mod} with @option{-mextern-sdata} @option{-G 15685@var{num}} @option{-mgpopt}, and @var{Mod} references a variable @var{Var} 15686that is no bigger than @var{num} bytes, you must make sure that @var{Var} 15687is placed in a small data section. If @var{Var} is defined by another 15688module, you must either compile that module with a high-enough 15689@option{-G} setting or attach a @code{section} attribute to @var{Var}'s 15690definition. If @var{Var} is common, you must link the application 15691with a high-enough @option{-G} setting. 15692 15693The easiest way of satisfying these restrictions is to compile 15694and link every module with the same @option{-G} option. However, 15695you may wish to build a library that supports several different 15696small data limits. You can do this by compiling the library with 15697the highest supported @option{-G} setting and additionally using 15698@option{-mno-extern-sdata} to stop the library from making assumptions 15699about externally-defined data. 15700 15701@item -mgpopt 15702@itemx -mno-gpopt 15703@opindex mgpopt 15704@opindex mno-gpopt 15705Use (do not use) GP-relative accesses for symbols that are known to be 15706in a small data section; see @option{-G}, @option{-mlocal-sdata} and 15707@option{-mextern-sdata}. @option{-mgpopt} is the default for all 15708configurations. 15709 15710@option{-mno-gpopt} is useful for cases where the @code{$gp} register 15711might not hold the value of @code{_gp}. For example, if the code is 15712part of a library that might be used in a boot monitor, programs that 15713call boot monitor routines will pass an unknown value in @code{$gp}. 15714(In such situations, the boot monitor itself would usually be compiled 15715with @option{-G0}.) 15716 15717@option{-mno-gpopt} implies @option{-mno-local-sdata} and 15718@option{-mno-extern-sdata}. 15719 15720@item -membedded-data 15721@itemx -mno-embedded-data 15722@opindex membedded-data 15723@opindex mno-embedded-data 15724Allocate variables to the read-only data section first if possible, then 15725next in the small data section if possible, otherwise in data. This gives 15726slightly slower code than the default, but reduces the amount of RAM required 15727when executing, and thus may be preferred for some embedded systems. 15728 15729@item -muninit-const-in-rodata 15730@itemx -mno-uninit-const-in-rodata 15731@opindex muninit-const-in-rodata 15732@opindex mno-uninit-const-in-rodata 15733Put uninitialized @code{const} variables in the read-only data section. 15734This option is only meaningful in conjunction with @option{-membedded-data}. 15735 15736@item -mcode-readable=@var{setting} 15737@opindex mcode-readable 15738Specify whether GCC may generate code that reads from executable sections. 15739There are three possible settings: 15740 15741@table @gcctabopt 15742@item -mcode-readable=yes 15743Instructions may freely access executable sections. This is the 15744default setting. 15745 15746@item -mcode-readable=pcrel 15747MIPS16 PC-relative load instructions can access executable sections, 15748but other instructions must not do so. This option is useful on 4KSc 15749and 4KSd processors when the code TLBs have the Read Inhibit bit set. 15750It is also useful on processors that can be configured to have a dual 15751instruction/data SRAM interface and that, like the M4K, automatically 15752redirect PC-relative loads to the instruction RAM. 15753 15754@item -mcode-readable=no 15755Instructions must not access executable sections. This option can be 15756useful on targets that are configured to have a dual instruction/data 15757SRAM interface but that (unlike the M4K) do not automatically redirect 15758PC-relative loads to the instruction RAM. 15759@end table 15760 15761@item -msplit-addresses 15762@itemx -mno-split-addresses 15763@opindex msplit-addresses 15764@opindex mno-split-addresses 15765Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler 15766relocation operators. This option has been superseded by 15767@option{-mexplicit-relocs} but is retained for backwards compatibility. 15768 15769@item -mexplicit-relocs 15770@itemx -mno-explicit-relocs 15771@opindex mexplicit-relocs 15772@opindex mno-explicit-relocs 15773Use (do not use) assembler relocation operators when dealing with symbolic 15774addresses. The alternative, selected by @option{-mno-explicit-relocs}, 15775is to use assembler macros instead. 15776 15777@option{-mexplicit-relocs} is the default if GCC was configured 15778to use an assembler that supports relocation operators. 15779 15780@item -mcheck-zero-division 15781@itemx -mno-check-zero-division 15782@opindex mcheck-zero-division 15783@opindex mno-check-zero-division 15784Trap (do not trap) on integer division by zero. 15785 15786The default is @option{-mcheck-zero-division}. 15787 15788@item -mdivide-traps 15789@itemx -mdivide-breaks 15790@opindex mdivide-traps 15791@opindex mdivide-breaks 15792MIPS systems check for division by zero by generating either a 15793conditional trap or a break instruction. Using traps results in 15794smaller code, but is only supported on MIPS II and later. Also, some 15795versions of the Linux kernel have a bug that prevents trap from 15796generating the proper signal (@code{SIGFPE}). Use @option{-mdivide-traps} to 15797allow conditional traps on architectures that support them and 15798@option{-mdivide-breaks} to force the use of breaks. 15799 15800The default is usually @option{-mdivide-traps}, but this can be 15801overridden at configure time using @option{--with-divide=breaks}. 15802Divide-by-zero checks can be completely disabled using 15803@option{-mno-check-zero-division}. 15804 15805@item -mmemcpy 15806@itemx -mno-memcpy 15807@opindex mmemcpy 15808@opindex mno-memcpy 15809Force (do not force) the use of @code{memcpy()} for non-trivial block 15810moves. The default is @option{-mno-memcpy}, which allows GCC to inline 15811most constant-sized copies. 15812 15813@item -mlong-calls 15814@itemx -mno-long-calls 15815@opindex mlong-calls 15816@opindex mno-long-calls 15817Disable (do not disable) use of the @code{jal} instruction. Calling 15818functions using @code{jal} is more efficient but requires the caller 15819and callee to be in the same 256 megabyte segment. 15820 15821This option has no effect on abicalls code. The default is 15822@option{-mno-long-calls}. 15823 15824@item -mmad 15825@itemx -mno-mad 15826@opindex mmad 15827@opindex mno-mad 15828Enable (disable) use of the @code{mad}, @code{madu} and @code{mul} 15829instructions, as provided by the R4650 ISA@. 15830 15831@item -mfused-madd 15832@itemx -mno-fused-madd 15833@opindex mfused-madd 15834@opindex mno-fused-madd 15835Enable (disable) use of the floating-point multiply-accumulate 15836instructions, when they are available. The default is 15837@option{-mfused-madd}. 15838 15839When multiply-accumulate instructions are used, the intermediate 15840product is calculated to infinite precision and is not subject to 15841the FCSR Flush to Zero bit. This may be undesirable in some 15842circumstances. 15843 15844@item -nocpp 15845@opindex nocpp 15846Tell the MIPS assembler to not run its preprocessor over user 15847assembler files (with a @samp{.s} suffix) when assembling them. 15848 15849@item -mfix-24k 15850@item -mno-fix-24k 15851@opindex mfix-24k 15852@opindex mno-fix-24k 15853Work around the 24K E48 (lost data on stores during refill) errata. 15854The workarounds are implemented by the assembler rather than by GCC. 15855 15856@item -mfix-r4000 15857@itemx -mno-fix-r4000 15858@opindex mfix-r4000 15859@opindex mno-fix-r4000 15860Work around certain R4000 CPU errata: 15861@itemize @minus 15862@item 15863A double-word or a variable shift may give an incorrect result if executed 15864immediately after starting an integer division. 15865@item 15866A double-word or a variable shift may give an incorrect result if executed 15867while an integer multiplication is in progress. 15868@item 15869An integer division may give an incorrect result if started in a delay slot 15870of a taken branch or a jump. 15871@end itemize 15872 15873@item -mfix-r4400 15874@itemx -mno-fix-r4400 15875@opindex mfix-r4400 15876@opindex mno-fix-r4400 15877Work around certain R4400 CPU errata: 15878@itemize @minus 15879@item 15880A double-word or a variable shift may give an incorrect result if executed 15881immediately after starting an integer division. 15882@end itemize 15883 15884@item -mfix-r10000 15885@itemx -mno-fix-r10000 15886@opindex mfix-r10000 15887@opindex mno-fix-r10000 15888Work around certain R10000 errata: 15889@itemize @minus 15890@item 15891@code{ll}/@code{sc} sequences may not behave atomically on revisions 15892prior to 3.0. They may deadlock on revisions 2.6 and earlier. 15893@end itemize 15894 15895This option can only be used if the target architecture supports 15896branch-likely instructions. @option{-mfix-r10000} is the default when 15897@option{-march=r10000} is used; @option{-mno-fix-r10000} is the default 15898otherwise. 15899 15900@item -mfix-vr4120 15901@itemx -mno-fix-vr4120 15902@opindex mfix-vr4120 15903Work around certain VR4120 errata: 15904@itemize @minus 15905@item 15906@code{dmultu} does not always produce the correct result. 15907@item 15908@code{div} and @code{ddiv} do not always produce the correct result if one 15909of the operands is negative. 15910@end itemize 15911The workarounds for the division errata rely on special functions in 15912@file{libgcc.a}. At present, these functions are only provided by 15913the @code{mips64vr*-elf} configurations. 15914 15915Other VR4120 errata require a nop to be inserted between certain pairs of 15916instructions. These errata are handled by the assembler, not by GCC itself. 15917 15918@item -mfix-vr4130 15919@opindex mfix-vr4130 15920Work around the VR4130 @code{mflo}/@code{mfhi} errata. The 15921workarounds are implemented by the assembler rather than by GCC, 15922although GCC will avoid using @code{mflo} and @code{mfhi} if the 15923VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi} 15924instructions are available instead. 15925 15926@item -mfix-sb1 15927@itemx -mno-fix-sb1 15928@opindex mfix-sb1 15929Work around certain SB-1 CPU core errata. 15930(This flag currently works around the SB-1 revision 2 15931``F1'' and ``F2'' floating-point errata.) 15932 15933@item -mr10k-cache-barrier=@var{setting} 15934@opindex mr10k-cache-barrier 15935Specify whether GCC should insert cache barriers to avoid the 15936side-effects of speculation on R10K processors. 15937 15938In common with many processors, the R10K tries to predict the outcome 15939of a conditional branch and speculatively executes instructions from 15940the ``taken'' branch. It later aborts these instructions if the 15941predicted outcome was wrong. However, on the R10K, even aborted 15942instructions can have side effects. 15943 15944This problem only affects kernel stores and, depending on the system, 15945kernel loads. As an example, a speculatively-executed store may load 15946the target memory into cache and mark the cache line as dirty, even if 15947the store itself is later aborted. If a DMA operation writes to the 15948same area of memory before the ``dirty'' line is flushed, the cached 15949data will overwrite the DMA-ed data. See the R10K processor manual 15950for a full description, including other potential problems. 15951 15952One workaround is to insert cache barrier instructions before every memory 15953access that might be speculatively executed and that might have side 15954effects even if aborted. @option{-mr10k-cache-barrier=@var{setting}} 15955controls GCC's implementation of this workaround. It assumes that 15956aborted accesses to any byte in the following regions will not have 15957side effects: 15958 15959@enumerate 15960@item 15961the memory occupied by the current function's stack frame; 15962 15963@item 15964the memory occupied by an incoming stack argument; 15965 15966@item 15967the memory occupied by an object with a link-time-constant address. 15968@end enumerate 15969 15970It is the kernel's responsibility to ensure that speculative 15971accesses to these regions are indeed safe. 15972 15973If the input program contains a function declaration such as: 15974 15975@smallexample 15976void foo (void); 15977@end smallexample 15978 15979then the implementation of @code{foo} must allow @code{j foo} and 15980@code{jal foo} to be executed speculatively. GCC honors this 15981restriction for functions it compiles itself. It expects non-GCC 15982functions (such as hand-written assembly code) to do the same. 15983 15984The option has three forms: 15985 15986@table @gcctabopt 15987@item -mr10k-cache-barrier=load-store 15988Insert a cache barrier before a load or store that might be 15989speculatively executed and that might have side effects even 15990if aborted. 15991 15992@item -mr10k-cache-barrier=store 15993Insert a cache barrier before a store that might be speculatively 15994executed and that might have side effects even if aborted. 15995 15996@item -mr10k-cache-barrier=none 15997Disable the insertion of cache barriers. This is the default setting. 15998@end table 15999 16000@item -mflush-func=@var{func} 16001@itemx -mno-flush-func 16002@opindex mflush-func 16003Specifies the function to call to flush the I and D caches, or to not 16004call any such function. If called, the function must take the same 16005arguments as the common @code{_flush_func()}, that is, the address of the 16006memory range for which the cache is being flushed, the size of the 16007memory range, and the number 3 (to flush both caches). The default 16008depends on the target GCC was configured for, but commonly is either 16009@samp{_flush_func} or @samp{__cpu_flush}. 16010 16011@item mbranch-cost=@var{num} 16012@opindex mbranch-cost 16013Set the cost of branches to roughly @var{num} ``simple'' instructions. 16014This cost is only a heuristic and is not guaranteed to produce 16015consistent results across releases. A zero cost redundantly selects 16016the default, which is based on the @option{-mtune} setting. 16017 16018@item -mbranch-likely 16019@itemx -mno-branch-likely 16020@opindex mbranch-likely 16021@opindex mno-branch-likely 16022Enable or disable use of Branch Likely instructions, regardless of the 16023default for the selected architecture. By default, Branch Likely 16024instructions may be generated if they are supported by the selected 16025architecture. An exception is for the MIPS32 and MIPS64 architectures 16026and processors that implement those architectures; for those, Branch 16027Likely instructions will not be generated by default because the MIPS32 16028and MIPS64 architectures specifically deprecate their use. 16029 16030@item -mfp-exceptions 16031@itemx -mno-fp-exceptions 16032@opindex mfp-exceptions 16033Specifies whether FP exceptions are enabled. This affects how we schedule 16034FP instructions for some processors. The default is that FP exceptions are 16035enabled. 16036 16037For instance, on the SB-1, if FP exceptions are disabled, and we are emitting 1603864-bit code, then we can use both FP pipes. Otherwise, we can only use one 16039FP pipe. 16040 16041@item -mvr4130-align 16042@itemx -mno-vr4130-align 16043@opindex mvr4130-align 16044The VR4130 pipeline is two-way superscalar, but can only issue two 16045instructions together if the first one is 8-byte aligned. When this 16046option is enabled, GCC will align pairs of instructions that it 16047thinks should execute in parallel. 16048 16049This option only has an effect when optimizing for the VR4130. 16050It normally makes code faster, but at the expense of making it bigger. 16051It is enabled by default at optimization level @option{-O3}. 16052 16053@item -msynci 16054@itemx -mno-synci 16055@opindex msynci 16056Enable (disable) generation of @code{synci} instructions on 16057architectures that support it. The @code{synci} instructions (if 16058enabled) will be generated when @code{__builtin___clear_cache()} is 16059compiled. 16060 16061This option defaults to @code{-mno-synci}, but the default can be 16062overridden by configuring with @code{--with-synci}. 16063 16064When compiling code for single processor systems, it is generally safe 16065to use @code{synci}. However, on many multi-core (SMP) systems, it 16066will not invalidate the instruction caches on all cores and may lead 16067to undefined behavior. 16068 16069@item -mrelax-pic-calls 16070@itemx -mno-relax-pic-calls 16071@opindex mrelax-pic-calls 16072Try to turn PIC calls that are normally dispatched via register 16073@code{$25} into direct calls. This is only possible if the linker can 16074resolve the destination at link-time and if the destination is within 16075range for a direct call. 16076 16077@option{-mrelax-pic-calls} is the default if GCC was configured to use 16078an assembler and a linker that supports the @code{.reloc} assembly 16079directive and @code{-mexplicit-relocs} is in effect. With 16080@code{-mno-explicit-relocs}, this optimization can be performed by the 16081assembler and the linker alone without help from the compiler. 16082 16083@item -mmcount-ra-address 16084@itemx -mno-mcount-ra-address 16085@opindex mmcount-ra-address 16086@opindex mno-mcount-ra-address 16087Emit (do not emit) code that allows @code{_mcount} to modify the 16088calling function's return address. When enabled, this option extends 16089the usual @code{_mcount} interface with a new @var{ra-address} 16090parameter, which has type @code{intptr_t *} and is passed in register 16091@code{$12}. @code{_mcount} can then modify the return address by 16092doing both of the following: 16093@itemize 16094@item 16095Returning the new address in register @code{$31}. 16096@item 16097Storing the new address in @code{*@var{ra-address}}, 16098if @var{ra-address} is nonnull. 16099@end itemize 16100 16101The default is @option{-mno-mcount-ra-address}. 16102 16103@end table 16104 16105@node MMIX Options 16106@subsection MMIX Options 16107@cindex MMIX Options 16108 16109These options are defined for the MMIX: 16110 16111@table @gcctabopt 16112@item -mlibfuncs 16113@itemx -mno-libfuncs 16114@opindex mlibfuncs 16115@opindex mno-libfuncs 16116Specify that intrinsic library functions are being compiled, passing all 16117values in registers, no matter the size. 16118 16119@item -mepsilon 16120@itemx -mno-epsilon 16121@opindex mepsilon 16122@opindex mno-epsilon 16123Generate floating-point comparison instructions that compare with respect 16124to the @code{rE} epsilon register. 16125 16126@item -mabi=mmixware 16127@itemx -mabi=gnu 16128@opindex mabi=mmixware 16129@opindex mabi=gnu 16130Generate code that passes function parameters and return values that (in 16131the called function) are seen as registers @code{$0} and up, as opposed to 16132the GNU ABI which uses global registers @code{$231} and up. 16133 16134@item -mzero-extend 16135@itemx -mno-zero-extend 16136@opindex mzero-extend 16137@opindex mno-zero-extend 16138When reading data from memory in sizes shorter than 64 bits, use (do not 16139use) zero-extending load instructions by default, rather than 16140sign-extending ones. 16141 16142@item -mknuthdiv 16143@itemx -mno-knuthdiv 16144@opindex mknuthdiv 16145@opindex mno-knuthdiv 16146Make the result of a division yielding a remainder have the same sign as 16147the divisor. With the default, @option{-mno-knuthdiv}, the sign of the 16148remainder follows the sign of the dividend. Both methods are 16149arithmetically valid, the latter being almost exclusively used. 16150 16151@item -mtoplevel-symbols 16152@itemx -mno-toplevel-symbols 16153@opindex mtoplevel-symbols 16154@opindex mno-toplevel-symbols 16155Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly 16156code can be used with the @code{PREFIX} assembly directive. 16157 16158@item -melf 16159@opindex melf 16160Generate an executable in the ELF format, rather than the default 16161@samp{mmo} format used by the @command{mmix} simulator. 16162 16163@item -mbranch-predict 16164@itemx -mno-branch-predict 16165@opindex mbranch-predict 16166@opindex mno-branch-predict 16167Use (do not use) the probable-branch instructions, when static branch 16168prediction indicates a probable branch. 16169 16170@item -mbase-addresses 16171@itemx -mno-base-addresses 16172@opindex mbase-addresses 16173@opindex mno-base-addresses 16174Generate (do not generate) code that uses @emph{base addresses}. Using a 16175base address automatically generates a request (handled by the assembler 16176and the linker) for a constant to be set up in a global register. The 16177register is used for one or more base address requests within the range 0 16178to 255 from the value held in the register. The generally leads to short 16179and fast code, but the number of different data items that can be 16180addressed is limited. This means that a program that uses lots of static 16181data may require @option{-mno-base-addresses}. 16182 16183@item -msingle-exit 16184@itemx -mno-single-exit 16185@opindex msingle-exit 16186@opindex mno-single-exit 16187Force (do not force) generated code to have a single exit point in each 16188function. 16189@end table 16190 16191@node MN10300 Options 16192@subsection MN10300 Options 16193@cindex MN10300 options 16194 16195These @option{-m} options are defined for Matsushita MN10300 architectures: 16196 16197@table @gcctabopt 16198@item -mmult-bug 16199@opindex mmult-bug 16200Generate code to avoid bugs in the multiply instructions for the MN10300 16201processors. This is the default. 16202 16203@item -mno-mult-bug 16204@opindex mno-mult-bug 16205Do not generate code to avoid bugs in the multiply instructions for the 16206MN10300 processors. 16207 16208@item -mam33 16209@opindex mam33 16210Generate code using features specific to the AM33 processor. 16211 16212@item -mno-am33 16213@opindex mno-am33 16214Do not generate code using features specific to the AM33 processor. This 16215is the default. 16216 16217@item -mam33-2 16218@opindex mam33-2 16219Generate code using features specific to the AM33/2.0 processor. 16220 16221@item -mam34 16222@opindex mam34 16223Generate code using features specific to the AM34 processor. 16224 16225@item -mtune=@var{cpu-type} 16226@opindex mtune 16227Use the timing characteristics of the indicated CPU type when 16228scheduling instructions. This does not change the targeted processor 16229type. The CPU type must be one of @samp{mn10300}, @samp{am33}, 16230@samp{am33-2} or @samp{am34}. 16231 16232@item -mreturn-pointer-on-d0 16233@opindex mreturn-pointer-on-d0 16234When generating a function that returns a pointer, return the pointer 16235in both @code{a0} and @code{d0}. Otherwise, the pointer is returned 16236only in a0, and attempts to call such functions without a prototype 16237would result in errors. Note that this option is on by default; use 16238@option{-mno-return-pointer-on-d0} to disable it. 16239 16240@item -mno-crt0 16241@opindex mno-crt0 16242Do not link in the C run-time initialization object file. 16243 16244@item -mrelax 16245@opindex mrelax 16246Indicate to the linker that it should perform a relaxation optimization pass 16247to shorten branches, calls and absolute memory addresses. This option only 16248has an effect when used on the command line for the final link step. 16249 16250This option makes symbolic debugging impossible. 16251 16252@item -mliw 16253@opindex mliw 16254Allow the compiler to generate @emph{Long Instruction Word} 16255instructions if the target is the @samp{AM33} or later. This is the 16256default. This option defines the preprocessor macro @samp{__LIW__}. 16257 16258@item -mnoliw 16259@opindex mnoliw 16260Do not allow the compiler to generate @emph{Long Instruction Word} 16261instructions. This option defines the preprocessor macro 16262@samp{__NO_LIW__}. 16263 16264@item -msetlb 16265@opindex msetlb 16266Allow the compiler to generate the @emph{SETLB} and @emph{Lcc} 16267instructions if the target is the @samp{AM33} or later. This is the 16268default. This option defines the preprocessor macro @samp{__SETLB__}. 16269 16270@item -mnosetlb 16271@opindex mnosetlb 16272Do not allow the compiler to generate @emph{SETLB} or @emph{Lcc} 16273instructions. This option defines the preprocessor macro 16274@samp{__NO_SETLB__}. 16275 16276@end table 16277 16278@node PDP-11 Options 16279@subsection PDP-11 Options 16280@cindex PDP-11 Options 16281 16282These options are defined for the PDP-11: 16283 16284@table @gcctabopt 16285@item -mfpu 16286@opindex mfpu 16287Use hardware FPP floating point. This is the default. (FIS floating 16288point on the PDP-11/40 is not supported.) 16289 16290@item -msoft-float 16291@opindex msoft-float 16292Do not use hardware floating point. 16293 16294@item -mac0 16295@opindex mac0 16296Return floating-point results in ac0 (fr0 in Unix assembler syntax). 16297 16298@item -mno-ac0 16299@opindex mno-ac0 16300Return floating-point results in memory. This is the default. 16301 16302@item -m40 16303@opindex m40 16304Generate code for a PDP-11/40. 16305 16306@item -m45 16307@opindex m45 16308Generate code for a PDP-11/45. This is the default. 16309 16310@item -m10 16311@opindex m10 16312Generate code for a PDP-11/10. 16313 16314@item -mbcopy-builtin 16315@opindex mbcopy-builtin 16316Use inline @code{movmemhi} patterns for copying memory. This is the 16317default. 16318 16319@item -mbcopy 16320@opindex mbcopy 16321Do not use inline @code{movmemhi} patterns for copying memory. 16322 16323@item -mint16 16324@itemx -mno-int32 16325@opindex mint16 16326@opindex mno-int32 16327Use 16-bit @code{int}. This is the default. 16328 16329@item -mint32 16330@itemx -mno-int16 16331@opindex mint32 16332@opindex mno-int16 16333Use 32-bit @code{int}. 16334 16335@item -mfloat64 16336@itemx -mno-float32 16337@opindex mfloat64 16338@opindex mno-float32 16339Use 64-bit @code{float}. This is the default. 16340 16341@item -mfloat32 16342@itemx -mno-float64 16343@opindex mfloat32 16344@opindex mno-float64 16345Use 32-bit @code{float}. 16346 16347@item -mabshi 16348@opindex mabshi 16349Use @code{abshi2} pattern. This is the default. 16350 16351@item -mno-abshi 16352@opindex mno-abshi 16353Do not use @code{abshi2} pattern. 16354 16355@item -mbranch-expensive 16356@opindex mbranch-expensive 16357Pretend that branches are expensive. This is for experimenting with 16358code generation only. 16359 16360@item -mbranch-cheap 16361@opindex mbranch-cheap 16362Do not pretend that branches are expensive. This is the default. 16363 16364@item -munix-asm 16365@opindex munix-asm 16366Use Unix assembler syntax. This is the default when configured for 16367@samp{pdp11-*-bsd}. 16368 16369@item -mdec-asm 16370@opindex mdec-asm 16371Use DEC assembler syntax. This is the default when configured for any 16372PDP-11 target other than @samp{pdp11-*-bsd}. 16373@end table 16374 16375@node picoChip Options 16376@subsection picoChip Options 16377@cindex picoChip options 16378 16379These @samp{-m} options are defined for picoChip implementations: 16380 16381@table @gcctabopt 16382 16383@item -mae=@var{ae_type} 16384@opindex mcpu 16385Set the instruction set, register set, and instruction scheduling 16386parameters for array element type @var{ae_type}. Supported values 16387for @var{ae_type} are @samp{ANY}, @samp{MUL}, and @samp{MAC}. 16388 16389@option{-mae=ANY} selects a completely generic AE type. Code 16390generated with this option will run on any of the other AE types. The 16391code will not be as efficient as it would be if compiled for a specific 16392AE type, and some types of operation (e.g., multiplication) will not 16393work properly on all types of AE. 16394 16395@option{-mae=MUL} selects a MUL AE type. This is the most useful AE type 16396for compiled code, and is the default. 16397 16398@option{-mae=MAC} selects a DSP-style MAC AE. Code compiled with this 16399option may suffer from poor performance of byte (char) manipulation, 16400since the DSP AE does not provide hardware support for byte load/stores. 16401 16402@item -msymbol-as-address 16403Enable the compiler to directly use a symbol name as an address in a 16404load/store instruction, without first loading it into a 16405register. Typically, the use of this option will generate larger 16406programs, which run faster than when the option isn't used. However, the 16407results vary from program to program, so it is left as a user option, 16408rather than being permanently enabled. 16409 16410@item -mno-inefficient-warnings 16411Disables warnings about the generation of inefficient code. These 16412warnings can be generated, for example, when compiling code that 16413performs byte-level memory operations on the MAC AE type. The MAC AE has 16414no hardware support for byte-level memory operations, so all byte 16415load/stores must be synthesized from word load/store operations. This is 16416inefficient and a warning will be generated indicating to the programmer 16417that they should rewrite the code to avoid byte operations, or to target 16418an AE type that has the necessary hardware support. This option enables 16419the warning to be turned off. 16420 16421@end table 16422 16423@node PowerPC Options 16424@subsection PowerPC Options 16425@cindex PowerPC options 16426 16427These are listed under @xref{RS/6000 and PowerPC Options}. 16428 16429@node RL78 Options 16430@subsection RL78 Options 16431@cindex RL78 Options 16432 16433@table @gcctabopt 16434 16435@item -msim 16436@opindex msim 16437Links in additional target libraries to support operation within a 16438simulator. 16439 16440@item -mmul=none 16441@itemx -mmul=g13 16442@itemx -mmul=rl78 16443@opindex mmul 16444Specifies the type of hardware multiplication support to be used. The 16445default is @code{none}, which uses software multiplication functions. 16446The @code{g13} option is for the hardware multiply/divide peripheral 16447only on the RL78/G13 targets. The @code{rl78} option is for the 16448standard hardware multiplication defined in the RL78 software manual. 16449 16450@end table 16451 16452@node RS/6000 and PowerPC Options 16453@subsection IBM RS/6000 and PowerPC Options 16454@cindex RS/6000 and PowerPC Options 16455@cindex IBM RS/6000 and PowerPC Options 16456 16457These @samp{-m} options are defined for the IBM RS/6000 and PowerPC: 16458@table @gcctabopt 16459@item -mpower 16460@itemx -mno-power 16461@itemx -mpower2 16462@itemx -mno-power2 16463@itemx -mpowerpc 16464@itemx -mno-powerpc 16465@itemx -mpowerpc-gpopt 16466@itemx -mno-powerpc-gpopt 16467@itemx -mpowerpc-gfxopt 16468@itemx -mno-powerpc-gfxopt 16469@need 800 16470@itemx -mpowerpc64 16471@itemx -mno-powerpc64 16472@itemx -mmfcrf 16473@itemx -mno-mfcrf 16474@itemx -mpopcntb 16475@itemx -mno-popcntb 16476@itemx -mpopcntd 16477@itemx -mno-popcntd 16478@itemx -mfprnd 16479@itemx -mno-fprnd 16480@need 800 16481@itemx -mcmpb 16482@itemx -mno-cmpb 16483@itemx -mmfpgpr 16484@itemx -mno-mfpgpr 16485@itemx -mhard-dfp 16486@itemx -mno-hard-dfp 16487@opindex mpower 16488@opindex mno-power 16489@opindex mpower2 16490@opindex mno-power2 16491@opindex mpowerpc 16492@opindex mno-powerpc 16493@opindex mpowerpc-gpopt 16494@opindex mno-powerpc-gpopt 16495@opindex mpowerpc-gfxopt 16496@opindex mno-powerpc-gfxopt 16497@opindex mpowerpc64 16498@opindex mno-powerpc64 16499@opindex mmfcrf 16500@opindex mno-mfcrf 16501@opindex mpopcntb 16502@opindex mno-popcntb 16503@opindex mpopcntd 16504@opindex mno-popcntd 16505@opindex mfprnd 16506@opindex mno-fprnd 16507@opindex mcmpb 16508@opindex mno-cmpb 16509@opindex mmfpgpr 16510@opindex mno-mfpgpr 16511@opindex mhard-dfp 16512@opindex mno-hard-dfp 16513GCC supports two related instruction set architectures for the 16514RS/6000 and PowerPC@. The @dfn{POWER} instruction set are those 16515instructions supported by the @samp{rios} chip set used in the original 16516RS/6000 systems and the @dfn{PowerPC} instruction set is the 16517architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and 16518the IBM 4xx, 6xx, and follow-on microprocessors. 16519 16520Neither architecture is a subset of the other. However there is a 16521large common subset of instructions supported by both. An MQ 16522register is included in processors supporting the POWER architecture. 16523 16524You use these options to specify which instructions are available on the 16525processor you are using. The default value of these options is 16526determined when configuring GCC@. Specifying the 16527@option{-mcpu=@var{cpu_type}} overrides the specification of these 16528options. We recommend you use the @option{-mcpu=@var{cpu_type}} option 16529rather than the options listed above. 16530 16531The @option{-mpower} option allows GCC to generate instructions that 16532are found only in the POWER architecture and to use the MQ register. 16533Specifying @option{-mpower2} implies @option{-power} and also allows GCC 16534to generate instructions that are present in the POWER2 architecture but 16535not the original POWER architecture. 16536 16537The @option{-mpowerpc} option allows GCC to generate instructions that 16538are found only in the 32-bit subset of the PowerPC architecture. 16539Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows 16540GCC to use the optional PowerPC architecture instructions in the 16541General Purpose group, including floating-point square root. Specifying 16542@option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to 16543use the optional PowerPC architecture instructions in the Graphics 16544group, including floating-point select. 16545 16546The @option{-mmfcrf} option allows GCC to generate the move from 16547condition register field instruction implemented on the POWER4 16548processor and other processors that support the PowerPC V2.01 16549architecture. 16550The @option{-mpopcntb} option allows GCC to generate the popcount and 16551double-precision FP reciprocal estimate instruction implemented on the 16552POWER5 processor and other processors that support the PowerPC V2.02 16553architecture. 16554The @option{-mpopcntd} option allows GCC to generate the popcount 16555instruction implemented on the POWER7 processor and other processors 16556that support the PowerPC V2.06 architecture. 16557The @option{-mfprnd} option allows GCC to generate the FP round to 16558integer instructions implemented on the POWER5+ processor and other 16559processors that support the PowerPC V2.03 architecture. 16560The @option{-mcmpb} option allows GCC to generate the compare bytes 16561instruction implemented on the POWER6 processor and other processors 16562that support the PowerPC V2.05 architecture. 16563The @option{-mmfpgpr} option allows GCC to generate the FP move to/from 16564general-purpose register instructions implemented on the POWER6X 16565processor and other processors that support the extended PowerPC V2.05 16566architecture. 16567The @option{-mhard-dfp} option allows GCC to generate the decimal 16568floating-point instructions implemented on some POWER processors. 16569 16570The @option{-mpowerpc64} option allows GCC to generate the additional 1657164-bit instructions that are found in the full PowerPC64 architecture 16572and to treat GPRs as 64-bit, doubleword quantities. GCC defaults to 16573@option{-mno-powerpc64}. 16574 16575If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC 16576will use only the instructions in the common subset of both 16577architectures plus some special AIX common-mode calls, and will not use 16578the MQ register. Specifying both @option{-mpower} and @option{-mpowerpc} 16579permits GCC to use any instruction from either architecture and to 16580allow use of the MQ register; specify this for the Motorola MPC601. 16581 16582@item -mnew-mnemonics 16583@itemx -mold-mnemonics 16584@opindex mnew-mnemonics 16585@opindex mold-mnemonics 16586Select which mnemonics to use in the generated assembler code. With 16587@option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for 16588the PowerPC architecture. With @option{-mold-mnemonics} it uses the 16589assembler mnemonics defined for the POWER architecture. Instructions 16590defined in only one architecture have only one mnemonic; GCC uses that 16591mnemonic irrespective of which of these options is specified. 16592 16593GCC defaults to the mnemonics appropriate for the architecture in 16594use. Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the 16595value of these option. Unless you are building a cross-compiler, you 16596should normally not specify either @option{-mnew-mnemonics} or 16597@option{-mold-mnemonics}, but should instead accept the default. 16598 16599@item -mcpu=@var{cpu_type} 16600@opindex mcpu 16601Set architecture type, register usage, choice of mnemonics, and 16602instruction scheduling parameters for machine type @var{cpu_type}. 16603Supported values for @var{cpu_type} are @samp{401}, @samp{403}, 16604@samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{464}, @samp{464fp}, 16605@samp{476}, @samp{476fp}, @samp{505}, @samp{601}, @samp{602}, @samp{603}, 16606@samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{630}, @samp{740}, 16607@samp{7400}, @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823}, 16608@samp{860}, @samp{970}, @samp{8540}, @samp{a2}, @samp{e300c2}, 16609@samp{e300c3}, @samp{e500mc}, @samp{e500mc64}, @samp{ec603e}, @samp{G3}, 16610@samp{G4}, @samp{G5}, @samp{titan}, @samp{power}, @samp{power2}, @samp{power3}, 16611@samp{power4}, @samp{power5}, @samp{power5+}, @samp{power6}, @samp{power6x}, 16612@samp{power7}, @samp{common}, @samp{powerpc}, @samp{powerpc64}, @samp{rios}, 16613@samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}. 16614 16615@option{-mcpu=common} selects a completely generic processor. Code 16616generated under this option will run on any POWER or PowerPC processor. 16617GCC will use only the instructions in the common subset of both 16618architectures, and will not use the MQ register. GCC assumes a generic 16619processor model for scheduling purposes. 16620 16621@option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and 16622@option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit 16623PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine 16624types, with an appropriate, generic processor model assumed for 16625scheduling purposes. 16626 16627The other options specify a specific processor. Code generated under 16628those options will run best on that processor, and may not run at all on 16629others. 16630 16631The @option{-mcpu} options automatically enable or disable the 16632following options: 16633 16634@gccoptlist{-maltivec -mfprnd -mhard-float -mmfcrf -mmultiple @gol 16635-mnew-mnemonics -mpopcntb -mpopcntd -mpower -mpower2 -mpowerpc64 @gol 16636-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float @gol 16637-msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx} 16638 16639The particular options set for any particular CPU will vary between 16640compiler versions, depending on what setting seems to produce optimal 16641code for that CPU; it doesn't necessarily reflect the actual hardware's 16642capabilities. If you wish to set an individual option to a particular 16643value, you may specify it after the @option{-mcpu} option, like 16644@samp{-mcpu=970 -mno-altivec}. 16645 16646On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are 16647not enabled or disabled by the @option{-mcpu} option at present because 16648AIX does not have full support for these options. You may still 16649enable or disable them individually if you're sure it'll work in your 16650environment. 16651 16652@item -mtune=@var{cpu_type} 16653@opindex mtune 16654Set the instruction scheduling parameters for machine type 16655@var{cpu_type}, but do not set the architecture type, register usage, or 16656choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would. The same 16657values for @var{cpu_type} are used for @option{-mtune} as for 16658@option{-mcpu}. If both are specified, the code generated will use the 16659architecture, registers, and mnemonics set by @option{-mcpu}, but the 16660scheduling parameters set by @option{-mtune}. 16661 16662@item -mcmodel=small 16663@opindex mcmodel=small 16664Generate PowerPC64 code for the small model: The TOC is limited to 1666564k. 16666 16667@item -mcmodel=medium 16668@opindex mcmodel=medium 16669Generate PowerPC64 code for the medium model: The TOC and other static 16670data may be up to a total of 4G in size. 16671 16672@item -mcmodel=large 16673@opindex mcmodel=large 16674Generate PowerPC64 code for the large model: The TOC may be up to 4G 16675in size. Other data and code is only limited by the 64-bit address 16676space. 16677 16678@item -maltivec 16679@itemx -mno-altivec 16680@opindex maltivec 16681@opindex mno-altivec 16682Generate code that uses (does not use) AltiVec instructions, and also 16683enable the use of built-in functions that allow more direct access to 16684the AltiVec instruction set. You may also need to set 16685@option{-mabi=altivec} to adjust the current ABI with AltiVec ABI 16686enhancements. 16687 16688@item -mvrsave 16689@itemx -mno-vrsave 16690@opindex mvrsave 16691@opindex mno-vrsave 16692Generate VRSAVE instructions when generating AltiVec code. 16693 16694@item -mgen-cell-microcode 16695@opindex mgen-cell-microcode 16696Generate Cell microcode instructions 16697 16698@item -mwarn-cell-microcode 16699@opindex mwarn-cell-microcode 16700Warning when a Cell microcode instruction is going to emitted. An example 16701of a Cell microcode instruction is a variable shift. 16702 16703@item -msecure-plt 16704@opindex msecure-plt 16705Generate code that allows ld and ld.so to build executables and shared 16706libraries with non-exec .plt and .got sections. This is a PowerPC 1670732-bit SYSV ABI option. 16708 16709@item -mbss-plt 16710@opindex mbss-plt 16711Generate code that uses a BSS .plt section that ld.so fills in, and 16712requires .plt and .got sections that are both writable and executable. 16713This is a PowerPC 32-bit SYSV ABI option. 16714 16715@item -misel 16716@itemx -mno-isel 16717@opindex misel 16718@opindex mno-isel 16719This switch enables or disables the generation of ISEL instructions. 16720 16721@item -misel=@var{yes/no} 16722This switch has been deprecated. Use @option{-misel} and 16723@option{-mno-isel} instead. 16724 16725@item -mspe 16726@itemx -mno-spe 16727@opindex mspe 16728@opindex mno-spe 16729This switch enables or disables the generation of SPE simd 16730instructions. 16731 16732@item -mpaired 16733@itemx -mno-paired 16734@opindex mpaired 16735@opindex mno-paired 16736This switch enables or disables the generation of PAIRED simd 16737instructions. 16738 16739@item -mspe=@var{yes/no} 16740This option has been deprecated. Use @option{-mspe} and 16741@option{-mno-spe} instead. 16742 16743@item -mvsx 16744@itemx -mno-vsx 16745@opindex mvsx 16746@opindex mno-vsx 16747Generate code that uses (does not use) vector/scalar (VSX) 16748instructions, and also enable the use of built-in functions that allow 16749more direct access to the VSX instruction set. 16750 16751@item -mfloat-gprs=@var{yes/single/double/no} 16752@itemx -mfloat-gprs 16753@opindex mfloat-gprs 16754This switch enables or disables the generation of floating-point 16755operations on the general-purpose registers for architectures that 16756support it. 16757 16758The argument @var{yes} or @var{single} enables the use of 16759single-precision floating-point operations. 16760 16761The argument @var{double} enables the use of single and 16762double-precision floating-point operations. 16763 16764The argument @var{no} disables floating-point operations on the 16765general-purpose registers. 16766 16767This option is currently only available on the MPC854x. 16768 16769@item -m32 16770@itemx -m64 16771@opindex m32 16772@opindex m64 16773Generate code for 32-bit or 64-bit environments of Darwin and SVR4 16774targets (including GNU/Linux). The 32-bit environment sets int, long 16775and pointer to 32 bits and generates code that runs on any PowerPC 16776variant. The 64-bit environment sets int to 32 bits and long and 16777pointer to 64 bits, and generates code for PowerPC64, as for 16778@option{-mpowerpc64}. 16779 16780@item -mfull-toc 16781@itemx -mno-fp-in-toc 16782@itemx -mno-sum-in-toc 16783@itemx -mminimal-toc 16784@opindex mfull-toc 16785@opindex mno-fp-in-toc 16786@opindex mno-sum-in-toc 16787@opindex mminimal-toc 16788Modify generation of the TOC (Table Of Contents), which is created for 16789every executable file. The @option{-mfull-toc} option is selected by 16790default. In that case, GCC will allocate at least one TOC entry for 16791each unique non-automatic variable reference in your program. GCC 16792will also place floating-point constants in the TOC@. However, only 1679316,384 entries are available in the TOC@. 16794 16795If you receive a linker error message that saying you have overflowed 16796the available TOC space, you can reduce the amount of TOC space used 16797with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options. 16798@option{-mno-fp-in-toc} prevents GCC from putting floating-point 16799constants in the TOC and @option{-mno-sum-in-toc} forces GCC to 16800generate code to calculate the sum of an address and a constant at 16801run time instead of putting that sum into the TOC@. You may specify one 16802or both of these options. Each causes GCC to produce very slightly 16803slower and larger code at the expense of conserving TOC space. 16804 16805If you still run out of space in the TOC even when you specify both of 16806these options, specify @option{-mminimal-toc} instead. This option causes 16807GCC to make only one TOC entry for every file. When you specify this 16808option, GCC will produce code that is slower and larger but which 16809uses extremely little TOC space. You may wish to use this option 16810only on files that contain less frequently executed code. 16811 16812@item -maix64 16813@itemx -maix32 16814@opindex maix64 16815@opindex maix32 16816Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit 16817@code{long} type, and the infrastructure needed to support them. 16818Specifying @option{-maix64} implies @option{-mpowerpc64} and 16819@option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and 16820implies @option{-mno-powerpc64}. GCC defaults to @option{-maix32}. 16821 16822@item -mxl-compat 16823@itemx -mno-xl-compat 16824@opindex mxl-compat 16825@opindex mno-xl-compat 16826Produce code that conforms more closely to IBM XL compiler semantics 16827when using AIX-compatible ABI@. Pass floating-point arguments to 16828prototyped functions beyond the register save area (RSA) on the stack 16829in addition to argument FPRs. Do not assume that most significant 16830double in 128-bit long double value is properly rounded when comparing 16831values and converting to double. Use XL symbol names for long double 16832support routines. 16833 16834The AIX calling convention was extended but not initially documented to 16835handle an obscure K&R C case of calling a function that takes the 16836address of its arguments with fewer arguments than declared. IBM XL 16837compilers access floating-point arguments that do not fit in the 16838RSA from the stack when a subroutine is compiled without 16839optimization. Because always storing floating-point arguments on the 16840stack is inefficient and rarely needed, this option is not enabled by 16841default and only is necessary when calling subroutines compiled by IBM 16842XL compilers without optimization. 16843 16844@item -mpe 16845@opindex mpe 16846Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@. Link an 16847application written to use message passing with special startup code to 16848enable the application to run. The system must have PE installed in the 16849standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file 16850must be overridden with the @option{-specs=} option to specify the 16851appropriate directory location. The Parallel Environment does not 16852support threads, so the @option{-mpe} option and the @option{-pthread} 16853option are incompatible. 16854 16855@item -malign-natural 16856@itemx -malign-power 16857@opindex malign-natural 16858@opindex malign-power 16859On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 16860@option{-malign-natural} overrides the ABI-defined alignment of larger 16861types, such as floating-point doubles, on their natural size-based boundary. 16862The option @option{-malign-power} instructs GCC to follow the ABI-specified 16863alignment rules. GCC defaults to the standard alignment defined in the ABI@. 16864 16865On 64-bit Darwin, natural alignment is the default, and @option{-malign-power} 16866is not supported. 16867 16868@item -msoft-float 16869@itemx -mhard-float 16870@opindex msoft-float 16871@opindex mhard-float 16872Generate code that does not use (uses) the floating-point register set. 16873Software floating-point emulation is provided if you use the 16874@option{-msoft-float} option, and pass the option to GCC when linking. 16875 16876@item -msingle-float 16877@itemx -mdouble-float 16878@opindex msingle-float 16879@opindex mdouble-float 16880Generate code for single- or double-precision floating-point operations. 16881@option{-mdouble-float} implies @option{-msingle-float}. 16882 16883@item -msimple-fpu 16884@opindex msimple-fpu 16885Do not generate sqrt and div instructions for hardware floating-point unit. 16886 16887@item -mfpu 16888@opindex mfpu 16889Specify type of floating-point unit. Valid values are @var{sp_lite} 16890(equivalent to -msingle-float -msimple-fpu), @var{dp_lite} (equivalent 16891to -mdouble-float -msimple-fpu), @var{sp_full} (equivalent to -msingle-float), 16892and @var{dp_full} (equivalent to -mdouble-float). 16893 16894@item -mxilinx-fpu 16895@opindex mxilinx-fpu 16896Perform optimizations for the floating-point unit on Xilinx PPC 405/440. 16897 16898@item -mmultiple 16899@itemx -mno-multiple 16900@opindex mmultiple 16901@opindex mno-multiple 16902Generate code that uses (does not use) the load multiple word 16903instructions and the store multiple word instructions. These 16904instructions are generated by default on POWER systems, and not 16905generated on PowerPC systems. Do not use @option{-mmultiple} on little-endian 16906PowerPC systems, since those instructions do not work when the 16907processor is in little-endian mode. The exceptions are PPC740 and 16908PPC750 which permit these instructions in little-endian mode. 16909 16910@item -mstring 16911@itemx -mno-string 16912@opindex mstring 16913@opindex mno-string 16914Generate code that uses (does not use) the load string instructions 16915and the store string word instructions to save multiple registers and 16916do small block moves. These instructions are generated by default on 16917POWER systems, and not generated on PowerPC systems. Do not use 16918@option{-mstring} on little-endian PowerPC systems, since those 16919instructions do not work when the processor is in little-endian mode. 16920The exceptions are PPC740 and PPC750 which permit these instructions 16921in little-endian mode. 16922 16923@item -mupdate 16924@itemx -mno-update 16925@opindex mupdate 16926@opindex mno-update 16927Generate code that uses (does not use) the load or store instructions 16928that update the base register to the address of the calculated memory 16929location. These instructions are generated by default. If you use 16930@option{-mno-update}, there is a small window between the time that the 16931stack pointer is updated and the address of the previous frame is 16932stored, which means code that walks the stack frame across interrupts or 16933signals may get corrupted data. 16934 16935@item -mavoid-indexed-addresses 16936@itemx -mno-avoid-indexed-addresses 16937@opindex mavoid-indexed-addresses 16938@opindex mno-avoid-indexed-addresses 16939Generate code that tries to avoid (not avoid) the use of indexed load 16940or store instructions. These instructions can incur a performance 16941penalty on Power6 processors in certain situations, such as when 16942stepping through large arrays that cross a 16M boundary. This option 16943is enabled by default when targetting Power6 and disabled otherwise. 16944 16945@item -mfused-madd 16946@itemx -mno-fused-madd 16947@opindex mfused-madd 16948@opindex mno-fused-madd 16949Generate code that uses (does not use) the floating-point multiply and 16950accumulate instructions. These instructions are generated by default 16951if hardware floating point is used. The machine-dependent 16952@option{-mfused-madd} option is now mapped to the machine-independent 16953@option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is 16954mapped to @option{-ffp-contract=off}. 16955 16956@item -mmulhw 16957@itemx -mno-mulhw 16958@opindex mmulhw 16959@opindex mno-mulhw 16960Generate code that uses (does not use) the half-word multiply and 16961multiply-accumulate instructions on the IBM 405, 440, 464 and 476 processors. 16962These instructions are generated by default when targetting those 16963processors. 16964 16965@item -mdlmzb 16966@itemx -mno-dlmzb 16967@opindex mdlmzb 16968@opindex mno-dlmzb 16969Generate code that uses (does not use) the string-search @samp{dlmzb} 16970instruction on the IBM 405, 440, 464 and 476 processors. This instruction is 16971generated by default when targetting those processors. 16972 16973@item -mno-bit-align 16974@itemx -mbit-align 16975@opindex mno-bit-align 16976@opindex mbit-align 16977On System V.4 and embedded PowerPC systems do not (do) force structures 16978and unions that contain bit-fields to be aligned to the base type of the 16979bit-field. 16980 16981For example, by default a structure containing nothing but 8 16982@code{unsigned} bit-fields of length 1 is aligned to a 4-byte 16983boundary and has a size of 4 bytes. By using @option{-mno-bit-align}, 16984the structure is aligned to a 1-byte boundary and is 1 byte in 16985size. 16986 16987@item -mno-strict-align 16988@itemx -mstrict-align 16989@opindex mno-strict-align 16990@opindex mstrict-align 16991On System V.4 and embedded PowerPC systems do not (do) assume that 16992unaligned memory references will be handled by the system. 16993 16994@item -mrelocatable 16995@itemx -mno-relocatable 16996@opindex mrelocatable 16997@opindex mno-relocatable 16998Generate code that allows (does not allow) a static executable to be 16999relocated to a different address at run time. A simple embedded 17000PowerPC system loader should relocate the entire contents of 17001@code{.got2} and 4-byte locations listed in the @code{.fixup} section, 17002a table of 32-bit addresses generated by this option. For this to 17003work, all objects linked together must be compiled with 17004@option{-mrelocatable} or @option{-mrelocatable-lib}. 17005@option{-mrelocatable} code aligns the stack to an 8-byte boundary. 17006 17007@item -mrelocatable-lib 17008@itemx -mno-relocatable-lib 17009@opindex mrelocatable-lib 17010@opindex mno-relocatable-lib 17011Like @option{-mrelocatable}, @option{-mrelocatable-lib} generates a 17012@code{.fixup} section to allow static executables to be relocated at 17013run time, but @option{-mrelocatable-lib} does not use the smaller stack 17014alignment of @option{-mrelocatable}. Objects compiled with 17015@option{-mrelocatable-lib} may be linked with objects compiled with 17016any combination of the @option{-mrelocatable} options. 17017 17018@item -mno-toc 17019@itemx -mtoc 17020@opindex mno-toc 17021@opindex mtoc 17022On System V.4 and embedded PowerPC systems do not (do) assume that 17023register 2 contains a pointer to a global area pointing to the addresses 17024used in the program. 17025 17026@item -mlittle 17027@itemx -mlittle-endian 17028@opindex mlittle 17029@opindex mlittle-endian 17030On System V.4 and embedded PowerPC systems compile code for the 17031processor in little-endian mode. The @option{-mlittle-endian} option is 17032the same as @option{-mlittle}. 17033 17034@item -mbig 17035@itemx -mbig-endian 17036@opindex mbig 17037@opindex mbig-endian 17038On System V.4 and embedded PowerPC systems compile code for the 17039processor in big-endian mode. The @option{-mbig-endian} option is 17040the same as @option{-mbig}. 17041 17042@item -mdynamic-no-pic 17043@opindex mdynamic-no-pic 17044On Darwin and Mac OS X systems, compile code so that it is not 17045relocatable, but that its external references are relocatable. The 17046resulting code is suitable for applications, but not shared 17047libraries. 17048 17049@item -msingle-pic-base 17050@opindex msingle-pic-base 17051Treat the register used for PIC addressing as read-only, rather than 17052loading it in the prologue for each function. The runtime system is 17053responsible for initializing this register with an appropriate value 17054before execution begins. 17055 17056@item -mprioritize-restricted-insns=@var{priority} 17057@opindex mprioritize-restricted-insns 17058This option controls the priority that is assigned to 17059dispatch-slot restricted instructions during the second scheduling 17060pass. The argument @var{priority} takes the value @var{0/1/2} to assign 17061@var{no/highest/second-highest} priority to dispatch slot restricted 17062instructions. 17063 17064@item -msched-costly-dep=@var{dependence_type} 17065@opindex msched-costly-dep 17066This option controls which dependences are considered costly 17067by the target during instruction scheduling. The argument 17068@var{dependence_type} takes one of the following values: 17069@var{no}: no dependence is costly, 17070@var{all}: all dependences are costly, 17071@var{true_store_to_load}: a true dependence from store to load is costly, 17072@var{store_to_load}: any dependence from store to load is costly, 17073@var{number}: any dependence for which latency >= @var{number} is costly. 17074 17075@item -minsert-sched-nops=@var{scheme} 17076@opindex minsert-sched-nops 17077This option controls which nop insertion scheme will be used during 17078the second scheduling pass. The argument @var{scheme} takes one of the 17079following values: 17080@var{no}: Don't insert nops. 17081@var{pad}: Pad with nops any dispatch group that has vacant issue slots, 17082according to the scheduler's grouping. 17083@var{regroup_exact}: Insert nops to force costly dependent insns into 17084separate groups. Insert exactly as many nops as needed to force an insn 17085to a new group, according to the estimated processor grouping. 17086@var{number}: Insert nops to force costly dependent insns into 17087separate groups. Insert @var{number} nops to force an insn to a new group. 17088 17089@item -mcall-sysv 17090@opindex mcall-sysv 17091On System V.4 and embedded PowerPC systems compile code using calling 17092conventions that adheres to the March 1995 draft of the System V 17093Application Binary Interface, PowerPC processor supplement. This is the 17094default unless you configured GCC using @samp{powerpc-*-eabiaix}. 17095 17096@item -mcall-sysv-eabi 17097@itemx -mcall-eabi 17098@opindex mcall-sysv-eabi 17099@opindex mcall-eabi 17100Specify both @option{-mcall-sysv} and @option{-meabi} options. 17101 17102@item -mcall-sysv-noeabi 17103@opindex mcall-sysv-noeabi 17104Specify both @option{-mcall-sysv} and @option{-mno-eabi} options. 17105 17106@item -mcall-aixdesc 17107@opindex m 17108On System V.4 and embedded PowerPC systems compile code for the AIX 17109operating system. 17110 17111@item -mcall-linux 17112@opindex mcall-linux 17113On System V.4 and embedded PowerPC systems compile code for the 17114Linux-based GNU system. 17115 17116@item -mcall-freebsd 17117@opindex mcall-freebsd 17118On System V.4 and embedded PowerPC systems compile code for the 17119FreeBSD operating system. 17120 17121@item -mcall-netbsd 17122@opindex mcall-netbsd 17123On System V.4 and embedded PowerPC systems compile code for the 17124NetBSD operating system. 17125 17126@item -mcall-openbsd 17127@opindex mcall-netbsd 17128On System V.4 and embedded PowerPC systems compile code for the 17129OpenBSD operating system. 17130 17131@item -maix-struct-return 17132@opindex maix-struct-return 17133Return all structures in memory (as specified by the AIX ABI)@. 17134 17135@item -msvr4-struct-return 17136@opindex msvr4-struct-return 17137Return structures smaller than 8 bytes in registers (as specified by the 17138SVR4 ABI)@. 17139 17140@item -mabi=@var{abi-type} 17141@opindex mabi 17142Extend the current ABI with a particular extension, or remove such extension. 17143Valid values are @var{altivec}, @var{no-altivec}, @var{spe}, 17144@var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble}@. 17145 17146@item -mabi=spe 17147@opindex mabi=spe 17148Extend the current ABI with SPE ABI extensions. This does not change 17149the default ABI, instead it adds the SPE ABI extensions to the current 17150ABI@. 17151 17152@item -mabi=no-spe 17153@opindex mabi=no-spe 17154Disable Booke SPE ABI extensions for the current ABI@. 17155 17156@item -mabi=ibmlongdouble 17157@opindex mabi=ibmlongdouble 17158Change the current ABI to use IBM extended-precision long double. 17159This is a PowerPC 32-bit SYSV ABI option. 17160 17161@item -mabi=ieeelongdouble 17162@opindex mabi=ieeelongdouble 17163Change the current ABI to use IEEE extended-precision long double. 17164This is a PowerPC 32-bit Linux ABI option. 17165 17166@item -mprototype 17167@itemx -mno-prototype 17168@opindex mprototype 17169@opindex mno-prototype 17170On System V.4 and embedded PowerPC systems assume that all calls to 17171variable argument functions are properly prototyped. Otherwise, the 17172compiler must insert an instruction before every non prototyped call to 17173set or clear bit 6 of the condition code register (@var{CR}) to 17174indicate whether floating-point values were passed in the floating-point 17175registers in case the function takes variable arguments. With 17176@option{-mprototype}, only calls to prototyped variable argument functions 17177will set or clear the bit. 17178 17179@item -msim 17180@opindex msim 17181On embedded PowerPC systems, assume that the startup module is called 17182@file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and 17183@file{libc.a}. This is the default for @samp{powerpc-*-eabisim} 17184configurations. 17185 17186@item -mmvme 17187@opindex mmvme 17188On embedded PowerPC systems, assume that the startup module is called 17189@file{crt0.o} and the standard C libraries are @file{libmvme.a} and 17190@file{libc.a}. 17191 17192@item -mads 17193@opindex mads 17194On embedded PowerPC systems, assume that the startup module is called 17195@file{crt0.o} and the standard C libraries are @file{libads.a} and 17196@file{libc.a}. 17197 17198@item -myellowknife 17199@opindex myellowknife 17200On embedded PowerPC systems, assume that the startup module is called 17201@file{crt0.o} and the standard C libraries are @file{libyk.a} and 17202@file{libc.a}. 17203 17204@item -mvxworks 17205@opindex mvxworks 17206On System V.4 and embedded PowerPC systems, specify that you are 17207compiling for a VxWorks system. 17208 17209@item -memb 17210@opindex memb 17211On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags 17212header to indicate that @samp{eabi} extended relocations are used. 17213 17214@item -meabi 17215@itemx -mno-eabi 17216@opindex meabi 17217@opindex mno-eabi 17218On System V.4 and embedded PowerPC systems do (do not) adhere to the 17219Embedded Applications Binary Interface (eabi) which is a set of 17220modifications to the System V.4 specifications. Selecting @option{-meabi} 17221means that the stack is aligned to an 8-byte boundary, a function 17222@code{__eabi} is called to from @code{main} to set up the eabi 17223environment, and the @option{-msdata} option can use both @code{r2} and 17224@code{r13} to point to two separate small data areas. Selecting 17225@option{-mno-eabi} means that the stack is aligned to a 16-byte boundary, 17226do not call an initialization function from @code{main}, and the 17227@option{-msdata} option will only use @code{r13} to point to a single 17228small data area. The @option{-meabi} option is on by default if you 17229configured GCC using one of the @samp{powerpc*-*-eabi*} options. 17230 17231@item -msdata=eabi 17232@opindex msdata=eabi 17233On System V.4 and embedded PowerPC systems, put small initialized 17234@code{const} global and static data in the @samp{.sdata2} section, which 17235is pointed to by register @code{r2}. Put small initialized 17236non-@code{const} global and static data in the @samp{.sdata} section, 17237which is pointed to by register @code{r13}. Put small uninitialized 17238global and static data in the @samp{.sbss} section, which is adjacent to 17239the @samp{.sdata} section. The @option{-msdata=eabi} option is 17240incompatible with the @option{-mrelocatable} option. The 17241@option{-msdata=eabi} option also sets the @option{-memb} option. 17242 17243@item -msdata=sysv 17244@opindex msdata=sysv 17245On System V.4 and embedded PowerPC systems, put small global and static 17246data in the @samp{.sdata} section, which is pointed to by register 17247@code{r13}. Put small uninitialized global and static data in the 17248@samp{.sbss} section, which is adjacent to the @samp{.sdata} section. 17249The @option{-msdata=sysv} option is incompatible with the 17250@option{-mrelocatable} option. 17251 17252@item -msdata=default 17253@itemx -msdata 17254@opindex msdata=default 17255@opindex msdata 17256On System V.4 and embedded PowerPC systems, if @option{-meabi} is used, 17257compile code the same as @option{-msdata=eabi}, otherwise compile code the 17258same as @option{-msdata=sysv}. 17259 17260@item -msdata=data 17261@opindex msdata=data 17262On System V.4 and embedded PowerPC systems, put small global 17263data in the @samp{.sdata} section. Put small uninitialized global 17264data in the @samp{.sbss} section. Do not use register @code{r13} 17265to address small data however. This is the default behavior unless 17266other @option{-msdata} options are used. 17267 17268@item -msdata=none 17269@itemx -mno-sdata 17270@opindex msdata=none 17271@opindex mno-sdata 17272On embedded PowerPC systems, put all initialized global and static data 17273in the @samp{.data} section, and all uninitialized data in the 17274@samp{.bss} section. 17275 17276@item -mblock-move-inline-limit=@var{num} 17277@opindex mblock-move-inline-limit 17278Inline all block moves (such as calls to @code{memcpy} or structure 17279copies) less than or equal to @var{num} bytes. The minimum value for 17280@var{num} is 32 bytes on 32-bit targets and 64 bytes on 64-bit 17281targets. The default value is target-specific. 17282 17283@item -G @var{num} 17284@opindex G 17285@cindex smaller data references (PowerPC) 17286@cindex .sdata/.sdata2 references (PowerPC) 17287On embedded PowerPC systems, put global and static items less than or 17288equal to @var{num} bytes into the small data or bss sections instead of 17289the normal data or bss section. By default, @var{num} is 8. The 17290@option{-G @var{num}} switch is also passed to the linker. 17291All modules should be compiled with the same @option{-G @var{num}} value. 17292 17293@item -mregnames 17294@itemx -mno-regnames 17295@opindex mregnames 17296@opindex mno-regnames 17297On System V.4 and embedded PowerPC systems do (do not) emit register 17298names in the assembly language output using symbolic forms. 17299 17300@item -mlongcall 17301@itemx -mno-longcall 17302@opindex mlongcall 17303@opindex mno-longcall 17304By default assume that all calls are far away so that a longer more 17305expensive calling sequence is required. This is required for calls 17306further than 32 megabytes (33,554,432 bytes) from the current location. 17307A short call will be generated if the compiler knows 17308the call cannot be that far away. This setting can be overridden by 17309the @code{shortcall} function attribute, or by @code{#pragma 17310longcall(0)}. 17311 17312Some linkers are capable of detecting out-of-range calls and generating 17313glue code on the fly. On these systems, long calls are unnecessary and 17314generate slower code. As of this writing, the AIX linker can do this, 17315as can the GNU linker for PowerPC/64. It is planned to add this feature 17316to the GNU linker for 32-bit PowerPC systems as well. 17317 17318On Darwin/PPC systems, @code{#pragma longcall} will generate ``jbsr 17319callee, L42'', plus a ``branch island'' (glue code). The two target 17320addresses represent the callee and the ``branch island''. The 17321Darwin/PPC linker will prefer the first address and generate a ``bl 17322callee'' if the PPC ``bl'' instruction will reach the callee directly; 17323otherwise, the linker will generate ``bl L42'' to call the ``branch 17324island''. The ``branch island'' is appended to the body of the 17325calling function; it computes the full 32-bit address of the callee 17326and jumps to it. 17327 17328On Mach-O (Darwin) systems, this option directs the compiler emit to 17329the glue for every direct call, and the Darwin linker decides whether 17330to use or discard it. 17331 17332In the future, we may cause GCC to ignore all longcall specifications 17333when the linker is known to generate glue. 17334 17335@item -mtls-markers 17336@itemx -mno-tls-markers 17337@opindex mtls-markers 17338@opindex mno-tls-markers 17339Mark (do not mark) calls to @code{__tls_get_addr} with a relocation 17340specifying the function argument. The relocation allows ld to 17341reliably associate function call with argument setup instructions for 17342TLS optimization, which in turn allows gcc to better schedule the 17343sequence. 17344 17345@item -pthread 17346@opindex pthread 17347Adds support for multithreading with the @dfn{pthreads} library. 17348This option sets flags for both the preprocessor and linker. 17349 17350@item -mrecip 17351@itemx -mno-recip 17352@opindex mrecip 17353This option will enable GCC to use the reciprocal estimate and 17354reciprocal square root estimate instructions with additional 17355Newton-Raphson steps to increase precision instead of doing a divide or 17356square root and divide for floating-point arguments. You should use 17357the @option{-ffast-math} option when using @option{-mrecip} (or at 17358least @option{-funsafe-math-optimizations}, 17359@option{-finite-math-only}, @option{-freciprocal-math} and 17360@option{-fno-trapping-math}). Note that while the throughput of the 17361sequence is generally higher than the throughput of the non-reciprocal 17362instruction, the precision of the sequence can be decreased by up to 2 17363ulp (i.e. the inverse of 1.0 equals 0.99999994) for reciprocal square 17364roots. 17365 17366@item -mrecip=@var{opt} 17367@opindex mrecip=opt 17368This option allows to control which reciprocal estimate instructions 17369may be used. @var{opt} is a comma separated list of options, which may 17370be preceded by a @code{!} to invert the option: 17371@code{all}: enable all estimate instructions, 17372@code{default}: enable the default instructions, equivalent to @option{-mrecip}, 17373@code{none}: disable all estimate instructions, equivalent to @option{-mno-recip}; 17374@code{div}: enable the reciprocal approximation instructions for both single and double precision; 17375@code{divf}: enable the single-precision reciprocal approximation instructions; 17376@code{divd}: enable the double-precision reciprocal approximation instructions; 17377@code{rsqrt}: enable the reciprocal square root approximation instructions for both single and double precision; 17378@code{rsqrtf}: enable the single-precision reciprocal square root approximation instructions; 17379@code{rsqrtd}: enable the double-precision reciprocal square root approximation instructions; 17380 17381So for example, @option{-mrecip=all,!rsqrtd} would enable the 17382all of the reciprocal estimate instructions, except for the 17383@code{FRSQRTE}, @code{XSRSQRTEDP}, and @code{XVRSQRTEDP} instructions 17384which handle the double-precision reciprocal square root calculations. 17385 17386@item -mrecip-precision 17387@itemx -mno-recip-precision 17388@opindex mrecip-precision 17389Assume (do not assume) that the reciprocal estimate instructions 17390provide higher-precision estimates than is mandated by the PowerPC 17391ABI. Selecting @option{-mcpu=power6} or @option{-mcpu=power7} 17392automatically selects @option{-mrecip-precision}. The double-precision 17393square root estimate instructions are not generated by 17394default on low-precision machines, since they do not provide an 17395estimate that converges after three steps. 17396 17397@item -mveclibabi=@var{type} 17398@opindex mveclibabi 17399Specifies the ABI type to use for vectorizing intrinsics using an 17400external library. The only type supported at present is @code{mass}, 17401which specifies to use IBM's Mathematical Acceleration Subsystem 17402(MASS) libraries for vectorizing intrinsics using external libraries. 17403GCC will currently emit calls to @code{acosd2}, @code{acosf4}, 17404@code{acoshd2}, @code{acoshf4}, @code{asind2}, @code{asinf4}, 17405@code{asinhd2}, @code{asinhf4}, @code{atan2d2}, @code{atan2f4}, 17406@code{atand2}, @code{atanf4}, @code{atanhd2}, @code{atanhf4}, 17407@code{cbrtd2}, @code{cbrtf4}, @code{cosd2}, @code{cosf4}, 17408@code{coshd2}, @code{coshf4}, @code{erfcd2}, @code{erfcf4}, 17409@code{erfd2}, @code{erff4}, @code{exp2d2}, @code{exp2f4}, 17410@code{expd2}, @code{expf4}, @code{expm1d2}, @code{expm1f4}, 17411@code{hypotd2}, @code{hypotf4}, @code{lgammad2}, @code{lgammaf4}, 17412@code{log10d2}, @code{log10f4}, @code{log1pd2}, @code{log1pf4}, 17413@code{log2d2}, @code{log2f4}, @code{logd2}, @code{logf4}, 17414@code{powd2}, @code{powf4}, @code{sind2}, @code{sinf4}, @code{sinhd2}, 17415@code{sinhf4}, @code{sqrtd2}, @code{sqrtf4}, @code{tand2}, 17416@code{tanf4}, @code{tanhd2}, and @code{tanhf4} when generating code 17417for power7. Both @option{-ftree-vectorize} and 17418@option{-funsafe-math-optimizations} have to be enabled. The MASS 17419libraries will have to be specified at link time. 17420 17421@item -mfriz 17422@itemx -mno-friz 17423@opindex mfriz 17424Generate (do not generate) the @code{friz} instruction when the 17425@option{-funsafe-math-optimizations} option is used to optimize 17426rounding of floating-point values to 64-bit integer and back to floating 17427point. The @code{friz} instruction does not return the same value if 17428the floating-point number is too large to fit in an integer. 17429 17430@item -mpointers-to-nested-functions 17431@itemx -mno-pointers-to-nested-functions 17432@opindex mpointers-to-nested-functions 17433Generate (do not generate) code to load up the static chain register 17434(@var{r11}) when calling through a pointer on AIX and 64-bit Linux 17435systems where a function pointer points to a 3-word descriptor giving 17436the function address, TOC value to be loaded in register @var{r2}, and 17437static chain value to be loaded in register @var{r11}. The 17438@option{-mpointers-to-nested-functions} is on by default. You will 17439not be able to call through pointers to nested functions or pointers 17440to functions compiled in other languages that use the static chain if 17441you use the @option{-mno-pointers-to-nested-functions}. 17442 17443@item -msave-toc-indirect 17444@itemx -mno-save-toc-indirect 17445@opindex msave-toc-indirect 17446Generate (do not generate) code to save the TOC value in the reserved 17447stack location in the function prologue if the function calls through 17448a pointer on AIX and 64-bit Linux systems. If the TOC value is not 17449saved in the prologue, it is saved just before the call through the 17450pointer. The @option{-mno-save-toc-indirect} option is the default. 17451@end table 17452 17453@node RX Options 17454@subsection RX Options 17455@cindex RX Options 17456 17457These command-line options are defined for RX targets: 17458 17459@table @gcctabopt 17460@item -m64bit-doubles 17461@itemx -m32bit-doubles 17462@opindex m64bit-doubles 17463@opindex m32bit-doubles 17464Make the @code{double} data type be 64 bits (@option{-m64bit-doubles}) 17465or 32 bits (@option{-m32bit-doubles}) in size. The default is 17466@option{-m32bit-doubles}. @emph{Note} RX floating-point hardware only 17467works on 32-bit values, which is why the default is 17468@option{-m32bit-doubles}. 17469 17470@item -fpu 17471@itemx -nofpu 17472@opindex fpu 17473@opindex nofpu 17474Enables (@option{-fpu}) or disables (@option{-nofpu}) the use of RX 17475floating-point hardware. The default is enabled for the @var{RX600} 17476series and disabled for the @var{RX200} series. 17477 17478Floating-point instructions will only be generated for 32-bit floating-point 17479values however, so if the @option{-m64bit-doubles} option is in 17480use then the FPU hardware will not be used for doubles. 17481 17482@emph{Note} If the @option{-fpu} option is enabled then 17483@option{-funsafe-math-optimizations} is also enabled automatically. 17484This is because the RX FPU instructions are themselves unsafe. 17485 17486@item -mcpu=@var{name} 17487@opindex -mcpu 17488Selects the type of RX CPU to be targeted. Currently three types are 17489supported, the generic @var{RX600} and @var{RX200} series hardware and 17490the specific @var{RX610} CPU. The default is @var{RX600}. 17491 17492The only difference between @var{RX600} and @var{RX610} is that the 17493@var{RX610} does not support the @code{MVTIPL} instruction. 17494 17495The @var{RX200} series does not have a hardware floating-point unit 17496and so @option{-nofpu} is enabled by default when this type is 17497selected. 17498 17499@item -mbig-endian-data 17500@itemx -mlittle-endian-data 17501@opindex mbig-endian-data 17502@opindex mlittle-endian-data 17503Store data (but not code) in the big-endian format. The default is 17504@option{-mlittle-endian-data}, i.e.@: to store data in the little-endian 17505format. 17506 17507@item -msmall-data-limit=@var{N} 17508@opindex msmall-data-limit 17509Specifies the maximum size in bytes of global and static variables 17510which can be placed into the small data area. Using the small data 17511area can lead to smaller and faster code, but the size of area is 17512limited and it is up to the programmer to ensure that the area does 17513not overflow. Also when the small data area is used one of the RX's 17514registers (usually @code{r13}) is reserved for use pointing to this 17515area, so it is no longer available for use by the compiler. This 17516could result in slower and/or larger code if variables which once 17517could have been held in the reserved register are now pushed onto the 17518stack. 17519 17520Note, common variables (variables that have not been initialized) and 17521constants are not placed into the small data area as they are assigned 17522to other sections in the output executable. 17523 17524The default value is zero, which disables this feature. Note, this 17525feature is not enabled by default with higher optimization levels 17526(@option{-O2} etc) because of the potentially detrimental effects of 17527reserving a register. It is up to the programmer to experiment and 17528discover whether this feature is of benefit to their program. See the 17529description of the @option{-mpid} option for a description of how the 17530actual register to hold the small data area pointer is chosen. 17531 17532@item -msim 17533@itemx -mno-sim 17534@opindex msim 17535@opindex mno-sim 17536Use the simulator runtime. The default is to use the libgloss board 17537specific runtime. 17538 17539@item -mas100-syntax 17540@itemx -mno-as100-syntax 17541@opindex mas100-syntax 17542@opindex mno-as100-syntax 17543When generating assembler output use a syntax that is compatible with 17544Renesas's AS100 assembler. This syntax can also be handled by the GAS 17545assembler but it has some restrictions so generating it is not the 17546default option. 17547 17548@item -mmax-constant-size=@var{N} 17549@opindex mmax-constant-size 17550Specifies the maximum size, in bytes, of a constant that can be used as 17551an operand in a RX instruction. Although the RX instruction set does 17552allow constants of up to 4 bytes in length to be used in instructions, 17553a longer value equates to a longer instruction. Thus in some 17554circumstances it can be beneficial to restrict the size of constants 17555that are used in instructions. Constants that are too big are instead 17556placed into a constant pool and referenced via register indirection. 17557 17558The value @var{N} can be between 0 and 4. A value of 0 (the default) 17559or 4 means that constants of any size are allowed. 17560 17561@item -mrelax 17562@opindex mrelax 17563Enable linker relaxation. Linker relaxation is a process whereby the 17564linker will attempt to reduce the size of a program by finding shorter 17565versions of various instructions. Disabled by default. 17566 17567@item -mint-register=@var{N} 17568@opindex mint-register 17569Specify the number of registers to reserve for fast interrupt handler 17570functions. The value @var{N} can be between 0 and 4. A value of 1 17571means that register @code{r13} will be reserved for the exclusive use 17572of fast interrupt handlers. A value of 2 reserves @code{r13} and 17573@code{r12}. A value of 3 reserves @code{r13}, @code{r12} and 17574@code{r11}, and a value of 4 reserves @code{r13} through @code{r10}. 17575A value of 0, the default, does not reserve any registers. 17576 17577@item -msave-acc-in-interrupts 17578@opindex msave-acc-in-interrupts 17579Specifies that interrupt handler functions should preserve the 17580accumulator register. This is only necessary if normal code might use 17581the accumulator register, for example because it performs 64-bit 17582multiplications. The default is to ignore the accumulator as this 17583makes the interrupt handlers faster. 17584 17585@item -mpid 17586@itemx -mno-pid 17587@opindex mpid 17588@opindex mno-pid 17589Enables the generation of position independent data. When enabled any 17590access to constant data will done via an offset from a base address 17591held in a register. This allows the location of constant data to be 17592determined at run time without requiring the executable to be 17593relocated, which is a benefit to embedded applications with tight 17594memory constraints. Data that can be modified is not affected by this 17595option. 17596 17597Note, using this feature reserves a register, usually @code{r13}, for 17598the constant data base address. This can result in slower and/or 17599larger code, especially in complicated functions. 17600 17601The actual register chosen to hold the constant data base address 17602depends upon whether the @option{-msmall-data-limit} and/or the 17603@option{-mint-register} command-line options are enabled. Starting 17604with register @code{r13} and proceeding downwards, registers are 17605allocated first to satisfy the requirements of @option{-mint-register}, 17606then @option{-mpid} and finally @option{-msmall-data-limit}. Thus it 17607is possible for the small data area register to be @code{r8} if both 17608@option{-mint-register=4} and @option{-mpid} are specified on the 17609command line. 17610 17611By default this feature is not enabled. The default can be restored 17612via the @option{-mno-pid} command-line option. 17613 17614@end table 17615 17616@emph{Note:} The generic GCC command-line option @option{-ffixed-@var{reg}} 17617has special significance to the RX port when used with the 17618@code{interrupt} function attribute. This attribute indicates a 17619function intended to process fast interrupts. GCC will will ensure 17620that it only uses the registers @code{r10}, @code{r11}, @code{r12} 17621and/or @code{r13} and only provided that the normal use of the 17622corresponding registers have been restricted via the 17623@option{-ffixed-@var{reg}} or @option{-mint-register} command-line 17624options. 17625 17626@node S/390 and zSeries Options 17627@subsection S/390 and zSeries Options 17628@cindex S/390 and zSeries Options 17629 17630These are the @samp{-m} options defined for the S/390 and zSeries architecture. 17631 17632@table @gcctabopt 17633@item -mhard-float 17634@itemx -msoft-float 17635@opindex mhard-float 17636@opindex msoft-float 17637Use (do not use) the hardware floating-point instructions and registers 17638for floating-point operations. When @option{-msoft-float} is specified, 17639functions in @file{libgcc.a} will be used to perform floating-point 17640operations. When @option{-mhard-float} is specified, the compiler 17641generates IEEE floating-point instructions. This is the default. 17642 17643@item -mhard-dfp 17644@itemx -mno-hard-dfp 17645@opindex mhard-dfp 17646@opindex mno-hard-dfp 17647Use (do not use) the hardware decimal-floating-point instructions for 17648decimal-floating-point operations. When @option{-mno-hard-dfp} is 17649specified, functions in @file{libgcc.a} will be used to perform 17650decimal-floating-point operations. When @option{-mhard-dfp} is 17651specified, the compiler generates decimal-floating-point hardware 17652instructions. This is the default for @option{-march=z9-ec} or higher. 17653 17654@item -mlong-double-64 17655@itemx -mlong-double-128 17656@opindex mlong-double-64 17657@opindex mlong-double-128 17658These switches control the size of @code{long double} type. A size 17659of 64 bits makes the @code{long double} type equivalent to the @code{double} 17660type. This is the default. 17661 17662@item -mbackchain 17663@itemx -mno-backchain 17664@opindex mbackchain 17665@opindex mno-backchain 17666Store (do not store) the address of the caller's frame as backchain pointer 17667into the callee's stack frame. 17668A backchain may be needed to allow debugging using tools that do not understand 17669DWARF-2 call frame information. 17670When @option{-mno-packed-stack} is in effect, the backchain pointer is stored 17671at the bottom of the stack frame; when @option{-mpacked-stack} is in effect, 17672the backchain is placed into the topmost word of the 96/160 byte register 17673save area. 17674 17675In general, code compiled with @option{-mbackchain} is call-compatible with 17676code compiled with @option{-mmo-backchain}; however, use of the backchain 17677for debugging purposes usually requires that the whole binary is built with 17678@option{-mbackchain}. Note that the combination of @option{-mbackchain}, 17679@option{-mpacked-stack} and @option{-mhard-float} is not supported. In order 17680to build a linux kernel use @option{-msoft-float}. 17681 17682The default is to not maintain the backchain. 17683 17684@item -mpacked-stack 17685@itemx -mno-packed-stack 17686@opindex mpacked-stack 17687@opindex mno-packed-stack 17688Use (do not use) the packed stack layout. When @option{-mno-packed-stack} is 17689specified, the compiler uses the all fields of the 96/160 byte register save 17690area only for their default purpose; unused fields still take up stack space. 17691When @option{-mpacked-stack} is specified, register save slots are densely 17692packed at the top of the register save area; unused space is reused for other 17693purposes, allowing for more efficient use of the available stack space. 17694However, when @option{-mbackchain} is also in effect, the topmost word of 17695the save area is always used to store the backchain, and the return address 17696register is always saved two words below the backchain. 17697 17698As long as the stack frame backchain is not used, code generated with 17699@option{-mpacked-stack} is call-compatible with code generated with 17700@option{-mno-packed-stack}. Note that some non-FSF releases of GCC 2.95 for 17701S/390 or zSeries generated code that uses the stack frame backchain at run 17702time, not just for debugging purposes. Such code is not call-compatible 17703with code compiled with @option{-mpacked-stack}. Also, note that the 17704combination of @option{-mbackchain}, 17705@option{-mpacked-stack} and @option{-mhard-float} is not supported. In order 17706to build a linux kernel use @option{-msoft-float}. 17707 17708The default is to not use the packed stack layout. 17709 17710@item -msmall-exec 17711@itemx -mno-small-exec 17712@opindex msmall-exec 17713@opindex mno-small-exec 17714Generate (or do not generate) code using the @code{bras} instruction 17715to do subroutine calls. 17716This only works reliably if the total executable size does not 17717exceed 64k. The default is to use the @code{basr} instruction instead, 17718which does not have this limitation. 17719 17720@item -m64 17721@itemx -m31 17722@opindex m64 17723@opindex m31 17724When @option{-m31} is specified, generate code compliant to the 17725GNU/Linux for S/390 ABI@. When @option{-m64} is specified, generate 17726code compliant to the GNU/Linux for zSeries ABI@. This allows GCC in 17727particular to generate 64-bit instructions. For the @samp{s390} 17728targets, the default is @option{-m31}, while the @samp{s390x} 17729targets default to @option{-m64}. 17730 17731@item -mzarch 17732@itemx -mesa 17733@opindex mzarch 17734@opindex mesa 17735When @option{-mzarch} is specified, generate code using the 17736instructions available on z/Architecture. 17737When @option{-mesa} is specified, generate code using the 17738instructions available on ESA/390. Note that @option{-mesa} is 17739not possible with @option{-m64}. 17740When generating code compliant to the GNU/Linux for S/390 ABI, 17741the default is @option{-mesa}. When generating code compliant 17742to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}. 17743 17744@item -mmvcle 17745@itemx -mno-mvcle 17746@opindex mmvcle 17747@opindex mno-mvcle 17748Generate (or do not generate) code using the @code{mvcle} instruction 17749to perform block moves. When @option{-mno-mvcle} is specified, 17750use a @code{mvc} loop instead. This is the default unless optimizing for 17751size. 17752 17753@item -mdebug 17754@itemx -mno-debug 17755@opindex mdebug 17756@opindex mno-debug 17757Print (or do not print) additional debug information when compiling. 17758The default is to not print debug information. 17759 17760@item -march=@var{cpu-type} 17761@opindex march 17762Generate code that will run on @var{cpu-type}, which is the name of a system 17763representing a certain processor type. Possible values for 17764@var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, @samp{z990}, 17765@samp{z9-109}, @samp{z9-ec} and @samp{z10}. 17766When generating code using the instructions available on z/Architecture, 17767the default is @option{-march=z900}. Otherwise, the default is 17768@option{-march=g5}. 17769 17770@item -mtune=@var{cpu-type} 17771@opindex mtune 17772Tune to @var{cpu-type} everything applicable about the generated code, 17773except for the ABI and the set of available instructions. 17774The list of @var{cpu-type} values is the same as for @option{-march}. 17775The default is the value used for @option{-march}. 17776 17777@item -mtpf-trace 17778@itemx -mno-tpf-trace 17779@opindex mtpf-trace 17780@opindex mno-tpf-trace 17781Generate code that adds (does not add) in TPF OS specific branches to trace 17782routines in the operating system. This option is off by default, even 17783when compiling for the TPF OS@. 17784 17785@item -mfused-madd 17786@itemx -mno-fused-madd 17787@opindex mfused-madd 17788@opindex mno-fused-madd 17789Generate code that uses (does not use) the floating-point multiply and 17790accumulate instructions. These instructions are generated by default if 17791hardware floating point is used. 17792 17793@item -mwarn-framesize=@var{framesize} 17794@opindex mwarn-framesize 17795Emit a warning if the current function exceeds the given frame size. Because 17796this is a compile-time check it doesn't need to be a real problem when the program 17797runs. It is intended to identify functions that most probably cause 17798a stack overflow. It is useful to be used in an environment with limited stack 17799size e.g.@: the linux kernel. 17800 17801@item -mwarn-dynamicstack 17802@opindex mwarn-dynamicstack 17803Emit a warning if the function calls alloca or uses dynamically 17804sized arrays. This is generally a bad idea with a limited stack size. 17805 17806@item -mstack-guard=@var{stack-guard} 17807@itemx -mstack-size=@var{stack-size} 17808@opindex mstack-guard 17809@opindex mstack-size 17810If these options are provided the s390 back end emits additional instructions in 17811the function prologue which trigger a trap if the stack size is @var{stack-guard} 17812bytes above the @var{stack-size} (remember that the stack on s390 grows downward). 17813If the @var{stack-guard} option is omitted the smallest power of 2 larger than 17814the frame size of the compiled function is chosen. 17815These options are intended to be used to help debugging stack overflow problems. 17816The additionally emitted code causes only little overhead and hence can also be 17817used in production like systems without greater performance degradation. The given 17818values have to be exact powers of 2 and @var{stack-size} has to be greater than 17819@var{stack-guard} without exceeding 64k. 17820In order to be efficient the extra code makes the assumption that the stack starts 17821at an address aligned to the value given by @var{stack-size}. 17822The @var{stack-guard} option can only be used in conjunction with @var{stack-size}. 17823@end table 17824 17825@node Score Options 17826@subsection Score Options 17827@cindex Score Options 17828 17829These options are defined for Score implementations: 17830 17831@table @gcctabopt 17832@item -meb 17833@opindex meb 17834Compile code for big-endian mode. This is the default. 17835 17836@item -mel 17837@opindex mel 17838Compile code for little-endian mode. 17839 17840@item -mnhwloop 17841@opindex mnhwloop 17842Disable generate bcnz instruction. 17843 17844@item -muls 17845@opindex muls 17846Enable generate unaligned load and store instruction. 17847 17848@item -mmac 17849@opindex mmac 17850Enable the use of multiply-accumulate instructions. Disabled by default. 17851 17852@item -mscore5 17853@opindex mscore5 17854Specify the SCORE5 as the target architecture. 17855 17856@item -mscore5u 17857@opindex mscore5u 17858Specify the SCORE5U of the target architecture. 17859 17860@item -mscore7 17861@opindex mscore7 17862Specify the SCORE7 as the target architecture. This is the default. 17863 17864@item -mscore7d 17865@opindex mscore7d 17866Specify the SCORE7D as the target architecture. 17867@end table 17868 17869@node SH Options 17870@subsection SH Options 17871 17872These @samp{-m} options are defined for the SH implementations: 17873 17874@table @gcctabopt 17875@item -m1 17876@opindex m1 17877Generate code for the SH1. 17878 17879@item -m2 17880@opindex m2 17881Generate code for the SH2. 17882 17883@item -m2e 17884Generate code for the SH2e. 17885 17886@item -m2a-nofpu 17887@opindex m2a-nofpu 17888Generate code for the SH2a without FPU, or for a SH2a-FPU in such a way 17889that the floating-point unit is not used. 17890 17891@item -m2a-single-only 17892@opindex m2a-single-only 17893Generate code for the SH2a-FPU, in such a way that no double-precision 17894floating-point operations are used. 17895 17896@item -m2a-single 17897@opindex m2a-single 17898Generate code for the SH2a-FPU assuming the floating-point unit is in 17899single-precision mode by default. 17900 17901@item -m2a 17902@opindex m2a 17903Generate code for the SH2a-FPU assuming the floating-point unit is in 17904double-precision mode by default. 17905 17906@item -m3 17907@opindex m3 17908Generate code for the SH3. 17909 17910@item -m3e 17911@opindex m3e 17912Generate code for the SH3e. 17913 17914@item -m4-nofpu 17915@opindex m4-nofpu 17916Generate code for the SH4 without a floating-point unit. 17917 17918@item -m4-single-only 17919@opindex m4-single-only 17920Generate code for the SH4 with a floating-point unit that only 17921supports single-precision arithmetic. 17922 17923@item -m4-single 17924@opindex m4-single 17925Generate code for the SH4 assuming the floating-point unit is in 17926single-precision mode by default. 17927 17928@item -m4 17929@opindex m4 17930Generate code for the SH4. 17931 17932@item -m4a-nofpu 17933@opindex m4a-nofpu 17934Generate code for the SH4al-dsp, or for a SH4a in such a way that the 17935floating-point unit is not used. 17936 17937@item -m4a-single-only 17938@opindex m4a-single-only 17939Generate code for the SH4a, in such a way that no double-precision 17940floating-point operations are used. 17941 17942@item -m4a-single 17943@opindex m4a-single 17944Generate code for the SH4a assuming the floating-point unit is in 17945single-precision mode by default. 17946 17947@item -m4a 17948@opindex m4a 17949Generate code for the SH4a. 17950 17951@item -m4al 17952@opindex m4al 17953Same as @option{-m4a-nofpu}, except that it implicitly passes 17954@option{-dsp} to the assembler. GCC doesn't generate any DSP 17955instructions at the moment. 17956 17957@item -mb 17958@opindex mb 17959Compile code for the processor in big-endian mode. 17960 17961@item -ml 17962@opindex ml 17963Compile code for the processor in little-endian mode. 17964 17965@item -mdalign 17966@opindex mdalign 17967Align doubles at 64-bit boundaries. Note that this changes the calling 17968conventions, and thus some functions from the standard C library will 17969not work unless you recompile it first with @option{-mdalign}. 17970 17971@item -mrelax 17972@opindex mrelax 17973Shorten some address references at link time, when possible; uses the 17974linker option @option{-relax}. 17975 17976@item -mbigtable 17977@opindex mbigtable 17978Use 32-bit offsets in @code{switch} tables. The default is to use 1797916-bit offsets. 17980 17981@item -mbitops 17982@opindex mbitops 17983Enable the use of bit manipulation instructions on SH2A. 17984 17985@item -mfmovd 17986@opindex mfmovd 17987Enable the use of the instruction @code{fmovd}. Check @option{-mdalign} for 17988alignment constraints. 17989 17990@item -mhitachi 17991@opindex mhitachi 17992Comply with the calling conventions defined by Renesas. 17993 17994@item -mrenesas 17995@opindex mhitachi 17996Comply with the calling conventions defined by Renesas. 17997 17998@item -mno-renesas 17999@opindex mhitachi 18000Comply with the calling conventions defined for GCC before the Renesas 18001conventions were available. This option is the default for all 18002targets of the SH toolchain. 18003 18004@item -mnomacsave 18005@opindex mnomacsave 18006Mark the @code{MAC} register as call-clobbered, even if 18007@option{-mhitachi} is given. 18008 18009@item -mieee 18010@item -mno-ieee 18011@opindex mieee 18012@opindex mnoieee 18013Control the IEEE compliance of floating-point comparisons, which affects the 18014handling of cases where the result of a comparison is unordered. By default 18015@option{-mieee} is implicitly enabled. If @option{-ffinite-math-only} is 18016enabled @option{-mno-ieee} is implicitly set, which results in faster 18017floating-point greater-equal and less-equal comparisons. The implcit settings 18018can be overridden by specifying either @option{-mieee} or @option{-mno-ieee}. 18019 18020@item -minline-ic_invalidate 18021@opindex minline-ic_invalidate 18022Inline code to invalidate instruction cache entries after setting up 18023nested function trampolines. 18024This option has no effect if -musermode is in effect and the selected 18025code generation option (e.g. -m4) does not allow the use of the icbi 18026instruction. 18027If the selected code generation option does not allow the use of the icbi 18028instruction, and -musermode is not in effect, the inlined code will 18029manipulate the instruction cache address array directly with an associative 18030write. This not only requires privileged mode, but it will also 18031fail if the cache line had been mapped via the TLB and has become unmapped. 18032 18033@item -misize 18034@opindex misize 18035Dump instruction size and location in the assembly code. 18036 18037@item -mpadstruct 18038@opindex mpadstruct 18039This option is deprecated. It pads structures to multiple of 4 bytes, 18040which is incompatible with the SH ABI@. 18041 18042@item -msoft-atomic 18043@opindex msoft-atomic 18044Generate GNU/Linux compatible gUSA software atomic sequences for the atomic 18045built-in functions. The generated atomic sequences require support from the 18046interrupt / exception handling code of the system and are only suitable for 18047single-core systems. They will not perform correctly on multi-core systems. 18048This option is enabled by default when the target is @code{sh-*-linux*}. 18049For details on the atomic built-in functions see @ref{__atomic Builtins}. 18050 18051@item -mspace 18052@opindex mspace 18053Optimize for space instead of speed. Implied by @option{-Os}. 18054 18055@item -mprefergot 18056@opindex mprefergot 18057When generating position-independent code, emit function calls using 18058the Global Offset Table instead of the Procedure Linkage Table. 18059 18060@item -musermode 18061@opindex musermode 18062Don't generate privileged mode only code; implies -mno-inline-ic_invalidate 18063if the inlined code would not work in user mode. 18064This is the default when the target is @code{sh-*-linux*}. 18065 18066@item -multcost=@var{number} 18067@opindex multcost=@var{number} 18068Set the cost to assume for a multiply insn. 18069 18070@item -mdiv=@var{strategy} 18071@opindex mdiv=@var{strategy} 18072Set the division strategy to be used for integer division operations. 18073For SHmedia @var{strategy} can be one of: 18074 18075@table @samp 18076 18077@item fp 18078Performs the operation in floating point. This has a very high latency, 18079but needs only a few instructions, so it might be a good choice if 18080your code has enough easily-exploitable ILP to allow the compiler to 18081schedule the floating-point instructions together with other instructions. 18082Division by zero causes a floating-point exception. 18083 18084@item inv 18085Uses integer operations to calculate the inverse of the divisor, 18086and then multiplies the dividend with the inverse. This strategy allows 18087CSE and hoisting of the inverse calculation. Division by zero calculates 18088an unspecified result, but does not trap. 18089 18090@item inv:minlat 18091A variant of @samp{inv} where, if no CSE or hoisting opportunities 18092have been found, or if the entire operation has been hoisted to the same 18093place, the last stages of the inverse calculation are intertwined with the 18094final multiply to reduce the overall latency, at the expense of using a few 18095more instructions, and thus offering fewer scheduling opportunities with 18096other code. 18097 18098@item call 18099Calls a library function that usually implements the @samp{inv:minlat} 18100strategy. 18101This gives high code density for @code{m5-*media-nofpu} compilations. 18102 18103@item call2 18104Uses a different entry point of the same library function, where it 18105assumes that a pointer to a lookup table has already been set up, which 18106exposes the pointer load to CSE and code hoisting optimizations. 18107 18108@item inv:call 18109@itemx inv:call2 18110@itemx inv:fp 18111Use the @samp{inv} algorithm for initial 18112code generation, but if the code stays unoptimized, revert to the @samp{call}, 18113@samp{call2}, or @samp{fp} strategies, respectively. Note that the 18114potentially-trapping side effect of division by zero is carried by a 18115separate instruction, so it is possible that all the integer instructions 18116are hoisted out, but the marker for the side effect stays where it is. 18117A recombination to floating-point operations or a call is not possible 18118in that case. 18119 18120@item inv20u 18121@itemx inv20l 18122Variants of the @samp{inv:minlat} strategy. In the case 18123that the inverse calculation is not separated from the multiply, they speed 18124up division where the dividend fits into 20 bits (plus sign where applicable) 18125by inserting a test to skip a number of operations in this case; this test 18126slows down the case of larger dividends. @samp{inv20u} assumes the case of a such 18127a small dividend to be unlikely, and @samp{inv20l} assumes it to be likely. 18128 18129@end table 18130 18131For targets other than SHmedia @var{strategy} can be one of: 18132 18133@table @samp 18134 18135@item call-div1 18136Calls a library function that uses the single-step division instruction 18137@code{div1} to perform the operation. Division by zero calculates an 18138unspecified result and does not trap. This is the default except for SH4, 18139SH2A and SHcompact. 18140 18141@item call-fp 18142Calls a library function that performs the operation in double precision 18143floating point. Division by zero causes a floating-point exception. This is 18144the default for SHcompact with FPU. Specifying this for targets that do not 18145have a double precision FPU will default to @code{call-div1}. 18146 18147@item call-table 18148Calls a library function that uses a lookup table for small divisors and 18149the @code{div1} instruction with case distinction for larger divisors. Division 18150by zero calculates an unspecified result and does not trap. This is the default 18151for SH4. Specifying this for targets that do not have dynamic shift 18152instructions will default to @code{call-div1}. 18153 18154@end table 18155 18156When a division strategy has not been specified the default strategy will be 18157selected based on the current target. For SH2A the default strategy is to 18158use the @code{divs} and @code{divu} instructions instead of library function 18159calls. 18160 18161@item -maccumulate-outgoing-args 18162@opindex maccumulate-outgoing-args 18163Reserve space once for outgoing arguments in the function prologue rather 18164than around each call. Generally beneficial for performance and size. Also 18165needed for unwinding to avoid changing the stack frame around conditional code. 18166 18167@item -mdivsi3_libfunc=@var{name} 18168@opindex mdivsi3_libfunc=@var{name} 18169Set the name of the library function used for 32-bit signed division to 18170@var{name}. This only affect the name used in the call and inv:call 18171division strategies, and the compiler will still expect the same 18172sets of input/output/clobbered registers as if this option was not present. 18173 18174@item -mfixed-range=@var{register-range} 18175@opindex mfixed-range 18176Generate code treating the given register range as fixed registers. 18177A fixed register is one that the register allocator can not use. This is 18178useful when compiling kernel code. A register range is specified as 18179two registers separated by a dash. Multiple register ranges can be 18180specified separated by a comma. 18181 18182@item -madjust-unroll 18183@opindex madjust-unroll 18184Throttle unrolling to avoid thrashing target registers. 18185This option only has an effect if the gcc code base supports the 18186TARGET_ADJUST_UNROLL_MAX target hook. 18187 18188@item -mindexed-addressing 18189@opindex mindexed-addressing 18190Enable the use of the indexed addressing mode for SHmedia32/SHcompact. 18191This is only safe if the hardware and/or OS implement 32-bit wrap-around 18192semantics for the indexed addressing mode. The architecture allows the 18193implementation of processors with 64-bit MMU, which the OS could use to 18194get 32-bit addressing, but since no current hardware implementation supports 18195this or any other way to make the indexed addressing mode safe to use in 18196the 32-bit ABI, the default is @option{-mno-indexed-addressing}. 18197 18198@item -mgettrcost=@var{number} 18199@opindex mgettrcost=@var{number} 18200Set the cost assumed for the gettr instruction to @var{number}. 18201The default is 2 if @option{-mpt-fixed} is in effect, 100 otherwise. 18202 18203@item -mpt-fixed 18204@opindex mpt-fixed 18205Assume pt* instructions won't trap. This will generally generate better 18206scheduled code, but is unsafe on current hardware. The current architecture 18207definition says that ptabs and ptrel trap when the target anded with 3 is 3. 18208This has the unintentional effect of making it unsafe to schedule ptabs / 18209ptrel before a branch, or hoist it out of a loop. For example, 18210__do_global_ctors, a part of libgcc that runs constructors at program 18211startup, calls functions in a list which is delimited by @minus{}1. With the 18212-mpt-fixed option, the ptabs will be done before testing against @minus{}1. 18213That means that all the constructors will be run a bit quicker, but when 18214the loop comes to the end of the list, the program crashes because ptabs 18215loads @minus{}1 into a target register. Since this option is unsafe for any 18216hardware implementing the current architecture specification, the default 18217is -mno-pt-fixed. Unless the user specifies a specific cost with 18218@option{-mgettrcost}, -mno-pt-fixed also implies @option{-mgettrcost=100}; 18219this deters register allocation using target registers for storing 18220ordinary integers. 18221 18222@item -minvalid-symbols 18223@opindex minvalid-symbols 18224Assume symbols might be invalid. Ordinary function symbols generated by 18225the compiler will always be valid to load with movi/shori/ptabs or 18226movi/shori/ptrel, but with assembler and/or linker tricks it is possible 18227to generate symbols that will cause ptabs / ptrel to trap. 18228This option is only meaningful when @option{-mno-pt-fixed} is in effect. 18229It will then prevent cross-basic-block cse, hoisting and most scheduling 18230of symbol loads. The default is @option{-mno-invalid-symbols}. 18231 18232@item -mbranch-cost=@var{num} 18233@opindex mbranch-cost=@var{num} 18234Assume @var{num} to be the cost for a branch instruction. Higher numbers 18235will make the compiler try to generate more branch-free code if possible. 18236If not specified the value is selected depending on the processor type that 18237is being compiled for. 18238 18239@item -mcbranchdi 18240@opindex mcbranchdi 18241Enable the @code{cbranchdi4} instruction pattern. 18242 18243@item -mcmpeqdi 18244@opindex mcmpeqdi 18245Emit the @code{cmpeqdi_t} instruction pattern even when @option{-mcbranchdi} 18246is in effect. 18247 18248@item -mfused-madd 18249@opindex mfused-madd 18250Allow the usage of the @code{fmac} instruction (floating-point 18251multiply-accumulate) if the processor type supports it. Enabling this 18252option might generate code that produces different numeric floating-point 18253results compared to strict IEEE 754 arithmetic. 18254 18255@item -mpretend-cmove 18256@opindex mpretend-cmove 18257Prefer zero-displacement conditional branches for conditional move instruction 18258patterns. This can result in faster code on the SH4 processor. 18259 18260@end table 18261 18262@node Solaris 2 Options 18263@subsection Solaris 2 Options 18264@cindex Solaris 2 options 18265 18266These @samp{-m} options are supported on Solaris 2: 18267 18268@table @gcctabopt 18269@item -mimpure-text 18270@opindex mimpure-text 18271@option{-mimpure-text}, used in addition to @option{-shared}, tells 18272the compiler to not pass @option{-z text} to the linker when linking a 18273shared object. Using this option, you can link position-dependent 18274code into a shared object. 18275 18276@option{-mimpure-text} suppresses the ``relocations remain against 18277allocatable but non-writable sections'' linker error message. 18278However, the necessary relocations will trigger copy-on-write, and the 18279shared object is not actually shared across processes. Instead of 18280using @option{-mimpure-text}, you should compile all source code with 18281@option{-fpic} or @option{-fPIC}. 18282 18283@end table 18284 18285These switches are supported in addition to the above on Solaris 2: 18286 18287@table @gcctabopt 18288@item -pthreads 18289@opindex pthreads 18290Add support for multithreading using the POSIX threads library. This 18291option sets flags for both the preprocessor and linker. This option does 18292not affect the thread safety of object code produced by the compiler or 18293that of libraries supplied with it. 18294 18295@item -pthread 18296@opindex pthread 18297This is a synonym for @option{-pthreads}. 18298@end table 18299 18300@node SPARC Options 18301@subsection SPARC Options 18302@cindex SPARC options 18303 18304These @samp{-m} options are supported on the SPARC: 18305 18306@table @gcctabopt 18307@item -mno-app-regs 18308@itemx -mapp-regs 18309@opindex mno-app-regs 18310@opindex mapp-regs 18311Specify @option{-mapp-regs} to generate output using the global registers 183122 through 4, which the SPARC SVR4 ABI reserves for applications. Like the 18313global register 1, each global register 2 through 4 is then treated as an 18314allocable register that is clobbered by function calls. This is the default. 18315 18316To be fully SVR4 ABI compliant at the cost of some performance loss, 18317specify @option{-mno-app-regs}. You should compile libraries and system 18318software with this option. 18319 18320@item -mflat 18321@itemx -mno-flat 18322@opindex mflat 18323@opindex mno-flat 18324With @option{-mflat}, the compiler does not generate save/restore instructions 18325and uses a ``flat'' or single register window model. This model is compatible 18326with the regular register window model. The local registers and the input 18327registers (0--5) are still treated as ``call-saved'' registers and will be 18328saved on the stack as needed. 18329 18330With @option{-mno-flat} (the default), the compiler generates save/restore 18331instructions (except for leaf functions). This is the normal operating mode. 18332 18333@item -mfpu 18334@itemx -mhard-float 18335@opindex mfpu 18336@opindex mhard-float 18337Generate output containing floating-point instructions. This is the 18338default. 18339 18340@item -mno-fpu 18341@itemx -msoft-float 18342@opindex mno-fpu 18343@opindex msoft-float 18344Generate output containing library calls for floating point. 18345@strong{Warning:} the requisite libraries are not available for all SPARC 18346targets. Normally the facilities of the machine's usual C compiler are 18347used, but this cannot be done directly in cross-compilation. You must make 18348your own arrangements to provide suitable library functions for 18349cross-compilation. The embedded targets @samp{sparc-*-aout} and 18350@samp{sparclite-*-*} do provide software floating-point support. 18351 18352@option{-msoft-float} changes the calling convention in the output file; 18353therefore, it is only useful if you compile @emph{all} of a program with 18354this option. In particular, you need to compile @file{libgcc.a}, the 18355library that comes with GCC, with @option{-msoft-float} in order for 18356this to work. 18357 18358@item -mhard-quad-float 18359@opindex mhard-quad-float 18360Generate output containing quad-word (long double) floating-point 18361instructions. 18362 18363@item -msoft-quad-float 18364@opindex msoft-quad-float 18365Generate output containing library calls for quad-word (long double) 18366floating-point instructions. The functions called are those specified 18367in the SPARC ABI@. This is the default. 18368 18369As of this writing, there are no SPARC implementations that have hardware 18370support for the quad-word floating-point instructions. They all invoke 18371a trap handler for one of these instructions, and then the trap handler 18372emulates the effect of the instruction. Because of the trap handler overhead, 18373this is much slower than calling the ABI library routines. Thus the 18374@option{-msoft-quad-float} option is the default. 18375 18376@item -mno-unaligned-doubles 18377@itemx -munaligned-doubles 18378@opindex mno-unaligned-doubles 18379@opindex munaligned-doubles 18380Assume that doubles have 8-byte alignment. This is the default. 18381 18382With @option{-munaligned-doubles}, GCC assumes that doubles have 8-byte 18383alignment only if they are contained in another type, or if they have an 18384absolute address. Otherwise, it assumes they have 4-byte alignment. 18385Specifying this option avoids some rare compatibility problems with code 18386generated by other compilers. It is not the default because it results 18387in a performance loss, especially for floating-point code. 18388 18389@item -mno-faster-structs 18390@itemx -mfaster-structs 18391@opindex mno-faster-structs 18392@opindex mfaster-structs 18393With @option{-mfaster-structs}, the compiler assumes that structures 18394should have 8-byte alignment. This enables the use of pairs of 18395@code{ldd} and @code{std} instructions for copies in structure 18396assignment, in place of twice as many @code{ld} and @code{st} pairs. 18397However, the use of this changed alignment directly violates the SPARC 18398ABI@. Thus, it's intended only for use on targets where the developer 18399acknowledges that their resulting code will not be directly in line with 18400the rules of the ABI@. 18401 18402@item -mcpu=@var{cpu_type} 18403@opindex mcpu 18404Set the instruction set, register set, and instruction scheduling parameters 18405for machine type @var{cpu_type}. Supported values for @var{cpu_type} are 18406@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{hypersparc}, 18407@samp{leon}, @samp{sparclite}, @samp{f930}, @samp{f934}, @samp{sparclite86x}, 18408@samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc}, 18409@samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, @samp{niagara3}, 18410and @samp{niagara4}. 18411 18412Native Solaris and GNU/Linux toolchains also support the value @samp{native}, 18413which selects the best architecture option for the host processor. 18414@option{-mcpu=native} has no effect if GCC does not recognize 18415the processor. 18416 18417Default instruction scheduling parameters are used for values that select 18418an architecture and not an implementation. These are @samp{v7}, @samp{v8}, 18419@samp{sparclite}, @samp{sparclet}, @samp{v9}. 18420 18421Here is a list of each supported architecture and their supported 18422implementations. 18423 18424@table @asis 18425@item v7 18426cypress 18427 18428@item v8 18429supersparc, hypersparc, leon 18430 18431@item sparclite 18432f930, f934, sparclite86x 18433 18434@item sparclet 18435tsc701 18436 18437@item v9 18438ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4 18439@end table 18440 18441By default (unless configured otherwise), GCC generates code for the V7 18442variant of the SPARC architecture. With @option{-mcpu=cypress}, the compiler 18443additionally optimizes it for the Cypress CY7C602 chip, as used in the 18444SPARCStation/SPARCServer 3xx series. This is also appropriate for the older 18445SPARCStation 1, 2, IPX etc. 18446 18447With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC 18448architecture. The only difference from V7 code is that the compiler emits 18449the integer multiply and integer divide instructions which exist in SPARC-V8 18450but not in SPARC-V7. With @option{-mcpu=supersparc}, the compiler additionally 18451optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and 184522000 series. 18453 18454With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of 18455the SPARC architecture. This adds the integer multiply, integer divide step 18456and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7. 18457With @option{-mcpu=f930}, the compiler additionally optimizes it for the 18458Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@. With 18459@option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu 18460MB86934 chip, which is the more recent SPARClite with FPU@. 18461 18462With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of 18463the SPARC architecture. This adds the integer multiply, multiply/accumulate, 18464integer divide step and scan (@code{ffs}) instructions which exist in SPARClet 18465but not in SPARC-V7. With @option{-mcpu=tsc701}, the compiler additionally 18466optimizes it for the TEMIC SPARClet chip. 18467 18468With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC 18469architecture. This adds 64-bit integer and floating-point move instructions, 184703 additional floating-point condition code registers and conditional move 18471instructions. With @option{-mcpu=ultrasparc}, the compiler additionally 18472optimizes it for the Sun UltraSPARC I/II/IIi chips. With 18473@option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the 18474Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips. With 18475@option{-mcpu=niagara}, the compiler additionally optimizes it for 18476Sun UltraSPARC T1 chips. With @option{-mcpu=niagara2}, the compiler 18477additionally optimizes it for Sun UltraSPARC T2 chips. With 18478@option{-mcpu=niagara3}, the compiler additionally optimizes it for Sun 18479UltraSPARC T3 chips. With @option{-mcpu=niagara4}, the compiler 18480additionally optimizes it for Sun UltraSPARC T4 chips. 18481 18482@item -mtune=@var{cpu_type} 18483@opindex mtune 18484Set the instruction scheduling parameters for machine type 18485@var{cpu_type}, but do not set the instruction set or register set that the 18486option @option{-mcpu=@var{cpu_type}} would. 18487 18488The same values for @option{-mcpu=@var{cpu_type}} can be used for 18489@option{-mtune=@var{cpu_type}}, but the only useful values are those 18490that select a particular CPU implementation. Those are @samp{cypress}, 18491@samp{supersparc}, @samp{hypersparc}, @samp{leon}, @samp{f930}, @samp{f934}, 18492@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, @samp{ultrasparc3}, 18493@samp{niagara}, @samp{niagara2}, @samp{niagara3} and @samp{niagara4}. With 18494native Solaris and GNU/Linux toolchains, @samp{native} can also be used. 18495 18496@item -mv8plus 18497@itemx -mno-v8plus 18498@opindex mv8plus 18499@opindex mno-v8plus 18500With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@. The 18501difference from the V8 ABI is that the global and out registers are 18502considered 64 bits wide. This is enabled by default on Solaris in 32-bit 18503mode for all SPARC-V9 processors. 18504 18505@item -mvis 18506@itemx -mno-vis 18507@opindex mvis 18508@opindex mno-vis 18509With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC 18510Visual Instruction Set extensions. The default is @option{-mno-vis}. 18511 18512@item -mvis2 18513@itemx -mno-vis2 18514@opindex mvis2 18515@opindex mno-vis2 18516With @option{-mvis2}, GCC generates code that takes advantage of 18517version 2.0 of the UltraSPARC Visual Instruction Set extensions. The 18518default is @option{-mvis2} when targetting a cpu that supports such 18519instructions, such as UltraSPARC-III and later. Setting @option{-mvis2} 18520also sets @option{-mvis}. 18521 18522@item -mvis3 18523@itemx -mno-vis3 18524@opindex mvis3 18525@opindex mno-vis3 18526With @option{-mvis3}, GCC generates code that takes advantage of 18527version 3.0 of the UltraSPARC Visual Instruction Set extensions. The 18528default is @option{-mvis3} when targetting a cpu that supports such 18529instructions, such as niagara-3 and later. Setting @option{-mvis3} 18530also sets @option{-mvis2} and @option{-mvis}. 18531 18532@item -mpopc 18533@itemx -mno-popc 18534@opindex mpopc 18535@opindex mno-popc 18536With @option{-mpopc}, GCC generates code that takes advantage of the UltraSPARC 18537population count instruction. The default is @option{-mpopc} 18538when targetting a cpu that supports such instructions, such as Niagara-2 and 18539later. 18540 18541@item -mfmaf 18542@itemx -mno-fmaf 18543@opindex mfmaf 18544@opindex mno-fmaf 18545With @option{-mfmaf}, GCC generates code that takes advantage of the UltraSPARC 18546Fused Multiply-Add Floating-point extensions. The default is @option{-mfmaf} 18547when targetting a cpu that supports such instructions, such as Niagara-3 and 18548later. 18549 18550@item -mfix-at697f 18551@opindex mfix-at697f 18552Enable the documented workaround for the single erratum of the Atmel AT697F 18553processor (which corresponds to erratum #13 of the AT697E processor). 18554@end table 18555 18556These @samp{-m} options are supported in addition to the above 18557on SPARC-V9 processors in 64-bit environments: 18558 18559@table @gcctabopt 18560@item -m32 18561@itemx -m64 18562@opindex m32 18563@opindex m64 18564Generate code for a 32-bit or 64-bit environment. 18565The 32-bit environment sets int, long and pointer to 32 bits. 18566The 64-bit environment sets int to 32 bits and long and pointer 18567to 64 bits. 18568 18569@item -mcmodel=@var{which} 18570@opindex mcmodel 18571Set the code model to one of 18572 18573@table @samp 18574@item medlow 18575The Medium/Low code model: 64-bit addresses, programs 18576must be linked in the low 32 bits of memory. Programs can be statically 18577or dynamically linked. 18578 18579@item medmid 18580The Medium/Middle code model: 64-bit addresses, programs 18581must be linked in the low 44 bits of memory, the text and data segments must 18582be less than 2GB in size and the data segment must be located within 2GB of 18583the text segment. 18584 18585@item medany 18586The Medium/Anywhere code model: 64-bit addresses, programs 18587may be linked anywhere in memory, the text and data segments must be less 18588than 2GB in size and the data segment must be located within 2GB of the 18589text segment. 18590 18591@item embmedany 18592The Medium/Anywhere code model for embedded systems: 1859364-bit addresses, the text and data segments must be less than 2GB in 18594size, both starting anywhere in memory (determined at link time). The 18595global register %g4 points to the base of the data segment. Programs 18596are statically linked and PIC is not supported. 18597@end table 18598 18599@item -mmemory-model=@var{mem-model} 18600@opindex mmemory-model 18601Set the memory model in force on the processor to one of 18602 18603@table @samp 18604@item default 18605The default memory model for the processor and operating system. 18606 18607@item rmo 18608Relaxed Memory Order 18609 18610@item pso 18611Partial Store Order 18612 18613@item tso 18614Total Store Order 18615 18616@item sc 18617Sequential Consistency 18618@end table 18619 18620These memory models are formally defined in Appendix D of the Sparc V9 18621architecture manual, as set in the processor's @code{PSTATE.MM} field. 18622 18623@item -mstack-bias 18624@itemx -mno-stack-bias 18625@opindex mstack-bias 18626@opindex mno-stack-bias 18627With @option{-mstack-bias}, GCC assumes that the stack pointer, and 18628frame pointer if present, are offset by @minus{}2047 which must be added back 18629when making stack frame references. This is the default in 64-bit mode. 18630Otherwise, assume no such offset is present. 18631@end table 18632 18633@node SPU Options 18634@subsection SPU Options 18635@cindex SPU options 18636 18637These @samp{-m} options are supported on the SPU: 18638 18639@table @gcctabopt 18640@item -mwarn-reloc 18641@itemx -merror-reloc 18642@opindex mwarn-reloc 18643@opindex merror-reloc 18644 18645The loader for SPU does not handle dynamic relocations. By default, GCC 18646will give an error when it generates code that requires a dynamic 18647relocation. @option{-mno-error-reloc} disables the error, 18648@option{-mwarn-reloc} will generate a warning instead. 18649 18650@item -msafe-dma 18651@itemx -munsafe-dma 18652@opindex msafe-dma 18653@opindex munsafe-dma 18654 18655Instructions that initiate or test completion of DMA must not be 18656reordered with respect to loads and stores of the memory that is being 18657accessed. Users typically address this problem using the volatile 18658keyword, but that can lead to inefficient code in places where the 18659memory is known to not change. Rather than mark the memory as volatile 18660we treat the DMA instructions as potentially effecting all memory. With 18661@option{-munsafe-dma} users must use the volatile keyword to protect 18662memory accesses. 18663 18664@item -mbranch-hints 18665@opindex mbranch-hints 18666 18667By default, GCC will generate a branch hint instruction to avoid 18668pipeline stalls for always taken or probably taken branches. A hint 18669will not be generated closer than 8 instructions away from its branch. 18670There is little reason to disable them, except for debugging purposes, 18671or to make an object a little bit smaller. 18672 18673@item -msmall-mem 18674@itemx -mlarge-mem 18675@opindex msmall-mem 18676@opindex mlarge-mem 18677 18678By default, GCC generates code assuming that addresses are never larger 18679than 18 bits. With @option{-mlarge-mem} code is generated that assumes 18680a full 32-bit address. 18681 18682@item -mstdmain 18683@opindex mstdmain 18684 18685By default, GCC links against startup code that assumes the SPU-style 18686main function interface (which has an unconventional parameter list). 18687With @option{-mstdmain}, GCC will link your program against startup 18688code that assumes a C99-style interface to @code{main}, including a 18689local copy of @code{argv} strings. 18690 18691@item -mfixed-range=@var{register-range} 18692@opindex mfixed-range 18693Generate code treating the given register range as fixed registers. 18694A fixed register is one that the register allocator can not use. This is 18695useful when compiling kernel code. A register range is specified as 18696two registers separated by a dash. Multiple register ranges can be 18697specified separated by a comma. 18698 18699@item -mea32 18700@itemx -mea64 18701@opindex mea32 18702@opindex mea64 18703Compile code assuming that pointers to the PPU address space accessed 18704via the @code{__ea} named address space qualifier are either 32 or 64 18705bits wide. The default is 32 bits. As this is an ABI changing option, 18706all object code in an executable must be compiled with the same setting. 18707 18708@item -maddress-space-conversion 18709@itemx -mno-address-space-conversion 18710@opindex maddress-space-conversion 18711@opindex mno-address-space-conversion 18712Allow/disallow treating the @code{__ea} address space as superset 18713of the generic address space. This enables explicit type casts 18714between @code{__ea} and generic pointer as well as implicit 18715conversions of generic pointers to @code{__ea} pointers. The 18716default is to allow address space pointer conversions. 18717 18718@item -mcache-size=@var{cache-size} 18719@opindex mcache-size 18720This option controls the version of libgcc that the compiler links to an 18721executable and selects a software-managed cache for accessing variables 18722in the @code{__ea} address space with a particular cache size. Possible 18723options for @var{cache-size} are @samp{8}, @samp{16}, @samp{32}, @samp{64} 18724and @samp{128}. The default cache size is 64KB. 18725 18726@item -matomic-updates 18727@itemx -mno-atomic-updates 18728@opindex matomic-updates 18729@opindex mno-atomic-updates 18730This option controls the version of libgcc that the compiler links to an 18731executable and selects whether atomic updates to the software-managed 18732cache of PPU-side variables are used. If you use atomic updates, changes 18733to a PPU variable from SPU code using the @code{__ea} named address space 18734qualifier will not interfere with changes to other PPU variables residing 18735in the same cache line from PPU code. If you do not use atomic updates, 18736such interference may occur; however, writing back cache lines will be 18737more efficient. The default behavior is to use atomic updates. 18738 18739@item -mdual-nops 18740@itemx -mdual-nops=@var{n} 18741@opindex mdual-nops 18742By default, GCC will insert nops to increase dual issue when it expects 18743it to increase performance. @var{n} can be a value from 0 to 10. A 18744smaller @var{n} will insert fewer nops. 10 is the default, 0 is the 18745same as @option{-mno-dual-nops}. Disabled with @option{-Os}. 18746 18747@item -mhint-max-nops=@var{n} 18748@opindex mhint-max-nops 18749Maximum number of nops to insert for a branch hint. A branch hint must 18750be at least 8 instructions away from the branch it is effecting. GCC 18751will insert up to @var{n} nops to enforce this, otherwise it will not 18752generate the branch hint. 18753 18754@item -mhint-max-distance=@var{n} 18755@opindex mhint-max-distance 18756The encoding of the branch hint instruction limits the hint to be within 18757256 instructions of the branch it is effecting. By default, GCC makes 18758sure it is within 125. 18759 18760@item -msafe-hints 18761@opindex msafe-hints 18762Work around a hardware bug that causes the SPU to stall indefinitely. 18763By default, GCC will insert the @code{hbrp} instruction to make sure 18764this stall won't happen. 18765 18766@end table 18767 18768@node System V Options 18769@subsection Options for System V 18770 18771These additional options are available on System V Release 4 for 18772compatibility with other compilers on those systems: 18773 18774@table @gcctabopt 18775@item -G 18776@opindex G 18777Create a shared object. 18778It is recommended that @option{-symbolic} or @option{-shared} be used instead. 18779 18780@item -Qy 18781@opindex Qy 18782Identify the versions of each tool used by the compiler, in a 18783@code{.ident} assembler directive in the output. 18784 18785@item -Qn 18786@opindex Qn 18787Refrain from adding @code{.ident} directives to the output file (this is 18788the default). 18789 18790@item -YP,@var{dirs} 18791@opindex YP 18792Search the directories @var{dirs}, and no others, for libraries 18793specified with @option{-l}. 18794 18795@item -Ym,@var{dir} 18796@opindex Ym 18797Look in the directory @var{dir} to find the M4 preprocessor. 18798The assembler uses this option. 18799@c This is supposed to go with a -Yd for predefined M4 macro files, but 18800@c the generic assembler that comes with Solaris takes just -Ym. 18801@end table 18802 18803@node TILE-Gx Options 18804@subsection TILE-Gx Options 18805@cindex TILE-Gx options 18806 18807These @samp{-m} options are supported on the TILE-Gx: 18808 18809@table @gcctabopt 18810@item -mcpu=@var{name} 18811@opindex mcpu 18812Selects the type of CPU to be targeted. Currently the only supported 18813type is @samp{tilegx}. 18814 18815@item -m32 18816@itemx -m64 18817@opindex m32 18818@opindex m64 18819Generate code for a 32-bit or 64-bit environment. The 32-bit 18820environment sets int, long, and pointer to 32 bits. The 64-bit 18821environment sets int to 32 bits and long and pointer to 64 bits. 18822@end table 18823 18824@node TILEPro Options 18825@subsection TILEPro Options 18826@cindex TILEPro options 18827 18828These @samp{-m} options are supported on the TILEPro: 18829 18830@table @gcctabopt 18831@item -mcpu=@var{name} 18832@opindex mcpu 18833Selects the type of CPU to be targeted. Currently the only supported 18834type is @samp{tilepro}. 18835 18836@item -m32 18837@opindex m32 18838Generate code for a 32-bit environment, which sets int, long, and 18839pointer to 32 bits. This is the only supported behavior so the flag 18840is essentially ignored. 18841@end table 18842 18843@node V850 Options 18844@subsection V850 Options 18845@cindex V850 Options 18846 18847These @samp{-m} options are defined for V850 implementations: 18848 18849@table @gcctabopt 18850@item -mlong-calls 18851@itemx -mno-long-calls 18852@opindex mlong-calls 18853@opindex mno-long-calls 18854Treat all calls as being far away (near). If calls are assumed to be 18855far away, the compiler will always load the functions address up into a 18856register, and call indirect through the pointer. 18857 18858@item -mno-ep 18859@itemx -mep 18860@opindex mno-ep 18861@opindex mep 18862Do not optimize (do optimize) basic blocks that use the same index 18863pointer 4 or more times to copy pointer into the @code{ep} register, and 18864use the shorter @code{sld} and @code{sst} instructions. The @option{-mep} 18865option is on by default if you optimize. 18866 18867@item -mno-prolog-function 18868@itemx -mprolog-function 18869@opindex mno-prolog-function 18870@opindex mprolog-function 18871Do not use (do use) external functions to save and restore registers 18872at the prologue and epilogue of a function. The external functions 18873are slower, but use less code space if more than one function saves 18874the same number of registers. The @option{-mprolog-function} option 18875is on by default if you optimize. 18876 18877@item -mspace 18878@opindex mspace 18879Try to make the code as small as possible. At present, this just turns 18880on the @option{-mep} and @option{-mprolog-function} options. 18881 18882@item -mtda=@var{n} 18883@opindex mtda 18884Put static or global variables whose size is @var{n} bytes or less into 18885the tiny data area that register @code{ep} points to. The tiny data 18886area can hold up to 256 bytes in total (128 bytes for byte references). 18887 18888@item -msda=@var{n} 18889@opindex msda 18890Put static or global variables whose size is @var{n} bytes or less into 18891the small data area that register @code{gp} points to. The small data 18892area can hold up to 64 kilobytes. 18893 18894@item -mzda=@var{n} 18895@opindex mzda 18896Put static or global variables whose size is @var{n} bytes or less into 18897the first 32 kilobytes of memory. 18898 18899@item -mv850 18900@opindex mv850 18901Specify that the target processor is the V850. 18902 18903@item -mbig-switch 18904@opindex mbig-switch 18905Generate code suitable for big switch tables. Use this option only if 18906the assembler/linker complain about out of range branches within a switch 18907table. 18908 18909@item -mapp-regs 18910@opindex mapp-regs 18911This option will cause r2 and r5 to be used in the code generated by 18912the compiler. This setting is the default. 18913 18914@item -mno-app-regs 18915@opindex mno-app-regs 18916This option will cause r2 and r5 to be treated as fixed registers. 18917 18918@item -mv850e2v3 18919@opindex mv850e2v3 18920Specify that the target processor is the V850E2V3. The preprocessor 18921constants @samp{__v850e2v3__} will be defined if 18922this option is used. 18923 18924@item -mv850e2 18925@opindex mv850e2 18926Specify that the target processor is the V850E2. The preprocessor 18927constants @samp{__v850e2__} will be defined if this option is used. 18928 18929@item -mv850e1 18930@opindex mv850e1 18931Specify that the target processor is the V850E1. The preprocessor 18932constants @samp{__v850e1__} and @samp{__v850e__} will be defined if 18933this option is used. 18934 18935@item -mv850es 18936@opindex mv850es 18937Specify that the target processor is the V850ES. This is an alias for 18938the @option{-mv850e1} option. 18939 18940@item -mv850e 18941@opindex mv850e 18942Specify that the target processor is the V850E@. The preprocessor 18943constant @samp{__v850e__} will be defined if this option is used. 18944 18945If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1} 18946nor @option{-mv850e2} nor @option{-mv850e2v3} 18947are defined then a default target processor will be chosen and the 18948relevant @samp{__v850*__} preprocessor constant will be defined. 18949 18950The preprocessor constants @samp{__v850} and @samp{__v851__} are always 18951defined, regardless of which processor variant is the target. 18952 18953@item -mdisable-callt 18954@opindex mdisable-callt 18955This option will suppress generation of the CALLT instruction for the 18956v850e, v850e1, v850e2 and v850e2v3 flavors of the v850 architecture. The default is 18957@option{-mno-disable-callt} which allows the CALLT instruction to be used. 18958 18959@end table 18960 18961@node VAX Options 18962@subsection VAX Options 18963@cindex VAX options 18964 18965These @samp{-m} options are defined for the VAX: 18966 18967@table @gcctabopt 18968@item -munix 18969@opindex munix 18970Do not output certain jump instructions (@code{aobleq} and so on) 18971that the Unix assembler for the VAX cannot handle across long 18972ranges. 18973 18974@item -mgnu 18975@opindex mgnu 18976Do output those jump instructions, on the assumption that you 18977will assemble with the GNU assembler. 18978 18979@item -mg 18980@opindex mg 18981Output code for G-format floating-point numbers instead of D-format. 18982@end table 18983 18984@node VxWorks Options 18985@subsection VxWorks Options 18986@cindex VxWorks Options 18987 18988The options in this section are defined for all VxWorks targets. 18989Options specific to the target hardware are listed with the other 18990options for that target. 18991 18992@table @gcctabopt 18993@item -mrtp 18994@opindex mrtp 18995GCC can generate code for both VxWorks kernels and real time processes 18996(RTPs). This option switches from the former to the latter. It also 18997defines the preprocessor macro @code{__RTP__}. 18998 18999@item -non-static 19000@opindex non-static 19001Link an RTP executable against shared libraries rather than static 19002libraries. The options @option{-static} and @option{-shared} can 19003also be used for RTPs (@pxref{Link Options}); @option{-static} 19004is the default. 19005 19006@item -Bstatic 19007@itemx -Bdynamic 19008@opindex Bstatic 19009@opindex Bdynamic 19010These options are passed down to the linker. They are defined for 19011compatibility with Diab. 19012 19013@item -Xbind-lazy 19014@opindex Xbind-lazy 19015Enable lazy binding of function calls. This option is equivalent to 19016@option{-Wl,-z,now} and is defined for compatibility with Diab. 19017 19018@item -Xbind-now 19019@opindex Xbind-now 19020Disable lazy binding of function calls. This option is the default and 19021is defined for compatibility with Diab. 19022@end table 19023 19024@node x86-64 Options 19025@subsection x86-64 Options 19026@cindex x86-64 options 19027 19028These are listed under @xref{i386 and x86-64 Options}. 19029 19030@node Xstormy16 Options 19031@subsection Xstormy16 Options 19032@cindex Xstormy16 Options 19033 19034These options are defined for Xstormy16: 19035 19036@table @gcctabopt 19037@item -msim 19038@opindex msim 19039Choose startup files and linker script suitable for the simulator. 19040@end table 19041 19042@node Xtensa Options 19043@subsection Xtensa Options 19044@cindex Xtensa Options 19045 19046These options are supported for Xtensa targets: 19047 19048@table @gcctabopt 19049@item -mconst16 19050@itemx -mno-const16 19051@opindex mconst16 19052@opindex mno-const16 19053Enable or disable use of @code{CONST16} instructions for loading 19054constant values. The @code{CONST16} instruction is currently not a 19055standard option from Tensilica. When enabled, @code{CONST16} 19056instructions are always used in place of the standard @code{L32R} 19057instructions. The use of @code{CONST16} is enabled by default only if 19058the @code{L32R} instruction is not available. 19059 19060@item -mfused-madd 19061@itemx -mno-fused-madd 19062@opindex mfused-madd 19063@opindex mno-fused-madd 19064Enable or disable use of fused multiply/add and multiply/subtract 19065instructions in the floating-point option. This has no effect if the 19066floating-point option is not also enabled. Disabling fused multiply/add 19067and multiply/subtract instructions forces the compiler to use separate 19068instructions for the multiply and add/subtract operations. This may be 19069desirable in some cases where strict IEEE 754-compliant results are 19070required: the fused multiply add/subtract instructions do not round the 19071intermediate result, thereby producing results with @emph{more} bits of 19072precision than specified by the IEEE standard. Disabling fused multiply 19073add/subtract instructions also ensures that the program output is not 19074sensitive to the compiler's ability to combine multiply and add/subtract 19075operations. 19076 19077@item -mserialize-volatile 19078@itemx -mno-serialize-volatile 19079@opindex mserialize-volatile 19080@opindex mno-serialize-volatile 19081When this option is enabled, GCC inserts @code{MEMW} instructions before 19082@code{volatile} memory references to guarantee sequential consistency. 19083The default is @option{-mserialize-volatile}. Use 19084@option{-mno-serialize-volatile} to omit the @code{MEMW} instructions. 19085 19086@item -mforce-no-pic 19087@opindex mforce-no-pic 19088For targets, like GNU/Linux, where all user-mode Xtensa code must be 19089position-independent code (PIC), this option disables PIC for compiling 19090kernel code. 19091 19092@item -mtext-section-literals 19093@itemx -mno-text-section-literals 19094@opindex mtext-section-literals 19095@opindex mno-text-section-literals 19096Control the treatment of literal pools. The default is 19097@option{-mno-text-section-literals}, which places literals in a separate 19098section in the output file. This allows the literal pool to be placed 19099in a data RAM/ROM, and it also allows the linker to combine literal 19100pools from separate object files to remove redundant literals and 19101improve code size. With @option{-mtext-section-literals}, the literals 19102are interspersed in the text section in order to keep them as close as 19103possible to their references. This may be necessary for large assembly 19104files. 19105 19106@item -mtarget-align 19107@itemx -mno-target-align 19108@opindex mtarget-align 19109@opindex mno-target-align 19110When this option is enabled, GCC instructs the assembler to 19111automatically align instructions to reduce branch penalties at the 19112expense of some code density. The assembler attempts to widen density 19113instructions to align branch targets and the instructions following call 19114instructions. If there are not enough preceding safe density 19115instructions to align a target, no widening will be performed. The 19116default is @option{-mtarget-align}. These options do not affect the 19117treatment of auto-aligned instructions like @code{LOOP}, which the 19118assembler will always align, either by widening density instructions or 19119by inserting no-op instructions. 19120 19121@item -mlongcalls 19122@itemx -mno-longcalls 19123@opindex mlongcalls 19124@opindex mno-longcalls 19125When this option is enabled, GCC instructs the assembler to translate 19126direct calls to indirect calls unless it can determine that the target 19127of a direct call is in the range allowed by the call instruction. This 19128translation typically occurs for calls to functions in other source 19129files. Specifically, the assembler translates a direct @code{CALL} 19130instruction into an @code{L32R} followed by a @code{CALLX} instruction. 19131The default is @option{-mno-longcalls}. This option should be used in 19132programs where the call target can potentially be out of range. This 19133option is implemented in the assembler, not the compiler, so the 19134assembly code generated by GCC will still show direct call 19135instructions---look at the disassembled object code to see the actual 19136instructions. Note that the assembler will use an indirect call for 19137every cross-file call, not just those that really will be out of range. 19138@end table 19139 19140@node zSeries Options 19141@subsection zSeries Options 19142@cindex zSeries options 19143 19144These are listed under @xref{S/390 and zSeries Options}. 19145 19146@node Code Gen Options 19147@section Options for Code Generation Conventions 19148@cindex code generation conventions 19149@cindex options, code generation 19150@cindex run-time options 19151 19152These machine-independent options control the interface conventions 19153used in code generation. 19154 19155Most of them have both positive and negative forms; the negative form 19156of @option{-ffoo} would be @option{-fno-foo}. In the table below, only 19157one of the forms is listed---the one that is not the default. You 19158can figure out the other form by either removing @samp{no-} or adding 19159it. 19160 19161@table @gcctabopt 19162@item -fbounds-check 19163@opindex fbounds-check 19164For front ends that support it, generate additional code to check that 19165indices used to access arrays are within the declared range. This is 19166currently only supported by the Java and Fortran front ends, where 19167this option defaults to true and false respectively. 19168 19169@item -ftrapv 19170@opindex ftrapv 19171This option generates traps for signed overflow on addition, subtraction, 19172multiplication operations. 19173 19174@item -fwrapv 19175@opindex fwrapv 19176This option instructs the compiler to assume that signed arithmetic 19177overflow of addition, subtraction and multiplication wraps around 19178using twos-complement representation. This flag enables some optimizations 19179and disables others. This option is enabled by default for the Java 19180front end, as required by the Java language specification. 19181 19182@item -fexceptions 19183@opindex fexceptions 19184Enable exception handling. Generates extra code needed to propagate 19185exceptions. For some targets, this implies GCC will generate frame 19186unwind information for all functions, which can produce significant data 19187size overhead, although it does not affect execution. If you do not 19188specify this option, GCC will enable it by default for languages like 19189C++ that normally require exception handling, and disable it for 19190languages like C that do not normally require it. However, you may need 19191to enable this option when compiling C code that needs to interoperate 19192properly with exception handlers written in C++. You may also wish to 19193disable this option if you are compiling older C++ programs that don't 19194use exception handling. 19195 19196@item -fnon-call-exceptions 19197@opindex fnon-call-exceptions 19198Generate code that allows trapping instructions to throw exceptions. 19199Note that this requires platform-specific runtime support that does 19200not exist everywhere. Moreover, it only allows @emph{trapping} 19201instructions to throw exceptions, i.e.@: memory references or floating-point 19202instructions. It does not allow exceptions to be thrown from 19203arbitrary signal handlers such as @code{SIGALRM}. 19204 19205@item -funwind-tables 19206@opindex funwind-tables 19207Similar to @option{-fexceptions}, except that it will just generate any needed 19208static data, but will not affect the generated code in any other way. 19209You will normally not enable this option; instead, a language processor 19210that needs this handling would enable it on your behalf. 19211 19212@item -fasynchronous-unwind-tables 19213@opindex fasynchronous-unwind-tables 19214Generate unwind table in dwarf2 format, if supported by target machine. The 19215table is exact at each instruction boundary, so it can be used for stack 19216unwinding from asynchronous events (such as debugger or garbage collector). 19217 19218@item -fpcc-struct-return 19219@opindex fpcc-struct-return 19220Return ``short'' @code{struct} and @code{union} values in memory like 19221longer ones, rather than in registers. This convention is less 19222efficient, but it has the advantage of allowing intercallability between 19223GCC-compiled files and files compiled with other compilers, particularly 19224the Portable C Compiler (pcc). 19225 19226The precise convention for returning structures in memory depends 19227on the target configuration macros. 19228 19229Short structures and unions are those whose size and alignment match 19230that of some integer type. 19231 19232@strong{Warning:} code compiled with the @option{-fpcc-struct-return} 19233switch is not binary compatible with code compiled with the 19234@option{-freg-struct-return} switch. 19235Use it to conform to a non-default application binary interface. 19236 19237@item -freg-struct-return 19238@opindex freg-struct-return 19239Return @code{struct} and @code{union} values in registers when possible. 19240This is more efficient for small structures than 19241@option{-fpcc-struct-return}. 19242 19243If you specify neither @option{-fpcc-struct-return} nor 19244@option{-freg-struct-return}, GCC defaults to whichever convention is 19245standard for the target. If there is no standard convention, GCC 19246defaults to @option{-fpcc-struct-return}, except on targets where GCC is 19247the principal compiler. In those cases, we can choose the standard, and 19248we chose the more efficient register return alternative. 19249 19250@strong{Warning:} code compiled with the @option{-freg-struct-return} 19251switch is not binary compatible with code compiled with the 19252@option{-fpcc-struct-return} switch. 19253Use it to conform to a non-default application binary interface. 19254 19255@item -fshort-enums 19256@opindex fshort-enums 19257Allocate to an @code{enum} type only as many bytes as it needs for the 19258declared range of possible values. Specifically, the @code{enum} type 19259will be equivalent to the smallest integer type that has enough room. 19260 19261@strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate 19262code that is not binary compatible with code generated without that switch. 19263Use it to conform to a non-default application binary interface. 19264 19265@item -fshort-double 19266@opindex fshort-double 19267Use the same size for @code{double} as for @code{float}. 19268 19269@strong{Warning:} the @option{-fshort-double} switch causes GCC to generate 19270code that is not binary compatible with code generated without that switch. 19271Use it to conform to a non-default application binary interface. 19272 19273@item -fshort-wchar 19274@opindex fshort-wchar 19275Override the underlying type for @samp{wchar_t} to be @samp{short 19276unsigned int} instead of the default for the target. This option is 19277useful for building programs to run under WINE@. 19278 19279@strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate 19280code that is not binary compatible with code generated without that switch. 19281Use it to conform to a non-default application binary interface. 19282 19283@item -fno-common 19284@opindex fno-common 19285In C code, controls the placement of uninitialized global variables. 19286Unix C compilers have traditionally permitted multiple definitions of 19287such variables in different compilation units by placing the variables 19288in a common block. 19289This is the behavior specified by @option{-fcommon}, and is the default 19290for GCC on most targets. 19291On the other hand, this behavior is not required by ISO C, and on some 19292targets may carry a speed or code size penalty on variable references. 19293The @option{-fno-common} option specifies that the compiler should place 19294uninitialized global variables in the data section of the object file, 19295rather than generating them as common blocks. 19296This has the effect that if the same variable is declared 19297(without @code{extern}) in two different compilations, 19298you will get a multiple-definition error when you link them. 19299In this case, you must compile with @option{-fcommon} instead. 19300Compiling with @option{-fno-common} is useful on targets for which 19301it provides better performance, or if you wish to verify that the 19302program will work on other systems that always treat uninitialized 19303variable declarations this way. 19304 19305@item -fno-ident 19306@opindex fno-ident 19307Ignore the @samp{#ident} directive. 19308 19309@item -finhibit-size-directive 19310@opindex finhibit-size-directive 19311Don't output a @code{.size} assembler directive, or anything else that 19312would cause trouble if the function is split in the middle, and the 19313two halves are placed at locations far apart in memory. This option is 19314used when compiling @file{crtstuff.c}; you should not need to use it 19315for anything else. 19316 19317@item -fverbose-asm 19318@opindex fverbose-asm 19319Put extra commentary information in the generated assembly code to 19320make it more readable. This option is generally only of use to those 19321who actually need to read the generated assembly code (perhaps while 19322debugging the compiler itself). 19323 19324@option{-fno-verbose-asm}, the default, causes the 19325extra information to be omitted and is useful when comparing two assembler 19326files. 19327 19328@item -frecord-gcc-switches 19329@opindex frecord-gcc-switches 19330This switch causes the command line that was used to invoke the 19331compiler to be recorded into the object file that is being created. 19332This switch is only implemented on some targets and the exact format 19333of the recording is target and binary file format dependent, but it 19334usually takes the form of a section containing ASCII text. This 19335switch is related to the @option{-fverbose-asm} switch, but that 19336switch only records information in the assembler output file as 19337comments, so it never reaches the object file. 19338See also @option{-grecord-gcc-switches} for another 19339way of storing compiler options into the object file. 19340 19341@item -fpic 19342@opindex fpic 19343@cindex global offset table 19344@cindex PIC 19345Generate position-independent code (PIC) suitable for use in a shared 19346library, if supported for the target machine. Such code accesses all 19347constant addresses through a global offset table (GOT)@. The dynamic 19348loader resolves the GOT entries when the program starts (the dynamic 19349loader is not part of GCC; it is part of the operating system). If 19350the GOT size for the linked executable exceeds a machine-specific 19351maximum size, you get an error message from the linker indicating that 19352@option{-fpic} does not work; in that case, recompile with @option{-fPIC} 19353instead. (These maximums are 8k on the SPARC and 32k 19354on the m68k and RS/6000. The 386 has no such limit.) 19355 19356Position-independent code requires special support, and therefore works 19357only on certain machines. For the 386, GCC supports PIC for System V 19358but not for the Sun 386i. Code generated for the IBM RS/6000 is always 19359position-independent. 19360 19361When this flag is set, the macros @code{__pic__} and @code{__PIC__} 19362are defined to 1. 19363 19364@item -fPIC 19365@opindex fPIC 19366If supported for the target machine, emit position-independent code, 19367suitable for dynamic linking and avoiding any limit on the size of the 19368global offset table. This option makes a difference on the m68k, 19369PowerPC and SPARC@. 19370 19371Position-independent code requires special support, and therefore works 19372only on certain machines. 19373 19374When this flag is set, the macros @code{__pic__} and @code{__PIC__} 19375are defined to 2. 19376 19377@item -fpie 19378@itemx -fPIE 19379@opindex fpie 19380@opindex fPIE 19381These options are similar to @option{-fpic} and @option{-fPIC}, but 19382generated position independent code can be only linked into executables. 19383Usually these options are used when @option{-pie} GCC option will be 19384used during linking. 19385 19386@option{-fpie} and @option{-fPIE} both define the macros 19387@code{__pie__} and @code{__PIE__}. The macros have the value 1 19388for @option{-fpie} and 2 for @option{-fPIE}. 19389 19390@item -fno-jump-tables 19391@opindex fno-jump-tables 19392Do not use jump tables for switch statements even where it would be 19393more efficient than other code generation strategies. This option is 19394of use in conjunction with @option{-fpic} or @option{-fPIC} for 19395building code that forms part of a dynamic linker and cannot 19396reference the address of a jump table. On some targets, jump tables 19397do not require a GOT and this option is not needed. 19398 19399@item -ffixed-@var{reg} 19400@opindex ffixed 19401Treat the register named @var{reg} as a fixed register; generated code 19402should never refer to it (except perhaps as a stack pointer, frame 19403pointer or in some other fixed role). 19404 19405@var{reg} must be the name of a register. The register names accepted 19406are machine-specific and are defined in the @code{REGISTER_NAMES} 19407macro in the machine description macro file. 19408 19409This flag does not have a negative form, because it specifies a 19410three-way choice. 19411 19412@item -fcall-used-@var{reg} 19413@opindex fcall-used 19414Treat the register named @var{reg} as an allocable register that is 19415clobbered by function calls. It may be allocated for temporaries or 19416variables that do not live across a call. Functions compiled this way 19417will not save and restore the register @var{reg}. 19418 19419It is an error to used this flag with the frame pointer or stack pointer. 19420Use of this flag for other registers that have fixed pervasive roles in 19421the machine's execution model will produce disastrous results. 19422 19423This flag does not have a negative form, because it specifies a 19424three-way choice. 19425 19426@item -fcall-saved-@var{reg} 19427@opindex fcall-saved 19428Treat the register named @var{reg} as an allocable register saved by 19429functions. It may be allocated even for temporaries or variables that 19430live across a call. Functions compiled this way will save and restore 19431the register @var{reg} if they use it. 19432 19433It is an error to used this flag with the frame pointer or stack pointer. 19434Use of this flag for other registers that have fixed pervasive roles in 19435the machine's execution model will produce disastrous results. 19436 19437A different sort of disaster will result from the use of this flag for 19438a register in which function values may be returned. 19439 19440This flag does not have a negative form, because it specifies a 19441three-way choice. 19442 19443@item -fpack-struct[=@var{n}] 19444@opindex fpack-struct 19445Without a value specified, pack all structure members together without 19446holes. When a value is specified (which must be a small power of two), pack 19447structure members according to this value, representing the maximum 19448alignment (that is, objects with default alignment requirements larger than 19449this will be output potentially unaligned at the next fitting location. 19450 19451@strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate 19452code that is not binary compatible with code generated without that switch. 19453Additionally, it makes the code suboptimal. 19454Use it to conform to a non-default application binary interface. 19455 19456@item -finstrument-functions 19457@opindex finstrument-functions 19458Generate instrumentation calls for entry and exit to functions. Just 19459after function entry and just before function exit, the following 19460profiling functions will be called with the address of the current 19461function and its call site. (On some platforms, 19462@code{__builtin_return_address} does not work beyond the current 19463function, so the call site information may not be available to the 19464profiling functions otherwise.) 19465 19466@smallexample 19467void __cyg_profile_func_enter (void *this_fn, 19468 void *call_site); 19469void __cyg_profile_func_exit (void *this_fn, 19470 void *call_site); 19471@end smallexample 19472 19473The first argument is the address of the start of the current function, 19474which may be looked up exactly in the symbol table. 19475 19476This instrumentation is also done for functions expanded inline in other 19477functions. The profiling calls will indicate where, conceptually, the 19478inline function is entered and exited. This means that addressable 19479versions of such functions must be available. If all your uses of a 19480function are expanded inline, this may mean an additional expansion of 19481code size. If you use @samp{extern inline} in your C code, an 19482addressable version of such functions must be provided. (This is 19483normally the case anyways, but if you get lucky and the optimizer always 19484expands the functions inline, you might have gotten away without 19485providing static copies.) 19486 19487A function may be given the attribute @code{no_instrument_function}, in 19488which case this instrumentation will not be done. This can be used, for 19489example, for the profiling functions listed above, high-priority 19490interrupt routines, and any functions from which the profiling functions 19491cannot safely be called (perhaps signal handlers, if the profiling 19492routines generate output or allocate memory). 19493 19494@item -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} 19495@opindex finstrument-functions-exclude-file-list 19496 19497Set the list of functions that are excluded from instrumentation (see 19498the description of @code{-finstrument-functions}). If the file that 19499contains a function definition matches with one of @var{file}, then 19500that function is not instrumented. The match is done on substrings: 19501if the @var{file} parameter is a substring of the file name, it is 19502considered to be a match. 19503 19504For example: 19505 19506@smallexample 19507-finstrument-functions-exclude-file-list=/bits/stl,include/sys 19508@end smallexample 19509 19510@noindent 19511will exclude any inline function defined in files whose pathnames 19512contain @code{/bits/stl} or @code{include/sys}. 19513 19514If, for some reason, you want to include letter @code{','} in one of 19515@var{sym}, write @code{'\,'}. For example, 19516@code{-finstrument-functions-exclude-file-list='\,\,tmp'} 19517(note the single quote surrounding the option). 19518 19519@item -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} 19520@opindex finstrument-functions-exclude-function-list 19521 19522This is similar to @code{-finstrument-functions-exclude-file-list}, 19523but this option sets the list of function names to be excluded from 19524instrumentation. The function name to be matched is its user-visible 19525name, such as @code{vector<int> blah(const vector<int> &)}, not the 19526internal mangled name (e.g., @code{_Z4blahRSt6vectorIiSaIiEE}). The 19527match is done on substrings: if the @var{sym} parameter is a substring 19528of the function name, it is considered to be a match. For C99 and C++ 19529extended identifiers, the function name must be given in UTF-8, not 19530using universal character names. 19531 19532@item -fstack-check 19533@opindex fstack-check 19534Generate code to verify that you do not go beyond the boundary of the 19535stack. You should specify this flag if you are running in an 19536environment with multiple threads, but only rarely need to specify it in 19537a single-threaded environment since stack overflow is automatically 19538detected on nearly all systems if there is only one stack. 19539 19540Note that this switch does not actually cause checking to be done; the 19541operating system or the language runtime must do that. The switch causes 19542generation of code to ensure that they see the stack being extended. 19543 19544You can additionally specify a string parameter: @code{no} means no 19545checking, @code{generic} means force the use of old-style checking, 19546@code{specific} means use the best checking method and is equivalent 19547to bare @option{-fstack-check}. 19548 19549Old-style checking is a generic mechanism that requires no specific 19550target support in the compiler but comes with the following drawbacks: 19551 19552@enumerate 19553@item 19554Modified allocation strategy for large objects: they will always be 19555allocated dynamically if their size exceeds a fixed threshold. 19556 19557@item 19558Fixed limit on the size of the static frame of functions: when it is 19559topped by a particular function, stack checking is not reliable and 19560a warning is issued by the compiler. 19561 19562@item 19563Inefficiency: because of both the modified allocation strategy and the 19564generic implementation, the performances of the code are hampered. 19565@end enumerate 19566 19567Note that old-style stack checking is also the fallback method for 19568@code{specific} if no target support has been added in the compiler. 19569 19570@item -fstack-limit-register=@var{reg} 19571@itemx -fstack-limit-symbol=@var{sym} 19572@itemx -fno-stack-limit 19573@opindex fstack-limit-register 19574@opindex fstack-limit-symbol 19575@opindex fno-stack-limit 19576Generate code to ensure that the stack does not grow beyond a certain value, 19577either the value of a register or the address of a symbol. If the stack 19578would grow beyond the value, a signal is raised. For most targets, 19579the signal is raised before the stack overruns the boundary, so 19580it is possible to catch the signal without taking special precautions. 19581 19582For instance, if the stack starts at absolute address @samp{0x80000000} 19583and grows downwards, you can use the flags 19584@option{-fstack-limit-symbol=__stack_limit} and 19585@option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit 19586of 128KB@. Note that this may only work with the GNU linker. 19587 19588@item -fsplit-stack 19589@opindex fsplit-stack 19590Generate code to automatically split the stack before it overflows. 19591The resulting program has a discontiguous stack which can only 19592overflow if the program is unable to allocate any more memory. This 19593is most useful when running threaded programs, as it is no longer 19594necessary to calculate a good stack size to use for each thread. This 19595is currently only implemented for the i386 and x86_64 back ends running 19596GNU/Linux. 19597 19598When code compiled with @option{-fsplit-stack} calls code compiled 19599without @option{-fsplit-stack}, there may not be much stack space 19600available for the latter code to run. If compiling all code, 19601including library code, with @option{-fsplit-stack} is not an option, 19602then the linker can fix up these calls so that the code compiled 19603without @option{-fsplit-stack} always has a large stack. Support for 19604this is implemented in the gold linker in GNU binutils release 2.21 19605and later. 19606 19607@item -fleading-underscore 19608@opindex fleading-underscore 19609This option and its counterpart, @option{-fno-leading-underscore}, forcibly 19610change the way C symbols are represented in the object file. One use 19611is to help link with legacy assembly code. 19612 19613@strong{Warning:} the @option{-fleading-underscore} switch causes GCC to 19614generate code that is not binary compatible with code generated without that 19615switch. Use it to conform to a non-default application binary interface. 19616Not all targets provide complete support for this switch. 19617 19618@item -ftls-model=@var{model} 19619@opindex ftls-model 19620Alter the thread-local storage model to be used (@pxref{Thread-Local}). 19621The @var{model} argument should be one of @code{global-dynamic}, 19622@code{local-dynamic}, @code{initial-exec} or @code{local-exec}. 19623 19624The default without @option{-fpic} is @code{initial-exec}; with 19625@option{-fpic} the default is @code{global-dynamic}. 19626 19627@item -fvisibility=@var{default|internal|hidden|protected} 19628@opindex fvisibility 19629Set the default ELF image symbol visibility to the specified option---all 19630symbols will be marked with this unless overridden within the code. 19631Using this feature can very substantially improve linking and 19632load times of shared object libraries, produce more optimized 19633code, provide near-perfect API export and prevent symbol clashes. 19634It is @strong{strongly} recommended that you use this in any shared objects 19635you distribute. 19636 19637Despite the nomenclature, @code{default} always means public; i.e., 19638available to be linked against from outside the shared object. 19639@code{protected} and @code{internal} are pretty useless in real-world 19640usage so the only other commonly used option will be @code{hidden}. 19641The default if @option{-fvisibility} isn't specified is 19642@code{default}, i.e., make every 19643symbol public---this causes the same behavior as previous versions of 19644GCC@. 19645 19646A good explanation of the benefits offered by ensuring ELF 19647symbols have the correct visibility is given by ``How To Write 19648Shared Libraries'' by Ulrich Drepper (which can be found at 19649@w{@uref{http://people.redhat.com/~drepper/}})---however a superior 19650solution made possible by this option to marking things hidden when 19651the default is public is to make the default hidden and mark things 19652public. This is the norm with DLL's on Windows and with @option{-fvisibility=hidden} 19653and @code{__attribute__ ((visibility("default")))} instead of 19654@code{__declspec(dllexport)} you get almost identical semantics with 19655identical syntax. This is a great boon to those working with 19656cross-platform projects. 19657 19658For those adding visibility support to existing code, you may find 19659@samp{#pragma GCC visibility} of use. This works by you enclosing 19660the declarations you wish to set visibility for with (for example) 19661@samp{#pragma GCC visibility push(hidden)} and 19662@samp{#pragma GCC visibility pop}. 19663Bear in mind that symbol visibility should be viewed @strong{as 19664part of the API interface contract} and thus all new code should 19665always specify visibility when it is not the default; i.e., declarations 19666only for use within the local DSO should @strong{always} be marked explicitly 19667as hidden as so to avoid PLT indirection overheads---making this 19668abundantly clear also aids readability and self-documentation of the code. 19669Note that due to ISO C++ specification requirements, operator new and 19670operator delete must always be of default visibility. 19671 19672Be aware that headers from outside your project, in particular system 19673headers and headers from any other library you use, may not be 19674expecting to be compiled with visibility other than the default. You 19675may need to explicitly say @samp{#pragma GCC visibility push(default)} 19676before including any such headers. 19677 19678@samp{extern} declarations are not affected by @samp{-fvisibility}, so 19679a lot of code can be recompiled with @samp{-fvisibility=hidden} with 19680no modifications. However, this means that calls to @samp{extern} 19681functions with no explicit visibility will use the PLT, so it is more 19682effective to use @samp{__attribute ((visibility))} and/or 19683@samp{#pragma GCC visibility} to tell the compiler which @samp{extern} 19684declarations should be treated as hidden. 19685 19686Note that @samp{-fvisibility} does affect C++ vague linkage 19687entities. This means that, for instance, an exception class that will 19688be thrown between DSOs must be explicitly marked with default 19689visibility so that the @samp{type_info} nodes will be unified between 19690the DSOs. 19691 19692An overview of these techniques, their benefits and how to use them 19693is at @uref{http://gcc.gnu.org/@/wiki/@/Visibility}. 19694 19695@item -fstrict-volatile-bitfields 19696@opindex fstrict-volatile-bitfields 19697This option should be used if accesses to volatile bit-fields (or other 19698structure fields, although the compiler usually honors those types 19699anyway) should use a single access of the width of the 19700field's type, aligned to a natural alignment if possible. For 19701example, targets with memory-mapped peripheral registers might require 19702all such accesses to be 16 bits wide; with this flag the user could 19703declare all peripheral bit-fields as ``unsigned short'' (assuming short 19704is 16 bits on these targets) to force GCC to use 16-bit accesses 19705instead of, perhaps, a more efficient 32-bit access. 19706 19707If this option is disabled, the compiler will use the most efficient 19708instruction. In the previous example, that might be a 32-bit load 19709instruction, even though that will access bytes that do not contain 19710any portion of the bit-field, or memory-mapped registers unrelated to 19711the one being updated. 19712 19713If the target requires strict alignment, and honoring the field 19714type would require violating this alignment, a warning is issued. 19715If the field has @code{packed} attribute, the access is done without 19716honoring the field type. If the field doesn't have @code{packed} 19717attribute, the access is done honoring the field type. In both cases, 19718GCC assumes that the user knows something about the target hardware 19719that it is unaware of. 19720 19721The default value of this option is determined by the application binary 19722interface for the target processor. 19723 19724@end table 19725 19726@c man end 19727 19728@node Environment Variables 19729@section Environment Variables Affecting GCC 19730@cindex environment variables 19731 19732@c man begin ENVIRONMENT 19733This section describes several environment variables that affect how GCC 19734operates. Some of them work by specifying directories or prefixes to use 19735when searching for various kinds of files. Some are used to specify other 19736aspects of the compilation environment. 19737 19738Note that you can also specify places to search using options such as 19739@option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}). These 19740take precedence over places specified using environment variables, which 19741in turn take precedence over those specified by the configuration of GCC@. 19742@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint, 19743GNU Compiler Collection (GCC) Internals}. 19744 19745@table @env 19746@item LANG 19747@itemx LC_CTYPE 19748@c @itemx LC_COLLATE 19749@itemx LC_MESSAGES 19750@c @itemx LC_MONETARY 19751@c @itemx LC_NUMERIC 19752@c @itemx LC_TIME 19753@itemx LC_ALL 19754@findex LANG 19755@findex LC_CTYPE 19756@c @findex LC_COLLATE 19757@findex LC_MESSAGES 19758@c @findex LC_MONETARY 19759@c @findex LC_NUMERIC 19760@c @findex LC_TIME 19761@findex LC_ALL 19762@cindex locale 19763These environment variables control the way that GCC uses 19764localization information which allows GCC to work with different 19765national conventions. GCC inspects the locale categories 19766@env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do 19767so. These locale categories can be set to any value supported by your 19768installation. A typical value is @samp{en_GB.UTF-8} for English in the United 19769Kingdom encoded in UTF-8. 19770 19771The @env{LC_CTYPE} environment variable specifies character 19772classification. GCC uses it to determine the character boundaries in 19773a string; this is needed for some multibyte encodings that contain quote 19774and escape characters that would otherwise be interpreted as a string 19775end or escape. 19776 19777The @env{LC_MESSAGES} environment variable specifies the language to 19778use in diagnostic messages. 19779 19780If the @env{LC_ALL} environment variable is set, it overrides the value 19781of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE} 19782and @env{LC_MESSAGES} default to the value of the @env{LANG} 19783environment variable. If none of these variables are set, GCC 19784defaults to traditional C English behavior. 19785 19786@item TMPDIR 19787@findex TMPDIR 19788If @env{TMPDIR} is set, it specifies the directory to use for temporary 19789files. GCC uses temporary files to hold the output of one stage of 19790compilation which is to be used as input to the next stage: for example, 19791the output of the preprocessor, which is the input to the compiler 19792proper. 19793 19794@item GCC_COMPARE_DEBUG 19795@findex GCC_COMPARE_DEBUG 19796Setting @env{GCC_COMPARE_DEBUG} is nearly equivalent to passing 19797@option{-fcompare-debug} to the compiler driver. See the documentation 19798of this option for more details. 19799 19800@item GCC_EXEC_PREFIX 19801@findex GCC_EXEC_PREFIX 19802If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the 19803names of the subprograms executed by the compiler. No slash is added 19804when this prefix is combined with the name of a subprogram, but you can 19805specify a prefix that ends with a slash if you wish. 19806 19807If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out 19808an appropriate prefix to use based on the pathname it was invoked with. 19809 19810If GCC cannot find the subprogram using the specified prefix, it 19811tries looking in the usual places for the subprogram. 19812 19813The default value of @env{GCC_EXEC_PREFIX} is 19814@file{@var{prefix}/lib/gcc/} where @var{prefix} is the prefix to 19815the installed compiler. In many cases @var{prefix} is the value 19816of @code{prefix} when you ran the @file{configure} script. 19817 19818Other prefixes specified with @option{-B} take precedence over this prefix. 19819 19820This prefix is also used for finding files such as @file{crt0.o} that are 19821used for linking. 19822 19823In addition, the prefix is used in an unusual way in finding the 19824directories to search for header files. For each of the standard 19825directories whose name normally begins with @samp{/usr/local/lib/gcc} 19826(more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries 19827replacing that beginning with the specified prefix to produce an 19828alternate directory name. Thus, with @option{-Bfoo/}, GCC will search 19829@file{foo/bar} where it would normally search @file{/usr/local/lib/bar}. 19830These alternate directories are searched first; the standard directories 19831come next. If a standard directory begins with the configured 19832@var{prefix} then the value of @var{prefix} is replaced by 19833@env{GCC_EXEC_PREFIX} when looking for header files. 19834 19835@item COMPILER_PATH 19836@findex COMPILER_PATH 19837The value of @env{COMPILER_PATH} is a colon-separated list of 19838directories, much like @env{PATH}. GCC tries the directories thus 19839specified when searching for subprograms, if it can't find the 19840subprograms using @env{GCC_EXEC_PREFIX}. 19841 19842@item LIBRARY_PATH 19843@findex LIBRARY_PATH 19844The value of @env{LIBRARY_PATH} is a colon-separated list of 19845directories, much like @env{PATH}. When configured as a native compiler, 19846GCC tries the directories thus specified when searching for special 19847linker files, if it can't find them using @env{GCC_EXEC_PREFIX}. Linking 19848using GCC also uses these directories when searching for ordinary 19849libraries for the @option{-l} option (but directories specified with 19850@option{-L} come first). 19851 19852@item LANG 19853@findex LANG 19854@cindex locale definition 19855This variable is used to pass locale information to the compiler. One way in 19856which this information is used is to determine the character set to be used 19857when character literals, string literals and comments are parsed in C and C++. 19858When the compiler is configured to allow multibyte characters, 19859the following values for @env{LANG} are recognized: 19860 19861@table @samp 19862@item C-JIS 19863Recognize JIS characters. 19864@item C-SJIS 19865Recognize SJIS characters. 19866@item C-EUCJP 19867Recognize EUCJP characters. 19868@end table 19869 19870If @env{LANG} is not defined, or if it has some other value, then the 19871compiler will use mblen and mbtowc as defined by the default locale to 19872recognize and translate multibyte characters. 19873@end table 19874 19875@noindent 19876Some additional environments variables affect the behavior of the 19877preprocessor. 19878 19879@include cppenv.texi 19880 19881@c man end 19882 19883@node Precompiled Headers 19884@section Using Precompiled Headers 19885@cindex precompiled headers 19886@cindex speed of compilation 19887 19888Often large projects have many header files that are included in every 19889source file. The time the compiler takes to process these header files 19890over and over again can account for nearly all of the time required to 19891build the project. To make builds faster, GCC allows users to 19892`precompile' a header file; then, if builds can use the precompiled 19893header file they will be much faster. 19894 19895To create a precompiled header file, simply compile it as you would any 19896other file, if necessary using the @option{-x} option to make the driver 19897treat it as a C or C++ header file. You will probably want to use a 19898tool like @command{make} to keep the precompiled header up-to-date when 19899the headers it contains change. 19900 19901A precompiled header file will be searched for when @code{#include} is 19902seen in the compilation. As it searches for the included file 19903(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the 19904compiler looks for a precompiled header in each directory just before it 19905looks for the include file in that directory. The name searched for is 19906the name specified in the @code{#include} with @samp{.gch} appended. If 19907the precompiled header file can't be used, it is ignored. 19908 19909For instance, if you have @code{#include "all.h"}, and you have 19910@file{all.h.gch} in the same directory as @file{all.h}, then the 19911precompiled header file will be used if possible, and the original 19912header will be used otherwise. 19913 19914Alternatively, you might decide to put the precompiled header file in a 19915directory and use @option{-I} to ensure that directory is searched 19916before (or instead of) the directory containing the original header. 19917Then, if you want to check that the precompiled header file is always 19918used, you can put a file of the same name as the original header in this 19919directory containing an @code{#error} command. 19920 19921This also works with @option{-include}. So yet another way to use 19922precompiled headers, good for projects not designed with precompiled 19923header files in mind, is to simply take most of the header files used by 19924a project, include them from another header file, precompile that header 19925file, and @option{-include} the precompiled header. If the header files 19926have guards against multiple inclusion, they will be skipped because 19927they've already been included (in the precompiled header). 19928 19929If you need to precompile the same header file for different 19930languages, targets, or compiler options, you can instead make a 19931@emph{directory} named like @file{all.h.gch}, and put each precompiled 19932header in the directory, perhaps using @option{-o}. It doesn't matter 19933what you call the files in the directory, every precompiled header in 19934the directory will be considered. The first precompiled header 19935encountered in the directory that is valid for this compilation will 19936be used; they're searched in no particular order. 19937 19938There are many other possibilities, limited only by your imagination, 19939good sense, and the constraints of your build system. 19940 19941A precompiled header file can be used only when these conditions apply: 19942 19943@itemize 19944@item 19945Only one precompiled header can be used in a particular compilation. 19946 19947@item 19948A precompiled header can't be used once the first C token is seen. You 19949can have preprocessor directives before a precompiled header; you can 19950even include a precompiled header from inside another header, so long as 19951there are no C tokens before the @code{#include}. 19952 19953@item 19954The precompiled header file must be produced for the same language as 19955the current compilation. You can't use a C precompiled header for a C++ 19956compilation. 19957 19958@item 19959The precompiled header file must have been produced by the same compiler 19960binary as the current compilation is using. 19961 19962@item 19963Any macros defined before the precompiled header is included must 19964either be defined in the same way as when the precompiled header was 19965generated, or must not affect the precompiled header, which usually 19966means that they don't appear in the precompiled header at all. 19967 19968The @option{-D} option is one way to define a macro before a 19969precompiled header is included; using a @code{#define} can also do it. 19970There are also some options that define macros implicitly, like 19971@option{-O} and @option{-Wdeprecated}; the same rule applies to macros 19972defined this way. 19973 19974@item If debugging information is output when using the precompiled 19975header, using @option{-g} or similar, the same kind of debugging information 19976must have been output when building the precompiled header. However, 19977a precompiled header built using @option{-g} can be used in a compilation 19978when no debugging information is being output. 19979 19980@item The same @option{-m} options must generally be used when building 19981and using the precompiled header. @xref{Submodel Options}, 19982for any cases where this rule is relaxed. 19983 19984@item Each of the following options must be the same when building and using 19985the precompiled header: 19986 19987@gccoptlist{-fexceptions} 19988 19989@item 19990Some other command-line options starting with @option{-f}, 19991@option{-p}, or @option{-O} must be defined in the same way as when 19992the precompiled header was generated. At present, it's not clear 19993which options are safe to change and which are not; the safest choice 19994is to use exactly the same options when generating and using the 19995precompiled header. The following are known to be safe: 19996 19997@gccoptlist{-fmessage-length= -fpreprocessed -fsched-interblock @gol 19998-fsched-spec -fsched-spec-load -fsched-spec-load-dangerous @gol 19999-fsched-verbose=@var{number} -fschedule-insns -fvisibility= @gol 20000-pedantic-errors} 20001 20002@end itemize 20003 20004For all of these except the last, the compiler will automatically 20005ignore the precompiled header if the conditions aren't met. If you 20006find an option combination that doesn't work and doesn't cause the 20007precompiled header to be ignored, please consider filing a bug report, 20008see @ref{Bugs}. 20009 20010If you do use differing options when generating and using the 20011precompiled header, the actual behavior will be a mixture of the 20012behavior for the options. For instance, if you use @option{-g} to 20013generate the precompiled header but not when using it, you may or may 20014not get debugging information for routines in the precompiled header. 20015