@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 the @samp{llvm-gcc} compiler.
Similarly, @samp{c++} and @samp{g++} are links to @samp{llvm-g++}.

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}.
@c LLVM LOCAL begin no-canonical-prefixes
@gccoptlist{-c  -S  -E  -o @var{file}  -combine  -no-canonical-prefixes  @gol
-pipe  -pass-exit-codes  @gol
@c LLVM LOCAL end no-canonical-prefixes
@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
@c APPLE LOCAL blocks 7205047 5811887
-fno-asm -fno-blocks -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  -force_load  -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.

@c LLVM LOCAL begin no-canonical-prefixes
@item -no-canonical-prefixes
@opindex no-canonical-prefixes
Do not expand any symbolic links, resolve references to @samp{/../}
or @samp{/./}, or make the path absolute when generating a relative
prefix.
@c LLVM LOCAL end no-canonical-prefixes

@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.  This
option is not supported for ARM targets.  (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.

@c APPLE LOCAL begin blocks 7205047 5811887
@item -fno-blocks
@opindex fno-blocks
Disable the use of blocks.  In @option{-std=c99} mode, blocks are
turned off by default.  @option{-fblocks} can be used to re-enable the
feature, if off.  Runtime support for blocks first appeared in Mac OS
X 10.6.  When targeting 10.6 (see @option{-mmacosx-version-min}) and
later, the extension is on by default.
@c APPLE LOCAL end blocks 7205047 5811887

@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 -O1
@opindex O1
Optimize.  Optimizing compilation takes somewhat more time, and a lot
more memory for a large function.

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

@option{-O1} 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{-O1} also turns on @option{-fomit-frame-pointer} on machines
where doing so does not interfere with debugging.

@item -O
@opindex O
@itemx -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{-O1}, this option increases both compilation time
and the performance of the generated code.

LLVM-GCC's @option{-O} is a synonym for @option{-O2}.

@option{-O2} turns on all optimization flags specified by @option{-O1}.  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.
@c LLVM LOCAL begin
This option has no effect in llvm-gcc.  The always_inline and noinline
parameters are honored, but none of the other inlining parameters have any
effect; there is no specific user control on the amount of inlining done.  The
compiler will do less inlining at -O2 or -Os than at -O3.
@c LLVM LOCAL end

@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 -fno-honor-nans
@opindex fno-honor-nans
Allow optimizations for floating-point arithmetic that assume that arguments and results are not NaNs.
The default is -fhonor-nans.

@item -fno-honor-infinites
@opindex fno-honor-infinites
Allow optimizations for floating-point arithmetic that assume that arguments and results are not +-Infs.
The default is -fhonor-infinites.

@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}.  

With Apple's version of GCC, this option is effectively replaced by
@option{-isysroot}, which you should use instead of @option{--sysroot}.
For other (non-Apple) versions of GCC,
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)}.

@c APPLE LOCAL begin v7 thumb is default
@item -mthumb
@opindex mthumb
Generate code for the 16-bit Thumb instruction set.  For ARMv7, the default
is to use the THUMB2 instruction set. For all other architectures, the default
is to use the 32-bit ARM instruction set. The ARM instruction set may be
explicitly selected via @option{-mno-thumb} or @option{-marm}.
@c APPLE LOCAL end v7 thumb is default

@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.

@c APPLE LOCAL begin 7519550 force local
@item -force_load  @var{library_name}
@opindex force_load
Loads all members of named static archive library.
See man ld(1) for more information.
@c APPLE LOCAL end 7519550 force local

@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.
