@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
@c 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.

@ignore
@c man begin INCLUDE
@include gcc-vers.texi
@c man end

@c man begin COPYRIGHT
Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``GNU General Public License'' and ``Funding
Free Software'', the Front-Cover texts being (a) (see below), and with
the Back-Cover Texts being (b) (see below).  A copy of the license is
included in the gfdl(7) man page.

(a) The FSF's Front-Cover Text is:

     A GNU Manual

(b) The FSF's Back-Cover Text is:

     You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development.
@c man end
@c Set file name and title for the man page.
@setfilename gcc
@settitle GNU project C and C++ compiler
@c man begin SYNOPSIS
gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
    [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
    [@option{-W}@var{warn}@dots{}] [@option{-pedantic}]
    [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
    [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
    [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
    [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{}

Only the most useful options are listed here; see below for the
remainder.  @samp{g++} accepts mostly the same options as @samp{gcc}.

@c APPLE LOCAL begin manual
In Apple's version of GCC, both @samp{cc} and @samp{gcc} are actually
symbolic links to a compiler named like gcc-@var{version}.
Similarly, @samp{c++} and @samp{g++} are links to a compiler named like
g++-@var{version}.

Note that Apple's GCC includes a number of extensions to standard GCC
(flagged below with ``APPLE ONLY''), and that not all generic GCC
options are available or supported on Darwin / Mac OS X.  In particular,
Apple does not currently support the compilation of Fortran, Ada, or
Java, although there are third parties who have made these work.
@c APPLE LOCAL end manual

@c man end
@c man begin SEEALSO
gpl(7), gfdl(7), fsf-funding(7),
cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
and the Info entries for @file{gcc}, @file{cpp}, @file{as},
@file{ld}, @file{binutils} and @file{gdb}.
@c man end
@c man begin BUGS
@c APPLE LOCAL begin Apple bug-report
To report bugs to Apple, see
@w{@uref{http://developer.apple.com/bugreporter}}.
@c APPLE LOCAL end Apple bug-report
@c man end
@c man begin AUTHOR
See the Info entry for @command{gcc}, or
@w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
for contributors to GCC@.
@c man end
@end ignore

@node Invoking GCC
@chapter GCC Command Options
@cindex GCC command options
@cindex command options
@cindex options, GCC command

@c man begin DESCRIPTION
When you invoke GCC, it normally does preprocessing, compilation,
assembly and linking.  The ``overall options'' allow you to stop this
process at an intermediate stage.  For example, the @option{-c} option
says not to run the linker.  Then the output consists of object files
output by the assembler.

Other options are passed on to one stage of processing.  Some options
control the preprocessor and others the compiler itself.  Yet other
options control the assembler and linker; most of these are not
documented here, since you rarely need to use any of them.

@cindex C compilation options
Most of the command line options that you can use with GCC are useful
for C programs; when an option is only useful with another language
(usually C++), the explanation says so explicitly.  If the description
for a particular option does not mention a source language, you can use
that option with all supported languages.

@cindex C++ compilation options
@xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
options for compiling C++ programs.

@cindex grouping options
@cindex options, grouping
The @command{gcc} program accepts options and file names as operands.  Many
options have multi-letter names; therefore multiple single-letter options
may @emph{not} be grouped: @option{-dr} is very different from @w{@samp{-d
-r}}.

@cindex order of options
@cindex options, order
You can mix options and other arguments.  For the most part, the order
you use doesn't matter.  Order does matter when you use several options
of the same kind; for example, if you specify @option{-L} more than once,
the directories are searched in the order specified.

Many options have long names starting with @samp{-f} or with
@samp{-W}---for example, 
@option{-fmove-loop-invariants}, @option{-Wformat} and so on.  Most of
these have both positive and negative forms; the negative form of
@option{-ffoo} would be @option{-fno-foo}.  This manual documents
only one of these two forms, whichever one is not the default.

@c man end

@xref{Option Index}, for an index to GCC's options.

@menu
* Option Summary::	Brief list of all options, without explanations.
* Overall Options::     Controlling the kind of output:
                        an executable, object files, assembler files,
                        or preprocessed source.
* Invoking G++::	Compiling C++ programs.
* C Dialect Options::   Controlling the variant of C language compiled.
* C++ Dialect Options:: Variations on C++.
* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
                        and Objective-C++.
* Language Independent Options:: Controlling how diagnostics should be
                        formatted.
* Warning Options::     How picky should the compiler be?
* Debugging Options::   Symbol tables, measurements, and debugging dumps.
* Optimize Options::    How much optimization?
* Preprocessor Options:: Controlling header files and macro definitions.
                         Also, getting dependency information for Make.
* Assembler Options::   Passing options to the assembler.
* Link Options::        Specifying libraries and so on.
* Directory Options::   Where to find header files and libraries.
                        Where to find the compiler executable files.
* Spec Files::          How to pass switches to sub-processes.
* Target Options::      Running a cross-compiler, or an old version of GCC.
* Submodel Options::    Specifying minor hardware or convention variations,
                        such as 68010 vs 68020.
* Code Gen Options::    Specifying conventions for function calls, data layout
                        and register usage.
* Environment Variables:: Env vars that affect GCC.
* Precompiled Headers:: Compiling a header once, and using it many times.
* Running Protoize::    Automatically adding or removing function prototypes.
@end menu

@c man begin OPTIONS

@node Option Summary
@section Option Summary

Here is a summary of all the options, grouped by type.  Explanations are
in the following sections.

@table @emph
@item Overall Options
@xref{Overall Options,,Options Controlling the Kind of Output}.
@gccoptlist{-c  -S  -E  -o @var{file}  -combine -pipe  -pass-exit-codes  @gol
@c APPLE LOCAL -ObjC 2001-08-03 --sts **
-ObjC (APPLE ONLY) -ObjC++ (APPLE ONLY) @gol
@c APPLE LOCAL begin fat builds
-arch @var{arch} (APPLE ONLY) @gol
-Xarch_@var{arch} @var{option} (APPLE ONLY) @gol
@c APPLE LOCAL end fat builds
@c APPLE LOCAL ss2
-fsave-repository=@var{file} @gol
-x @var{language}  -v  -###  --help  --target-help  --version @@@var{file}}

@item C Language Options
@xref{C Dialect Options,,Options Controlling C Dialect}.
@gccoptlist{-ansi  -std=@var{standard}  -fgnu89-inline @gol
-aux-info @var{filename} @gol
@c APPLE LOCAL AltiVec
-faltivec (APPLE ONLY) @gol
@c APPLE LOCAL CW asm blocks
-fasm-blocks (APPLE ONLY) @gol
-fno-asm  -fno-builtin  -fno-builtin-@var{function} @gol
-fhosted  -ffreestanding -fopenmp -fms-extensions @gol
-trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp @gol
@c APPLE LOCAL 5612787 sse4
-fallow-single-precision  -fcond-mismatch -flax-vector-conversions @gol
@c APPLE LOCAL constant cfstrings --mrs
-fconstant-cfstrings (APPLE ONLY) @gol
@c APPLE LOCAL non lvalue assign
-fnon-lvalue-assign (APPLE ONLY) @gol
@c APPLE LOCAL nested functions 4357979 */
-fno-nested-functions @gol
@c APPLE LOCAL pch distcc --mrs
-fpch-preprocess (APPLE ONLY) @gol
-fsigned-bitfields  -fsigned-char @gol
@c APPLE LOCAL -Wno-#warnings
-Wno-#warnings (APPLE ONLY) @gol
@c APPLE LOCAL -Wextra-tokens 2001-08-02 --sts **
-Wextra-tokens (APPLE ONLY) @gol
@c APPLE LOCAL -Wnewline-eof 2001-08-23 --sts **
-Wnewline-eof (APPLE ONLY) @gol
@c APPLE LOCAL -Wno-altivec-long-deprecated --ilr **
-Wno-altivec-long-deprecated (APPLE ONLY)
@c APPLE LOCAL begin 5695218
-fglobal-alloc-prefer-bytes (APPLE ONLY)
-fno-global-alloc-prefer-bytes (APPLE ONLY)
@c APPLE LOCAL end 5695218
@c APPLE LOCAL fwritable strings
-funsigned-bitfields  -funsigned-char  -fwritable-strings}

@item C++ Language Options
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
@gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
-fconserve-space  -ffriend-injection @gol
-fno-elide-constructors @gol
-fno-enforce-eh-specs @gol
-ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
-fno-implicit-templates @gol
-fno-implicit-inline-templates @gol
-fno-implement-inlines  -fms-extensions @gol
-fno-nonansi-builtins  -fno-operator-names @gol
-fno-optional-diags  -fpermissive @gol
-frepo  -fno-rtti  -fstats  -ftemplate-depth-@var{n} @gol
-fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++ @gol
-fno-default-inline  -fvisibility-inlines-hidden @gol
@c APPLE LOCAL mainline 2007-06-28 ms tinfo compat 4230099
-fvisibility-ms-compat
-Wabi  -Wctor-dtor-privacy @gol
-Wnon-virtual-dtor  -Wreorder @gol
-Weffc++  -Wno-deprecated  -Wstrict-null-sentinel @gol
-Wno-non-template-friend  -Wold-style-cast @gol
-Woverloaded-virtual  -Wno-pmf-conversions @gol
-Wsign-promo}

@item Objective-C and Objective-C++ Language Options
@xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
Objective-C and Objective-C++ Dialects}.
@gccoptlist{-fconstant-string-class=@var{class-name} @gol
-fgnu-runtime  -fnext-runtime @gol
-fno-nil-receivers @gol
-fobjc-call-cxx-cdtors @gol
-fobjc-direct-dispatch @gol
@c APPLE LOCAL radar 4512786
-fobjc-sjlj-exceptions @gol
-fobjc-gc @gol
-freplace-objc-classes @gol
-fzero-link @gol
-gen-decls @gol
-Wassign-intercept @gol
-Wno-protocol  -Wselector @gol
@c APPLE LOCAL radar 5172645
-Wno-property-assign-default @gol
-Wstrict-selector-match @gol
-Wundeclared-selector}

@item Language Independent Options
@xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
@gccoptlist{-fmessage-length=@var{n}  @gol
-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
-fdiagnostics-show-option}

@item Warning Options
@xref{Warning Options,,Options to Request or Suppress Warnings}.
@gccoptlist{-fsyntax-only  -pedantic  -pedantic-errors @gol
-w  -Wextra  -Wall  -Waddress  -Waggregate-return -Wno-attributes @gol
-Wc++-compat -Wcast-align  -Wcast-qual  -Wchar-subscripts  -Wcomment @gol
-Wconversion  -Wno-deprecated-declarations @gol
-Wdisabled-optimization  -Wno-div-by-zero  -Wno-endif-labels @gol
-Werror  -Werror=* -Werror-implicit-function-declaration @gol
@c APPLE LOCAL default to Wformat-security 5764921
-Wfatal-errors  -Wfloat-equal  -Wno-format  -Wformat=2 @gol
-Wno-format-extra-args -Wformat-nonliteral @gol
@c APPLE LOCAL default to Wformat-security 5764921
-Wno-format-security  -Wformat-y2k @gol
@c APPLE LOCAL Wglobal-constructors 6324584
-Wglobal-constructors @gol
-Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int @gol
-Wimport  -Wno-import  -Winit-self  -Winline @gol
-Wno-int-to-pointer-cast @gol
-Wno-invalid-offsetof  -Winvalid-pch @gol
-Wlarger-than-@var{len}  -Wunsafe-loop-optimizations  -Wlong-long @gol
-Wmain  -Wmissing-braces  -Wmissing-field-initializers @gol
-Wmissing-format-attribute  -Wmissing-include-dirs @gol
-Wmissing-noreturn @gol
@c APPLE LOCAL warn missing prototype 6261539
-Wmissing-prototypes @gol
@c APPLE LOCAL -Wmost
-Wmost (APPLE ONLY) @gol
-Wno-multichar  -Wnonnull  -Wno-overflow @gol
-Woverlength-strings  -Wpacked  -Wpadded @gol
-Wparentheses  -Wpointer-arith  -Wno-pointer-to-int-cast @gol
-Wredundant-decls @gol
-Wreturn-type  -Wsequence-point  -Wshadow @gol
-Wsign-compare  -Wstack-protector @gol
-Wstrict-aliasing -Wstrict-aliasing=2 @gol
-Wstrict-overflow -Wstrict-overflow=@var{n} @gol
-Wswitch  -Wswitch-default  -Wswitch-enum @gol
-Wsystem-headers  -Wtrigraphs  -Wundef  -Wuninitialized @gol
-Wunknown-pragmas  -Wno-pragmas -Wunreachable-code @gol
-Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter @gol
-Wunused-value  -Wunused-variable  -Wvariadic-macros @gol
-Wvolatile-register-var  -Wwrite-strings}

@c APPLE LOCAL begin -Wdiscard-qual 4086969
@item C-only Warning Options
@gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
@c APPLE LOCAL warn missing prototype 6261539
-Wnested-externs  -Wold-style-definition @gol
-Wstrict-prototypes  -Wtraditional @gol
-Wdeclaration-after-statement -Wno-discard-qual -Wno-pointer-sign}
@c APPLE LOCAL end -Wdiscard-qual 4086969

@item Debugging Options
@xref{Debugging Options,,Options for Debugging Your Program or GCC}.
@gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
-fdump-noaddr -fdump-unnumbered  -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
-fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
-fdump-ipa-all -fdump-ipa-cgraph @gol
-fdump-tree-all @gol
-fdump-tree-original@r{[}-@var{n}@r{]}  @gol
-fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
-fdump-tree-inlined@r{[}-@var{n}@r{]} @gol
-fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol
-fdump-tree-ch @gol
-fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol
-fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
-fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol
-fdump-tree-dom@r{[}-@var{n}@r{]} @gol
-fdump-tree-dse@r{[}-@var{n}@r{]} @gol
-fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol
-fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
-fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol
-fdump-tree-nrv -fdump-tree-vect @gol
-fdump-tree-sink @gol
-fdump-tree-sra@r{[}-@var{n}@r{]} @gol
-fdump-tree-salias @gol
-fdump-tree-fre@r{[}-@var{n}@r{]} @gol
-fdump-tree-vrp@r{[}-@var{n}@r{]} @gol
-ftree-vectorizer-verbose=@var{n} @gol
-fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol
@c APPLE LOCAL 4167759
-flimit-debug-info @gol
-feliminate-dwarf2-dups -feliminate-unused-debug-types @gol
-feliminate-unused-debug-symbols -femit-class-debug-always @gol
@c APPLE LOCAL opt diary
-fmem-report -fopt-diary -fprofile-arcs @gol
-frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
-ftest-coverage  -ftime-report -fvar-tracking @gol
-g  -g@var{level}  -gcoff -gdwarf-2 @gol
-ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+ @gol
-p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
-print-multi-directory  -print-multi-lib @gol
-print-prog-name=@var{program}  -print-search-dirs  -Q @gol
@c LLVM LOCAL
-mllvm @var{string}
-save-temps  -time}

@item Optimization Options
@xref{Optimize Options,,Options that Control Optimization}.
@gccoptlist{-falign-functions=@var{n}  -falign-jumps=@var{n} @gol
-falign-labels=@var{n}  -falign-loops=@var{n}  @gol
@c APPLE LOCAL -falign-loops-max-skip
-falign-loops-max-skip=@var{n} -falign-jumps-max-skip=@var{n} @gol
-fbounds-check -fmudflap -fmudflapth -fmudflapir @gol
-fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize @gol
-fbranch-target-load-optimize2 -fbtr-bb-exclusive @gol
@c APPLE LOCAL add fcreate-profile
-fcaller-saves  -fcprop-registers  -fcreate-profile -fcse-follow-jumps @gol
-fcse-skip-blocks  -fcx-limited-range  -fdata-sections @gol
-fdelayed-branch  -fdelete-null-pointer-checks -fearly-inlining @gol
-fexpensive-optimizations  -ffast-math  -ffloat-store @gol
-fforce-addr  -ffunction-sections @gol
-fgcse  -fgcse-lm  -fgcse-sm  -fgcse-las  -fgcse-after-reload @gol
-fcrossjumping  -fif-conversion  -fif-conversion2 @gol
-finline-functions  -finline-functions-called-once @gol
-finline-limit=@var{n}  -fkeep-inline-functions @gol
@c APPLE LOCAL begin ARM conditionally disable local RA
-fkeep-static-consts @gol
-flocal-alloc (APPLE ONLY) @gol
-fmerge-constants  -fmerge-all-constants @gol
@c APPLE LOCAL end ARM conditionally disable local RA
-fmodulo-sched -fno-branch-count-reg @gol
-fno-default-inline  -fno-defer-pop -fmove-loop-invariants @gol
-fno-function-cse  -fno-guess-branch-probability @gol
-fno-inline  -fno-math-errno  -fno-peephole  -fno-peephole2 @gol
-funsafe-math-optimizations  -funsafe-loop-optimizations  -ffinite-math-only @gol
-fno-toplevel-reorder -fno-trapping-math  -fno-zero-initialized-in-bss @gol
@c APPLE LOCAL 4356747 stack realign
-mstackrealign @gol
-fomit-frame-pointer  -foptimize-register-move @gol
-foptimize-sibling-calls  -fprefetch-loop-arrays @gol
-fprofile-generate -fprofile-use @gol
-fregmove  -frename-registers @gol
-freorder-blocks  -freorder-blocks-and-partition -freorder-functions @gol
-frerun-cse-after-loop @gol
-frounding-math -frtl-abstract-sequences @gol
-fschedule-insns  -fschedule-insns2 @gol
-fno-sched-interblock  -fno-sched-spec  -fsched-spec-load @gol
-fsched-spec-load-dangerous  @gol
-fsched-stalled-insns=@var{n} -fsched-stalled-insns-dep=@var{n} @gol
-fsched2-use-superblocks @gol
-fsched2-use-traces -fsee -freschedule-modulo-scheduled-loops @gol
-fsection-anchors  -fsignaling-nans  -fsingle-precision-constant @gol
-fstack-protector  -fstack-protector-all @gol
-fstrict-aliasing  -fstrict-overflow  -ftracer  -fthread-jumps @gol
-funroll-all-loops  -funroll-loops  -fpeel-loops @gol
-fsplit-ivs-in-unroller -funswitch-loops @gol
-fvariable-expansion-in-unroller @gol
-ftree-pre  -ftree-ccp  -ftree-dce -ftree-loop-optimize @gol
-ftree-loop-linear -ftree-loop-im -ftree-loop-ivcanon -fivopts @gol
-ftree-dominator-opts -ftree-dse -ftree-copyrename -ftree-sink @gol
-ftree-ch -ftree-sra -ftree-ter -ftree-lrs -ftree-fre -ftree-vectorize @gol
@c APPLE LOCAL add fuse-profile
-ftree-vect-loop-version -ftree-salias -fuse-profile -fipa-pta -fweb @gol
-ftree-copy-prop -ftree-store-ccp -ftree-store-copy-prop -fwhole-program @gol
--param @var{name}=@var{value}
@c LLVM LOCAL -fast, -Oz,
-flto (APPLE ONLY) -O  -O0  -O1  -O2  -O3 -O4 (APPLE ONLY) -Os -Oz (APPLE ONLY) -fast (APPLE ONLY)}

@item Preprocessor Options
@xref{Preprocessor Options,,Options Controlling the Preprocessor}.
@gccoptlist{-A@var{question}=@var{answer} @gol
-A-@var{question}@r{[}=@var{answer}@r{]} @gol
-C  -dD  -dI  -dM  -dN @gol
-D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
-idirafter @var{dir} @gol
-include @var{file}  -imacros @var{file} @gol
-iprefix @var{file}  -iwithprefix @var{dir} @gol
-iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
-imultilib @var{dir} -isysroot @var{dir} @gol
@c APPLE LOCAL ARM iwithsysroot 4917039
-iwithsysroot (APPLE ONLY) @var{dir} @gol
-M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
-P  -fworking-directory  -remap @gol
-trigraphs  -undef  -U@var{macro}  -Wp,@var{option} @gol
-Xpreprocessor @var{option}}

@item Assembler Option
@xref{Assembler Options,,Passing Options to the Assembler}.
@gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}

@item Linker Options
@xref{Link Options,,Options for Linking}.
@gccoptlist{@var{object-file-name}  -l@var{library} @gol
-nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic @gol
-s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic @gol
-Wl,@var{option}  -Xlinker @var{option} @gol
-u @var{symbol}}

@item Directory Options
@xref{Directory Options,,Options for Directory Search}.
@gccoptlist{-B@var{prefix}  -I@var{dir}  -iquote@var{dir}  -L@var{dir}
-specs=@var{file}  -I- --sysroot=@var{dir}}

@item Target Options
@c I wrote this xref this way to avoid overfull hbox. -- rms
@xref{Target Options}.
@gccoptlist{-V @var{version}  -b @var{machine}}

@item Machine Dependent Options
@xref{Submodel Options,,Hardware Models and Configurations}.
@c This list is ordered alphanumerically by subsection name.
@c Try and put the significant identifier (CPU or system) first,
@c so users have a clue at guessing where the ones they want will be.

@c APPLE LOCAL prune man page
@ignore
@emph{ARC Options}
@gccoptlist{-EB  -EL @gol
-mmangle-cpu  -mcpu=@var{cpu}  -mtext=@var{text-section} @gol
-mdata=@var{data-section}  -mrodata=@var{readonly-data-section}}
@c APPLE LOCAL ARM prune man page
@end ignore

@emph{ARM Options}
@gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
-mabi=@var{name} @gol
-mapcs-stack-check  -mno-apcs-stack-check @gol
-mapcs-float  -mno-apcs-float @gol
-mapcs-reentrant  -mno-apcs-reentrant @gol
-msched-prolog  -mno-sched-prolog @gol
-mlittle-endian  -mbig-endian  -mwords-little-endian @gol
-mfloat-abi=@var{name}  -msoft-float  -mhard-float  -mfpe @gol
-mthumb-interwork  -mno-thumb-interwork @gol
-mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
-mstructure-size-boundary=@var{n} @gol
-mabort-on-noreturn @gol
-mlong-calls  -mno-long-calls @gol
-msingle-pic-base  -mno-single-pic-base @gol
-mpic-register=@var{reg} @gol
-mnop-fun-dllimport @gol
-mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol
-mpoke-function-name @gol
-mthumb  -marm @gol
-mtpcs-frame  -mtpcs-leaf-frame @gol
-mcaller-super-interworking  -mcallee-super-interworking @gol
@c APPLE LOCAL begin 5946347 ms_struct support
-mtp=@var{name} @gol
-mms-bitfields -mno-ms-bitfields}
@c APPLE LOCAL end 5946347 ms_struct support

@c APPLE LOCAL ARM prune man page
@ignore
@emph{AVR Options}
@gccoptlist{-mmcu=@var{mcu}  -msize  -minit-stack=@var{n}  -mno-interrupts @gol
-mcall-prologues  -mno-tablejump  -mtiny-stack  -mint8}

@emph{Blackfin Options}
@gccoptlist{-momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer @gol
-mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly @gol
-mlow-64k -mno-low64k -mid-shared-library @gol
-mno-id-shared-library -mshared-library-id=@var{n} @gol
-mlong-calls  -mno-long-calls}

@emph{CRIS Options}
@gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
-mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
-metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
-mstack-align  -mdata-align  -mconst-align @gol
-m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
-melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
-mmul-bug-workaround  -mno-mul-bug-workaround}
@c APPLE LOCAL prune man page
@end ignore

@emph{CRX Options}
@gccoptlist{-mmac -mpush-args}

@emph{Darwin Options}
@gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
-arch_only  -bind_at_load  -bundle  -bundle_loader @gol
-client_name  -compatibility_version  -current_version @gol
-dead_strip @gol
-dependency-file  -dylib_file  -dylinker_install_name @gol
-dynamic  -dynamiclib  -exported_symbols_list @gol
-filelist  -flat_namespace  -force_cpusubtype_ALL @gol
-force_flat_namespace  -headerpad_max_install_names @gol
@c APPLE LOCAL iframework for 4.3 4094959
-iframework @gol
-image_base  -init  -install_name  -keep_private_externs @gol
-multi_module  -multiply_defined  -multiply_defined_unused @gol
-noall_load   -no_dead_strip_inits_and_terms @gol
-nofixprebinding -nomultidefs  -noprebind  -noseglinkedit @gol
-pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
-private_bundle  -read_only_relocs  -sectalign @gol
-sectobjectsymbols  -whyload  -seg1addr @gol
-sectcreate  -sectobjectsymbols  -sectorder @gol
-segaddr -segs_read_only_addr -segs_read_write_addr @gol
-seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
-segprot  -segs_read_only_addr  -segs_read_write_addr @gol
-single_module  -static  -sub_library  -sub_umbrella @gol
-twolevel_namespace  -umbrella  -undefined @gol
-unexported_symbols_list  -weak_reference_mismatches @gol
-whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol
@c APPLE LOCAL ARM 5905142
-miphoneos-version-min=@var{version} @gol
@c APPLE LOCAL pascal strings
-mpascal-strings (APPLE ONLY) @gol
@c APPLE LOCAL begin fat builds
-mkernel -mone-byte-bool @gol
-Xarch_@var{arch}}
@c APPLE LOCAL end fat builds

@c APPLE LOCAL prune man page
@ignore
@emph{DEC Alpha Options}
@gccoptlist{-mno-fp-regs  -msoft-float  -malpha-as  -mgas @gol
-mieee  -mieee-with-inexact  -mieee-conformant @gol
-mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
-mtrap-precision=@var{mode}  -mbuild-constants @gol
-mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
-mbwx  -mmax  -mfix  -mcix @gol
-mfloat-vax  -mfloat-ieee @gol
-mexplicit-relocs  -msmall-data  -mlarge-data @gol
-msmall-text  -mlarge-text @gol
-mmemory-latency=@var{time}}

@emph{DEC Alpha/VMS Options}
@gccoptlist{-mvms-return-codes}

@emph{FRV Options}
@gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
-mhard-float  -msoft-float @gol
-malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
-mdouble  -mno-double @gol
-mmedia  -mno-media  -mmuladd  -mno-muladd @gol
-mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic @gol
-mlinked-fp  -mlong-calls  -malign-labels @gol
-mlibrary-pic  -macc-4  -macc-8 @gol
-mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
-moptimize-membar -mno-optimize-membar @gol
-mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
-mvliw-branch  -mno-vliw-branch @gol
-mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
-mno-nested-cond-exec  -mtomcat-stats @gol
-mTLS -mtls @gol
-mcpu=@var{cpu}}

@emph{GNU/Linux Options}
@gccoptlist{-muclibc}

@emph{H8/300 Options}
@gccoptlist{-mrelax  -mh  -ms  -mn  -mint32  -malign-300}

@emph{HPPA Options}
@gccoptlist{-march=@var{architecture-type} @gol
-mbig-switch  -mdisable-fpregs  -mdisable-indexing @gol
-mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
-mfixed-range=@var{register-range} @gol
-mjump-in-delay -mlinker-opt -mlong-calls @gol
-mlong-load-store  -mno-big-switch  -mno-disable-fpregs @gol
-mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
-mno-jump-in-delay  -mno-long-load-store @gol
-mno-portable-runtime  -mno-soft-float @gol
-mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
-mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
-mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
-munix=@var{unix-std}  -nolibdld  -static  -threads}
@c APPLE LOCAL prune man page
@end ignore

@emph{i386 and x86-64 Options}
@gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
-mfpmath=@var{unit} @gol
-masm=@var{dialect}  -mno-fancy-math-387 @gol
-mno-fp-ret-in-387  -msoft-float  -msvr3-shlib @gol
-mno-wide-multiply  -mrtd  -malign-double @gol
-mpreferred-stack-boundary=@var{num} @gol
@c APPLE LOCAL begin 5612787 sse4
-mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -msse4a @gol
@c APPLE LOCAL end 5612787 sse4
-mthreads  -mno-align-stringops  -minline-all-stringops @gol
-mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
-m96bit-long-double  -mregparm=@var{num}  -msseregparm @gol
-mstackrealign @gol
-momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs @gol
-mcmodel=@var{code-model} @gol
@c APPLE LOCAL begin 5946347 ms_struct support
-m32  -m64 -mlarge-data-threshold=@var{num} @gol
-mms-bitfields -mno-ms-bitfields}
@c APPLE LOCAL end 5946347 ms_struct support

@c APPLE LOCAL prune man page
@ignore
@emph{IA-64 Options}
@gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
-mvolatile-asm-stop  -mregister-names  -mno-sdata @gol
-mconstant-gp  -mauto-pic  -minline-float-divide-min-latency @gol
-minline-float-divide-max-throughput @gol
-minline-int-divide-min-latency @gol
-minline-int-divide-max-throughput  @gol
-minline-sqrt-min-latency -minline-sqrt-max-throughput @gol
-mno-dwarf2-asm -mearly-stop-bits @gol
-mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol
-mtune=@var{cpu-type} -mt -pthread -milp32 -mlp64 @gol
-mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec @gol
-msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol
-msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose @gol
-mno-sched-prefer-non-data-spec-insns @gol
-mno-sched-prefer-non-control-spec-insns @gol
-mno-sched-count-spec-in-critical-path}

@emph{M32R/D Options}
@gccoptlist{-m32r2 -m32rx -m32r @gol
-mdebug @gol
-malign-loops -mno-align-loops @gol
-missue-rate=@var{number} @gol
-mbranch-cost=@var{number} @gol
-mmodel=@var{code-size-model-type} @gol
-msdata=@var{sdata-type} @gol
-mno-flush-func -mflush-func=@var{name} @gol
-mno-flush-trap -mflush-trap=@var{number} @gol
-G @var{num}}

@emph{M32C Options}
@gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}}

@emph{M680x0 Options}
@gccoptlist{-m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
-m68060  -mcpu32  -m5200  -mcfv4e -m68881  -mbitfield  @gol
-mc68000  -mc68020   @gol
-mnobitfield  -mrtd  -mshort  -msoft-float  -mpcrel @gol
-malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
-mshared-library-id=n  -mid-shared-library  -mno-id-shared-library}

@emph{M68hc1x Options}
@gccoptlist{-m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12 @gol
-mauto-incdec  -minmax  -mlong-calls  -mshort @gol
-msoft-reg-count=@var{count}}

@emph{MCore Options}
@gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
-mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
-m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
-mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
-mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}

@emph{MIPS Options}
@gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
-mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips64 @gol
-mips16  -mno-mips16  -mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
-mshared  -mno-shared  -mxgot  -mno-xgot  -mgp32  -mgp64  @gol
-mfp32  -mfp64  -mhard-float  -msoft-float  @gol
-msingle-float  -mdouble-float  -mdsp  -mpaired-single  -mips3d @gol
-mlong64  -mlong32  -msym32  -mno-sym32 @gol
-G@var{num}  -membedded-data  -mno-embedded-data @gol
-muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
-msplit-addresses  -mno-split-addresses  @gol
-mexplicit-relocs  -mno-explicit-relocs  @gol
-mcheck-zero-division  -mno-check-zero-division @gol
-mdivide-traps  -mdivide-breaks @gol
-mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
-mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp @gol
-mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
-mfix-vr4120  -mno-fix-vr4120  -mfix-vr4130 @gol
-mfix-sb1  -mno-fix-sb1 @gol
-mflush-func=@var{func}  -mno-flush-func @gol
-mbranch-likely  -mno-branch-likely @gol
-mfp-exceptions -mno-fp-exceptions @gol
-mvr4130-align -mno-vr4130-align}

@emph{MMIX Options}
@gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
-mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
-melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
-mno-base-addresses  -msingle-exit  -mno-single-exit}

@emph{MN10300 Options}
@gccoptlist{-mmult-bug  -mno-mult-bug @gol
-mam33  -mno-am33 @gol
-mam33-2  -mno-am33-2 @gol
-mreturn-pointer-on-d0 @gol
-mno-crt0  -mrelax}

@emph{MT Options}
@gccoptlist{-mno-crt0 -mbacc -msim @gol
-march=@var{cpu-type} }

@emph{PDP-11 Options}
@gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
-mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
-mint16  -mno-int32  -mfloat32  -mno-float64 @gol
-mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
-mbranch-expensive  -mbranch-cheap @gol
-msplit  -mno-split  -munix-asm  -mdec-asm}
@c APPLE LOCAL prune man page
@end ignore

@emph{PowerPC Options}
See RS/6000 and PowerPC Options.

@emph{RS/6000 and PowerPC Options}
@gccoptlist{-mcpu=@var{cpu-type} @gol
-mtune=@var{cpu-type} @gol
-mpower  -mno-power  -mpower2  -mno-power2 @gol
-mpowerpc  -mpowerpc64  -mno-powerpc @gol
-maltivec  -mno-altivec @gol
@c APPLE LOCAL AltiVec
-mpim-altivec -mno-pim-altivec @gol
-mpowerpc-gpopt  -mno-powerpc-gpopt @gol
-mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
-mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mfprnd  -mno-fprnd @gol
-mnew-mnemonics  -mold-mnemonics @gol
-mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
-m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
-malign-power  -malign-natural @gol
-msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
-mstring  -mno-string  -mupdate  -mno-update @gol
-mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
-mstrict-align  -mno-strict-align  -mrelocatable @gol
-mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
-mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
-mdynamic-no-pic  -maltivec  -mswdiv @gol
-mprioritize-restricted-insns=@var{priority} @gol
-msched-costly-dep=@var{dependence_type} @gol
-minsert-sched-nops=@var{scheme} @gol
-mcall-sysv  -mcall-netbsd @gol
-maix-struct-return  -msvr4-struct-return @gol
-mabi=@var{abi-type} -msecure-plt -mbss-plt @gol
-misel -mno-isel @gol
-misel=yes  -misel=no @gol
-mspe -mno-spe @gol
-mspe=yes  -mspe=no @gol
-mvrsave -mno-vrsave @gol
-mmulhw -mno-mulhw @gol
-mdlmzb -mno-dlmzb @gol
-mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol
-mprototype  -mno-prototype @gol
-msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
@c APPLE LOCAL begin 5946347 ms_struct support
-msdata=@var{opt}  -mvxworks  -mwindiss  -G @var{num}  -pthread @gol
-mms-bitfields -mno-ms-bitfields}
@c APPLE LOCAL end 5946347 ms_struct support

@c APPLE LOCAL prune man page
@ignore
@emph{S/390 and zSeries Options}
@gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
-mhard-float  -msoft-float -mlong-double-64 -mlong-double-128 @gol
-mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack @gol
-msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
-m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
-mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
-mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard}

@emph{Score Options}
@gccoptlist{-meb -mel @gol
-mnhwloop @gol
-muls @gol
-mmac @gol
-mscore5 -mscore5u -mscore7 -mscore7d}
 
@emph{SH Options}
@gccoptlist{-m1  -m2  -m2e  -m3  -m3e @gol
-m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
-m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol
-m5-64media  -m5-64media-nofpu @gol
-m5-32media  -m5-32media-nofpu @gol
-m5-compact  -m5-compact-nofpu @gol
-mb  -ml  -mdalign  -mrelax @gol
-mbigtable  -mfmovd  -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
-mieee  -misize  -mpadstruct  -mspace @gol
-mprefergot  -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
-mdivsi3_libfunc=@var{name}  @gol
-madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
 -minvalid-symbols}

@emph{SPARC Options}
@gccoptlist{-mcpu=@var{cpu-type} @gol
-mtune=@var{cpu-type} @gol
-mcmodel=@var{code-model} @gol
-m32  -m64  -mapp-regs  -mno-app-regs @gol
-mfaster-structs  -mno-faster-structs @gol
-mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
-mhard-quad-float  -msoft-quad-float @gol
-mimpure-text  -mno-impure-text  -mlittle-endian @gol
-mstack-bias  -mno-stack-bias @gol
-munaligned-doubles  -mno-unaligned-doubles @gol
-mv8plus  -mno-v8plus  -mvis  -mno-vis
-threads -pthreads -pthread}

@emph{System V Options}
@gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}

@emph{TMS320C3x/C4x Options}
@gccoptlist{-mcpu=@var{cpu}  -mbig  -msmall  -mregparm  -mmemparm @gol
-mfast-fix  -mmpyi  -mbk  -mti  -mdp-isr-reload @gol
-mrpts=@var{count}  -mrptb  -mdb  -mloop-unsigned @gol
-mparallel-insns  -mparallel-mpy  -mpreserve-float}

@emph{V850 Options}
@gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
-mprolog-function  -mno-prolog-function  -mspace @gol
-mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
-mapp-regs  -mno-app-regs @gol
-mdisable-callt  -mno-disable-callt @gol
-mv850e1 @gol
-mv850e @gol
-mv850  -mbig-switch}

@emph{VAX Options}
@gccoptlist{-mg  -mgnu  -munix}

@emph{x86-64 Options}
See i386 and x86-64 Options.

@emph{Xstormy16 Options}
@gccoptlist{-msim}

@emph{Xtensa Options}
@gccoptlist{-mconst16 -mno-const16 @gol
-mfused-madd  -mno-fused-madd @gol
-mtext-section-literals  -mno-text-section-literals @gol
-mtarget-align  -mno-target-align @gol
-mlongcalls  -mno-longcalls}

@emph{zSeries Options}
See S/390 and zSeries Options.
@c APPLE LOCAL prune man page
@end ignore

@item Code Generation Options
@xref{Code Gen Options,,Options for Code Generation Conventions}.
@gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
-ffixed-@var{reg}  -fexceptions @gol
-fnon-call-exceptions  -funwind-tables @gol
-fasynchronous-unwind-tables @gol
-finhibit-size-directive  -finstrument-functions @gol
-fno-common  -fno-ident @gol
-fpcc-struct-return  -fpic  -fPIC -fpie -fPIE @gol
-fno-jump-tables @gol
-freg-struct-return  -fshort-enums @gol
-fshort-double  -fshort-wchar @gol
-fverbose-asm  -fpack-struct[=@var{n}]  -fstack-check @gol
-fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
-fargument-alias  -fargument-noalias @gol
-fargument-noalias-global  -fargument-noalias-anything
-fleading-underscore  -ftls-model=@var{model} @gol
@c APPLE LOCAL begin prune man page 5547358
@c -ftrapv
-fwrapv  -fbounds-check @gol
@c APPLE LOCAL end prune man page
-fvisibility}
@end table

@menu
* Overall Options::     Controlling the kind of output:
                        an executable, object files, assembler files,
                        or preprocessed source.
* C Dialect Options::   Controlling the variant of C language compiled.
* C++ Dialect Options:: Variations on C++.
* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
                        and Objective-C++.
* Language Independent Options:: Controlling how diagnostics should be
                        formatted.
* Warning Options::     How picky should the compiler be?
* Debugging Options::   Symbol tables, measurements, and debugging dumps.
* Optimize Options::    How much optimization?
* Preprocessor Options:: Controlling header files and macro definitions.
                         Also, getting dependency information for Make.
* Assembler Options::   Passing options to the assembler.
* Link Options::        Specifying libraries and so on.
* Directory Options::   Where to find header files and libraries.
                        Where to find the compiler executable files.
* Spec Files::          How to pass switches to sub-processes.
* Target Options::      Running a cross-compiler, or an old version of GCC.
@end menu

@node Overall Options
@section Options Controlling the Kind of Output

Compilation can involve up to four stages: preprocessing, compilation
proper, assembly and linking, always in that order.  GCC is capable of
preprocessing and compiling several files either into several
assembler input files, or into one assembler input file; then each
assembler input file produces an object file, and linking combines all
the object files (those newly compiled, and those specified as input)
into an executable file.

@cindex file name suffix
For any given input file, the file name suffix determines what kind of
compilation is done:

@table @gcctabopt
@item @var{file}.c
C source code which must be preprocessed.

@item @var{file}.i
C source code which should not be preprocessed.

@item @var{file}.ii
C++ source code which should not be preprocessed.

@item @var{file}.m
Objective-C source code.  Note that you must link with the @file{libobjc}
library to make an Objective-C program work.

@item @var{file}.mi
Objective-C source code which should not be preprocessed.

@item @var{file}.mm
@itemx @var{file}.M
Objective-C++ source code.  Note that you must link with the @file{libobjc}
library to make an Objective-C++ program work.  Note that @samp{.M} refers
to a literal capital M@.

@item @var{file}.mii
Objective-C++ source code which should not be preprocessed.

@item @var{file}.h
C, C++, Objective-C or Objective-C++ header file to be turned into a
precompiled header.

@item @var{file}.cc
@itemx @var{file}.cp
@itemx @var{file}.cxx
@itemx @var{file}.cpp
@itemx @var{file}.CPP
@itemx @var{file}.c++
@itemx @var{file}.C
C++ source code which must be preprocessed.  Note that in @samp{.cxx},
the last two letters must both be literally @samp{x}.  Likewise,
@samp{.C} refers to a literal capital C@.

@c APPLE LOCAL begin Objective-C++
@c Delete duplicate @var{file}.mm, @var{file}.M, @var{file}.mii.
@c APPLE LOCAL end Objective-C++

@item @var{file}.hh
@itemx @var{file}.H
C++ header file to be turned into a precompiled header.

@item @var{file}.f
@itemx @var{file}.for
@itemx @var{file}.FOR
Fixed form Fortran source code which should not be preprocessed.

@item @var{file}.F
@itemx @var{file}.fpp
@itemx @var{file}.FPP
Fixed form Fortran source code which must be preprocessed (with the traditional
preprocessor).

@item @var{file}.f90
@itemx @var{file}.f95
Free form Fortran source code which should not be preprocessed.

@item @var{file}.F90
@itemx @var{file}.F95
Free form Fortran source code which must be preprocessed (with the
traditional preprocessor).

@c FIXME: Descriptions of Java file types.
@c @var{file}.java
@c @var{file}.class
@c @var{file}.zip
@c @var{file}.jar

@item @var{file}.ads
Ada source code file which contains a library unit declaration (a
declaration of a package, subprogram, or generic, or a generic
instantiation), or a library unit renaming declaration (a package,
generic, or subprogram renaming declaration).  Such files are also
called @dfn{specs}.

@itemx @var{file}.adb
Ada source code file containing a library unit body (a subprogram or
package body).  Such files are also called @dfn{bodies}.

@c GCC also knows about some suffixes for languages not yet included:
@c Pascal:
@c @var{file}.p
@c @var{file}.pas
@c Ratfor:
@c @var{file}.r

@item @var{file}.s
@c APPLE LOCAL begin preprocess .s files
Assembler code.  Apple's version of GCC runs the preprocessor
on these files as well as those ending in @samp{.S}.
@c APPLE LOCAL end preprocess .s files

@item @var{file}.S
Assembler code which must be preprocessed.

@item @var{other}
An object file to be fed straight into linking.
Any file name with no recognized suffix is treated this way.
@end table

@opindex x
You can specify the input language explicitly with the @option{-x} option:

@table @gcctabopt
@item -x @var{language}
Specify explicitly the @var{language} for the following input files
(rather than letting the compiler choose a default based on the file
name suffix).  This option applies to all following input files until
the next @option{-x} option.  Possible values for @var{language} are:
@smallexample
c  c-header  c-cpp-output
c++  c++-header  c++-cpp-output
objective-c  objective-c-header  objective-c-cpp-output
objective-c++ objective-c++-header objective-c++-cpp-output
assembler  assembler-with-cpp
ada
f95  f95-cpp-input
java
treelang
@end smallexample

@item -x none
Turn off any specification of a language, so that subsequent files are
handled according to their file name suffixes (as they are if @option{-x}
has not been used at all).

@c APPLE LOCAL begin -ObjC 2001-08-03 --sts **
@item -ObjC
@itemx -ObjC++
@opindex ObjC
@opindex ObjC++
These are similar in effect to @option{-x objective-c} and @option{-x
objective-c++}, but affect only the choice of compiler for files already
identified as source files.  (APPLE ONLY)
@c APPLE LOCAL end -ObjC 2001-08-03 --sts **

@c APPLE LOCAL begin fat builds
@item -arch @var{arch}
@opindex arch
Compile for the specified target architecture @var{arch}.  The
allowable values are @samp{i386}, @samp{x86_64}, @samp{ppc} and
@samp{ppc64}.  Multiple options work, and direct the compiler to
produce ``universal'' binaries including object code for each
architecture specified with @option{-arch}.  This option only works if
assembler and libraries are available for each architecture specified.
(APPLE ONLY)

@item -Xarch_@var{arch} @var{option}
@opindex Xarch
Apply @var{option} to the command line for architecture @var{arch}.
This is useful for specifying an option that should only apply to
one architecture when building a ``universal'' binary.  (APPLE ONLY)
@c APPLE LOCAL end fat builds

@c APPLE LOCAL begin ss2
@item -fsave-repository=@var{file}
@opindex fsave-repository
Save debug info in separate object file.
This is available only while building PCH in -gfull mode.
@c APPLE LOCAL end ss2

@item -pass-exit-codes
@opindex pass-exit-codes
Normally the @command{gcc} program will exit with the code of 1 if any
phase of the compiler returns a non-success return code.  If you specify
@option{-pass-exit-codes}, the @command{gcc} program will instead return with
numerically highest error produced by any phase that returned an error
indication.  The C, C++, and Fortran frontends return 4, if an internal
compiler error is encountered.
@end table

If you only want some of the stages of compilation, you can use
@option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
one of the options @option{-c}, @option{-S}, or @option{-E} to say where
@command{gcc} is to stop.  Note that some combinations (for example,
@samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.

@table @gcctabopt
@item -c
@opindex c
Compile or assemble the source files, but do not link.  The linking
stage simply is not done.  The ultimate output is in the form of an
object file for each source file.

By default, the object file name for a source file is made by replacing
the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.

Unrecognized input files, not requiring compilation or assembly, are
ignored.

@item -S
@opindex S
Stop after the stage of compilation proper; do not assemble.  The output
is in the form of an assembler code file for each non-assembler input
file specified.

By default, the assembler file name for a source file is made by
replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.

Input files that don't require compilation are ignored.

@item -E
@opindex E
Stop after the preprocessing stage; do not run the compiler proper.  The
output is in the form of preprocessed source code, which is sent to the
standard output.

Input files which don't require preprocessing are ignored.

@cindex output file option
@item -o @var{file}
@opindex o
Place output in file @var{file}.  This applies regardless to whatever
sort of output is being produced, whether it be an executable file,
an object file, an assembler file or preprocessed C code.

If @option{-o} is not specified, the default is to put an executable
file in @file{a.out}, the object file for
@file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
assembler file in @file{@var{source}.s}, a precompiled header file in
@file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
standard output.

@item -v
@opindex v
Print (on standard error output) the commands executed to run the stages
of compilation.  Also print the version number of the compiler driver
program and of the preprocessor and the compiler proper.

@item -###
@opindex ###
Like @option{-v} except the commands are not executed and all command
arguments are quoted.  This is useful for shell scripts to capture the
driver-generated command lines.

@item -pipe
@opindex pipe
Use pipes rather than temporary files for communication between the
various stages of compilation.  This fails to work on some systems where
the assembler is unable to read from a pipe; but the GNU assembler has
no trouble.

@item -combine
@opindex combine
If you are compiling multiple source files, this option tells the driver
to pass all the source files to the compiler at once (for those
languages for which the compiler can handle this).  This will allow
intermodule analysis (IMA) to be performed by the compiler.  Currently the only
language for which this is supported is C@.  If you pass source files for
multiple languages to the driver, using this option, the driver will invoke
the compiler(s) that support IMA once each, passing each compiler all the
source files appropriate for it.  For those languages that do not support
IMA this option will be ignored, and the compiler will be invoked once for
each source file in that language.  If you use this option in conjunction
with @option{-save-temps}, the compiler will generate multiple
pre-processed files
(one for each source file), but only one (combined) @file{.o} or
@file{.s} file.

@item --help
@opindex help
Print (on the standard output) a description of the command line options
understood by @command{gcc}.  If the @option{-v} option is also specified
then @option{--help} will also be passed on to the various processes
invoked by @command{gcc}, so that they can display the command line options
they accept.  If the @option{-Wextra} option is also specified then command
line options which have no documentation associated with them will also
be displayed.

@item --target-help
@opindex target-help
Print (on the standard output) a description of target specific command
line options for each tool.

@item --version
@opindex version
Display the version number and copyrights of the invoked GCC@.

@include @value{srcdir}/../libiberty/at-file.texi
@end table

@node Invoking G++
@section Compiling C++ Programs

@cindex suffixes for C++ source
@cindex C++ source file suffixes
C++ source files conventionally use one of the suffixes @samp{.C},
@samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
@samp{.cxx}; C++ header files often use @samp{.hh} or @samp{.H}; and
preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
files with these names and compiles them as C++ programs even if you
call the compiler the same way as for compiling C programs (usually
with the name @command{gcc}).

@findex g++
@findex c++
However, the use of @command{gcc} does not add the C++ library.
@command{g++} is a program that calls GCC and treats @samp{.c},
@samp{.h} and @samp{.i} files as C++ source files instead of C source
files unless @option{-x} is used, and automatically specifies linking
against the C++ library.  This program is also useful when
precompiling a C header file with a @samp{.h} extension for use in C++
compilations.  On many systems, @command{g++} is also installed with
the name @command{c++}.

@cindex invoking @command{g++}
When you compile C++ programs, you may specify many of the same
command-line options that you use for compiling programs in any
language; or command-line options meaningful for C and related
languages; or options that are meaningful only for C++ programs.
@xref{C Dialect Options,,Options Controlling C Dialect}, for
explanations of options for languages related to C@.
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
explanations of options that are meaningful only for C++ programs.

@node C Dialect Options
@section Options Controlling C Dialect
@cindex dialect options
@cindex language dialect options
@cindex options, dialect

The following options control the dialect of C (or languages derived
from C, such as C++, Objective-C and Objective-C++) that the compiler
accepts:

@table @gcctabopt
@cindex ANSI support
@cindex ISO support
@item -ansi
@opindex ansi
In C mode, support all ISO C90 programs.  In C++ mode,
remove GNU extensions that conflict with ISO C++.

This turns off certain features of GCC that are incompatible with ISO
C90 (when compiling C code), or of standard C++ (when compiling C++ code),
such as the @code{asm} and @code{typeof} keywords, and
predefined macros such as @code{unix} and @code{vax} that identify the
type of system you are using.  It also enables the undesirable and
rarely used ISO trigraph feature.  For the C compiler,
it disables recognition of C++ style @samp{//} comments as well as
the @code{inline} keyword.

The alternate keywords @code{__asm__}, @code{__extension__},
@code{__inline__} and @code{__typeof__} continue to work despite
@option{-ansi}.  You would not want to use them in an ISO C program, of
course, but it is useful to put them in header files that might be included
in compilations done with @option{-ansi}.  Alternate predefined macros
such as @code{__unix__} and @code{__vax__} are also available, with or
without @option{-ansi}.

The @option{-ansi} option does not cause non-ISO programs to be
rejected gratuitously.  For that, @option{-pedantic} is required in
addition to @option{-ansi}.  @xref{Warning Options}.

The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
option is used.  Some header files may notice this macro and refrain
from declaring certain functions or defining certain macros that the
ISO standard doesn't call for; this is to avoid interfering with any
programs that might use these names for other things.

Functions which would normally be built in but do not have semantics
defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
functions with @option{-ansi} is used.  @xref{Other Builtins,,Other
built-in functions provided by GCC}, for details of the functions
affected.

@item -std=
@opindex std
Determine the language standard.  This option is currently only
supported when compiling C or C++.  A value for this option must be
provided; possible values are

@table @samp
@item c89
@itemx iso9899:1990
ISO C90 (same as @option{-ansi}).

@item iso9899:199409
ISO C90 as modified in amendment 1.

@item c99
@itemx c9x
@itemx iso9899:1999
@itemx iso9899:199x
ISO C99.  Note that this standard is not yet fully supported; see
@w{@uref{http://gcc.gnu.org/gcc-4.2/c99status.html}} for more information.  The
names @samp{c9x} and @samp{iso9899:199x} are deprecated.

@item gnu89
Default, ISO C90 plus GNU extensions (including some C99 features).

@item gnu99
@itemx gnu9x
ISO C99 plus GNU extensions.  When ISO C99 is fully implemented in GCC,
this will become the default.  The name @samp{gnu9x} is deprecated.

@item c++98
The 1998 ISO C++ standard plus amendments.

@item gnu++98
The same as @option{-std=c++98} plus GNU extensions.  This is the
default for C++ code.
@end table

Even when this option is not specified, you can still use some of the
features of newer standards in so far as they do not conflict with
previous C standards.  For example, you may use @code{__restrict__} even
when @option{-std=c99} is not specified.

The @option{-std} options specifying some version of ISO C have the same
effects as @option{-ansi}, except that features that were not in ISO C90
but are in the specified version (for example, @samp{//} comments and
the @code{inline} keyword in ISO C99) are not disabled.

@xref{Standards,,Language Standards Supported by GCC}, for details of
these standard versions.

@item -fgnu89-inline
@opindex fgnu89-inline
The option @option{-fgnu89-inline} tells GCC to use the traditional
GNU semantics for @code{inline} functions when in C99 mode.
@xref{Inline,,An Inline Function is As Fast As a Macro}.  Using this
option is roughly equivalent to adding the @code{gnu_inline} function
attribute to all inline functions (@pxref{Function Attributes}).

This option is accepted by GCC versions 4.1.3 and up.  In GCC versions
/* APPLE LOCAL extern inline */
prior to 4.3 (4.2 for Apple's gcc), C99 inline semantics are not supported, and thus this
option is effectively assumed to be present regardless of whether or not
it is specified; the only effect of specifying it explicitly is to
disable warnings about using inline functions in C99 mode.  Likewise,
the option @option{-fno-gnu89-inline} is not supported in versions of
/* APPLE LOCAL extern inline */
GCC before 4.3 (4.2 for Apple's gcc).  It is supported only in C99 or gnu99 mode, not in
C89 or gnu89 mode.

The preprocesor macros @code{__GNUC_GNU_INLINE__} and
@code{__GNUC_STDC_INLINE__} may be used to check which semantics are
in effect for @code{inline} functions.  @xref{Common Predefined
Macros,,,cpp,The C Preprocessor}.

@item -aux-info @var{filename}
@opindex aux-info
Output to the given filename prototyped declarations for all functions
declared and/or defined in a translation unit, including those in header
files.  This option is silently ignored in any language other than C@.

Besides declarations, the file indicates, in comments, the origin of
each declaration (source file and line), whether the declaration was
implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
@samp{O} for old, respectively, in the first character after the line
number and the colon), and whether it came from a declaration or a
definition (@samp{C} or @samp{F}, respectively, in the following
character).  In the case of function definitions, a K&R-style list of
arguments followed by their declarations is also provided, inside
comments, after the declaration.

@c APPLE LOCAL begin AltiVec
@item -faltivec
This flag is provided for compatibility with Metrowerks CodeWarrior and MrC
compilers as well as previous Apple versions of GCC.  It causes the
@option{-mpim-altivec} option to be turned on.
@c APPLE LOCAL end AltiVec

@c APPLE LOCAL begin CW asm blocks
@item -fasm-blocks
Enable the use of blocks and entire functions of assembly code within
a C or C++ file.  The syntax follows that used in CodeWarrior. (APPLE
ONLY)
@c APPLE LOCAL end CW asm blocks

@item -fno-asm
@opindex fno-asm
Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
keyword, so that code can use these words as identifiers.  You can use
the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
instead.  @option{-ansi} implies @option{-fno-asm}.

In C++, this switch only affects the @code{typeof} keyword, since
@code{asm} and @code{inline} are standard keywords.  You may want to
use the @option{-fno-gnu-keywords} flag instead, which has the same
effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
switch only affects the @code{asm} and @code{typeof} keywords, since
@code{inline} is a standard keyword in ISO C99.

@item -fno-builtin
@itemx -fno-builtin-@var{function}
@opindex fno-builtin
@cindex built-in functions
Don't recognize built-in functions that do not begin with
@samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
functions provided by GCC}, for details of the functions affected,
including those which are not built-in functions when @option{-ansi} or
@option{-std} options for strict ISO C conformance are used because they
do not have an ISO standard meaning.

GCC normally generates special code to handle certain built-in functions
more efficiently; for instance, calls to @code{alloca} may become single
instructions that adjust the stack directly, and calls to @code{memcpy}
may become inline copy loops.  The resulting code is often both smaller
and faster, but since the function calls no longer appear as such, you
cannot set a breakpoint on those calls, nor can you change the behavior
of the functions by linking with a different library.  In addition,
when a function is recognized as a built-in function, GCC may use
information about that function to warn about problems with calls to
that function, or to generate more efficient code, even if the
resulting code still contains calls to that function.  For example,
warnings are given with @option{-Wformat} for bad calls to
@code{printf}, when @code{printf} is built in, and @code{strlen} is
known not to modify global memory.

With the @option{-fno-builtin-@var{function}} option
only the built-in function @var{function} is
disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
function is named this is not built-in in this version of GCC, this
option is ignored.  There is no corresponding
@option{-fbuiltin-@var{function}} option; if you wish to enable
built-in functions selectively when using @option{-fno-builtin} or
@option{-ffreestanding}, you may define macros such as:

@smallexample
#define abs(n)          __builtin_abs ((n))
#define strcpy(d, s)    __builtin_strcpy ((d), (s))
@end smallexample

@item -fhosted
@opindex fhosted
@cindex hosted environment

Assert that compilation takes place in a hosted environment.  This implies
@option{-fbuiltin}.  A hosted environment is one in which the
entire standard library is available, and in which @code{main} has a return
type of @code{int}.  Examples are nearly everything except a kernel.
This is equivalent to @option{-fno-freestanding}.

@item -ffreestanding
@opindex ffreestanding
@cindex hosted environment

Assert that compilation takes place in a freestanding environment.  This
implies @option{-fno-builtin}.  A freestanding environment
is one in which the standard library may not exist, and program startup may
not necessarily be at @code{main}.  The most obvious example is an OS kernel.
This is equivalent to @option{-fno-hosted}.

@xref{Standards,,Language Standards Supported by GCC}, for details of
freestanding and hosted environments.

@item -fopenmp
@opindex fopenmp
@cindex openmp parallel
Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
@code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
compiler generates parallel code according to the OpenMP Application
Program Interface v2.5 @w{@uref{http://www.openmp.org/}}.

@item -fms-extensions
@opindex fms-extensions
Accept some non-standard constructs used in Microsoft header files.

Some cases of unnamed fields in structures and unions are only
accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
fields within structs/unions}, for details.

@item -trigraphs
@opindex trigraphs
Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
options for strict ISO C conformance) implies @option{-trigraphs}.

@item -no-integrated-cpp
@opindex no-integrated-cpp
Performs a compilation in two passes: preprocessing and compiling.  This
option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the
@option{-B} option.  The user supplied compilation step can then add in
an additional preprocessing step after normal preprocessing but before
compiling.  The default is to use the integrated cpp (internal cpp)

The semantics of this option will change if "cc1", "cc1plus", and
"cc1obj" are merged.

@cindex traditional C language
@cindex C language, traditional
@item -traditional
@itemx -traditional-cpp
@opindex traditional-cpp
@opindex traditional
Formerly, these options caused GCC to attempt to emulate a pre-standard
C compiler.  They are now only supported with the @option{-E} switch.
The preprocessor continues to support a pre-standard mode.  See the GNU
CPP manual for details.

@item -fcond-mismatch
@opindex fcond-mismatch
Allow conditional expressions with mismatched types in the second and
third arguments.  The value of such an expression is void.  This option
is not supported for C++.

@c APPLE LOCAL begin nested functions 4357979
@item -fno-nested-functions
@opindex fno-nested-functions
Disable nested functions.  This option is not supported for C++ or
Objective-C++.  On Darwin, nested functions are disabled by default.
@c APPLE LOCAL end nested functions 4357979

@c APPLE LOCAL begin pch distcc --mrs
@item -fpch-preprocess
@opindex fpch-preprocess
Enable PCH processing even when @option{-E} or @option{-save-temps} is used.
@c APPLE LOCAL end pch distcc --mrs

@c APPLE LOCAL begin non lvalue assign
@item -fnon-lvalue-assign
@opindex fnon-lvalue-assign
C and C++ forbid the use of casts and conditional expressions as lvalues, e.g.:

@smallexample
float *p, q, r;
((int *)p)++;
(cond ? q : r) = 3.0;
@end smallexample

@noindent
As a transitional measure, the Apple version of GCC 4.0 allows casts and 
conditional expressions to be used as lvalues in certain situations.  This
is accomplished via the @option{-fnon-lvalue-assign} switch, which is on
by default.  Whenever an lvalue cast or an lvalue conditional expression is
encountered, the compiler will issue a deprecation warning and then rewrite
the expression as follows:

@smallexample
(type)expr                ---becomes--->      *(type *)&expr
cond ? expr1 : expr2      ---becomes--->      *(cond ? &expr1 : &expr2)
@end smallexample

To disallow lvalue casts and lvalue conditional expressions altogether, 
specify @option{-fno-non-lvalue-assign}; lvalue casts and lvalue conditional
expressions will be disallowed in future versions of Apple's GCC.
@c APPLE LOCAL end non lvalue assign

@c APPLE LOCAL begin 5612787 sse4
@item -flax-vector-conversions
@opindex flax-vector-conversions
Allow implicit conversions between vectors with differing numbers of
elements and/or incompatible element types.  This option should not be
used for new code.
@c APPLE LOCAL end 5612787 sse4

@item -funsigned-char
@opindex funsigned-char
Let the type @code{char} be unsigned, like @code{unsigned char}.

Each kind of machine has a default for what @code{char} should
be.  It is either like @code{unsigned char} by default or like
@code{signed char} by default.

Ideally, a portable program should always use @code{signed char} or
@code{unsigned char} when it depends on the signedness of an object.
But many programs have been written to use plain @code{char} and
expect it to be signed, or expect it to be unsigned, depending on the
machines they were written for.  This option, and its inverse, let you
make such a program work with the opposite default.

The type @code{char} is always a distinct type from each of
@code{signed char} or @code{unsigned char}, even though its behavior
is always just like one of those two.

@item -fsigned-char
@opindex fsigned-char
Let the type @code{char} be signed, like @code{signed char}.

Note that this is equivalent to @option{-fno-unsigned-char}, which is
the negative form of @option{-funsigned-char}.  Likewise, the option
@option{-fno-signed-char} is equivalent to @option{-funsigned-char}.

@item -fsigned-bitfields
@itemx -funsigned-bitfields
@itemx -fno-signed-bitfields
@itemx -fno-unsigned-bitfields
@opindex fsigned-bitfields
@opindex funsigned-bitfields
@opindex fno-signed-bitfields
@opindex fno-unsigned-bitfields
These options control whether a bit-field is signed or unsigned, when the
declaration does not use either @code{signed} or @code{unsigned}.  By
default, such a bit-field is signed, because this is consistent: the
basic integer types such as @code{int} are signed types.

@c APPLE LOCAL begin constant cfstrings
@item -fconstant-cfstrings
@opindex fconstant-cfstrings
Enable the automatic creation of a CoreFoundation-type constant string
whenever a special builtin @code{__builtin__CFStringMakeConstantString}
is called on a literal string.  (APPLE ONLY)
@c APPLE LOCAL end constant cfstrings

@c APPLE LOCAL begin radar 3506309
@item -Wnonportable-cfstrings
@opindex Wnonportable-cfstrings
Warn if constant CFString objects contain non-portable characters 
(default behavior)
@c APPLE LOCAL end radar 3506309

@c APPLE LOCAL begin 5695218
@item -fglobal-alloc-prefer-bytes
@item -fno-global-alloc-prefer-bytes
@opindex fglobal-alloc-prefer-bytes
For the x86_32 architecture, prefer byte or short values to word
values during global register allocation.  Some of the registers on
this target can't be used with values smaller than a 32-bit word;
allocating these values earlier increases the chance they will get a
byte-capable (or short-capable) register.  Ignored for other targets.
Defaults on with global register allocation (@code{-Os}, @code{-O2},
or @code{-O3}).  (APPLE ONLY)
@c APPLE LOCAL end 5695218
@c APPLE LOCAL begin fwritable strings. 
@item -fwritable-strings
@opindex fwritable-strings
Store string constants in the writable data segment and don't uniquize
them.  This is for compatibility with old programs which assume they can
write into string constants.

Writing into string constants is a very bad idea; ``constants'' should
be constant.

This option is deprecated.
@c APPLE LOCAL end fwritable strings.
@end table

@node C++ Dialect Options
@section Options Controlling C++ Dialect

@cindex compiler options, C++
@cindex C++ options, command line
@cindex options, C++
This section describes the command-line options that are only meaningful
for C++ programs; but you can also use most of the GNU compiler options
regardless of what language your program is in.  For example, you
might compile a file @code{firstClass.C} like this:

@smallexample
g++ -g -frepo -O -c firstClass.C
@end smallexample

@noindent
In this example, only @option{-frepo} is an option meant
only for C++ programs; you can use the other options with any
language supported by GCC@.

Here is a list of options that are @emph{only} for compiling C++ programs:

@table @gcctabopt

@item -fabi-version=@var{n}
@opindex fabi-version
Use version @var{n} of the C++ ABI@.  Version 2 is the version of the
C++ ABI that first appeared in G++ 3.4.  Version 1 is the version of
the C++ ABI that first appeared in G++ 3.2.  Version 0 will always be
the version that conforms most closely to the C++ ABI specification.
Therefore, the ABI obtained using version 0 will change as ABI bugs
are fixed.

The default is version 2.

@item -fno-access-control
@opindex fno-access-control
Turn off all access checking.  This switch is mainly useful for working
around bugs in the access control code.

@item -fcheck-new
@opindex fcheck-new
Check that the pointer returned by @code{operator new} is non-null
before attempting to modify the storage allocated.  This check is
normally unnecessary because the C++ standard specifies that
@code{operator new} will only return @code{0} if it is declared
@samp{throw()}, in which case the compiler will always check the
return value even without this option.  In all other cases, when
@code{operator new} has a non-empty exception specification, memory
exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
@samp{new (nothrow)}.

@item -fconserve-space
@opindex fconserve-space
Put uninitialized or runtime-initialized global variables into the
common segment, as C does.  This saves space in the executable at the
cost of not diagnosing duplicate definitions.  If you compile with this
flag and your program mysteriously crashes after @code{main()} has
completed, you may have an object that is being destroyed twice because
two definitions were merged.

This option is no longer useful on most targets, now that support has
been added for putting variables into BSS without making them common.

@item -ffriend-injection
@opindex ffriend-injection
Inject friend functions into the enclosing namespace, so that they are
visible outside the scope of the class in which they are declared.
Friend functions were documented to work this way in the old Annotated
C++ Reference Manual, and versions of G++ before 4.1 always worked
that way.  However, in ISO C++ a friend function which is not declared
in an enclosing scope can only be found using argument dependent
lookup.  This option causes friends to be injected as they were in
earlier releases.

This option is for compatibility, and may be removed in a future
release of G++.

@item -fno-elide-constructors
@opindex fno-elide-constructors
The C++ standard allows an implementation to omit creating a temporary
which is only used to initialize another object of the same type.
Specifying this option disables that optimization, and forces G++ to
call the copy constructor in all cases.

@item -fno-enforce-eh-specs
@opindex fno-enforce-eh-specs
Don't generate code to check for violation of exception specifications
at runtime.  This option violates the C++ standard, but may be useful
for reducing code size in production builds, much like defining
@samp{NDEBUG}.  This does not give user code permission to throw
exceptions in violation of the exception specifications; the compiler
will still optimize based on the specifications, so throwing an
unexpected exception will result in undefined behavior.

@item -ffor-scope
@itemx -fno-for-scope
@opindex ffor-scope
@opindex fno-for-scope
If @option{-ffor-scope} is specified, the scope of variables declared in
a @i{for-init-statement} is limited to the @samp{for} loop itself,
as specified by the C++ standard.
If @option{-fno-for-scope} is specified, the scope of variables declared in
a @i{for-init-statement} extends to the end of the enclosing scope,
as was the case in old versions of G++, and other (traditional)
implementations of C++.

The default if neither flag is given to follow the standard,
but to allow and give a warning for old-style code that would
otherwise be invalid, or have different behavior.

@item -fno-gnu-keywords
@opindex fno-gnu-keywords
Do not recognize @code{typeof} as a keyword, so that code can use this
word as an identifier.  You can use the keyword @code{__typeof__} instead.
@option{-ansi} implies @option{-fno-gnu-keywords}.

@item -fno-implicit-templates
@opindex fno-implicit-templates
Never emit code for non-inline templates which are instantiated
implicitly (i.e.@: by use); only emit code for explicit instantiations.
@xref{Template Instantiation}, for more information.

@item -fno-implicit-inline-templates
@opindex fno-implicit-inline-templates
Don't emit code for implicit instantiations of inline templates, either.
The default is to handle inlines differently so that compiles with and
without optimization will need the same set of explicit instantiations.

@item -fno-implement-inlines
@opindex fno-implement-inlines
To save space, do not emit out-of-line copies of inline functions
controlled by @samp{#pragma implementation}.  This will cause linker
errors if these functions are not inlined everywhere they are called.

@item -fms-extensions
@opindex fms-extensions
Disable pedantic warnings about constructs used in MFC, such as implicit
int and getting a pointer to member function via non-standard syntax.

@item -fno-nonansi-builtins
@opindex fno-nonansi-builtins
Disable built-in declarations of functions that are not mandated by
ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
@code{index}, @code{bzero}, @code{conjf}, and other related functions.

@item -fno-operator-names
@opindex fno-operator-names
Do not treat the operator name keywords @code{and}, @code{bitand},
@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
synonyms as keywords.

@item -fno-optional-diags
@opindex fno-optional-diags
Disable diagnostics that the standard says a compiler does not need to
issue.  Currently, the only such diagnostic issued by G++ is the one for
a name having multiple meanings within a class.

@item -fpermissive
@opindex fpermissive
Downgrade some diagnostics about nonconformant code from errors to
warnings.  Thus, using @option{-fpermissive} will allow some
nonconforming code to compile.

@item -frepo
@opindex frepo
Enable automatic template instantiation at link time.  This option also
implies @option{-fno-implicit-templates}.  @xref{Template
Instantiation}, for more information.

@item -fno-rtti
@opindex fno-rtti
Disable generation of information about every class with virtual
functions for use by the C++ runtime type identification features
(@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
of the language, you can save some space by using this flag.  Note that
exception handling uses the same information, but it will generate it as
needed. The @samp{dynamic_cast} operator can still be used for casts that
do not require runtime type information, i.e. casts to @code{void *} or to
unambiguous base classes.

@item -fstats
@opindex fstats
Emit statistics about front-end processing at the end of the compilation.
This information is generally only useful to the G++ development team.

@item -ftemplate-depth-@var{n}
@opindex ftemplate-depth
Set the maximum instantiation depth for template classes to @var{n}.
A limit on the template instantiation depth is needed to detect
endless recursions during template class instantiation.  ANSI/ISO C++
conforming programs must not rely on a maximum depth greater than 17.

@item -fno-threadsafe-statics
@opindex fno-threadsafe-statics
Do not emit the extra code to use the routines specified in the C++
ABI for thread-safe initialization of local statics.  You can use this
option to reduce code size slightly in code that doesn't need to be
thread-safe.

@item -fuse-cxa-atexit
@opindex fuse-cxa-atexit
Register destructors for objects with static storage duration with the
@code{__cxa_atexit} function rather than the @code{atexit} function.
This option is required for fully standards-compliant handling of static
destructors, but will only work if your C library supports
@code{__cxa_atexit}.

@item -fno-use-cxa-get-exception-ptr
@opindex fno-use-cxa-get-exception-ptr
Don't use the @code{__cxa_get_exception_ptr} runtime routine.  This
will cause @code{std::uncaught_exception} to be incorrect, but is necessary
if the runtime routine is not available.

@item -fvisibility-inlines-hidden
@opindex fvisibility-inlines-hidden
This switch declares that the user does not attempt to compare
pointers to inline methods where the addresses of the two functions
were taken in different shared objects.

The effect of this is that GCC may, effectively, mark inline methods with
@code{__attribute__ ((visibility ("hidden")))} so that they do not
appear in the export table of a DSO and do not require a PLT indirection
when used within the DSO@.  Enabling this option can have a dramatic effect
on load and link times of a DSO as it massively reduces the size of the
dynamic export table when the library makes heavy use of templates.

The behaviour of this switch is not quite the same as marking the
methods as hidden directly, because it does not affect static variables
local to the function or cause the compiler to deduce that
the function is defined in only one shared object.

You may mark a method as having a visibility explicitly to negate the
effect of the switch for that method.  For example, if you do want to
compare pointers to a particular inline method, you might mark it as
having default visibility.  Marking the enclosing class with explicit
visibility will have no effect.

Explicitly instantiated inline methods are unaffected by this option
as their linkage might otherwise cross a shared library boundary.
@xref{Template Instantiation}.

@c APPLE LOCAL begin mainline 2007-06-28 ms tinfo compat 4230099
@item -fvisibility-ms-compat
@opindex fvisibility-ms-compat
This flag attempts to use visibility settings to make GCC's C++
linkage model compatible with that of Microsoft Visual Studio.

The flag makes these changes to GCC's linkage model:

1. It sets the default visibility to 'hidden', like 
@option{-fvisibility=hidden}.
2. Types, but not their members, are not hidden by default.
3. The One Definition Rule is relaxed for types without explicit
visibility specifications which are defined in more than one different
shared object: those declarations are permitted if they would have
been permitted when this option was not used.

This option is discouraged, rather, it is preferable for types to be
explicitly exported as desired on a per-class basis.  Unfortunately
because Visual Studio can't compare two different hidden types as
unequal for the purposes of type_info and exception handling, users
are able to write code that relies upon this behavior.

Among the consequences of these changes are that static data members
of the same type with the same name but defined in different shared
objects will be different, so changing one will not change the other;
and that pointers to function members defined in different shared
objects will not compare equal.  When this flag is given, it is a
violation of the ODR to define types with the same name differently.
@c APPLE LOCAL end mainline 2007-06-28 ms tinfo compat 4230099

@item -fno-weak
@opindex fno-weak
Do not use weak symbol support, even if it is provided by the linker.
By default, G++ will use weak symbols if they are available.  This
option exists only for testing, and should not be used by end-users;
it will result in inferior code and has no benefits.  This option may
be removed in a future release of G++.

@item -nostdinc++
@opindex nostdinc++
Do not search for header files in the standard directories specific to
C++, but do still search the other standard directories.  (This option
is used when building the C++ library.)
@end table

In addition, these optimization, warning, and code generation options
have meanings only for C++ programs:

@table @gcctabopt
@item -fno-default-inline
@opindex fno-default-inline
Do not assume @samp{inline} for functions defined inside a class scope.
@xref{Optimize Options,,Options That Control Optimization}.  Note that these
functions will have linkage like inline functions; they just won't be
inlined by default.

@item -Wabi @r{(C++ only)}
@opindex Wabi
Warn when G++ generates code that is probably not compatible with the
vendor-neutral C++ ABI@.  Although an effort has been made to warn about
all such cases, there are probably some cases that are not warned about,
even though G++ is generating incompatible code.  There may also be
cases where warnings are emitted even though the code that is generated
will be compatible.

You should rewrite your code to avoid these warnings if you are
concerned about the fact that code generated by G++ may not be binary
compatible with code generated by other compilers.

The known incompatibilities at this point include:

@itemize @bullet

@item
Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
pack data into the same byte as a base class.  For example:

@smallexample
struct A @{ virtual void f(); int f1 : 1; @};
struct B : public A @{ int f2 : 1; @};
@end smallexample

@noindent
In this case, G++ will place @code{B::f2} into the same byte
as@code{A::f1}; other compilers will not.  You can avoid this problem
by explicitly padding @code{A} so that its size is a multiple of the
byte size on your platform; that will cause G++ and other compilers to
layout @code{B} identically.

@item
Incorrect handling of tail-padding for virtual bases.  G++ does not use
tail padding when laying out virtual bases.  For example:

@smallexample
struct A @{ virtual void f(); char c1; @};
struct B @{ B(); char c2; @};
struct C : public A, public virtual B @{@};
@end smallexample

@noindent
In this case, G++ will not place @code{B} into the tail-padding for
@code{A}; other compilers will.  You can avoid this problem by
explicitly padding @code{A} so that its size is a multiple of its
alignment (ignoring virtual base classes); that will cause G++ and other
compilers to layout @code{C} identically.

@item
Incorrect handling of bit-fields with declared widths greater than that
of their underlying types, when the bit-fields appear in a union.  For
example:

@smallexample
union U @{ int i : 4096; @};
@end smallexample

@noindent
Assuming that an @code{int} does not have 4096 bits, G++ will make the
union too small by the number of bits in an @code{int}.

@item
Empty classes can be placed at incorrect offsets.  For example:

@smallexample
struct A @{@};

struct B @{
  A a;
  virtual void f ();
@};

struct C : public B, public A @{@};
@end smallexample

@noindent
G++ will place the @code{A} base class of @code{C} at a nonzero offset;
it should be placed at offset zero.  G++ mistakenly believes that the
@code{A} data member of @code{B} is already at offset zero.

@item
Names of template functions whose types involve @code{typename} or
template template parameters can be mangled incorrectly.

@smallexample
template <typename Q>
void f(typename Q::X) @{@}

template <template <typename> class Q>
void f(typename Q<int>::X) @{@}
@end smallexample

@noindent
Instantiations of these templates may be mangled incorrectly.

@end itemize

@item -Wctor-dtor-privacy @r{(C++ only)}
@opindex Wctor-dtor-privacy
Warn when a class seems unusable because all the constructors or
destructors in that class are private, and it has neither friends nor
public static member functions.

@item -Wnon-virtual-dtor @r{(C++ only)}
@opindex Wnon-virtual-dtor
Warn when a class appears to be polymorphic, thereby requiring a virtual
destructor, yet it declares a non-virtual one.  This warning is also
enabled if -Weffc++ is specified.

@item -Wreorder @r{(C++ only)}
@opindex Wreorder
@cindex reordering, warning
@cindex warning for reordering of member initializers
Warn when the order of member initializers given in the code does not
match the order in which they must be executed.  For instance:

@smallexample
struct A @{
  int i;
  int j;
  A(): j (0), i (1) @{ @}
@};
@end smallexample

The compiler will rearrange the member initializers for @samp{i}
and @samp{j} to match the declaration order of the members, emitting
a warning to that effect.  This warning is enabled by @option{-Wall}.
@end table

The following @option{-W@dots{}} options are not affected by @option{-Wall}.

@table @gcctabopt
@item -Weffc++ @r{(C++ only)}
@opindex Weffc++
Warn about violations of the following style guidelines from Scott Meyers'
@cite{Effective C++} book:

@itemize @bullet
@item
Item 11:  Define a copy constructor and an assignment operator for classes
with dynamically allocated memory.

@item
Item 12:  Prefer initialization to assignment in constructors.

@item
Item 14:  Make destructors virtual in base classes.

@item
Item 15:  Have @code{operator=} return a reference to @code{*this}.

@item
Item 23:  Don't try to return a reference when you must return an object.

@end itemize

Also warn about violations of the following style guidelines from
Scott Meyers' @cite{More Effective C++} book:

@itemize @bullet
@item
Item 6:  Distinguish between prefix and postfix forms of increment and
decrement operators.

@item
Item 7:  Never overload @code{&&}, @code{||}, or @code{,}.

@end itemize

When selecting this option, be aware that the standard library
headers do not obey all of these guidelines; use @samp{grep -v}
to filter out those warnings.

@item -Wno-deprecated @r{(C++ only)}
@opindex Wno-deprecated
Do not warn about usage of deprecated features.  @xref{Deprecated Features}.

@item -Wstrict-null-sentinel @r{(C++ only)}
@opindex Wstrict-null-sentinel
Warn also about the use of an uncasted @code{NULL} as sentinel.  When
compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
to @code{__null}.  Although it is a null pointer constant not a null pointer,
it is guaranteed to of the same size as a pointer.  But this use is
not portable across different compilers.

@item -Wno-non-template-friend @r{(C++ only)}
@opindex Wno-non-template-friend
Disable warnings when non-templatized friend functions are declared
within a template.  Since the advent of explicit template specification
support in G++, if the name of the friend is an unqualified-id (i.e.,
@samp{friend foo(int)}), the C++ language specification demands that the
friend declare or define an ordinary, nontemplate function.  (Section
14.5.3).  Before G++ implemented explicit specification, unqualified-ids
could be interpreted as a particular specialization of a templatized
function.  Because this non-conforming behavior is no longer the default
behavior for G++, @option{-Wnon-template-friend} allows the compiler to
check existing code for potential trouble spots and is on by default.
This new compiler behavior can be turned off with
@option{-Wno-non-template-friend} which keeps the conformant compiler code
but disables the helpful warning.

@item -Wold-style-cast @r{(C++ only)}
@opindex Wold-style-cast
Warn if an old-style (C-style) cast to a non-void type is used within
a C++ program.  The new-style casts (@samp{dynamic_cast},
@samp{static_cast}, @samp{reinterpret_cast}, and @samp{const_cast}) are
less vulnerable to unintended effects and much easier to search for.

@item -Woverloaded-virtual @r{(C++ only)}
@opindex Woverloaded-virtual
@cindex overloaded virtual fn, warning
@cindex warning for overloaded virtual fn
Warn when a function declaration hides virtual functions from a
base class.  For example, in:

@smallexample
struct A @{
  virtual void f();
@};

struct B: public A @{
  void f(int);
@};
@end smallexample

the @code{A} class version of @code{f} is hidden in @code{B}, and code
like:

@smallexample
B* b;
b->f();
@end smallexample

will fail to compile.

@item -Wno-pmf-conversions @r{(C++ only)}
@opindex Wno-pmf-conversions
Disable the diagnostic for converting a bound pointer to member function
to a plain pointer.

@item -Wsign-promo @r{(C++ only)}
@opindex Wsign-promo
Warn when overload resolution chooses a promotion from unsigned or
enumerated type to a signed type, over a conversion to an unsigned type of
the same size.  Previous versions of G++ would try to preserve
unsignedness, but the standard mandates the current behavior.

@smallexample
struct A @{
  operator int ();
  A& operator = (int);
@};

main ()
@{
  A a,b;
  a = b;
@}
@end smallexample

In this example, G++ will synthesize a default @samp{A& operator =
(const A&);}, while cfront will use the user-defined @samp{operator =}.
@end table

@node Objective-C and Objective-C++ Dialect Options
@section Options Controlling Objective-C and Objective-C++ Dialects

@cindex compiler options, Objective-C and Objective-C++
@cindex Objective-C and Objective-C++ options, command line
@cindex options, Objective-C and Objective-C++
(NOTE: This manual does not describe the Objective-C and Objective-C++
languages themselves.  See @xref{Standards,,Language Standards
Supported by GCC}, for references.)

This section describes the command-line options that are only meaningful
for Objective-C and Objective-C++ programs, but you can also use most of
the language-independent GNU compiler options.
For example, you might compile a file @code{some_class.m} like this:

@smallexample
gcc -g -fgnu-runtime -O -c some_class.m
@end smallexample

@noindent
In this example, @option{-fgnu-runtime} is an option meant only for
Objective-C and Objective-C++ programs; you can use the other options with
any language supported by GCC@.

Note that since Objective-C is an extension of the C language, Objective-C
compilations may also use options specific to the C front-end (e.g.,
@option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
C++-specific options (e.g., @option{-Wabi}).

Here is a list of options that are @emph{only} for compiling Objective-C
and Objective-C++ programs:

@table @gcctabopt
@item -fconstant-string-class=@var{class-name}
@opindex fconstant-string-class
Use @var{class-name} as the name of the class to instantiate for each
literal string specified with the syntax @code{@@"@dots{}"}.  The default
class name is @code{NXConstantString} if the GNU runtime is being used, and
@code{NSConstantString} if the NeXT runtime is being used (see below).  The
@option{-fconstant-cfstrings} option, if also present, will override the
@option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
to be laid out as constant CoreFoundation strings.

@item -fgnu-runtime
@opindex fgnu-runtime
Generate object code compatible with the standard GNU Objective-C
runtime.  This is the default for most types of systems.

@item -fnext-runtime
@opindex fnext-runtime
Generate output compatible with the NeXT runtime.  This is the default
for NeXT-based systems, including Darwin and Mac OS X@.  The macro
@code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
used.

@item -fno-nil-receivers
@opindex fno-nil-receivers
Assume that all Objective-C message dispatches (e.g.,
@code{[receiver message:arg]}) in this translation unit ensure that the receiver
is not @code{nil}.  This allows for more efficient entry points in the runtime
to be used.  Currently, this option is only available in conjunction with
the NeXT runtime on Mac OS X 10.3 and later.

@item -fobjc-call-cxx-cdtors
@opindex fobjc-call-cxx-cdtors
For each Objective-C class, check if any of its instance variables is a
C++ object with a non-trivial default constructor.  If so, synthesize a
special @code{- (id) .cxx_construct} instance method that will run
non-trivial default constructors on any such instance variables, in order,
and then return @code{self}.  Similarly, check if any instance variable
is a C++ object with a non-trivial destructor, and if so, synthesize a
special @code{- (void) .cxx_destruct} method that will run
all such default destructors, in reverse order.

The @code{- (id) .cxx_construct} and/or @code{- (void) .cxx_destruct} methods
thusly generated will only operate on instance variables declared in the
current Objective-C class, and not those inherited from superclasses.  It
is the responsibility of the Objective-C runtime to invoke all such methods
in an object's inheritance hierarchy.  The @code{- (id) .cxx_construct} methods
will be invoked by the runtime immediately after a new object
instance is allocated; the @code{- (void) .cxx_destruct} methods will
be invoked immediately before the runtime deallocates an object instance.

As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
support for invoking the @code{- (id) .cxx_construct} and
@code{- (void) .cxx_destruct} methods.

@item -fobjc-direct-dispatch
@opindex fobjc-direct-dispatch
Allow fast jumps to the message dispatcher.  On Darwin this is
accomplished via the comm page.

@c APPLE LOCAL begin radar 4512786
@item -fobjc-sjlj-exceptions
@opindex fobjc-sjlj-exceptions
Enable syntactic support for structured exception handling in Objective-C,
similar to what is offered by C++ and Java.  This option is
unavailable in conjunction with the NeXT runtime on Mac OS X 10.2 and
earlier.
This option is on by default with the NeXT runtime.
@c APPLE LOCAL end radar 4512786

@smallexample
  @@try @{
    @dots{}
       @@throw expr;
    @dots{}
  @}
  @@catch (AnObjCClass *exc) @{
    @dots{}
      @@throw expr;
    @dots{}
      @@throw;
    @dots{}
  @}
  @@catch (AnotherClass *exc) @{
    @dots{}
  @}
  @@catch (id allOthers) @{
    @dots{}
  @}
  @@finally @{
    @dots{}
      @@throw expr;
    @dots{}
  @}
@end smallexample

The @code{@@throw} statement may appear anywhere in an Objective-C or
Objective-C++ program; when used inside of a @code{@@catch} block, the
@code{@@throw} may appear without an argument (as shown above), in which case
the object caught by the @code{@@catch} will be rethrown.

Note that only (pointers to) Objective-C objects may be thrown and
caught using this scheme.  When an object is thrown, it will be caught
by the nearest @code{@@catch} clause capable of handling objects of that type,
analogously to how @code{catch} blocks work in C++ and Java.  A
@code{@@catch(id @dots{})} clause (as shown above) may also be provided to catch
any and all Objective-C exceptions not caught by previous @code{@@catch}
clauses (if any).

The @code{@@finally} clause, if present, will be executed upon exit from the
immediately preceding @code{@@try @dots{} @@catch} section.  This will happen
regardless of whether any exceptions are thrown, caught or rethrown
inside the @code{@@try @dots{} @@catch} section, analogously to the behavior
of the @code{finally} clause in Java.

There are several caveats to using the new exception mechanism:

@itemize @bullet
@item
Although currently designed to be binary compatible with @code{NS_HANDLER}-style
idioms provided by the @code{NSException} class, the new
exceptions can only be used on Mac OS X 10.3 (Panther) and later
systems, due to additional functionality needed in the (NeXT) Objective-C
runtime.

@item
As mentioned above, the new exceptions do not support handling
types other than Objective-C objects.   Furthermore, when used from
Objective-C++, the Objective-C exception model does not interoperate with C++
exceptions at this time.  This means you cannot @code{@@throw} an exception
from Objective-C and @code{catch} it in C++, or vice versa
(i.e., @code{throw @dots{} @@catch}).
@end itemize

@c APPLE LOCAL radar 4512786
The @option{-fobjc-sjlj-exceptions} switch also enables the use of synchronization
blocks for thread-safe execution:

@smallexample
  @@synchronized (ObjCClass *guard) @{
    @dots{}
  @}
@end smallexample

Upon entering the @code{@@synchronized} block, a thread of execution shall
first check whether a lock has been placed on the corresponding @code{guard}
object by another thread.  If it has, the current thread shall wait until
the other thread relinquishes its lock.  Once @code{guard} becomes available,
the current thread will place its own lock on it, execute the code contained in
the @code{@@synchronized} block, and finally relinquish the lock (thereby
making @code{guard} available to other threads).

Unlike Java, Objective-C does not allow for entire methods to be marked
@code{@@synchronized}.  Note that throwing exceptions out of
@code{@@synchronized} blocks is allowed, and will cause the guarding object
to be unlocked properly.

@item -fobjc-gc
@opindex fobjc-gc
Enable garbage collection (GC) in Objective-C and Objective-C++ programs.
@c APPLE LOCAL begin radar 5780114  - ObjC GC
The resulting binary requires additional runtime support which is present on 
Mac OS X Version 10.5 (Leopard) and later.  All Objective-C objects are presumed 
to be garbage collected. To aid in this effort, compiler implements assignments 
of Objective-C object pointers via runtime support functions. These functions work 
correctly in non-GC environments as well, in case this code is used as part of a 
library.  Assignments of objects into instance variables of other objects are 
intercepted, so are assignments to global object variables. In general, assignments 
through pointers to objects are intercepted. Additionally, assignments of objects 
as fields within structures are intercepted.

In addition, other pointer variables may be marked with the __strong storage class 
modifier to indicate to the compiler that these assignments need to use the assignment 
runtime functions as well, allowing the memory referenced by these pointers to be 
allocated from the collector. A __weak storage class modifier for pointers is also 
introduced to indicate a zero-ing weak reference. This is permitted only for instance 
variables of an object or globals.  The compiler arranges for all reads as well as 
writes to these variables to occur via runtime support functions.  Under garbage 
collection these variables are not consulted when determining what is not garbage 
and they are set to nil (zero) if the memory they reference is deemed garbage and is 
collected.

@smallexample
  __strong void *p;  // assignments to 'p' will have runtime support calls
  int *q;            // assignments to 'q' ordinarly will not
    @dots{}
  (__strong int *)q = 0;   // this assignment will call a runtime support function
@end smallexample

Conversely, the @code{__weak} type qualifier may be used to call weak runtime 
functions.

@smallexample
  __weak id q;      // assignments to 'q' will have the '__weak' semantics
  id p;             // assignments to 'p' will have the "__strong' semantics
    @dots{}
  (__weak id)p = 0;   // Fall back to '__weak' semantics in this assignment.
@end smallexample

@item -fobjc-gc-only
@opindex fobjc-gc-only
Use this option to indicate that the Objective-C program supports garbage 
collection (GC) only - that is, it does not contain retain/release logic.
This flag implies @option{-fobjc-gc} as well. With this flag, framework
is marked as not honoring retain/release.

@c APPLE LOCAL end radar 5780114 - ObjC GC
@item -freplace-objc-classes
@opindex freplace-objc-classes
Emit a special marker instructing @command{ld(1)} not to statically link in
the resulting object file, and allow @command{dyld(1)} to load it in at
run time instead.  This is used in conjunction with the Fix-and-Continue
debugging mode, where the object file in question may be recompiled and
dynamically reloaded in the course of program execution, without the need
to restart the program itself.  Currently, Fix-and-Continue functionality
is only available in conjunction with the NeXT runtime on Mac OS X 10.3
and later.

@item -fzero-link
@opindex fzero-link
When compiling for the NeXT runtime, the compiler ordinarily replaces calls
to @code{objc_getClass("@dots{}")} (when the name of the class is known at
compile time) with static class references that get initialized at load time,
which improves run-time performance.  Specifying the @option{-fzero-link} flag
suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
to be retained.  This is useful in Zero-Link debugging mode, since it allows
for individual class implementations to be modified during program execution.

@item -gen-decls
@opindex gen-decls
Dump interface declarations for all classes seen in the source file to a
file named @file{@var{sourcename}.decl}.

@item -Wassign-intercept
@opindex Wassign-intercept
Warn whenever an Objective-C assignment is being intercepted by the
garbage collector.

@item -Wno-protocol
@opindex Wno-protocol
If a class is declared to implement a protocol, a warning is issued for
every method in the protocol that is not implemented by the class.  The
default behavior is to issue a warning for every method not explicitly
implemented in the class, even if a method implementation is inherited
from the superclass.  If you use the @option{-Wno-protocol} option, then
methods inherited from the superclass are considered to be implemented,
and no warning is issued for them.

@item -Wselector
@opindex Wselector
Warn if multiple methods of different types for the same selector are
found during compilation.  The check is performed on the list of methods
in the final stage of compilation.  Additionally, a check is performed
for each selector appearing in a @code{@@selector(@dots{})}
expression, and a corresponding method for that selector has been found
during compilation.  Because these checks scan the method table only at
the end of compilation, these warnings are not produced if the final
stage of compilation is not reached, for example because an error is
found during compilation, or because the @option{-fsyntax-only} option is
being used.

@c APPLE LOCAL begin radar 5172645
@item -Wproperty-assign-default
@opindex Wproperty-assign-default
Warn if no ``assign'', ``retain'', or ``copy'' attribute is specified on 
a property of pointer to object type. Property is then assumed to be
``assign'' by default.
@c APPLE LOCAL end radar 5172645

@c APPLE LOCAL begin radar 5376125
@item -Wdirect-ivar-access
@opindex Wdirect-ivar-access
Warn if ivar of pointer to object type is directly accessed in non-gc
mode, instead of using property syntax access.
@c APPLE LOCAL end radar 5376125
 
@item -Wstrict-selector-match
@opindex Wstrict-selector-match
Warn if multiple methods with differing argument and/or return types are
found for a given selector when attempting to send a message using this
selector to a receiver of type @code{id} or @code{Class}.  When this flag
is off (which is the default behavior), the compiler will omit such warnings
if any differences found are confined to types which share the same size
and alignment.

@item -Wundeclared-selector
@opindex Wundeclared-selector
Warn if a @code{@@selector(@dots{})} expression referring to an
undeclared selector is found.  A selector is considered undeclared if no
method with that name has been declared before the
@code{@@selector(@dots{})} expression, either explicitly in an
@code{@@interface} or @code{@@protocol} declaration, or implicitly in
an @code{@@implementation} section.  This option always performs its
checks as soon as a @code{@@selector(@dots{})} expression is found,
while @option{-Wselector} only performs its checks in the final stage of
compilation.  This also enforces the coding style convention
that methods and selectors must be declared before being used.

@item -print-objc-runtime-info
@opindex print-objc-runtime-info
Generate C header describing the largest structure that is passed by
value, if any.

@end table

@node Language Independent Options
@section Options to Control Diagnostic Messages Formatting
@cindex options to control diagnostics formatting
@cindex diagnostic messages
@cindex message formatting

Traditionally, diagnostic messages have been formatted irrespective of
the output device's aspect (e.g.@: its width, @dots{}).  The options described
below can be used to control the diagnostic messages formatting
algorithm, e.g.@: how many characters per line, how often source location
information should be reported.  Right now, only the C++ front end can
honor these options.  However it is expected, in the near future, that
the remaining front ends would be able to digest them correctly.

@table @gcctabopt
@item -fmessage-length=@var{n}
@opindex fmessage-length
Try to format error messages so that they fit on lines of about @var{n}
characters.  The default is 72 characters for @command{g++} and 0 for the rest of
the front ends supported by GCC@.  If @var{n} is zero, then no
line-wrapping will be done; each error message will appear on a single
line.

@opindex fdiagnostics-show-location
@item -fdiagnostics-show-location=once
Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
reporter to emit @emph{once} source location information; that is, in
case the message is too long to fit on a single physical line and has to
be wrapped, the source location won't be emitted (as prefix) again,
over and over, in subsequent continuation lines.  This is the default
behavior.

@item -fdiagnostics-show-location=every-line
Only meaningful in line-wrapping mode.  Instructs the diagnostic
messages reporter to emit the same source location information (as
prefix) for physical lines that result from the process of breaking
a message which is too long to fit on a single line.

@item -fdiagnostics-show-option
@opindex fdiagnostics-show-option
This option instructs the diagnostic machinery to add text to each
diagnostic emitted, which indicates which command line option directly
controls that diagnostic, when such an option is known to the
diagnostic machinery.

@end table

@node Warning Options
@section Options to Request or Suppress Warnings
@cindex options to control warnings
@cindex warning messages
@cindex messages, warning
@cindex suppressing warnings

Warnings are diagnostic messages that report constructions which
are not inherently erroneous but which are risky or suggest there
may have been an error.

You can request many specific warnings with options beginning @samp{-W},
for example @option{-Wimplicit} to request warnings on implicit
declarations.  Each of these specific warning options also has a
negative form beginning @samp{-Wno-} to turn off warnings;
for example, @option{-Wno-implicit}.  This manual lists only one of the
two forms, whichever is not the default.

The following options control the amount and kinds of warnings produced
by GCC; for further, language-specific options also refer to
@ref{C++ Dialect Options} and @ref{Objective-C and Objective-C++ Dialect
Options}.

@table @gcctabopt
@cindex syntax checking
@item -fsyntax-only
@opindex fsyntax-only
Check the code for syntax errors, but don't do anything beyond that.

@item -pedantic
@opindex pedantic
Issue all the warnings demanded by strict ISO C and ISO C++;
reject all programs that use forbidden extensions, and some other
programs that do not follow ISO C and ISO C++.  For ISO C, follows the
version of the ISO C standard specified by any @option{-std} option used.

Valid ISO C and ISO C++ programs should compile properly with or without
this option (though a rare few will require @option{-ansi} or a
@option{-std} option specifying the required version of ISO C)@.  However,
without this option, certain GNU extensions and traditional C and C++
features are supported as well.  With this option, they are rejected.

@option{-pedantic} does not cause warning messages for use of the
alternate keywords whose names begin and end with @samp{__}.  Pedantic
warnings are also disabled in the expression that follows
@code{__extension__}.  However, only system header files should use
these escape routes; application programs should avoid them.
@xref{Alternate Keywords}.

Some users try to use @option{-pedantic} to check programs for strict ISO
C conformance.  They soon find that it does not do quite what they want:
it finds some non-ISO practices, but not all---only those for which
ISO C @emph{requires} a diagnostic, and some others for which
diagnostics have been added.

A feature to report any failure to conform to ISO C might be useful in
some instances, but would require considerable additional work and would
be quite different from @option{-pedantic}.  We don't have plans to
support such a feature in the near future.

Where the standard specified with @option{-std} represents a GNU
extended dialect of C, such as @samp{gnu89} or @samp{gnu99}, there is a
corresponding @dfn{base standard}, the version of ISO C on which the GNU
extended dialect is based.  Warnings from @option{-pedantic} are given
where they are required by the base standard.  (It would not make sense
for such warnings to be given only for features not in the specified GNU
C dialect, since by definition the GNU dialects of C include all
features the compiler supports with the given option, and there would be
nothing to warn about.)

@item -pedantic-errors
@opindex pedantic-errors
Like @option{-pedantic}, except that errors are produced rather than
warnings.

@item -w
@opindex w
Inhibit all warning messages.

@item -Wno-import
@opindex Wno-import
Inhibit warning messages about the use of @samp{#import}.

@c APPLE LOCAL begin -Wno-#warnings
@item -Wno-#warnings
@opindex Wno-#warnings
Inhibit warning messages issued by @samp{#warning}.
@c APPLE LOCAL end -Wno-#warnings

@c APPLE LOCAL begin -Wextra-tokens 2001-08-02 --sts **
@item -Wextra-tokens
@opindex Wextra-tokens
Warn about extra tokens at the end of prepreprocessor directives.  (APPLE ONLY)
@c APPLE LOCAL end -Wextra-tokens 2001-08-02 --sts **

@c APPLE LOCAL begin -Wnewline-eof 2001-08-23 --sts **
@item -Wnewline-eof
@opindex Wnewline-eof
Warn about files missing a newline at the end of the file.  (APPLE ONLY)
@c APPLE LOCAL end -Wnewline-eof 2001-08-23 --sts **

@c APPLE LOCAL begin -Wno-altivec-long-deprecated --ilr **
@item -Wno-altivec-long-deprecated
@opindex Wno-altivec-long-deprecated
Do not warn about the use of the deprecated 'long' keyword in
AltiVec data types.  (APPLE ONLY)
@c APPLE LOCAL end -Wno-altivec-long-deprecated --ilr **

@item -Wchar-subscripts
@opindex Wchar-subscripts
Warn if an array subscript has type @code{char}.  This is a common cause
of error, as programmers often forget that this type is signed on some
machines.
This warning is enabled by @option{-Wall}.

@item -Wcomment
@opindex Wcomment
Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
This warning is enabled by @option{-Wall}.

@item -Wfatal-errors
@opindex Wfatal-errors
This option causes the compiler to abort compilation on the first error
occurred rather than trying to keep going and printing further error
messages.

@c APPLE LOCAL begin default to Wformat-security 5764921
@item -Wno-format
@opindex Wno-format
@c APPLE LOCAL end default to Wformat-security 5764921
@opindex ffreestanding
@opindex fno-builtin
Check calls to @code{printf} and @code{scanf}, etc., to make sure that
the arguments supplied have types appropriate to the format string
specified, and that the conversions specified in the format string make
sense.  This includes standard functions, and others specified by format
attributes (@pxref{Function Attributes}), in the @code{printf},
@code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
not in the C standard) families (or other target-specific families).
Which functions are checked without format attributes having been
specified depends on the standard version selected, and such checks of
functions without the attribute specified are disabled by
@option{-ffreestanding} or @option{-fno-builtin}.

The formats are checked against the format features supported by GNU
libc version 2.2.  These include all ISO C90 and C99 features, as well
as features from the Single Unix Specification and some BSD and GNU
extensions.  Other library implementations may not support all these
features; GCC does not support warning about features that go beyond a
particular library's limitations.  However, if @option{-pedantic} is used
with @option{-Wformat}, warnings will be given about format features not
in the selected standard version (but not for @code{strfmon} formats,
since those are not in any version of the C standard).  @xref{C Dialect
Options,,Options Controlling C Dialect}.

Since @option{-Wformat} also checks for null format arguments for
several functions, @option{-Wformat} also implies @option{-Wnonnull}.

@option{-Wformat} is included in @option{-Wall}.  For more control over some
aspects of format checking, the options @option{-Wformat-y2k},
@option{-Wno-format-extra-args}, @option{-Wno-format-zero-length},
@option{-Wformat-nonliteral}, @option{-Wformat-security}, and
@option{-Wformat=2} are available, but are not included in @option{-Wall}.

@item -Wformat-y2k
@opindex Wformat-y2k
If @option{-Wformat} is specified, also warn about @code{strftime}
formats which may yield only a two-digit year.

@item -Wno-format-extra-args
@opindex Wno-format-extra-args
If @option{-Wformat} is specified, do not warn about excess arguments to a
@code{printf} or @code{scanf} format function.  The C standard specifies
that such arguments are ignored.

Where the unused arguments lie between used arguments that are
specified with @samp{$} operand number specifications, normally
warnings are still given, since the implementation could not know what
type to pass to @code{va_arg} to skip the unused arguments.  However,
in the case of @code{scanf} formats, this option will suppress the
warning if the unused arguments are all pointers, since the Single
Unix Specification says that such unused arguments are allowed.

@item -Wno-format-zero-length
@opindex Wno-format-zero-length
If @option{-Wformat} is specified, do not warn about zero-length formats.
The C standard specifies that zero-length formats are allowed.

@item -Wformat-nonliteral
@opindex Wformat-nonliteral
If @option{-Wformat} is specified, also warn if the format string is not a
string literal and so cannot be checked, unless the format function
takes its format arguments as a @code{va_list}.

@c APPLE LOCAL begin default to Wformat-security 5764921
@item -Wno-format-security
@opindex Wno-format-security
@c APPLE LOCAL end default to Wformat-security 5764921
If @option{-Wformat} is specified, also warn about uses of format
functions that represent possible security problems.  At present, this
warns about calls to @code{printf} and @code{scanf} functions where the
format string is not a string literal and there are no format arguments,
as in @code{printf (foo);}.  This may be a security hole if the format
string came from untrusted input and contains @samp{%n}.  (This is
currently a subset of what @option{-Wformat-nonliteral} warns about, but
in future warnings may be added to @option{-Wformat-security} that are not
included in @option{-Wformat-nonliteral}.)

@item -Wformat=2
@opindex Wformat=2
Enable @option{-Wformat} plus format checks not included in
@option{-Wformat}.  Currently equivalent to @samp{-Wformat
-Wformat-nonliteral -Wformat-security -Wformat-y2k}.

@item -Wnonnull
@opindex Wnonnull
Warn about passing a null pointer for arguments marked as
requiring a non-null value by the @code{nonnull} function attribute.

@option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
can be disabled with the @option{-Wno-nonnull} option.

@c APPLE LOCAL begin Wglobal-constructors 6324584
@item -Wglobal-constructors
@opindex Wglobal-constructors
Warn about namespace scope data that requires construction or
destruction, or functions that use the constructor attribute or the
destructor attribute.  Additionally warn if the Objective-C GNU
runtime is used to initialize various metadata.
@c APPLE LOCAL end Wglobal-constructors 6324584

@item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
@opindex Winit-self
Warn about uninitialized variables which are initialized with themselves.
Note this option can only be used with the @option{-Wuninitialized} option,
which in turn only works with @option{-O1} and above.

For example, GCC will warn about @code{i} being uninitialized in the
following snippet only when @option{-Winit-self} has been specified:
@smallexample
@group
int f()
@{
  int i = i;
  return i;
@}
@end group
@end smallexample

@item -Wimplicit-int
@opindex Wimplicit-int
Warn when a declaration does not specify a type.
This warning is enabled by @option{-Wall}.

@item -Wimplicit-function-declaration
@itemx -Werror-implicit-function-declaration
@opindex Wimplicit-function-declaration
@opindex Werror-implicit-function-declaration
Give a warning (or error) whenever a function is used before being
declared.  The form @option{-Wno-error-implicit-function-declaration}
is not supported.
This warning is enabled by @option{-Wall} (as a warning, not an error).

@item -Wimplicit
@opindex Wimplicit
Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
This warning is enabled by @option{-Wall}.

@item -Wmain
@opindex Wmain
Warn if the type of @samp{main} is suspicious.  @samp{main} should be a
function with external linkage, returning int, taking either zero
arguments, two, or three arguments of appropriate types.
This warning is enabled by @option{-Wall}.

@item -Wmissing-braces
@opindex Wmissing-braces
Warn if an aggregate or union initializer is not fully bracketed.  In
the following example, the initializer for @samp{a} is not fully
bracketed, but that for @samp{b} is fully bracketed.

@smallexample
int a[2][2] = @{ 0, 1, 2, 3 @};
int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
@end smallexample

This warning is enabled by @option{-Wall}.

@item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
@opindex Wmissing-include-dirs
Warn if a user-supplied include directory does not exist.

@item -Wparentheses
@opindex Wparentheses
Warn if parentheses are omitted in certain contexts, such
as when there is an assignment in a context where a truth value
is expected, or when operators are nested whose precedence people
often get confused about.  Only the warning for an assignment used as
a truth value is supported when compiling C++; the other warnings are
only supported when compiling C@.

Also warn if a comparison like @samp{x<=y<=z} appears; this is
equivalent to @samp{(x<=y ? 1 : 0) <= z}, which is a different
interpretation from that of ordinary mathematical notation.

Also warn about constructions where there may be confusion to which
@code{if} statement an @code{else} branch belongs.  Here is an example of
such a case:

@smallexample
@group
@{
  if (a)
    if (b)
      foo ();
  else
    bar ();
@}
@end group
@end smallexample

In C, every @code{else} branch belongs to the innermost possible @code{if}
statement, which in this example is @code{if (b)}.  This is often not
what the programmer expected, as illustrated in the above example by
indentation the programmer chose.  When there is the potential for this
confusion, GCC will issue a warning when this flag is specified.
To eliminate the warning, add explicit braces around the innermost
@code{if} statement so there is no way the @code{else} could belong to
the enclosing @code{if}.  The resulting code would look like this:

@smallexample
@group
@{
  if (a)
    @{
      if (b)
        foo ();
      else
        bar ();
    @}
@}
@end group
@end smallexample

This warning is enabled by @option{-Wall}.

@item -Wsequence-point
@opindex Wsequence-point
Warn about code that may have undefined semantics because of violations
of sequence point rules in the C and C++ standards.

The C and C++ standards defines the order in which expressions in a C/C++
program are evaluated in terms of @dfn{sequence points}, which represent
a partial ordering between the execution of parts of the program: those
executed before the sequence point, and those executed after it.  These
occur after the evaluation of a full expression (one which is not part
of a larger expression), after the evaluation of the first operand of a
@code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
function is called (but after the evaluation of its arguments and the
expression denoting the called function), and in certain other places.
Other than as expressed by the sequence point rules, the order of
evaluation of subexpressions of an expression is not specified.  All
these rules describe only a partial order rather than a total order,
since, for example, if two functions are called within one expression
with no sequence point between them, the order in which the functions
are called is not specified.  However, the standards committee have
ruled that function calls do not overlap.

It is not specified when between sequence points modifications to the
values of objects take effect.  Programs whose behavior depends on this
have undefined behavior; the C and C++ standards specify that ``Between
the previous and next sequence point an object shall have its stored
value modified at most once by the evaluation of an expression.  
Furthermore, the prior value shall be read only to determine the value
to be stored.''.  If a program breaks these rules, the results on any
particular implementation are entirely unpredictable.

Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
= b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
diagnosed by this option, and it may give an occasional false positive
result, but in general it has been found fairly effective at detecting
this sort of problem in programs.

The standard is worded confusingly, therefore there is some debate
over the precise meaning of the sequence point rules in subtle cases.
Links to discussions of the problem, including proposed formal
definitions, may be found on the GCC readings page, at
@w{@uref{http://gcc.gnu.org/readings.html}}.

This warning is enabled by @option{-Wall} for C and C++.

@item -Wreturn-type
@opindex Wreturn-type
Warn whenever a function is defined with a return-type that defaults to
@code{int}.  Also warn about any @code{return} statement with no
return-value in a function whose return-type is not @code{void}.

For C, also warn if the return type of a function has a type qualifier
such as @code{const}.  Such a type qualifier has no effect, since the
value returned by a function is not an lvalue.  ISO C prohibits
qualified @code{void} return types on function definitions, so such
return types always receive a warning even without this option.

For C++, a function without return type always produces a diagnostic
message, even when @option{-Wno-return-type} is specified.  The only
exceptions are @samp{main} and functions defined in system headers.

This warning is enabled by @option{-Wall}.

@item -Wswitch
@opindex Wswitch
Warn whenever a @code{switch} statement has an index of enumerated type
and lacks a @code{case} for one or more of the named codes of that
enumeration.  (The presence of a @code{default} label prevents this
warning.)  @code{case} labels outside the enumeration range also
provoke warnings when this option is used.
This warning is enabled by @option{-Wall}.

@item -Wswitch-default
@opindex Wswitch-switch
Warn whenever a @code{switch} statement does not have a @code{default}
case.

@item -Wswitch-enum
@opindex Wswitch-enum
Warn whenever a @code{switch} statement has an index of enumerated type
and lacks a @code{case} for one or more of the named codes of that
enumeration.  @code{case} labels outside the enumeration range also
provoke warnings when this option is used.

@item -Wtrigraphs
@opindex Wtrigraphs
Warn if any trigraphs are encountered that might change the meaning of
the program (trigraphs within comments are not warned about).
This warning is enabled by @option{-Wall}.

@item -Wunused-function
@opindex Wunused-function
Warn whenever a static function is declared but not defined or a
non-inline static function is unused.
This warning is enabled by @option{-Wall}.

@item -Wunused-label
@opindex Wunused-label
Warn whenever a label is declared but not used.
This warning is enabled by @option{-Wall}.

To suppress this warning use the @samp{unused} attribute
(@pxref{Variable Attributes}).

@item -Wunused-parameter
@opindex Wunused-parameter
Warn whenever a function parameter is unused aside from its declaration.

To suppress this warning use the @samp{unused} attribute
(@pxref{Variable Attributes}).

@item -Wunused-variable
@opindex Wunused-variable
Warn whenever a local variable or non-constant static variable is unused
aside from its declaration.
This warning is enabled by @option{-Wall}.

To suppress this warning use the @samp{unused} attribute
(@pxref{Variable Attributes}).

@item -Wunused-value
@opindex Wunused-value
Warn whenever a statement computes a result that is explicitly not used.
This warning is enabled by @option{-Wall}.

To suppress this warning cast the expression to @samp{void}.

@item -Wunused
@opindex Wunused
All the above @option{-Wunused} options combined.

In order to get a warning about an unused function parameter, you must
either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies
@samp{-Wunused}), or separately specify @option{-Wunused-parameter}.

@item -Wuninitialized
@opindex Wuninitialized
Warn if an automatic variable is used without first being initialized or
if a variable may be clobbered by a @code{setjmp} call.

These warnings are possible only in optimizing compilation,
because they require data flow information that is computed only
when optimizing.  If you do not specify @option{-O}, you will not get 
these warnings. Instead, GCC will issue a warning about @option{-Wuninitialized}
requiring @option{-O}.

If you want to warn about code which uses the uninitialized value of the
variable in its own initializer, use the @option{-Winit-self} option.

These warnings occur for individual uninitialized or clobbered
elements of structure, union or array variables as well as for
variables which are uninitialized or clobbered as a whole.  They do
not occur for variables or elements declared @code{volatile}.  Because
these warnings depend on optimization, the exact variables or elements
for which there are warnings will depend on the precise optimization
options and version of GCC used.

Note that there may be no warning about a variable that is used only
to compute a value that itself is never used, because such
computations may be deleted by data flow analysis before the warnings
are printed.

These warnings are made optional because GCC is not smart
enough to see all the reasons why the code might be correct
despite appearing to have an error.  Here is one example of how
this can happen:

@smallexample
@group
@{
  int x;
  switch (y)
    @{
    case 1: x = 1;
      break;
    case 2: x = 4;
      break;
    case 3: x = 5;
    @}
  foo (x);
@}
@end group
@end smallexample

@noindent
If the value of @code{y} is always 1, 2 or 3, then @code{x} is
always initialized, but GCC doesn't know this.  Here is
another common case:

@smallexample
@{
  int save_y;
  if (change_y) save_y = y, y = new_y;
  @dots{}
  if (change_y) y = save_y;
@}
@end smallexample

@noindent
This has no bug because @code{save_y} is used only if it is set.

@cindex @code{longjmp} warnings
This option also warns when a non-volatile automatic variable might be
changed by a call to @code{longjmp}.  These warnings as well are possible
only in optimizing compilation.

The compiler sees only the calls to @code{setjmp}.  It cannot know
where @code{longjmp} will be called; in fact, a signal handler could
call it at any point in the code.  As a result, you may get a warning
even when there is in fact no problem because @code{longjmp} cannot
in fact be called at the place which would cause a problem.

Some spurious warnings can be avoided if you declare all the functions
you use that never return as @code{noreturn}.  @xref{Function
Attributes}.

This warning is enabled by @option{-Wall}.

@item -Wunknown-pragmas
@opindex Wunknown-pragmas
@cindex warning for unknown pragmas
@cindex unknown pragmas, warning
@cindex pragmas, warning of unknown
Warn when a #pragma directive is encountered which is not understood by
GCC@.  If this command line option is used, warnings will even be issued
for unknown pragmas in system header files.  This is not the case if
the warnings were only enabled by the @option{-Wall} command line option.

@item -Wno-pragmas
@opindex Wno-pragmas
@opindex Wpragmas
Do not warn about misuses of pragmas, such as incorrect parameters,
invalid syntax, or conflicts between pragmas.  See also
@samp{-Wunknown-pragmas}.

@item -Wstrict-aliasing
@opindex Wstrict-aliasing
This option is only active when @option{-fstrict-aliasing} is active.
It warns about code which might break the strict aliasing rules that the
compiler is using for optimization.  The warning does not catch all
cases, but does attempt to catch the more common pitfalls.  It is
included in @option{-Wall}.

@item -Wstrict-aliasing=2
@opindex Wstrict-aliasing=2
This option is only active when @option{-fstrict-aliasing} is active.
It warns about code which might break the strict aliasing rules that the
compiler is using for optimization.  This warning catches more cases than
@option{-Wstrict-aliasing}, but it will also give a warning for some ambiguous
cases that are safe.

@item -Wstrict-overflow
@item -Wstrict-overflow=@var{n}
@opindex Wstrict-overflow
This option is only active when @option{-fstrict-overflow} is active.
It warns about cases where the compiler optimizes based on the
assumption that signed overflow does not occur.  Note that it does not
warn about all cases where the code might overflow: it only warns
about cases where the compiler implements some optimization.  Thus
this warning depends on the optimization level.

An optimization which assumes that signed overflow does not occur is
perfectly safe if the values of the variables involved are such that
overflow never does, in fact, occur.  Therefore this warning can
easily give a false positive: a warning about code which is not
actually a problem.  To help focus on important issues, several
warning levels are defined.  No warnings are issued for the use of
undefined signed overflow when estimating how many iterations a loop
will require, in particular when determining whether a loop will be
executed at all.

@c APPLE LOCAL mainline man page 6365204
@table @gcctabopt
@item -Wstrict-overflow=1
Warn about cases which are both questionable and easy to avoid.  For
example: @code{x + 1 > x}; with @option{-fstrict-overflow}, the
compiler will simplify this to @code{1}.  This level of
@option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels
are not, and must be explicitly requested.

@item -Wstrict-overflow=2
Also warn about other cases where a comparison is simplified to a
constant.  For example: @code{abs (x) >= 0}.  This can only be
simplified when @option{-fstrict-overflow} is in effect, because
@code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than
zero.  @option{-Wstrict-overflow} (with no level) is the same as
@option{-Wstrict-overflow=2}.

@item -Wstrict-overflow=3
Also warn about other cases where a comparison is simplified.  For
example: @code{x + 1 > 1} will be simplified to @code{x > 0}.

@item -Wstrict-overflow=4
Also warn about other simplifications not covered by the above cases.
For example: @code{(x * 10) / 5} will be simplified to @code{x * 2}.

@item -Wstrict-overflow=5
Also warn about cases where the compiler reduces the magnitude of a
constant involved in a comparison.  For example: @code{x + 2 > y} will
be simplified to @code{x + 1 >= y}.  This is reported only at the
highest warning level because this simplification applies to many
comparisons, so this warning level will give a very large number of
false positives.
@end table

@item -Wall
@opindex Wall
All of the above @samp{-W} options combined.  This enables all the
warnings about constructions that some users consider questionable, and
that are easy to avoid (or modify to prevent the warning), even in
conjunction with macros.  This also enables some language-specific
warnings described in @ref{C++ Dialect Options} and
@ref{Objective-C and Objective-C++ Dialect Options}.
@c APPLE LOCAL begin -Wmost
@item -Wmost
@opindex Wmost
This is equivalent to -Wall -Wno-parentheses.  (APPLE ONLY)
@end table
@c APPLE LOCAL end -Wmost

The following @option{-W@dots{}} options are not implied by @option{-Wall}.
Some of them warn about constructions that users generally do not
consider questionable, but which occasionally you might wish to check
for; others warn about constructions that are necessary or hard to avoid
in some cases, and there is no simple way to modify the code to suppress
the warning.

@table @gcctabopt
@item -Wextra
@opindex W
@opindex Wextra
(This option used to be called @option{-W}.  The older name is still
supported, but the newer name is more descriptive.)  Print extra warning
messages for these events:

@itemize @bullet
@item
A function can return either with or without a value.  (Falling
off the end of the function body is considered returning without
a value.)  For example, this function would evoke such a
warning:

@smallexample
@group
foo (a)
@{
  if (a > 0)
    return a;
@}
@end group
@end smallexample

@item
An expression-statement or the left-hand side of a comma expression
contains no side effects.
To suppress the warning, cast the unused expression to void.
For example, an expression such as @samp{x[i,j]} will cause a warning,
but @samp{x[(void)i,j]} will not.

@item
An unsigned value is compared against zero with @samp{<} or @samp{>=}.

@item
Storage-class specifiers like @code{static} are not the first things in
a declaration.  According to the C Standard, this usage is obsolescent.

@item
If @option{-Wall} or @option{-Wunused} is also specified, warn about unused
arguments.

@item
A comparison between signed and unsigned values could produce an
incorrect result when the signed value is converted to unsigned.
(But don't warn if @option{-Wno-sign-compare} is also specified.)

@item
An aggregate has an initializer which does not initialize all members.
This warning can be independently controlled by
@option{-Wmissing-field-initializers}.

@item
An initialized field without side effects is overridden when using
designated initializers (@pxref{Designated Inits, , Designated
Initializers}).  This warning can be independently controlled by
@option{-Woverride-init}.

@item
A function parameter is declared without a type specifier in K&R-style
functions:

@smallexample
void foo(bar) @{ @}
@end smallexample

@item
An empty body occurs in an @samp{if} or @samp{else} statement.

@c APPLE LOCAL begin mainline
@c APPLE LOCAL begin pod error 6089368
@item
(C++ only) An empty body occurs in a @samp{while} or @samp{for} statement with no
@c APPLE LOCAL end pod error 6089368
whitespacing before the semicolon. This warning can be independently
controlled by @option{-Wempty-body}.
@c APPLE LOCAL end mainline

@item
A pointer is compared against integer zero with @samp{<}, @samp{<=},
@samp{>}, or @samp{>=}.

@item
A variable might be changed by @samp{longjmp} or @samp{vfork}.

@c APPLE LOCAL begin pod error 6089368
@item
(C++ only) An enumerator and a non-enumerator both appear in a conditional expression.

@item
(C++ only) A non-static reference or non-static @samp{const} member appears in a
class without constructors.

@item
(C++ only) Ambiguous virtual bases.

@item
(C++ only) Subscripting an array which has been declared @samp{register}.

@item
(C++ only) Taking the address of a variable which has been declared @samp{register}.

@item
(C++ only) A base class is not initialized in a derived class' copy constructor.
@c APPLE LOCAL end pod error 6089368
@end itemize

@item -Wno-div-by-zero
@opindex Wno-div-by-zero
@opindex Wdiv-by-zero
Do not warn about compile-time integer division by zero.  Floating point
division by zero is not warned about, as it can be a legitimate way of
obtaining infinities and NaNs.

@item -Wsystem-headers
@opindex Wsystem-headers
@cindex warnings from system headers
@cindex system headers, warnings from
Print warning messages for constructs found in system header files.
Warnings from system headers are normally suppressed, on the assumption
that they usually do not indicate real problems and would only make the
compiler output harder to read.  Using this command line option tells
GCC to emit warnings from system headers as if they occurred in user
code.  However, note that using @option{-Wall} in conjunction with this
option will @emph{not} warn about unknown pragmas in system
headers---for that, @option{-Wunknown-pragmas} must also be used.

@item -Wfloat-equal
@opindex Wfloat-equal
Warn if floating point values are used in equality comparisons.

The idea behind this is that sometimes it is convenient (for the
programmer) to consider floating-point values as approximations to
infinitely precise real numbers.  If you are doing this, then you need
to compute (by analyzing the code, or in some other way) the maximum or
likely maximum error that the computation introduces, and allow for it
when performing comparisons (and when producing output, but that's a
different problem).  In particular, instead of testing for equality, you
would check to see whether the two values have ranges that overlap; and
this is done with the relational operators, so equality comparisons are
probably mistaken.

@c APPLE LOCAL begin -Wfour-char-constants
@item -Wfour-char-constants
@opindex Wfour-char-constants
Warn about four char constants, e.g. OSType 'APPL'.  This warning is 
disabled by default.
@c APPLE LOCAL end

@item -Wtraditional @r{(C only)}
@opindex Wtraditional
Warn about certain constructs that behave differently in traditional and
ISO C@.  Also warn about ISO C constructs that have no traditional C
equivalent, and/or problematic constructs which should be avoided.

@itemize @bullet
@item
Macro parameters that appear within string literals in the macro body.
In traditional C macro replacement takes place within string literals,
but does not in ISO C@.

@item
In traditional C, some preprocessor directives did not exist.
Traditional preprocessors would only consider a line to be a directive
if the @samp{#} appeared in column 1 on the line.  Therefore
@option{-Wtraditional} warns about directives that traditional C
understands but would ignore because the @samp{#} does not appear as the
first character on the line.  It also suggests you hide directives like
@samp{#pragma} not understood by traditional C by indenting them.  Some
traditional implementations would not recognize @samp{#elif}, so it
suggests avoiding it altogether.

@item
A function-like macro that appears without arguments.

@item
The unary plus operator.

@item
The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating point
constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
constants.)  Note, these suffixes appear in macros defined in the system
headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
Use of these macros in user code might normally lead to spurious
warnings, however GCC's integrated preprocessor has enough context to
avoid warning in these cases.

@item
A function declared external in one block and then used after the end of
the block.

@item
A @code{switch} statement has an operand of type @code{long}.

@item
A non-@code{static} function declaration follows a @code{static} one.
This construct is not accepted by some traditional C compilers.

@item
The ISO type of an integer constant has a different width or
signedness from its traditional type.  This warning is only issued if
the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
typically represent bit patterns, are not warned about.

@item
Usage of ISO string concatenation is detected.

@item
Initialization of automatic aggregates.

@item
Identifier conflicts with labels.  Traditional C lacks a separate
namespace for labels.

@item
Initialization of unions.  If the initializer is zero, the warning is
omitted.  This is done under the assumption that the zero initializer in
user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
initializer warnings and relies on default initialization to zero in the
traditional C case.

@item
Conversions by prototypes between fixed/floating point values and vice
versa.  The absence of these prototypes when compiling with traditional
C would cause serious problems.  This is a subset of the possible
conversion warnings, for the full set use @option{-Wconversion}.

@item
Use of ISO C style function definitions.  This warning intentionally is
@emph{not} issued for prototype declarations or variadic functions
because these ISO C features will appear in your code when using
libiberty's traditional C compatibility macros, @code{PARAMS} and
@code{VPARAMS}.  This warning is also bypassed for nested functions
because that feature is already a GCC extension and thus not relevant to
traditional C compatibility.
@end itemize

@item -Wdeclaration-after-statement @r{(C only)}
@opindex Wdeclaration-after-statement
Warn when a declaration is found after a statement in a block.  This
construct, known from C++, was introduced with ISO C99 and is by default
allowed in GCC@.  It is not supported by ISO C90 and was not supported by
GCC versions before GCC 3.0.  @xref{Mixed Declarations}.

@c APPLE LOCAL begin -Wdiscard-qual 4086969
@item -Wno-discard-qual
@opindex Wno-discard-qual
This flag allows user to suppress warning that is issued when qualification
is discarded in situations like, initialization, assignment and argument
passing.
@c APPLE LOCAL end -Wdiscard-qual 4086969

@item -Wundef
@opindex Wundef
Warn if an undefined identifier is evaluated in an @samp{#if} directive.

@item -Wno-endif-labels
@opindex Wno-endif-labels
@opindex Wendif-labels
Do not warn whenever an @samp{#else} or an @samp{#endif} are followed by text.

@item -Wshadow
@opindex Wshadow
Warn whenever a local variable shadows another local variable, parameter or
global variable or whenever a built-in function is shadowed.

@item -Wlarger-than-@var{len}
@opindex Wlarger-than
Warn whenever an object of larger than @var{len} bytes is defined.

@item -Wunsafe-loop-optimizations
@opindex Wunsafe-loop-optimizations
Warn if the loop cannot be optimized because the compiler could not
assume anything on the bounds of the loop indices.  With
@option{-funsafe-loop-optimizations} warn if the compiler made
such assumptions.

@item -Wpointer-arith
@opindex Wpointer-arith
Warn about anything that depends on the ``size of'' a function type or
of @code{void}.  GNU C assigns these types a size of 1, for
convenience in calculations with @code{void *} pointers and pointers
to functions.

@item -Wbad-function-cast @r{(C only)}
@opindex Wbad-function-cast
Warn whenever a function call is cast to a non-matching type.
For example, warn if @code{int malloc()} is cast to @code{anything *}.

@item -Wc++-compat
Warn about ISO C constructs that are outside of the common subset of
ISO C and ISO C++, e.g.@: request for implicit conversion from
@code{void *} to a pointer to non-@code{void} type.

@item -Wcast-qual
@opindex Wcast-qual
Warn whenever a pointer is cast so as to remove a type qualifier from
the target type.  For example, warn if a @code{const char *} is cast
to an ordinary @code{char *}.

@item -Wcast-align
@opindex Wcast-align
Warn whenever a pointer is cast such that the required alignment of the
target is increased.  For example, warn if a @code{char *} is cast to
an @code{int *} on machines where integers can only be accessed at
two- or four-byte boundaries.

@item -Wwrite-strings
@opindex Wwrite-strings
When compiling C, give string constants the type @code{const
char[@var{length}]} so that
copying the address of one into a non-@code{const} @code{char *}
pointer will get a warning; when compiling C++, warn about the
deprecated conversion from string literals to @code{char *}.  This
warning, by default, is enabled for C++ programs.
These warnings will help you find at
compile time code that can try to write into a string constant, but
only if you have been very careful about using @code{const} in
declarations and prototypes.  Otherwise, it will just be a nuisance;
this is why we did not make @option{-Wall} request these warnings.

@item -Wconversion
@opindex Wconversion
Warn if a prototype causes a type conversion that is different from what
would happen to the same argument in the absence of a prototype.  This
includes conversions of fixed point to floating and vice versa, and
conversions changing the width or signedness of a fixed point argument
except when the same as the default promotion.

Also, warn if a negative integer constant expression is implicitly
converted to an unsigned type.  For example, warn about the assignment
@code{x = -1} if @code{x} is unsigned.  But do not warn about explicit
casts like @code{(unsigned) -1}.

@c APPLE LOCAL begin mainline
@item -Wshorten-64-to-32
@opindex Wshorten-64-to-32
Warn if a value is implicitly converted from a 64 bit type to a 32 bit type.
@c APPLE LOCAL end mainline

@c APPLE LOCAL begin mainline
@item -Wempty-body
@opindex Wempty-body
Warn if an empty body occurs in an @samp{if} or @samp{else}
statement.  Additionally, in C++, warn when an empty body occurs
in a @samp{while} or @samp{for} statement with no whitespacing before
the semicolon.  This warning is also enabled by @option{-Wextra}.
@c APPLE LOCAL end mainline

@item -Wsign-compare
@opindex Wsign-compare
@cindex warning for comparison of signed and unsigned values
@cindex comparison of signed and unsigned values, warning
@cindex signed and unsigned values, comparison warning
Warn when a comparison between signed and unsigned values could produce
an incorrect result when the signed value is converted to unsigned.
This warning is also enabled by @option{-Wextra}; to get the other warnings
of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}.

@item -Waddress
@opindex Waddress
@opindex Wno-address
Warn about suspicious uses of memory addresses. These include using
the address of a function in a conditional expression, such as
@code{void func(void); if (func)}, and comparisons against the memory
address of a string literal, such as @code{if (x == "abc")}.  Such
uses typically indicate a programmer error: the address of a function
always evaluates to true, so their use in a conditional usually
indicate that the programmer forgot the parentheses in a function
call; and comparisons against string literals result in unspecified
behavior and are not portable in C, so they usually indicate that the
programmer intended to use @code{strcmp}.  This warning is enabled by
@option{-Wall}.

@item -Waggregate-return
@opindex Waggregate-return
Warn if any functions that return structures or unions are defined or
called.  (In languages where you can return an array, this also elicits
a warning.)

@item -Wno-attributes
@opindex Wno-attributes
@opindex Wattributes
Do not warn if an unexpected @code{__attribute__} is used, such as
unrecognized attributes, function attributes applied to variables,
etc.  This will not stop errors for incorrect use of supported
attributes.

@item -Wstrict-prototypes @r{(C only)}
@opindex Wstrict-prototypes
Warn if a function is declared or defined without specifying the
argument types.  (An old-style function definition is permitted without
a warning if preceded by a declaration which specifies the argument
types.)

@item -Wold-style-definition @r{(C only)}
@opindex Wold-style-definition
Warn if an old-style function definition is used.  A warning is given
even if there is a previous prototype.

@c APPLE LOCAL warn missing prototype 6261539
@item -Wmissing-prototypes
@opindex Wmissing-prototypes
Warn if a global function is defined without a previous prototype
declaration.  This warning is issued even if the definition itself
provides a prototype.  The aim is to detect global functions that fail
to be declared in header files.

@item -Wmissing-declarations @r{(C only)}
@opindex Wmissing-declarations
Warn if a global function is defined without a previous declaration.
Do so even if the definition itself provides a prototype.
Use this option to detect global functions that are not declared in
header files.

@item -Wmissing-field-initializers
@opindex Wmissing-field-initializers
@opindex W
@opindex Wextra
Warn if a structure's initializer has some fields missing.  For
example, the following code would cause such a warning, because
@code{x.h} is implicitly zero:

@smallexample
struct s @{ int f, g, h; @};
struct s x = @{ 3, 4 @};
@end smallexample

This option does not warn about designated initializers, so the following
modification would not trigger a warning:

@smallexample
struct s @{ int f, g, h; @};
struct s x = @{ .f = 3, .g = 4 @};
@end smallexample

This warning is included in @option{-Wextra}.  To get other @option{-Wextra}
warnings without this one, use @samp{-Wextra -Wno-missing-field-initializers}.

@item -Wmissing-noreturn
@opindex Wmissing-noreturn
Warn about functions which might be candidates for attribute @code{noreturn}.
Note these are only possible candidates, not absolute ones.  Care should
be taken to manually verify functions actually do not ever return before
adding the @code{noreturn} attribute, otherwise subtle code generation
bugs could be introduced.  You will not get a warning for @code{main} in
hosted C environments.

@item -Wmissing-format-attribute
@opindex Wmissing-format-attribute
@opindex Wformat
Warn about function pointers which might be candidates for @code{format}
attributes.  Note these are only possible candidates, not absolute ones.
GCC will guess that function pointers with @code{format} attributes that
are used in assignment, initialization, parameter passing or return
statements should have a corresponding @code{format} attribute in the
resulting type.  I.e.@: the left-hand side of the assignment or
initialization, the type of the parameter variable, or the return type
of the containing function respectively should also have a @code{format}
attribute to avoid the warning.

GCC will also warn about function definitions which might be
candidates for @code{format} attributes.  Again, these are only
possible candidates.  GCC will guess that @code{format} attributes
might be appropriate for any function that calls a function like
@code{vprintf} or @code{vscanf}, but this might not always be the
case, and some functions for which @code{format} attributes are
appropriate may not be detected.

@item -Wno-multichar
@opindex Wno-multichar
@opindex Wmultichar
@c APPLE LOCAL begin -Wfour-char-constants
Do not warn if a multicharacter constant (@samp{'FOO'}) is used.
Usually they indicate a typo in the user's code, as they have
implementation-defined values, and should not be used in portable code.
This flag does not control warning for a constant with four characters,
use -Wfour-char-constants instead.
@c APPLE LOCAL end -Wfour-char-constants

@item -Wnormalized=<none|id|nfc|nfkc>
@opindex Wnormalized
@cindex NFC
@cindex NFKC
@cindex character set, input normalization
In ISO C and ISO C++, two identifiers are different if they are
different sequences of characters.  However, sometimes when characters
outside the basic ASCII character set are used, you can have two
different character sequences that look the same.  To avoid confusion,
the ISO 10646 standard sets out some @dfn{normalization rules} which
when applied ensure that two sequences that look the same are turned into
the same sequence.  GCC can warn you if you are using identifiers which
have not been normalized; this option controls that warning.

There are four levels of warning that GCC supports.  The default is
@option{-Wnormalized=nfc}, which warns about any identifier which is
not in the ISO 10646 ``C'' normalized form, @dfn{NFC}.  NFC is the
recommended form for most uses.

Unfortunately, there are some characters which ISO C and ISO C++ allow
in identifiers that when turned into NFC aren't allowable as
identifiers.  That is, there's no way to use these symbols in portable
ISO C or C++ and have all your identifiers in NFC.
@option{-Wnormalized=id} suppresses the warning for these characters.
It is hoped that future versions of the standards involved will correct
this, which is why this option is not the default.

You can switch the warning off for all characters by writing
@option{-Wnormalized=none}.  You would only want to do this if you
were using some other normalization scheme (like ``D''), because
otherwise you can easily create bugs that are literally impossible to see.

Some characters in ISO 10646 have distinct meanings but look identical
in some fonts or display methodologies, especially once formatting has
been applied.  For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL
LETTER N'', will display just like a regular @code{n} which has been
placed in a superscript.  ISO 10646 defines the @dfn{NFKC}
normalization scheme to convert all these into a standard form as
well, and GCC will warn if your code is not in NFKC if you use
@option{-Wnormalized=nfkc}.  This warning is comparable to warning
about every identifier that contains the letter O because it might be
confused with the digit 0, and so is not the default, but may be
useful as a local coding convention if the programming environment is
unable to be fixed to display these characters distinctly.

@item -Wno-deprecated-declarations
@opindex Wno-deprecated-declarations
Do not warn about uses of functions (@pxref{Function Attributes}),
variables (@pxref{Variable Attributes}), and types (@pxref{Type
Attributes}) marked as deprecated by using the @code{deprecated}
attribute.

@item -Wno-overflow
@opindex Wno-overflow
Do not warn about compile-time overflow in constant expressions.

@item -Woverride-init
@opindex Woverride-init
@opindex W
@opindex Wextra
Warn if an initialized field without side effects is overridden when
using designated initializers (@pxref{Designated Inits, , Designated
Initializers}).

This warning is included in @option{-Wextra}.  To get other
@option{-Wextra} warnings without this one, use @samp{-Wextra
-Wno-override-init}.

@item -Wpacked
@opindex Wpacked
Warn if a structure is given the packed attribute, but the packed
attribute has no effect on the layout or size of the structure.
Such structures may be mis-aligned for little benefit.  For
instance, in this code, the variable @code{f.x} in @code{struct bar}
will be misaligned even though @code{struct bar} does not itself
have the packed attribute:

@smallexample
@group
struct foo @{
  int x;
  char a, b, c, d;
@} __attribute__((packed));
struct bar @{
  char z;
  struct foo f;
@};
@end group
@end smallexample

@item -Wpadded
@opindex Wpadded
Warn if padding is included in a structure, either to align an element
of the structure or to align the whole structure.  Sometimes when this
happens it is possible to rearrange the fields of the structure to
reduce the padding and so make the structure smaller.

@item -Wredundant-decls
@opindex Wredundant-decls
Warn if anything is declared more than once in the same scope, even in
cases where multiple declaration is valid and changes nothing.

@item -Wnested-externs @r{(C only)}
@opindex Wnested-externs
Warn if an @code{extern} declaration is encountered within a function.

@item -Wunreachable-code
@opindex Wunreachable-code
Warn if the compiler detects that code will never be executed.

This option is intended to warn when the compiler detects that at
least a whole line of source code will never be executed, because
some condition is never satisfied or because it is after a
procedure that never returns.

It is possible for this option to produce a warning even though there
are circumstances under which part of the affected line can be executed,
so care should be taken when removing apparently-unreachable code.

For instance, when a function is inlined, a warning may mean that the
line is unreachable in only one inlined copy of the function.

This option is not made part of @option{-Wall} because in a debugging
version of a program there is often substantial code which checks
correct functioning of the program and is, hopefully, unreachable
because the program does work.  Another common use of unreachable
code is to provide behavior which is selectable at compile-time.

@item -Winline
@opindex Winline
Warn if a function can not be inlined and it was declared as inline.
Even with this option, the compiler will not warn about failures to
inline functions declared in system headers.

The compiler uses a variety of heuristics to determine whether or not
to inline a function.  For example, the compiler takes into account
the size of the function being inlined and the amount of inlining
that has already been done in the current function.  Therefore,
seemingly insignificant changes in the source program can cause the
warnings produced by @option{-Winline} to appear or disappear.

@item -Wno-invalid-offsetof @r{(C++ only)}
@opindex Wno-invalid-offsetof
Suppress warnings from applying the @samp{offsetof} macro to a non-POD
type.  According to the 1998 ISO C++ standard, applying @samp{offsetof}
to a non-POD type is undefined.  In existing C++ implementations,
however, @samp{offsetof} typically gives meaningful results even when
applied to certain kinds of non-POD types. (Such as a simple
@samp{struct} that fails to be a POD type only by virtue of having a
constructor.)  This flag is for users who are aware that they are
writing nonportable code and who have deliberately chosen to ignore the
warning about it.

The restrictions on @samp{offsetof} may be relaxed in a future version
of the C++ standard.

@item -Wno-int-to-pointer-cast @r{(C only)}
@opindex Wno-int-to-pointer-cast
Suppress warnings from casts to pointer type of an integer of a
different size.

@item -Wno-pointer-to-int-cast @r{(C only)}
@opindex Wno-pointer-to-int-cast
Suppress warnings from casts from a pointer to an integer type of a
different size.

@item -Winvalid-pch
@opindex Winvalid-pch
Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
the search path but can't be used.

@item -Wlong-long
@opindex Wlong-long
@opindex Wno-long-long
Warn if @samp{long long} type is used.  This is default.  To inhibit
the warning messages, use @option{-Wno-long-long}.  Flags
@option{-Wlong-long} and @option{-Wno-long-long} are taken into account
only when @option{-pedantic} flag is used.

@item -Wvariadic-macros
@opindex Wvariadic-macros
@opindex Wno-variadic-macros
Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
alternate syntax when in pedantic ISO C99 mode.  This is default.
To inhibit the warning messages, use @option{-Wno-variadic-macros}.

@item -Wvolatile-register-var
@opindex Wvolatile-register-var
@opindex Wno-volatile-register-var
Warn if a register variable is declared volatile.  The volatile
modifier does not inhibit all optimizations that may eliminate reads
and/or writes to register variables.

@item -Wdisabled-optimization
@opindex Wdisabled-optimization
Warn if a requested optimization pass is disabled.  This warning does
not generally indicate that there is anything wrong with your code; it
merely indicates that GCC's optimizers were unable to handle the code
effectively.  Often, the problem is that your code is too big or too
complex; GCC will refuse to optimize programs when the optimization
itself is likely to take inordinate amounts of time.

@item -Wpointer-sign
@opindex Wpointer-sign
@opindex Wno-pointer-sign
Warn for pointer argument passing or assignment with different signedness.
This option is only supported for C and Objective-C@.  It is implied by
@option{-Wall} and by @option{-pedantic}, which can be disabled with
@option{-Wno-pointer-sign}.

@item -Werror
@opindex Werror
Make all warnings into errors.

@item -Werror=
@opindex Werror=
Make the specified warning into an errors.  The specifier for a
warning is appended, for example @option{-Werror=switch} turns the
warnings controlled by @option{-Wswitch} into errors.  This switch
takes a negative form, to be used to negate @option{-Werror} for
specific warnings, for example @option{-Wno-error=switch} makes
@option{-Wswitch} warnings not be errors, even when @option{-Werror}
is in effect.  You can use the @option{-fdiagnostics-show-option}
option to have each controllable warning amended with the option which
controls it, to determine what to use with this option.

Note that specifying @option{-Werror=}@var{foo} automatically implies
@option{-W}@var{foo}.  However, @option{-Wno-error=}@var{foo} does not
imply anything.

@item -Wstack-protector
@opindex Wstack-protector
This option is only active when @option{-fstack-protector} is active.  It
warns about functions that will not be protected against stack smashing.

@item -Woverlength-strings
@opindex Woverlength-strings
Warn about string constants which are longer than the ``minimum
maximum'' length specified in the C standard.  Modern compilers
generally allow string constants which are much longer than the
standard's minimum limit, but very portable programs should avoid
using longer strings.

The limit applies @emph{after} string constant concatenation, and does
not count the trailing NUL@.  In C89, the limit was 509 characters; in
C99, it was raised to 4095.  C++98 does not specify a normative
minimum maximum, so we do not diagnose overlength strings in C++@.

This option is implied by @option{-pedantic}, and can be disabled with
@option{-Wno-overlength-strings}.
@end table

@node Debugging Options
@section Options for Debugging Your Program or GCC
@cindex options, debugging
@cindex debugging information options

GCC has various special options that are used for debugging
either your program or GCC:

@table @gcctabopt
@item -g
@opindex g
Produce debugging information in the operating system's native format
(stabs, COFF, XCOFF, or DWARF 2)@.  GDB can work with this debugging
information.

On most systems that use stabs format, @option{-g} enables use of extra
debugging information that only GDB can use; this extra information
makes debugging work better in GDB but will probably make other debuggers
crash or
refuse to read the program.  If you want to control for certain whether
@c APPLE LOCAL begin prune man page
to generate the extra information, use @option{-gstabs+} or @option{-gstabs}
(see below).
@c APPLE LOCAL end prune man page

GCC allows you to use @option{-g} with
@option{-O}.  The shortcuts taken by optimized code may occasionally
produce surprising results: some variables you declared may not exist
at all; flow of control may briefly move where you did not expect it;
some statements may not be executed because they compute constant
results or their values were already at hand; some statements may
execute in different places because they were moved out of loops.

Nevertheless it proves possible to debug optimized output.  This makes
it reasonable to use the optimizer for programs that might have bugs.

The following options are useful when GCC is generated with the
capability for more than one debugging format.

@item -ggdb
@opindex ggdb
Produce debugging information for use by GDB@.  This means to use the
most expressive format available (DWARF 2, stabs, or the native format
if neither of those are supported), including GDB extensions if at all
possible.

@item -gstabs
@opindex gstabs
Produce debugging information in stabs format (if that is supported),
without GDB extensions.  This is the format used by DBX on most BSD
systems.  On MIPS, Alpha and System V Release 4 systems this option
produces stabs debugging output which is not understood by DBX or SDB@.
On System V Release 4 systems this option requires the GNU assembler.

@c APPLE LOCAL begin 4167759
@item -flimit-debug-info
@opindex -flimit-debug-info
Limit debug information produced to reduce size of debug binary.
@c APPLE LOCAL end 4167759

@item -feliminate-unused-debug-symbols
@opindex feliminate-unused-debug-symbols
Produce debugging information in stabs format (if that is supported),
for only symbols that are actually used.

@item -femit-class-debug-always
Instead of emitting debugging information for a C++ class in only one
object file, emit it in all object files using the class.  This option
should be used only with debuggers that are unable to handle the way GCC
normally emits debugging information for classes because using this
option will increase the size of debugging information by as much as a
factor of two.

@item -gstabs+
@opindex gstabs+
Produce debugging information in stabs format (if that is supported),
using GNU extensions understood only by the GNU debugger (GDB)@.  The
use of these extensions is likely to make other debuggers crash or
refuse to read the program.

@c APPLE LOCAL prune man page
@ignore
@item -gcoff
@opindex gcoff
Produce debugging information in COFF format (if that is supported).
This is the format used by SDB on most System V systems prior to
System V Release 4.

@item -gxcoff
@opindex gxcoff
Produce debugging information in XCOFF format (if that is supported).
This is the format used by the DBX debugger on IBM RS/6000 systems.

@item -gxcoff+
@opindex gxcoff+
Produce debugging information in XCOFF format (if that is supported),
using GNU extensions understood only by the GNU debugger (GDB)@.  The
use of these extensions is likely to make other debuggers crash or
refuse to read the program, and may cause assemblers other than the GNU
assembler (GAS) to fail with an error.
@c APPLE LOCAL prune man page
@end ignore

@item -gdwarf-2
@opindex gdwarf-2
Produce debugging information in DWARF version 2 format (if that is
supported).  This is the format used by DBX on IRIX 6.  With this
option, GCC uses features of DWARF version 3 when they are useful;
version 3 is upward compatible with version 2, but may still cause
problems for older debuggers.

@c APPLE LOCAL begin prune man page
(Other debug formats, such as @option{-gcoff}, are not supported in
Darwin or Mac OS X.)
@ignore
@item -gvms
@opindex gvms
Produce debugging information in VMS debug format (if that is
supported).  This is the format used by DEBUG on VMS systems.
@end ignore
@c APPLE LOCAL end prune man page

@item -g@var{level}
@itemx -ggdb@var{level}
@itemx -gstabs@var{level}
@c APPLE LOCAL prune man page
@ignore
@itemx -gcoff@var{level}
@itemx -gxcoff@var{level}
@itemx -gvms@var{level}
@c APPLE LOCAL prune man page
@end ignore
Request debugging information and also use @var{level} to specify how
much information.  The default level is 2.

@c APPLE LOCAL begin mainline 4.3 2006-12-20 4869554
Level 0 produces no debug information at all.  Thus, @option{-g0} negates
@option{-g}.
@c APPLE LOCAL end mainline 4.3 2006-12-20 4869554

Level 1 produces minimal information, enough for making backtraces in
parts of the program that you don't plan to debug.  This includes
descriptions of functions and external variables, but no information
about local variables and no line numbers.

Level 3 includes extra information, such as all the macro definitions
present in the program.  Some debuggers support macro expansion when
you use @option{-g3}.

@option{-gdwarf-2} does not accept a concatenated debug level, because
GCC used to support an option @option{-gdwarf} that meant to generate
debug information in version 1 of the DWARF format (which is very
different from version 2), and it would have been too confusing.  That
debug format is long obsolete, but the option cannot be changed now.
Instead use an additional @option{-g@var{level}} option to change the
debug level for DWARF2.

@item -feliminate-dwarf2-dups
@opindex feliminate-dwarf2-dups
Compress DWARF2 debugging information by eliminating duplicated
information about each symbol.  This option only makes sense when
generating DWARF2 debugging information with @option{-gdwarf-2}.

@cindex @command{prof}
@item -p
@opindex p
Generate extra code to write profile information suitable for the
analysis program @command{prof}.  You must use this option when compiling
the source files you want data about, and you must also use it when
linking.

@cindex @command{gprof}
@item -pg
@opindex pg
Generate extra code to write profile information suitable for the
analysis program @command{gprof}.  You must use this option when compiling
the source files you want data about, and you must also use it when
linking.

@item -Q
@opindex Q
Makes the compiler print out each function name as it is compiled, and
print some statistics about each pass when it finishes.

@item -ftime-report
@opindex ftime-report
Makes the compiler print some statistics about the time consumed by each
pass when it finishes.

@item -fmem-report
@opindex fmem-report
Makes the compiler print some statistics about permanent memory
allocation when it finishes.

@c APPLE LOCAL begin opt diary
@item -fopt-diary
@opindex fopt-diary
Enable optimization diary entries using DWARF encoding. This option
does nothing unless @option{gdwarf-2} is specified.
@c APPLE LOCAL end opt diary
@item -fprofile-arcs
@opindex fprofile-arcs
Add code so that program flow @dfn{arcs} are instrumented.  During
execution the program records how many times each branch and call is
executed and how many times it is taken or returns.  When the compiled
program exits it saves this data to a file called
@file{@var{auxname}.gcda} for each source file.  The data may be used for
profile-directed optimizations (@option{-fbranch-probabilities}), or for
test coverage analysis (@option{-ftest-coverage}).  Each object file's
@var{auxname} is generated from the name of the output file, if
explicitly specified and it is not the final executable, otherwise it is
the basename of the source file.  In both cases any suffix is removed
(e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or
@file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
@xref{Cross-profiling}.

@cindex @command{gcov}
@item --coverage
@opindex coverage

This option is used to compile and link code instrumented for coverage
analysis.  The option is a synonym for @option{-fprofile-arcs}
@option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
linking).  See the documentation for those options for more details.

@itemize

@item
Compile the source files with @option{-fprofile-arcs} plus optimization
and code generation options.  For test coverage analysis, use the
additional @option{-ftest-coverage} option.  You do not need to profile
every source file in a program.

@item
Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
(the latter implies the former).

@item
Run the program on a representative workload to generate the arc profile
information.  This may be repeated any number of times.  You can run
concurrent instances of your program, and provided that the file system
supports locking, the data files will be correctly updated.  Also
@code{fork} calls are detected and correctly handled (double counting
will not happen).

@item
For profile-directed optimizations, compile the source files again with
the same optimization and code generation options plus
@option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
Control Optimization}).

@item
For test coverage analysis, use @command{gcov} to produce human readable
information from the @file{.gcno} and @file{.gcda} files.  Refer to the
@command{gcov} documentation for further information.

@end itemize

With @option{-fprofile-arcs}, for each function of your program GCC
creates a program flow graph, then finds a spanning tree for the graph.
Only arcs that are not on the spanning tree have to be instrumented: the
compiler adds code to count the number of times that these arcs are
executed.  When an arc is the only exit or only entrance to a block, the
instrumentation code can be added to the block; otherwise, a new basic
block must be created to hold the instrumentation code.

@need 2000
@item -ftest-coverage
@opindex ftest-coverage
Produce a notes file that the @command{gcov} code-coverage utility
(@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
show program coverage.  Each source file's note file is called
@file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
above for a description of @var{auxname} and instructions on how to
generate test coverage data.  Coverage data will match the source files
more closely, if you do not optimize.

@c APPLE LOCAL begin mainline
@item -d@var{letters}
@item -fdump-rtl-@var{pass}
@opindex d
Says to make debugging dumps during compilation at times specified by
@var{letters}.    This is used for debugging the RTL-based passes of the
compiler.  The file names for most of the dumps are made by appending a
pass number and a word to the @var{dumpname}.  @var{dumpname} is generated
from the name of the output file, if explicitly specified and it is not
an executable, otherwise it is the basename of the source file. These
switches may have different effects when @option{-E} is used for
preprocessing.
@c APPLE LOCAL end mainline

Most debug dumps can be enabled either passing a letter to the @option{-d}
option, or with a long @option{-fdump-rtl} switch; here are the possible
letters for use in @var{letters} and @var{pass}, and their meanings:

@table @gcctabopt
@item -dA
@opindex dA
Annotate the assembler output with miscellaneous debugging information.

@item -dB
@itemx -fdump-rtl-bbro
@opindex dB
@opindex fdump-rtl-bbro
Dump after block reordering, to @file{@var{file}.148r.bbro}.

@item -dc
@itemx -fdump-rtl-combine
@opindex dc
@opindex fdump-rtl-combine
Dump after instruction combination, to the file @file{@var{file}.129r.combine}.

@item -dC
@itemx -fdump-rtl-ce1
@itemx -fdump-rtl-ce2
@opindex dC
@opindex fdump-rtl-ce1
@opindex fdump-rtl-ce2
@option{-dC} and @option{-fdump-rtl-ce1} enable dumping after the
first if conversion, to the file @file{@var{file}.117r.ce1}.  @option{-dC}
and @option{-fdump-rtl-ce2} enable dumping after the second if
conversion, to the file @file{@var{file}.130r.ce2}.

@item -dd
@itemx -fdump-rtl-btl
@itemx -fdump-rtl-dbr
@opindex dd
@opindex fdump-rtl-btl
@opindex fdump-rtl-dbr
@option{-dd} and @option{-fdump-rtl-btl} enable dumping after branch
target load optimization, to @file{@var{file}.31.btl}.  @option{-dd}
and @option{-fdump-rtl-dbr} enable dumping after delayed branch
scheduling, to @file{@var{file}.36.dbr}.

@item -dD
@opindex dD
Dump all macro definitions, at the end of preprocessing, in addition to
normal output.

@item -dE
@itemx -fdump-rtl-ce3
@opindex dE
@opindex fdump-rtl-ce3
Dump after the third if conversion, to @file{@var{file}.146r.ce3}.

@item -df
@itemx -fdump-rtl-cfg
@itemx -fdump-rtl-life
@opindex df
@opindex fdump-rtl-cfg
@opindex fdump-rtl-life
@option{-df} and @option{-fdump-rtl-cfg} enable dumping after control
and data flow analysis, to @file{@var{file}.116r.cfg}.  @option{-df}
and @option{-fdump-rtl-cfg} enable dumping dump after life analysis,
to @file{@var{file}.128r.life1} and @file{@var{file}.135r.life2}.

@item -dg
@itemx -fdump-rtl-greg
@opindex dg
@opindex fdump-rtl-greg
Dump after global register allocation, to @file{@var{file}.139r.greg}.

@item -dG
@itemx -fdump-rtl-gcse
@itemx -fdump-rtl-bypass
@opindex dG
@opindex fdump-rtl-gcse
@opindex fdump-rtl-bypass
@option{-dG} and @option{-fdump-rtl-gcse} enable dumping after GCSE, to
@file{@var{file}.114r.gcse}.  @option{-dG} and @option{-fdump-rtl-bypass}
enable dumping after jump bypassing and control flow optimizations, to
@file{@var{file}.115r.bypass}.

@item -dh
@itemx -fdump-rtl-eh
@opindex dh
@opindex fdump-rtl-eh
Dump after finalization of EH handling code, to @file{@var{file}.02.eh}.

@item -di
@itemx -fdump-rtl-sibling
@opindex di
@opindex fdump-rtl-sibling
Dump after sibling call optimizations, to @file{@var{file}.106r.sibling}.

@item -dj
@itemx -fdump-rtl-jump
@opindex dj
@opindex fdump-rtl-jump
Dump after the first jump optimization, to @file{@var{file}.112r.jump}.

@item -dk
@itemx -fdump-rtl-stack
@opindex dk
@opindex fdump-rtl-stack
Dump after conversion from registers to stack, to @file{@var{file}.152r.stack}.

@item -dl
@itemx -fdump-rtl-lreg
@opindex dl
@opindex fdump-rtl-lreg
Dump after local register allocation, to @file{@var{file}.138r.lreg}.

@item -dL
@itemx -fdump-rtl-loop2
@opindex dL
@opindex fdump-rtl-loop2
@option{-dL} and @option{-fdump-rtl-loop2} enable dumping after the
loop optimization pass, to @file{@var{file}.119r.loop2},
@file{@var{file}.120r.loop2_init},
@file{@var{file}.121r.loop2_invariant}, and
@file{@var{file}.125r.loop2_done}.

@item -dm
@itemx -fdump-rtl-sms
@opindex dm
@opindex fdump-rtl-sms
Dump after modulo scheduling, to @file{@var{file}.136r.sms}.

@item -dM
@itemx -fdump-rtl-mach
@opindex dM
@opindex fdump-rtl-mach
@c APPLE LOCAL begin mainline
Dump after performing the machine dependent reorganization pass, to
@file{@var{file}.155r.mach} if that pass exists.
@c APPLE LOCAL end mainline

@item -dn
@itemx -fdump-rtl-rnreg
@opindex dn
@opindex fdump-rtl-rnreg
Dump after register renumbering, to @file{@var{file}.147r.rnreg}.

@item -dN
@itemx -fdump-rtl-regmove
@opindex dN
@opindex fdump-rtl-regmove
Dump after the register move pass, to @file{@var{file}.132r.regmove}.

@item -do
@itemx -fdump-rtl-postreload
@opindex do
@opindex fdump-rtl-postreload
Dump after post-reload optimizations, to @file{@var{file}.24.postreload}.

@item -dr
@itemx -fdump-rtl-expand
@opindex dr
@opindex fdump-rtl-expand
Dump after RTL generation, to @file{@var{file}.104r.expand}.

@item -dR
@itemx -fdump-rtl-sched2
@opindex dR
@opindex fdump-rtl-sched2
Dump after the second scheduling pass, to @file{@var{file}.150r.sched2}.

@item -ds
@itemx -fdump-rtl-cse
@opindex ds
@opindex fdump-rtl-cse
Dump after CSE (including the jump optimization that sometimes follows
CSE), to @file{@var{file}.113r.cse}.

@item -dS
@itemx -fdump-rtl-sched
@opindex dS
@opindex fdump-rtl-sched
Dump after the first scheduling pass, to @file{@var{file}.21.sched}.

@item -dt
@itemx -fdump-rtl-cse2
@opindex dt
@opindex fdump-rtl-cse2
Dump after the second CSE pass (including the jump optimization that
sometimes follows CSE), to @file{@var{file}.127r.cse2}.

@item -dT
@itemx -fdump-rtl-tracer
@opindex dT
@opindex fdump-rtl-tracer
Dump after running tracer, to @file{@var{file}.118r.tracer}.

@item -dV
@itemx -fdump-rtl-vpt
@itemx -fdump-rtl-vartrack
@opindex dV
@opindex fdump-rtl-vpt
@opindex fdump-rtl-vartrack
@option{-dV} and @option{-fdump-rtl-vpt} enable dumping after the value
profile transformations, to @file{@var{file}.10.vpt}.  @option{-dV}
and @option{-fdump-rtl-vartrack} enable dumping after variable tracking,
to @file{@var{file}.154r.vartrack}.

@item -dw
@itemx -fdump-rtl-flow2
@opindex dw
@opindex fdump-rtl-flow2
Dump after the second flow pass, to @file{@var{file}.142r.flow2}.

@item -dz
@itemx -fdump-rtl-peephole2
@opindex dz
@opindex fdump-rtl-peephole2
Dump after the peephole pass, to @file{@var{file}.145r.peephole2}.

@item -dZ
@itemx -fdump-rtl-web
@opindex dZ
@opindex fdump-rtl-web
Dump after live range splitting, to @file{@var{file}.126r.web}.

@item -da
@itemx -fdump-rtl-all
@opindex da
@opindex fdump-rtl-all
Produce all the dumps listed above.

@item -dH
@opindex dH
Produce a core dump whenever an error occurs.

@item -dm
@opindex dm
Print statistics on memory usage, at the end of the run, to
standard error.

@item -dp
@opindex dp
Annotate the assembler output with a comment indicating which
pattern and alternative was used.  The length of each instruction is
also printed.

@item -dP
@opindex dP
Dump the RTL in the assembler output as a comment before each instruction.
Also turns on @option{-dp} annotation.

@item -dv
@opindex dv
For each of the other indicated dump files (either with @option{-d} or
@option{-fdump-rtl-@var{pass}}), dump a representation of the control flow
graph suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.

@item -dx
@opindex dx
Just generate RTL for a function instead of compiling it.  Usually used
with @samp{r} (@option{-fdump-rtl-expand}).

@item -dy
@opindex dy
Dump debugging information during parsing, to standard error.
@end table

@item -fdump-noaddr
@opindex fdump-noaddr
When doing debugging dumps (see @option{-d} option above), suppress
address output.  This makes it more feasible to use diff on debugging
dumps for compiler invocations with different compiler binaries and/or
different text / bss / data / heap / stack / dso start locations.

@item -fdump-unnumbered
@opindex fdump-unnumbered
When doing debugging dumps (see @option{-d} option above), suppress instruction
numbers, line number note and address output.  This makes it more feasible to
use diff on debugging dumps for compiler invocations with different
options, in particular with and without @option{-g}.

@item -fdump-translation-unit @r{(C++ only)}
@itemx -fdump-translation-unit-@var{options} @r{(C++ only)}
@opindex fdump-translation-unit
Dump a representation of the tree structure for the entire translation
unit to a file.  The file name is made by appending @file{.tu} to the
source file name.  If the @samp{-@var{options}} form is used, @var{options}
controls the details of the dump as described for the
@option{-fdump-tree} options.

@item -fdump-class-hierarchy @r{(C++ only)}
@itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
@opindex fdump-class-hierarchy
Dump a representation of each class's hierarchy and virtual function
table layout to a file.  The file name is made by appending @file{.class}
to the source file name.  If the @samp{-@var{options}} form is used,
@var{options} controls the details of the dump as described for the
@option{-fdump-tree} options.

@item -fdump-ipa-@var{switch}
@opindex fdump-ipa
Control the dumping at various stages of inter-procedural analysis
language tree to a file.  The file name is generated by appending a switch
specific suffix to the source file name.  The following dumps are possible:

@table @samp
@item all
Enables all inter-procedural analysis dumps; currently the only produced
dump is the @samp{cgraph} dump.

@item cgraph
Dumps information about call-graph optimization, unused function removal,
and inlining decisions.
@end table

@item -fdump-tree-@var{switch}
@itemx -fdump-tree-@var{switch}-@var{options}
@opindex fdump-tree
Control the dumping at various stages of processing the intermediate
language tree to a file.  The file name is generated by appending a switch
specific suffix to the source file name.  If the @samp{-@var{options}}
form is used, @var{options} is a list of @samp{-} separated options that
control the details of the dump.  Not all options are applicable to all
dumps, those which are not meaningful will be ignored.  The following
options are available

@table @samp
@item address
Print the address of each node.  Usually this is not meaningful as it
changes according to the environment and source file.  Its primary use
is for tying up a dump file with a debug environment.
@item slim
Inhibit dumping of members of a scope or body of a function merely
because that scope has been reached.  Only dump such items when they
are directly reachable by some other path.  When dumping pretty-printed
trees, this option inhibits dumping the bodies of control structures.
@item raw
Print a raw representation of the tree.  By default, trees are
pretty-printed into a C-like representation.
@item details
Enable more detailed dumps (not honored by every dump option).
@item stats
Enable dumping various statistics about the pass (not honored by every dump
option).
@item blocks
Enable showing basic block boundaries (disabled in raw dumps).
@item vops
Enable showing virtual operands for every statement.
@item lineno
Enable showing line numbers for statements.
@item uid
Enable showing the unique ID (@code{DECL_UID}) for each variable.
@item all
Turn on all options, except @option{raw}, @option{slim} and @option{lineno}.
@end table

The following tree dumps are possible:
@table @samp

@item original
Dump before any tree based optimization, to @file{@var{file}.original}.

@item optimized
Dump after all tree based optimization, to @file{@var{file}.optimized}.

@item inlined
Dump after function inlining, to @file{@var{file}.inlined}.

@item gimple
@opindex fdump-tree-gimple
Dump each function before and after the gimplification pass to a file.  The
file name is made by appending @file{.gimple} to the source file name.

@item cfg
@opindex fdump-tree-cfg
Dump the control flow graph of each function to a file.  The file name is
made by appending @file{.cfg} to the source file name.

@item vcg
@opindex fdump-tree-vcg
Dump the control flow graph of each function to a file in VCG format.  The
file name is made by appending @file{.vcg} to the source file name.  Note
that if the file contains more than one function, the generated file cannot
be used directly by VCG@.  You will need to cut and paste each function's
graph into its own separate file first.

@item ch
@opindex fdump-tree-ch
Dump each function after copying loop headers.  The file name is made by
appending @file{.ch} to the source file name.

@item ssa
@opindex fdump-tree-ssa
Dump SSA related information to a file.  The file name is made by appending
@file{.ssa} to the source file name.

@item salias
@opindex fdump-tree-salias
Dump structure aliasing variable information to a file.  This file name
is made by appending @file{.salias} to the source file name.

@item alias
@opindex fdump-tree-alias
Dump aliasing information for each function.  The file name is made by
appending @file{.alias} to the source file name.

@item ccp
@opindex fdump-tree-ccp
Dump each function after CCP@.  The file name is made by appending
@file{.ccp} to the source file name.

@item storeccp
@opindex fdump-tree-storeccp
Dump each function after STORE-CCP.  The file name is made by appending
@file{.storeccp} to the source file name.

@item pre
@opindex fdump-tree-pre
Dump trees after partial redundancy elimination.  The file name is made
by appending @file{.pre} to the source file name.

@item fre
@opindex fdump-tree-fre
Dump trees after full redundancy elimination.  The file name is made
by appending @file{.fre} to the source file name.

@item copyprop
@opindex fdump-tree-copyprop
Dump trees after copy propagation.  The file name is made
by appending @file{.copyprop} to the source file name.

@item store_copyprop
@opindex fdump-tree-store_copyprop
Dump trees after store copy-propagation.  The file name is made
by appending @file{.store_copyprop} to the source file name.

@item dce
@opindex fdump-tree-dce
Dump each function after dead code elimination.  The file name is made by
appending @file{.dce} to the source file name.

@item mudflap
@opindex fdump-tree-mudflap
Dump each function after adding mudflap instrumentation.  The file name is
made by appending @file{.mudflap} to the source file name.

@item sra
@opindex fdump-tree-sra
Dump each function after performing scalar replacement of aggregates.  The
file name is made by appending @file{.sra} to the source file name.

@item sink
@opindex fdump-tree-sink
Dump each function after performing code sinking.  The file name is made
by appending @file{.sink} to the source file name. 

@item dom
@opindex fdump-tree-dom
Dump each function after applying dominator tree optimizations.  The file
name is made by appending @file{.dom} to the source file name.

@item dse
@opindex fdump-tree-dse
Dump each function after applying dead store elimination.  The file
name is made by appending @file{.dse} to the source file name.

@item phiopt
@opindex fdump-tree-phiopt
Dump each function after optimizing PHI nodes into straightline code.  The file
name is made by appending @file{.phiopt} to the source file name.

@item forwprop
@opindex fdump-tree-forwprop
Dump each function after forward propagating single use variables.  The file
name is made by appending @file{.forwprop} to the source file name.

@item copyrename
@opindex fdump-tree-copyrename
Dump each function after applying the copy rename optimization.  The file
name is made by appending @file{.copyrename} to the source file name.

@item nrv
@opindex fdump-tree-nrv
Dump each function after applying the named return value optimization on
generic trees.  The file name is made by appending @file{.nrv} to the source
file name.

@item vect
@opindex fdump-tree-vect
Dump each function after applying vectorization of loops.  The file name is
made by appending @file{.vect} to the source file name.

@item vrp
@opindex fdump-tree-vrp
Dump each function after Value Range Propagation (VRP).  The file name
is made by appending @file{.vrp} to the source file name.

@item all
@opindex fdump-tree-all
Enable all the available tree dumps with the flags provided in this option.
@end table

@item -ftree-vectorizer-verbose=@var{n}
@opindex ftree-vectorizer-verbose
This option controls the amount of debugging output the vectorizer prints.
This information is written to standard error, unless 
@option{-fdump-tree-all} or @option{-fdump-tree-vect} is specified, 
in which case it is output to the usual dump listing file, @file{.vect}.
For @var{n}=0 no diagnostic information is reported.
If @var{n}=1 the vectorizer reports each loop that got vectorized, 
and the total number of loops that got vectorized.
If @var{n}=2 the vectorizer also reports non-vectorized loops that passed 
the first analysis phase (vect_analyze_loop_form) - i.e. countable, 
inner-most, single-bb, single-entry/exit loops.  This is the same verbosity 
level that @option{-fdump-tree-vect-stats} uses.
Higher verbosity levels mean either more information dumped for each 
reported loop, or same amount of information reported for more loops:
If @var{n}=3, alignment related information is added to the reports.
If @var{n}=4, data-references related information (e.g. memory dependences, 
memory access-patterns) is added to the reports.
If @var{n}=5, the vectorizer reports also non-vectorized inner-most loops 
that did not pass the first analysis phase (i.e. may not be countable, or 
may have complicated control-flow).
If @var{n}=6, the vectorizer reports also non-vectorized nested loops.
For @var{n}=7, all the information the vectorizer generates during its 
analysis and transformation is reported.  This is the same verbosity level
that @option{-fdump-tree-vect-details} uses.

@item -frandom-seed=@var{string}
@opindex frandom-string
This option provides a seed that GCC uses when it would otherwise use
random numbers.  It is used to generate certain symbol names
that have to be different in every compiled file.  It is also used to
place unique stamps in coverage data files and the object files that
produce them.  You can use the @option{-frandom-seed} option to produce
reproducibly identical object files.

The @var{string} should be different for every file you compile.

@item -fsched-verbose=@var{n}
@opindex fsched-verbose
On targets that use instruction scheduling, this option controls the
amount of debugging output the scheduler prints.  This information is
written to standard error, unless @option{-dS} or @option{-dR} is
specified, in which case it is output to the usual dump
listing file, @file{.sched} or @file{.sched2} respectively.  However
for @var{n} greater than nine, the output is always printed to standard
error.

For @var{n} greater than zero, @option{-fsched-verbose} outputs the
same information as @option{-dRS}.  For @var{n} greater than one, it
also output basic block probabilities, detailed ready list information
and unit/insn info.  For @var{n} greater than two, it includes RTL
at abort point, control-flow and regions info.  And for @var{n} over
four, @option{-fsched-verbose} also includes dependence info.

@item -save-temps
@opindex save-temps
Store the usual ``temporary'' intermediate files permanently; place them
in the current directory and name them based on the source file.  Thus,
compiling @file{foo.c} with @samp{-c -save-temps} would produce files
@file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
preprocessed @file{foo.i} output file even though the compiler now
normally uses an integrated preprocessor.

When used in combination with the @option{-x} command line option,
@option{-save-temps} is sensible enough to avoid over writing an
input source file with the same extension as an intermediate file.
The corresponding intermediate file may be obtained by renaming the
source file before using @option{-save-temps}.

@c LLVM LOCAL begin
@item -mllvm @var{string}
@opindex mllvm
This option provides a way to supply llvm optimization and code
generation debugging options to LLVM component directly. This option
is intended for compiler developers, who are investigating LLVM 
bugs, not end users.
@c LLVM LOCAL end

@item -time
@opindex time
Report the CPU time taken by each subprocess in the compilation
sequence.  For C source files, this is the compiler proper and assembler
(plus the linker if linking is done).  The output looks like this:

@smallexample
# cc1 0.12 0.01
# as 0.00 0.01
@end smallexample

The first number on each line is the ``user time'', that is time spent
executing the program itself.  The second number is ``system time'',
time spent executing operating system routines on behalf of the program.
Both numbers are in seconds.

@item -fvar-tracking
@opindex fvar-tracking
Run variable tracking pass.  It computes where variables are stored at each
position in code.  Better debugging information is then generated
(if the debugging information format supports this information).

It is enabled by default when compiling with optimization (@option{-Os},
@c APPLE LOCAL -Oz
@option{-O}, @option{-O2}, @option{-Oz} (APPLE ONLY), ...), debugging information (@option{-g}) and
the debug info format supports it.

@item -print-file-name=@var{library}
@opindex print-file-name
Print the full absolute name of the library file @var{library} that
would be used when linking---and don't do anything else.  With this
option, GCC does not compile or link anything; it just prints the
file name.

@item -print-multi-directory
@opindex print-multi-directory
Print the directory name corresponding to the multilib selected by any
other switches present in the command line.  This directory is supposed
to exist in @env{GCC_EXEC_PREFIX}.

@item -print-multi-lib
@opindex print-multi-lib
Print the mapping from multilib directory names to compiler switches
that enable them.  The directory name is separated from the switches by
@samp{;}, and each switch starts with an @samp{@@} instead of the
@samp{-}, without spaces between multiple switches.  This is supposed to
ease shell-processing.

@item -print-prog-name=@var{program}
@opindex print-prog-name
Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.

@item -print-libgcc-file-name
@opindex print-libgcc-file-name
Same as @option{-print-file-name=libgcc.a}.

This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
but you do want to link with @file{libgcc.a}.  You can do

@smallexample
gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
@end smallexample

@item -print-search-dirs
@opindex print-search-dirs
Print the name of the configured installation directory and a list of
program and library directories @command{gcc} will search---and don't do anything else.

This is useful when @command{gcc} prints the error message
@samp{installation problem, cannot exec cpp0: No such file or directory}.
To resolve this you either need to put @file{cpp0} and the other compiler
components where @command{gcc} expects to find them, or you can set the environment
variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
Don't forget the trailing @samp{/}.
@xref{Environment Variables}.

@item -dumpmachine
@opindex dumpmachine
Print the compiler's target machine (for example,
@samp{i686-pc-linux-gnu})---and don't do anything else.

@item -dumpversion
@opindex dumpversion
Print the compiler version (for example, @samp{3.0})---and don't do
anything else.

@item -dumpspecs
@opindex dumpspecs
Print the compiler's built-in specs---and don't do anything else.  (This
is used when GCC itself is being built.)  @xref{Spec Files}.

@item -feliminate-unused-debug-types
@opindex feliminate-unused-debug-types
Normally, when producing DWARF2 output, GCC will emit debugging
information for all types declared in a compilation
unit, regardless of whether or not they are actually used
in that compilation unit.  Sometimes this is useful, such as
if, in the debugger, you want to cast a value to a type that is
not actually used in your program (but is declared).  More often,
however, this results in a significant amount of wasted space.
With this option, GCC will avoid producing debug symbol output
for types that are nowhere used in the source file being compiled.
@end table

@node Optimize Options
@section Options That Control Optimization
@cindex optimize options
@cindex options, optimization

These options control various sorts of optimizations.

Without any optimization option, the compiler's goal is to reduce the
cost of compilation and to make debugging produce the expected
results.  Statements are independent: if you stop the program with a
breakpoint between statements, you can then assign a new value to any
variable or change the program counter to any other statement in the
function and get exactly the results you would expect from the source
code.

Turning on optimization flags makes the compiler attempt to improve
the performance and/or code size at the expense of compilation time
and possibly the ability to debug the program.

The compiler performs optimization based on the knowledge it has of
the program.  Optimization levels @option{-O} and above, in
particular, enable @emph{unit-at-a-time} mode, which allows the
compiler to consider information gained from later functions in
the file when compiling a function.  Compiling multiple files at
once to a single output file in @emph{unit-at-a-time} mode allows
the compiler to use information gained from all of the files when
compiling each of them.

Not all optimizations are controlled directly by a flag.  Only
optimizations that have a flag are listed.

@table @gcctabopt
@item -O
@itemx -O1
@opindex O
@opindex O1
Optimize.  Optimizing compilation takes somewhat more time, and a lot
more memory for a large function.

With @option{-O}, the compiler tries to reduce code size and execution
time, without performing any optimizations that take a great deal of
compilation time.

@option{-O} turns on the following optimization flags:
@gccoptlist{-fdefer-pop @gol
-fdelayed-branch @gol
-fguess-branch-probability @gol
-fcprop-registers @gol
-fif-conversion @gol
-fif-conversion2 @gol
-ftree-ccp @gol
-ftree-dce @gol
-ftree-dominator-opts @gol
-ftree-dse @gol
-ftree-ter @gol
-ftree-lrs @gol
-ftree-sra @gol
-ftree-copyrename @gol
-ftree-fre @gol
-ftree-ch @gol
-funit-at-a-time @gol
-fmerge-constants}

@option{-O} also turns on @option{-fomit-frame-pointer} on machines
where doing so does not interfere with debugging.

@item -O2
@opindex O2
Optimize even more.  GCC performs nearly all supported optimizations
that do not involve a space-speed tradeoff.  The compiler does not
perform loop unrolling or function inlining when you specify @option{-O2}.
As compared to @option{-O}, this option increases both compilation time
and the performance of the generated code.

@option{-O2} turns on all optimization flags specified by @option{-O}.  It
also turns on the following optimization flags:
@gccoptlist{-fthread-jumps @gol
-fcrossjumping @gol
-foptimize-sibling-calls @gol
-fcse-follow-jumps  -fcse-skip-blocks @gol
-fgcse  -fgcse-lm  @gol
-fexpensive-optimizations @gol
-frerun-cse-after-loop  @gol
-fcaller-saves @gol
-fpeephole2 @gol
-fschedule-insns  -fschedule-insns2 @gol
-fsched-interblock  -fsched-spec @gol
-fregmove @gol
-fstrict-aliasing -fstrict-overflow @gol
-fdelete-null-pointer-checks @gol
-freorder-blocks  -freorder-functions @gol
-falign-functions  -falign-jumps @gol
-falign-loops  -falign-labels @gol
-ftree-vrp @gol
-ftree-pre}

Please note the warning under @option{-fgcse} about
invoking @option{-O2} on programs that use computed gotos.

@option{-O2} doesn't turn on @option{-ftree-vrp} for the Ada compiler.
This option must be explicitly specified on the command line to be
enabled for the Ada compiler.

@c APPLE LOCAL begin optimization
In Apple's version of GCC, @option{-fstrict-aliasing},
@option{-freorder-blocks}, and @option{-fsched-interblock}
are disabled by default when optimizing.
@c APPLE LOCAL end optimization

@item -O3
@opindex O3
Optimize yet more.  @option{-O3} turns on all optimizations specified by
@option{-O2} and also turns on the @option{-finline-functions},
@option{-funswitch-loops} and @option{-fgcse-after-reload} options.

@c LLVM LOCAL begin
@item -flto
@opindex flto
Enable LLVM Link Time Optimization. 

@item -O4
@opindex O4
Enable LLVM Link Time Optimization. @option{-O4} turns on all LLVM compile
time optimizations specified by @option{-O2}.
@c LLVM LOCAL end

@item -O0
@opindex O0
Do not optimize.  This is the default.

@c APPLE LOCAL begin -fast or -fastf or -fastcp
@item -fast
@opindex fast
Optimize for maximum performance. @option{-fast} changes the overall optimization 
strategy of GCC in order to produce the fastest possible running code for PPC7450 
and G5 architectures. By default, @option{-fast} optimizes for G5. Programs 
optimized for G5 will not run on PPC7450. To optimize for PPC7450, add 
@option{-mcpu=7450} on command line.

@option{-fast} currently enables the following optimization flags (for G5 and PPC7450). 
These flags may change in the future.  You cannot override any of these options if you use 
@option{-fast} except by setting @option{-mcpu=7450} (or @option{-fPIC}, see below). 

@gccoptlist{-O3
-falign-loops-max-skip=15
-falign-jumps-max-skip=15
-falign-loops=16
-falign-jumps=16
-falign-functions=16
-malign-natural (except when -fastf is specified)
-ffast-math
-fstrict-aliasing
-funroll-loops
-ftree-loop-linear
-ftree-loop-memset
-mcpu=G5
-mpowerpc-gpopt
-mtune=G5  (unless -mtune=G4 is specified).
-fsched-interblock
-fgcse-sm
-mpowerpc64}

To build shared libraries with @option{-fast}, specify @option{-fPIC}
on the command line as @option{-fast} turns on @option{-mdynamic-no-pic}
otherwise.

Important notes: @option{-ffast-math} results in code that is not necessarily 
IEEE-compliant.  @option{-fstrict-aliasing} is highly likely to break 
non-standard-compliant programs.  @option{-malign-natural} only works properly if
the entire program is compiled with it, and none of the standard headers/libraries
contain any code that changes alignment when this option is used.

On Intel target, @option{-fast} currently enables the following optimization flags:

@gccoptlist{-O3
-fomit-frame-pointer
-fstrict-aliasing
-momit-leaf-frame-pointer
-fno-tree-pre
-falign-loops}

All choices of flags enabled by @option{-fast} are subject to change without notice.

@c APPLE LOCAL end -fast or -fastf or -fastcp

@c APPLE LOCAL begin 4231761 -Oz
@item -Os
@opindex Os
Optimize for size, but not at the expense of speed.
@option{-Os} enables all @option{-O2} optimizations that
do not typically increase code size.  However, instructions
are chosen for best performance, regardless of size.
To optimize solely for size on Darwin, use @option{-Oz} (APPLE ONLY).

The following options are set for @option{-O2}, but are disabled under @option{-Os}:
@gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
-falign-labels  -freorder-blocks  -freorder-blocks-and-partition @gol
-fprefetch-loop-arrays  -ftree-vect-loop-version}

@c APPLE LOCAL begin 4200438
When optimizing with @option{-Os} or @option{-Oz} (APPLE ONLY) on
Darwin, any function up to 30 ``estimated insns'' in size will be
considered for inlining.  When compiling C and Objective-C sourcefiles with
@option{-Os} or @option{-Oz} on Darwin, functions explictly marked
with the @code{inline} keyword up to 450 ``estimated insns'' in size
will be considered for inlining.
@c APPLE LOCAL end 4200438
@c APPLE LOCAL begin Disable string insns with -Os on Darwin (radar 3509006)
When compiling for Apple POWERPC targets, @option{-Os} and
@option{-Oz} (APPLE ONLY) disable use of the string instructions even though they
would usually be smaller, because the kernel can't emulate them
correctly in some rare cases.  This behavior is not portable to any
other gcc environment, and will not affect most programs at all.  If
you really want the string instructions, use -mstring.
@c APPLE LOCAL end Disable string insns with -Os on Darwin (radar 3509006)

@item -Oz
@opindex Oz
(APPLE ONLY) Optimize for size, regardless of performance.
@option{-Oz} enables the same optimization flags that @option{-Os}
uses, but @option{-Oz} also enables other optimizations intended solely
to reduce code size.  In particular, instructions that encode into
fewer bytes are preferred over longer instructions that execute in
fewer cycles.  @option{-Oz} on Darwin is very similar to @option{-Os}
in FSF distributions of GCC.  @option{-Oz} employs the same inlining
limits and avoids string instructions just like @option{-Os}.
@c APPLE LOCAL end 4231761 -Oz

If you use multiple @option{-O} options, with or without level numbers,
the last such option is the one that is effective.
@end table

Options of the form @option{-f@var{flag}} specify machine-independent
flags.  Most flags have both positive and negative forms; the negative
form of @option{-ffoo} would be @option{-fno-foo}.  In the table
below, only one of the forms is listed---the one you typically will
use.  You can figure out the other form by either removing @samp{no-}
or adding it.

The following options control specific optimizations.  They are either
activated by @option{-O} options or are related to ones that are.  You
can use the following flags in the rare cases when ``fine-tuning'' of
optimizations to be performed is desired.

@table @gcctabopt
@item -fno-default-inline
@opindex fno-default-inline
Do not make member functions inline by default merely because they are
defined inside the class scope (C++ only).  Otherwise, when you specify
@w{@option{-O}}, member functions defined inside class scope are compiled
inline by default; i.e., you don't need to add @samp{inline} in front of
the member function name.

@item -fno-defer-pop
@opindex fno-defer-pop
Always pop the arguments to each function call as soon as that function
returns.  For machines which must pop arguments after a function call,
the compiler normally lets arguments accumulate on the stack for several
function calls and pops them all at once.

@c APPLE LOCAL begin 4231761 -Oz
Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os},
@option{-Oz} (APPLE ONLY).
@c APPLE LOCAL end 4231761 -Oz

@item -fforce-mem
@opindex fforce-mem
Force memory operands to be copied into registers before doing
arithmetic on them.  This produces better code by making all memory
references potential common subexpressions.  When they are not common
subexpressions, instruction combination should eliminate the separate
register-load. This option is now a nop and will be removed in 4.3.

@item -fforce-addr
@opindex fforce-addr
Force memory address constants to be copied into registers before
doing arithmetic on them.

@item -fomit-frame-pointer
@opindex fomit-frame-pointer
Don't keep the frame pointer in a register for functions that
don't need one.  This avoids the instructions to save, set up and
restore frame pointers; it also makes an extra register available
in many functions.  @strong{It also makes debugging impossible on
some machines.}

On some machines, such as the VAX, this flag has no effect, because
the standard calling sequence automatically handles the frame pointer
and nothing is saved by pretending it doesn't exist.  The
machine-description macro @code{FRAME_POINTER_REQUIRED} controls
whether a target machine supports this flag.  @xref{Registers,,Register
Usage, gccint, GNU Compiler Collection (GCC) Internals}.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -foptimize-sibling-calls
@opindex foptimize-sibling-calls
Optimize sibling and tail recursive calls.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fno-inline
@opindex fno-inline
Don't pay attention to the @code{inline} keyword.  Normally this option
is used to keep the compiler from expanding any functions inline.
Note that if you are not optimizing, no functions can be expanded inline.

@item -finline-functions
@opindex finline-functions
Integrate all simple functions into their callers.  The compiler
heuristically decides which functions are simple enough to be worth
integrating in this way.

If all calls to a given function are integrated, and the function is
declared @code{static}, then the function is normally not output as
assembler code in its own right.

Enabled at level @option{-O3}.

@item -finline-functions-called-once
@opindex finline-functions-called-once
Consider all @code{static} functions called once for inlining into their
caller even if they are not marked @code{inline}.  If a call to a given
function is integrated, then the function is not output as assembler code
in its own right.

Enabled if @option{-funit-at-a-time} is enabled.

@item -fearly-inlining
@opindex fearly-inlining
Inline functions marked by @code{always_inline} and functions whose body seems
smaller than the function call overhead early before doing
@option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
makes profiling significantly cheaper and usually inlining faster on programs
having large chains of nested wrapper functions.

Enabled by default.

@item -finline-limit=@var{n}
@opindex finline-limit
By default, GCC limits the size of functions that can be inlined.  This flag
allows the control of this limit for functions that are explicitly marked as
inline (i.e., marked with the inline keyword or defined within the class
definition in c++).  @var{n} is the size of functions that can be inlined in
number of pseudo instructions (not counting parameter handling).  The default
value of @var{n} is 600.
Increasing this value can result in more inlined code at
the cost of compilation time and memory consumption.  Decreasing usually makes
the compilation faster and less code will be inlined (which presumably
means slower programs).  This option is particularly useful for programs that
use inlining heavily such as those based on recursive templates with C++.

Inlining is actually controlled by a number of parameters, which may be
specified individually by using @option{--param @var{name}=@var{value}}.
The @option{-finline-limit=@var{n}} option sets some of these parameters
as follows:

@table @gcctabopt
@item max-inline-insns-single
 is set to @var{n}/2.
@item max-inline-insns-auto
 is set to @var{n}/2.
@item min-inline-insns
 is set to 130 or @var{n}/4, whichever is smaller.
@item max-inline-insns-rtl
 is set to @var{n}.
@end table

See below for a documentation of the individual
parameters controlling inlining.

@emph{Note:} pseudo instruction represents, in this particular context, an
abstract measurement of function's size.  In no way does it represent a count
of assembly instructions and as such its exact meaning might change from one
release to an another.

@item -fkeep-inline-functions
@opindex fkeep-inline-functions
In C, emit @code{static} functions that are declared @code{inline}
into the object file, even if the function has been inlined into all
of its callers.  This switch does not affect functions using the
@code{extern inline} extension in GNU C@.  In C++, emit any and all
inline functions into the object file.

@item -fkeep-static-consts
@opindex fkeep-static-consts
Emit variables declared @code{static const} when optimization isn't turned
on, even if the variables aren't referenced.

GCC enables this option by default.  If you want to force the compiler to
check if the variable was referenced, regardless of whether or not
optimization is turned on, use the @option{-fno-keep-static-consts} option.

@c APPLE LOCAL begin ARM conditionally disable local RA
@item -flocal-alloc
(APPLE ONLY) Enable the local (intra-basic-block) register allocator.

GCC enables this option by default.  If you want to force the compiler to
supress register allocation within a basic block, use the
@option{-fno-local-alloc} option.  This option cannot be disabled with
@option{-O0}, for correctness reasons.
@c APPLE LOCAL end ARM conditionally disable local RA

@item -fmerge-constants
Attempt to merge identical constants (string constants and floating point
constants) across compilation units.

This option is the default for optimized compilation if the assembler and
linker support it.  Use @option{-fno-merge-constants} to inhibit this
behavior.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fmerge-all-constants
Attempt to merge identical constants and identical variables.

This option implies @option{-fmerge-constants}.  In addition to
@option{-fmerge-constants} this considers e.g.@: even constant initialized
arrays or initialized constant variables with integral or floating point
types.  Languages like C or C++ require each non-automatic variable to
have distinct location, so using this option will result in non-conforming
behavior.

@item -fmodulo-sched
@opindex fmodulo-sched
Perform swing modulo scheduling immediately before the first scheduling
pass.  This pass looks at innermost loops and reorders their
instructions by overlapping different iterations.

@item -fno-branch-count-reg
@opindex fno-branch-count-reg
Do not use ``decrement and branch'' instructions on a count register,
but instead generate a sequence of instructions that decrement a
register, compare it against zero, then branch based upon the result.
This option is only meaningful on architectures that support such
instructions, which include x86, PowerPC, IA-64 and S/390.

The default is @option{-fbranch-count-reg}.

@item -fno-function-cse
@opindex fno-function-cse
Do not put function addresses in registers; make each instruction that
calls a constant function contain the function's address explicitly.

This option results in less efficient code, but some strange hacks
that alter the assembler output may be confused by the optimizations
performed when this option is not used.

The default is @option{-ffunction-cse}

@item -fno-zero-initialized-in-bss
@opindex fno-zero-initialized-in-bss
If the target supports a BSS section, GCC by default puts variables that
are initialized to zero into BSS@.  This can save space in the resulting
code.

This option turns off this behavior because some programs explicitly
rely on variables going to the data section.  E.g., so that the
resulting executable can find the beginning of that section and/or make
assumptions based on that.

The default is @option{-fzero-initialized-in-bss}.

@item -fbounds-check
@opindex fbounds-check
For front-ends that support it, generate additional code to check that
indices used to access arrays are within the declared range.  This is
currently only supported by the Java and Fortran front-ends, where
this option defaults to true and false respectively.

@item -fmudflap -fmudflapth -fmudflapir
@opindex fmudflap
@opindex fmudflapth
@opindex fmudflapir
@cindex bounds checking
@cindex mudflap
For front-ends that support it (C and C++), instrument all risky
pointer/array dereferencing operations, some standard library
string/heap functions, and some other associated constructs with
range/validity tests.  Modules so instrumented should be immune to
buffer overflows, invalid heap use, and some other classes of C/C++
programming errors.  The instrumentation relies on a separate runtime
library (@file{libmudflap}), which will be linked into a program if
@option{-fmudflap} is given at link time.  Run-time behavior of the
instrumented program is controlled by the @env{MUDFLAP_OPTIONS}
environment variable.  See @code{env MUDFLAP_OPTIONS=-help a.out}
for its options.

Use @option{-fmudflapth} instead of @option{-fmudflap} to compile and to
link if your program is multi-threaded.  Use @option{-fmudflapir}, in
addition to @option{-fmudflap} or @option{-fmudflapth}, if
instrumentation should ignore pointer reads.  This produces less
instrumentation (and therefore faster execution) and still provides
some protection against outright memory corrupting writes, but allows
erroneously read data to propagate within a program.

@item -fthread-jumps
@opindex fthread-jumps
Perform optimizations where we check to see if a jump branches to a
location where another comparison subsumed by the first is found.  If
so, the first branch is redirected to either the destination of the
second branch or a point immediately following it, depending on whether
the condition is known to be true or false.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fcse-follow-jumps
@opindex fcse-follow-jumps
In common subexpression elimination, scan through jump instructions
when the target of the jump is not reached by any other path.  For
example, when CSE encounters an @code{if} statement with an
@code{else} clause, CSE will follow the jump when the condition
tested is false.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fcse-skip-blocks
@opindex fcse-skip-blocks
This is similar to @option{-fcse-follow-jumps}, but causes CSE to
follow jumps which conditionally skip over blocks.  When CSE
encounters a simple @code{if} statement with no else clause,
@option{-fcse-skip-blocks} causes CSE to follow the jump around the
body of the @code{if}.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -frerun-cse-after-loop
@opindex frerun-cse-after-loop
Re-run common subexpression elimination after loop optimizations has been
performed.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fgcse
@opindex fgcse
Perform a global common subexpression elimination pass.
This pass also performs global constant and copy propagation.

@emph{Note:} When compiling a program using computed gotos, a GCC
extension, you may get better runtime performance if you disable
the global common subexpression elimination pass by adding
@option{-fno-gcse} to the command line.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fgcse-lm
@opindex fgcse-lm
When @option{-fgcse-lm} is enabled, global common subexpression elimination will
attempt to move loads which are only killed by stores into themselves.  This
allows a loop containing a load/store sequence to be changed to a load outside
the loop, and a copy/store within the loop.

Enabled by default when gcse is enabled.

@item -fgcse-sm
@opindex fgcse-sm
When @option{-fgcse-sm} is enabled, a store motion pass is run after
global common subexpression elimination.  This pass will attempt to move
stores out of loops.  When used in conjunction with @option{-fgcse-lm},
loops containing a load/store sequence can be changed to a load before
the loop and a store after the loop.

Not enabled at any optimization level.

@item -fgcse-las
@opindex fgcse-las
When @option{-fgcse-las} is enabled, the global common subexpression
elimination pass eliminates redundant loads that come after stores to the
same memory location (both partial and full redundancies).

Not enabled at any optimization level.

@item -fgcse-after-reload
@opindex fgcse-after-reload
When @option{-fgcse-after-reload} is enabled, a redundant load elimination
pass is performed after reload.  The purpose of this pass is to cleanup
redundant spilling.

@item -funsafe-loop-optimizations
@opindex funsafe-loop-optimizations
If given, the loop optimizer will assume that loop indices do not
overflow, and that the loops with nontrivial exit condition are not
infinite.  This enables a wider range of loop optimizations even if
the loop optimizer itself cannot prove that these assumptions are valid.
Using @option{-Wunsafe-loop-optimizations}, the compiler will warn you
if it finds this kind of loop.

@item -fcrossjumping
@opindex crossjumping
Perform cross-jumping transformation.  This transformation unifies equivalent code and save code size.  The
resulting code may or may not perform better than without cross-jumping.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fif-conversion
@opindex if-conversion
Attempt to transform conditional jumps into branch-less equivalents.  This
include use of conditional moves, min, max, set flags and abs instructions, and
some tricks doable by standard arithmetics.  The use of conditional execution
on chips where it is available is controlled by @code{if-conversion2}.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fif-conversion2
@opindex if-conversion2
Use conditional execution (where available) to transform conditional jumps into
branch-less equivalents.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fdelete-null-pointer-checks
@opindex fdelete-null-pointer-checks
Use global dataflow analysis to identify and eliminate useless checks
for null pointers.  The compiler assumes that dereferencing a null
pointer would have halted the program.  If a pointer is checked after
it has already been dereferenced, it cannot be null.

In some environments, this assumption is not true, and programs can
safely dereference null pointers.  Use
@option{-fno-delete-null-pointer-checks} to disable this optimization
for programs which depend on that behavior.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fexpensive-optimizations
@opindex fexpensive-optimizations
Perform a number of minor optimizations that are relatively expensive.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -foptimize-register-move
@itemx -fregmove
@opindex foptimize-register-move
@opindex fregmove
Attempt to reassign register numbers in move instructions and as
operands of other simple instructions in order to maximize the amount of
register tying.  This is especially helpful on machines with two-operand
instructions.

Note @option{-fregmove} and @option{-foptimize-register-move} are the same
optimization.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fdelayed-branch
@opindex fdelayed-branch
If supported for the target machine, attempt to reorder instructions
to exploit instruction slots available after delayed branch
instructions.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fschedule-insns
@opindex fschedule-insns
If supported for the target machine, attempt to reorder instructions to
eliminate execution stalls due to required data being unavailable.  This
helps machines that have slow floating point or memory load instructions
by allowing other instructions to be issued until the result of the load
or floating point instruction is required.

@c APPLE LOCAL begin 4231761 5591571
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} for PPC targets;
ignored for x86 targets (APPLE ONLY).
@c APPLE LOCAL end 4231761 5591571

@item -fschedule-insns2
@opindex fschedule-insns2
Similar to @option{-fschedule-insns}, but requests an additional pass of
instruction scheduling after register allocation has been done.  This is
especially useful on machines with a relatively small number of
registers and where memory load instructions take more than one cycle.

@c APPLE LOCAL begin 4231761 5591571
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} for PPC targets;
ignored for x86 targets (APPLE ONLY).
@c APPLE LOCAL end 4231761 5591571

@item -fno-sched-interblock
@opindex fno-sched-interblock
Don't schedule instructions across basic blocks.  This is normally
enabled by default when scheduling before register allocation, i.e.@:
with @option{-fschedule-insns} or at @option{-O2} or higher.

@item -fno-sched-spec
@opindex fno-sched-spec
Don't allow speculative motion of non-load instructions.  This is normally
enabled by default when scheduling before register allocation, i.e.@:
with @option{-fschedule-insns} or at @option{-O2} or higher.

@item -fsched-spec-load
@opindex fsched-spec-load
Allow speculative motion of some load instructions.  This only makes
sense when scheduling before register allocation, i.e.@: with
@option{-fschedule-insns} or at @option{-O2} or higher.

@item -fsched-spec-load-dangerous
@opindex fsched-spec-load-dangerous
Allow speculative motion of more load instructions.  This only makes
sense when scheduling before register allocation, i.e.@: with
@option{-fschedule-insns} or at @option{-O2} or higher.

@item -fsched-stalled-insns=@var{n}
@opindex fsched-stalled-insns
Define how many insns (if any) can be moved prematurely from the queue
of stalled insns into the ready list, during the second scheduling pass.

@item -fsched-stalled-insns-dep=@var{n}
@opindex fsched-stalled-insns-dep
Define how many insn groups (cycles) will be examined for a dependency
on a stalled insn that is candidate for premature removal from the queue
of stalled insns.  Has an effect only during the second scheduling pass,
and only if @option{-fsched-stalled-insns} is used and its value is not zero.

@item -fsched2-use-superblocks
@opindex fsched2-use-superblocks
When scheduling after register allocation, do use superblock scheduling
algorithm.  Superblock scheduling allows motion across basic block boundaries
resulting on faster schedules.  This option is experimental, as not all machine
descriptions used by GCC model the CPU closely enough to avoid unreliable
results from the algorithm.

This only makes sense when scheduling after register allocation, i.e.@: with
@option{-fschedule-insns2} or at @option{-O2} or higher.

@item -fsched2-use-traces
@opindex fsched2-use-traces
Use @option{-fsched2-use-superblocks} algorithm when scheduling after register
allocation and additionally perform code duplication in order to increase the
size of superblocks using tracer pass.  See @option{-ftracer} for details on
trace formation.

This mode should produce faster but significantly longer programs.  Also
without @option{-fbranch-probabilities} the traces constructed may not
match the reality and hurt the performance.  This only makes
sense when scheduling after register allocation, i.e.@: with
@option{-fschedule-insns2} or at @option{-O2} or higher.

@item -fsee
@opindex fsee
Eliminates redundant extension instructions and move the non redundant
ones to optimal placement using LCM.

@item -freschedule-modulo-scheduled-loops
@opindex fscheduling-in-modulo-scheduled-loops
The modulo scheduling comes before the traditional scheduling, if a loop was modulo scheduled
we may want to prevent the later scheduling passes from changing its schedule, we use this
option to control that.

@item -fcaller-saves
@opindex fcaller-saves
Enable values to be allocated in registers that will be clobbered by
function calls, by emitting extra instructions to save and restore the
registers around such calls.  Such allocation is done only when it
seems to result in better code than would otherwise be produced.

This option is always enabled by default on certain machines, usually
those which have no call-preserved registers to use instead.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -ftree-pre
Perform Partial Redundancy Elimination (PRE) on trees.  This flag is
enabled by default at @option{-O2} and @option{-O3}.

@item -ftree-fre
Perform Full Redundancy Elimination (FRE) on trees.  The difference
between FRE and PRE is that FRE only considers expressions
that are computed on all paths leading to the redundant computation.
This analysis faster than PRE, though it exposes fewer redundancies.
This flag is enabled by default at @option{-O} and higher.

@item -ftree-copy-prop
Perform copy propagation on trees.  This pass eliminates unnecessary
copy operations.  This flag is enabled by default at @option{-O} and
higher.

@item -ftree-store-copy-prop
Perform copy propagation of memory loads and stores.  This pass
eliminates unnecessary copy operations in memory references
(structures, global variables, arrays, etc).  This flag is enabled by
default at @option{-O2} and higher.

@item -ftree-salias
Perform structural alias analysis on trees.  This flag
is enabled by default at @option{-O} and higher.

@item -fipa-pta
Perform interprocedural pointer analysis.

@item -ftree-sink
Perform forward store motion  on trees.  This flag is
enabled by default at @option{-O} and higher.

@item -ftree-ccp
Perform sparse conditional constant propagation (CCP) on trees.  This
pass only operates on local scalar variables and is enabled by default
at @option{-O} and higher.

@item -ftree-store-ccp
Perform sparse conditional constant propagation (CCP) on trees.  This
pass operates on both local scalar variables and memory stores and
loads (global variables, structures, arrays, etc).  This flag is
enabled by default at @option{-O2} and higher.

@item -ftree-dce
Perform dead code elimination (DCE) on trees.  This flag is enabled by
default at @option{-O} and higher.

@item -ftree-dominator-opts
Perform a variety of simple scalar cleanups (constant/copy
propagation, redundancy elimination, range propagation and expression
simplification) based on a dominator tree traversal.  This also
performs jump threading (to reduce jumps to jumps). This flag is
enabled by default at @option{-O} and higher.

@item -ftree-ch
Perform loop header copying on trees.  This is beneficial since it increases
effectiveness of code motion optimizations.  It also saves one jump.  This flag
is enabled by default at @option{-O} and higher.  It is not enabled
@c APPLE LOCAL 4231761 -Oz
for @option{-Os} or @option{-Oz} (APPLE ONLY), since it usually increases code size.

@item -ftree-loop-optimize
Perform loop optimizations on trees.  This flag is enabled by default
at @option{-O} and higher.

@item -ftree-loop-linear
Perform linear loop transformations on tree.  This flag can improve cache
performance and allow further loop optimizations to take place.
@c APPLE LOCAL begin buggy opt 4420531 3950497 3984937 4013797
This flag is known to have bugs that cause incorrect code to be generated in
some rare cases. Note this flag is included in -fast.
@c APPLE LOCAL end buggy opt 4420531 3950497 3984937 4013797

@item -ftree-loop-im
Perform loop invariant motion on trees.  This pass moves only invariants that
would be hard to handle at RTL level (function calls, operations that expand to
nontrivial sequences of insns).  With @option{-funswitch-loops} it also moves
operands of conditions that are invariant out of the loop, so that we can use
just trivial invariantness analysis in loop unswitching.  The pass also includes
store motion.

@item -ftree-loop-ivcanon
Create a canonical counter for number of iterations in the loop for that
determining number of iterations requires complicated analysis.  Later
optimizations then may determine the number easily.  Useful especially
in connection with unrolling.

@item -fivopts
Perform induction variable optimizations (strength reduction, induction
variable merging and induction variable elimination) on trees.

@item -ftree-sra
Perform scalar replacement of aggregates.  This pass replaces structure
references with scalars to prevent committing structures to memory too
early.  This flag is enabled by default at @option{-O} and higher.

@item -ftree-copyrename
Perform copy renaming on trees.  This pass attempts to rename compiler
temporaries to other variables at copy locations, usually resulting in
variable names which more closely resemble the original variables.  This flag
is enabled by default at @option{-O} and higher.

@item -ftree-ter
Perform temporary expression replacement during the SSA->normal phase.  Single
use/single def temporaries are replaced at their use location with their
defining expression.  This results in non-GIMPLE code, but gives the expanders
much more complex trees to work on resulting in better RTL generation.  This is
enabled by default at @option{-O} and higher.

@item -ftree-lrs
Perform live range splitting during the SSA->normal phase.  Distinct live
ranges of a variable are split into unique variables, allowing for better
optimization later.  This is enabled by default at @option{-O} and higher.

@item -ftree-vectorize
Perform loop vectorization on trees.

@c APPLE LOCAL begin optimization
In Apple's version of GCC, @option{-fstrict-aliasing} is enabled by default 
when loop vectorization is enabled. See @option{-fstrict-aliasing} document
for more information.
@c APPLE LOCAL end optimization

@item -ftree-vect-loop-version
@opindex ftree-vect-loop-version
Perform loop versioning when doing loop vectorization on trees.  When a loop
appears to be vectorizable except that data alignment or data dependence cannot
be determined at compile time then vectorized and non-vectorized versions of
the loop are generated along with runtime checks for alignment or dependence
to control which version is executed.  This option is enabled by default
except at level @option{-Os} where it is disabled.

@item -ftree-vrp
Perform Value Range Propagation on trees.  This is similar to the
constant propagation pass, but instead of values, ranges of values are
propagated.  This allows the optimizers to remove unnecessary range
checks like array bound checks and null pointer checks.  This is
enabled by default at @option{-O2} and higher.  Null pointer check
elimination is only done if @option{-fdelete-null-pointer-checks} is
enabled.

@item -ftracer
@opindex ftracer
Perform tail duplication to enlarge superblock size.  This transformation
simplifies the control flow of the function allowing other optimizations to do
better job.

@item -funroll-loops
@opindex funroll-loops
Unroll loops whose number of iterations can be determined at compile
time or upon entry to the loop.  @option{-funroll-loops} implies
@option{-frerun-cse-after-loop}.  This option makes code larger,
and may or may not make it run faster.

@item -funroll-all-loops
@opindex funroll-all-loops
Unroll all loops, even if their number of iterations is uncertain when
the loop is entered.  This usually makes programs run more slowly.
@option{-funroll-all-loops} implies the same options as
@option{-funroll-loops},

@item -fsplit-ivs-in-unroller
@opindex fsplit-ivs-in-unroller
Enables expressing of values of induction variables in later iterations
of the unrolled loop using the value in the first iteration.  This breaks
long dependency chains, thus improving efficiency of the scheduling passes.

Combination of @option{-fweb} and CSE is often sufficient to obtain the
same effect.  However in cases the loop body is more complicated than
a single basic block, this is not reliable.  It also does not work at all
on some of the architectures due to restrictions in the CSE pass.

This optimization is enabled by default.

@item -fvariable-expansion-in-unroller
@opindex fvariable-expansion-in-unroller
With this option, the compiler will create multiple copies of some
local variables when unrolling a loop which can result in superior code.

@item -fprefetch-loop-arrays
@opindex fprefetch-loop-arrays
If supported by the target machine, generate instructions to prefetch
memory to improve the performance of loops that access large arrays.

This option may generate better or worse code; results are highly
dependent on the structure of loops within the source code.

@c APPLE LOCAL 4231761 -Oz
Disabled at levels @option{-Os} and @option{-Oz} (APPLE ONLY).

@item -fno-peephole
@itemx -fno-peephole2
@opindex fno-peephole
@opindex fno-peephole2
Disable any machine-specific peephole optimizations.  The difference
between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
are implemented in the compiler; some targets use one, some use the
other, a few use both.

@option{-fpeephole} is enabled by default.
@c APPLE LOCAL 4231761 -Oz
@option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fno-guess-branch-probability
@opindex fno-guess-branch-probability
Do not guess branch probabilities using heuristics.

GCC will use heuristics to guess branch probabilities if they are
not provided by profiling feedback (@option{-fprofile-arcs}).  These
heuristics are based on the control flow graph.  If some branch probabilities
are specified by @samp{__builtin_expect}, then the heuristics will be
used to guess branch probabilities for the rest of the control flow graph,
taking the @samp{__builtin_expect} info into account.  The interactions
between the heuristics and @samp{__builtin_expect} can be complex, and in
some cases, it may be useful to disable the heuristics so that the effects
of @samp{__builtin_expect} are easier to understand.

The default is @option{-fguess-branch-probability} at levels
@c APPLE LOCAL 4231761 -Oz
@option{-O}, @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -freorder-blocks
@opindex freorder-blocks
Reorder basic blocks in the compiled function in order to reduce number of
taken branches and improve code locality.

Enabled at levels @option{-O2}, @option{-O3}.

@item -freorder-blocks-and-partition
@opindex freorder-blocks-and-partition
In addition to reordering basic blocks in the compiled function, in order
to reduce number of taken branches, partitions hot and cold basic blocks
into separate sections of the assembly and .o files, to improve
paging and cache locality performance.

This optimization is automatically turned off in the presence of
exception handling, for linkonce sections, for functions with a user-defined
section attribute and on any architecture that does not support named
sections.

@item -freorder-functions
@opindex freorder-functions
Reorder functions in the object file in order to
improve code locality.  This is implemented by using special
subsections @code{.text.hot} for most frequently executed functions and
@code{.text.unlikely} for unlikely executed functions.  Reordering is done by
the linker so object file format must support named sections and linker must
place them in a reasonable way.

Also profile feedback must be available in to make this option effective.  See
@option{-fprofile-arcs} for details.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fstrict-aliasing
@opindex fstrict-aliasing
Allows the compiler to assume the strictest aliasing rules applicable to
the language being compiled.  For C (and C++), this activates
optimizations based on the type of expressions.  In particular, an
object of one type is assumed never to reside at the same address as an
object of a different type, unless the types are almost the same.  For
example, an @code{unsigned int} can alias an @code{int}, but not a
@code{void*} or a @code{double}.  A character type may alias any other
type.

Pay special attention to code like this:
@smallexample
union a_union @{
  int i;
  double d;
@};

int f() @{
  a_union t;
  t.d = 3.0;
  return t.i;
@}
@end smallexample
The practice of reading from a different union member than the one most
recently written to (called ``type-punning'') is common.  Even with
@option{-fstrict-aliasing}, type-punning is allowed, provided the memory
is accessed through the union type.  So, the code above will work as
expected.  However, this code might not:
@smallexample
int f() @{
  a_union t;
  int* ip;
  t.d = 3.0;
  ip = &t.i;
  return *ip;
@}
@end smallexample

Every language that wishes to perform language-specific alias analysis
should define a function that computes, given an @code{tree}
node, an alias set for the node.  Nodes in different alias sets are not
allowed to alias.  For an example, see the C front-end function
@code{c_get_alias_set}.

@c APPLE LOCAL 4231761 -Oz
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, @option{-Oz} (APPLE ONLY).

@item -fstrict-overflow
@opindex fstrict-overflow
Allow the compiler to assume strict signed overflow rules, depending
on the language being compiled.  For C (and C++) this means that
overflow when doing arithmetic with signed numbers is undefined, which
means that the compiler may assume that it will not happen.  This
permits various optimizations.  For example, the compiler will assume
that an expression like @code{i + 10 > i} will always be true for
signed @code{i}.  This assumption is only valid if signed overflow is
undefined, as the expression is false if @code{i + 10} overflows when
using twos complement arithmetic.  When this option is in effect any
attempt to determine whether an operation on signed numbers will
overflow must be written carefully to not actually involve overflow.

See also the @option{-fwrapv} option.  Using @option{-fwrapv} means
that signed overflow is fully defined: it wraps.  When
@option{-fwrapv} is used, there is no difference between
@option{-fstrict-overflow} and @option{-fno-strict-overflow}.  With
@option{-fwrapv} certain types of overflow are permitted.  For
example, if the compiler gets an overflow when doing arithmetic on
constants, the overflowed value can still be used with
@option{-fwrapv}, but not otherwise.

The @option{-fstrict-overflow} option is enabled at levels
@option{-O2}, @option{-O3}, @option{-Os}.

@item -falign-functions
@itemx -falign-functions=@var{n}
@opindex falign-functions
Align the start of functions to the next power-of-two greater than
@var{n}, skipping up to @var{n} bytes.  For instance,
@option{-falign-functions=32} aligns functions to the next 32-byte
boundary, but @option{-falign-functions=24} would align to the next
32-byte boundary only if this can be done by skipping 23 bytes or less.

@option{-fno-align-functions} and @option{-falign-functions=1} are
equivalent and mean that functions will not be aligned.

Some assemblers only support this flag when @var{n} is a power of two;
in that case, it is rounded up.

If @var{n} is not specified or is zero, use a machine-dependent default.

Enabled at levels @option{-O2}, @option{-O3}.

@item -falign-labels
@itemx -falign-labels=@var{n}
@opindex falign-labels
Align all branch targets to a power-of-two boundary, skipping up to
@var{n} bytes like @option{-falign-functions}.  This option can easily
make code slower, because it must insert dummy operations for when the
branch target is reached in the usual flow of the code.

@option{-fno-align-labels} and @option{-falign-labels=1} are
equivalent and mean that labels will not be aligned.

If @option{-falign-loops} or @option{-falign-jumps} are applicable and
are greater than this value, then their values are used instead.

If @var{n} is not specified or is zero, use a machine-dependent default
which is very likely to be @samp{1}, meaning no alignment.

Enabled at levels @option{-O2}, @option{-O3}.

@c APPLE LOCAL begin -falign-loops-max-skip
@item -falign-loops-max-skip
@item -falign-loops-max-skip=@var{n}
@opindex falign-loops-max-skip
Align loops to a power-of-two boundary, but do not skip more than
@var{n} bytes to do so.
@c APPLE LOCAL end -falign-loops-max-skip

@item -falign-loops
@itemx -falign-loops=@var{n}
@opindex falign-loops
Align loops to a power-of-two boundary, skipping up to @var{n} bytes
like @option{-falign-functions}.  The hope is that the loop will be
executed many times, which will make up for any execution of the dummy
operations.

@option{-fno-align-loops} and @option{-falign-loops=1} are
equivalent and mean that loops will not be aligned.

If @var{n} is not specified or is zero, use a machine-dependent default.

Enabled at levels @option{-O2}, @option{-O3}.

@item -falign-jumps
@itemx -falign-jumps=@var{n}
@opindex falign-jumps
Align branch targets to a power-of-two boundary, for branch targets
where the targets can only be reached by jumping, skipping up to @var{n}
bytes like @option{-falign-functions}.  In this case, no dummy operations
need be executed.

@c APPLE LOCAL begin -falign-jumps-max-skip
@item -falign-jumps-max-skip
@itemx -falign-jumps-max-skip=@var{n}
@opindex falign-jump-max-skips
Align branch targets to a power-of-two boundary, but do not skip more than
@var{n} bytes to do so.
@c APPLE LOCAL end -falign-jumps-max-skip

@option{-fno-align-jumps} and @option{-falign-jumps=1} are
equivalent and mean that loops will not be aligned.

If @var{n} is not specified or is zero, use a machine-dependent default.

Enabled at levels @option{-O2}, @option{-O3}.

@item -funit-at-a-time
@opindex funit-at-a-time
Parse the whole compilation unit before starting to produce code.
This allows some extra optimizations to take place but consumes
more memory (in general).  There are some compatibility issues
with @emph{unit-at-a-time} mode:
@itemize @bullet
@item
enabling @emph{unit-at-a-time} mode may change the order
in which functions, variables, and top-level @code{asm} statements
are emitted, and will likely break code relying on some particular
ordering.  The majority of such top-level @code{asm} statements,
though, can be replaced by @code{section} attributes.  The
@option{fno-toplevel-reorder} option may be used to keep the ordering
used in the input file, at the cost of some optimizations.

@item
@emph{unit-at-a-time} mode removes unreferenced static variables
and functions.  This may result in undefined references
when an @code{asm} statement refers directly to variables or functions
that are otherwise unused.  In that case either the variable/function
shall be listed as an operand of the @code{asm} statement operand or,
in the case of top-level @code{asm} statements the attribute @code{used}
shall be used on the declaration.

@item
Static functions now can use non-standard passing conventions that
may break @code{asm} statements calling functions directly.  Again,
attribute @code{used} will prevent this behavior.
@end itemize

As a temporary workaround, @option{-fno-unit-at-a-time} can be used,
but this scheme may not be supported by future releases of GCC@.

Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -fno-toplevel-reorder
Do not reorder top-level functions, variables, and @code{asm}
statements.  Output them in the same order that they appear in the
input file.  When this option is used, unreferenced static variables
will not be removed.  This option is intended to support existing code
which relies on a particular ordering.  For new code, it is better to
use attributes.

@item -fweb
@opindex fweb
Constructs webs as commonly used for register allocation purposes and assign
each web individual pseudo register.  This allows the register allocation pass
to operate on pseudos directly, but also strengthens several other optimization
passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
however, make debugging impossible, since variables will no longer stay in a
``home register''.

Enabled by default with @option{-funroll-loops}.

@item -fwhole-program
@opindex fwhole-program
Assume that the current compilation unit represents whole program being
compiled.  All public functions and variables with the exception of @code{main}
and those merged by attribute @code{externally_visible} become static functions
and in a affect gets more aggressively optimized by interprocedural optimizers.
While this option is equivalent to proper use of @code{static} keyword for
programs consisting of single file, in combination with option
@option{--combine} this flag can be used to compile most of smaller scale C
programs since the functions and variables become local for the whole combined
compilation unit, not for the single source file itself.


@item -fno-cprop-registers
@opindex fno-cprop-registers
After register allocation and post-register allocation instruction splitting,
we perform a copy-propagation pass to try to reduce scheduling dependencies
and occasionally eliminate the copy.

@c APPLE LOCAL begin 4231761 -Oz
Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os},
@option{-Oz} (APPLE ONLY).
@c APPLE LOCAL end 4231761 -Oz

@item -fprofile-generate
@opindex fprofile-generate

Enable options usually used for instrumenting application to produce
profile useful for later recompilation with profile feedback based
optimization.  You must use @option{-fprofile-generate} both when
compiling and when linking your program.

The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}.

@item -fprofile-use
@opindex fprofile-use
Enable profile feedback directed optimizations, and optimizations
generally profitable only with profile feedback available.

The following options are enabled: @code{-fbranch-probabilities}, @code{-fvpt},
@code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer}

@end table

The following options control compiler behavior regarding floating
point arithmetic.  These options trade off between speed and
correctness.  All must be specifically enabled.

@table @gcctabopt
@item -ffloat-store
@opindex ffloat-store
Do not store floating point variables in registers, and inhibit other
options that might change whether a floating point value is taken from a
register or memory.

@cindex floating point precision
This option prevents undesirable excess precision on machines such as
the 68000 where the floating registers (of the 68881) keep more
precision than a @code{double} is supposed to have.  Similarly for the
x86 architecture.  For most programs, the excess precision does only
good, but a few programs rely on the precise definition of IEEE floating
point.  Use @option{-ffloat-store} for such programs, after modifying
them to store all pertinent intermediate computations into variables.

@item -ffast-math
@opindex ffast-math
Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, @*
@option{-fno-trapping-math}, @option{-ffinite-math-only},
@option{-fno-rounding-math}, @option{-fno-signaling-nans}
and @option{fcx-limited-range}.

This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.

This option should never be turned on by any @option{-O} option since
it can result in incorrect output for programs which depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions.

@item -fno-math-errno
@opindex fno-math-errno
Do not set ERRNO after calling math functions that are executed
with a single instruction, e.g., sqrt.  A program that relies on
IEEE exceptions for math error handling may want to use this flag
for speed while maintaining IEEE arithmetic compatibility.

@c APPLE LOCAL begin disable math-errno
@ignore
This option should never be turned on by any @option{-O} option since
it can result in incorrect output for programs which depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions.

The default is @option{-fmath-errno}.
@end ignore
(APPLE ONLY) The Darwin math libraries never set errno, so there is
no point in having the compiler generate code that assumes they
might.  Therefore, the default is @option{-fno-math-errno} on Darwin.
@c APPLE LOCAL end disable math-errno

On Darwin systems, the math library never sets @code{errno}.  There is therefore
no reason for the compiler to consider the possibility that it might,
and @option{-fno-math-errno} is the default.

@item -funsafe-math-optimizations
@opindex funsafe-math-optimizations
Allow optimizations for floating-point arithmetic that (a) assume
that arguments and results are valid and (b) may violate IEEE or
ANSI standards.  When used at link-time, it may include libraries
or startup files that change the default FPU control word or other
similar optimizations.

This option should never be turned on by any @option{-O} option since
it can result in incorrect output for programs which depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions.

The default is @option{-fno-unsafe-math-optimizations}.

@item -ffinite-math-only
@opindex ffinite-math-only
Allow optimizations for floating-point arithmetic that assume
that arguments and results are not NaNs or +-Infs.

This option should never be turned on by any @option{-O} option since
it can result in incorrect output for programs which depend on
an exact implementation of IEEE or ISO rules/specifications.

The default is @option{-fno-finite-math-only}.

@item -fno-trapping-math
@opindex fno-trapping-math
Compile code assuming that floating-point operations cannot generate
user-visible traps.  These traps include division by zero, overflow,
underflow, inexact result and invalid operation.  This option implies
@option{-fno-signaling-nans}.  Setting this option may allow faster
code if one relies on ``non-stop'' IEEE arithmetic, for example.

This option should never be turned on by any @option{-O} option since
it can result in incorrect output for programs which depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions.

The default is @option{-ftrapping-math}.

@item -frounding-math
@opindex frounding-math
Disable transformations and optimizations that assume default floating
point rounding behavior.  This is round-to-zero for all floating point
to integer conversions, and round-to-nearest for all other arithmetic
truncations.  This option should be specified for programs that change
the FP rounding mode dynamically, or that may be executed with a
non-default rounding mode.  This option disables constant folding of
floating point expressions at compile-time (which may be affected by
rounding mode) and arithmetic transformations that are unsafe in the
presence of sign-dependent rounding modes.

The default is @option{-fno-rounding-math}.

This option is experimental and does not currently guarantee to
disable all GCC optimizations that are affected by rounding mode.
Future versions of GCC may provide finer control of this setting
using C99's @code{FENV_ACCESS} pragma.  This command line option
will be used to specify the default state for @code{FENV_ACCESS}.

@item -frtl-abstract-sequences
@opindex frtl-abstract-sequences
It is a size optimization method. This option is to find identical
sequences of code, which can be turned into pseudo-procedures  and
then  replace  all  occurrences with  calls to  the  newly created
subroutine. It is kind of an opposite of @option{-finline-functions}.
This optimization runs at RTL level.

@item -fsignaling-nans
@opindex fsignaling-nans
Compile code assuming that IEEE signaling NaNs may generate user-visible
traps during floating-point operations.  Setting this option disables
optimizations that may change the number of exceptions visible with
signaling NaNs.  This option implies @option{-ftrapping-math}.

This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
be defined.

The default is @option{-fno-signaling-nans}.

This option is experimental and does not currently guarantee to
disable all GCC optimizations that affect signaling NaN behavior.

@item -fsingle-precision-constant
@opindex fsingle-precision-constant
Treat floating point constant as single precision constant instead of
implicitly converting it to double precision constant.

@item -fcx-limited-range
@itemx -fno-cx-limited-range
@opindex fcx-limited-range
@opindex fno-cx-limited-range
When enabled, this option states that a range reduction step is not
needed when performing complex division.  The default is
@option{-fno-cx-limited-range}, but is enabled by @option{-ffast-math}.

This option controls the default setting of the ISO C99 
@code{CX_LIMITED_RANGE} pragma.  Nevertheless, the option applies to
all languages.

@end table

The following options control optimizations that may improve
performance, but are not enabled by any @option{-O} options.  This
section includes experimental options that may produce broken code.

@table @gcctabopt
@item -fbranch-probabilities
@opindex fbranch-probabilities
After running a program compiled with @option{-fprofile-arcs}
(@pxref{Debugging Options,, Options for Debugging Your Program or
@command{gcc}}), you can compile it a second time using
@option{-fbranch-probabilities}, to improve optimizations based on
the number of times each branch was taken.  When the program
compiled with @option{-fprofile-arcs} exits it saves arc execution
counts to a file called @file{@var{sourcename}.gcda} for each source
file  The information in this data file is very dependent on the
structure of the generated code, so you must use the same source code
and the same optimization options for both compilations.

With @option{-fbranch-probabilities}, GCC puts a
@samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
These can be used to improve optimization.  Currently, they are only
used in one place: in @file{reorg.c}, instead of guessing which path a
branch is mostly to take, the @samp{REG_BR_PROB} values are used to
exactly determine which path is taken more often.

@item -fprofile-values
@opindex fprofile-values
If combined with @option{-fprofile-arcs}, it adds code so that some
data about values of expressions in the program is gathered.

With @option{-fbranch-probabilities}, it reads back the data gathered
from profiling values of expressions and adds @samp{REG_VALUE_PROFILE}
notes to instructions for their later usage in optimizations.

Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.

@item -fvpt
@opindex fvpt
If combined with @option{-fprofile-arcs}, it instructs the compiler to add
a code to gather information about values of expressions.

With @option{-fbranch-probabilities}, it reads back the data gathered
and actually performs the optimizations based on them.
Currently the optimizations include specialization of division operation
using the knowledge about the value of the denominator.

@item -frename-registers
@opindex frename-registers
Attempt to avoid false dependencies in scheduled code by making use
of registers left over after register allocation.  This optimization
will most benefit processors with lots of registers.  Depending on the
debug information format adopted by the target, however, it can
make debugging impossible, since variables will no longer stay in
a ``home register''.

Enabled by default with @option{-funroll-loops}.

@item -ftracer
@opindex ftracer
Perform tail duplication to enlarge superblock size.  This transformation
simplifies the control flow of the function allowing other optimizations to do
better job.

Enabled with @option{-fprofile-use}.

@item -funroll-loops
@opindex funroll-loops
Unroll loops whose number of iterations can be determined at compile time or
upon entry to the loop.  @option{-funroll-loops} implies
@option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}. 
It also turns on complete loop peeling (i.e.@: complete removal of loops with
small constant number of iterations).  This option makes code larger, and may
or may not make it run faster.

Enabled with @option{-fprofile-use}.

@item -funroll-all-loops
@opindex funroll-all-loops
Unroll all loops, even if their number of iterations is uncertain when
the loop is entered.  This usually makes programs run more slowly.
@option{-funroll-all-loops} implies the same options as
@option{-funroll-loops}.

@item -fpeel-loops
@opindex fpeel-loops
Peels the loops for that there is enough information that they do not
roll much (from profile feedback).  It also turns on complete loop peeling
(i.e.@: complete removal of loops with small constant number of iterations).

Enabled with @option{-fprofile-use}.

@item -fmove-loop-invariants
@opindex fmove-loop-invariants
Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
at level @option{-O1}

@item -funswitch-loops
@opindex funswitch-loops
Move branches with loop invariant conditions out of the loop, with duplicates
of the loop on both branches (modified according to result of the condition).

@item -ffunction-sections
@itemx -fdata-sections
@opindex ffunction-sections
@opindex fdata-sections
Place each function or data item into its own section in the output
file if the target supports arbitrary sections.  The name of the
function or the name of the data item determines the section's name
in the output file.

Use these options on systems where the linker can perform optimizations
to improve locality of reference in the instruction space.  Most systems
using the ELF object format and SPARC processors running Solaris 2 have
linkers with such optimizations.  AIX may have these optimizations in
the future.

Only use these options when there are significant benefits from doing
so.  When you specify these options, the assembler and linker will
create larger object and executable files and will also be slower.
You will not be able to use @code{gprof} on all systems if you
specify this option and you may have problems with debugging if
you specify both this option and @option{-g}.

@item -fbranch-target-load-optimize
@opindex fbranch-target-load-optimize
Perform branch target register load optimization before prologue / epilogue
threading.
The use of target registers can typically be exposed only during reload,
thus hoisting loads out of loops and doing inter-block scheduling needs
a separate optimization pass.

@item -fbranch-target-load-optimize2
@opindex fbranch-target-load-optimize2
Perform branch target register load optimization after prologue / epilogue
threading.

@item -fbtr-bb-exclusive
@opindex fbtr-bb-exclusive
When performing branch target register load optimization, don't reuse
branch target registers in within any basic block.

@item -fstack-protector
Emit extra code to check for buffer overflows, such as stack smashing
attacks.  This is done by adding a guard variable to functions with
vulnerable objects.  This includes functions that call alloca, and
functions with buffers larger than 8 bytes.  The guards are initialized
when a function is entered and then checked when the function exits.
If a guard check fails, an error message is printed and the program exits.

@item -fstack-protector-all
Like @option{-fstack-protector} except that all functions are protected.

@item -fsection-anchors
@opindex fsection-anchors
Try to reduce the number of symbolic address calculations by using
shared ``anchor'' symbols to address nearby objects.  This transformation
can help to reduce the number of GOT entries and GOT accesses on some
targets.

For example, the implementation of the following function @code{foo}:

@smallexample
static int a, b, c;
int foo (void) @{ return a + b + c; @}
@end smallexample

would usually calculate the addresses of all three variables, but if you
compile it with @option{-fsection-anchors}, it will access the variables
from a common anchor point instead.  The effect is similar to the
following pseudocode (which isn't valid C):

@smallexample
int foo (void)
@{
  register int *xr = &x;
  return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
@}
@end smallexample

Not all targets support this option.

@item --param @var{name}=@var{value}
@opindex param
In some places, GCC uses various constants to control the amount of
optimization that is done.  For example, GCC will not inline functions
that contain more that a certain number of instructions.  You can
control some of these constants on the command-line using the
@option{--param} option.

The names of specific parameters, and the meaning of the values, are
tied to the internals of the compiler, and are subject to change
without notice in future releases.

In each case, the @var{value} is an integer.  The allowable choices for
@var{name} are given in the following table:

@table @gcctabopt
@item salias-max-implicit-fields
The maximum number of fields in a variable without direct
structure accesses for which structure aliasing will consider trying 
to track each field.  The default is 5

@item salias-max-array-elements
The maximum number of elements an array can have and its elements
still be tracked individually by structure aliasing. The default is 4

@item sra-max-structure-size
The maximum structure size, in bytes, at which the scalar replacement
of aggregates (SRA) optimization will perform block copies.  The
default value, 0, implies that GCC will select the most appropriate
size itself.

@item sra-field-structure-ratio
The threshold ratio (as a percentage) between instantiated fields and
the complete structure size.  We say that if the ratio of the number
of bytes in instantiated fields to the number of bytes in the complete
structure exceeds this parameter, then block copies are not used.  The
default is 75.

@item max-crossjump-edges
The maximum number of incoming edges to consider for crossjumping.
The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
the number of edges incoming to each block.  Increasing values mean
more aggressive optimization, making the compile time increase with
probably small improvement in executable size.

@item min-crossjump-insns
The minimum number of instructions which must be matched at the end
of two blocks before crossjumping will be performed on them.  This
value is ignored in the case where all instructions in the block being
crossjumped from are matched.  The default value is 5.

@item max-grow-copy-bb-insns
The maximum code size expansion factor when copying basic blocks
instead of jumping.  The expansion is relative to a jump instruction.
The default value is 8.

@item max-goto-duplication-insns
The maximum number of instructions to duplicate to a block that jumps
to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
passes, GCC factors computed gotos early in the compilation process,
and unfactors them as late as possible.  Only computed jumps at the
end of a basic blocks with no more than max-goto-duplication-insns are
unfactored.  The default value is 8.

@item max-delay-slot-insn-search
The maximum number of instructions to consider when looking for an
instruction to fill a delay slot.  If more than this arbitrary number of
instructions is searched, the time savings from filling the delay slot
will be minimal so stop searching.  Increasing values mean more
aggressive optimization, making the compile time increase with probably
small improvement in executable run time.

@item max-delay-slot-live-search
When trying to fill delay slots, the maximum number of instructions to
consider when searching for a block with valid live register
information.  Increasing this arbitrarily chosen value means more
aggressive optimization, increasing the compile time.  This parameter
should be removed when the delay slot code is rewritten to maintain the
control-flow graph.

@item max-gcse-memory
The approximate maximum amount of memory that will be allocated in
order to perform the global common subexpression elimination
optimization.  If more memory than specified is required, the
optimization will not be done.

@item max-gcse-passes
The maximum number of passes of GCSE to run.  The default is 1.

@item max-pending-list-length
The maximum number of pending dependencies scheduling will allow
before flushing the current state and starting over.  Large functions
with few branches or calls can create excessively large lists which
needlessly consume memory and resources.

@item max-inline-insns-single
Several parameters control the tree inliner used in gcc.
This number sets the maximum number of instructions (counted in GCC's
internal representation) in a single function that the tree inliner
will consider for inlining.  This only affects functions declared
inline and methods implemented in a class declaration (C++).
The default value is 450.

@item max-inline-insns-auto
When you use @option{-finline-functions} (included in @option{-O3}),
a lot of functions that would otherwise not be considered for inlining
by the compiler will be investigated.  To those functions, a different
(more restrictive) limit compared to functions declared inline can
be applied.
The default value is 90.

@item large-function-insns
The limit specifying really large functions.  For functions larger than this
limit after inlining inlining is constrained by
@option{--param large-function-growth}.  This parameter is useful primarily
to avoid extreme compilation time caused by non-linear algorithms used by the
backend.
This parameter is ignored when @option{-funit-at-a-time} is not used.
The default value is 2700.

@item large-function-growth
Specifies maximal growth of large function caused by inlining in percents.
This parameter is ignored when @option{-funit-at-a-time} is not used.
The default value is 100 which limits large function growth to 2.0 times
the original size.

@item large-unit-insns
The limit specifying large translation unit.  Growth caused by inlining of
units larger than this limit is limited by @option{--param inline-unit-growth}.
For small units this might be too tight (consider unit consisting of function A
that is inline and B that just calls A three time.  If B is small relative to
A, the growth of unit is 300\% and yet such inlining is very sane.  For very
large units consisting of small inlininable functions however the overall unit
growth limit is needed to avoid exponential explosion of code size.  Thus for
smaller units, the size is increased to @option{--param large-unit-insns}
before applying @option{--param inline-unit-growth}.  The default is 10000

@item inline-unit-growth
Specifies maximal overall growth of the compilation unit caused by inlining.
This parameter is ignored when @option{-funit-at-a-time} is not used.
The default value is 50 which limits unit growth to 1.5 times the original
size.

@item max-inline-insns-recursive
@itemx max-inline-insns-recursive-auto
Specifies maximum number of instructions out-of-line copy of self recursive inline
function can grow into by performing recursive inlining.

For functions declared inline @option{--param max-inline-insns-recursive} is
taken into account.  For function not declared inline, recursive inlining
happens only when @option{-finline-functions} (included in @option{-O3}) is
enabled and @option{--param max-inline-insns-recursive-auto} is used.  The
default value is 450.

@item max-inline-recursive-depth
@itemx max-inline-recursive-depth-auto
Specifies maximum recursion depth used by the recursive inlining.

For functions declared inline @option{--param max-inline-recursive-depth} is
taken into account.  For function not declared inline, recursive inlining
happens only when @option{-finline-functions} (included in @option{-O3}) is
enabled and @option{--param max-inline-recursive-depth-auto} is used.  The
default value is 450.

@item min-inline-recursive-probability
Recursive inlining is profitable only for function having deep recursion
in average and can hurt for function having little recursion depth by
increasing the prologue size or complexity of function body to other
optimizers.

When profile feedback is available (see @option{-fprofile-generate}) the actual
recursion depth can be guessed from probability that function will recurse via
given call expression.  This parameter limits inlining only to call expression
whose probability exceeds given threshold (in percents).  The default value is
10.

@item inline-call-cost
Specify cost of call instruction relative to simple arithmetics operations
(having cost of 1).  Increasing this cost disqualifies inlining of non-leaf
functions and at the same time increases size of leaf function that is believed to
reduce function size by being inlined.  In effect it increases amount of
inlining for code having large abstraction penalty (many functions that just
pass the arguments to other functions) and decrease inlining for code with low
abstraction penalty.  The default value is 16.

@item max-unrolled-insns
The maximum number of instructions that a loop should have if that loop
is unrolled, and if the loop is unrolled, it determines how many times
the loop code is unrolled.

@item max-average-unrolled-insns
The maximum number of instructions biased by probabilities of their execution
that a loop should have if that loop is unrolled, and if the loop is unrolled,
it determines how many times the loop code is unrolled.

@item max-unroll-times
The maximum number of unrollings of a single loop.

@item max-peeled-insns
The maximum number of instructions that a loop should have if that loop
is peeled, and if the loop is peeled, it determines how many times
the loop code is peeled.

@item max-peel-times
The maximum number of peelings of a single loop.

@item max-completely-peeled-insns
The maximum number of insns of a completely peeled loop.

@item max-completely-peel-times
The maximum number of iterations of a loop to be suitable for complete peeling.

@item max-unswitch-insns
The maximum number of insns of an unswitched loop.

@item max-unswitch-level
The maximum number of branches unswitched in a single loop.

@item lim-expensive
The minimum cost of an expensive expression in the loop invariant motion.

@item iv-consider-all-candidates-bound
Bound on number of candidates for induction variables below that
all candidates are considered for each use in induction variable
optimizations.  Only the most relevant candidates are considered
if there are more candidates, to avoid quadratic time complexity.

@item iv-max-considered-uses
The induction variable optimizations give up on loops that contain more
induction variable uses.

@item iv-always-prune-cand-set-bound
If number of candidates in the set is smaller than this value,
we always try to remove unnecessary ivs from the set during its
optimization when a new iv is added to the set.

@item scev-max-expr-size
Bound on size of expressions used in the scalar evolutions analyzer.
Large expressions slow the analyzer.

@item vect-max-version-checks
The maximum number of runtime checks that can be performed when doing
loop versioning in the vectorizer.  See option ftree-vect-loop-version
for more information.

@item max-iterations-to-track

The maximum number of iterations of a loop the brute force algorithm
for analysis of # of iterations of the loop tries to evaluate.

@item hot-bb-count-fraction
Select fraction of the maximal count of repetitions of basic block in program
given basic block needs to have to be considered hot.

@item hot-bb-frequency-fraction
Select fraction of the maximal frequency of executions of basic block in
function given basic block needs to have to be considered hot

@item max-predicted-iterations
The maximum number of loop iterations we predict statically.  This is useful
in cases where function contain single loop with known bound and other loop
with unknown.  We predict the known number of iterations correctly, while
the unknown number of iterations average to roughly 10.  This means that the
loop without bounds would appear artificially cold relative to the other one.

@item tracer-dynamic-coverage
@itemx tracer-dynamic-coverage-feedback

This value is used to limit superblock formation once the given percentage of
executed instructions is covered.  This limits unnecessary code size
expansion.

The @option{tracer-dynamic-coverage-feedback} is used only when profile
feedback is available.  The real profiles (as opposed to statically estimated
ones) are much less balanced allowing the threshold to be larger value.

@item tracer-max-code-growth
Stop tail duplication once code growth has reached given percentage.  This is
rather hokey argument, as most of the duplicates will be eliminated later in
cross jumping, so it may be set to much higher values than is the desired code
growth.

@item tracer-min-branch-ratio

Stop reverse growth when the reverse probability of best edge is less than this
threshold (in percent).

@item tracer-min-branch-ratio
@itemx tracer-min-branch-ratio-feedback

Stop forward growth if the best edge do have probability lower than this
threshold.

Similarly to @option{tracer-dynamic-coverage} two values are present, one for
compilation for profile feedback and one for compilation without.  The value
for compilation with profile feedback needs to be more conservative (higher) in
order to make tracer effective.

@item max-cse-path-length

Maximum number of basic blocks on path that cse considers.  The default is 10.

@item max-cse-insns
The maximum instructions CSE process before flushing. The default is 1000.

@item global-var-threshold

Counts the number of function calls (@var{n}) and the number of
call-clobbered variables (@var{v}).  If @var{n}x@var{v} is larger than this limit, a
single artificial variable will be created to represent all the
call-clobbered variables at function call sites.  This artificial
variable will then be made to alias every call-clobbered variable.
(done as @code{int * size_t} on the host machine; beware overflow).

@item max-aliased-vops

Maximum number of virtual operands allowed to represent aliases
before triggering the alias grouping heuristic.  Alias grouping
reduces compile times and memory consumption needed for aliasing at
the expense of precision loss in alias information.

@item ggc-min-expand

GCC uses a garbage collector to manage its own memory allocation.  This
parameter specifies the minimum percentage by which the garbage
collector's heap should be allowed to expand between collections.
Tuning this may improve compilation speed; it has no effect on code
generation.

The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
RAM >= 1GB@.  If @code{getrlimit} is available, the notion of "RAM" is
the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
GCC is not able to calculate RAM on a particular platform, the lower
bound of 30% is used.  Setting this parameter and
@option{ggc-min-heapsize} to zero causes a full collection to occur at
every opportunity.  This is extremely slow, but can be useful for
debugging.

@item ggc-min-heapsize

Minimum size of the garbage collector's heap before it begins bothering
to collect garbage.  The first collection occurs after the heap expands
by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
tuning this may improve compilation speed, and has no effect on code
generation.

The default is the smaller of RAM/8, RLIMIT_RSS, or a limit which
tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
with a lower bound of 4096 (four megabytes) and an upper bound of
131072 (128 megabytes).  If GCC is not able to calculate RAM on a
particular platform, the lower bound is used.  Setting this parameter
very large effectively disables garbage collection.  Setting this
parameter and @option{ggc-min-expand} to zero causes a full collection
to occur at every opportunity.

@item max-reload-search-insns
The maximum number of instruction reload should look backward for equivalent
register.  Increasing values mean more aggressive optimization, making the
compile time increase with probably slightly better performance.  The default
value is 100.

@item max-cselib-memory-locations
The maximum number of memory locations cselib should take into account.
Increasing values mean more aggressive optimization, making the compile time
increase with probably slightly better performance.  The default value is 500.

@item max-flow-memory-locations
Similar as @option{max-cselib-memory-locations} but for dataflow liveness.
The default value is 100.

@item reorder-blocks-duplicate
@itemx reorder-blocks-duplicate-feedback

Used by basic block reordering pass to decide whether to use unconditional
branch or duplicate the code on its destination.  Code is duplicated when its
estimated size is smaller than this value multiplied by the estimated size of
unconditional jump in the hot spots of the program.

The @option{reorder-block-duplicate-feedback} is used only when profile
feedback is available and may be set to higher values than
@option{reorder-block-duplicate} since information about the hot spots is more
accurate.

@item max-sched-ready-insns
The maximum number of instructions ready to be issued the scheduler should
consider at any given time during the first scheduling pass.  Increasing
values mean more thorough searches, making the compilation time increase
with probably little benefit.  The default value is 100.

@item max-sched-region-blocks
The maximum number of blocks in a region to be considered for
interblock scheduling.  The default value is 10.

@item max-sched-region-insns
The maximum number of insns in a region to be considered for
interblock scheduling.  The default value is 100.

@item min-spec-prob
The minimum probability (in percents) of reaching a source block
for interblock speculative scheduling.  The default value is 40.

@item max-sched-extend-regions-iters
The maximum number of iterations through CFG to extend regions.
0 - disable region extension,
N - do at most N iterations.
The default value is 0.

@item max-sched-insn-conflict-delay
The maximum conflict delay for an insn to be considered for speculative motion.
The default value is 3.

@item sched-spec-prob-cutoff
The minimal probability of speculation success (in percents), so that
speculative insn will be scheduled.
The default value is 40.

@item max-last-value-rtl

The maximum size measured as number of RTLs that can be recorded in an expression
in combiner for a pseudo register as last known value of that register.  The default
is 10000.

@item integer-share-limit
Small integer constants can use a shared data structure, reducing the
compiler's memory usage and increasing its speed.  This sets the maximum
value of a shared integer constant's.  The default value is 256.

@item min-virtual-mappings
Specifies the minimum number of virtual mappings in the incremental
SSA updater that should be registered to trigger the virtual mappings
heuristic defined by virtual-mappings-ratio.  The default value is
100.

@item virtual-mappings-ratio
If the number of virtual mappings is virtual-mappings-ratio bigger
than the number of virtual symbols to be updated, then the incremental
SSA updater switches to a full update for those symbols.  The default
ratio is 3.

@item ssp-buffer-size
The minimum size of buffers (i.e. arrays) that will receive stack smashing
protection when @option{-fstack-protection} is used.

@item max-jump-thread-duplication-stmts
Maximum number of statements allowed in a block that needs to be
duplicated when threading jumps.

@item max-fields-for-field-sensitive
Maximum number of fields in a structure we will treat in
a field sensitive manner during pointer analysis.

@end table
@end table

@node Preprocessor Options
@section Options Controlling the Preprocessor
@cindex preprocessor options
@cindex options, preprocessor

These options control the C preprocessor, which is run on each C source
file before actual compilation.

If you use the @option{-E} option, nothing is done except preprocessing.
Some of these options make sense only together with @option{-E} because
they cause the preprocessor output to be unsuitable for actual
compilation.

@table @gcctabopt
@c APPLE LOCAL pod error 6089368
@item -Wp,@var{option}
@opindex Wp
You can use @option{-Wp,@var{option}} to bypass the compiler driver
and pass @var{option} directly through to the preprocessor.  If
@var{option} contains commas, it is split into multiple options at the
commas.  However, many options are modified, translated or interpreted
by the compiler driver before being passed to the preprocessor, and
@option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
interface is undocumented and subject to change, so whenever possible
you should avoid using @option{-Wp} and let the driver handle the
options instead.

@item -Xpreprocessor @var{option}
@opindex preprocessor
Pass @var{option} as an option to the preprocessor.  You can use this to
supply system-specific preprocessor options which GCC does not know how to
recognize.

If you want to pass an option that takes an argument, you must use
@option{-Xpreprocessor} twice, once for the option and once for the argument.
@end table

@include cppopts.texi

@node Assembler Options
@section Passing Options to the Assembler

@c prevent bad page break with this line
You can pass options to the assembler.

@table @gcctabopt
@item -Wa,@var{option}
@opindex Wa
Pass @var{option} as an option to the assembler.  If @var{option}
contains commas, it is split into multiple options at the commas.

@item -Xassembler @var{option}
@opindex Xassembler
Pass @var{option} as an option to the assembler.  You can use this to
supply system-specific assembler options which GCC does not know how to
recognize.

If you want to pass an option that takes an argument, you must use
@option{-Xassembler} twice, once for the option and once for the argument.

@end table

@node Link Options
@section Options for Linking
@cindex link options
@cindex options, linking

These options come into play when the compiler links object files into
an executable output file.  They are meaningless if the compiler is
not doing a link step.

@c APPLE LOCAL begin linker flags
In addition to the options listed below, Apple's GCC also accepts and
passes nearly all of the options defined by the linker @samp{ld} and by
the library tool @samp{libtool}.  Common options include
@samp{-framework}, @samp{-dynamic}, @samp{-bundle},
@samp{-flat_namespace}, and so forth.  See the ld and libtool man pages
for further details.
@c APPLE LOCAL end linker flags

@table @gcctabopt
@cindex file names
@item @var{object-file-name}
A file name that does not end in a special recognized suffix is
considered to name an object file or library.  (Object files are
distinguished from libraries by the linker according to the file
contents.)  If linking is done, these object files are used as input
to the linker.

@item -c
@itemx -S
@itemx -E
@opindex c
@opindex S
@opindex E
If any of these options is used, then the linker is not run, and
object file names should not be used as arguments.  @xref{Overall
Options}.

@cindex Libraries
@item -l@var{library}
@itemx -l @var{library}
@opindex l
Search the library named @var{library} when linking.  (The second
alternative with the library as a separate argument is only for
POSIX compliance and is not recommended.)

It makes a difference where in the command you write this option; the
linker searches and processes libraries and object files in the order they
are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
to functions in @samp{z}, those functions may not be loaded.

The linker searches a standard list of directories for the library,
which is actually a file named @file{lib@var{library}.a}.  The linker
then uses this file as if it had been specified precisely by name.

The directories searched include several standard system directories
plus any that you specify with @option{-L}.

Normally the files found this way are library files---archive files
whose members are object files.  The linker handles an archive file by
scanning through it for members which define symbols that have so far
been referenced but not defined.  But if the file that is found is an
ordinary object file, it is linked in the usual fashion.  The only
difference between using an @option{-l} option and specifying a file name
is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
and searches several directories.

@item -lobjc
@opindex lobjc
You need this special case of the @option{-l} option in order to
link an Objective-C or Objective-C++ program.

@item -nostartfiles
@opindex nostartfiles
Do not use the standard system startup files when linking.
The standard system libraries are used normally, unless @option{-nostdlib}
or @option{-nodefaultlibs} is used.

@item -nodefaultlibs
@opindex nodefaultlibs
Do not use the standard system libraries when linking.
Only the libraries you specify will be passed to the linker.
The standard startup files are used normally, unless @option{-nostartfiles}
is used.  The compiler may generate calls to @code{memcmp},
@code{memset}, @code{memcpy} and @code{memmove}.
These entries are usually resolved by entries in
libc.  These entry points should be supplied through some other
mechanism when this option is specified.

@item -nostdlib
@opindex nostdlib
Do not use the standard system startup files or libraries when linking.
No startup files and only the libraries you specify will be passed to
the linker.  The compiler may generate calls to @code{memcmp}, @code{memset},
@code{memcpy} and @code{memmove}.
These entries are usually resolved by entries in
libc.  These entry points should be supplied through some other
mechanism when this option is specified.

@cindex @option{-lgcc}, use with @option{-nostdlib}
@cindex @option{-nostdlib} and unresolved references
@cindex unresolved references and @option{-nostdlib}
@cindex @option{-lgcc}, use with @option{-nodefaultlibs}
@cindex @option{-nodefaultlibs} and unresolved references
@cindex unresolved references and @option{-nodefaultlibs}
One of the standard libraries bypassed by @option{-nostdlib} and
@option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
that GCC uses to overcome shortcomings of particular machines, or special
needs for some languages.
(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
Collection (GCC) Internals},
for more discussion of @file{libgcc.a}.)
In most cases, you need @file{libgcc.a} even when you want to avoid
other standard libraries.  In other words, when you specify @option{-nostdlib}
or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
This ensures that you have no unresolved references to internal GCC
library subroutines.  (For example, @samp{__main}, used to ensure C++
constructors will be called; @pxref{Collect2,,@code{collect2}, gccint,
GNU Compiler Collection (GCC) Internals}.)

@item -pie
@opindex pie
Produce a position independent executable on targets which support it.
For predictable results, you must also specify the same set of options
that were used to generate code (@option{-fpie}, @option{-fPIE},
or model suboptions) when you specify this option.

@item -rdynamic
@opindex rdynamic
Pass the flag @option{-export-dynamic} to the ELF linker, on targets
that support it. This instructs the linker to add all symbols, not
only used ones, to the dynamic symbol table. This option is needed
for some uses of @code{dlopen} or to allow obtaining backtraces
from within a program.

@item -s
@opindex s
Remove all symbol table and relocation information from the executable.

@item -static
@opindex static
On systems that support dynamic linking, this prevents linking with the shared
libraries.  On other systems, this option has no effect.

@c APPLE LOCAL begin manual
This option will not work on Mac OS X unless all libraries (including
@file{libgcc.a}) have also been compiled with @option{-static}.  Since
neither a static version of libSystem.dylib nor crt0.o are provided, this
option is not useful to most people.
@c APPLE LOCAL end manual

@item -shared
@opindex shared
Produce a shared object which can then be linked with other objects to
form an executable.  Not all systems support this option.  For predictable
results, you must also specify the same set of options that were used to
generate code (@option{-fpic}, @option{-fPIC}, or model suboptions)
when you specify this option.@footnote{On some systems, @samp{gcc -shared}
needs to build supplementary stub code for constructors to work.  On
multi-libbed systems, @samp{gcc -shared} must select the correct support
libraries to link against.  Failing to supply the correct flags may lead
to subtle defects.  Supplying them in cases where they are not necessary
is innocuous.}

@c APPLE LOCAL begin manual
This option is not supported on Mac OS X.
@c APPLE LOCAL end manual

@item -shared-libgcc
@itemx -static-libgcc
@opindex shared-libgcc
@opindex static-libgcc
On systems that provide @file{libgcc} as a shared library, these options
force the use of either the shared or static version respectively.
If no shared version of @file{libgcc} was built when the compiler was
configured, these options have no effect.

There are several situations in which an application should use the
shared @file{libgcc} instead of the static version.  The most common
of these is when the application wishes to throw and catch exceptions
across different shared libraries.  In that case, each of the libraries
as well as the application itself should use the shared @file{libgcc}.

Therefore, the G++ and GCJ drivers automatically add
@option{-shared-libgcc} whenever you build a shared library or a main
executable, because C++ and Java programs typically use exceptions, so
this is the right thing to do.

If, instead, you use the GCC driver to create shared libraries, you may
find that they will not always be linked with the shared @file{libgcc}.
If GCC finds, at its configuration time, that you have a non-GNU linker
or a GNU linker that does not support option @option{--eh-frame-hdr},
it will link the shared version of @file{libgcc} into shared libraries
by default.  Otherwise, it will take advantage of the linker and optimize
away the linking with the shared version of @file{libgcc}, linking with
the static version of libgcc by default.  This allows exceptions to
propagate through such shared libraries, without incurring relocation
costs at library load time.

However, if a library or main executable is supposed to throw or catch
exceptions, you must link it using the G++ or GCJ driver, as appropriate
for the languages used in the program, or using the option
@option{-shared-libgcc}, such that it is linked with the shared
@file{libgcc}.

@item -symbolic
@opindex symbolic
Bind references to global symbols when building a shared object.  Warn
about any unresolved references (unless overridden by the link editor
option @samp{-Xlinker -z -Xlinker defs}).  Only a few systems support
this option.

@item -Xlinker @var{option}
@opindex Xlinker
Pass @var{option} as an option to the linker.  You can use this to
supply system-specific linker options which GCC does not know how to
recognize.

If you want to pass an option that takes an argument, you must use
@option{-Xlinker} twice, once for the option and once for the argument.
For example, to pass @option{-assert definitions}, you must write
@samp{-Xlinker -assert -Xlinker definitions}.  It does not work to write
@option{-Xlinker "-assert definitions"}, because this passes the entire
string as a single argument, which is not what the linker expects.

@item -Wl,@var{option}
@opindex Wl
Pass @var{option} as an option to the linker.  If @var{option} contains
commas, it is split into multiple options at the commas.

@item -u @var{symbol}
@opindex u
Pretend the symbol @var{symbol} is undefined, to force linking of
library modules to define it.  You can use @option{-u} multiple times with
different symbols to force loading of additional library modules.
@end table

@node Directory Options
@section Options for Directory Search
@cindex directory options
@cindex options, directory search
@cindex search path

These options specify directories to search for header files, for
libraries and for parts of the compiler:

@table @gcctabopt
@item -I@var{dir}
@opindex I
Add the directory @var{dir} to the head of the list of directories to be
searched for header files.  This can be used to override a system header
file, substituting your own version, since these directories are
searched before the system header file directories.  However, you should
not use this option to add directories that contain vendor-supplied
system header files (use @option{-isystem} for that).  If you use more than
one @option{-I} option, the directories are scanned in left-to-right
order; the standard system directories come after.

If a standard system include directory, or a directory specified with
@option{-isystem}, is also specified with @option{-I}, the @option{-I}
option will be ignored.  The directory will still be searched but as a
system directory at its normal position in the system include chain.
This is to ensure that GCC's procedure to fix buggy system headers and
the ordering for the include_next directive are not inadvertently changed.
If you really need to change the search order for system directories,
use the @option{-nostdinc} and/or @option{-isystem} options.

@c APPLE LOCAL begin ARM iwithsysroot 4917039
The option @option{-iwithsysroot} (APPLE ONLY), if specified with an
absolute path, will prepend the system root directory (if applicable) to
the path and add it to the beginning of the system search paths.  If
specified with a relative path, @option{-iwithsysroot} will behave
identically to @option{-isystem}.
@c APPLE LOCAL end ARM iwithsysroot 4917039

@item -iquote@var{dir}
@opindex iquote
Add the directory @var{dir} to the head of the list of directories to
be searched for header files only for the case of @samp{#include
"@var{file}"}; they are not searched for @samp{#include <@var{file}>},
otherwise just like @option{-I}.

@item -L@var{dir}
@opindex L
Add directory @var{dir} to the list of directories to be searched
for @option{-l}.

@item -B@var{prefix}
@opindex B
This option specifies where to find the executables, libraries,
include files, and data files of the compiler itself.

The compiler driver program runs one or more of the subprograms
@file{cpp}, @file{cc1}, @file{as} and @file{ld}.  It tries
@var{prefix} as a prefix for each program it tries to run, both with and
without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).

For each subprogram to be run, the compiler driver first tries the
@option{-B} prefix, if any.  If that name is not found, or if @option{-B}
was not specified, the driver tries two standard prefixes, which are
@file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
those results in a file name that is found, the unmodified program
name is searched for using the directories specified in your
@env{PATH} environment variable.

The compiler will check to see if the path provided by the @option{-B}
refers to a directory, and if necessary it will add a directory
separator character at the end of the path.

@option{-B} prefixes that effectively specify directory names also apply
to libraries in the linker, because the compiler translates these
options into @option{-L} options for the linker.  They also apply to
includes files in the preprocessor, because the compiler translates these
options into @option{-isystem} options for the preprocessor.  In this case,
the compiler appends @samp{include} to the prefix.

The run-time support file @file{libgcc.a} can also be searched for using
the @option{-B} prefix, if needed.  If it is not found there, the two
standard prefixes above are tried, and that is all.  The file is left
out of the link if it is not found by those means.

Another way to specify a prefix much like the @option{-B} prefix is to use
the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
Variables}.

As a special kludge, if the path provided by @option{-B} is
@file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
9, then it will be replaced by @file{[dir/]include}.  This is to help
with boot-strapping the compiler.

@item -specs=@var{file}
@opindex specs
Process @var{file} after the compiler reads in the standard @file{specs}
file, in order to override the defaults that the @file{gcc} driver
program uses when determining what switches to pass to @file{cc1},
@file{cc1plus}, @file{as}, @file{ld}, etc.  More than one
@option{-specs=@var{file}} can be specified on the command line, and they
are processed in order, from left to right.

@item --sysroot=@var{dir}
@opindex sysroot
Use @var{dir} as the logical root directory for headers and libraries.
For example, if the compiler would normally search for headers in
@file{/usr/include} and libraries in @file{/usr/lib}, it will instead
search @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}.  

If you use both this option and the @option{-isysroot} option, then
the @option{--sysroot} option will apply to libraries, but the
@option{-isysroot} option will apply to header files.

The GNU linker (beginning with version 2.16) has the necessary support
for this option.  If your linker does not support this option, the
header file aspect of @option{--sysroot} will still work, but the
library aspect will not.

@item -I-
@opindex I-
This option has been deprecated.  Please use @option{-iquote} instead for
@option{-I} directories before the @option{-I-} and remove the @option{-I-}.
Any directories you specify with @option{-I} options before the @option{-I-}
option are searched only for the case of @samp{#include "@var{file}"};
they are not searched for @samp{#include <@var{file}>}.

If additional directories are specified with @option{-I} options after
the @option{-I-}, these directories are searched for all @samp{#include}
directives.  (Ordinarily @emph{all} @option{-I} directories are used
this way.)

In addition, the @option{-I-} option inhibits the use of the current
directory (where the current input file came from) as the first search
directory for @samp{#include "@var{file}"}.  There is no way to
override this effect of @option{-I-}.  With @option{-I.} you can specify
searching the directory which was current when the compiler was
invoked.  That is not exactly the same as what the preprocessor does
by default, but it is often satisfactory.

@option{-I-} does not inhibit the use of the standard system directories
for header files.  Thus, @option{-I-} and @option{-nostdinc} are
independent.
@end table

@c man end

@node Spec Files
@section Specifying subprocesses and the switches to pass to them
@cindex Spec Files

@command{gcc} is a driver program.  It performs its job by invoking a
sequence of other programs to do the work of compiling, assembling and
linking.  GCC interprets its command-line parameters and uses these to
deduce which programs it should invoke, and which command-line options
it ought to place on their command lines.  This behavior is controlled
by @dfn{spec strings}.  In most cases there is one spec string for each
program that GCC can invoke, but a few programs have multiple spec
strings to control their behavior.  The spec strings built into GCC can
be overridden by using the @option{-specs=} command-line switch to specify
a spec file.

@dfn{Spec files} are plaintext files that are used to construct spec
strings.  They consist of a sequence of directives separated by blank
lines.  The type of directive is determined by the first non-whitespace
character on the line and it can be one of the following:

@table @code
@item %@var{command}
Issues a @var{command} to the spec file processor.  The commands that can
appear here are:

@table @code
@item %include <@var{file}>
@cindex %include
Search for @var{file} and insert its text at the current point in the
specs file.

@item %include_noerr <@var{file}>
@cindex %include_noerr
Just like @samp{%include}, but do not generate an error message if the include
file cannot be found.

@item %rename @var{old_name} @var{new_name}
@cindex %rename
Rename the spec string @var{old_name} to @var{new_name}.

@end table

@item *[@var{spec_name}]:
This tells the compiler to create, override or delete the named spec
string.  All lines after this directive up to the next directive or
blank line are considered to be the text for the spec string.  If this
results in an empty string then the spec will be deleted.  (Or, if the
spec did not exist, then nothing will happened.)  Otherwise, if the spec
does not currently exist a new spec will be created.  If the spec does
exist then its contents will be overridden by the text of this
directive, unless the first character of that text is the @samp{+}
character, in which case the text will be appended to the spec.

@item [@var{suffix}]:
Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
and up to the next directive or blank line are considered to make up the
spec string for the indicated suffix.  When the compiler encounters an
input file with the named suffix, it will processes the spec string in
order to work out how to compile that file.  For example:

@smallexample
.ZZ:
z-compile -input %i
@end smallexample

This says that any input file whose name ends in @samp{.ZZ} should be
passed to the program @samp{z-compile}, which should be invoked with the
command-line switch @option{-input} and with the result of performing the
@samp{%i} substitution.  (See below.)

As an alternative to providing a spec string, the text that follows a
suffix directive can be one of the following:

@table @code
@item @@@var{language}
This says that the suffix is an alias for a known @var{language}.  This is
similar to using the @option{-x} command-line switch to GCC to specify a
language explicitly.  For example:

@smallexample
.ZZ:
@@c++
@end smallexample

Says that .ZZ files are, in fact, C++ source files.

@item #@var{name}
This causes an error messages saying:

@smallexample
@var{name} compiler not installed on this system.
@end smallexample
@end table

GCC already has an extensive list of suffixes built into it.
This directive will add an entry to the end of the list of suffixes, but
since the list is searched from the end backwards, it is effectively
possible to override earlier entries using this technique.

@end table

GCC has the following spec strings built into it.  Spec files can
override these strings or create their own.  Note that individual
targets can also add their own spec strings to this list.

@smallexample
asm          Options to pass to the assembler
asm_final    Options to pass to the assembler post-processor
cpp          Options to pass to the C preprocessor
cc1          Options to pass to the C compiler
cc1plus      Options to pass to the C++ compiler
endfile      Object files to include at the end of the link
link         Options to pass to the linker
lib          Libraries to include on the command line to the linker
libgcc       Decides which GCC support library to pass to the linker
linker       Sets the name of the linker
predefines   Defines to be passed to the C preprocessor
signed_char  Defines to pass to CPP to say whether @code{char} is signed
             by default
startfile    Object files to include at the start of the link
@end smallexample

Here is a small example of a spec file:

@smallexample
%rename lib                 old_lib

*lib:
--start-group -lgcc -lc -leval1 --end-group %(old_lib)
@end smallexample

This example renames the spec called @samp{lib} to @samp{old_lib} and
then overrides the previous definition of @samp{lib} with a new one.
The new definition adds in some extra command-line options before
including the text of the old definition.

@dfn{Spec strings} are a list of command-line options to be passed to their
corresponding program.  In addition, the spec strings can contain
@samp{%}-prefixed sequences to substitute variable text or to
conditionally insert text into the command line.  Using these constructs
it is possible to generate quite complex command lines.

Here is a table of all defined @samp{%}-sequences for spec
strings.  Note that spaces are not generated automatically around the
results of expanding these sequences.  Therefore you can concatenate them
together or combine them with constant text in a single argument.

@table @code
@item %%
Substitute one @samp{%} into the program name or argument.

@item %i
Substitute the name of the input file being processed.

@item %b
Substitute the basename of the input file being processed.
This is the substring up to (and not including) the last period
and not including the directory.

@item %B
This is the same as @samp{%b}, but include the file suffix (text after
the last period).

@item %d
Marks the argument containing or following the @samp{%d} as a
temporary file name, so that that file will be deleted if GCC exits
successfully.  Unlike @samp{%g}, this contributes no text to the
argument.

@item %g@var{suffix}
Substitute a file name that has suffix @var{suffix} and is chosen
once per compilation, and mark the argument in the same way as
@samp{%d}.  To reduce exposure to denial-of-service attacks, the file
name is now chosen in a way that is hard to predict even when previously
chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
was simply substituted with a file name chosen once per compilation,
without regard to any appended suffix (which was therefore treated
just like ordinary text), making such attacks more likely to succeed.

@item %u@var{suffix}
Like @samp{%g}, but generates a new temporary file name even if
@samp{%u@var{suffix}} was already seen.

@item %U@var{suffix}
Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
new one if there is no such last file name.  In the absence of any
@samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
would involve the generation of two distinct file names, one
for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
simply substituted with a file name chosen for the previous @samp{%u},
without regard to any appended suffix.

@item %j@var{suffix}
Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
writable, and if save-temps is off; otherwise, substitute the name
of a temporary file, just like @samp{%u}.  This temporary file is not
meant for communication between processes, but rather as a junk
disposal mechanism.

@item %|@var{suffix}
@itemx %m@var{suffix}
Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
@samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
all.  These are the two most common ways to instruct a program that it
should read from standard input or write to standard output.  If you
need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
construct: see for example @file{f/lang-specs.h}.

@item %.@var{SUFFIX}
Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
terminated by the next space or %.

@item %w
Marks the argument containing or following the @samp{%w} as the
designated output file of this compilation.  This puts the argument
into the sequence of arguments that @samp{%o} will substitute later.

@item %o
Substitutes the names of all the output files, with spaces
automatically placed around them.  You should write spaces
around the @samp{%o} as well or the results are undefined.
@samp{%o} is for use in the specs for running the linker.
Input files whose names have no recognized suffix are not compiled
at all, but they are included among the output files, so they will
be linked.

@item %O
Substitutes the suffix for object files.  Note that this is
handled specially when it immediately follows @samp{%g, %u, or %U},
because of the need for those to form complete file names.  The
handling is such that @samp{%O} is treated exactly as if it had already
been substituted, except that @samp{%g, %u, and %U} do not currently
support additional @var{suffix} characters following @samp{%O} as they would
following, for example, @samp{.o}.

@item %p
Substitutes the standard macro predefinitions for the
current target machine.  Use this when running @code{cpp}.

@item %P
Like @samp{%p}, but puts @samp{__} before and after the name of each
predefined macro, except for macros that start with @samp{__} or with
@samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
C@.

@item %I
Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
@option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
@option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
and @option{-imultilib} as necessary.

@item %s
Current argument is the name of a library or startup file of some sort.
Search for that file in a standard list of directories and substitute
the full name found.

@item %e@var{str}
Print @var{str} as an error message.  @var{str} is terminated by a newline.
Use this when inconsistent options are detected.

@item %(@var{name})
Substitute the contents of spec string @var{name} at this point.

@item %[@var{name}]
Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments.

@item %x@{@var{option}@}
Accumulate an option for @samp{%X}.

@item %X
Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
spec string.

@item %Y
Output the accumulated assembler options specified by @option{-Wa}.

@item %Z
Output the accumulated preprocessor options specified by @option{-Wp}.

@item %a
Process the @code{asm} spec.  This is used to compute the
switches to be passed to the assembler.

@item %A
Process the @code{asm_final} spec.  This is a spec string for
passing switches to an assembler post-processor, if such a program is
needed.

@item %l
Process the @code{link} spec.  This is the spec for computing the
command line passed to the linker.  Typically it will make use of the
@samp{%L %G %S %D and %E} sequences.

@item %D
Dump out a @option{-L} option for each directory that GCC believes might
contain startup files.  If the target supports multilibs then the
current multilib directory will be prepended to each of these paths.

@item %L
Process the @code{lib} spec.  This is a spec string for deciding which
libraries should be included on the command line to the linker.

@item %G
Process the @code{libgcc} spec.  This is a spec string for deciding
which GCC support library should be included on the command line to the linker.

@item %S
Process the @code{startfile} spec.  This is a spec for deciding which
object files should be the first ones passed to the linker.  Typically
this might be a file named @file{crt0.o}.

@item %E
Process the @code{endfile} spec.  This is a spec string that specifies
the last object files that will be passed to the linker.

@item %C
Process the @code{cpp} spec.  This is used to construct the arguments
to be passed to the C preprocessor.

@item %1
Process the @code{cc1} spec.  This is used to construct the options to be
passed to the actual C compiler (@samp{cc1}).

@item %2
Process the @code{cc1plus} spec.  This is used to construct the options to be
passed to the actual C++ compiler (@samp{cc1plus}).

@item %*
Substitute the variable part of a matched option.  See below.
Note that each comma in the substituted string is replaced by
a single space.

@item %<@code{S}
Remove all occurrences of @code{-S} from the command line.  Note---this
command is position dependent.  @samp{%} commands in the spec string
before this one will see @code{-S}, @samp{%} commands in the spec string
after this one will not.

@item %:@var{function}(@var{args})
Call the named function @var{function}, passing it @var{args}.
@var{args} is first processed as a nested spec string, then split
into an argument vector in the usual fashion.  The function returns
a string which is processed as if it had appeared literally as part
of the current spec.

The following built-in spec functions are provided:

@table @code
@item @code{if-exists}
The @code{if-exists} spec function takes one argument, an absolute
pathname to a file.  If the file exists, @code{if-exists} returns the
pathname.  Here is a small example of its usage:

@smallexample
*startfile:
crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
@end smallexample

@item @code{if-exists-else}
The @code{if-exists-else} spec function is similar to the @code{if-exists}
spec function, except that it takes two arguments.  The first argument is
an absolute pathname to a file.  If the file exists, @code{if-exists-else}
returns the pathname.  If it does not exist, it returns the second argument.
This way, @code{if-exists-else} can be used to select one file or another,
based on the existence of the first.  Here is a small example of its usage:

@smallexample
*startfile:
crt0%O%s %:if-exists(crti%O%s) \
%:if-exists-else(crtbeginT%O%s crtbegin%O%s)
@end smallexample

@item @code{replace-outfile}
The @code{replace-outfile} spec function takes two arguments.  It looks for the
first argument in the outfiles array and replaces it with the second argument.  Here
is a small example of its usage:

@smallexample
%@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@}
@end smallexample

@end table

@item %@{@code{S}@}
Substitutes the @code{-S} switch, if that switch was given to GCC@.
If that switch was not specified, this substitutes nothing.  Note that
the leading dash is omitted when specifying this option, and it is
automatically inserted if the substitution is performed.  Thus the spec
string @samp{%@{foo@}} would match the command-line option @option{-foo}
and would output the command line option @option{-foo}.

@item %W@{@code{S}@}
Like %@{@code{S}@} but mark last argument supplied within as a file to be
deleted on failure.

@item %@{@code{S}*@}
Substitutes all the switches specified to GCC whose names start
with @code{-S}, but which also take an argument.  This is used for
switches like @option{-o}, @option{-D}, @option{-I}, etc.
GCC considers @option{-o foo} as being
one switch whose names starts with @samp{o}.  %@{o*@} would substitute this
text, including the space.  Thus two arguments would be generated.

@item %@{@code{S}*&@code{T}*@}
Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
(the order of @code{S} and @code{T} in the spec is not significant).
There can be any number of ampersand-separated variables; for each the
wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.

@item %@{@code{S}:@code{X}@}
Substitutes @code{X}, if the @samp{-S} switch was given to GCC@.

@item %@{!@code{S}:@code{X}@}
Substitutes @code{X}, if the @samp{-S} switch was @emph{not} given to GCC@.

@item %@{@code{S}*:@code{X}@}
Substitutes @code{X} if one or more switches whose names start with
@code{-S} are specified to GCC@.  Normally @code{X} is substituted only
once, no matter how many such switches appeared.  However, if @code{%*}
appears somewhere in @code{X}, then @code{X} will be substituted once
for each matching switch, with the @code{%*} replaced by the part of
that switch that matched the @code{*}.

@item %@{.@code{S}:@code{X}@}
Substitutes @code{X}, if processing a file with suffix @code{S}.

@item %@{!.@code{S}:@code{X}@}
Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.

@c APPLE LOCAL begin mainline 2007-03-13 5040758
@item %@{,@code{S}:@code{X}@}
Substitutes @code{X}, if processing a file for language @code{S}.

@item %@{!,@code{S}:@code{X}@}
Substitutes @code{X}, if not processing a file for language @code{S}.

@item %@{@code{S}|@code{P}:@code{X}@}
Substitutes @code{X} if either @code{-S} or @code{-P} was given to
GCC@.  This may be combined with @samp{!}, @samp{.}, @samp{,}, and
@code{*} sequences as well, although they have a stronger binding than
the @samp{|}.  If @code{%*} appears in @code{X}, all of the
alternatives must be starred, and only the first matching alternative
is substituted.

@c APPLE LOCAL end mainline 2007-03-13 5040758
For example, a spec string like this:

@smallexample
%@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
@end smallexample

will output the following command-line options from the following input
command-line options:

@smallexample
fred.c        -foo -baz
jim.d         -bar -boggle
-d fred.c     -foo -baz -boggle
-d jim.d      -bar -baz -boggle
@end smallexample

@item %@{S:X; T:Y; :D@}

@c APPLE LOCAL begin mainline 2007-03-13 5040758
If @code{S} was given to GCC, substitutes @code{X}; else if @code{T} was
given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
be as many clauses as you need.  This may be combined with @code{.},
@code{,}, @code{!}, @code{|}, and @code{*} as needed.
@c APPLE LOCAL end mainline 2007-03-13 5040758


@end table

The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
construct may contain other nested @samp{%} constructs or spaces, or
even newlines.  They are processed as usual, as described above.
Trailing white space in @code{X} is ignored.  White space may also
appear anywhere on the left side of the colon in these constructs,
except between @code{.} or @code{*} and the corresponding word.

The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
handled specifically in these constructs.  If another value of
@option{-O} or the negated form of a @option{-f}, @option{-m}, or
@option{-W} switch is found later in the command line, the earlier
switch value is ignored, except with @{@code{S}*@} where @code{S} is
just one letter, which passes all matching options.

The character @samp{|} at the beginning of the predicate text is used to
indicate that a command should be piped to the following command, but
only if @option{-pipe} is specified.

It is built into GCC which switches take arguments and which do not.
(You might think it would be useful to generalize this to allow each
compiler's spec to say which switches take arguments.  But this cannot
be done in a consistent fashion.  GCC cannot even decide which input
files have been specified without knowing which switches take arguments,
and it must know which input files to compile in order to tell which
compilers to run).

GCC also knows implicitly that arguments starting in @option{-l} are to be
treated as compiler output files, and passed to the linker in their
proper position among the other output files.

@c man begin OPTIONS

@node Target Options
@section Specifying Target Machine and Compiler Version
@cindex target options
@cindex cross compiling
@cindex specifying machine version
@cindex specifying compiler version and target machine
@cindex compiler version, specifying
@cindex target machine, specifying

The usual way to run GCC is to run the executable called @file{gcc}, or
@file{<machine>-gcc} when cross-compiling, or
@file{<machine>-gcc-<version>} to run a version other than the one that
was installed last.  Sometimes this is inconvenient, so GCC provides
options that will switch to another cross-compiler or version.

@table @gcctabopt
@item -b @var{machine}
@opindex b
The argument @var{machine} specifies the target machine for compilation.

The value to use for @var{machine} is the same as was specified as the
machine type when configuring GCC as a cross-compiler.  For
example, if a cross-compiler was configured with @samp{configure
arm-elf}, meaning to compile for an arm processor with elf binaries,
then you would specify @option{-b arm-elf} to run that cross compiler.
Because there are other options beginning with @option{-b}, the
configuration must contain a hyphen. 

@item -V @var{version}
@opindex V
The argument @var{version} specifies which version of GCC to run.
This is useful when multiple versions are installed.  For example,
@var{version} might be @samp{4.0}, meaning to run GCC version 4.0.
@end table

The @option{-V} and @option{-b} options work by running the
@file{<machine>-gcc-<version>} executable, so there's no real reason to
use them if you can just run that directly.

@node Submodel Options
@section Hardware Models and Configurations
@cindex submodel options
@cindex specifying hardware config
@cindex hardware models and configurations, specifying
@cindex machine dependent options

Earlier we discussed the standard option @option{-b} which chooses among
different installed compilers for completely different target
machines, such as VAX vs.@: 68000 vs.@: 80386.

In addition, each of these target machine types can have its own
special options, starting with @samp{-m}, to choose among various
hardware models or configurations---for example, 68010 vs 68020,
floating coprocessor or none.  A single installed version of the
compiler can compile for any model or configuration, according to the
options specified.

Some configurations of the compiler also support additional special
options, usually for compatibility with other compilers on the same
platform.

@c This list is ordered alphanumerically by subsection name.
@c It should be the same order and spelling as these options are listed
@c in Machine Dependent Options

@menu
@c APPLE LOCAL prune man page
@ignore
* ARC Options::
@c APPLE LOCAL ARM prune man page
@end ignore
* ARM Options::
@c APPLE LOCAL ARM prune man page
@ignore
* AVR Options::
* Blackfin Options::
* CRIS Options::
* CRX Options::
@c APPLE LOCAL prune man page
@end ignore
* Darwin Options::
@c APPLE LOCAL prune man page
@ignore
* DEC Alpha Options::
* DEC Alpha/VMS Options::
* FRV Options::
* GNU/Linux Options::
* H8/300 Options::
* HPPA Options::
@c APPLE LOCAL prune man page
@end ignore
* i386 and x86-64 Options::
@c APPLE LOCAL prune man page
@ignore
* IA-64 Options::
* M32C Options::
* M32R/D Options::
* M680x0 Options::
* M68hc1x Options::
* MCore Options::
* MIPS Options::
* MMIX Options::
* MN10300 Options::
* MT Options::
* PDP-11 Options::
@c APPLE LOCAL prune man page
@end ignore
* PowerPC Options::
* RS/6000 and PowerPC Options::
@c APPLE LOCAL prune man page
@ignore
* S/390 and zSeries Options::
* Score Options::
* SH Options::
* SPARC Options::
* System V Options::
* TMS320C3x/C4x Options::
* V850 Options::
* VAX Options::
* x86-64 Options::
* Xstormy16 Options::
* Xtensa Options::
* zSeries Options::
@c APPLE LOCAL prune man page
@end ignore
@end menu

@c APPLE LOCAL prune man page
@ignore
@node ARC Options
@subsection ARC Options
@cindex ARC Options

These options are defined for ARC implementations:

@table @gcctabopt
@item -EL
@opindex EL
Compile code for little endian mode.  This is the default.

@item -EB
@opindex EB
Compile code for big endian mode.

@item -mmangle-cpu
@opindex mmangle-cpu
Prepend the name of the cpu to all public symbol names.
In multiple-processor systems, there are many ARC variants with different
instruction and register set characteristics.  This flag prevents code
compiled for one cpu to be linked with code compiled for another.
No facility exists for handling variants that are ``almost identical''.
This is an all or nothing option.

@item -mcpu=@var{cpu}
@opindex mcpu
Compile code for ARC variant @var{cpu}.
Which variants are supported depend on the configuration.
All variants support @option{-mcpu=base}, this is the default.

@item -mtext=@var{text-section}
@itemx -mdata=@var{data-section}
@itemx -mrodata=@var{readonly-data-section}
@opindex mtext
@opindex mdata
@opindex mrodata
Put functions, data, and readonly data in @var{text-section},
@var{data-section}, and @var{readonly-data-section} respectively
by default.  This can be overridden with the @code{section} attribute.
@xref{Variable Attributes}.

@end table
@c APPLE LOCAL ARM prune man page
@end ignore

@node ARM Options
@subsection ARM Options
@cindex ARM options

These @samp{-m} options are defined for Advanced RISC Machines (ARM)
architectures:

@table @gcctabopt
@item -mabi=@var{name}
@opindex mabi
Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
@samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.

@item -mapcs-frame
@opindex mapcs-frame
Generate a stack frame that is compliant with the ARM Procedure Call
Standard for all functions, even if this is not strictly necessary for
correct execution of the code.  Specifying @option{-fomit-frame-pointer}
with this option will cause the stack frames not to be generated for
leaf functions.  The default is @option{-mno-apcs-frame}.

@item -mapcs
@opindex mapcs
This is a synonym for @option{-mapcs-frame}.

@c APPLE LOCAL We already have ignore running -- do not do this one --bowdidge 
@c @ignore
@c not currently implemented
@item -mapcs-stack-check
@opindex mapcs-stack-check
Generate code to check the amount of stack space available upon entry to
every function (that actually uses some stack space).  If there is
insufficient space available then either the function
@samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
called, depending upon the amount of stack space required.  The run time
system is required to provide these functions.  The default is
@option{-mno-apcs-stack-check}, since this produces smaller code.

@c not currently implemented
@item -mapcs-float
@opindex mapcs-float
Pass floating point arguments using the float point registers.  This is
one of the variants of the APCS@.  This option is recommended if the
target hardware has a floating point unit or if a lot of floating point
arithmetic is going to be performed by the code.  The default is
@option{-mno-apcs-float}, since integer only code is slightly increased in
size if @option{-mapcs-float} is used.

@c not currently implemented
@item -mapcs-reentrant
@opindex mapcs-reentrant
Generate reentrant, position independent code.  The default is
@option{-mno-apcs-reentrant}.
@c APPLE LOCAL We already have ignore running -- do not do this one --bowdidge 
@c @end ignore

@item -mthumb-interwork
@opindex mthumb-interwork
Generate code which supports calling between the ARM and Thumb
instruction sets.  Without this option the two instruction sets cannot
be reliably used inside one program.  The default is
@option{-mno-thumb-interwork}, since slightly larger code is generated
when @option{-mthumb-interwork} is specified.

@item -mno-sched-prolog
@opindex mno-sched-prolog
Prevent the reordering of instructions in the function prolog, or the
merging of those instruction with the instructions in the function's
body.  This means that all functions will start with a recognizable set
of instructions (or in fact one of a choice from a small set of
different function prologues), and this information can be used to
locate the start if functions inside an executable piece of code.  The
default is @option{-msched-prolog}.

@item -mhard-float
@opindex mhard-float
Generate output containing floating point instructions.  This is the
default.

@item -msoft-float
@opindex msoft-float
Generate output containing library calls for floating point.
@strong{Warning:} the requisite libraries are not available for all ARM
targets.  Normally the facilities of the machine's usual C compiler are
used, but this cannot be done directly in cross-compilation.  You must make
your own arrangements to provide suitable library functions for
cross-compilation.

@option{-msoft-float} changes the calling convention in the output file;
therefore, it is only useful if you compile @emph{all} of a program with
this option.  In particular, you need to compile @file{libgcc.a}, the
library that comes with GCC, with @option{-msoft-float} in order for
this to work.

@item -mfloat-abi=@var{name}
@opindex mfloat-abi
Specifies which ABI to use for floating point values.  Permissible values
are: @samp{soft}, @samp{softfp} and @samp{hard}.

@samp{soft} and @samp{hard} are equivalent to @option{-msoft-float}
and @option{-mhard-float} respectively.  @samp{softfp} allows the generation
of floating point instructions, but still uses the soft-float calling
conventions.

@item -mlittle-endian
@opindex mlittle-endian
Generate code for a processor running in little-endian mode.  This is
the default for all standard configurations.

@item -mbig-endian
@opindex mbig-endian
Generate code for a processor running in big-endian mode; the default is
to compile code for a little-endian processor.

@item -mwords-little-endian
@opindex mwords-little-endian
This option only applies when generating code for big-endian processors.
Generate code for a little-endian word order but a big-endian byte
order.  That is, a byte order of the form @samp{32107654}.  Note: this
option should only be used if you require compatibility with code for
big-endian ARM processors generated by versions of the compiler prior to
2.8.

@item -mcpu=@var{name}
@opindex mcpu
This specifies the name of the target ARM processor.  GCC uses this name
to determine what kind of instructions it can emit when generating
assembly code.  Permissible names are: @samp{arm2}, @samp{arm250},
@samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
@samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
@samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
@samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
@samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s},
@samp{arm8}, @samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
@samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
@samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s},
@samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi},
@samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s},
@samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
@samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
@samp{arm1176jz-s}, @samp{arm1176jzf-s}, @samp{xscale}, @samp{iwmmxt},
@samp{ep9312}.

@itemx -mtune=@var{name}
@opindex mtune
This option is very similar to the @option{-mcpu=} option, except that
instead of specifying the actual target processor type, and hence
restricting which instructions can be used, it specifies that GCC should
tune the performance of the code as if the target were of the type
specified in this option, but still choosing the instructions that it
will generate based on the cpu specified by a @option{-mcpu=} option.
For some ARM implementations better performance can be obtained by using
this option.

@item -march=@var{name}
@opindex march
This specifies the name of the target ARM architecture.  GCC uses this
name to determine what kind of instructions it can emit when generating
assembly code.  This option can be used in conjunction with or instead
of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
@samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
@samp{armv5}, @samp{armv5t}, @samp{armv5te}, @samp{armv6}, @samp{armv6j},
@samp{iwmmxt}, @samp{ep9312}.

@item -mfpu=@var{name}
@itemx -mfpe=@var{number}
@itemx -mfp=@var{number}
@opindex mfpu
@opindex mfpe
@opindex mfp
This specifies what floating point hardware (or hardware emulation) is
available on the target.  Permissible names are: @samp{fpa}, @samp{fpe2},
@samp{fpe3}, @samp{maverick}, @samp{vfp}.  @option{-mfp} and @option{-mfpe}
are synonyms for @option{-mfpu}=@samp{fpe}@var{number}, for compatibility
with older versions of GCC@.

If @option{-msoft-float} is specified this specifies the format of
floating point values.

@item -mstructure-size-boundary=@var{n}
@opindex mstructure-size-boundary
The size of all structures and unions will be rounded up to a multiple
of the number of bits set by this option.  Permissible values are 8, 32
and 64.  The default value varies for different toolchains.  For the COFF
targeted toolchain the default value is 8.  A value of 64 is only allowed
if the underlying ABI supports it.

Specifying the larger number can produce faster, more efficient code, but
can also increase the size of the program.  Different values are potentially
incompatible.  Code compiled with one value cannot necessarily expect to
work with code or libraries compiled with another value, if they exchange
information using structures or unions.

@item -mabort-on-noreturn
@opindex mabort-on-noreturn
Generate a call to the function @code{abort} at the end of a
@code{noreturn} function.  It will be executed if the function tries to
return.

@item -mlong-calls
@itemx -mno-long-calls
@opindex mlong-calls
@opindex mno-long-calls
Tells the compiler to perform function calls by first loading the
address of the function into a register and then performing a subroutine
call on this register.  This switch is needed if the target function
will lie outside of the 64 megabyte addressing range of the offset based
version of subroutine call instruction.

Even if this switch is enabled, not all function calls will be turned
into long calls.  The heuristic is that static functions, functions
which have the @samp{short-call} attribute, functions that are inside
the scope of a @samp{#pragma no_long_calls} directive and functions whose
definitions have already been compiled within the current compilation
unit, will not be turned into long calls.  The exception to this rule is
that weak function definitions, functions with the @samp{long-call}
attribute or the @samp{section} attribute, and functions that are within
the scope of a @samp{#pragma long_calls} directive, will always be
turned into long calls.

This feature is not enabled by default.  Specifying
@option{-mno-long-calls} will restore the default behavior, as will
placing the function calls within the scope of a @samp{#pragma
long_calls_off} directive.  Note these switches have no effect on how
the compiler generates code to handle function calls via function
pointers.

@item -mnop-fun-dllimport
@opindex mnop-fun-dllimport
Disable support for the @code{dllimport} attribute.

@item -msingle-pic-base
@opindex msingle-pic-base
Treat the register used for PIC addressing as read-only, rather than
loading it in the prologue for each function.  The run-time system is
responsible for initializing this register with an appropriate value
before execution begins.

@item -mpic-register=@var{reg}
@opindex mpic-register
Specify the register to be used for PIC addressing.  The default is R10
unless stack-checking is enabled, when R9 is used.

@item -mcirrus-fix-invalid-insns
@opindex mcirrus-fix-invalid-insns
@opindex mno-cirrus-fix-invalid-insns
Insert NOPs into the instruction stream to in order to work around
problems with invalid Maverick instruction combinations.  This option
is only valid if the @option{-mcpu=ep9312} option has been used to
enable generation of instructions for the Cirrus Maverick floating
point co-processor.  This option is not enabled by default, since the
problem is only present in older Maverick implementations.  The default
can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns}
switch.

@item -mpoke-function-name
@opindex mpoke-function-name
Write the name of each function into the text section, directly
preceding the function prologue.  The generated code is similar to this:

@smallexample
     t0
         .ascii "arm_poke_function_name", 0
         .align
     t1
         .word 0xff000000 + (t1 - t0)
     arm_poke_function_name
         mov     ip, sp
         stmfd   sp!, @{fp, ip, lr, pc@}
         sub     fp, ip, #4
@end smallexample

When performing a stack backtrace, code can inspect the value of
@code{pc} stored at @code{fp + 0}.  If the trace function then looks at
location @code{pc - 12} and the top 8 bits are set, then we know that
there is a function name embedded immediately preceding this location
and has length @code{((pc[-3]) & 0xff000000)}.

@item -mthumb
@opindex mthumb
Generate code for the 16-bit Thumb instruction set.  The default is to
use the 32-bit ARM instruction set.

@item -mtpcs-frame
@opindex mtpcs-frame
Generate a stack frame that is compliant with the Thumb Procedure Call
Standard for all non-leaf functions.  (A leaf function is one that does
not call any other functions.)  The default is @option{-mno-tpcs-frame}.

@item -mtpcs-leaf-frame
@opindex mtpcs-leaf-frame
Generate a stack frame that is compliant with the Thumb Procedure Call
Standard for all leaf functions.  (A leaf function is one that does
not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.

@item -mcallee-super-interworking
@opindex mcallee-super-interworking
Gives all externally visible functions in the file being compiled an ARM
instruction set header which switches to Thumb mode before executing the
rest of the function.  This allows these functions to be called from
non-interworking code.

@item -mcaller-super-interworking
@opindex mcaller-super-interworking
Allows calls via function pointers (including virtual functions) to
execute correctly regardless of whether the target code has been
compiled for interworking or not.  There is a small overhead in the cost
of executing a function pointer if this option is enabled.

@item -mtp=@var{name}
@opindex mtp
Specify the access model for the thread local storage pointer.  The valid
models are @option{soft}, which generates calls to @code{__aeabi_read_tp},
@option{cp15}, which fetches the thread pointer from @code{cp15} directly
(supported in the arm6k architecture), and @option{auto}, which uses the
best available method for the selected processor.  The default setting is
@option{auto}.

@c APPLE LOCAL begin  5946347 ms_struct support
@item -mms-bitfields
@opindex mms-bitfields
Set the default structure layout to be compatible with the Microsoft
compiler standard. This is equivalent to adding an @code{ms_struct}
attribute to each structure and union tag definition. The default is
@option{mno-ms-bitfields}.
@c APPLE LOCAL end 5946347 ms_struct support

@end table

@c APPLE LOCAL ARM prune man page
@ignore
@node AVR Options
@subsection AVR Options
@cindex AVR Options

These options are defined for AVR implementations:

@table @gcctabopt
@item -mmcu=@var{mcu}
@opindex mmcu
Specify ATMEL AVR instruction set or MCU type.

Instruction set avr1 is for the minimal AVR core, not supported by the C
compiler, only for assembler programs (MCU types: at90s1200, attiny10,
attiny11, attiny12, attiny15, attiny28).

Instruction set avr2 (default) is for the classic AVR core with up to
8K program memory space (MCU types: at90s2313, at90s2323, attiny22,
at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
at90c8534, at90s8535).

Instruction set avr3 is for the classic AVR core with up to 128K program
memory space (MCU types: atmega103, atmega603, at43usb320, at76c711).

Instruction set avr4 is for the enhanced AVR core with up to 8K program
memory space (MCU types: atmega8, atmega83, atmega85).

Instruction set avr5 is for the enhanced AVR core with up to 128K program
memory space (MCU types: atmega16, atmega161, atmega163, atmega32, atmega323,
atmega64, atmega128, at43usb355, at94k).

@item -msize
@opindex msize
Output instruction sizes to the asm file.

@item -minit-stack=@var{N}
@opindex minit-stack
Specify the initial stack address, which may be a symbol or numeric value,
@samp{__stack} is the default.

@item -mno-interrupts
@opindex mno-interrupts
Generated code is not compatible with hardware interrupts.
Code size will be smaller.

@item -mcall-prologues
@opindex mcall-prologues
Functions prologues/epilogues expanded as call to appropriate
subroutines.  Code size will be smaller.

@item -mno-tablejump
@opindex mno-tablejump
Do not generate tablejump insns which sometimes increase code size.

@item -mtiny-stack
@opindex mtiny-stack
Change only the low 8 bits of the stack pointer.

@item -mint8
@opindex mint8
Assume int to be 8 bit integer.  This affects the sizes of all types: A
char will be 1 byte, an int will be 1 byte, an long will be 2 bytes
and long long will be 4 bytes.  Please note that this option does not
comply to the C standards, but it will provide you with smaller code
size.
@end table

@node Blackfin Options
@subsection Blackfin Options
@cindex Blackfin Options

@table @gcctabopt
@item -momit-leaf-frame-pointer
@opindex momit-leaf-frame-pointer
Don't keep the frame pointer in a register for leaf functions.  This
avoids the instructions to save, set up and restore frame pointers and
makes an extra register available in leaf functions.  The option
@option{-fomit-frame-pointer} removes the frame pointer for all functions
which might make debugging harder.

@item -mspecld-anomaly
@opindex mspecld-anomaly
When enabled, the compiler will ensure that the generated code does not
contain speculative loads after jump instructions.  This option is enabled
by default.

@item -mno-specld-anomaly
@opindex mno-specld-anomaly
Don't generate extra code to prevent speculative loads from occurring.

@item -mcsync-anomaly
@opindex mcsync-anomaly
When enabled, the compiler will ensure that the generated code does not
contain CSYNC or SSYNC instructions too soon after conditional branches.
This option is enabled by default.

@item -mno-csync-anomaly
@opindex mno-csync-anomaly
Don't generate extra code to prevent CSYNC or SSYNC instructions from
occurring too soon after a conditional branch.

@item -mlow-64k
@opindex mlow-64k
When enabled, the compiler is free to take advantage of the knowledge that
the entire program fits into the low 64k of memory.

@item -mno-low-64k
@opindex mno-low-64k
Assume that the program is arbitrarily large.  This is the default.

@item -mid-shared-library
@opindex mid-shared-library
Generate code that supports shared libraries via the library ID method.
This allows for execute in place and shared libraries in an environment
without virtual memory management.  This option implies @option{-fPIC}.

@item -mno-id-shared-library
@opindex mno-id-shared-library
Generate code that doesn't assume ID based shared libraries are being used.
This is the default.

@item -mshared-library-id=n
@opindex mshared-library-id
Specified the identification number of the ID based shared library being
compiled.  Specifying a value of 0 will generate more compact code, specifying
other values will force the allocation of that number to the current
library but is no more space or time efficient than omitting this option.

@item -mlong-calls
@itemx -mno-long-calls
@opindex mlong-calls
@opindex mno-long-calls
Tells the compiler to perform function calls by first loading the
address of the function into a register and then performing a subroutine
call on this register.  This switch is needed if the target function
will lie outside of the 24 bit addressing range of the offset based
version of subroutine call instruction.

This feature is not enabled by default.  Specifying
@option{-mno-long-calls} will restore the default behavior.  Note these
switches have no effect on how the compiler generates code to handle
function calls via function pointers.
@end table

@node CRIS Options
@subsection CRIS Options
@cindex CRIS Options

These options are defined specifically for the CRIS ports.

@table @gcctabopt
@item -march=@var{architecture-type}
@itemx -mcpu=@var{architecture-type}
@opindex march
@opindex mcpu
Generate code for the specified architecture.  The choices for
@var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@.
Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
@samp{v10}.

@item -mtune=@var{architecture-type}
@opindex mtune
Tune to @var{architecture-type} everything applicable about the generated
code, except for the ABI and the set of available instructions.  The
choices for @var{architecture-type} are the same as for
@option{-march=@var{architecture-type}}.

@item -mmax-stack-frame=@var{n}
@opindex mmax-stack-frame
Warn when the stack frame of a function exceeds @var{n} bytes.

@item -melinux-stacksize=@var{n}
@opindex melinux-stacksize
Only available with the @samp{cris-axis-aout} target.  Arranges for
indications in the program to the kernel loader that the stack of the
program should be set to @var{n} bytes.

@item -metrax4
@itemx -metrax100
@opindex metrax4
@opindex metrax100
The options @option{-metrax4} and @option{-metrax100} are synonyms for
@option{-march=v3} and @option{-march=v8} respectively.

@item -mmul-bug-workaround
@itemx -mno-mul-bug-workaround
@opindex mmul-bug-workaround
@opindex mno-mul-bug-workaround
Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
models where it applies.  This option is active by default.

@item -mpdebug
@opindex mpdebug
Enable CRIS-specific verbose debug-related information in the assembly
code.  This option also has the effect to turn off the @samp{#NO_APP}
formatted-code indicator to the assembler at the beginning of the
assembly file.

@item -mcc-init
@opindex mcc-init
Do not use condition-code results from previous instruction; always emit
compare and test instructions before use of condition codes.

@item -mno-side-effects
@opindex mno-side-effects
Do not emit instructions with side-effects in addressing modes other than
post-increment.

@item -mstack-align
@itemx -mno-stack-align
@itemx -mdata-align
@itemx -mno-data-align
@itemx -mconst-align
@itemx -mno-const-align
@opindex mstack-align
@opindex mno-stack-align
@opindex mdata-align
@opindex mno-data-align
@opindex mconst-align
@opindex mno-const-align
These options (no-options) arranges (eliminate arrangements) for the
stack-frame, individual data and constants to be aligned for the maximum
single data access size for the chosen CPU model.  The default is to
arrange for 32-bit alignment.  ABI details such as structure layout are
not affected by these options.

@item -m32-bit
@itemx -m16-bit
@itemx -m8-bit
@opindex m32-bit
@opindex m16-bit
@opindex m8-bit
Similar to the stack- data- and const-align options above, these options
arrange for stack-frame, writable data and constants to all be 32-bit,
16-bit or 8-bit aligned.  The default is 32-bit alignment.

@item -mno-prologue-epilogue
@itemx -mprologue-epilogue
@opindex mno-prologue-epilogue
@opindex mprologue-epilogue
With @option{-mno-prologue-epilogue}, the normal function prologue and
epilogue that sets up the stack-frame are omitted and no return
instructions or return sequences are generated in the code.  Use this
option only together with visual inspection of the compiled code: no
warnings or errors are generated when call-saved registers must be saved,
or storage for local variable needs to be allocated.

@item -mno-gotplt
@itemx -mgotplt
@opindex mno-gotplt
@opindex mgotplt
With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
instruction sequences that load addresses for functions from the PLT part
of the GOT rather than (traditional on other architectures) calls to the
PLT@.  The default is @option{-mgotplt}.

@item -maout
@opindex maout
Legacy no-op option only recognized with the cris-axis-aout target.

@item -melf
@opindex melf
Legacy no-op option only recognized with the cris-axis-elf and
cris-axis-linux-gnu targets.

@item -melinux
@opindex melinux
Only recognized with the cris-axis-aout target, where it selects a
GNU/linux-like multilib, include files and instruction set for
@option{-march=v8}.

@item -mlinux
@opindex mlinux
Legacy no-op option only recognized with the cris-axis-linux-gnu target.

@item -sim
@opindex sim
This option, recognized for the cris-axis-aout and cris-axis-elf arranges
to link with input-output functions from a simulator library.  Code,
initialized data and zero-initialized data are allocated consecutively.

@item -sim2
@opindex sim2
Like @option{-sim}, but pass linker options to locate initialized data at
0x40000000 and zero-initialized data at 0x80000000.
@end table

@node CRX Options
@subsection CRX Options
@cindex CRX Options

These options are defined specifically for the CRX ports.

@table @gcctabopt

@item -mmac
@opindex mmac
Enable the use of multiply-accumulate instructions. Disabled by default.

@item -mpush-args
@opindex mpush-args
Push instructions will be used to pass outgoing arguments when functions
are called. Enabled by default.
@end table
@c APPLE LOCAL prune man page
@end ignore

@node Darwin Options
@subsection Darwin Options
@cindex Darwin options

These options are defined for all architectures running the Darwin operating
system.

@c APPLE LOCAL universal
FSF GCC on Darwin does not create ``universal'' object files; it will create
an object file for the single architecture that it was built to
@c APPLE LOCAL universal
target.  Apple's GCC on Darwin does create ``universal'' files if multiple
@option{-arch} options are used; it does so by running the compiler or
linker multiple times and joining the results together with
@file{lipo}.

The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or
@samp{i686}) is determined by the flags that specify the ISA
that GCC is targetting, like @option{-mcpu} or @option{-march}.  The
@option{-force_cpusubtype_ALL} option can be used to override this.

The Darwin tools vary in their behavior when presented with an ISA
mismatch.  The assembler, @file{as}, will only permit instructions to
be used that are valid for the subtype of the file it is generating,
so you cannot put 64-bit instructions in an @samp{ppc750} object file.
The linker for shared libraries, @file{/usr/bin/libtool}, will fail
and print an error if asked to create a shared library with a less
restrictive subtype than its input files (for instance, trying to put
a @samp{ppc970} object file in a @samp{ppc7400} library).  The linker
for executables, @file{ld}, will quietly give the executable the most
restrictive subtype of any of its input files.

@table @gcctabopt
@item -F@var{dir}
@opindex F
Add the framework directory @var{dir} to the head of the list of
directories to be searched for header files.  These directories are
interleaved with those specified by @option{-I} options and are
scanned in a left-to-right order.

A framework directory is a directory with frameworks in it.  A
framework is a directory with a @samp{"Headers"} and/or
@samp{"PrivateHeaders"} directory contained directly in it that ends
in @samp{".framework"}.  The name of a framework is the name of this
directory excluding the @samp{".framework"}.  Headers associated with
the framework are found in one of those two directories, with
@samp{"Headers"} being searched first.  A subframework is a framework
directory that is in a framework's @samp{"Frameworks"} directory.
Includes of subframework headers can only appear in a header of a
framework that contains the subframework, or in a sibling subframework
header.  Two subframeworks are siblings if they occur in the same
framework.  A subframework should not have the same name as a
framework, a warning will be issued if this is violated.  Currently a
subframework cannot have subframeworks, in the future, the mechanism
may be extended to support this.  The standard frameworks can be found
in @samp{"/System/Library/Frameworks"} and
@samp{"/Library/Frameworks"}.  An example include looks like
@code{#include <Framework/header.h>}, where @samp{Framework} denotes
the name of the framework and header.h is found in the
@samp{"PrivateHeaders"} or @samp{"Headers"} directory.

@c APPLE LOCAL begin iframework for 4.3 4094959
@item -iframework@var{dir}
@opindex iframework
Like @option{-F} except the directory is a treated as a system
directory.  The main effect is to not warn about constructs contained
within header files found via @var{dir}.
@c APPLE LOCAL end iframework for 4.3 4094959

@item -gused
@opindex gused
Emit debugging information for symbols that are used.  For STABS
debugging format, this enables @option{-feliminate-unused-debug-symbols}.
This is by default ON@.

@item -gfull
@opindex gfull
Emit debugging information for all symbols and types.

@item -mmacosx-version-min=@var{version}
The earliest version of MacOS X that this executable will run on
is @var{version}.  Typical values of @var{version} include @code{10.1},
@code{10.2}, and @code{10.3.9}.

@c APPLE LOCAL begin ARM 5905142
This value can also be set with the @env{MACOSX_DEPLOYMENT_TARGET}
environment variable.  If both the command-line option is specified
and the environment variable is set, the command-line option will
take precedence.
@c APPLE LOCAL end ARM 5905142

@c APPLE LOCAL begin mainline 2007-06-14 5235474
If the compiler was built to use the system's headers by default,
then the default for this option is the system version on which the
compiler is running, otherwise the default is to make choices which
are compatible with as many systems and code bases as possible.
@c APPLE LOCAL end mainline 2007-06-14 5235474

@c APPLE LOCAL begin ARM 5905142
This value is not set by default for ARM targets.

@item -miphoneos-version-min=@var{version}
The earliest version of iPhone OS that this executable will run on
is @var{version}.

This value can also be set with the @env{IPHONEOS_DEPLOYMENT_TARGET}
environment variable.  If both the command-line option is specified
and the environment variable is set, the command-line option will
take precedence.

On ARM targets, if not specified by the command-line option or
environment variable, this value defaults to 2.0.
@c APPLE LOCAL end ARM 5905142

@item -mkernel
@opindex mkernel
Enable kernel development mode.  The @option{-mkernel} option sets
@c APPLE LOCAL 5731065
@option{-static}, @option{-fno-common}, @option{-fno-builtin}, @option{-fno-cxa-atexit},
@c APPLE LOCAL 5628030
@option{-fno-exceptions}, @option{-fno-non-call-exceptions}, @option{-fno-asynchronous-unwind-tables},
@option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where
applicable.  This mode also sets @option{-mno-altivec},
@c APPLE LOCAL begin 5731065 6268204
@option{-msoft-float} and @option{-mlong-branch} for PowerPC targets,
@option{-mno-red-zone} on x86_64, and @option{-mlong-branch} for ARM
targets.  Of these, only -msoft-float can be changed which is useful in
a kext that wishes to use the hardware floating point unit.
@c APPLE LOCAL end 5731065 6268204
@c APPLE LOCAL begin kext weak_import 5935650
@option{-dynamic} can be used to override the effects of -static on
the assembler to enable the use of weak_import.
@c APPLE LOCAL end kext weak_import 5935650

@item -mone-byte-bool
@opindex mone-byte-bool
Override the defaults for @samp{bool} so that @samp{sizeof(bool)==1}.
By default @samp{sizeof(bool)} is @samp{4} when compiling for
Darwin/PowerPC and @samp{1} when compiling for Darwin/x86, so this
option has no effect on x86.

@strong{Warning:} The @option{-mone-byte-bool} switch causes GCC
to generate code that is not binary compatible with code generated
without that switch.  Using this switch may require recompiling all
other modules in a program, including system libraries.  Use this
switch to conform to a non-default data model.

@item -mfix-and-continue
@itemx -ffix-and-continue
@itemx -findirect-data
@opindex mfix-and-continue
@opindex ffix-and-continue
@opindex findirect-data
Generate code suitable for fast turn around development.  Needed to
enable gdb to dynamically load @code{.o} files into already running
programs.  @option{-findirect-data} and @option{-ffix-and-continue}
are provided for backwards compatibility.

@c APPLE LOCAL KEXT
@item -fapple-kext
@c APPLE LOCAL KEXT indirect-virtual-calls --sts
@itemx -findirect-virtual-calls
@c APPLE LOCAL KEXT terminated-vtables
@itemx -fterminated-vtables
@c APPLE LOCAL KEXT
@opindex fapple-kext
@c APPLE LOCAL KEXT indirect-virtual-calls --sts
@opindex findirect-virtual-calls
@c APPLE LOCAL KEXT terminated-vtables
@opindex fterminated-vtables
@c APPLE LOCAL begin KEXT
Alter vtables, destructors, and other implementation details to more
closely resemble the GCC 2.95 ABI for PowerPC and 32-bit i386.  This
is to make kernel extensions loadable by Darwin kernels, and is
required to build any Darwin kernel extension.  In addition, virtual
calls are not made directly, instead, code is generated to always go
through the virtual table, as virtual tables can be patched by the
kernel module loader.  Vtables are altered by adding a zero word at
the end of every vtable.  @option{-findirect-virtual-calls} and
@option{-fterminated-vtables} are accepted for backwards compatibility
but will be removed in the future.  Additionally implies
most of @option{-mkernel} except for @option{-msoft-float} and
@option{-mlong-branch} for PowerPC targets.  (APPLE ONLY)
@c APPLE LOCAL end KEXT

@c APPLE LOCAL begin pascal strings
@item -mpascal-strings
Allow Pascal-style string literals to be constructed.  This option
implies @option{-Wpointer-sign} so that conversions between
Pascal-style strings and C-style strings are warned about.  (APPLE
ONLY)

@xref{Pascal Strings,,Constructing String Literals with a Pascal-style
Length Byte}, for more information on the syntax and semantics of Pascal
string literals.
@c APPLE LOCAL end pascal strings

@item -all_load
@opindex all_load
Loads all members of static archive libraries.
See man ld(1) for more information.

@item -arch_errors_fatal
@opindex arch_errors_fatal
Cause the errors having to do with files that have the wrong architecture
to be fatal.

@item -bind_at_load
@opindex bind_at_load
Causes the output file to be marked such that the dynamic linker will
bind all undefined references when the file is loaded or launched.

@item -bundle
@opindex bundle
Produce a Mach-o bundle format file.
See man ld(1) for more information.

@item -bundle_loader @var{executable}
@opindex bundle_loader
This option specifies the @var{executable} that will be loading the build
output file being linked.  See man ld(1) for more information.

@item -dynamiclib
@opindex dynamiclib
When passed this option, GCC will produce a dynamic library instead of
an executable when linking, using the Darwin @file{libtool} command.

@item -force_cpusubtype_ALL
@opindex force_cpusubtype_ALL
This causes GCC's output file to have the @var{ALL} subtype, instead of
one controlled by the @option{-mcpu} or @option{-march} option.

@item -allowable_client  @var{client_name}
@itemx -client_name
@itemx -compatibility_version
@itemx -current_version
@itemx -dead_strip
@itemx -dependency-file
@itemx -dylib_file
@itemx -dylinker_install_name
@itemx -dynamic
@itemx -exported_symbols_list
@itemx -filelist
@itemx -flat_namespace
@itemx -force_flat_namespace
@itemx -headerpad_max_install_names
@itemx -image_base
@itemx -init
@itemx -install_name
@itemx -keep_private_externs
@itemx -multi_module
@itemx -multiply_defined
@itemx -multiply_defined_unused
@itemx -noall_load
@itemx -no_dead_strip_inits_and_terms
@itemx -nofixprebinding
@itemx -nomultidefs
@itemx -noprebind
@itemx -noseglinkedit
@itemx -pagezero_size
@itemx -prebind
@itemx -prebind_all_twolevel_modules
@itemx -private_bundle
@itemx -read_only_relocs
@itemx -sectalign
@itemx -sectobjectsymbols
@itemx -whyload
@itemx -seg1addr
@itemx -sectcreate
@itemx -sectobjectsymbols
@itemx -sectorder
@itemx -segaddr
@itemx -segs_read_only_addr
@itemx -segs_read_write_addr
@itemx -seg_addr_table
@itemx -seg_addr_table_filename
@itemx -seglinkedit
@itemx -segprot
@itemx -segs_read_only_addr
@itemx -segs_read_write_addr
@itemx -single_module
@itemx -static
@itemx -sub_library
@itemx -sub_umbrella
@itemx -twolevel_namespace
@itemx -umbrella
@itemx -undefined
@itemx -unexported_symbols_list
@itemx -weak_reference_mismatches
@itemx -whatsloaded

@opindex allowable_client
@opindex client_name
@opindex compatibility_version
@opindex current_version
@opindex dead_strip
@opindex dependency-file
@opindex dylib_file
@opindex dylinker_install_name
@opindex dynamic
@opindex exported_symbols_list
@opindex filelist
@opindex flat_namespace
@opindex force_flat_namespace
@opindex headerpad_max_install_names
@opindex image_base
@opindex init
@opindex install_name
@opindex keep_private_externs
@opindex multi_module
@opindex multiply_defined
@opindex multiply_defined_unused
@opindex noall_load
@opindex no_dead_strip_inits_and_terms
@opindex nofixprebinding
@opindex nomultidefs
@opindex noprebind
@opindex noseglinkedit
@opindex pagezero_size
@opindex prebind
@opindex prebind_all_twolevel_modules
@opindex private_bundle
@opindex read_only_relocs
@opindex sectalign
@opindex sectobjectsymbols
@opindex whyload
@opindex seg1addr
@opindex sectcreate
@opindex sectobjectsymbols
@opindex sectorder
@opindex segaddr
@opindex segs_read_only_addr
@opindex segs_read_write_addr
@opindex seg_addr_table
@opindex seg_addr_table_filename
@opindex seglinkedit
@opindex segprot
@opindex segs_read_only_addr
@opindex segs_read_write_addr
@opindex single_module
@opindex static
@opindex sub_library
@opindex sub_umbrella
@opindex twolevel_namespace
@opindex umbrella
@opindex undefined
@opindex unexported_symbols_list
@opindex weak_reference_mismatches
@opindex whatsloaded

These options are passed to the Darwin linker.  The Darwin linker man page
describes them in detail.
@end table

@c APPLE LOCAL prune man page
@ignore
@node DEC Alpha Options
@subsection DEC Alpha Options

These @samp{-m} options are defined for the DEC Alpha implementations:

@table @gcctabopt
@item -mno-soft-float
@itemx -msoft-float
@opindex mno-soft-float
@opindex msoft-float
Use (do not use) the hardware floating-point instructions for
floating-point operations.  When @option{-msoft-float} is specified,
functions in @file{libgcc.a} will be used to perform floating-point
operations.  Unless they are replaced by routines that emulate the
floating-point operations, or compiled in such a way as to call such
emulations routines, these routines will issue floating-point
operations.   If you are compiling for an Alpha without floating-point
operations, you must ensure that the library is built so as not to call
them.

Note that Alpha implementations without floating-point operations are
required to have floating-point registers.

@item -mfp-reg
@itemx -mno-fp-regs
@opindex mfp-reg
@opindex mno-fp-regs
Generate code that uses (does not use) the floating-point register set.
@option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
register set is not used, floating point operands are passed in integer
registers as if they were integers and floating-point results are passed
in @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
so any function with a floating-point argument or return value called by code
compiled with @option{-mno-fp-regs} must also be compiled with that
option.

A typical use of this option is building a kernel that does not use,
and hence need not save and restore, any floating-point registers.

@item -mieee
@opindex mieee
The Alpha architecture implements floating-point hardware optimized for
maximum performance.  It is mostly compliant with the IEEE floating
point standard.  However, for full compliance, software assistance is
required.  This option generates code fully IEEE compliant code
@emph{except} that the @var{inexact-flag} is not maintained (see below).
If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
defined during compilation.  The resulting code is less efficient but is
able to correctly support denormalized numbers and exceptional IEEE
values such as not-a-number and plus/minus infinity.  Other Alpha
compilers call this option @option{-ieee_with_no_inexact}.

@item -mieee-with-inexact
@opindex mieee-with-inexact
This is like @option{-mieee} except the generated code also maintains
the IEEE @var{inexact-flag}.  Turning on this option causes the
generated code to implement fully-compliant IEEE math.  In addition to
@code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
macro.  On some Alpha implementations the resulting code may execute
significantly slower than the code generated by default.  Since there is
very little code that depends on the @var{inexact-flag}, you should
normally not specify this option.  Other Alpha compilers call this
option @option{-ieee_with_inexact}.

@item -mfp-trap-mode=@var{trap-mode}
@opindex mfp-trap-mode
This option controls what floating-point related traps are enabled.
Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
The trap mode can be set to one of four values:

@table @samp
@item n
This is the default (normal) setting.  The only traps that are enabled
are the ones that cannot be disabled in software (e.g., division by zero
trap).

@item u
In addition to the traps enabled by @samp{n}, underflow traps are enabled
as well.

@item su
Like @samp{u}, but the instructions are marked to be safe for software
completion (see Alpha architecture manual for details).

@item sui
Like @samp{su}, but inexact traps are enabled as well.
@end table

@item -mfp-rounding-mode=@var{rounding-mode}
@opindex mfp-rounding-mode
Selects the IEEE rounding mode.  Other Alpha compilers call this option
@option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
of:

@table @samp
@item n
Normal IEEE rounding mode.  Floating point numbers are rounded towards
the nearest machine number or towards the even machine number in case
of a tie.

@item m
Round towards minus infinity.

@item c
Chopped rounding mode.  Floating point numbers are rounded towards zero.

@item d
Dynamic rounding mode.  A field in the floating point control register
(@var{fpcr}, see Alpha architecture reference manual) controls the
rounding mode in effect.  The C library initializes this register for
rounding towards plus infinity.  Thus, unless your program modifies the
@var{fpcr}, @samp{d} corresponds to round towards plus infinity.
@end table

@item -mtrap-precision=@var{trap-precision}
@opindex mtrap-precision
In the Alpha architecture, floating point traps are imprecise.  This
means without software assistance it is impossible to recover from a
floating trap and program execution normally needs to be terminated.
GCC can generate code that can assist operating system trap handlers
in determining the exact location that caused a floating point trap.
Depending on the requirements of an application, different levels of
precisions can be selected:

@table @samp
@item p
Program precision.  This option is the default and means a trap handler
can only identify which program caused a floating point exception.

@item f
Function precision.  The trap handler can determine the function that
caused a floating point exception.

@item i
Instruction precision.  The trap handler can determine the exact
instruction that caused a floating point exception.
@end table

Other Alpha compilers provide the equivalent options called
@option{-scope_safe} and @option{-resumption_safe}.

@item -mieee-conformant
@opindex mieee-conformant
This option marks the generated code as IEEE conformant.  You must not
use this option unless you also specify @option{-mtrap-precision=i} and either
@option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
is to emit the line @samp{.eflag 48} in the function prologue of the
generated assembly file.  Under DEC Unix, this has the effect that
IEEE-conformant math library routines will be linked in.

@item -mbuild-constants
@opindex mbuild-constants
Normally GCC examines a 32- or 64-bit integer constant to
see if it can construct it from smaller constants in two or three
instructions.  If it cannot, it will output the constant as a literal and
generate code to load it from the data segment at runtime.

Use this option to require GCC to construct @emph{all} integer constants
using code, even if it takes more instructions (the maximum is six).

You would typically use this option to build a shared library dynamic
loader.  Itself a shared library, it must relocate itself in memory
before it can find the variables and constants in its own data segment.

@item -malpha-as
@itemx -mgas
@opindex malpha-as
@opindex mgas
Select whether to generate code to be assembled by the vendor-supplied
assembler (@option{-malpha-as}) or by the GNU assembler @option{-mgas}.

@item -mbwx
@itemx -mno-bwx
@itemx -mcix
@itemx -mno-cix
@itemx -mfix
@itemx -mno-fix
@itemx -mmax
@itemx -mno-max
@opindex mbwx
@opindex mno-bwx
@opindex mcix
@opindex mno-cix
@opindex mfix
@opindex mno-fix
@opindex mmax
@opindex mno-max
Indicate whether GCC should generate code to use the optional BWX,
CIX, FIX and MAX instruction sets.  The default is to use the instruction
sets supported by the CPU type specified via @option{-mcpu=} option or that
of the CPU on which GCC was built if none was specified.

@item -mfloat-vax
@itemx -mfloat-ieee
@opindex mfloat-vax
@opindex mfloat-ieee
Generate code that uses (does not use) VAX F and G floating point
arithmetic instead of IEEE single and double precision.

@item -mexplicit-relocs
@itemx -mno-explicit-relocs
@opindex mexplicit-relocs
@opindex mno-explicit-relocs
Older Alpha assemblers provided no way to generate symbol relocations
except via assembler macros.  Use of these macros does not allow
optimal instruction scheduling.  GNU binutils as of version 2.12
supports a new syntax that allows the compiler to explicitly mark
which relocations should apply to which instructions.  This option
is mostly useful for debugging, as GCC detects the capabilities of
the assembler when it is built and sets the default accordingly.

@item -msmall-data
@itemx -mlarge-data
@opindex msmall-data
@opindex mlarge-data
When @option{-mexplicit-relocs} is in effect, static data is
accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
(the @code{.sdata} and @code{.sbss} sections) and are accessed via
16-bit relocations off of the @code{$gp} register.  This limits the
size of the small data area to 64KB, but allows the variables to be
directly accessed via a single instruction.

The default is @option{-mlarge-data}.  With this option the data area
is limited to just below 2GB@.  Programs that require more than 2GB of
data must use @code{malloc} or @code{mmap} to allocate the data in the
heap instead of in the program's data segment.

When generating code for shared libraries, @option{-fpic} implies
@option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.

@item -msmall-text
@itemx -mlarge-text
@opindex msmall-text
@opindex mlarge-text
When @option{-msmall-text} is used, the compiler assumes that the
code of the entire program (or shared library) fits in 4MB, and is
thus reachable with a branch instruction.  When @option{-msmall-data}
is used, the compiler can assume that all local symbols share the
same @code{$gp} value, and thus reduce the number of instructions
required for a function call from 4 to 1.

The default is @option{-mlarge-text}.

@item -mcpu=@var{cpu_type}
@opindex mcpu
Set the instruction set and instruction scheduling parameters for
machine type @var{cpu_type}.  You can specify either the @samp{EV}
style name or the corresponding chip number.  GCC supports scheduling
parameters for the EV4, EV5 and EV6 family of processors and will
choose the default values for the instruction set from the processor
you specify.  If you do not specify a processor type, GCC will default
to the processor on which the compiler was built.

Supported values for @var{cpu_type} are

@table @samp
@item ev4
@itemx ev45
@itemx 21064
Schedules as an EV4 and has no instruction set extensions.

@item ev5
@itemx 21164
Schedules as an EV5 and has no instruction set extensions.

@item ev56
@itemx 21164a
Schedules as an EV5 and supports the BWX extension.

@item pca56
@itemx 21164pc
@itemx 21164PC
Schedules as an EV5 and supports the BWX and MAX extensions.

@item ev6
@itemx 21264
Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.

@item ev67
@itemx 21264a
Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
@end table

@item -mtune=@var{cpu_type}
@opindex mtune
Set only the instruction scheduling parameters for machine type
@var{cpu_type}.  The instruction set is not changed.

@item -mmemory-latency=@var{time}
@opindex mmemory-latency
Sets the latency the scheduler should assume for typical memory
references as seen by the application.  This number is highly
dependent on the memory access patterns used by the application
and the size of the external cache on the machine.

Valid options for @var{time} are

@table @samp
@item @var{number}
A decimal number representing clock cycles.

@item L1
@itemx L2
@itemx L3
@itemx main
The compiler contains estimates of the number of clock cycles for
``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
(also called Dcache, Scache, and Bcache), as well as to main memory.
Note that L3 is only valid for EV5.

@end table
@end table

@node DEC Alpha/VMS Options
@subsection DEC Alpha/VMS Options

These @samp{-m} options are defined for the DEC Alpha/VMS implementations:

@table @gcctabopt
@item -mvms-return-codes
@opindex mvms-return-codes
Return VMS condition codes from main.  The default is to return POSIX
style condition (e.g.@ error) codes.
@end table

@node FRV Options
@subsection FRV Options
@cindex FRV Options

@table @gcctabopt
@item -mgpr-32
@opindex mgpr-32

Only use the first 32 general purpose registers.

@item -mgpr-64
@opindex mgpr-64

Use all 64 general purpose registers.

@item -mfpr-32
@opindex mfpr-32

Use only the first 32 floating point registers.

@item -mfpr-64
@opindex mfpr-64

Use all 64 floating point registers

@item -mhard-float
@opindex mhard-float

Use hardware instructions for floating point operations.

@item -msoft-float
@opindex msoft-float

Use library routines for floating point operations.

@item -malloc-cc
@opindex malloc-cc

Dynamically allocate condition code registers.

@item -mfixed-cc
@opindex mfixed-cc

Do not try to dynamically allocate condition code registers, only
use @code{icc0} and @code{fcc0}.

@item -mdword
@opindex mdword

Change ABI to use double word insns.

@item -mno-dword
@opindex mno-dword

Do not use double word instructions.

@item -mdouble
@opindex mdouble

Use floating point double instructions.

@item -mno-double
@opindex mno-double

Do not use floating point double instructions.

@item -mmedia
@opindex mmedia

Use media instructions.

@item -mno-media
@opindex mno-media

Do not use media instructions.

@item -mmuladd
@opindex mmuladd

Use multiply and add/subtract instructions.

@item -mno-muladd
@opindex mno-muladd

Do not use multiply and add/subtract instructions.

@item -mfdpic
@opindex mfdpic

Select the FDPIC ABI, that uses function descriptors to represent
pointers to functions.  Without any PIC/PIE-related options, it
implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
assumes GOT entries and small data are within a 12-bit range from the
GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
are computed with 32 bits.

@item -minline-plt
@opindex minline-plt

Enable inlining of PLT entries in function calls to functions that are
not known to bind locally.  It has no effect without @option{-mfdpic}.
It's enabled by default if optimizing for speed and compiling for
shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
optimization option such as @option{-O3} or above is present in the
command line.

@item -mTLS
@opindex TLS

Assume a large TLS segment when generating thread-local code.

@item -mtls
@opindex tls

Do not assume a large TLS segment when generating thread-local code.

@item -mgprel-ro
@opindex mgprel-ro

Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
that is known to be in read-only sections.  It's enabled by default,
except for @option{-fpic} or @option{-fpie}: even though it may help
make the global offset table smaller, it trades 1 instruction for 4.
With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
one of which may be shared by multiple symbols, and it avoids the need
for a GOT entry for the referenced symbol, so it's more likely to be a
win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.

@item -multilib-library-pic
@opindex multilib-library-pic

Link with the (library, not FD) pic libraries.  It's implied by
@option{-mlibrary-pic}, as well as by @option{-fPIC} and
@option{-fpic} without @option{-mfdpic}.  You should never have to use
it explicitly.

@item -mlinked-fp
@opindex mlinked-fp

Follow the EABI requirement of always creating a frame pointer whenever
a stack frame is allocated.  This option is enabled by default and can
be disabled with @option{-mno-linked-fp}.

@item -mlong-calls
@opindex mlong-calls

Use indirect addressing to call functions outside the current
compilation unit.  This allows the functions to be placed anywhere
within the 32-bit address space.

@item -malign-labels
@opindex malign-labels

Try to align labels to an 8-byte boundary by inserting nops into the
previous packet.  This option only has an effect when VLIW packing
is enabled.  It doesn't create new packets; it merely adds nops to
existing ones.

@item -mlibrary-pic
@opindex mlibrary-pic

Generate position-independent EABI code.

@item -macc-4
@opindex macc-4

Use only the first four media accumulator registers.

@item -macc-8
@opindex macc-8

Use all eight media accumulator registers.

@item -mpack
@opindex mpack

Pack VLIW instructions.

@item -mno-pack
@opindex mno-pack

Do not pack VLIW instructions.

@item -mno-eflags
@opindex mno-eflags

Do not mark ABI switches in e_flags.

@item -mcond-move
@opindex mcond-move

Enable the use of conditional-move instructions (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-cond-move
@opindex mno-cond-move

Disable the use of conditional-move instructions.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mscc
@opindex mscc

Enable the use of conditional set instructions (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-scc
@opindex mno-scc

Disable the use of conditional set instructions.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mcond-exec
@opindex mcond-exec

Enable the use of conditional execution (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-cond-exec
@opindex mno-cond-exec

Disable the use of conditional execution.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mvliw-branch
@opindex mvliw-branch

Run a pass to pack branches into VLIW instructions (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-vliw-branch
@opindex mno-vliw-branch

Do not run a pass to pack branches into VLIW instructions.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mmulti-cond-exec
@opindex mmulti-cond-exec

Enable optimization of @code{&&} and @code{||} in conditional execution
(default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-multi-cond-exec
@opindex mno-multi-cond-exec

Disable optimization of @code{&&} and @code{||} in conditional execution.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mnested-cond-exec
@opindex mnested-cond-exec

Enable nested conditional execution optimizations (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-nested-cond-exec
@opindex mno-nested-cond-exec

Disable nested conditional execution optimizations.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -moptimize-membar
@opindex moptimize-membar

This switch removes redundant @code{membar} instructions from the
compiler generated code.  It is enabled by default.

@item -mno-optimize-membar
@opindex mno-optimize-membar

This switch disables the automatic removal of redundant @code{membar}
instructions from the generated code.

@item -mtomcat-stats
@opindex mtomcat-stats

Cause gas to print out tomcat statistics.

@item -mcpu=@var{cpu}
@opindex mcpu

Select the processor type for which to generate code.  Possible values are
@samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450},
@samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}.

@end table

@node GNU/Linux Options
@subsection GNU/Linux Options

These @samp{-m} options are defined for GNU/Linux targets:

@table @gcctabopt
@item -mglibc
@opindex mglibc
Use the GNU C library instead of uClibc.  This is the default except
on @samp{*-*-linux-*uclibc*} targets.

@item -muclibc
@opindex muclibc
Use uClibc instead of the GNU C library.  This is the default on
@samp{*-*-linux-*uclibc*} targets.
@end table

@node H8/300 Options
@subsection H8/300 Options

These @samp{-m} options are defined for the H8/300 implementations:

@table @gcctabopt
@item -mrelax
@opindex mrelax
Shorten some address references at link time, when possible; uses the
linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
ld, Using ld}, for a fuller description.

@item -mh
@opindex mh
Generate code for the H8/300H@.

@item -ms
@opindex ms
Generate code for the H8S@.

@item -mn
@opindex mn
Generate code for the H8S and H8/300H in the normal mode.  This switch
must be used either with @option{-mh} or @option{-ms}.

@item -ms2600
@opindex ms2600
Generate code for the H8S/2600.  This switch must be used with @option{-ms}.

@item -mint32
@opindex mint32
Make @code{int} data 32 bits by default.

@item -malign-300
@opindex malign-300
On the H8/300H and H8S, use the same alignment rules as for the H8/300.
The default for the H8/300H and H8S is to align longs and floats on 4
byte boundaries.
@option{-malign-300} causes them to be aligned on 2 byte boundaries.
This option has no effect on the H8/300.
@end table

@node HPPA Options
@subsection HPPA Options
@cindex HPPA Options

These @samp{-m} options are defined for the HPPA family of computers:

@table @gcctabopt
@item -march=@var{architecture-type}
@opindex march
Generate code for the specified architecture.  The choices for
@var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
@file{/usr/lib/sched.models} on an HP-UX system to determine the proper
architecture option for your machine.  Code compiled for lower numbered
architectures will run on higher numbered architectures, but not the
other way around.

@item -mpa-risc-1-0
@itemx -mpa-risc-1-1
@itemx -mpa-risc-2-0
@opindex mpa-risc-1-0
@opindex mpa-risc-1-1
@opindex mpa-risc-2-0
Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.

@item -mbig-switch
@opindex mbig-switch
Generate code suitable for big switch tables.  Use this option only if
the assembler/linker complain about out of range branches within a switch
table.

@item -mjump-in-delay
@opindex mjump-in-delay
Fill delay slots of function calls with unconditional jump instructions
by modifying the return pointer for the function call to be the target
of the conditional jump.

@item -mdisable-fpregs
@opindex mdisable-fpregs
Prevent floating point registers from being used in any manner.  This is
necessary for compiling kernels which perform lazy context switching of
floating point registers.  If you use this option and attempt to perform
floating point operations, the compiler will abort.

@item -mdisable-indexing
@opindex mdisable-indexing
Prevent the compiler from using indexing address modes.  This avoids some
rather obscure problems when compiling MIG generated code under MACH@.

@item -mno-space-regs
@opindex mno-space-regs
Generate code that assumes the target has no space registers.  This allows
GCC to generate faster indirect calls and use unscaled index address modes.

Such code is suitable for level 0 PA systems and kernels.

@item -mfast-indirect-calls
@opindex mfast-indirect-calls
Generate code that assumes calls never cross space boundaries.  This
allows GCC to emit code which performs faster indirect calls.

This option will not work in the presence of shared libraries or nested
functions.

@item -mfixed-range=@var{register-range}
@opindex mfixed-range
Generate code treating the given register range as fixed registers.
A fixed register is one that the register allocator can not use.  This is
useful when compiling kernel code.  A register range is specified as
two registers separated by a dash.  Multiple register ranges can be
specified separated by a comma.

@item -mlong-load-store
@opindex mlong-load-store
Generate 3-instruction load and store sequences as sometimes required by
the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
the HP compilers.

@item -mportable-runtime
@opindex mportable-runtime
Use the portable calling conventions proposed by HP for ELF systems.

@item -mgas
@opindex mgas
Enable the use of assembler directives only GAS understands.

@item -mschedule=@var{cpu-type}
@opindex mschedule
Schedule code according to the constraints for the machine type
@var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
@samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
to @file{/usr/lib/sched.models} on an HP-UX system to determine the
proper scheduling option for your machine.  The default scheduling is
@samp{8000}.

@item -mlinker-opt
@opindex mlinker-opt
Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
linkers in which they give bogus error messages when linking some programs.

@item -msoft-float
@opindex msoft-float
Generate output containing library calls for floating point.
@strong{Warning:} the requisite libraries are not available for all HPPA
targets.  Normally the facilities of the machine's usual C compiler are
used, but this cannot be done directly in cross-compilation.  You must make
your own arrangements to provide suitable library functions for
cross-compilation.  The embedded target @samp{hppa1.1-*-pro}
does provide software floating point support.

@option{-msoft-float} changes the calling convention in the output file;
therefore, it is only useful if you compile @emph{all} of a program with
this option.  In particular, you need to compile @file{libgcc.a}, the
library that comes with GCC, with @option{-msoft-float} in order for
this to work.

@item -msio
@opindex msio
Generate the predefine, @code{_SIO}, for server IO@.  The default is
@option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
@code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
options are available under HP-UX and HI-UX@.

@item -mgnu-ld
@opindex gnu-ld
Use GNU ld specific options.  This passes @option{-shared} to ld when
building a shared library.  It is the default when GCC is configured,
explicitly or implicitly, with the GNU linker.  This option does not
have any affect on which ld is called, it only changes what parameters
are passed to that ld.  The ld that is called is determined by the
@option{--with-ld} configure option, GCC's program search path, and
finally by the user's @env{PATH}.  The linker used by GCC can be printed
using @samp{which `gcc -print-prog-name=ld`}.  This option is only available
on the 64 bit HP-UX GCC, i.e. configured with @samp{hppa*64*-*-hpux*}.

@item -mhp-ld
@opindex hp-ld
Use HP ld specific options.  This passes @option{-b} to ld when building
a shared library and passes @option{+Accept TypeMismatch} to ld on all
links.  It is the default when GCC is configured, explicitly or
implicitly, with the HP linker.  This option does not have any affect on
which ld is called, it only changes what parameters are passed to that
ld.  The ld that is called is determined by the @option{--with-ld}
configure option, GCC's program search path, and finally by the user's
@env{PATH}.  The linker used by GCC can be printed using @samp{which
`gcc -print-prog-name=ld`}.  This option is only available on the 64 bit
HP-UX GCC, i.e. configured with @samp{hppa*64*-*-hpux*}.

@item -mlong-calls
@opindex mno-long-calls
Generate code that uses long call sequences.  This ensures that a call
is always able to reach linker generated stubs.  The default is to generate
long calls only when the distance from the call site to the beginning
of the function or translation unit, as the case may be, exceeds a
predefined limit set by the branch type being used.  The limits for
normal calls are 7,600,000 and 240,000 bytes, respectively for the
PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
240,000 bytes.

Distances are measured from the beginning of functions when using the
@option{-ffunction-sections} option, or when using the @option{-mgas}
and @option{-mno-portable-runtime} options together under HP-UX with
the SOM linker.

It is normally not desirable to use this option as it will degrade
performance.  However, it may be useful in large applications,
particularly when partial linking is used to build the application.

The types of long calls used depends on the capabilities of the
assembler and linker, and the type of code being generated.  The
impact on systems that support long absolute calls, and long pic
symbol-difference or pc-relative calls should be relatively small.
However, an indirect call is used on 32-bit ELF systems in pic code
and it is quite long.

@item -munix=@var{unix-std}
@opindex march
Generate compiler predefines and select a startfile for the specified
UNIX standard.  The choices for @var{unix-std} are @samp{93}, @samp{95}
and @samp{98}.  @samp{93} is supported on all HP-UX versions.  @samp{95}
is available on HP-UX 10.10 and later.  @samp{98} is available on HP-UX
11.11 and later.  The default values are @samp{93} for HP-UX 10.00,
@samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
and later.

@option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
@option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
@option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
@code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
@code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.

It is @emph{important} to note that this option changes the interfaces
for various library routines.  It also affects the operational behavior
of the C library.  Thus, @emph{extreme} care is needed in using this
option.

Library code that is intended to operate with more than one UNIX
standard must test, set and restore the variable @var{__xpg4_extended_mask}
as appropriate.  Most GNU software doesn't provide this capability.

@item -nolibdld
@opindex nolibdld
Suppress the generation of link options to search libdld.sl when the
@option{-static} option is specified on HP-UX 10 and later.

@item -static
@opindex static
The HP-UX implementation of setlocale in libc has a dependency on
libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
when the @option{-static} option is specified, special link options
are needed to resolve this dependency.

On HP-UX 10 and later, the GCC driver adds the necessary options to
link with libdld.sl when the @option{-static} option is specified.
This causes the resulting binary to be dynamic.  On the 64-bit port,
the linkers generate dynamic binaries by default in any case.  The
@option{-nolibdld} option can be used to prevent the GCC driver from
adding these link options.

@item -threads
@opindex threads
Add support for multithreading with the @dfn{dce thread} library
under HP-UX@.  This option sets flags for both the preprocessor and
linker.
@end table
@c APPLE LOCAL prune man page
@end ignore

@node i386 and x86-64 Options
@subsection Intel 386 and AMD x86-64 Options
@cindex i386 Options
@cindex x86-64 Options
@cindex Intel 386 Options
@cindex AMD x86-64 Options

These @samp{-m} options are defined for the i386 and x86-64 family of
computers:

@table @gcctabopt
@item -mtune=@var{cpu-type}
@opindex mtune
Tune to @var{cpu-type} everything applicable about the generated code, except
for the ABI and the set of available instructions.  The choices for
@var{cpu-type} are:
@table @emph
@item generic
Produce code optimized for the most common IA32/AMD64/EM64T processors.
If you know the CPU on which your code will run, then you should use
the corresponding @option{-mtune} option instead of
@option{-mtune=generic}.  But, if you do not know exactly what CPU users
of your application will have, then you should use this option.

As new processors are deployed in the marketplace, the behavior of this
option will change.  Therefore, if you upgrade to a newer version of
GCC, the code generated option will change to reflect the processors
that were most common when that version of GCC was released.

There is no @option{-march=generic} option because @option{-march}
indicates the instruction set the compiler can use, and there is no
generic instruction set applicable to all processors.  In contrast,
@option{-mtune} indicates the processor (or, in this case, collection of
processors) for which the code is optimized.
@item native
This selects the CPU to tune for at compilation time by determining
the processor type of the compiling machine.  Using @option{-mtune=native}
will produce code optimized for the local machine under the constraints
of the selected instruction set.  Using @option{-march=native} will
enable all instruction subsets supported by the local machine (hence
the result might not run on different machines).
@item i386
Original Intel's i386 CPU@.
@item i486
Intel's i486 CPU@.  (No scheduling is implemented for this chip.)
@item i586, pentium
Intel Pentium CPU with no MMX support.
@item pentium-mmx
Intel PentiumMMX CPU based on Pentium core with MMX instruction set support.
@item pentiumpro
Intel PentiumPro CPU@.
@item i686
Same as @code{generic}, but when used as @code{march} option, PentiumPro
instruction set will be used, so the code will run on all i686 family chips.
@item pentium2
Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support.
@item pentium3, pentium3m
Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set
support.
@item pentium-m
Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set
support.  Used by Centrino notebooks.
@item pentium4, pentium4m
Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support.
@item prescott
Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction
set support.
@item nocona
Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE,
SSE2 and SSE3 instruction set support.
@c APPLE LOCAL begin mainline
@item core2
Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
instruction set support.
@c APPLE LOCAL end mainline
@item k6
AMD K6 CPU with MMX instruction set support.
@item k6-2, k6-3
Improved versions of AMD K6 CPU with MMX and 3dNOW! instruction set support.
@item athlon, athlon-tbird
AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE prefetch instructions
support.
@item athlon-4, athlon-xp, athlon-mp
Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and full SSE
instruction set support.
@item k8, opteron, athlon64, athlon-fx
AMD K8 core based CPUs with x86-64 instruction set support.  (This supersets
MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set extensions.)
@item winchip-c6
IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction
set support.
@item winchip2
IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3dNOW!
instruction set support.
@item c3
Via C3 CPU with MMX and 3dNOW! instruction set support.  (No scheduling is
implemented for this chip.)
@item c3-2
Via C3-2 CPU with MMX and SSE instruction set support.  (No scheduling is
implemented for this chip.)
@end table

While picking a specific @var{cpu-type} will schedule things appropriately
for that particular chip, the compiler will not generate any code that
does not run on the i386 without the @option{-march=@var{cpu-type}} option
being used.

@item -march=@var{cpu-type}
@opindex march
Generate instructions for the machine type @var{cpu-type}.  The choices
for @var{cpu-type} are the same as for @option{-mtune}.  Moreover,
specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}.

@item -mcpu=@var{cpu-type}
@opindex mcpu
A deprecated synonym for @option{-mtune}.

@item -m386
@itemx -m486
@itemx -mpentium
@itemx -mpentiumpro
@opindex m386
@opindex m486
@opindex mpentium
@opindex mpentiumpro
These options are synonyms for @option{-mtune=i386}, @option{-mtune=i486},
@option{-mtune=pentium}, and @option{-mtune=pentiumpro} respectively.
These synonyms are deprecated.

@item -mfpmath=@var{unit}
@opindex march
Generate floating point arithmetics for selected unit @var{unit}.  The choices
for @var{unit} are:

@table @samp
@item 387
Use the standard 387 floating point coprocessor present majority of chips and
emulated otherwise.  Code compiled with this option will run almost everywhere.
The temporary results are computed in 80bit precision instead of precision
specified by the type resulting in slightly different results compared to most
of other chips.  See @option{-ffloat-store} for more detailed description.

This is the default choice for i386 compiler.

@item sse
Use scalar floating point instructions present in the SSE instruction set.
This instruction set is supported by Pentium3 and newer chips, in the AMD line
by Athlon-4, Athlon-xp and Athlon-mp chips.  The earlier version of SSE
instruction set supports only single precision arithmetics, thus the double and
extended precision arithmetics is still done using 387.  Later version, present
only in Pentium4 and the future AMD x86-64 chips supports double precision
arithmetics too.

For the i386 compiler, you need to use @option{-march=@var{cpu-type}}, @option{-msse}
or @option{-msse2} switches to enable SSE extensions and make this option
effective.  For the x86-64 compiler, these extensions are enabled by default.

The resulting code should be considerably faster in the majority of cases and avoid
the numerical instability problems of 387 code, but may break some existing
code that expects temporaries to be 80bit.

This is the default choice for the x86-64 compiler.

@item sse,387
Attempt to utilize both instruction sets at once.  This effectively double the
amount of available registers and on chips with separate execution units for
387 and SSE the execution resources too.  Use this option with care, as it is
still experimental, because the GCC register allocator does not model separate
functional units well resulting in instable performance.
@end table

@item -masm=@var{dialect}
@opindex masm=@var{dialect}
Output asm instructions using selected @var{dialect}.  Supported
choices are @samp{intel} or @samp{att} (the default one).  Darwin does
not support @samp{intel}.

@item -mieee-fp
@itemx -mno-ieee-fp
@opindex mieee-fp
@opindex mno-ieee-fp
Control whether or not the compiler uses IEEE floating point
comparisons.  These handle correctly the case where the result of a
comparison is unordered.

@item -msoft-float
@opindex msoft-float
Generate output containing library calls for floating point.
@strong{Warning:} the requisite libraries are not part of GCC@.
Normally the facilities of the machine's usual C compiler are used, but
this can't be done directly in cross-compilation.  You must make your
own arrangements to provide suitable library functions for
cross-compilation.

On machines where a function returns floating point results in the 80387
register stack, some floating point opcodes may be emitted even if
@option{-msoft-float} is used.

@item -mno-fp-ret-in-387
@opindex mno-fp-ret-in-387
Do not use the FPU registers for return values of functions.

The usual calling convention has functions return values of types
@code{float} and @code{double} in an FPU register, even if there
is no FPU@.  The idea is that the operating system should emulate
an FPU@.

The option @option{-mno-fp-ret-in-387} causes such values to be returned
in ordinary CPU registers instead.

@item -mno-fancy-math-387
@opindex mno-fancy-math-387
Some 387 emulators do not support the @code{sin}, @code{cos} and
@code{sqrt} instructions for the 387.  Specify this option to avoid
generating those instructions.  This option is the default on FreeBSD,
OpenBSD and NetBSD@.  This option is overridden when @option{-march}
indicates that the target cpu will always have an FPU and so the
instruction will not need emulation.  As of revision 2.6.1, these
instructions are not generated unless you also use the
@option{-funsafe-math-optimizations} switch.

@item -malign-double
@itemx -mno-align-double
@opindex malign-double
@opindex mno-align-double
Control whether GCC aligns @code{double}, @code{long double}, and
@code{long long} variables on a two word boundary or a one word
boundary.  Aligning @code{double} variables on a two word boundary will
produce code that runs somewhat faster on a @samp{Pentium} at the
expense of more memory.

On x86-64, @option{-malign-double} is enabled by default.

@strong{Warning:} if you use the @option{-malign-double} switch,
structures containing the above types will be aligned differently than
the published application binary interface specifications for the 386
and will not be binary compatible with structures in code compiled
without that switch.

@item -m96bit-long-double
@itemx -m128bit-long-double
@opindex m96bit-long-double
@opindex m128bit-long-double
These switches control the size of @code{long double} type.  The i386
application binary interface specifies the size to be 96 bits,
so @option{-m96bit-long-double} is the default in 32 bit mode.

Modern architectures (Pentium and newer) would prefer @code{long double}
to be aligned to an 8 or 16 byte boundary.  In arrays or structures
conforming to the ABI, this would not be possible.  So specifying a
@option{-m128bit-long-double} will align @code{long double}
to a 16 byte boundary by padding the @code{long double} with an additional
32 bit zero.

In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
its ABI specifies that @code{long double} is to be aligned on 16 byte boundary.

Notice that neither of these options enable any extra precision over the x87
standard of 80 bits for a @code{long double}.

@strong{Warning:} if you override the default value for your target ABI, the
structures and arrays containing @code{long double} variables will change
their size as well as function calling convention for function taking
@code{long double} will be modified.  Hence they will not be binary
compatible with arrays or structures in code compiled without that switch.

@item -mmlarge-data-threshold=@var{number}
@opindex mlarge-data-threshold=@var{number}
When @option{-mcmodel=medium} is specified, the data greater than
@var{threshold} are placed in large data section.  This value must be the
same across all object linked into the binary and defaults to 65535.

@item -msvr3-shlib
@itemx -mno-svr3-shlib
@opindex msvr3-shlib
@opindex mno-svr3-shlib
Control whether GCC places uninitialized local variables into the
@code{bss} or @code{data} segments.  @option{-msvr3-shlib} places them
into @code{bss}.  These options are meaningful only on System V Release 3.

@item -mrtd
@opindex mrtd
Use a different function-calling convention, in which functions that
take a fixed number of arguments return with the @code{ret} @var{num}
instruction, which pops their arguments while returning.  This saves one
instruction in the caller since there is no need to pop the arguments
there.

You can specify that an individual function is called with this calling
sequence with the function attribute @samp{stdcall}.  You can also
override the @option{-mrtd} option by using the function attribute
@samp{cdecl}.  @xref{Function Attributes}.

@strong{Warning:} this calling convention is incompatible with the one
normally used on Unix, so you cannot use it if you need to call
libraries compiled with the Unix compiler.

Also, you must provide function prototypes for all functions that
take variable numbers of arguments (including @code{printf});
otherwise incorrect code will be generated for calls to those
functions.

In addition, seriously incorrect code will result if you call a
function with too many arguments.  (Normally, extra arguments are
harmlessly ignored.)

@item -mregparm=@var{num}
@opindex mregparm
Control how many registers are used to pass integer arguments.  By
default, no registers are used to pass arguments, and at most 3
registers can be used.  You can control this behavior for a specific
function by using the function attribute @samp{regparm}.
@xref{Function Attributes}.

@strong{Warning:} if you use this switch, and
@var{num} is nonzero, then you must build all modules with the same
value, including any libraries.  This includes the system libraries and
startup modules.

@item -msseregparm
@opindex msseregparm
Use SSE register passing conventions for float and double arguments
and return values.  You can control this behavior for a specific
function by using the function attribute @samp{sseregparm}.
@xref{Function Attributes}.

@strong{Warning:} if you use this switch then you must build all
modules with the same value, including any libraries.  This includes
the system libraries and startup modules.

@item -mstackrealign
@opindex mstackrealign
Realign the stack at entry.  On the Intel x86, the
@option{-mstackrealign} option will generate an alternate prologue and
epilogue that realigns the runtime stack.  This supports mixing legacy
codes that keep a 4-byte aligned stack with modern codes that keep a
16-byte stack for SSE compatibility.  The alternate prologue and
epilogue are slower and bigger than the regular ones, and the
alternate prologue requires an extra scratch register; this lowers the
number of registers available if used in conjunction with the
@code{regparm} attribute.  The @option{-mstackrealign} option is
incompatible with the nested function prologue; this is considered a
hard error.  See also the attribute @code{force_align_arg_pointer},
applicable to individual functions.

@item -mpreferred-stack-boundary=@var{num}
@opindex mpreferred-stack-boundary
Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
the default is 4 (16 bytes or 128 bits).

On Pentium and PentiumPro, @code{double} and @code{long double} values
should be aligned to an 8 byte boundary (see @option{-malign-double}) or
suffer significant run time performance penalties.  On Pentium III, the
Streaming SIMD Extension (SSE) data type @code{__m128} may not work
properly if it is not 16 byte aligned.

To ensure proper alignment of this values on the stack, the stack boundary
must be as aligned as that required by any value stored on the stack.
Further, every function must be generated such that it keeps the stack
aligned.  Thus calling a function compiled with a higher preferred
stack boundary from a function compiled with a lower preferred stack
boundary will most likely misalign the stack.  It is recommended that
libraries that use callbacks always use the default setting.

This extra alignment does consume extra stack space, and generally
increases code size.  Code that is sensitive to stack space usage, such
as embedded systems and operating system kernels, may want to reduce the
preferred alignment to @option{-mpreferred-stack-boundary=2}.

@item -mmmx
@itemx -mno-mmx
@item -msse
@itemx -mno-sse
@item -msse2
@itemx -mno-sse2
@item -msse3
@itemx -mno-sse3
@c APPLE LOCAL begin mainline
@item -mssse3
@itemx -mno-ssse3
@c APPLE LOCAL end mainline
@c APPLE LOCAL begin 5612787 sse4
@item -msse4.1
@itemx -mno-sse4.1
@item -msse4.2
@itemx -mno-sse4.2
@item -msse4
@itemx -mno-sse4
@item -msse4a
@item -mno-sse4a
@c APPLE LOCAL end 5612787 sse4
@item -m3dnow
@itemx -mno-3dnow
@opindex mmmx
@opindex mno-mmx
@opindex msse
@opindex mno-sse
@opindex m3dnow
@opindex mno-3dnow
These switches enable or disable the use of instructions in the MMX,
@c APPLE LOCAL begin 5612787 sse4
SSE, SSE2, SSE3, SSSE3, 3Dnow, SSE4.1, SSE4.2, and SSE4A extended
instruction sets.  These extensions are
@c APPLE LOCAL end 5612787 sse4
also available as built-in functions: see @ref{X86 Built-in Functions},
for details of the functions enabled and disabled by these switches.

To have SSE/SSE2 instructions generated automatically from floating-point
code (as opposed to 387 instructions), see @option{-mfpmath=sse}.

These options will enable GCC to use these extended instructions in
generated code, even without @option{-mfpmath=sse}.  Applications which
perform runtime CPU detection must compile separate files for each
supported architecture, using the appropriate flags.  In particular,
the file containing the CPU detection code should be compiled without
these options.

@item -mpush-args
@itemx -mno-push-args
@opindex mpush-args
@opindex mno-push-args
Use PUSH operations to store outgoing parameters.  This method is shorter
and usually equally fast as method using SUB/MOV operations and is enabled
by default.  In some cases disabling it may improve performance because of
improved scheduling and reduced dependencies.

@item -maccumulate-outgoing-args
@opindex maccumulate-outgoing-args
If enabled, the maximum amount of space required for outgoing arguments will be
computed in the function prologue.  This is faster on most modern CPUs
because of reduced dependencies, improved scheduling and reduced stack usage
when preferred stack boundary is not equal to 2.  The drawback is a notable
increase in code size.  This switch implies @option{-mno-push-args}.

@item -mthreads
@opindex mthreads
Support thread-safe exception handling on @samp{Mingw32}.  Code that relies
on thread-safe exception handling must compile and link all code with the
@option{-mthreads} option.  When compiling, @option{-mthreads} defines
@option{-D_MT}; when linking, it links in a special thread helper library
@option{-lmingwthrd} which cleans up per thread exception handling data.

@item -mno-align-stringops
@opindex mno-align-stringops
Do not align destination of inlined string operations.  This switch reduces
code size and improves performance in case the destination is already aligned,
but GCC doesn't know about it.

@item -minline-all-stringops
@opindex minline-all-stringops
By default GCC inlines string operations only when destination is known to be
aligned at least to 4 byte boundary.  This enables more inlining, increase code
size, but may improve performance of code that depends on fast memcpy, strlen
and memset for short lengths.

@item -momit-leaf-frame-pointer
@opindex momit-leaf-frame-pointer
Don't keep the frame pointer in a register for leaf functions.  This
avoids the instructions to save, set up and restore frame pointers and
makes an extra register available in leaf functions.  The option
@option{-fomit-frame-pointer} removes the frame pointer for all functions
which might make debugging harder.

@item -mtls-direct-seg-refs
@itemx -mno-tls-direct-seg-refs
@opindex mtls-direct-seg-refs
Controls whether TLS variables may be accessed with offsets from the
TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
or whether the thread base pointer must be added.  Whether or not this
is legal depends on the operating system, and whether it maps the
segment to cover the entire TLS area.

For systems that use GNU libc, the default is on.
@end table

These @samp{-m} switches are supported in addition to the above
on AMD x86-64 processors in 64-bit environments.

@table @gcctabopt
@item -m32
@itemx -m64
@opindex m32
@opindex m64
Generate code for a 32-bit or 64-bit environment.
The 32-bit environment sets int, long and pointer to 32 bits and
generates code that runs on any i386 system.
The 64-bit environment sets int to 32 bits and long and pointer
to 64 bits and generates code for AMD's x86-64 architecture. For
darwin only the -m64 option turns off the @option{-fno-pic} and
@option{-mdynamic-no-pic} options.

@item -mno-red-zone
@opindex no-red-zone
Do not use a so called red zone for x86-64 code.  The red zone is mandated
by the x86-64 ABI, it is a 128-byte area beyond the location of the
stack pointer that will not be modified by signal or interrupt handlers
and therefore can be used for temporary data without adjusting the stack
pointer.  The flag @option{-mno-red-zone} disables this red zone.

@item -mcmodel=small
@opindex mcmodel=small
Generate code for the small code model: the program and its symbols must
be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
Programs can be statically or dynamically linked.  This is the default
code model.

@item -mcmodel=kernel
@opindex mcmodel=kernel
Generate code for the kernel code model.  The kernel runs in the
negative 2 GB of the address space.
This model has to be used for Linux kernel code.

@item -mcmodel=medium
@opindex mcmodel=medium
Generate code for the medium model: The program is linked in the lower 2
GB of the address space but symbols can be located anywhere in the
address space.  Programs can be statically or dynamically linked, but
building of shared libraries are not supported with the medium model.

@item -mcmodel=large
@opindex mcmodel=large
Generate code for the large model: This model makes no assumptions
about addresses and sizes of sections.  Currently GCC does not implement
this model.

@c APPLE LOCAL begin 5946347 ms_struct support
@item -mms-bitfields
@opindex mms-bitfields
Set the default structure layout to be compatible with the Microsoft
compiler standard. This is equivalent to adding an @code{ms_struct}
attribute to each structure and union tag definition. The default is
@option{mno-ms-bitfields}.
@c APPLE LOCAL end 5946347 ms_struct support

@end table

@c APPLE LOCAL prune man page
@ignore
@node IA-64 Options
@subsection IA-64 Options
@cindex IA-64 Options

These are the @samp{-m} options defined for the Intel IA-64 architecture.

@table @gcctabopt
@item -mbig-endian
@opindex mbig-endian
Generate code for a big endian target.  This is the default for HP-UX@.

@item -mlittle-endian
@opindex mlittle-endian
Generate code for a little endian target.  This is the default for AIX5
and GNU/Linux.

@item -mgnu-as
@itemx -mno-gnu-as
@opindex mgnu-as
@opindex mno-gnu-as
Generate (or don't) code for the GNU assembler.  This is the default.
@c Also, this is the default if the configure option @option{--with-gnu-as}
@c is used.

@item -mgnu-ld
@itemx -mno-gnu-ld
@opindex mgnu-ld
@opindex mno-gnu-ld
Generate (or don't) code for the GNU linker.  This is the default.
@c Also, this is the default if the configure option @option{--with-gnu-ld}
@c is used.

@item -mno-pic
@opindex mno-pic
Generate code that does not use a global pointer register.  The result
is not position independent code, and violates the IA-64 ABI@.

@item -mvolatile-asm-stop
@itemx -mno-volatile-asm-stop
@opindex mvolatile-asm-stop
@opindex mno-volatile-asm-stop
Generate (or don't) a stop bit immediately before and after volatile asm
statements.

@item -mregister-names
@itemx -mno-register-names
@opindex mregister-names
@opindex mno-register-names
Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
the stacked registers.  This may make assembler output more readable.

@item -mno-sdata
@itemx -msdata
@opindex mno-sdata
@opindex msdata
Disable (or enable) optimizations that use the small data section.  This may
be useful for working around optimizer bugs.

@item -mconstant-gp
@opindex mconstant-gp
Generate code that uses a single constant global pointer value.  This is
useful when compiling kernel code.

@item -mauto-pic
@opindex mauto-pic
Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
This is useful when compiling firmware code.

@item -minline-float-divide-min-latency
@opindex minline-float-divide-min-latency
Generate code for inline divides of floating point values
using the minimum latency algorithm.

@item -minline-float-divide-max-throughput
@opindex minline-float-divide-max-throughput
Generate code for inline divides of floating point values
using the maximum throughput algorithm.

@item -minline-int-divide-min-latency
@opindex minline-int-divide-min-latency
Generate code for inline divides of integer values
using the minimum latency algorithm.

@item -minline-int-divide-max-throughput
@opindex minline-int-divide-max-throughput
Generate code for inline divides of integer values
using the maximum throughput algorithm.

@item -minline-sqrt-min-latency
@opindex minline-sqrt-min-latency
Generate code for inline square roots
using the minimum latency algorithm.

@item -minline-sqrt-max-throughput
@opindex minline-sqrt-max-throughput
Generate code for inline square roots
using the maximum throughput algorithm.

@item -mno-dwarf2-asm
@itemx -mdwarf2-asm
@opindex mno-dwarf2-asm
@opindex mdwarf2-asm
Don't (or do) generate assembler code for the DWARF2 line number debugging
info.  This may be useful when not using the GNU assembler.

@item -mearly-stop-bits
@itemx -mno-early-stop-bits
@opindex mearly-stop-bits
@opindex mno-early-stop-bits
Allow stop bits to be placed earlier than immediately preceding the
instruction that triggered the stop bit.  This can improve instruction
scheduling, but does not always do so.

@item -mfixed-range=@var{register-range}
@opindex mfixed-range
Generate code treating the given register range as fixed registers.
A fixed register is one that the register allocator can not use.  This is
useful when compiling kernel code.  A register range is specified as
two registers separated by a dash.  Multiple register ranges can be
specified separated by a comma.

@item -mtls-size=@var{tls-size}
@opindex mtls-size
Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
64.

@item -mtune=@var{cpu-type}
@opindex mtune
Tune the instruction scheduling for a particular CPU, Valid values are
itanium, itanium1, merced, itanium2, and mckinley.

@item -mt
@itemx -pthread
@opindex mt
@opindex pthread
Add support for multithreading using the POSIX threads library.  This
option sets flags for both the preprocessor and linker.  It does
not affect the thread safety of object code produced by the compiler or
that of libraries supplied with it.  These are HP-UX specific flags.

@item -milp32
@itemx -mlp64
@opindex milp32
@opindex mlp64
Generate code for a 32-bit or 64-bit environment.
The 32-bit environment sets int, long and pointer to 32 bits.
The 64-bit environment sets int to 32 bits and long and pointer
to 64 bits.  These are HP-UX specific flags.

@item -mno-sched-br-data-spec
@itemx -msched-br-data-spec
@opindex mno-sched-br-data-spec
@opindex msched-br-data-spec
(Dis/En)able data speculative scheduling before reload.
This will result in generation of the ld.a instructions and
the corresponding check instructions (ld.c / chk.a).
The default is 'disable'.

@item -msched-ar-data-spec
@itemx -mno-sched-ar-data-spec
@opindex msched-ar-data-spec
@opindex mno-sched-ar-data-spec
(En/Dis)able data speculative scheduling after reload.
This will result in generation of the ld.a instructions and
the corresponding check instructions (ld.c / chk.a).
The default is 'enable'.

@item -mno-sched-control-spec
@itemx -msched-control-spec
@opindex mno-sched-control-spec
@opindex msched-control-spec
(Dis/En)able control speculative scheduling.  This feature is
available only during region scheduling (i.e. before reload).
This will result in generation of the ld.s instructions and
the corresponding check instructions chk.s .
The default is 'disable'.

@item -msched-br-in-data-spec
@itemx -mno-sched-br-in-data-spec
@opindex msched-br-in-data-spec
@opindex mno-sched-br-in-data-spec
(En/Dis)able speculative scheduling of the instructions that
are dependent on the data speculative loads before reload.
This is effective only with @option{-msched-br-data-spec} enabled.
The default is 'enable'.

@item -msched-ar-in-data-spec
@itemx -mno-sched-ar-in-data-spec
@opindex msched-ar-in-data-spec
@opindex mno-sched-ar-in-data-spec
(En/Dis)able speculative scheduling of the instructions that
are dependent on the data speculative loads after reload.
This is effective only with @option{-msched-ar-data-spec} enabled.
The default is 'enable'.

@item -msched-in-control-spec
@itemx -mno-sched-in-control-spec
@opindex msched-in-control-spec
@opindex mno-sched-in-control-spec
(En/Dis)able speculative scheduling of the instructions that
are dependent on the control speculative loads.
This is effective only with @option{-msched-control-spec} enabled.
The default is 'enable'.

@item -msched-ldc
@itemx -mno-sched-ldc
@opindex msched-ldc
@opindex mno-sched-ldc
(En/Dis)able use of simple data speculation checks ld.c .
If disabled, only chk.a instructions will be emitted to check
data speculative loads.
The default is 'enable'.

@item -mno-sched-control-ldc
@itemx -msched-control-ldc
@opindex mno-sched-control-ldc
@opindex msched-control-ldc 
(Dis/En)able use of ld.c instructions to check control speculative loads.
If enabled, in case of control speculative load with no speculatively
scheduled dependent instructions this load will be emitted as ld.sa and
ld.c will be used to check it.
The default is 'disable'.

@item -mno-sched-spec-verbose
@itemx -msched-spec-verbose
@opindex mno-sched-spec-verbose
@opindex msched-spec-verbose
(Dis/En)able printing of the information about speculative motions.

@item -mno-sched-prefer-non-data-spec-insns
@itemx -msched-prefer-non-data-spec-insns
@opindex mno-sched-prefer-non-data-spec-insns
@opindex msched-prefer-non-data-spec-insns
If enabled, data speculative instructions will be chosen for schedule
only if there are no other choices at the moment.  This will make
the use of the data speculation much more conservative.
The default is 'disable'.

@item -mno-sched-prefer-non-control-spec-insns
@itemx -msched-prefer-non-control-spec-insns
@opindex mno-sched-prefer-non-control-spec-insns
@opindex msched-prefer-non-control-spec-insns
If enabled, control speculative instructions will be chosen for schedule
only if there are no other choices at the moment.  This will make
the use of the control speculation much more conservative.
The default is 'disable'.

@item -mno-sched-count-spec-in-critical-path
@itemx -msched-count-spec-in-critical-path
@opindex mno-sched-count-spec-in-critical-path
@opindex msched-count-spec-in-critical-path
If enabled, speculative dependencies will be considered during
computation of the instructions priorities.  This will make the use of the
speculation a bit more conservative.
The default is 'disable'.

@end table

@node M32C Options
@subsection M32C Options
@cindex M32C options

@table @gcctabopt
@item -mcpu=@var{name}
@opindex mcpu=
Select the CPU for which code is generated.  @var{name} may be one of
@samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to
/60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for
the M32C/80 series.

@item -msim
@opindex msim
Specifies that the program will be run on the simulator.  This causes
an alternate runtime library to be linked in which supports, for
example, file I/O.  You must not use this option when generating
programs that will run on real hardware; you must provide your own
runtime library for whatever I/O functions are needed.

@item -memregs=@var{number}
@opindex memregs=
Specifies the number of memory-based pseudo-registers GCC will use
during code generation.  These pseudo-registers will be used like real
registers, so there is a tradeoff between GCC's ability to fit the
code into available registers, and the performance penalty of using
memory instead of registers.  Note that all modules in a program must
be compiled with the same value for this option.  Because of that, you
must not use this option with the default runtime libraries gcc
builds.

@end table

@node M32R/D Options
@subsection M32R/D Options
@cindex M32R/D options

These @option{-m} options are defined for Renesas M32R/D architectures:

@table @gcctabopt
@item -m32r2
@opindex m32r2
Generate code for the M32R/2@.

@item -m32rx
@opindex m32rx
Generate code for the M32R/X@.

@item -m32r
@opindex m32r
Generate code for the M32R@.  This is the default.

@item -mmodel=small
@opindex mmodel=small
Assume all objects live in the lower 16MB of memory (so that their addresses
can be loaded with the @code{ld24} instruction), and assume all subroutines
are reachable with the @code{bl} instruction.
This is the default.

The addressability of a particular object can be set with the
@code{model} attribute.

@item -mmodel=medium
@opindex mmodel=medium
Assume objects may be anywhere in the 32-bit address space (the compiler
will generate @code{seth/add3} instructions to load their addresses), and
assume all subroutines are reachable with the @code{bl} instruction.

@item -mmodel=large
@opindex mmodel=large
Assume objects may be anywhere in the 32-bit address space (the compiler
will generate @code{seth/add3} instructions to load their addresses), and
assume subroutines may not be reachable with the @code{bl} instruction
(the compiler will generate the much slower @code{seth/add3/jl}
instruction sequence).

@item -msdata=none
@opindex msdata=none
Disable use of the small data area.  Variables will be put into
one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
@code{section} attribute has been specified).
This is the default.

The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
Objects may be explicitly put in the small data area with the
@code{section} attribute using one of these sections.

@item -msdata=sdata
@opindex msdata=sdata
Put small global and static data in the small data area, but do not
generate special code to reference them.

@item -msdata=use
@opindex msdata=use
Put small global and static data in the small data area, and generate
special instructions to reference them.

@item -G @var{num}
@opindex G
@cindex smaller data references
Put global and static objects less than or equal to @var{num} bytes
into the small data or bss sections instead of the normal data or bss
sections.  The default value of @var{num} is 8.
The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
for this option to have any effect.

All modules should be compiled with the same @option{-G @var{num}} value.
Compiling with different values of @var{num} may or may not work; if it
doesn't the linker will give an error message---incorrect code will not be
generated.

@item -mdebug
@opindex mdebug
Makes the M32R specific code in the compiler display some statistics
that might help in debugging programs.

@item -malign-loops
@opindex malign-loops
Align all loops to a 32-byte boundary.

@item -mno-align-loops
@opindex mno-align-loops
Do not enforce a 32-byte alignment for loops.  This is the default.

@item -missue-rate=@var{number}
@opindex missue-rate=@var{number}
Issue @var{number} instructions per cycle.  @var{number} can only be 1
or 2.

@item -mbranch-cost=@var{number}
@opindex mbranch-cost=@var{number}
@var{number} can only be 1 or 2.  If it is 1 then branches will be
preferred over conditional code, if it is 2, then the opposite will
apply.

@item -mflush-trap=@var{number}
@opindex mflush-trap=@var{number}
Specifies the trap number to use to flush the cache.  The default is
12.  Valid numbers are between 0 and 15 inclusive.

@item -mno-flush-trap
@opindex mno-flush-trap
Specifies that the cache cannot be flushed by using a trap.

@item -mflush-func=@var{name}
@opindex mflush-func=@var{name}
Specifies the name of the operating system function to call to flush
the cache.  The default is @emph{_flush_cache}, but a function call
will only be used if a trap is not available.

@item -mno-flush-func
@opindex mno-flush-func
Indicates that there is no OS function for flushing the cache.

@end table

@node M680x0 Options
@subsection M680x0 Options
@cindex M680x0 options

These are the @samp{-m} options defined for the 68000 series.  The default
values for these options depends on which style of 68000 was selected when
the compiler was configured; the defaults for the most common choices are
given below.

@table @gcctabopt
@item -m68000
@itemx -mc68000
@opindex m68000
@opindex mc68000
Generate output for a 68000.  This is the default
when the compiler is configured for 68000-based systems.

Use this option for microcontrollers with a 68000 or EC000 core,
including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.

@item -m68020
@itemx -mc68020
@opindex m68020
@opindex mc68020
Generate output for a 68020.  This is the default
when the compiler is configured for 68020-based systems.

@item -m68881
@opindex m68881
Generate output containing 68881 instructions for floating point.
This is the default for most 68020 systems unless @option{--nfp} was
specified when the compiler was configured.

@item -m68030
@opindex m68030
Generate output for a 68030.  This is the default when the compiler is
configured for 68030-based systems.

@item -m68040
@opindex m68040
Generate output for a 68040.  This is the default when the compiler is
configured for 68040-based systems.

This option inhibits the use of 68881/68882 instructions that have to be
emulated by software on the 68040.  Use this option if your 68040 does not
have code to emulate those instructions.

@item -m68060
@opindex m68060
Generate output for a 68060.  This is the default when the compiler is
configured for 68060-based systems.

This option inhibits the use of 68020 and 68881/68882 instructions that
have to be emulated by software on the 68060.  Use this option if your 68060
does not have code to emulate those instructions.

@item -mcpu32
@opindex mcpu32
Generate output for a CPU32.  This is the default
when the compiler is configured for CPU32-based systems.

Use this option for microcontrollers with a
CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
68336, 68340, 68341, 68349 and 68360.

@item -m5200
@opindex m5200
Generate output for a 520X ``coldfire'' family cpu.  This is the default
when the compiler is configured for 520X-based systems.

Use this option for microcontroller with a 5200 core, including
the MCF5202, MCF5203, MCF5204 and MCF5202.

@item -mcfv4e
@opindex mcfv4e
Generate output for a ColdFire V4e family cpu (e.g.@: 547x/548x).
This includes use of hardware floating point instructions.

@item -m68020-40
@opindex m68020-40
Generate output for a 68040, without using any of the new instructions.
This results in code which can run relatively efficiently on either a
68020/68881 or a 68030 or a 68040.  The generated code does use the
68881 instructions that are emulated on the 68040.

@item -m68020-60
@opindex m68020-60
Generate output for a 68060, without using any of the new instructions.
This results in code which can run relatively efficiently on either a
68020/68881 or a 68030 or a 68040.  The generated code does use the
68881 instructions that are emulated on the 68060.

@item -msoft-float
@opindex msoft-float
Generate output containing library calls for floating point.
@strong{Warning:} the requisite libraries are not available for all m68k
targets.  Normally the facilities of the machine's usual C compiler are
used, but this can't be done directly in cross-compilation.  You must
make your own arrangements to provide suitable library functions for
cross-compilation.  The embedded targets @samp{m68k-*-aout} and
@samp{m68k-*-coff} do provide software floating point support.

@item -mshort
@opindex mshort
Consider type @code{int} to be 16 bits wide, like @code{short int}.
Additionally, parameters passed on the stack are also aligned to a
16-bit boundary even on targets whose API mandates promotion to 32-bit.

@item -mnobitfield
@opindex mnobitfield
Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
and @option{-m5200} options imply @w{@option{-mnobitfield}}.

@item -mbitfield
@opindex mbitfield
Do use the bit-field instructions.  The @option{-m68020} option implies
@option{-mbitfield}.  This is the default if you use a configuration
designed for a 68020.

@item -mrtd
@opindex mrtd
Use a different function-calling convention, in which functions
that take a fixed number of arguments return with the @code{rtd}
instruction, which pops their arguments while returning.  This
saves one instruction in the caller since there is no need to pop
the arguments there.

This calling convention is incompatible with the one normally
used on Unix, so you cannot use it if you need to call libraries
compiled with the Unix compiler.

Also, you must provide function prototypes for all functions that
take variable numbers of arguments (including @code{printf});
otherwise incorrect code will be generated for calls to those
functions.

In addition, seriously incorrect code will result if you call a
function with too many arguments.  (Normally, extra arguments are
harmlessly ignored.)

The @code{rtd} instruction is supported by the 68010, 68020, 68030,
68040, 68060 and CPU32 processors, but not by the 68000 or 5200.

@item -malign-int
@itemx -mno-align-int
@opindex malign-int
@opindex mno-align-int
Control whether GCC aligns @code{int}, @code{long}, @code{long long},
@code{float}, @code{double}, and @code{long double} variables on a 32-bit
boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
Aligning variables on 32-bit boundaries produces code that runs somewhat
faster on processors with 32-bit busses at the expense of more memory.

@strong{Warning:} if you use the @option{-malign-int} switch, GCC will
align structures containing the above types  differently than
most published application binary interface specifications for the m68k.

@item -mpcrel
@opindex mpcrel
Use the pc-relative addressing mode of the 68000 directly, instead of
using a global offset table.  At present, this option implies @option{-fpic},
allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
not presently supported with @option{-mpcrel}, though this could be supported for
68020 and higher processors.

@item -mno-strict-align
@itemx -mstrict-align
@opindex mno-strict-align
@opindex mstrict-align
Do not (do) assume that unaligned memory references will be handled by
the system.

@item -msep-data
Generate code that allows the data segment to be located in a different
area of memory from the text segment.  This allows for execute in place in
an environment without virtual memory management.  This option implies
@option{-fPIC}.

@item -mno-sep-data
Generate code that assumes that the data segment follows the text segment.
This is the default.

@item -mid-shared-library
Generate code that supports shared libraries via the library ID method.
This allows for execute in place and shared libraries in an environment
without virtual memory management.  This option implies @option{-fPIC}.

@item -mno-id-shared-library
Generate code that doesn't assume ID based shared libraries are being used.
This is the default.

@item -mshared-library-id=n
Specified the identification number of the ID based shared library being
compiled.  Specifying a value of 0 will generate more compact code, specifying
other values will force the allocation of that number to the current
library but is no more space or time efficient than omitting this option.

@end table

@node M68hc1x Options
@subsection M68hc1x Options
@cindex M68hc1x options

These are the @samp{-m} options defined for the 68hc11 and 68hc12
microcontrollers.  The default values for these options depends on
which style of microcontroller was selected when the compiler was configured;
the defaults for the most common choices are given below.

@table @gcctabopt
@item -m6811
@itemx -m68hc11
@opindex m6811
@opindex m68hc11
Generate output for a 68HC11.  This is the default
when the compiler is configured for 68HC11-based systems.

@item -m6812
@itemx -m68hc12
@opindex m6812
@opindex m68hc12
Generate output for a 68HC12.  This is the default
when the compiler is configured for 68HC12-based systems.

@item -m68S12
@itemx -m68hcs12
@opindex m68S12
@opindex m68hcs12
Generate output for a 68HCS12.

@item -mauto-incdec
@opindex mauto-incdec
Enable the use of 68HC12 pre and post auto-increment and auto-decrement
addressing modes.

@item -minmax
@itemx -nominmax
@opindex minmax
@opindex mnominmax
Enable the use of 68HC12 min and max instructions.

@item -mlong-calls
@itemx -mno-long-calls
@opindex mlong-calls
@opindex mno-long-calls
Treat all calls as being far away (near).  If calls are assumed to be
far away, the compiler will use the @code{call} instruction to
call a function and the @code{rtc} instruction for returning.

@item -mshort
@opindex mshort
Consider type @code{int} to be 16 bits wide, like @code{short int}.

@item -msoft-reg-count=@var{count}
@opindex msoft-reg-count
Specify the number of pseudo-soft registers which are used for the
code generation.  The maximum number is 32.  Using more pseudo-soft
register may or may not result in better code depending on the program.
The default is 4 for 68HC11 and 2 for 68HC12.

@end table

@node MCore Options
@subsection MCore Options
@cindex MCore options

These are the @samp{-m} options defined for the Motorola M*Core
processors.

@table @gcctabopt

@item -mhardlit
@itemx -mno-hardlit
@opindex mhardlit
@opindex mno-hardlit
Inline constants into the code stream if it can be done in two
instructions or less.

@item -mdiv
@itemx -mno-div
@opindex mdiv
@opindex mno-div
Use the divide instruction.  (Enabled by default).

@item -mrelax-immediate
@itemx -mno-relax-immediate
@opindex mrelax-immediate
@opindex mno-relax-immediate
Allow arbitrary sized immediates in bit operations.

@item -mwide-bitfields
@itemx -mno-wide-bitfields
@opindex mwide-bitfields
@opindex mno-wide-bitfields
Always treat bit-fields as int-sized.

@item -m4byte-functions
@itemx -mno-4byte-functions
@opindex m4byte-functions
@opindex mno-4byte-functions
Force all functions to be aligned to a four byte boundary.

@item -mcallgraph-data
@itemx -mno-callgraph-data
@opindex mcallgraph-data
@opindex mno-callgraph-data
Emit callgraph information.

@item -mslow-bytes
@itemx -mno-slow-bytes
@opindex mslow-bytes
@opindex mno-slow-bytes
Prefer word access when reading byte quantities.

@item -mlittle-endian
@itemx -mbig-endian
@opindex mlittle-endian
@opindex mbig-endian
Generate code for a little endian target.

@item -m210
@itemx -m340
@opindex m210
@opindex m340
Generate code for the 210 processor.
@end table

@node MIPS Options
@subsection MIPS Options
@cindex MIPS options

@table @gcctabopt

@item -EB
@opindex EB
Generate big-endian code.

@item -EL
@opindex EL
Generate little-endian code.  This is the default for @samp{mips*el-*-*}
configurations.

@item -march=@var{arch}
@opindex march
Generate code that will run on @var{arch}, which can be the name of a
generic MIPS ISA, or the name of a particular processor.
The ISA names are:
@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
@samp{mips32}, @samp{mips32r2}, and @samp{mips64}.
The processor names are:
@samp{4kc}, @samp{4km}, @samp{4kp},
@samp{5kc}, @samp{5kf},
@samp{20kc},
@samp{24k}, @samp{24kc}, @samp{24kf}, @samp{24kx},
@samp{m4k},
@samp{orion},
@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
@samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000},
@samp{rm7000}, @samp{rm9000},
@samp{sb1},
@samp{sr71000},
@samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
@samp{vr5000}, @samp{vr5400} and @samp{vr5500}.
The special value @samp{from-abi} selects the
most compatible architecture for the selected ABI (that is,
@samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.

In processor names, a final @samp{000} can be abbreviated as @samp{k}
(for example, @samp{-march=r2k}).  Prefixes are optional, and
@samp{vr} may be written @samp{r}.

GCC defines two macros based on the value of this option.  The first
is @samp{_MIPS_ARCH}, which gives the name of target architecture, as
a string.  The second has the form @samp{_MIPS_ARCH_@var{foo}},
where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@.
For example, @samp{-march=r2000} will set @samp{_MIPS_ARCH}
to @samp{"r2000"} and define the macro @samp{_MIPS_ARCH_R2000}.

Note that the @samp{_MIPS_ARCH} macro uses the processor names given
above.  In other words, it will have the full prefix and will not
abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
the macro names the resolved architecture (either @samp{"mips1"} or
@samp{"mips3"}).  It names the default architecture when no
@option{-march} option is given.

@item -mtune=@var{arch}
@opindex mtune
Optimize for @var{arch}.  Among other things, this option controls
the way instructions are scheduled, and the perceived cost of arithmetic
operations.  The list of @var{arch} values is the same as for
@option{-march}.

When this option is not used, GCC will optimize for the processor
specified by @option{-march}.  By using @option{-march} and
@option{-mtune} together, it is possible to generate code that will
run on a family of processors, but optimize the code for one
particular member of that family.

@samp{-mtune} defines the macros @samp{_MIPS_TUNE} and
@samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the
@samp{-march} ones described above.

@item -mips1
@opindex mips1
Equivalent to @samp{-march=mips1}.

@item -mips2
@opindex mips2
Equivalent to @samp{-march=mips2}.

@item -mips3
@opindex mips3
Equivalent to @samp{-march=mips3}.

@item -mips4
@opindex mips4
Equivalent to @samp{-march=mips4}.

@item -mips32
@opindex mips32
Equivalent to @samp{-march=mips32}.

@item -mips32r2
@opindex mips32r2
Equivalent to @samp{-march=mips32r2}.

@item -mips64
@opindex mips64
Equivalent to @samp{-march=mips64}.

@item -mips16
@itemx -mno-mips16
@opindex mips16
@opindex mno-mips16
Generate (do not generate) MIPS16 code.  If GCC is targetting a
MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE@.

@item -mabi=32
@itemx -mabi=o64
@itemx -mabi=n32
@itemx -mabi=64
@itemx -mabi=eabi
@opindex mabi=32
@opindex mabi=o64
@opindex mabi=n32
@opindex mabi=64
@opindex mabi=eabi
Generate code for the given ABI@.

Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
generates 64-bit code when you select a 64-bit architecture, but you
can use @option{-mgp32} to get 32-bit code instead.

For information about the O64 ABI, see
@w{@uref{http://gcc.gnu.org/projects/mipso64-abi.html}}.

@item -mabicalls
@itemx -mno-abicalls
@opindex mabicalls
@opindex mno-abicalls
Generate (do not generate) code that is suitable for SVR4-style
dynamic objects.  @option{-mabicalls} is the default for SVR4-based
systems.

@item -mshared
@itemx -mno-shared
Generate (do not generate) code that is fully position-independent,
and that can therefore be linked into shared libraries.  This option
only affects @option{-mabicalls}.

All @option{-mabicalls} code has traditionally been position-independent,
regardless of options like @option{-fPIC} and @option{-fpic}.  However,
as an extension, the GNU toolchain allows executables to use absolute
accesses for locally-binding symbols.  It can also use shorter GP
initialization sequences and generate direct calls to locally-defined
functions.  This mode is selected by @option{-mno-shared}.

@option{-mno-shared} depends on binutils 2.16 or higher and generates
objects that can only be linked by the GNU linker.  However, the option
does not affect the ABI of the final executable; it only affects the ABI
of relocatable objects.  Using @option{-mno-shared} will generally make
executables both smaller and quicker.

@option{-mshared} is the default.

@item -mxgot
@itemx -mno-xgot
@opindex mxgot
@opindex mno-xgot
Lift (do not lift) the usual restrictions on the size of the global
offset table.

GCC normally uses a single instruction to load values from the GOT@.
While this is relatively efficient, it will only work if the GOT
is smaller than about 64k.  Anything larger will cause the linker
to report an error such as:

@cindex relocation truncated to fit (MIPS)
@smallexample
relocation truncated to fit: R_MIPS_GOT16 foobar
@end smallexample

If this happens, you should recompile your code with @option{-mxgot}.
It should then work with very large GOTs, although it will also be
less efficient, since it will take three instructions to fetch the
value of a global symbol.

Note that some linkers can create multiple GOTs.  If you have such a
linker, you should only need to use @option{-mxgot} when a single object
file accesses more than 64k's worth of GOT entries.  Very few do.

These options have no effect unless GCC is generating position
independent code.

@item -mgp32
@opindex mgp32
Assume that general-purpose registers are 32 bits wide.

@item -mgp64
@opindex mgp64
Assume that general-purpose registers are 64 bits wide.

@item -mfp32
@opindex mfp32
Assume that floating-point registers are 32 bits wide.

@item -mfp64
@opindex mfp64
Assume that floating-point registers are 64 bits wide.

@item -mhard-float
@opindex mhard-float
Use floating-point coprocessor instructions.

@item -msoft-float
@opindex msoft-float
Do not use floating-point coprocessor instructions.  Implement
floating-point calculations using library calls instead.

@item -msingle-float
@opindex msingle-float
Assume that the floating-point coprocessor only supports single-precision
operations.

@itemx -mdouble-float
@opindex mdouble-float
Assume that the floating-point coprocessor supports double-precision
operations.  This is the default.

@itemx -mdsp
@itemx -mno-dsp
@opindex mdsp
@opindex mno-dsp
Use (do not use) the MIPS DSP ASE.  @xref{MIPS DSP Built-in Functions}.

@itemx -mpaired-single
@itemx -mno-paired-single
@opindex mpaired-single
@opindex mno-paired-single
Use (do not use) paired-single floating-point instructions.
@xref{MIPS Paired-Single Support}.  This option can only be used
when generating 64-bit code and requires hardware floating-point
support to be enabled.

@itemx -mips3d
@itemx -mno-mips3d
@opindex mips3d
@opindex mno-mips3d
Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
The option @option{-mips3d} implies @option{-mpaired-single}.

@item -mlong64
@opindex mlong64
Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
an explanation of the default and the way that the pointer size is
determined.

@item -mlong32
@opindex mlong32
Force @code{long}, @code{int}, and pointer types to be 32 bits wide.

The default size of @code{int}s, @code{long}s and pointers depends on
the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
32-bit @code{long}s.  Pointers are the same size as @code{long}s,
or the same size as integer registers, whichever is smaller.

@item -msym32
@itemx -mno-sym32
@opindex msym32
@opindex mno-sym32
Assume (do not assume) that all symbols have 32-bit values, regardless
of the selected ABI@.  This option is useful in combination with
@option{-mabi=64} and @option{-mno-abicalls} because it allows GCC
to generate shorter and faster references to symbolic addresses.

@item -G @var{num}
@opindex G
@cindex smaller data references (MIPS)
@cindex gp-relative references (MIPS)
Put global and static items less than or equal to @var{num} bytes into
the small data or bss section instead of the normal data or bss section.
This allows the data to be accessed using a single instruction.

All modules should be compiled with the same @option{-G @var{num}}
value.

@item -membedded-data
@itemx -mno-embedded-data
@opindex membedded-data
@opindex mno-embedded-data
Allocate variables to the read-only data section first if possible, then
next in the small data section if possible, otherwise in data.  This gives
slightly slower code than the default, but reduces the amount of RAM required
when executing, and thus may be preferred for some embedded systems.

@item -muninit-const-in-rodata
@itemx -mno-uninit-const-in-rodata
@opindex muninit-const-in-rodata
@opindex mno-uninit-const-in-rodata
Put uninitialized @code{const} variables in the read-only data section.
This option is only meaningful in conjunction with @option{-membedded-data}.

@item -msplit-addresses
@itemx -mno-split-addresses
@opindex msplit-addresses
@opindex mno-split-addresses
Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
relocation operators.  This option has been superseded by
@option{-mexplicit-relocs} but is retained for backwards compatibility.

@item -mexplicit-relocs
@itemx -mno-explicit-relocs
@opindex mexplicit-relocs
@opindex mno-explicit-relocs
Use (do not use) assembler relocation operators when dealing with symbolic
addresses.  The alternative, selected by @option{-mno-explicit-relocs},
is to use assembler macros instead.

@option{-mexplicit-relocs} is the default if GCC was configured
to use an assembler that supports relocation operators.

@item -mcheck-zero-division
@itemx -mno-check-zero-division
@opindex mcheck-zero-division
@opindex mno-check-zero-division
Trap (do not trap) on integer division by zero.  The default is
@option{-mcheck-zero-division}.

@item -mdivide-traps
@itemx -mdivide-breaks
@opindex mdivide-traps
@opindex mdivide-breaks
MIPS systems check for division by zero by generating either a
conditional trap or a break instruction.  Using traps results in
smaller code, but is only supported on MIPS II and later.  Also, some
versions of the Linux kernel have a bug that prevents trap from
generating the proper signal (@code{SIGFPE}).  Use @option{-mdivide-traps} to
allow conditional traps on architectures that support them and
@option{-mdivide-breaks} to force the use of breaks.

The default is usually @option{-mdivide-traps}, but this can be
overridden at configure time using @option{--with-divide=breaks}.
Divide-by-zero checks can be completely disabled using
@option{-mno-check-zero-division}.

@item -mmemcpy
@itemx -mno-memcpy
@opindex mmemcpy
@opindex mno-memcpy
Force (do not force) the use of @code{memcpy()} for non-trivial block
moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
most constant-sized copies.

@item -mlong-calls
@itemx -mno-long-calls
@opindex mlong-calls
@opindex mno-long-calls
Disable (do not disable) use of the @code{jal} instruction.  Calling
functions using @code{jal} is more efficient but requires the caller
and callee to be in the same 256 megabyte segment.

This option has no effect on abicalls code.  The default is
@option{-mno-long-calls}.

@item -mmad
@itemx -mno-mad
@opindex mmad
@opindex mno-mad
Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
instructions, as provided by the R4650 ISA@.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Enable (disable) use of the floating point multiply-accumulate
instructions, when they are available.  The default is
@option{-mfused-madd}.

When multiply-accumulate instructions are used, the intermediate
product is calculated to infinite precision and is not subject to
the FCSR Flush to Zero bit.  This may be undesirable in some
circumstances.

@item -nocpp
@opindex nocpp
Tell the MIPS assembler to not run its preprocessor over user
assembler files (with a @samp{.s} suffix) when assembling them.

@item -mfix-r4000
@itemx -mno-fix-r4000
@opindex mfix-r4000
@opindex mno-fix-r4000
Work around certain R4000 CPU errata:
@itemize @minus
@item
A double-word or a variable shift may give an incorrect result if executed
immediately after starting an integer division.
@item
A double-word or a variable shift may give an incorrect result if executed
while an integer multiplication is in progress.
@item
An integer division may give an incorrect result if started in a delay slot
of a taken branch or a jump.
@end itemize

@item -mfix-r4400
@itemx -mno-fix-r4400
@opindex mfix-r4400
@opindex mno-fix-r4400
Work around certain R4400 CPU errata:
@itemize @minus
@item
A double-word or a variable shift may give an incorrect result if executed
immediately after starting an integer division.
@end itemize

@item -mfix-vr4120
@itemx -mno-fix-vr4120
@opindex mfix-vr4120
Work around certain VR4120 errata:
@itemize @minus
@item
@code{dmultu} does not always produce the correct result.
@item
@code{div} and @code{ddiv} do not always produce the correct result if one
of the operands is negative.
@end itemize
The workarounds for the division errata rely on special functions in
@file{libgcc.a}.  At present, these functions are only provided by
the @code{mips64vr*-elf} configurations.

Other VR4120 errata require a nop to be inserted between certain pairs of
instructions.  These errata are handled by the assembler, not by GCC itself.

@item -mfix-vr4130
@opindex mfix-vr4130
Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
workarounds are implemented by the assembler rather than by GCC,
although GCC will avoid using @code{mflo} and @code{mfhi} if the
VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi}
instructions are available instead.

@item -mfix-sb1
@itemx -mno-fix-sb1
@opindex mfix-sb1
Work around certain SB-1 CPU core errata.
(This flag currently works around the SB-1 revision 2
``F1'' and ``F2'' floating point errata.)

@item -mflush-func=@var{func}
@itemx -mno-flush-func
@opindex mflush-func
Specifies the function to call to flush the I and D caches, or to not
call any such function.  If called, the function must take the same
arguments as the common @code{_flush_func()}, that is, the address of the
memory range for which the cache is being flushed, the size of the
memory range, and the number 3 (to flush both caches).  The default
depends on the target GCC was configured for, but commonly is either
@samp{_flush_func} or @samp{__cpu_flush}.

@item -mbranch-likely
@itemx -mno-branch-likely
@opindex mbranch-likely
@opindex mno-branch-likely
Enable or disable use of Branch Likely instructions, regardless of the
default for the selected architecture.  By default, Branch Likely
instructions may be generated if they are supported by the selected
architecture.  An exception is for the MIPS32 and MIPS64 architectures
and processors which implement those architectures; for those, Branch
Likely instructions will not be generated by default because the MIPS32
and MIPS64 architectures specifically deprecate their use.

@item -mfp-exceptions
@itemx -mno-fp-exceptions
@opindex mfp-exceptions
Specifies whether FP exceptions are enabled.  This affects how we schedule
FP instructions for some processors.  The default is that FP exceptions are
enabled.

For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
64-bit code, then we can use both FP pipes.  Otherwise, we can only use one
FP pipe.

@item -mvr4130-align
@itemx -mno-vr4130-align
@opindex mvr4130-align
The VR4130 pipeline is two-way superscalar, but can only issue two
instructions together if the first one is 8-byte aligned.  When this
option is enabled, GCC will align pairs of instructions that it
thinks should execute in parallel.

This option only has an effect when optimizing for the VR4130.
It normally makes code faster, but at the expense of making it bigger.
It is enabled by default at optimization level @option{-O3}.
@end table

@node MMIX Options
@subsection MMIX Options
@cindex MMIX Options

These options are defined for the MMIX:

@table @gcctabopt
@item -mlibfuncs
@itemx -mno-libfuncs
@opindex mlibfuncs
@opindex mno-libfuncs
Specify that intrinsic library functions are being compiled, passing all
values in registers, no matter the size.

@item -mepsilon
@itemx -mno-epsilon
@opindex mepsilon
@opindex mno-epsilon
Generate floating-point comparison instructions that compare with respect
to the @code{rE} epsilon register.

@item -mabi=mmixware
@itemx -mabi=gnu
@opindex mabi-mmixware
@opindex mabi=gnu
Generate code that passes function parameters and return values that (in
the called function) are seen as registers @code{$0} and up, as opposed to
the GNU ABI which uses global registers @code{$231} and up.

@item -mzero-extend
@itemx -mno-zero-extend
@opindex mzero-extend
@opindex mno-zero-extend
When reading data from memory in sizes shorter than 64 bits, use (do not
use) zero-extending load instructions by default, rather than
sign-extending ones.

@item -mknuthdiv
@itemx -mno-knuthdiv
@opindex mknuthdiv
@opindex mno-knuthdiv
Make the result of a division yielding a remainder have the same sign as
the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
remainder follows the sign of the dividend.  Both methods are
arithmetically valid, the latter being almost exclusively used.

@item -mtoplevel-symbols
@itemx -mno-toplevel-symbols
@opindex mtoplevel-symbols
@opindex mno-toplevel-symbols
Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
code can be used with the @code{PREFIX} assembly directive.

@item -melf
@opindex melf
Generate an executable in the ELF format, rather than the default
@samp{mmo} format used by the @command{mmix} simulator.

@item -mbranch-predict
@itemx -mno-branch-predict
@opindex mbranch-predict
@opindex mno-branch-predict
Use (do not use) the probable-branch instructions, when static branch
prediction indicates a probable branch.

@item -mbase-addresses
@itemx -mno-base-addresses
@opindex mbase-addresses
@opindex mno-base-addresses
Generate (do not generate) code that uses @emph{base addresses}.  Using a
base address automatically generates a request (handled by the assembler
and the linker) for a constant to be set up in a global register.  The
register is used for one or more base address requests within the range 0
to 255 from the value held in the register.  The generally leads to short
and fast code, but the number of different data items that can be
addressed is limited.  This means that a program that uses lots of static
data may require @option{-mno-base-addresses}.

@item -msingle-exit
@itemx -mno-single-exit
@opindex msingle-exit
@opindex mno-single-exit
Force (do not force) generated code to have a single exit point in each
function.
@end table

@node MN10300 Options
@subsection MN10300 Options
@cindex MN10300 options

These @option{-m} options are defined for Matsushita MN10300 architectures:

@table @gcctabopt
@item -mmult-bug
@opindex mmult-bug
Generate code to avoid bugs in the multiply instructions for the MN10300
processors.  This is the default.

@item -mno-mult-bug
@opindex mno-mult-bug
Do not generate code to avoid bugs in the multiply instructions for the
MN10300 processors.

@item -mam33
@opindex mam33
Generate code which uses features specific to the AM33 processor.

@item -mno-am33
@opindex mno-am33
Do not generate code which uses features specific to the AM33 processor.  This
is the default.

@item -mreturn-pointer-on-d0
@opindex mreturn-pointer-on-d0
When generating a function which returns a pointer, return the pointer
in both @code{a0} and @code{d0}.  Otherwise, the pointer is returned
only in a0, and attempts to call such functions without a prototype
would result in errors.  Note that this option is on by default; use
@option{-mno-return-pointer-on-d0} to disable it.

@item -mno-crt0
@opindex mno-crt0
Do not link in the C run-time initialization object file.

@item -mrelax
@opindex mrelax
Indicate to the linker that it should perform a relaxation optimization pass
to shorten branches, calls and absolute memory addresses.  This option only
has an effect when used on the command line for the final link step.

This option makes symbolic debugging impossible.
@end table

@node MT Options
@subsection MT Options
@cindex MT options

These @option{-m} options are defined for Morpho MT architectures:

@table @gcctabopt

@item -march=@var{cpu-type}
@opindex march
Generate code that will run on @var{cpu-type}, which is the name of a system
representing a certain processor type.  Possible values for
@var{cpu-type} are @samp{ms1-64-001}, @samp{ms1-16-002},
@samp{ms1-16-003} and @samp{ms2}.

When this option is not used, the default is @option{-march=ms1-16-002}.

@item -mbacc
@opindex mbacc
Use byte loads and stores when generating code.

@item -mno-bacc
@opindex mno-bacc
Do not use byte loads and stores when generating code.

@item -msim
@opindex msim
Use simulator runtime

@item -mno-crt0
@opindex mno-crt0
Do not link in the C run-time initialization object file
@file{crti.o}.  Other run-time initialization and termination files
such as @file{startup.o} and @file{exit.o} are still included on the
linker command line.

@end table

@node PDP-11 Options
@subsection PDP-11 Options
@cindex PDP-11 Options

These options are defined for the PDP-11:

@table @gcctabopt
@item -mfpu
@opindex mfpu
Use hardware FPP floating point.  This is the default.  (FIS floating
point on the PDP-11/40 is not supported.)

@item -msoft-float
@opindex msoft-float
Do not use hardware floating point.

@item -mac0
@opindex mac0
Return floating-point results in ac0 (fr0 in Unix assembler syntax).

@item -mno-ac0
@opindex mno-ac0
Return floating-point results in memory.  This is the default.

@item -m40
@opindex m40
Generate code for a PDP-11/40.

@item -m45
@opindex m45
Generate code for a PDP-11/45.  This is the default.

@item -m10
@opindex m10
Generate code for a PDP-11/10.

@item -mbcopy-builtin
@opindex bcopy-builtin
Use inline @code{movmemhi} patterns for copying memory.  This is the
default.

@item -mbcopy
@opindex mbcopy
Do not use inline @code{movmemhi} patterns for copying memory.

@item -mint16
@itemx -mno-int32
@opindex mint16
@opindex mno-int32
Use 16-bit @code{int}.  This is the default.

@item -mint32
@itemx -mno-int16
@opindex mint32
@opindex mno-int16
Use 32-bit @code{int}.

@item -mfloat64
@itemx -mno-float32
@opindex mfloat64
@opindex mno-float32
Use 64-bit @code{float}.  This is the default.

@item -mfloat32
@itemx -mno-float64
@opindex mfloat32
@opindex mno-float64
Use 32-bit @code{float}.

@item -mabshi
@opindex mabshi
Use @code{abshi2} pattern.  This is the default.

@item -mno-abshi
@opindex mno-abshi
Do not use @code{abshi2} pattern.

@item -mbranch-expensive
@opindex mbranch-expensive
Pretend that branches are expensive.  This is for experimenting with
code generation only.

@item -mbranch-cheap
@opindex mbranch-cheap
Do not pretend that branches are expensive.  This is the default.

@item -msplit
@opindex msplit
Generate code for a system with split I&D@.

@item -mno-split
@opindex mno-split
Generate code for a system without split I&D@.  This is the default.

@item -munix-asm
@opindex munix-asm
Use Unix assembler syntax.  This is the default when configured for
@samp{pdp11-*-bsd}.

@item -mdec-asm
@opindex mdec-asm
Use DEC assembler syntax.  This is the default when configured for any
PDP-11 target other than @samp{pdp11-*-bsd}.
@end table
@c APPLE LOCAL prune man page
@end ignore

@node PowerPC Options
@subsection PowerPC Options
@cindex PowerPC options

These are listed under @xref{RS/6000 and PowerPC Options}.

@node RS/6000 and PowerPC Options
@subsection IBM RS/6000 and PowerPC Options
@cindex RS/6000 and PowerPC Options
@cindex IBM RS/6000 and PowerPC Options

These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
@table @gcctabopt
@item -mpower
@itemx -mno-power
@itemx -mpower2
@itemx -mno-power2
@itemx -mpowerpc
@itemx -mno-powerpc
@itemx -mpowerpc-gpopt
@itemx -mno-powerpc-gpopt
@itemx -mpowerpc-gfxopt
@itemx -mno-powerpc-gfxopt
@itemx -mpowerpc64
@itemx -mno-powerpc64
@itemx -mmfcrf
@itemx -mno-mfcrf
@itemx -mpopcntb
@itemx -mno-popcntb
@itemx -mfprnd
@itemx -mno-fprnd
@opindex mpower
@opindex mno-power
@opindex mpower2
@opindex mno-power2
@opindex mpowerpc
@opindex mno-powerpc
@opindex mpowerpc-gpopt
@opindex mno-powerpc-gpopt
@opindex mpowerpc-gfxopt
@opindex mno-powerpc-gfxopt
@opindex mpowerpc64
@opindex mno-powerpc64
@opindex mmfcrf
@opindex mno-mfcrf
@opindex mpopcntb
@opindex mno-popcntb
@opindex mfprnd
@opindex mno-fprnd
GCC supports two related instruction set architectures for the
RS/6000 and PowerPC@.  The @dfn{POWER} instruction set are those
instructions supported by the @samp{rios} chip set used in the original
RS/6000 systems and the @dfn{PowerPC} instruction set is the
architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and
the IBM 4xx, 6xx, and follow-on microprocessors.

Neither architecture is a subset of the other.  However there is a
large common subset of instructions supported by both.  An MQ
register is included in processors supporting the POWER architecture.

You use these options to specify which instructions are available on the
processor you are using.  The default value of these options is
determined when configuring GCC@.  Specifying the
@option{-mcpu=@var{cpu_type}} overrides the specification of these
options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
rather than the options listed above.

The @option{-mpower} option allows GCC to generate instructions that
are found only in the POWER architecture and to use the MQ register.
Specifying @option{-mpower2} implies @option{-power} and also allows GCC
to generate instructions that are present in the POWER2 architecture but
not the original POWER architecture.

The @option{-mpowerpc} option allows GCC to generate instructions that
are found only in the 32-bit subset of the PowerPC architecture.
Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows
GCC to use the optional PowerPC architecture instructions in the
General Purpose group, including floating-point square root.  Specifying
@option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to
use the optional PowerPC architecture instructions in the Graphics
group, including floating-point select.

The @option{-mmfcrf} option allows GCC to generate the move from
condition register field instruction implemented on the POWER4
processor and other processors that support the PowerPC V2.01
architecture.
The @option{-mpopcntb} option allows GCC to generate the popcount and
double precision FP reciprocal estimate instruction implemented on the
POWER5 processor and other processors that support the PowerPC V2.02
architecture.
The @option{-mfprnd} option allows GCC to generate the FP round to
integer instructions implemented on the POWER5+ processor and other
processors that support the PowerPC V2.03 architecture.

The @option{-mpowerpc64} option allows GCC to generate the additional
64-bit instructions that are found in the full PowerPC64 architecture
and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
@option{-mno-powerpc64}.

If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC
will use only the instructions in the common subset of both
architectures plus some special AIX common-mode calls, and will not use
the MQ register.  Specifying both @option{-mpower} and @option{-mpowerpc}
permits GCC to use any instruction from either architecture and to
allow use of the MQ register; specify this for the Motorola MPC601.

@item -mnew-mnemonics
@itemx -mold-mnemonics
@opindex mnew-mnemonics
@opindex mold-mnemonics
Select which mnemonics to use in the generated assembler code.  With
@option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for
the PowerPC architecture.  With @option{-mold-mnemonics} it uses the
assembler mnemonics defined for the POWER architecture.  Instructions
defined in only one architecture have only one mnemonic; GCC uses that
mnemonic irrespective of which of these options is specified.

GCC defaults to the mnemonics appropriate for the architecture in
use.  Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the
value of these option.  Unless you are building a cross-compiler, you
should normally not specify either @option{-mnew-mnemonics} or
@option{-mold-mnemonics}, but should instead accept the default.

@item -mcpu=@var{cpu_type}
@opindex mcpu
Set architecture type, register usage, choice of mnemonics, and
instruction scheduling parameters for machine type @var{cpu_type}.
Supported values for @var{cpu_type} are @samp{401}, @samp{403},
@samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{505},
@samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604},
@samp{604e}, @samp{620}, @samp{630}, @samp{740}, @samp{7400},
@samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
@samp{860}, @samp{970}, @samp{8540}, @samp{ec603e}, @samp{G3},
@samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3},
@samp{power4}, @samp{power5}, @samp{power5+}, @samp{power6},
@samp{common}, @samp{powerpc}, @samp{powerpc64},
@samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}.

@option{-mcpu=common} selects a completely generic processor.  Code
generated under this option will run on any POWER or PowerPC processor.
GCC will use only the instructions in the common subset of both
architectures, and will not use the MQ register.  GCC assumes a generic
processor model for scheduling purposes.

@option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and
@option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit
PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
types, with an appropriate, generic processor model assumed for
scheduling purposes.

The other options specify a specific processor.  Code generated under
those options will run best on that processor, and may not run at all on
others.

The @option{-mcpu} options automatically enable or disable the
following options: @option{-maltivec}, @option{-mfprnd},
@option{-mhard-float}, @option{-mmfcrf}, @option{-mmultiple},
@option{-mnew-mnemonics}, @option{-mpopcntb}, @option{-mpower},
@option{-mpower2}, @option{-mpowerpc64}, @option{-mpowerpc-gpopt},
@option{-mpowerpc-gfxopt}, @option{-mstring}, @option{-mmulhw}, @option{-mdlmzb}.
The particular options
set for any particular CPU will vary between compiler versions,
depending on what setting seems to produce optimal code for that CPU;
it doesn't necessarily reflect the actual hardware's capabilities.  If
you wish to set an individual option to a particular value, you may
specify it after the @option{-mcpu} option, like @samp{-mcpu=970
-mno-altivec}.

On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
not enabled or disabled by the @option{-mcpu} option at present because
AIX does not have full support for these options.  You may still
enable or disable them individually if you're sure it'll work in your
environment.

@item -mtune=@var{cpu_type}
@opindex mtune
Set the instruction scheduling parameters for machine type
@var{cpu_type}, but do not set the architecture type, register usage, or
choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would.  The same
values for @var{cpu_type} are used for @option{-mtune} as for
@option{-mcpu}.  If both are specified, the code generated will use the
architecture, registers, and mnemonics set by @option{-mcpu}, but the
scheduling parameters set by @option{-mtune}.

@item -mswdiv
@itemx -mno-swdiv
@opindex mswdiv
@opindex mno-swdiv
Generate code to compute division as reciprocal estimate and iterative
refinement, creating opportunities for increased throughput.  This
feature requires: optional PowerPC Graphics instruction set for single
precision and FRE instruction for double precision, assuming divides
cannot generate user-visible traps, and the domain values not include
Infinities, denormals or zero denominator.

@item -maltivec
@itemx -mno-altivec
@opindex maltivec
@opindex mno-altivec
Generate code that uses (does not use) AltiVec instructions, and also
enable the use of built-in functions that allow more direct access to
the AltiVec instruction set.  You may also need to set
@option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
enhancements.

@c APPLE LOCAL begin AltiVec
@item -mpim-altivec
@itemx -mno-pim-altivec
@opindex mpim-altivec
@opindex mno-pim-altivec
Enable (or disable) built-in compiler support for the syntactic extensions as
well as operations and predicates defined in the Motorola AltiVec
Technology Programming Interface Manual (PIM).  This includes the
recognition of @code{vector} and @code{pixel} as (context-dependent)
keywords, the definition of built-in functions such as @code{vec_add},
and the use of parenthesized comma expression as AltiVec literals.
Note that unlike the option @option{-maltivec}, the extension does not require
the inclusion of any special header files; if @code{<altivec.h>} is included,
a warning will be issued and the contents of the header will be
ignored.  The preprocessor shall provide an @code{__APPLE_ALTIVEC__}
manifest constant when @option{-mpim-altivec} is specified.  (APPLE ONLY)

In addition, the @option{-mpim-altivec} option disables the inlining of
functions containing AltiVec instructions into functions that do not make
use of the vector unit.  Certain other optimizations, such as inline 
vectorization of @code{memset} and @code{memcpy} calls, are also disabled.
These adjustments make it possible to compile programs whose use of AltiVec
instructions is preceded by a run-time check for the presence of AltiVec
functionality, and that can therefore be made to run on G3 processors.
Note that all of these optimizations may be re-enabled by supplying
the @option{-maltivec} option, or an @option{-mcpu} option specifying
a processor that supports AltiVec instructions.
@c APPLE LOCAL end AltiVec

@item -mvrsave
@item -mno-vrsave
@opindex mvrsave
@opindex mno-vrsave
Generate VRSAVE instructions when generating AltiVec code.

@item -msecure-plt
@opindex msecure-plt
Generate code that allows ld and ld.so to build executables and shared
libraries with non-exec .plt and .got sections.  This is a PowerPC
32-bit SYSV ABI option.

@item -mbss-plt
@opindex mbss-plt
Generate code that uses a BSS .plt section that ld.so fills in, and
requires .plt and .got sections that are both writable and executable.
This is a PowerPC 32-bit SYSV ABI option.

@item -misel
@itemx -mno-isel
@opindex misel
@opindex mno-isel
This switch enables or disables the generation of ISEL instructions.

@item -misel=@var{yes/no}
This switch has been deprecated.  Use @option{-misel} and
@option{-mno-isel} instead.

@item -mspe
@itemx -mno-spe
@opindex mspe
@opindex mno-spe
This switch enables or disables the generation of SPE simd
instructions.

@item -mspe=@var{yes/no}
This option has been deprecated.  Use @option{-mspe} and
@option{-mno-spe} instead.

@item -mfloat-gprs=@var{yes/single/double/no}
@itemx -mfloat-gprs
@opindex mfloat-gprs
This switch enables or disables the generation of floating point
operations on the general purpose registers for architectures that
support it.

The argument @var{yes} or @var{single} enables the use of
single-precision floating point operations.

The argument @var{double} enables the use of single and
double-precision floating point operations.

The argument @var{no} disables floating point operations on the
general purpose registers.

This option is currently only available on the MPC854x.

@item -m32
@itemx -m64
@opindex m32
@opindex m64
Generate code for 32-bit or 64-bit environments of Darwin and SVR4
targets (including GNU/Linux).  The 32-bit environment sets int, long
and pointer to 32 bits and generates code that runs on any PowerPC
variant.  The 64-bit environment sets int to 32 bits and long and
pointer to 64 bits, and generates code for PowerPC64, as for
@option{-mpowerpc64}.

@item -mfull-toc
@itemx -mno-fp-in-toc
@itemx -mno-sum-in-toc
@itemx -mminimal-toc
@opindex mfull-toc
@opindex mno-fp-in-toc
@opindex mno-sum-in-toc
@opindex mminimal-toc
Modify generation of the TOC (Table Of Contents), which is created for
every executable file.  The @option{-mfull-toc} option is selected by
default.  In that case, GCC will allocate at least one TOC entry for
each unique non-automatic variable reference in your program.  GCC
will also place floating-point constants in the TOC@.  However, only
16,384 entries are available in the TOC@.

If you receive a linker error message that saying you have overflowed
the available TOC space, you can reduce the amount of TOC space used
with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
@option{-mno-fp-in-toc} prevents GCC from putting floating-point
constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
generate code to calculate the sum of an address and a constant at
run-time instead of putting that sum into the TOC@.  You may specify one
or both of these options.  Each causes GCC to produce very slightly
slower and larger code at the expense of conserving TOC space.

If you still run out of space in the TOC even when you specify both of
these options, specify @option{-mminimal-toc} instead.  This option causes
GCC to make only one TOC entry for every file.  When you specify this
option, GCC will produce code that is slower and larger but which
uses extremely little TOC space.  You may wish to use this option
only on files that contain less frequently executed code.

@item -maix64
@itemx -maix32
@opindex maix64
@opindex maix32
Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
@code{long} type, and the infrastructure needed to support them.
Specifying @option{-maix64} implies @option{-mpowerpc64} and
@option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and
implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.

@item -mxl-compat
@itemx -mno-xl-compat
@opindex mxl-compat
@opindex mno-xl-compat
Produce code that conforms more closely to IBM XL compiler semantics
when using AIX-compatible ABI.  Pass floating-point arguments to
prototyped functions beyond the register save area (RSA) on the stack
in addition to argument FPRs.  Do not assume that most significant
double in 128-bit long double value is properly rounded when comparing
values and converting to double.  Use XL symbol names for long double
support routines.

The AIX calling convention was extended but not initially documented to
handle an obscure K&R C case of calling a function that takes the
address of its arguments with fewer arguments than declared.  IBM XL
compilers access floating point arguments which do not fit in the
RSA from the stack when a subroutine is compiled without
optimization.  Because always storing floating-point arguments on the
stack is inefficient and rarely needed, this option is not enabled by
default and only is necessary when calling subroutines compiled by IBM
XL compilers without optimization.

@item -mpe
@opindex mpe
Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
application written to use message passing with special startup code to
enable the application to run.  The system must have PE installed in the
standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
must be overridden with the @option{-specs=} option to specify the
appropriate directory location.  The Parallel Environment does not
support threads, so the @option{-mpe} option and the @option{-pthread}
option are incompatible.

@item -malign-natural
@itemx -malign-power
@opindex malign-natural
@opindex malign-power
On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
@option{-malign-natural} overrides the ABI-defined alignment of larger
types, such as floating-point doubles, on their natural size-based boundary.
The option @option{-malign-power} instructs GCC to follow the ABI-specified
alignment rules.  GCC defaults to the standard alignment defined in the ABI@.

On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
is not supported.

@item -msoft-float
@itemx -mhard-float
@opindex msoft-float
@opindex mhard-float
Generate code that does not use (uses) the floating-point register set.
Software floating point emulation is provided if you use the
@option{-msoft-float} option, and pass the option to GCC when linking.

@c APPLE LOCAL begin describe actual behavior 3888787
(APPLE ONLY) While the -msoft-float option is supported, the libraries that
do the floating point emulation are not shipped on Apple PowerPCs, with the
effect that the emulation does not work.  However, the option
may be useful for a different reason.  Normally the compiler can use floating
point registers in contexts where you might not expect it, for example, to
copy data from one memory location to another.  The -msoft-float option will
prevent it from doing this.
@c APPLE LOCAL end describe actual behavior 3888787

@item -mmultiple
@itemx -mno-multiple
@opindex mmultiple
@opindex mno-multiple
Generate code that uses (does not use) the load multiple word
instructions and the store multiple word instructions.  These
instructions are generated by default on POWER systems, and not
generated on PowerPC systems.  Do not use @option{-mmultiple} on little
endian PowerPC systems, since those instructions do not work when the
processor is in little endian mode.  The exceptions are PPC740 and
PPC750 which permit the instructions usage in little endian mode.

@item -mstring
@itemx -mno-string
@opindex mstring
@opindex mno-string
Generate code that uses (does not use) the load string instructions
and the store string word instructions to save multiple registers and
do small block moves.  These instructions are generated by default on
POWER systems, and not generated on PowerPC systems.  Do not use
@option{-mstring} on little endian PowerPC systems, since those
instructions do not work when the processor is in little endian mode.
The exceptions are PPC740 and PPC750 which permit the instructions
usage in little endian mode.

@item -mupdate
@itemx -mno-update
@opindex mupdate
@opindex mno-update
Generate code that uses (does not use) the load or store instructions
that update the base register to the address of the calculated memory
location.  These instructions are generated by default.  If you use
@option{-mno-update}, there is a small window between the time that the
stack pointer is updated and the address of the previous frame is
stored, which means code that walks the stack frame across interrupts or
signals may get corrupted data.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Generate code that uses (does not use) the floating point multiply and
accumulate instructions.  These instructions are generated by default if
hardware floating is used.

@item -mmulhw
@itemx -mno-mulhw
@opindex mmulhw
@opindex mno-mulhw
Generate code that uses (does not use) the half-word multiply and
multiply-accumulate instructions on the IBM 405 and 440 processors.
These instructions are generated by default when targetting those
processors.

@item -mdlmzb
@itemx -mno-dlmzb
@opindex mdlmzb
@opindex mno-dlmzb
Generate code that uses (does not use) the string-search @samp{dlmzb}
instruction on the IBM 405 and 440 processors.  This instruction is
generated by default when targetting those processors.

@item -mno-bit-align
@itemx -mbit-align
@opindex mno-bit-align
@opindex mbit-align
On System V.4 and embedded PowerPC systems do not (do) force structures
and unions that contain bit-fields to be aligned to the base type of the
bit-field.

For example, by default a structure containing nothing but 8
@code{unsigned} bit-fields of length 1 would be aligned to a 4 byte
boundary and have a size of 4 bytes.  By using @option{-mno-bit-align},
the structure would be aligned to a 1 byte boundary and be one byte in
size.

@item -mno-strict-align
@itemx -mstrict-align
@opindex mno-strict-align
@opindex mstrict-align
On System V.4 and embedded PowerPC systems do not (do) assume that
unaligned memory references will be handled by the system.

@item -mrelocatable
@itemx -mno-relocatable
@opindex mrelocatable
@opindex mno-relocatable
On embedded PowerPC systems generate code that allows (does not allow)
the program to be relocated to a different address at runtime.  If you
use @option{-mrelocatable} on any module, all objects linked together must
be compiled with @option{-mrelocatable} or @option{-mrelocatable-lib}.

@item -mrelocatable-lib
@itemx -mno-relocatable-lib
@opindex mrelocatable-lib
@opindex mno-relocatable-lib
On embedded PowerPC systems generate code that allows (does not allow)
the program to be relocated to a different address at runtime.  Modules
compiled with @option{-mrelocatable-lib} can be linked with either modules
compiled without @option{-mrelocatable} and @option{-mrelocatable-lib} or
with modules compiled with the @option{-mrelocatable} options.

@item -mno-toc
@itemx -mtoc
@opindex mno-toc
@opindex mtoc
On System V.4 and embedded PowerPC systems do not (do) assume that
register 2 contains a pointer to a global area pointing to the addresses
used in the program.

@item -mlittle
@itemx -mlittle-endian
@opindex mlittle
@opindex mlittle-endian
On System V.4 and embedded PowerPC systems compile code for the
processor in little endian mode.  The @option{-mlittle-endian} option is
the same as @option{-mlittle}.

@item -mbig
@itemx -mbig-endian
@opindex mbig
@opindex mbig-endian
On System V.4 and embedded PowerPC systems compile code for the
processor in big endian mode.  The @option{-mbig-endian} option is
the same as @option{-mbig}.

@item -mdynamic-no-pic
@opindex mdynamic-no-pic
On Darwin and Mac OS X systems, compile code so that it is not
relocatable, but that its external references are relocatable.  The
resulting code is suitable for applications, but not shared
libraries.

@item -mprioritize-restricted-insns=@var{priority}
@opindex mprioritize-restricted-insns
This option controls the priority that is assigned to
dispatch-slot restricted instructions during the second scheduling
pass.  The argument @var{priority} takes the value @var{0/1/2} to assign
@var{no/highest/second-highest} priority to dispatch slot restricted
instructions.

@item -msched-costly-dep=@var{dependence_type}
@opindex msched-costly-dep
This option controls which dependences are considered costly
by the target during instruction scheduling.  The argument
@var{dependence_type} takes one of the following values:
@var{no}: no dependence is costly,
@var{all}: all dependences are costly,
@var{true_store_to_load}: a true dependence from store to load is costly,
@var{store_to_load}: any dependence from store to load is costly,
@var{number}: any dependence which latency >= @var{number} is costly.

@item -minsert-sched-nops=@var{scheme}
@opindex minsert-sched-nops
This option controls which nop insertion scheme will be used during
the second scheduling pass.  The argument @var{scheme} takes one of the
following values:
@var{no}: Don't insert nops.
@var{pad}: Pad with nops any dispatch group which has vacant issue slots,
according to the scheduler's grouping.
@var{regroup_exact}: Insert nops to force costly dependent insns into
separate groups.  Insert exactly as many nops as needed to force an insn
to a new group, according to the estimated processor grouping.
@var{number}: Insert nops to force costly dependent insns into
separate groups.  Insert @var{number} nops to force an insn to a new group.

@item -mcall-sysv
@opindex mcall-sysv
On System V.4 and embedded PowerPC systems compile code using calling
conventions that adheres to the March 1995 draft of the System V
Application Binary Interface, PowerPC processor supplement.  This is the
default unless you configured GCC using @samp{powerpc-*-eabiaix}.

@item -mcall-sysv-eabi
@opindex mcall-sysv-eabi
Specify both @option{-mcall-sysv} and @option{-meabi} options.

@item -mcall-sysv-noeabi
@opindex mcall-sysv-noeabi
Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.

@item -mcall-solaris
@opindex mcall-solaris
On System V.4 and embedded PowerPC systems compile code for the Solaris
operating system.

@item -mcall-linux
@opindex mcall-linux
On System V.4 and embedded PowerPC systems compile code for the
Linux-based GNU system.

@item -mcall-gnu
@opindex mcall-gnu
On System V.4 and embedded PowerPC systems compile code for the
Hurd-based GNU system.

@item -mcall-netbsd
@opindex mcall-netbsd
On System V.4 and embedded PowerPC systems compile code for the
NetBSD operating system.

@item -maix-struct-return
@opindex maix-struct-return
Return all structures in memory (as specified by the AIX ABI)@.

@item -msvr4-struct-return
@opindex msvr4-struct-return
Return structures smaller than 8 bytes in registers (as specified by the
SVR4 ABI)@.

@item -mabi=@var{abi-type}
@opindex mabi
Extend the current ABI with a particular extension, or remove such extension.
Valid values are @var{altivec}, @var{no-altivec}, @var{spe},
@var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble}@.

@item -mabi=spe
@opindex mabi=spe
Extend the current ABI with SPE ABI extensions.  This does not change
the default ABI, instead it adds the SPE ABI extensions to the current
ABI@.

@item -mabi=no-spe
@opindex mabi=no-spe
Disable Booke SPE ABI extensions for the current ABI@.

@item -mabi=ibmlongdouble
@opindex mabi=ibmlongdouble
Change the current ABI to use IBM extended precision long double.
This is a PowerPC 32-bit SYSV ABI option.

@item -mabi=ieeelongdouble
@opindex mabi=ieeelongdouble
Change the current ABI to use IEEE extended precision long double.
This is a PowerPC 32-bit Linux ABI option.

@item -mprototype
@itemx -mno-prototype
@opindex mprototype
@opindex mno-prototype
On System V.4 and embedded PowerPC systems assume that all calls to
variable argument functions are properly prototyped.  Otherwise, the
compiler must insert an instruction before every non prototyped call to
set or clear bit 6 of the condition code register (@var{CR}) to
indicate whether floating point values were passed in the floating point
registers in case the function takes a variable arguments.  With
@option{-mprototype}, only calls to prototyped variable argument functions
will set or clear the bit.

@item -msim
@opindex msim
On embedded PowerPC systems, assume that the startup module is called
@file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
@file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}.
configurations.

@item -mmvme
@opindex mmvme
On embedded PowerPC systems, assume that the startup module is called
@file{crt0.o} and the standard C libraries are @file{libmvme.a} and
@file{libc.a}.

@item -mads
@opindex mads
On embedded PowerPC systems, assume that the startup module is called
@file{crt0.o} and the standard C libraries are @file{libads.a} and
@file{libc.a}.

@item -myellowknife
@opindex myellowknife
On embedded PowerPC systems, assume that the startup module is called
@file{crt0.o} and the standard C libraries are @file{libyk.a} and
@file{libc.a}.

@item -mvxworks
@opindex mvxworks
On System V.4 and embedded PowerPC systems, specify that you are
compiling for a VxWorks system.

@item -mwindiss
@opindex mwindiss
Specify that you are compiling for the WindISS simulation environment.

@item -memb
@opindex memb
On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
header to indicate that @samp{eabi} extended relocations are used.

@item -meabi
@itemx -mno-eabi
@opindex meabi
@opindex mno-eabi
On System V.4 and embedded PowerPC systems do (do not) adhere to the
Embedded Applications Binary Interface (eabi) which is a set of
modifications to the System V.4 specifications.  Selecting @option{-meabi}
means that the stack is aligned to an 8 byte boundary, a function
@code{__eabi} is called to from @code{main} to set up the eabi
environment, and the @option{-msdata} option can use both @code{r2} and
@code{r13} to point to two separate small data areas.  Selecting
@option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
do not call an initialization function from @code{main}, and the
@option{-msdata} option will only use @code{r13} to point to a single
small data area.  The @option{-meabi} option is on by default if you
configured GCC using one of the @samp{powerpc*-*-eabi*} options.

@item -msdata=eabi
@opindex msdata=eabi
On System V.4 and embedded PowerPC systems, put small initialized
@code{const} global and static data in the @samp{.sdata2} section, which
is pointed to by register @code{r2}.  Put small initialized
non-@code{const} global and static data in the @samp{.sdata} section,
which is pointed to by register @code{r13}.  Put small uninitialized
global and static data in the @samp{.sbss} section, which is adjacent to
the @samp{.sdata} section.  The @option{-msdata=eabi} option is
incompatible with the @option{-mrelocatable} option.  The
@option{-msdata=eabi} option also sets the @option{-memb} option.

@item -msdata=sysv
@opindex msdata=sysv
On System V.4 and embedded PowerPC systems, put small global and static
data in the @samp{.sdata} section, which is pointed to by register
@code{r13}.  Put small uninitialized global and static data in the
@samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
The @option{-msdata=sysv} option is incompatible with the
@option{-mrelocatable} option.

@item -msdata=default
@itemx -msdata
@opindex msdata=default
@opindex msdata
On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
compile code the same as @option{-msdata=eabi}, otherwise compile code the
same as @option{-msdata=sysv}.

@item -msdata-data
@opindex msdata-data
On System V.4 and embedded PowerPC systems, put small global
data in the @samp{.sdata} section.  Put small uninitialized global
data in the @samp{.sbss} section.  Do not use register @code{r13}
to address small data however.  This is the default behavior unless
other @option{-msdata} options are used.

@item -msdata=none
@itemx -mno-sdata
@opindex msdata=none
@opindex mno-sdata
On embedded PowerPC systems, put all initialized global and static data
in the @samp{.data} section, and all uninitialized data in the
@samp{.bss} section.

@item -G @var{num}
@opindex G
@cindex smaller data references (PowerPC)
@cindex .sdata/.sdata2 references (PowerPC)
On embedded PowerPC systems, put global and static items less than or
equal to @var{num} bytes into the small data or bss sections instead of
the normal data or bss section.  By default, @var{num} is 8.  The
@option{-G @var{num}} switch is also passed to the linker.
All modules should be compiled with the same @option{-G @var{num}} value.

@item -mregnames
@itemx -mno-regnames
@opindex mregnames
@opindex mno-regnames
On System V.4 and embedded PowerPC systems do (do not) emit register
names in the assembly language output using symbolic forms.

@item -mlongcall
@itemx -mno-longcall
@opindex mlongcall
@opindex mno-longcall
@c APPLE LOCAL begin 4222119
@itemx -mlong-branch
@itemx -mno-long-branch
@opindex mlong-branch
@opindex mno-long-branch
@c APPLE LOCAL end 4222119
By default assume that all calls are far away so that a longer more
expensive calling sequence is required.  This is required for calls
further than 32 megabytes (33,554,432 bytes) from the current location.
A short call will be generated if the compiler knows
the call cannot be that far away.  This setting can be overridden by
the @code{shortcall} function attribute, or by @code{#pragma
longcall(0)}.

Some linkers are capable of detecting out-of-range calls and generating
glue code on the fly.  On these systems, long calls are unnecessary and
generate slower code.  As of this writing, the AIX linker can do this,
as can the GNU linker for PowerPC/64.  It is planned to add this feature
to the GNU linker for 32-bit PowerPC systems as well.

On Darwin/PPC systems, @code{#pragma longcall} will generate ``jbsr
callee, L42'', plus a ``branch island'' (glue code).  The two target
addresses represent the callee and the ``branch island''.  The
Darwin/PPC linker will prefer the first address and generate a ``bl
callee'' if the PPC ``bl'' instruction will reach the callee directly;
otherwise, the linker will generate ``bl L42'' to call the ``branch
island''.  The ``branch island'' is appended to the body of the
calling function; it computes the full 32-bit address of the callee
and jumps to it.

@c APPLE LOCAL begin 4222119
On Mach-O (Darwin) systems, @option{-mlongcall} directs the compiler
emit to the glue for every direct call, and the Darwin linker decides
whether to use or discard it.  @option{-mlong-branch} is a synonym for
@option{-mlongcall}.
@c APPLE LOCAL end 4222119

In the future, we may cause GCC to ignore all longcall specifications
when the linker is known to generate glue.

@item -pthread
@opindex pthread
Adds support for multithreading with the @dfn{pthreads} library.
This option sets flags for both the preprocessor and linker.

@c APPLE LOCAL begin 5946347 ms_struct support
@item -mms-bitfields
@opindex mms-bitfields
Set the default structure layout to be compatible with the Microsoft
compiler standard. This is equivalent to adding an @code{ms_struct}
attribute to each structure and union tag definition. The default is
@option{mno-ms-bitfields}.
@c APPLE LOCAL end 5946347 ms_struct support

@end table

@c APPLE LOCAL prune man page
@ignore
@node S/390 and zSeries Options
@subsection S/390 and zSeries Options
@cindex S/390 and zSeries Options

These are the @samp{-m} options defined for the S/390 and zSeries architecture.

@table @gcctabopt
@item -mhard-float
@itemx -msoft-float
@opindex mhard-float
@opindex msoft-float
Use (do not use) the hardware floating-point instructions and registers
for floating-point operations.  When @option{-msoft-float} is specified,
functions in @file{libgcc.a} will be used to perform floating-point
operations.  When @option{-mhard-float} is specified, the compiler
generates IEEE floating-point instructions.  This is the default.

@item -mlong-double-64
@itemx -mlong-double-128
@opindex mlong-double-64
@opindex mlong-double-128
These switches control the size of @code{long double} type. A size
of 64bit makes the @code{long double} type equivalent to the @code{double}
type. This is the default.

@item -mbackchain
@itemx -mno-backchain
@opindex mbackchain
@opindex mno-backchain
Store (do not store) the address of the caller's frame as backchain pointer
into the callee's stack frame.
A backchain may be needed to allow debugging using tools that do not understand
DWARF-2 call frame information.
When @option{-mno-packed-stack} is in effect, the backchain pointer is stored
at the bottom of the stack frame; when @option{-mpacked-stack} is in effect,
the backchain is placed into the topmost word of the 96/160 byte register
save area.

In general, code compiled with @option{-mbackchain} is call-compatible with
code compiled with @option{-mmo-backchain}; however, use of the backchain
for debugging purposes usually requires that the whole binary is built with
@option{-mbackchain}.  Note that the combination of @option{-mbackchain},
@option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
to build a linux kernel use @option{-msoft-float}.

The default is to not maintain the backchain.

@item -mpacked-stack
@item -mno-packed-stack
@opindex mpacked-stack
@opindex mno-packed-stack
Use (do not use) the packed stack layout.  When @option{-mno-packed-stack} is
specified, the compiler uses the all fields of the 96/160 byte register save
area only for their default purpose; unused fields still take up stack space.
When @option{-mpacked-stack} is specified, register save slots are densely
packed at the top of the register save area; unused space is reused for other
purposes, allowing for more efficient use of the available stack space.
However, when @option{-mbackchain} is also in effect, the topmost word of
the save area is always used to store the backchain, and the return address
register is always saved two words below the backchain.

As long as the stack frame backchain is not used, code generated with
@option{-mpacked-stack} is call-compatible with code generated with
@option{-mno-packed-stack}.  Note that some non-FSF releases of GCC 2.95 for
S/390 or zSeries generated code that uses the stack frame backchain at run
time, not just for debugging purposes.  Such code is not call-compatible
with code compiled with @option{-mpacked-stack}.  Also, note that the
combination of @option{-mbackchain},
@option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
to build a linux kernel use @option{-msoft-float}.

The default is to not use the packed stack layout.

@item -msmall-exec
@itemx -mno-small-exec
@opindex msmall-exec
@opindex mno-small-exec
Generate (or do not generate) code using the @code{bras} instruction
to do subroutine calls.
This only works reliably if the total executable size does not
exceed 64k.  The default is to use the @code{basr} instruction instead,
which does not have this limitation.

@item -m64
@itemx -m31
@opindex m64
@opindex m31
When @option{-m31} is specified, generate code compliant to the
GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
particular to generate 64-bit instructions.  For the @samp{s390}
targets, the default is @option{-m31}, while the @samp{s390x}
targets default to @option{-m64}.

@item -mzarch
@itemx -mesa
@opindex mzarch
@opindex mesa
When @option{-mzarch} is specified, generate code using the
instructions available on z/Architecture.
When @option{-mesa} is specified, generate code using the
instructions available on ESA/390.  Note that @option{-mesa} is
not possible with @option{-m64}.
When generating code compliant to the GNU/Linux for S/390 ABI,
the default is @option{-mesa}.  When generating code compliant
to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.

@item -mmvcle
@itemx -mno-mvcle
@opindex mmvcle
@opindex mno-mvcle
Generate (or do not generate) code using the @code{mvcle} instruction
to perform block moves.  When @option{-mno-mvcle} is specified,
use a @code{mvc} loop instead.  This is the default unless optimizing for
size.

@item -mdebug
@itemx -mno-debug
@opindex mdebug
@opindex mno-debug
Print (or do not print) additional debug information when compiling.
The default is to not print debug information.

@item -march=@var{cpu-type}
@opindex march
Generate code that will run on @var{cpu-type}, which is the name of a system
representing a certain processor type.  Possible values for
@var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, and @samp{z990}.
When generating code using the instructions available on z/Architecture,
the default is @option{-march=z900}.  Otherwise, the default is
@option{-march=g5}.

@item -mtune=@var{cpu-type}
@opindex mtune
Tune to @var{cpu-type} everything applicable about the generated code,
except for the ABI and the set of available instructions.
The list of @var{cpu-type} values is the same as for @option{-march}.
The default is the value used for @option{-march}.

@item -mtpf-trace
@itemx -mno-tpf-trace
@opindex mtpf-trace
@opindex mno-tpf-trace
Generate code that adds (does not add) in TPF OS specific branches to trace
routines in the operating system.  This option is off by default, even
when compiling for the TPF OS@.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Generate code that uses (does not use) the floating point multiply and
accumulate instructions.  These instructions are generated by default if
hardware floating point is used.

@item -mwarn-framesize=@var{framesize}
@opindex mwarn-framesize
Emit a warning if the current function exceeds the given frame size.  Because
this is a compile time check it doesn't need to be a real problem when the program
runs.  It is intended to identify functions which most probably cause
a stack overflow.  It is useful to be used in an environment with limited stack
size e.g.@: the linux kernel.

@item -mwarn-dynamicstack
@opindex mwarn-dynamicstack
Emit a warning if the function calls alloca or uses dynamically
sized arrays.  This is generally a bad idea with a limited stack size.

@item -mstack-guard=@var{stack-guard}
@item -mstack-size=@var{stack-size}
@opindex mstack-guard
@opindex mstack-size
These arguments always have to be used in conjunction.  If they are present the s390
back end emits additional instructions in the function prologue which trigger a trap
if the stack size is @var{stack-guard} bytes above the @var{stack-size}
(remember that the stack on s390 grows downward).  These options are intended to
be used to help debugging stack overflow problems.  The additionally emitted code
causes only little overhead and hence can also be used in production like systems
without greater performance degradation.  The given values have to be exact
powers of 2 and @var{stack-size} has to be greater than @var{stack-guard} without
exceeding 64k.
In order to be efficient the extra code makes the assumption that the stack starts
at an address aligned to the value given by @var{stack-size}.
@end table

@node Score Options
@subsection Score Options
@cindex Score Options

These options are defined for Score implementations:

@table @gcctabopt
@item -meb
@opindex meb
Compile code for big endian mode.  This is the default.

@item -mel
@opindex mel
Compile code for little endian mode. 

@item -mnhwloop
@opindex mnhwloop
Disable generate bcnz instruction.

@item -muls
@opindex muls
Enable generate unaligned load and store instruction.

@item -mmac
@opindex mmac
Enable the use of multiply-accumulate instructions. Disabled by default. 

@item -mscore5
@opindex mscore5
Specify the SCORE5 as the target architecture.

@item -mscore5u
@opindex mscore5u
Specify the SCORE5U of the target architecture.

@item -mscore7
@opindex mscore7
Specify the SCORE7 as the target architecture. This is the default.

@item -mscore7d
@opindex mscore7d
Specify the SCORE7D as the target architecture.
@end table

@node SH Options
@subsection SH Options

These @samp{-m} options are defined for the SH implementations:

@table @gcctabopt
@item -m1
@opindex m1
Generate code for the SH1.

@item -m2
@opindex m2
Generate code for the SH2.

@item -m2e
Generate code for the SH2e.

@item -m3
@opindex m3
Generate code for the SH3.

@item -m3e
@opindex m3e
Generate code for the SH3e.

@item -m4-nofpu
@opindex m4-nofpu
Generate code for the SH4 without a floating-point unit.

@item -m4-single-only
@opindex m4-single-only
Generate code for the SH4 with a floating-point unit that only
supports single-precision arithmetic.

@item -m4-single
@opindex m4-single
Generate code for the SH4 assuming the floating-point unit is in
single-precision mode by default.

@item -m4
@opindex m4
Generate code for the SH4.

@item -m4a-nofpu
@opindex m4a-nofpu
Generate code for the SH4al-dsp, or for a SH4a in such a way that the
floating-point unit is not used.

@item -m4a-single-only
@opindex m4a-single-only
Generate code for the SH4a, in such a way that no double-precision
floating point operations are used.

@item -m4a-single
@opindex m4a-single
Generate code for the SH4a assuming the floating-point unit is in
single-precision mode by default.

@item -m4a
@opindex m4a
Generate code for the SH4a.

@item -m4al
@opindex m4al
Same as @option{-m4a-nofpu}, except that it implicitly passes
@option{-dsp} to the assembler.  GCC doesn't generate any DSP
instructions at the moment.

@item -mb
@opindex mb
Compile code for the processor in big endian mode.

@item -ml
@opindex ml
Compile code for the processor in little endian mode.

@item -mdalign
@opindex mdalign
Align doubles at 64-bit boundaries.  Note that this changes the calling
conventions, and thus some functions from the standard C library will
not work unless you recompile it first with @option{-mdalign}.

@item -mrelax
@opindex mrelax
Shorten some address references at link time, when possible; uses the
linker option @option{-relax}.

@item -mbigtable
@opindex mbigtable
Use 32-bit offsets in @code{switch} tables.  The default is to use
16-bit offsets.

@item -mfmovd
@opindex mfmovd
Enable the use of the instruction @code{fmovd}.

@item -mhitachi
@opindex mhitachi
Comply with the calling conventions defined by Renesas.

@item -mrenesas
@opindex mhitachi
Comply with the calling conventions defined by Renesas.

@item -mno-renesas
@opindex mhitachi
Comply with the calling conventions defined for GCC before the Renesas
conventions were available.  This option is the default for all
targets of the SH toolchain except for @samp{sh-symbianelf}.

@item -mnomacsave
@opindex mnomacsave
Mark the @code{MAC} register as call-clobbered, even if
@option{-mhitachi} is given.

@item -mieee
@opindex mieee
Increase IEEE-compliance of floating-point code.
At the moment, this is equivalent to @option{-fno-finite-math-only}.
When generating 16 bit SH opcodes, getting IEEE-conforming results for
comparisons of NANs / infinities incurs extra overhead in every
floating point comparison, therefore the default is set to
@option{-ffinite-math-only}.

@item -misize
@opindex misize
Dump instruction size and location in the assembly code.

@item -mpadstruct
@opindex mpadstruct
This option is deprecated.  It pads structures to multiple of 4 bytes,
which is incompatible with the SH ABI@.

@item -mspace
@opindex mspace
@c APPLE LOCAL 4231761 -Oz
Optimize for space instead of speed.  Implied by @option{-Os} and @option{-Oz} (APPLE ONLY).

@item -mprefergot
@opindex mprefergot
When generating position-independent code, emit function calls using
the Global Offset Table instead of the Procedure Linkage Table.

@item -musermode
@opindex musermode
Generate a library function call to invalidate instruction cache
entries, after fixing up a trampoline.  This library function call
doesn't assume it can write to the whole memory address space.  This
is the default when the target is @code{sh-*-linux*}.

@item -multcost=@var{number}
@opindex multcost=@var{number}
Set the cost to assume for a multiply insn.

@item -mdiv=@var{strategy}
@opindex mdiv=@var{strategy}
Set the division strategy to use for SHmedia code.  @var{strategy} must be
one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call,
inv:call2, inv:fp .
"fp" performs the operation in floating point.  This has a very high latency,
but needs only a few instructions, so it might be a good choice if
your code has enough easily exploitable ILP to allow the compiler to
schedule the floating point instructions together with other instructions.
Division by zero causes a floating point exception.
"inv" uses integer operations to calculate the inverse of the divisor,
and then multiplies the dividend with the inverse.  This strategy allows
cse and hoisting of the inverse calculation.  Division by zero calculates
an unspecified result, but does not trap.
"inv:minlat" is a variant of "inv" where if no cse / hoisting opportunities
have been found, or if the entire operation has been hoisted to the same
place, the last stages of the inverse calculation are intertwined with the
final multiply to reduce the overall latency, at the expense of using a few
more instructions, and thus offering fewer scheduling opportunities with
other code.
"call" calls a library function that usually implements the inv:minlat
strategy.
This gives high code density for m5-*media-nofpu compilations.
"call2" uses a different entry point of the same library function, where it
assumes that a pointer to a lookup table has already been set up, which
exposes the pointer load to cse / code hoisting optimizations.
"inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm for initial
code generation, but if the code stays unoptimized, revert to the "call",
"call2", or "fp" strategies, respectively.  Note that the
potentially-trapping side effect of division by zero is carried by a
separate instruction, so it is possible that all the integer instructions
are hoisted out, but the marker for the side effect stays where it is.
A recombination to fp operations or a call is not possible in that case.
"inv20u" and "inv20l" are variants of the "inv:minlat" strategy.  In the case
that the inverse calculation was nor separated from the multiply, they speed
up division where the dividend fits into 20 bits (plus sign where applicable),
by inserting a test to skip a number of operations in this case; this test
slows down the case of larger dividends.  inv20u assumes the case of a such
a small dividend to be unlikely, and inv20l assumes it to be likely.

@item -mdivsi3_libfunc=@var{name}
@opindex mdivsi3_libfunc=@var{name}
Set the name of the library function used for 32 bit signed division to
@var{name}.  This only affect the name used in the call and inv:call
division strategies, and the compiler will still expect the same
sets of input/output/clobbered registers as if this option was not present.

@item -madjust-unroll
@opindex madjust-unroll
Throttle unrolling to avoid thrashing target registers.
This option only has an effect if the gcc code base supports the
TARGET_ADJUST_UNROLL_MAX target hook.

@item -mindexed-addressing
@opindex mindexed-addressing
Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
This is only safe if the hardware and/or OS implement 32 bit wrap-around
semantics for the indexed addressing mode.  The architecture allows the
implementation of processors with 64 bit MMU, which the OS could use to
get 32 bit addressing, but since no current hardware implementation supports
this or any other way to make the indexed addressing mode safe to use in
the 32 bit ABI, the default is -mno-indexed-addressing.

@item -mgettrcost=@var{number}
@opindex mgettrcost=@var{number}
Set the cost assumed for the gettr instruction to @var{number}.
The default is 2 if @option{-mpt-fixed} is in effect, 100 otherwise.

@item -mpt-fixed
@opindex mpt-fixed
Assume pt* instructions won't trap.  This will generally generate better
scheduled code, but is unsafe on current hardware.  The current architecture
definition says that ptabs and ptrel trap when the target anded with 3 is 3.
This has the unintentional effect of making it unsafe to schedule ptabs /
ptrel before a branch, or hoist it out of a loop.  For example,
__do_global_ctors, a part of libgcc that runs constructors at program
startup, calls functions in a list which is delimited by -1.  With the
-mpt-fixed option, the ptabs will be done before testing against -1.
That means that all the constructors will be run a bit quicker, but when
the loop comes to the end of the list, the program crashes because ptabs
loads -1 into a target register.  Since this option is unsafe for any
hardware implementing the current architecture specification, the default
is -mno-pt-fixed.  Unless the user specifies a specific cost with
@option{-mgettrcost}, -mno-pt-fixed also implies @option{-mgettrcost=100};
this deters register allocation using target registers for storing
ordinary integers.

@item -minvalid-symbols
@opindex minvalid-symbols
Assume symbols might be invalid.  Ordinary function symbols generated by
the compiler will always be valid to load with movi/shori/ptabs or
movi/shori/ptrel, but with assembler and/or linker tricks it is possible
to generate symbols that will cause ptabs / ptrel to trap.
This option is only meaningful when @option{-mno-pt-fixed} is in effect.
It will then prevent cross-basic-block cse, hoisting and most scheduling
of symbol loads.  The default is @option{-mno-invalid-symbols}.
@end table

@node SPARC Options
@subsection SPARC Options
@cindex SPARC options

These @samp{-m} options are supported on the SPARC:

@table @gcctabopt
@item -mno-app-regs
@itemx -mapp-regs
@opindex mno-app-regs
@opindex mapp-regs
Specify @option{-mapp-regs} to generate output using the global registers
2 through 4, which the SPARC SVR4 ABI reserves for applications.  This
is the default.

To be fully SVR4 ABI compliant at the cost of some performance loss,
specify @option{-mno-app-regs}.  You should compile libraries and system
software with this option.

@item -mfpu
@itemx -mhard-float
@opindex mfpu
@opindex mhard-float
Generate output containing floating point instructions.  This is the
default.

@item -mno-fpu
@itemx -msoft-float
@opindex mno-fpu
@opindex msoft-float
Generate output containing library calls for floating point.
@strong{Warning:} the requisite libraries are not available for all SPARC
targets.  Normally the facilities of the machine's usual C compiler are
used, but this cannot be done directly in cross-compilation.  You must make
your own arrangements to provide suitable library functions for
cross-compilation.  The embedded targets @samp{sparc-*-aout} and
@samp{sparclite-*-*} do provide software floating point support.

@option{-msoft-float} changes the calling convention in the output file;
therefore, it is only useful if you compile @emph{all} of a program with
this option.  In particular, you need to compile @file{libgcc.a}, the
library that comes with GCC, with @option{-msoft-float} in order for
this to work.

@item -mhard-quad-float
@opindex mhard-quad-float
Generate output containing quad-word (long double) floating point
instructions.

@item -msoft-quad-float
@opindex msoft-quad-float
Generate output containing library calls for quad-word (long double)
floating point instructions.  The functions called are those specified
in the SPARC ABI@.  This is the default.

As of this writing, there are no SPARC implementations that have hardware
support for the quad-word floating point instructions.  They all invoke
a trap handler for one of these instructions, and then the trap handler
emulates the effect of the instruction.  Because of the trap handler overhead,
this is much slower than calling the ABI library routines.  Thus the
@option{-msoft-quad-float} option is the default.

@item -mno-unaligned-doubles
@itemx -munaligned-doubles
@opindex mno-unaligned-doubles
@opindex munaligned-doubles
Assume that doubles have 8 byte alignment.  This is the default.

With @option{-munaligned-doubles}, GCC assumes that doubles have 8 byte
alignment only if they are contained in another type, or if they have an
absolute address.  Otherwise, it assumes they have 4 byte alignment.
Specifying this option avoids some rare compatibility problems with code
generated by other compilers.  It is not the default because it results
in a performance loss, especially for floating point code.

@item -mno-faster-structs
@itemx -mfaster-structs
@opindex mno-faster-structs
@opindex mfaster-structs
With @option{-mfaster-structs}, the compiler assumes that structures
should have 8 byte alignment.  This enables the use of pairs of
@code{ldd} and @code{std} instructions for copies in structure
assignment, in place of twice as many @code{ld} and @code{st} pairs.
However, the use of this changed alignment directly violates the SPARC
ABI@.  Thus, it's intended only for use on targets where the developer
acknowledges that their resulting code will not be directly in line with
the rules of the ABI@.

@item -mimpure-text
@opindex mimpure-text
@option{-mimpure-text}, used in addition to @option{-shared}, tells
the compiler to not pass @option{-z text} to the linker when linking a
shared object.  Using this option, you can link position-dependent
code into a shared object.

@option{-mimpure-text} suppresses the ``relocations remain against
allocatable but non-writable sections'' linker error message.
However, the necessary relocations will trigger copy-on-write, and the
shared object is not actually shared across processes.  Instead of
using @option{-mimpure-text}, you should compile all source code with
@option{-fpic} or @option{-fPIC}.

This option is only available on SunOS and Solaris.

@item -mcpu=@var{cpu_type}
@opindex mcpu
Set the instruction set, register set, and instruction scheduling parameters
for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
@samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x},
@samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc},
@samp{ultrasparc3}, and @samp{niagara}.

Default instruction scheduling parameters are used for values that select
an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
@samp{sparclite}, @samp{sparclet}, @samp{v9}.

Here is a list of each supported architecture and their supported
implementations.

@smallexample
    v7:             cypress
    v8:             supersparc, hypersparc
    sparclite:      f930, f934, sparclite86x
    sparclet:       tsc701
    v9:             ultrasparc, ultrasparc3, niagara
@end smallexample

By default (unless configured otherwise), GCC generates code for the V7
variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
additionally optimizes it for the Cypress CY7C602 chip, as used in the
SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
SPARCStation 1, 2, IPX etc.

With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
architecture.  The only difference from V7 code is that the compiler emits
the integer multiply and integer divide instructions which exist in SPARC-V8
but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
2000 series.

With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
the SPARC architecture.  This adds the integer multiply, integer divide step
and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
With @option{-mcpu=f930}, the compiler additionally optimizes it for the
Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@.  With
@option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
MB86934 chip, which is the more recent SPARClite with FPU@.

With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
optimizes it for the TEMIC SPARClet chip.

With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
architecture.  This adds 64-bit integer and floating-point move instructions,
3 additional floating-point condition code registers and conditional move
instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
@option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
@option{-mcpu=niagara}, the compiler additionally optimizes it for
Sun UltraSPARC T1 chips.

@item -mtune=@var{cpu_type}
@opindex mtune
Set the instruction scheduling parameters for machine type
@var{cpu_type}, but do not set the instruction set or register set that the
option @option{-mcpu=@var{cpu_type}} would.

The same values for @option{-mcpu=@var{cpu_type}} can be used for
@option{-mtune=@var{cpu_type}}, but the only useful values are those
that select a particular cpu implementation.  Those are @samp{cypress},
@samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
@samp{ultrasparc3}, and @samp{niagara}.

@item -mv8plus
@itemx -mno-v8plus
@opindex mv8plus
@opindex mno-v8plus
With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@.  The
difference from the V8 ABI is that the global and out registers are
considered 64-bit wide.  This is enabled by default on Solaris in 32-bit
mode for all SPARC-V9 processors.

@item -mvis
@itemx -mno-vis
@opindex mvis
@opindex mno-vis
With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
Visual Instruction Set extensions.  The default is @option{-mno-vis}.
@end table

These @samp{-m} options are supported in addition to the above
on SPARC-V9 processors in 64-bit environments:

@table @gcctabopt
@item -mlittle-endian
@opindex mlittle-endian
Generate code for a processor running in little-endian mode.  It is only
available for a few configurations and most notably not on Solaris and Linux.

@item -m32
@itemx -m64
@opindex m32
@opindex m64
Generate code for a 32-bit or 64-bit environment.
The 32-bit environment sets int, long and pointer to 32 bits.
The 64-bit environment sets int to 32 bits and long and pointer
to 64 bits.

@item -mcmodel=medlow
@opindex mcmodel=medlow
Generate code for the Medium/Low code model: 64-bit addresses, programs
must be linked in the low 32 bits of memory.  Programs can be statically
or dynamically linked.

@item -mcmodel=medmid
@opindex mcmodel=medmid
Generate code for the Medium/Middle code model: 64-bit addresses, programs
must be linked in the low 44 bits of memory, the text and data segments must
be less than 2GB in size and the data segment must be located within 2GB of
the text segment.

@item -mcmodel=medany
@opindex mcmodel=medany
Generate code for the Medium/Anywhere code model: 64-bit addresses, programs
may be linked anywhere in memory, the text and data segments must be less
than 2GB in size and the data segment must be located within 2GB of the
text segment.

@item -mcmodel=embmedany
@opindex mcmodel=embmedany
Generate code for the Medium/Anywhere code model for embedded systems:
64-bit addresses, the text and data segments must be less than 2GB in
size, both starting anywhere in memory (determined at link time).  The
global register %g4 points to the base of the data segment.  Programs
are statically linked and PIC is not supported.

@item -mstack-bias
@itemx -mno-stack-bias
@opindex mstack-bias
@opindex mno-stack-bias
With @option{-mstack-bias}, GCC assumes that the stack pointer, and
frame pointer if present, are offset by @minus{}2047 which must be added back
when making stack frame references.  This is the default in 64-bit mode.
Otherwise, assume no such offset is present.
@end table

These switches are supported in addition to the above on Solaris:

@table @gcctabopt
@item -threads
@opindex threads
Add support for multithreading using the Solaris threads library.  This
option sets flags for both the preprocessor and linker.  This option does
not affect the thread safety of object code produced by the compiler or
that of libraries supplied with it.

@item -pthreads
@opindex pthreads
Add support for multithreading using the POSIX threads library.  This
option sets flags for both the preprocessor and linker.  This option does
not affect the thread safety of object code produced  by the compiler or
that of libraries supplied with it.

@item -pthread
@opindex pthread
This is a synonym for @option{-pthreads}.
@end table

@node System V Options
@subsection Options for System V

These additional options are available on System V Release 4 for
compatibility with other compilers on those systems:

@table @gcctabopt
@item -G
@opindex G
Create a shared object.
It is recommended that @option{-symbolic} or @option{-shared} be used instead.

@item -Qy
@opindex Qy
Identify the versions of each tool used by the compiler, in a
@code{.ident} assembler directive in the output.

@item -Qn
@opindex Qn
Refrain from adding @code{.ident} directives to the output file (this is
the default).

@item -YP,@var{dirs}
@opindex YP
Search the directories @var{dirs}, and no others, for libraries
specified with @option{-l}.

@item -Ym,@var{dir}
@opindex Ym
Look in the directory @var{dir} to find the M4 preprocessor.
The assembler uses this option.
@c This is supposed to go with a -Yd for predefined M4 macro files, but
@c the generic assembler that comes with Solaris takes just -Ym.
@end table

@node TMS320C3x/C4x Options
@subsection TMS320C3x/C4x Options
@cindex TMS320C3x/C4x Options

These @samp{-m} options are defined for TMS320C3x/C4x implementations:

@table @gcctabopt

@item -mcpu=@var{cpu_type}
@opindex mcpu
Set the instruction set, register set, and instruction scheduling
parameters for machine type @var{cpu_type}.  Supported values for
@var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and
@samp{c44}.  The default is @samp{c40} to generate code for the
TMS320C40.

@item -mbig-memory
@itemx -mbig
@itemx -msmall-memory
@itemx -msmall
@opindex mbig-memory
@opindex mbig
@opindex msmall-memory
@opindex msmall
Generates code for the big or small memory model.  The small memory
model assumed that all data fits into one 64K word page.  At run-time
the data page (DP) register must be set to point to the 64K page
containing the .bss and .data program sections.  The big memory model is
the default and requires reloading of the DP register for every direct
memory access.

@item -mbk
@itemx -mno-bk
@opindex mbk
@opindex mno-bk
Allow (disallow) allocation of general integer operands into the block
count register BK@.

@item -mdb
@itemx -mno-db
@opindex mdb
@opindex mno-db
Enable (disable) generation of code using decrement and branch,
DBcond(D), instructions.  This is enabled by default for the C4x.  To be
on the safe side, this is disabled for the C3x, since the maximum
iteration count on the C3x is @math{2^{23} + 1} (but who iterates loops more than
@math{2^{23}} times on the C3x?).  Note that GCC will try to reverse a loop so
that it can utilize the decrement and branch instruction, but will give
up if there is more than one memory reference in the loop.  Thus a loop
where the loop counter is decremented can generate slightly more
efficient code, in cases where the RPTB instruction cannot be utilized.

@item -mdp-isr-reload
@itemx -mparanoid
@opindex mdp-isr-reload
@opindex mparanoid
Force the DP register to be saved on entry to an interrupt service
routine (ISR), reloaded to point to the data section, and restored on
exit from the ISR@.  This should not be required unless someone has
violated the small memory model by modifying the DP register, say within
an object library.

@item -mmpyi
@itemx -mno-mpyi
@opindex mmpyi
@opindex mno-mpyi
For the C3x use the 24-bit MPYI instruction for integer multiplies
instead of a library call to guarantee 32-bit results.  Note that if one
of the operands is a constant, then the multiplication will be performed
using shifts and adds.  If the @option{-mmpyi} option is not specified for the C3x,
then squaring operations are performed inline instead of a library call.

@item -mfast-fix
@itemx -mno-fast-fix
@opindex mfast-fix
@opindex mno-fast-fix
The C3x/C4x FIX instruction to convert a floating point value to an
integer value chooses the nearest integer less than or equal to the
floating point value rather than to the nearest integer.  Thus if the
floating point number is negative, the result will be incorrectly
truncated an additional code is necessary to detect and correct this
case.  This option can be used to disable generation of the additional
code required to correct the result.

@item -mrptb
@itemx -mno-rptb
@opindex mrptb
@opindex mno-rptb
Enable (disable) generation of repeat block sequences using the RPTB
instruction for zero overhead looping.  The RPTB construct is only used
for innermost loops that do not call functions or jump across the loop
boundaries.  There is no advantage having nested RPTB loops due to the
overhead required to save and restore the RC, RS, and RE registers.
This is enabled by default with @option{-O2}.

@item -mrpts=@var{count}
@itemx -mno-rpts
@opindex mrpts
@opindex mno-rpts
Enable (disable) the use of the single instruction repeat instruction
RPTS@.  If a repeat block contains a single instruction, and the loop
count can be guaranteed to be less than the value @var{count}, GCC will
emit a RPTS instruction instead of a RPTB@.  If no value is specified,
then a RPTS will be emitted even if the loop count cannot be determined
at compile time.  Note that the repeated instruction following RPTS does
not have to be reloaded from memory each iteration, thus freeing up the
CPU buses for operands.  However, since interrupts are blocked by this
instruction, it is disabled by default.

@item -mloop-unsigned
@itemx -mno-loop-unsigned
@opindex mloop-unsigned
@opindex mno-loop-unsigned
The maximum iteration count when using RPTS and RPTB (and DB on the C40)
is @math{2^{31} + 1} since these instructions test if the iteration count is
negative to terminate the loop.  If the iteration count is unsigned
there is a possibility than the @math{2^{31} + 1} maximum iteration count may be
exceeded.  This switch allows an unsigned iteration count.

@item -mti
@opindex mti
Try to emit an assembler syntax that the TI assembler (asm30) is happy
with.  This also enforces compatibility with the API employed by the TI
C3x C compiler.  For example, long doubles are passed as structures
rather than in floating point registers.

@item -mregparm
@itemx -mmemparm
@opindex mregparm
@opindex mmemparm
Generate code that uses registers (stack) for passing arguments to functions.
By default, arguments are passed in registers where possible rather
than by pushing arguments on to the stack.

@item -mparallel-insns
@itemx -mno-parallel-insns
@opindex mparallel-insns
@opindex mno-parallel-insns
Allow the generation of parallel instructions.  This is enabled by
default with @option{-O2}.

@item -mparallel-mpy
@itemx -mno-parallel-mpy
@opindex mparallel-mpy
@opindex mno-parallel-mpy
Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
provided @option{-mparallel-insns} is also specified.  These instructions have
tight register constraints which can pessimize the code generation
of large functions.

@end table

@node V850 Options
@subsection V850 Options
@cindex V850 Options

These @samp{-m} options are defined for V850 implementations:

@table @gcctabopt
@item -mlong-calls
@itemx -mno-long-calls
@opindex mlong-calls
@opindex mno-long-calls
Treat all calls as being far away (near).  If calls are assumed to be
far away, the compiler will always load the functions address up into a
register, and call indirect through the pointer.

@item -mno-ep
@itemx -mep
@opindex mno-ep
@opindex mep
Do not optimize (do optimize) basic blocks that use the same index
pointer 4 or more times to copy pointer into the @code{ep} register, and
use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
option is on by default if you optimize.

@item -mno-prolog-function
@itemx -mprolog-function
@opindex mno-prolog-function
@opindex mprolog-function
Do not use (do use) external functions to save and restore registers
at the prologue and epilogue of a function.  The external functions
are slower, but use less code space if more than one function saves
the same number of registers.  The @option{-mprolog-function} option
is on by default if you optimize.

@item -mspace
@opindex mspace
Try to make the code as small as possible.  At present, this just turns
on the @option{-mep} and @option{-mprolog-function} options.

@item -mtda=@var{n}
@opindex mtda
Put static or global variables whose size is @var{n} bytes or less into
the tiny data area that register @code{ep} points to.  The tiny data
area can hold up to 256 bytes in total (128 bytes for byte references).

@item -msda=@var{n}
@opindex msda
Put static or global variables whose size is @var{n} bytes or less into
the small data area that register @code{gp} points to.  The small data
area can hold up to 64 kilobytes.

@item -mzda=@var{n}
@opindex mzda
Put static or global variables whose size is @var{n} bytes or less into
the first 32 kilobytes of memory.

@item -mv850
@opindex mv850
Specify that the target processor is the V850.

@item -mbig-switch
@opindex mbig-switch
Generate code suitable for big switch tables.  Use this option only if
the assembler/linker complain about out of range branches within a switch
table.

@item -mapp-regs
@opindex mapp-regs
This option will cause r2 and r5 to be used in the code generated by
the compiler.  This setting is the default.

@item -mno-app-regs
@opindex mno-app-regs
This option will cause r2 and r5 to be treated as fixed registers.

@item -mv850e1
@opindex mv850e1
Specify that the target processor is the V850E1.  The preprocessor
constants @samp{__v850e1__} and @samp{__v850e__} will be defined if
this option is used.

@item -mv850e
@opindex mv850e
Specify that the target processor is the V850E@.  The preprocessor
constant @samp{__v850e__} will be defined if this option is used.

If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
are defined then a default target processor will be chosen and the
relevant @samp{__v850*__} preprocessor constant will be defined.

The preprocessor constants @samp{__v850} and @samp{__v851__} are always
defined, regardless of which processor variant is the target.

@item -mdisable-callt
@opindex mdisable-callt
This option will suppress generation of the CALLT instruction for the
v850e and v850e1 flavors of the v850 architecture.  The default is
@option{-mno-disable-callt} which allows the CALLT instruction to be used.

@end table

@node VAX Options
@subsection VAX Options
@cindex VAX options

These @samp{-m} options are defined for the VAX:

@table @gcctabopt
@item -munix
@opindex munix
Do not output certain jump instructions (@code{aobleq} and so on)
that the Unix assembler for the VAX cannot handle across long
ranges.

@item -mgnu
@opindex mgnu
Do output those jump instructions, on the assumption that you
will assemble with the GNU assembler.

@item -mg
@opindex mg
Output code for g-format floating point numbers instead of d-format.
@end table

@node x86-64 Options
@subsection x86-64 Options
@cindex x86-64 options

These are listed under @xref{i386 and x86-64 Options}.

@node Xstormy16 Options
@subsection Xstormy16 Options
@cindex Xstormy16 Options

These options are defined for Xstormy16:

@table @gcctabopt
@item -msim
@opindex msim
Choose startup files and linker script suitable for the simulator.
@end table

@node Xtensa Options
@subsection Xtensa Options
@cindex Xtensa Options

These options are supported for Xtensa targets:

@table @gcctabopt
@item -mconst16
@itemx -mno-const16
@opindex mconst16
@opindex mno-const16
Enable or disable use of @code{CONST16} instructions for loading
constant values.  The @code{CONST16} instruction is currently not a
standard option from Tensilica.  When enabled, @code{CONST16}
instructions are always used in place of the standard @code{L32R}
instructions.  The use of @code{CONST16} is enabled by default only if
the @code{L32R} instruction is not available.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Enable or disable use of fused multiply/add and multiply/subtract
instructions in the floating-point option.  This has no effect if the
floating-point option is not also enabled.  Disabling fused multiply/add
and multiply/subtract instructions forces the compiler to use separate
instructions for the multiply and add/subtract operations.  This may be
desirable in some cases where strict IEEE 754-compliant results are
required: the fused multiply add/subtract instructions do not round the
intermediate result, thereby producing results with @emph{more} bits of
precision than specified by the IEEE standard.  Disabling fused multiply
add/subtract instructions also ensures that the program output is not
sensitive to the compiler's ability to combine multiply and add/subtract
operations.

@item -mtext-section-literals
@itemx -mno-text-section-literals
@opindex mtext-section-literals
@opindex mno-text-section-literals
Control the treatment of literal pools.  The default is
@option{-mno-text-section-literals}, which places literals in a separate
section in the output file.  This allows the literal pool to be placed
in a data RAM/ROM, and it also allows the linker to combine literal
pools from separate object files to remove redundant literals and
improve code size.  With @option{-mtext-section-literals}, the literals
are interspersed in the text section in order to keep them as close as
possible to their references.  This may be necessary for large assembly
files.

@item -mtarget-align
@itemx -mno-target-align
@opindex mtarget-align
@opindex mno-target-align
When this option is enabled, GCC instructs the assembler to
automatically align instructions to reduce branch penalties at the
expense of some code density.  The assembler attempts to widen density
instructions to align branch targets and the instructions following call
instructions.  If there are not enough preceding safe density
instructions to align a target, no widening will be performed.  The
default is @option{-mtarget-align}.  These options do not affect the
treatment of auto-aligned instructions like @code{LOOP}, which the
assembler will always align, either by widening density instructions or
by inserting no-op instructions.

@item -mlongcalls
@itemx -mno-longcalls
@opindex mlongcalls
@opindex mno-longcalls
When this option is enabled, GCC instructs the assembler to translate
direct calls to indirect calls unless it can determine that the target
of a direct call is in the range allowed by the call instruction.  This
translation typically occurs for calls to functions in other source
files.  Specifically, the assembler translates a direct @code{CALL}
instruction into an @code{L32R} followed by a @code{CALLX} instruction.
The default is @option{-mno-longcalls}.  This option should be used in
programs where the call target can potentially be out of range.  This
option is implemented in the assembler, not the compiler, so the
assembly code generated by GCC will still show direct call
instructions---look at the disassembled object code to see the actual
instructions.  Note that the assembler will use an indirect call for
every cross-file call, not just those that really will be out of range.
@end table

@node zSeries Options
@subsection zSeries Options
@cindex zSeries options

These are listed under @xref{S/390 and zSeries Options}.
@c APPLE LOCAL prune man page
@end ignore

@node Code Gen Options
@section Options for Code Generation Conventions
@cindex code generation conventions
@cindex options, code generation
@cindex run-time options

These machine-independent options control the interface conventions
used in code generation.

Most of them have both positive and negative forms; the negative form
of @option{-ffoo} would be @option{-fno-foo}.  In the table below, only
one of the forms is listed---the one which is not the default.  You
can figure out the other form by either removing @samp{no-} or adding
it.

@table @gcctabopt
@item -fbounds-check
@opindex fbounds-check
For front-ends that support it, generate additional code to check that
indices used to access arrays are within the declared range.  This is
currently only supported by the Java and Fortran front-ends, where
this option defaults to true and false respectively.

@c APPLE LOCAL prune man page 5547358
@ignore
@item -ftrapv
@opindex ftrapv
This option generates traps for signed overflow on addition, subtraction,
multiplication operations.
@c APPLE LOCAL prune man page 5547358
@end ignore

@item -fwrapv
@opindex fwrapv
This option instructs the compiler to assume that signed arithmetic
overflow of addition, subtraction and multiplication wraps around
using twos-complement representation.  This flag enables some optimizations
and disables others.  This option is enabled by default for the Java
front-end, as required by the Java language specification.

@item -fexceptions
@opindex fexceptions
Enable exception handling.  Generates extra code needed to propagate
exceptions.  For some targets, this implies GCC will generate frame
unwind information for all functions, which can produce significant data
size overhead, although it does not affect execution.  If you do not
specify this option, GCC will enable it by default for languages like
C++ which normally require exception handling, and disable it for
languages like C that do not normally require it.  However, you may need
to enable this option when compiling C code that needs to interoperate
properly with exception handlers written in C++.  You may also wish to
disable this option if you are compiling older C++ programs that don't
use exception handling.

@item -fnon-call-exceptions
@opindex fnon-call-exceptions
Generate code that allows trapping instructions to throw exceptions.
Note that this requires platform-specific runtime support that does
not exist everywhere.  Moreover, it only allows @emph{trapping}
instructions to throw exceptions, i.e.@: memory references or floating
point instructions.  It does not allow exceptions to be thrown from
arbitrary signal handlers such as @code{SIGALRM}.

@item -funwind-tables
@opindex funwind-tables
Similar to @option{-fexceptions}, except that it will just generate any needed
static data, but will not affect the generated code in any other way.
You will normally not enable this option; instead, a language processor
that needs this handling would enable it on your behalf.

@item -fasynchronous-unwind-tables
@opindex fasynchronous-unwind-tables
Generate unwind table in dwarf2 format, if supported by target machine.  The
table is exact at each instruction boundary, so it can be used for stack
unwinding from asynchronous events (such as debugger or garbage collector).

@item -fpcc-struct-return
@opindex fpcc-struct-return
Return ``short'' @code{struct} and @code{union} values in memory like
longer ones, rather than in registers.  This convention is less
efficient, but it has the advantage of allowing intercallability between
GCC-compiled files and files compiled with other compilers, particularly
the Portable C Compiler (pcc).

The precise convention for returning structures in memory depends
on the target configuration macros.

Short structures and unions are those whose size and alignment match
that of some integer type.

@strong{Warning:} code compiled with the @option{-fpcc-struct-return}
switch is not binary compatible with code compiled with the
@option{-freg-struct-return} switch.
Use it to conform to a non-default application binary interface.

@item -freg-struct-return
@opindex freg-struct-return
Return @code{struct} and @code{union} values in registers when possible.
This is more efficient for small structures than
@option{-fpcc-struct-return}.

If you specify neither @option{-fpcc-struct-return} nor
@option{-freg-struct-return}, GCC defaults to whichever convention is
standard for the target.  If there is no standard convention, GCC
defaults to @option{-fpcc-struct-return}, except on targets where GCC is
the principal compiler.  In those cases, we can choose the standard, and
we chose the more efficient register return alternative.

@strong{Warning:} code compiled with the @option{-freg-struct-return}
switch is not binary compatible with code compiled with the
@option{-fpcc-struct-return} switch.
Use it to conform to a non-default application binary interface.

@item -fshort-enums
@opindex fshort-enums
Allocate to an @code{enum} type only as many bytes as it needs for the
declared range of possible values.  Specifically, the @code{enum} type
will be equivalent to the smallest integer type which has enough room.

@strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
code that is not binary compatible with code generated without that switch.
Use it to conform to a non-default application binary interface.

@item -fshort-double
@opindex fshort-double
Use the same size for @code{double} as for @code{float}.

@strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
code that is not binary compatible with code generated without that switch.
Use it to conform to a non-default application binary interface.

@item -fshort-wchar
@opindex fshort-wchar
Override the underlying type for @samp{wchar_t} to be @samp{short
unsigned int} instead of the default for the target.  This option is
useful for building programs to run under WINE@.

@strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
code that is not binary compatible with code generated without that switch.
Use it to conform to a non-default application binary interface.

@item -fno-common
@opindex fno-common
In C, allocate even uninitialized global variables in the data section of the
object file, rather than generating them as common blocks.  This has the
effect that if the same variable is declared (without @code{extern}) in
two different compilations, you will get an error when you link them.
The only reason this might be useful is if you wish to verify that the
program will work on other systems which always work this way.

@item -fno-ident
@opindex fno-ident
Ignore the @samp{#ident} directive.

@item -finhibit-size-directive
@opindex finhibit-size-directive
Don't output a @code{.size} assembler directive, or anything else that
would cause trouble if the function is split in the middle, and the
two halves are placed at locations far apart in memory.  This option is
used when compiling @file{crtstuff.c}; you should not need to use it
for anything else.

@item -fverbose-asm
@opindex fverbose-asm
Put extra commentary information in the generated assembly code to
make it more readable.  This option is generally only of use to those
who actually need to read the generated assembly code (perhaps while
debugging the compiler itself).

@option{-fno-verbose-asm}, the default, causes the
extra information to be omitted and is useful when comparing two assembler
files.

@item -fpic
@opindex fpic
@cindex global offset table
@cindex PIC
Generate position-independent code (PIC) suitable for use in a shared
library, if supported for the target machine.  Such code accesses all
constant addresses through a global offset table (GOT)@.  The dynamic
loader resolves the GOT entries when the program starts (the dynamic
loader is not part of GCC; it is part of the operating system).  If
the GOT size for the linked executable exceeds a machine-specific
maximum size, you get an error message from the linker indicating that
@option{-fpic} does not work; in that case, recompile with @option{-fPIC}
instead.  (These maximums are 8k on the SPARC and 32k
on the m68k and RS/6000.  The 386 has no such limit.)

Position-independent code requires special support, and therefore works
only on certain machines.  For the 386, GCC supports PIC for System V
but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
position-independent.

When this flag is set, the macros @code{__pic__} and @code{__PIC__}
are defined to 1.

@item -fPIC
@opindex fPIC
If supported for the target machine, emit position-independent code,
suitable for dynamic linking and avoiding any limit on the size of the
global offset table.  This option makes a difference on the m68k,
PowerPC and SPARC@.

Position-independent code requires special support, and therefore works
only on certain machines.

When this flag is set, the macros @code{__pic__} and @code{__PIC__}
are defined to 2.

@c APPLE LOCAL begin manual
@option{-fPIC} is the default on Darwin and Mac OS X.
@c APPLE LOCAL end manual

@item -fpie
@itemx -fPIE
@opindex fpie
@opindex fPIE
These options are similar to @option{-fpic} and @option{-fPIC}, but
generated position independent code can be only linked into executables.
Usually these options are used when @option{-pie} GCC option will be
used during linking.

@item -fno-jump-tables
@opindex fno-jump-tables
Do not use jump tables for switch statements even where it would be
more efficient than other code generation strategies.  This option is
of use in conjunction with @option{-fpic} or @option{-fPIC} for
building code which forms part of a dynamic linker and cannot
reference the address of a jump table.  On some targets, jump tables
do not require a GOT and this option is not needed.

@item -ffixed-@var{reg}
@opindex ffixed
Treat the register named @var{reg} as a fixed register; generated code
should never refer to it (except perhaps as a stack pointer, frame
pointer or in some other fixed role).

@var{reg} must be the name of a register.  The register names accepted
are machine-specific and are defined in the @code{REGISTER_NAMES}
macro in the machine description macro file.

This flag does not have a negative form, because it specifies a
three-way choice.

@item -fcall-used-@var{reg}
@opindex fcall-used
Treat the register named @var{reg} as an allocable register that is
clobbered by function calls.  It may be allocated for temporaries or
variables that do not live across a call.  Functions compiled this way
will not save and restore the register @var{reg}.

It is an error to used this flag with the frame pointer or stack pointer.
Use of this flag for other registers that have fixed pervasive roles in
the machine's execution model will produce disastrous results.

This flag does not have a negative form, because it specifies a
three-way choice.

@item -fcall-saved-@var{reg}
@opindex fcall-saved
Treat the register named @var{reg} as an allocable register saved by
functions.  It may be allocated even for temporaries or variables that
live across a call.  Functions compiled this way will save and restore
the register @var{reg} if they use it.

It is an error to used this flag with the frame pointer or stack pointer.
Use of this flag for other registers that have fixed pervasive roles in
the machine's execution model will produce disastrous results.

A different sort of disaster will result from the use of this flag for
a register in which function values may be returned.

This flag does not have a negative form, because it specifies a
three-way choice.

@item -fpack-struct[=@var{n}]
@opindex fpack-struct
Without a value specified, pack all structure members together without
holes.  When a value is specified (which must be a small power of two), pack
structure members according to this value, representing the maximum
alignment (that is, objects with default alignment requirements larger than
this will be output potentially unaligned at the next fitting location.

@strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
code that is not binary compatible with code generated without that switch.
Additionally, it makes the code suboptimal.
Use it to conform to a non-default application binary interface.

@item -finstrument-functions
@opindex finstrument-functions
Generate instrumentation calls for entry and exit to functions.  Just
after function entry and just before function exit, the following
profiling functions will be called with the address of the current
function and its call site.  (On some platforms,
@code{__builtin_return_address} does not work beyond the current
function, so the call site information may not be available to the
profiling functions otherwise.)

@smallexample
void __cyg_profile_func_enter (void *this_fn,
                               void *call_site);
void __cyg_profile_func_exit  (void *this_fn,
                               void *call_site);
@end smallexample

The first argument is the address of the start of the current function,
which may be looked up exactly in the symbol table.

This instrumentation is also done for functions expanded inline in other
functions.  The profiling calls will indicate where, conceptually, the
inline function is entered and exited.  This means that addressable
versions of such functions must be available.  If all your uses of a
function are expanded inline, this may mean an additional expansion of
code size.  If you use @samp{extern inline} in your C code, an
addressable version of such functions must be provided.  (This is
normally the case anyways, but if you get lucky and the optimizer always
expands the functions inline, you might have gotten away without
providing static copies.)

A function may be given the attribute @code{no_instrument_function}, in
which case this instrumentation will not be done.  This can be used, for
example, for the profiling functions listed above, high-priority
interrupt routines, and any functions from which the profiling functions
cannot safely be called (perhaps signal handlers, if the profiling
routines generate output or allocate memory).

@item -fstack-check
@opindex fstack-check
Generate code to verify that you do not go beyond the boundary of the
stack.  You should specify this flag if you are running in an
environment with multiple threads, but only rarely need to specify it in
a single-threaded environment since stack overflow is automatically
detected on nearly all systems if there is only one stack.

Note that this switch does not actually cause checking to be done; the
operating system must do that.  The switch causes generation of code
to ensure that the operating system sees the stack being extended.

@item -fstack-limit-register=@var{reg}
@itemx -fstack-limit-symbol=@var{sym}
@itemx -fno-stack-limit
@opindex fstack-limit-register
@opindex fstack-limit-symbol
@opindex fno-stack-limit
Generate code to ensure that the stack does not grow beyond a certain value,
either the value of a register or the address of a symbol.  If the stack
would grow beyond the value, a signal is raised.  For most targets,
the signal is raised before the stack overruns the boundary, so
it is possible to catch the signal without taking special precautions.

For instance, if the stack starts at absolute address @samp{0x80000000}
and grows downwards, you can use the flags
@option{-fstack-limit-symbol=__stack_limit} and
@option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
of 128KB@.  Note that this may only work with the GNU linker.

@cindex aliasing of parameters
@cindex parameters, aliased
@item -fargument-alias
@itemx -fargument-noalias
@itemx -fargument-noalias-global
@itemx -fargument-noalias-anything
@opindex fargument-alias
@opindex fargument-noalias
@opindex fargument-noalias-global
@opindex fargument-noalias-anything
Specify the possible relationships among parameters and between
parameters and global data.

@option{-fargument-alias} specifies that arguments (parameters) may
alias each other and may alias global storage.@*
@option{-fargument-noalias} specifies that arguments do not alias
each other, but may alias global storage.@*
@option{-fargument-noalias-global} specifies that arguments do not
alias each other and do not alias global storage.
@option{-fargument-noalias-anything} specifies that arguments do not
alias any other storage.

Each language will automatically use whatever option is required by
the language standard.  You should not need to use these options yourself.

@item -fleading-underscore
@opindex fleading-underscore
This option and its counterpart, @option{-fno-leading-underscore}, forcibly
change the way C symbols are represented in the object file.  One use
is to help link with legacy assembly code.

@strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
generate code that is not binary compatible with code generated without that
switch.  Use it to conform to a non-default application binary interface.
Not all targets provide complete support for this switch.

@item -ftls-model=@var{model}
Alter the thread-local storage model to be used (@pxref{Thread-Local}).
The @var{model} argument should be one of @code{global-dynamic},
@code{local-dynamic}, @code{initial-exec} or @code{local-exec}.

The default without @option{-fpic} is @code{initial-exec}; with
@option{-fpic} the default is @code{global-dynamic}.

@item -fvisibility=@var{default|internal|hidden|protected}
@opindex fvisibility
Set the default ELF image symbol visibility to the specified option---all
symbols will be marked with this unless overridden within the code.
Using this feature can very substantially improve linking and
load times of shared object libraries, produce more optimized
code, provide near-perfect API export and prevent symbol clashes.
It is @strong{strongly} recommended that you use this in any shared objects
you distribute.

Despite the nomenclature, @code{default} always means public ie;
available to be linked against from outside the shared object.
@code{protected} and @code{internal} are pretty useless in real-world
usage so the only other commonly used option will be @code{hidden}.
The default if @option{-fvisibility} isn't specified is
@code{default}, i.e., make every
symbol public---this causes the same behavior as previous versions of
GCC@.

A good explanation of the benefits offered by ensuring ELF
symbols have the correct visibility is given by ``How To Write
Shared Libraries'' by Ulrich Drepper (which can be found at
@w{@uref{http://people.redhat.com/~drepper/}})---however a superior
solution made possible by this option to marking things hidden when
the default is public is to make the default hidden and mark things
public.  This is the norm with DLL's on Windows and with @option{-fvisibility=hidden}
and @code{__attribute__ ((visibility("default")))} instead of
@code{__declspec(dllexport)} you get almost identical semantics with
identical syntax.  This is a great boon to those working with
cross-platform projects.

For those adding visibility support to existing code, you may find
@samp{#pragma GCC visibility} of use.  This works by you enclosing
the declarations you wish to set visibility for with (for example)
@samp{#pragma GCC visibility push(hidden)} and
@samp{#pragma GCC visibility pop}.
Bear in mind that symbol visibility should be viewed @strong{as
part of the API interface contract} and thus all new code should
always specify visibility when it is not the default ie; declarations
only for use within the local DSO should @strong{always} be marked explicitly
as hidden as so to avoid PLT indirection overheads---making this
abundantly clear also aids readability and self-documentation of the code.
Note that due to ISO C++ specification requirements, operator new and
operator delete must always be of default visibility.

Be aware that headers from outside your project, in particular system
headers and headers from any other library you use, may not be
expecting to be compiled with visibility other than the default.  You
may need to explicitly say @samp{#pragma GCC visibility push(default)}
before including any such headers.

@samp{extern} declarations are not affected by @samp{-fvisibility}, so
a lot of code can be recompiled with @samp{-fvisibility=hidden} with
no modifications.  However, this means that calls to @samp{extern}
functions with no explicit visibility will use the PLT, so it is more
effective to use @samp{__attribute ((visibility))} and/or
@samp{#pragma GCC visibility} to tell the compiler which @samp{extern}
declarations should be treated as hidden.

Note that @samp{-fvisibility} does affect C++ vague linkage
entities. This means that, for instance, an exception class that will
be thrown between DSOs must be explicitly marked with default
visibility so that the @samp{type_info} nodes will be unified between
the DSOs.

An overview of these techniques, their benefits and how to use them
is at @w{@uref{http://gcc.gnu.org/wiki/Visibility}}.

@end table

@c man end

@node Environment Variables
@section Environment Variables Affecting GCC
@cindex environment variables

@c man begin ENVIRONMENT
This section describes several environment variables that affect how GCC
operates.  Some of them work by specifying directories or prefixes to use
when searching for various kinds of files.  Some are used to specify other
aspects of the compilation environment.

Note that you can also specify places to search using options such as
@option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
take precedence over places specified using environment variables, which
in turn take precedence over those specified by the configuration of GCC@.
@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
GNU Compiler Collection (GCC) Internals}.

@table @env
@item LANG
@itemx LC_CTYPE
@c @itemx LC_COLLATE
@itemx LC_MESSAGES
@c @itemx LC_MONETARY
@c @itemx LC_NUMERIC
@c @itemx LC_TIME
@itemx LC_ALL
@findex LANG
@findex LC_CTYPE
@c @findex LC_COLLATE
@findex LC_MESSAGES
@c @findex LC_MONETARY
@c @findex LC_NUMERIC
@c @findex LC_TIME
@findex LC_ALL
@cindex locale
These environment variables control the way that GCC uses
localization information that allow GCC to work with different
national conventions.  GCC inspects the locale categories
@env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
so.  These locale categories can be set to any value supported by your
installation.  A typical value is @samp{en_GB.UTF-8} for English in the United
Kingdom encoded in UTF-8.

The @env{LC_CTYPE} environment variable specifies character
classification.  GCC uses it to determine the character boundaries in
a string; this is needed for some multibyte encodings that contain quote
and escape characters that would otherwise be interpreted as a string
end or escape.

The @env{LC_MESSAGES} environment variable specifies the language to
use in diagnostic messages.

If the @env{LC_ALL} environment variable is set, it overrides the value
of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
and @env{LC_MESSAGES} default to the value of the @env{LANG}
environment variable.  If none of these variables are set, GCC
defaults to traditional C English behavior.

@item TMPDIR
@findex TMPDIR
If @env{TMPDIR} is set, it specifies the directory to use for temporary
files.  GCC uses temporary files to hold the output of one stage of
compilation which is to be used as input to the next stage: for example,
the output of the preprocessor, which is the input to the compiler
proper.

@item GCC_EXEC_PREFIX
@findex GCC_EXEC_PREFIX
If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
names of the subprograms executed by the compiler.  No slash is added
when this prefix is combined with the name of a subprogram, but you can
specify a prefix that ends with a slash if you wish.

If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out
an appropriate prefix to use based on the pathname it was invoked with.

If GCC cannot find the subprogram using the specified prefix, it
tries looking in the usual places for the subprogram.

The default value of @env{GCC_EXEC_PREFIX} is
@file{@var{prefix}/lib/gcc/} where @var{prefix} is the value
of @code{prefix} when you ran the @file{configure} script.

Other prefixes specified with @option{-B} take precedence over this prefix.

This prefix is also used for finding files such as @file{crt0.o} that are
used for linking.

In addition, the prefix is used in an unusual way in finding the
directories to search for header files.  For each of the standard
directories whose name normally begins with @samp{/usr/local/lib/gcc}
(more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
replacing that beginning with the specified prefix to produce an
alternate directory name.  Thus, with @option{-Bfoo/}, GCC will search
@file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
These alternate directories are searched first; the standard directories
come next.

@item COMPILER_PATH
@findex COMPILER_PATH
The value of @env{COMPILER_PATH} is a colon-separated list of
directories, much like @env{PATH}.  GCC tries the directories thus
specified when searching for subprograms, if it can't find the
subprograms using @env{GCC_EXEC_PREFIX}.

@item LIBRARY_PATH
@findex LIBRARY_PATH
The value of @env{LIBRARY_PATH} is a colon-separated list of
directories, much like @env{PATH}.  When configured as a native compiler,
GCC tries the directories thus specified when searching for special
linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
using GCC also uses these directories when searching for ordinary
libraries for the @option{-l} option (but directories specified with
@option{-L} come first).

@item LANG
@findex LANG
@cindex locale definition
This variable is used to pass locale information to the compiler.  One way in
which this information is used is to determine the character set to be used
when character literals, string literals and comments are parsed in C and C++.
When the compiler is configured to allow multibyte characters,
the following values for @env{LANG} are recognized:

@table @samp
@item C-JIS
Recognize JIS characters.
@item C-SJIS
Recognize SJIS characters.
@item C-EUCJP
Recognize EUCJP characters.
@end table

If @env{LANG} is not defined, or if it has some other value, then the
compiler will use mblen and mbtowc as defined by the default locale to
recognize and translate multibyte characters.

@c APPLE LOCAL begin ARM 5905142
@item MACOSX_DEPLOYMENT_TARGET
@itemx IPHONEOS_DEPLOYMENT_TARGET
These variables are used to set the target OS version, as described
for command-line options @option{-mmacosx-version-min} and
@option{-miphoneos-version-min}.  Only one OS version can be specified
per architecture, with @env{MACOSX_DEPLOYMENT_TARGET} taking precedence
on non-ARM targets and @env{IPHONEOS_DEPLOYMENT_TARGET} taking
precedence on ARM targets.

If either command-line option @option{-mmacosx-version-min} or
@option{-miphoneos-version-min} is specified, both of these
environment variables are ignored.
@c APPLE LOCAL end ARM 5905142
@end table

@noindent
Some additional environments variables affect the behavior of the
preprocessor.

@include cppenv.texi

@c man end

@node Precompiled Headers
@section Using Precompiled Headers
@cindex precompiled headers
@cindex speed of compilation

Often large projects have many header files that are included in every
source file.  The time the compiler takes to process these header files
over and over again can account for nearly all of the time required to
build the project.  To make builds faster, GCC allows users to
`precompile' a header file; then, if builds can use the precompiled
header file they will be much faster.

To create a precompiled header file, simply compile it as you would any
other file, if necessary using the @option{-x} option to make the driver
treat it as a C or C++ header file.  You will probably want to use a
tool like @command{make} to keep the precompiled header up-to-date when
the headers it contains change.

A precompiled header file will be searched for when @code{#include} is
seen in the compilation.  As it searches for the included file
(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
compiler looks for a precompiled header in each directory just before it
looks for the include file in that directory.  The name searched for is
the name specified in the @code{#include} with @samp{.gch} appended.  If
the precompiled header file can't be used, it is ignored.

For instance, if you have @code{#include "all.h"}, and you have
@file{all.h.gch} in the same directory as @file{all.h}, then the
precompiled header file will be used if possible, and the original
header will be used otherwise.

Alternatively, you might decide to put the precompiled header file in a
directory and use @option{-I} to ensure that directory is searched
before (or instead of) the directory containing the original header.
Then, if you want to check that the precompiled header file is always
used, you can put a file of the same name as the original header in this
directory containing an @code{#error} command.

This also works with @option{-include}.  So yet another way to use
precompiled headers, good for projects not designed with precompiled
header files in mind, is to simply take most of the header files used by
a project, include them from another header file, precompile that header
file, and @option{-include} the precompiled header.  If the header files
have guards against multiple inclusion, they will be skipped because
they've already been included (in the precompiled header).

If you need to precompile the same header file for different
languages, targets, or compiler options, you can instead make a
@emph{directory} named like @file{all.h.gch}, and put each precompiled
header in the directory, perhaps using @option{-o}.  It doesn't matter
what you call the files in the directory, every precompiled header in
the directory will be considered.  The first precompiled header
encountered in the directory that is valid for this compilation will
be used; they're searched in no particular order.

There are many other possibilities, limited only by your imagination,
good sense, and the constraints of your build system.

A precompiled header file can be used only when these conditions apply:

@itemize
@item
Only one precompiled header can be used in a particular compilation.

@item
A precompiled header can't be used once the first C token is seen.  You
can have preprocessor directives before a precompiled header; you can
even include a precompiled header from inside another header, so long as
there are no C tokens before the @code{#include}.

@item
The precompiled header file must be produced for the same language as
the current compilation.  You can't use a C precompiled header for a C++
compilation.

@item
The precompiled header file must have been produced by the same compiler
binary as the current compilation is using.

@item
Any macros defined before the precompiled header is included must
either be defined in the same way as when the precompiled header was
generated, or must not affect the precompiled header, which usually
means that they don't appear in the precompiled header at all.

The @option{-D} option is one way to define a macro before a
precompiled header is included; using a @code{#define} can also do it.
There are also some options that define macros implicitly, like
@option{-O} and @option{-Wdeprecated}; the same rule applies to macros
defined this way.

@item If debugging information is output when using the precompiled
header, using @option{-g} or similar, the same kind of debugging information
must have been output when building the precompiled header.  However,
a precompiled header built using @option{-g} can be used in a compilation
when no debugging information is being output.

@item The same @option{-m} options must generally be used when building
and using the precompiled header.  @xref{Submodel Options},
for any cases where this rule is relaxed.

@item Each of the following options must be the same when building and using
the precompiled header:

@gccoptlist{-fexceptions -funit-at-a-time}

@item
Some other command-line options starting with @option{-f},
@option{-p}, or @option{-O} must be defined in the same way as when
the precompiled header was generated.  At present, it's not clear
which options are safe to change and which are not; the safest choice
is to use exactly the same options when generating and using the
precompiled header.  The following are known to be safe:

@gccoptlist{-fmessage-length= -fpreprocessed
-fsched-interblock -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous
-fsched-verbose=<number> -fschedule-insns -fvisibility=
-pedantic-errors}

@end itemize

For all of these except the last, the compiler will automatically
ignore the precompiled header if the conditions aren't met.  If you
find an option combination that doesn't work and doesn't cause the
precompiled header to be ignored, please consider filing a bug report,
see @ref{Bugs}.

If you do use differing options when generating and using the
precompiled header, the actual behavior will be a mixture of the
behavior for the options.  For instance, if you use @option{-g} to
generate the precompiled header but not when using it, you may or may
not get debugging information for routines in the precompiled header.

@node Running Protoize
@section Running Protoize

The program @code{protoize} is an optional part of GCC@.  You can use
it to add prototypes to a program, thus converting the program to ISO
C in one respect.  The companion program @code{unprotoize} does the
reverse: it removes argument types from any prototypes that are found.

When you run these programs, you must specify a set of source files as
command line arguments.  The conversion programs start out by compiling
these files to see what functions they define.  The information gathered
about a file @var{foo} is saved in a file named @file{@var{foo}.X}.

After scanning comes actual conversion.  The specified files are all
eligible to be converted; any files they include (whether sources or
just headers) are eligible as well.

But not all the eligible files are converted.  By default,
@code{protoize} and @code{unprotoize} convert only source and header
files in the current directory.  You can specify additional directories
whose files should be converted with the @option{-d @var{directory}}
option.  You can also specify particular files to exclude with the
@option{-x @var{file}} option.  A file is converted if it is eligible, its
directory name matches one of the specified directory names, and its
name within the directory has not been excluded.

Basic conversion with @code{protoize} consists of rewriting most
function definitions and function declarations to specify the types of
the arguments.  The only ones not rewritten are those for varargs
functions.

@code{protoize} optionally inserts prototype declarations at the
beginning of the source file, to make them available for any calls that
precede the function's definition.  Or it can insert prototype
declarations with block scope in the blocks where undeclared functions
are called.

Basic conversion with @code{unprotoize} consists of rewriting most
function declarations to remove any argument types, and rewriting
function definitions to the old-style pre-ISO form.

Both conversion programs print a warning for any function declaration or
definition that they can't convert.  You can suppress these warnings
with @option{-q}.

The output from @code{protoize} or @code{unprotoize} replaces the
original source file.  The original file is renamed to a name ending
with @samp{.save} (for DOS, the saved filename ends in @samp{.sav}
without the original @samp{.c} suffix).  If the @samp{.save} (@samp{.sav}
for DOS) file already exists, then the source file is simply discarded.

@code{protoize} and @code{unprotoize} both depend on GCC itself to
scan the program and collect information about the functions it uses.
So neither of these programs will work until GCC is installed.

Here is a table of the options you can use with @code{protoize} and
@code{unprotoize}.  Each option works with both programs unless
otherwise stated.

@table @code
@item -B @var{directory}
Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
usual directory (normally @file{/usr/local/lib}).  This file contains
prototype information about standard system functions.  This option
applies only to @code{protoize}.

@item -c @var{compilation-options}
Use @var{compilation-options} as the options when running @command{gcc} to
produce the @samp{.X} files.  The special option @option{-aux-info} is
always passed in addition, to tell @command{gcc} to write a @samp{.X} file.

Note that the compilation options must be given as a single argument to
@code{protoize} or @code{unprotoize}.  If you want to specify several
@command{gcc} options, you must quote the entire set of compilation options
to make them a single word in the shell.

There are certain @command{gcc} arguments that you cannot use, because they
would produce the wrong kind of output.  These include @option{-g},
@option{-O}, @option{-c}, @option{-S}, and @option{-o} If you include these in
the @var{compilation-options}, they are ignored.

@item -C
Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file
systems) instead of @samp{.c}.  This is convenient if you are converting
a C program to C++.  This option applies only to @code{protoize}.

@item -g
Add explicit global declarations.  This means inserting explicit
declarations at the beginning of each source file for each function
that is called in the file and was not declared.  These declarations
precede the first function definition that contains a call to an
undeclared function.  This option applies only to @code{protoize}.

@item -i @var{string}
Indent old-style parameter declarations with the string @var{string}.
This option applies only to @code{protoize}.

@code{unprotoize} converts prototyped function definitions to old-style
function definitions, where the arguments are declared between the
argument list and the initial @samp{@{}.  By default, @code{unprotoize}
uses five spaces as the indentation.  If you want to indent with just
one space instead, use @option{-i " "}.

@item -k
Keep the @samp{.X} files.  Normally, they are deleted after conversion
is finished.

@item -l
Add explicit local declarations.  @code{protoize} with @option{-l} inserts
a prototype declaration for each function in each block which calls the
function without any declaration.  This option applies only to
@code{protoize}.

@item -n
Make no real changes.  This mode just prints information about the conversions
that would have been done without @option{-n}.

@item -N
Make no @samp{.save} files.  The original files are simply deleted.
Use this option with caution.

@item -p @var{program}
Use the program @var{program} as the compiler.  Normally, the name
@file{gcc} is used.

@item -q
Work quietly.  Most warnings are suppressed.

@item -v
Print the version number, just like @option{-v} for @command{gcc}.
@end table

If you need special compiler options to compile one of your program's
source files, then you should generate that file's @samp{.X} file
specially, by running @command{gcc} on that source file with the
appropriate options and the option @option{-aux-info}.  Then run
@code{protoize} on the entire set of files.  @code{protoize} will use
the existing @samp{.X} file because it is newer than the source file.
For example:

@smallexample
gcc -Dfoo=bar file1.c -aux-info file1.X
protoize *.c
@end smallexample

@noindent
You need to include the special files along with the rest in the
@code{protoize} command, even though their @samp{.X} files already
exist, because otherwise they won't get converted.

@xref{Protoize Caveats}, for more information on how to use
@code{protoize} successfully.
