@c Copyright (C) 1988,89,92,93,94,95,96,97,1998 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.

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

When you invoke GNU CC, it normally does preprocessing, compilation,
assembly and linking.  The ``overall options'' allow you to stop this
process at an intermediate stage.  For example, the @samp{-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 GNU CC 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 @code{gcc} program accepts options and file names as operands.  Many
options have multiletter names; therefore multiple single-letter options
may @emph{not} be grouped: @samp{-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 @samp{-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, @samp{-fforce-mem},
@samp{-fstrength-reduce}, @samp{-Wformat} and so on.  Most of
these have both positive and negative forms; the negative form of
@samp{-ffoo} would be @samp{-fno-foo}.  This manual documents
only one of these two forms, whichever one is not the default.

@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++.
* 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.
* Target Options::      Running a cross-compiler, or an old version of GNU CC.
* 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 GNU CC.
* Running Protoize::    Automatically adding or removing function prototypes.
@end menu

@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}.
@smallexample
-c  -S  -E  -o @var{file}  -pipe  -v  -x @var{language}
@end smallexample

@item C Language Options
@xref{C Dialect Options,,Options Controlling C Dialect}.
@smallexample
-ansi  -fallow-single-precision  -fcond-mismatch  -fno-asm
-fno-builtin  -ffreestanding  -fhosted  -fsigned-bitfields  -fsigned-char
-funsigned-bitfields  -funsigned-char  -fwritable-strings
-traditional  -traditional-cpp  -trigraphs
@end smallexample

@item C++ Language Options
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
@smallexample
-fall-virtual  -fdollars-in-identifiers  -felide-constructors
-fenum-int-equiv  -fexternal-templates  -ffor-scope  
-fno-for-scope  -fhandle-signatures  -fmemoize-lookups  
-fname-mangling-version-@var{n}  -fno-default-inline  
-fno-gnu-keywords -fnonnull-objects -fguiding-decls
-foperator-names  -fno-optional-diags -fstrict-prototype  -fthis-is-variable
-ftemplate-depth-@var{n}  -nostdinc++  -traditional  +e@var{n}
@end smallexample

@item Warning Options
@xref{Warning Options,,Options to Request or Suppress Warnings}.
@smallexample
-fsyntax-only  -pedantic  -pedantic-errors
-w  -W  -Wall  -Waggregate-return  -Wbad-function-cast
-Wcast-align  -Wcast-qual  -Wchar-subscript  -Wcomment
-Wconversion  -Werror  -Wformat
-Wid-clash-@var{len}  -Wimplicit -Wimplicit-int 
-Wimplicit-function-declaration  -Wimport
-Werror-implicit-function-declaration  -Winline
-Wlarger-than-@var{len}  -Wlong-long
-Wmain  -Wmissing-declarations
-Wmissing-prototypes  -Wmultichar  -Wnested-externs  -Wno-import  
-Wold-style-cast  -Woverloaded-virtual  -Wparentheses
-Wpointer-arith  -Wredundant-decls  -Wreorder  -Wreturn-type
-Wshadow  -Wsign-compare  -Wstrict-prototypes  -Wswitch
-Wsynth  -Wtemplate-debugging  -Wtraditional  -Wtrigraphs
-Wundef  -Wuninitialized  -Wunused  -Wwrite-strings
-Wunknown-pragmas
@end smallexample

@item Debugging Options
@xref{Debugging Options,,Options for Debugging Your Program or GCC}.
@smallexample
-a  -ax  -d@var{letters}  -fpretend-float
-fprofile-arcs  -ftest-coverage
-g  -g@var{level}  -gcoff  -gdwarf  -gdwarf-1  -gdwarf-1+  -gdwarf-2
-ggdb  -gstabs  -gstabs+  -gxcoff  -gxcoff+
-p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name
-print-prog-name=@var{program}  -print-search-dirs  -save-temps
@end smallexample

@item Optimization Options
@xref{Optimize Options,,Options that Control Optimization}.
@smallexample
-fbranch-probabilities  -foptimize-register-moves
-fcaller-saves  -fcse-follow-jumps  -fcse-skip-blocks
-fdelayed-branch   -fexpensive-optimizations
-ffast-math  -ffloat-store  -fforce-addr  -fforce-mem
-ffunction-sections  -fgcse -finline-functions
-fkeep-inline-functions  -fno-default-inline
-fno-defer-pop  -fno-function-cse
-fno-inline  -fno-peephole  -fomit-frame-pointer -fregmove
-frerun-cse-after-loop  -frerun-loop-opt -fschedule-insns
-fschedule-insns2  -fstrength-reduce  -fthread-jumps
-funroll-all-loops  -funroll-loops
-fmove-all-movables  -freduce-all-givs -fstrict-aliasing
-O  -O0  -O1  -O2  -O3 -Os
@end smallexample

@item Preprocessor Options
@xref{Preprocessor Options,,Options Controlling the Preprocessor}.
@smallexample
-A@var{question}(@var{answer})  -C  -dD  -dM  -dN
-D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H
-idirafter @var{dir}
-include @var{file}  -imacros @var{file}
-iprefix @var{file}  -iwithprefix @var{dir}
-iwithprefixbefore @var{dir}  -isystem @var{dir}
-M  -MD  -MM  -MMD  -MG  -nostdinc  -P  -trigraphs
-undef  -U@var{macro}  -Wp,@var{option}
@end smallexample

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

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

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

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

@item Machine Dependent Options
@xref{Submodel Options,,Hardware Models and Configurations}.
@smallexample
@emph{M680x0 Options}
-m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
-m68060  -mcpu32 -m5200  -m68881  -mbitfield  -mc68000  -mc68020  
-mfpa -mnobitfield  -mrtd  -mshort  -msoft-float  
-malign-int

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

@emph{SPARC Options}
-mcpu=@var{cpu type}
-mtune=@var{cpu type}
-mcmodel=@var{code model}
-malign-jumps=@var{num}  -malign-loops=@var{num}
-malign-functions=@var{num}
-m32  -m64
-mapp-regs  -mbroken-saverestore  -mcypress  -mepilogue
-mflat  -mfpu  -mhard-float  -mhard-quad-float
-mimpure-text  -mlive-g0  -mno-app-regs  -mno-epilogue
-mno-flat  -mno-fpu  -mno-impure-text
-mno-stack-bias  -mno-unaligned-doubles
-msoft-float  -msoft-quad-float  -msparclite  -mstack-bias
-msupersparc  -munaligned-doubles  -mv8

@emph{Convex Options}
-mc1  -mc2  -mc32  -mc34  -mc38
-margcount  -mnoargcount
-mlong32  -mlong64
-mvolatile-cache  -mvolatile-nocache

@emph{AMD29K Options}
-m29000  -m29050  -mbw  -mnbw  -mdw  -mndw
-mlarge  -mnormal  -msmall
-mkernel-registers  -mno-reuse-arg-regs
-mno-stack-check  -mno-storem-bug
-mreuse-arg-regs  -msoft-float  -mstack-check
-mstorem-bug  -muser-registers

@emph{ARM Options}
-mapcs-frame -mno-apcs-frame
-mapcs-26 -mapcs-32
-mapcs-stack-check -mno-apcs-stack-check
-mapcs-float -mno-apcs-float
-mapcs-reentrant -mno-apcs-reentrant
-msched-prolog -mno-sched-prolog
-mlittle-endian -mbig-endian -mwords-little-endian
-mshort-load-bytes -mno-short-load-bytes -mshort-load-words -mno-short-load-words
-msoft-float -mhard-float -mfpe
-mthumb-interwork -mno-thumb-interwork
-mcpu= -march= -mfpe= 
-mstructure-size-boundary=
-mbsd -mxopen -mno-symrename

@emph{Thumb Options}
-mtpcs-frame -mno-tpcs-frame
-mtpcs-leaf-frame -mno-tpcs-leaf-frame
-mlittle-endian  -mbig-endian
-mthumb-interwork -mno-thumb-interwork
-mstructure-size-boundary=

@emph{MN10200 Options}
-mrelax

@emph{MN10300 Options}
-mmult-bug
-mno-mult-bug
-mrelax

@emph{M32R/D Options}
-mcode-model=@var{model type}  -msdata=@var{sdata type}
-G @var{num}

@emph{M88K Options}
-m88000  -m88100  -m88110  -mbig-pic
-mcheck-zero-division  -mhandle-large-shift
-midentify-revision  -mno-check-zero-division
-mno-ocs-debug-info  -mno-ocs-frame-position
-mno-optimize-arg-area  -mno-serialize-volatile
-mno-underscores  -mocs-debug-info
-mocs-frame-position  -moptimize-arg-area
-mserialize-volatile  -mshort-data-@var{num}  -msvr3
-msvr4  -mtrap-large-shift  -muse-div-instruction
-mversion-03.00  -mwarn-passed-structs

@emph{RS/6000 and PowerPC Options}
-mcpu=@var{cpu type}
-mtune=@var{cpu type}
-mpower  -mno-power  -mpower2  -mno-power2
-mpowerpc  -mno-powerpc
-mpowerpc-gpopt  -mno-powerpc-gpopt
-mpowerpc-gfxopt  -mno-powerpc-gfxopt
-mnew-mnemonics  -mno-new-mnemonics
-mfull-toc   -mminimal-toc  -mno-fop-in-toc  -mno-sum-in-toc
-maix64  -maix32  -mxl-call  -mno-xl-call  -mthreads  -mpe
-msoft-float  -mhard-float  -mmultiple  -mno-multiple
-mstring  -mno-string  -mupdate  -mno-update
-mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
-mstrict-align  -mno-strict-align  -mrelocatable
-mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
-mtoc  -mno-toc -mlittle  -mlittle-endian  -mbig  -mbig-endian
-mcall-aix  -mcall-sysv  -mprototype  -mno-prototype
-msim  -mmvme  -mads  -myellowknife  -memb -msdata
-msdata=@var{opt}  -G @var{num}

@emph{RT Options}
-mcall-lib-mul  -mfp-arg-in-fpregs  -mfp-arg-in-gregs
-mfull-fp-blocks  -mhc-struct-return  -min-line-mul
-mminimum-fp-blocks  -mnohc-struct-return

@emph{MIPS Options}
-mabicalls  -mcpu=@var{cpu type}  -membedded-data
-membedded-pic  -mfp32  -mfp64  -mgas  -mgp32  -mgp64
-mgpopt  -mhalf-pic  -mhard-float  -mint64  -mips1
-mips2  -mips3 -mips4 -mlong64  -mlong-calls  -mmemcpy
-mmips-as  -mmips-tfile  -mno-abicalls
-mno-embedded-data  -mno-embedded-pic
-mno-gpopt  -mno-long-calls
-mno-memcpy  -mno-mips-tfile  -mno-rnames  -mno-stats
-mrnames  -msoft-float
-m4650  -msingle-float  -mmad
-mstats  -EL  -EB  -G @var{num}  -nocpp
-mabi=32 -mabi=n32 -mabi=64 -mabi=eabi

@emph{i386 Options}
-mcpu=@var{cpu type}
-march=@var{cpu type}
-mieee-fp  -mno-fancy-math-387
-mno-fp-ret-in-387  -msoft-float  -msvr3-shlib
-mno-wide-multiply  -mrtd  -malign-double
-mreg-alloc=@var{list}  -mregparm=@var{num}
-malign-jumps=@var{num}  -malign-loops=@var{num}
-malign-functions=@var{num}

@emph{HPPA Options}
-mbig-switch  -mdisable-fpregs  -mdisable-indexing  
-mfast-indirect-calls -mgas  -mjump-in-delay  
-mlong-load-store  -mno-big-switch  -mno-disable-fpregs
-mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
-mno-jump-in-delay  -mno-long-load-store  
-mno-portable-runtime  -mno-soft-float  -mno-space  
-mno-space-regs  -msoft-float  -mpa-risc-1-0  
-mpa-risc-1-1  -mportable-runtime
-mschedule=@var{list}  -mspace  -mspace-regs

@emph{Intel 960 Options}
-m@var{cpu type}  -masm-compat  -mclean-linkage
-mcode-align  -mcomplex-addr  -mleaf-procedures
-mic-compat  -mic2.0-compat  -mic3.0-compat
-mintel-asm  -mno-clean-linkage  -mno-code-align
-mno-complex-addr  -mno-leaf-procedures
-mno-old-align  -mno-strict-align  -mno-tail-call
-mnumerics  -mold-align  -msoft-float  -mstrict-align
-mtail-call

@emph{DEC Alpha Options}
-mfp-regs  -mno-fp-regs -mno-soft-float  -msoft-float
-malpha-as -mgas
-mieee  -mieee-with-inexact  -mieee-conformant
-mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode}
-mtrap-precision=@var{mode}  -mbuild-constants
-mcpu=@var{cpu type}
-mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max
-mmemory-latency=@var{time}

@emph{Clipper Options}
-mc300  -mc400

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

@emph{SH Options}
-m1  -m2  -m3  -m3e  -mb  -ml  -mdalign -mrelax

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

@emph{ARC Options}
-EB  -EL
-mmangle-cpu  -mcpu=@var{cpu}  -mtext=@var{text section}
-mdata=@var{data section}  -mrodata=@var{readonly data section}

@emph{V850 Options}
-mlong-calls -mno-long-calls -mep -mno-ep
-mprolog-function -mno-prolog-function -mspace
-mtda=@var{n} -msda=@var{n} -mzda=@var{n}
-mv850 -mbig-switch
@end smallexample

@item Code Generation Options
@xref{Code Gen Options,,Options for Code Generation Conventions}.
@smallexample
-fcall-saved-@var{reg}  -fcall-used-@var{reg}
-fexceptions -ffixed-@var{reg}  -finhibit-size-directive
-fcheck-memory-usage  -fprefix-function-name
-fno-common  -fno-ident  -fno-gnu-linker
-fpcc-struct-return  -fpic  -fPIC
-freg-struct-return  -fshared-data  -fshort-enums
-fshort-double  -fvolatile  -fvolatile-global
-fverbose-asm -fpack-struct  -fstack-check  +e0  +e1
-fargument-alias  -fargument-noalias
-fargument-noalias-global
@end smallexample
@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++.
* 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.
* Target Options::      Running a cross-compiler, or an old version of GNU CC.
@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.  The first three
stages apply to an individual source file, and end by producing an
object file; 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 @code
@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 library
@file{libobjc.a} to make an Objective-C program work.

@item @var{file}.h
C header file (not to be compiled or linked).

@item @var{file}.cc
@itemx @var{file}.cxx
@itemx @var{file}.cpp
@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.

@item @var{file}.s
Assembler code.

@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

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

@table @code
@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 @samp{-x} option.  Possible values for @var{language} are:
@example
c  objective-c  c++
c-header  cpp-output  c++-cpp-output
assembler  assembler-with-cpp
@end example

@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 @samp{-x}
has not been used at all).
@end table

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

@table @code
@item -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
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
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}
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.

Since only one output file can be specified, it does not make sense to
use @samp{-o} when compiling more than one input file, unless you are
producing an executable file as output.

If @samp{-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}, and
all preprocessed C source on standard output.@refill

@item -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 -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.
@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}, or @samp{.cxx}; preprocessed C++ files use the
suffix @samp{.ii}.  GNU CC 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 @code{gcc}).

@findex g++
@findex c++
However, C++ programs often require class libraries as well as a
compiler that understands the C++ language---and under some
circumstances, you might want to compile programs from standard input,
or otherwise without a suffix that flags them as C++ programs.
@code{g++} is a program that calls GNU CC with the default language
set to C++, and automatically specifies linking against the C++
library.
@cindex @code{g++ 1.@var{xx}}
@cindex @code{g++}, separate compiler
@cindex @code{g++} older version
@footnote{Prior to release 2 of the compiler,
there was a separate @code{g++} compiler.  That version was based on GNU
CC, but not integrated with it.  Versions of @code{g++} with a
@samp{1.@var{xx}} version number---for example, @code{g++} version 1.37
or 1.42---are much less reliable than the versions integrated with GCC
2.  Moreover, combining G++ @samp{1.@var{xx}} with a version 2 GCC will
simply not work.} On many systems, the script @code{g++} is also
installed with the name @code{c++}.

@cindex invoking @code{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++ and Objective C) that the compiler accepts:

@table @code
@cindex ANSI support
@item -ansi
Support all ANSI standard C programs.

This turns off certain features of GNU C that are incompatible with ANSI
C, such as the @code{asm}, @code{inline} 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 ANSI trigraph feature, and it disables recognition of C++
style @samp{//} comments.

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

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

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

The functions @code{alloca}, @code{abort}, @code{exit}, and
@code{_exit} are not builtin functions when @samp{-ansi} is used.

@item -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.  @samp{-ansi} implies @samp{-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 @samp{-fno-gnu-keywords} flag instead, as it also disables the
other, C++-specific, extension keywords such as @code{headof}.

@item -fno-builtin
@cindex builtin functions
@findex abort
@findex abs
@findex alloca
@findex cos
@findex exit
@findex fabs
@findex ffs
@findex labs
@findex memcmp
@findex memcpy
@findex sin
@findex sqrt
@findex strcmp
@findex strcpy
@findex strlen
Don't recognize builtin functions that do not begin with `__builtin_'
as prefix.  Currently, the functions affected include @code{abort},
@code{abs}, @code{alloca}, @code{cos}, @code{exit}, @code{fabs},
@code{ffs}, @code{labs}, @code{memcmp}, @code{memcpy}, @code{sin},
@code{sqrt}, @code{strcmp}, @code{strcpy}, and @code{strlen}.

GCC normally generates special code to handle certain builtin 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.

The @samp{-ansi} option prevents @code{alloca} and @code{ffs} from being
builtin functions, since these functions do not have an ANSI standard
meaning.

@item -fhosted
@cindex hosted environment

Assert that compilation takes place in a hosted environment.  This implies
@samp{-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 @samp{-fno-freestanding}.

@item -ffreestanding
@cindex hosted environment

Assert that compilation takes place in a freestanding environment.  This
implies @samp{-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 @samp{-fno-hosted}.

@item -trigraphs
Support ANSI C trigraphs.  You don't want to know about this
brain-damage.  The @samp{-ansi} option implies @samp{-trigraphs}.

@cindex traditional C language
@cindex C language, traditional
@item -traditional
Attempt to support some aspects of traditional C compilers.
Specifically:

@itemize @bullet
@item
All @code{extern} declarations take effect globally even if they
are written inside of a function definition.  This includes implicit
declarations of functions.

@item
The newer keywords @code{typeof}, @code{inline}, @code{signed}, @code{const}
and @code{volatile} are not recognized.  (You can still use the
alternative keywords such as @code{__typeof__}, @code{__inline__}, and
so on.)

@item
Comparisons between pointers and integers are always allowed.

@item
Integer types @code{unsigned short} and @code{unsigned char} promote
to @code{unsigned int}.

@item
Out-of-range floating point literals are not an error.

@item
Certain constructs which ANSI regards as a single invalid preprocessing
number, such as @samp{0xe-0xd}, are treated as expressions instead.

@item
String ``constants'' are not necessarily constant; they are stored in
writable space, and identical looking constants are allocated
separately.  (This is the same as the effect of
@samp{-fwritable-strings}.)

@cindex @code{longjmp} and automatic variables
@item
All automatic variables not declared @code{register} are preserved by
@code{longjmp}.  Ordinarily, GNU C follows ANSI C: automatic variables
not declared @code{volatile} may be clobbered.

@item
@kindex \x
@kindex \a
@cindex escape sequences, traditional
The character escape sequences @samp{\x} and @samp{\a} evaluate as the
literal characters @samp{x} and @samp{a} respectively.  Without
@w{@samp{-traditional}}, @samp{\x} is a prefix for the hexadecimal
representation of a character, and @samp{\a} produces a bell.

@item
In C++ programs, assignment to @code{this} is permitted with
@samp{-traditional}.  (The option @samp{-fthis-is-variable} also has
this effect.)
@end itemize

You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
if your program uses names that are normally GNU C builtin functions for
other purposes of its own.

You cannot use @samp{-traditional} if you include any header files that
rely on ANSI C features.  Some vendors are starting to ship systems with
ANSI C header files and you cannot use @samp{-traditional} on such
systems to compile files that include any system headers.

The @samp{-traditional} option also enables @samp{-traditional-cpp},
which is described next.

@item -traditional-cpp
Attempt to support some aspects of traditional C preprocessors.
Specifically:

@itemize @bullet
@item
Comments convert to nothing at all, rather than to a space.  This allows
traditional token concatenation.

@item
In a preprocessing directive, the @samp{#} symbol must appear as the first
character of a line.

@item
Macro arguments are recognized within string constants in a macro
definition (and their values are stringified, though without additional
quote marks, when they appear in such a context).  The preprocessor
always considers a string constant to end at a newline.

@item
@cindex detecting @w{@samp{-traditional}}
The predefined macro @code{__STDC__} is not defined when you use
@samp{-traditional}, but @code{__GNUC__} is (since the GNU extensions
which @code{__GNUC__} indicates are not affected by
@samp{-traditional}).  If you need to write header files that work
differently depending on whether @samp{-traditional} is in use, by
testing both of these predefined macros you can distinguish four
situations: GNU C, traditional GNU C, other ANSI C compilers, and other
old C compilers.  The predefined macro @code{__STDC_VERSION__} is also
not defined when you use @samp{-traditional}.  @xref{Standard
Predefined,,Standard Predefined Macros,cpp.info,The C Preprocessor},
for more discussion of these and other predefined macros.

@item
@cindex string constants vs newline
@cindex newline vs string constants
The preprocessor considers a string constant to end at a newline (unless
the newline is escaped with @samp{\}).  (Without @w{@samp{-traditional}},
string constants can contain the newline character as typed.)
@end itemize

@item -fcond-mismatch
Allow conditional expressions with mismatched types in the second and
third arguments.  The value of such an expression is void.

@item -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
Let the type @code{char} be signed, like @code{signed char}.

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

You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
if your program uses names that are normally GNU C builtin functions for
other purposes of its own.

You cannot use @samp{-traditional} if you include any header files that
rely on ANSI C features.  Some vendors are starting to ship systems with
ANSI C header files and you cannot use @samp{-traditional} on such
systems to compile files that include any system headers.

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

However, when @samp{-traditional} is used, bitfields are all unsigned
no matter what.

@item -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.  The option @samp{-traditional} also has
this effect.

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

@item -fallow-single-precision
Do not promote single precision math operations to double precision,
even when compiling with @samp{-traditional}.

Traditional K&R C promotes all floating point operations to double
precision, regardless of the sizes of the operands.   On the
architecture for which you are compiling, single precision may be faster
than double precision.   If you must use @samp{-traditional}, but want
to use single precision operations when the operands are single
precision, use this option.   This option has no effect when compiling
with ANSI or GNU C conventions (the default).

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

@example
g++ -g -felide-constructors -O -c firstClass.C
@end example

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

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

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

@item -fall-virtual
Treat all possible member functions as virtual, implicitly.
All member functions (except for constructor functions and @code{new} or
@code{delete} member operators) are treated as virtual functions of the
class where they appear.

This does not mean that all calls to these member functions will be made
through the internal table of virtual functions.  Under some
circumstances, the compiler can determine that a call to a given virtual
function can be made directly; in these cases the calls are direct in
any case.

@item -fcheck-new
Check that the pointer returned by @code{operator new} is non-null
before attempting to modify the storage allocated.  The current Working
Paper requires that @code{operator new} never return a null pointer, so
this check is normally unnecessary.

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

@item -fdollars-in-identifiers
Accept @samp{$} in identifiers.  You can also explicitly prohibit use of
@samp{$} with the option @samp{-fno-dollars-in-identifiers}.  (GNU C allows
@samp{$} by default on most target systems, but there are a few exceptions.)
Traditional C allowed the character @samp{$} to form part of
identifiers.  However, ANSI C and C++ forbid @samp{$} in identifiers.

@item -fenum-int-equiv
Anachronistically permit implicit conversion of @code{int} to
enumeration types.  Current C++ allows conversion of @code{enum} to
@code{int}, but not the other way around.

@item -fexternal-templates
Cause template instantiations to obey @samp{#pragma interface} and
@samp{implementation}; template instances are emitted or not according
to the location of the template definition.  @xref{Template
Instantiation}, for more information.

This option is deprecated.

@item -falt-external-templates
Similar to -fexternal-templates, but template instances are emitted or
not according to the place where they are first instantiated.
@xref{Template Instantiation}, for more information.

This option is deprecated.

@item -ffor-scope
@itemx -fno-for-scope
If -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 draft C++ standard.
If -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 gcc, 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
Do not recognize @code{classof}, @code{headof}, @code{signature},
@code{sigof} or @code{typeof} as a keyword, so that code can use these
words as identifiers.  You can use the keywords @code{__classof__},
@code{__headof__}, @code{__signature__}, @code{__sigof__}, and
@code{__typeof__} instead.  @samp{-ansi} implies
@samp{-fno-gnu-keywords}.

@item -fguiding-decls
Treat a function declaration with the same type as a potential function
template instantiation as though it declares that instantiation, not a
normal function.  If a definition is given for the function later in the
translation unit (or another translation unit if the target supports
weak symbols), that definition will be used; otherwise the template will
be instantiated.  This behavior reflects the C++ language prior to
September 1996, when guiding declarations were removed.

This option implies @samp{-fname-mangling-version-0}, and will not work
with other name mangling versions.

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

@item -fhandle-signatures
Recognize the @code{signature} and @code{sigof} keywords for specifying
abstract types.  The default (@samp{-fno-handle-signatures}) is not to
recognize them.  @xref{C++ Signatures, Type Abstraction using
Signatures}.

@item -fhuge-objects
Support virtual function calls for objects that exceed the size
representable by a @samp{short int}.  Users should not use this flag by
default; if you need to use it, the compiler will tell you so.  If you
compile any of your code with this flag, you must compile @emph{all} of
your code with this flag (including the C++ library, if you use it).

This flag is not useful when compiling with -fvtable-thunks.

@item -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 -fmemoize-lookups
@itemx -fsave-memoized
Use heuristics to compile faster.  These heuristics are not enabled by
default, since they are only effective for certain input files.  Other
input files compile more slowly.

The first time the compiler must build a call to a member function (or
reference to a data member), it must (1) determine whether the class
implements member functions of that name; (2) resolve which member
function to call (which involves figuring out what sorts of type
conversions need to be made); and (3) check the visibility of the member
function to the caller.  All of this adds up to slower compilation.
Normally, the second time a call is made to that member function (or
reference to that data member), it must go through the same lengthy
process again.  This means that code like this:

@smallexample
cout << "This " << p << " has " << n << " legs.\n";
@end smallexample

@noindent
makes six passes through all three steps.  By using a software cache, a
``hit'' significantly reduces this cost.  Unfortunately, using the cache
introduces another layer of mechanisms which must be implemented, and so
incurs its own overhead.  @samp{-fmemoize-lookups} enables the software
cache.

Because access privileges (visibility) to members and member functions
may differ from one function context to the next, G++ may need to flush
the cache.  With the @samp{-fmemoize-lookups} flag, the cache is flushed
after every function that is compiled.  The @samp{-fsave-memoized} flag
enables the same software cache, but when the compiler determines that
the context of the last function compiled would yield the same access
privileges of the next function to compile, it preserves the cache.
This is most helpful when defining many member functions for the same
class: with the exception of member functions which are friends of other
classes, each member function has exactly the same access privileges as
every other, and the cache need not be flushed.

The code that implements these flags has rotted; you should probably
avoid using them.

@item -fstrict-prototype
Within an @samp{extern "C"} linkage specification, treat a function
declaration with no arguments, such as @samp{int foo ();}, as declaring
the function to take no arguments.  Normally, such a declaration means
that the function @code{foo} can take any combination of arguments, as
in C.  @samp{-pedantic} implies @samp{-fstrict-prototype} unless
overridden with @samp{-fno-strict-prototype}.

This flag no longer affects declarations with C++ linkage.

@item -fname-mangling-version-@var{n}
Control the way in which names are mangled.  Version 0 is compatible
with versions of g++ before 2.8.  Version 1 is the default.  Version 1
will allow correct mangling of function templates.  For example, 
version 0 mangling does not mangle foo<int, double> and foo<int, char>
given this declaration:

@example
template <class T, class U> void foo(T t);
@end example

@item -fno-nonnull-objects
Don't assume that a reference is initialized to refer to a valid object.
Although the current C++ Working Paper prohibits null references, some
old code may rely on them, and you can use @samp{-fno-nonnull-objects}
to turn on checking.

At the moment, the compiler only does this checking for conversions to
virtual base classes.

@item -foperator-names
Recognize the operator name keywords @code{and}, @code{bitand},
@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
synonyms for the symbols they refer to.  @samp{-ansi} implies
@samp{-foperator-names}.

@item -fno-optional-diags
Disable diagnostics that the standard says a compiler does not need to
issue.  Currently, this means the diagnostic for a name having multiple 
meanings within a class.

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

@item -fsquangle
@itemx -fno-squangle
@samp{-fsquangle} will enable a compressed form of name mangling for
identifiers. In particular, it helps to shorten very long names by recognizing
types and class names which occur more than once, replacing them with special
short ID codes.  This option also requires any C++ libraries being used to
be compiled with this option as well.  The compiler has this disabled (the
equivalent of @samp{-fno-squangle}) by default.

@item -fthis-is-variable
Permit assignment to @code{this}.  The incorporation of user-defined
free store management into C++ has made assignment to @samp{this} an
anachronism.  Therefore, by default it is invalid to assign to
@code{this} within a class member function; that is, GNU C++ treats
@samp{this} in a member function of class @code{X} as a non-lvalue of
type @samp{X *}.  However, for backwards compatibility, you can make it
valid with @samp{-fthis-is-variable}.

@item -fvtable-thunks
Use @samp{thunks} to implement the virtual function dispatch table
(@samp{vtable}).  The traditional (cfront-style) approach to
implementing vtables was to store a pointer to the function and two
offsets for adjusting the @samp{this} pointer at the call site.  Newer
implementations store a single pointer to a @samp{thunk} function which
does any necessary adjustment and then calls the target function.

This option also enables a heuristic for controlling emission of
vtables; if a class has any non-inline virtual functions, the vtable
will be emitted in the translation unit containing the first one of
those.

@item -ftemplate-depth-@var{n}
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 -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.)

@item -traditional
For C++ programs (in addition to the effects that apply to both C and
C++), this has the same effect as @samp{-fthis-is-variable}.
@xref{C Dialect Options,, Options Controlling C Dialect}.
@end table

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

@table @code
@item -fno-default-inline
Do not assume @samp{inline} for functions defined inside a class scope.
@xref{Optimize Options,,Options That Control Optimization}.

@item -Wold-style-cast
@itemx -Woverloaded-virtual
@itemx -Wtemplate-debugging
Warnings that apply only to C++ programs.  @xref{Warning
Options,,Options to Request or Suppress Warnings}.

@item -Weffc++
Warn about violation of some style rules from Effective C++ by Scott Myers.

@item +e@var{n}
Control how virtual function definitions are used, in a fashion
compatible with @code{cfront} 1.x.  @xref{Code Gen Options,,Options for
Code Generation Conventions}.
@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 @samp{-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, @samp{-Wno-implicit}.  This manual lists only one of the
two forms, whichever is not the default.

These options control the amount and kinds of warnings produced by GNU
CC:

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

@item -pedantic
Issue all the warnings demanded by strict ANSI C and ISO C++;
reject all programs that use forbidden extensions.

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

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

This option is not intended to be @i{useful}; it exists only to satisfy
pedants who would otherwise claim that GNU CC fails to support the ANSI
standard.

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

A feature to report any failure to conform to ANSI C might be useful in
some instances, but would require considerable additional work and would
be quite different from @samp{-pedantic}.  We recommend, rather, that
users take advantage of the extensions of GNU C and disregard the
limitations of other compilers.  Aside from certain supercomputers and
obsolete small machines, there is less and less reason ever to use any
other C compiler other than for bootstrapping GNU CC.

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

@item -w
Inhibit all warning messages.

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

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

@item -Wcomment
Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
comment, or whenever a Backslash-Newline appears in a @samp{//} comment.

@item -Wformat
Check calls to @code{printf} and @code{scanf}, etc., to make sure that
the arguments supplied have types appropriate to the format string
specified.

@item -Wimplicit-int
Warn when a declaration does not specify a type.

@item -Wimplicit-function-declaration
@itemx -Werror-implicit-function-declaration
Give a warning (or error) whenever a function is used before being
declared.

@item -Wimplicit
Same as @samp{-Wimplicit-int} and @samp{-Wimplicit-function-}@*
@samp{declaration}.

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

@item -Wmultichar
Warn if a multicharacter constant (@samp{'FOOF'}) 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.
  
@item -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.

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
@{
  if (a)
    if (b)
      foo ();
  else
    bar ();
@}
@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, GNU C 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
@{
  if (a)
    @{
      if (b)
        foo ();
      else
        bar ();
    @}
@}
@end smallexample

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

@item -Wswitch
Warn whenever a @code{switch} statement has an index of enumeral 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.

@item -Wtrigraphs
Warn if any trigraphs are encountered (assuming they are enabled).

@item -Wunused
Warn whenever a variable is unused aside from its declaration,
whenever a function is declared static but never defined, whenever a
label is declared but not used, and whenever a statement computes a
result that is explicitly not used.

In order to get a warning about an unused function parameter, you must
specify both @samp{-W} and @samp{-Wunused}.

To suppress this warning for an expression, simply cast it to void.  For
unused variables and parameters, use the @samp{unused} attribute
(@pxref{Variable Attributes}).

@item -Wuninitialized
An automatic variable is used without first being initialized.

These warnings are possible only in optimizing compilation,
because they require data flow information that is computed only
when optimizing.  If you don't specify @samp{-O}, you simply won't
get these warnings.

These warnings occur only for variables that are candidates for
register allocation.  Therefore, they do not occur for a variable that
is declared @code{volatile}, or whose address is taken, or whose size
is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
structures, unions or arrays, even when they are in registers.

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 GNU CC 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
@{
  int x;
  switch (y)
    @{
    case 1: x = 1;
      break;
    case 2: x = 4;
      break;
    case 3: x = 5;
    @}
  foo (x);
@}
@end smallexample

@noindent
If the value of @code{y} is always 1, 2 or 3, then @code{x} is
always initialized, but GNU CC 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.

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

@item -Wreorder (C++ only)
@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

Here the compiler will warn that the member initializers for @samp{i}
and @samp{j} will be rearranged to match the declaration order of the
members.

@item -Wtemplate-debugging
@cindex template debugging
When using templates in a C++ program, warn if debugging is not yet
fully available (C++ only).

@item -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 @samp{-Wall} command line option.

@item -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.
@end table

The following @samp{-W@dots{}} options are not implied by @samp{-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 @code
@item -W
Print extra warning messages for these events:

@itemize @bullet
@cindex @code{longjmp} warnings
@item
A nonvolatile 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.

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

@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 @samp{-Wall} or @samp{-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 @samp{-Wno-sign-compare} is also specified.)

@item
An aggregate has a partly bracketed initializer.
For example, the following code would evoke such a warning,
because braces are missing around the initializer for @code{x.h}:

@smallexample
struct s @{ int f, g; @};
struct t @{ struct s h; int i; @};
struct t x = @{ 1, 2, 3 @};
@end smallexample

@item
An aggregate has an initializer which does not initialize all members.
For example, the following code would cause such a warning, because
@code{x.h} would be implicitly initialized to zero:

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

@item -Wtraditional
Warn about certain constructs that behave differently in traditional and
ANSI C.

@itemize @bullet
@item
Macro arguments occurring within string constants in the macro body.
These would substitute the argument in traditional C, but are part of
the constant in ANSI C.

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

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

@item -Wshadow
Warn whenever a local variable shadows another local variable.

@item -Wid-clash-@var{len}
Warn whenever two distinct identifiers match in the first @var{len}
characters.  This may help you prepare a program that will compile
with certain obsolete, brain-damaged compilers.

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

@item -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
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 -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
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
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.  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 @samp{-Wall} request these warnings.

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

@item -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 @samp{-W}; to get the other warnings
of @samp{-W} without this warning, use @samp{-W -Wno-sign-compare}.

@item -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 -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 -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
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 -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
Warn if an @code{extern} declaration is encountered within an function.

@item -Winline
Warn if a function can not be inlined, and either it was declared as inline,
or else the @samp{-finline-functions} option was given.

@item -Wold-style-cast
Warn if an old-style (C-style) cast is used within a program.

@item -Woverloaded-virtual
@cindex overloaded virtual fn, warning
@cindex warning for overloaded virtual fn
Warn when a derived class function declaration may be an error in
defining a virtual function (C++ only).  In a derived class, the
definitions of virtual functions must match the type signature of a
virtual function declared in the base class.  With this option, the
compiler warns when you define a function with the same name as a
virtual function, but with a type signature that does not match any
declarations from the base class.

@item -Wsynth (C++ only)
@cindex warning for synthesized methods
@cindex synthesized methods, warning
Warn when g++'s synthesis behavior does not match that of cfront.  For
instance:

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

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

@item -Werror
Make all warnings into errors.
@end table

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

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

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

On most systems that use stabs format, @samp{-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
to generate the extra information, use @samp{-gstabs+}, @samp{-gstabs},
@samp{-gxcoff+}, @samp{-gxcoff}, @samp{-gdwarf-1+}, or @samp{-gdwarf-1}
(see below).

Unlike most other C compilers, GNU CC allows you to use @samp{-g} with
@samp{-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 GNU CC is generated with the
capability for more than one debugging format.

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

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

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

@item -gdwarf
Produce debugging information in DWARF version 1 format (if that is
supported).  This is the format used by SDB on most System V Release 4
systems.

@item -gdwarf+
Produce debugging information in DWARF version 1 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.

@item -gdwarf-2
Produce debugging information in DWARF version 2 format (if that is
supported).  This is the format used by DBX on IRIX 6.

@item -g@var{level}
@itemx -ggdb@var{level}
@itemx -gstabs@var{level}
@itemx -gcoff@var{level}
@itemx -gxcoff@var{level}
@itemx -gdwarf@var{level}
@itemx -gdwarf-2@var{level}
Request debugging information and also use @var{level} to specify how
much information.  The default level is 2.

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 @samp{-g3}.

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

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

@cindex @code{tcov}
@item -a
Generate extra code to write profile information for basic blocks, which will
record the number of times each basic block is executed, the basic block start
address, and the function name containing the basic block.  If @samp{-g} is
used, the line number and filename of the start of the basic block will also be
recorded.  If not overridden by the machine description, the default action is
to append to the text file @file{bb.out}.

This data could be analyzed by a program like @code{tcov}.  Note,
however, that the format of the data is not what @code{tcov} expects.
Eventually GNU @code{gprof} should be extended to process this data.

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

@item -ax
Generate extra code to profile basic blocks.  Your executable will
produce output that is a superset of that produced when @samp{-a} is
used.  Additional output is the source and target address of the basic
blocks where a jump takes place, the number of times a jump is executed,
and (optionally) the complete sequence of basic blocks being executed.
The output is appended to file @file{bb.out}.

You can examine different profiling aspects without recompilation.  Your
executable will read a list of function names from file @file{bb.in}.
Profiling starts when a function on the list is entered and stops when
that invocation is exited.  To exclude a function from profiling, prefix
its name with `-'.  If a function name is not unique, you can
disambiguate it by writing it in the form
@samp{/path/filename.d:functionname}.  Your executable will write the
available paths and filenames in file @file{bb.out}.

Several function names have a special meaning:
@table @code
@item __bb_jumps__
Write source, target and frequency of jumps to file @file{bb.out}.
@item __bb_hidecall__
Exclude function calls from frequency count.
@item __bb_showret__
Include function returns in frequency count.
@item __bb_trace__
Write the sequence of basic blocks executed to file @file{bbtrace.gz}.
The file will be compressed using the program @samp{gzip}, which must
exist in your @code{PATH}.  On systems without the @samp{popen}
function, the file will be named @file{bbtrace} and will not be
compressed.  @strong{Profiling for even a few seconds on these systems
will produce a very large file.}  Note: @code{__bb_hidecall__} and
@code{__bb_showret__} will not affect the sequence written to
@file{bbtrace.gz}.
@end table

Here's a short example using different profiling parameters
in file @file{bb.in}.  Assume function @code{foo} consists of basic blocks
1 and 2 and is called twice from block 3 of function @code{main}.  After
the calls, block 3 transfers control to block 4 of @code{main}.

With @code{__bb_trace__} and @code{main} contained in file @file{bb.in},
the following sequence of blocks is written to file @file{bbtrace.gz}:
0 3 1 2 1 2 4.  The return from block 2 to block 3 is not shown, because
the return is to a point inside the block and not to the top.  The
block address 0 always indicates, that control is transferred
to the trace from somewhere outside the observed functions.  With
@samp{-foo} added to @file{bb.in}, the blocks of function
@code{foo} are removed from the trace, so only 0 3 4 remains.

With @code{__bb_jumps__} and @code{main} contained in file @file{bb.in},
jump frequencies will be written to file @file{bb.out}.  The
frequencies are obtained by constructing a trace of blocks
and incrementing a counter for every neighbouring pair of blocks
in the trace.  The trace 0 3 1 2 1 2 4 displays the following
frequencies:

@example
Jump from block 0x0 to block 0x3 executed 1 time(s)
Jump from block 0x3 to block 0x1 executed 1 time(s)
Jump from block 0x1 to block 0x2 executed 2 time(s)
Jump from block 0x2 to block 0x1 executed 1 time(s)
Jump from block 0x2 to block 0x4 executed 1 time(s)
@end example

With @code{__bb_hidecall__}, control transfer due to call instructions
is removed from the trace, that is the trace is cut into three parts: 0
3 4, 0 1 2 and 0 1 2.  With @code{__bb_showret__}, control transfer due
to return instructions is added to the trace.  The trace becomes: 0 3 1
2 3 1 2 3 4.  Note, that this trace is not the same, as the sequence
written to @file{bbtrace.gz}.  It is solely used for counting jump
frequencies.

@item -fprofile-arcs
Instrument @dfn{arcs} during compilation.  For each function of your
program, GNU CC 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.

Since not every arc in the program must be instrumented, programs
compiled with this option run faster than programs compiled with
@samp{-a}, which adds instrumentation code to every basic block in the
program.  The tradeoff: since @code{gcov} does not have
execution counts for all branches, it must start with the execution
counts for the instrumented branches, and then iterate over the program
flow graph until the entire graph has been solved.  Hence, @code{gcov}
runs a little more slowly than a program which uses information from
@samp{-a}.

@samp{-fprofile-arcs} also makes it possible to estimate branch
probabilities, and to calculate basic block execution counts.  In
general, basic block execution counts do not give enough information to
estimate all branch probabilities.  When the compiled program exits, it
saves the arc execution counts to a file called
@file{@var{sourcename}.da}.  Use the compiler option
@samp{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
Control Optimization}) when recompiling, to optimize using estimated
branch probabilities.

@need 2000
@item -ftest-coverage
Create data files for the @code{gcov} code-coverage utility
(@pxref{Gcov,, @code{gcov}: a GNU CC Test Coverage Program}).
The data file names begin with the name of your source file:

@table @code
@item @var{sourcename}.bb
A mapping from basic blocks to line numbers, which @code{gcov} uses to
associate basic block execution counts with line numbers.

@item @var{sourcename}.bbg
A list of all arcs in the program flow graph.  This allows @code{gcov}
to reconstruct the program flow graph, so that it can compute all basic
block and arc execution counts from the information in the
@code{@var{sourcename}.da} file (this last file is the output from
@samp{-fprofile-arcs}).
@end table

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

@item -d@var{letters}
Says to make debugging dumps during compilation at times specified by
@var{letters}.  This is used for debugging the compiler.  The file names
for most of the dumps are made by appending a word to the source file
name (e.g.  @file{foo.c.rtl} or @file{foo.c.jump}).  Here are the
possible letters for use in @var{letters}, and their meanings:

@table @samp
@item b
Dump after computing branch probabilities, to @file{@var{file}.bp}.
@item c
Dump after instruction combination, to the file @file{@var{file}.combine}.
@item d
Dump after delayed branch scheduling, to @file{@var{file}.dbr}.
@item D
Dump all macro definitions, at the end of preprocessing, in addition to
normal output.
@item y
Dump debugging information during parsing, to standard error.
@item r
Dump after RTL generation, to @file{@var{file}.rtl}.
@item x
Just generate RTL for a function instead of compiling it.  Usually used
with @samp{r}.
@item j
Dump after first jump optimization, to @file{@var{file}.jump}.
@item s
Dump after CSE (including the jump optimization that sometimes
follows CSE), to @file{@var{file}.cse}.
@item F
Dump after purging ADDRESSOF, to @file{@var{file}.addressof}.
@item f
Dump after flow analysis, to @file{@var{file}.flow}.
@item g
Dump after global register allocation, to @file{@var{file}.greg}.
@item G      
Dump after GCSE, to @file{@var{file}.gcse}.
@item j
Dump after first jump optimization, to @file{@var{file}.jump}.
@item J
Dump after last jump optimization, to @file{@var{file}.jump2}.
@item k
Dump after conversion from registers to stack, to @file{@var{file}.stack}.
@item l
Dump after local register allocation, to @file{@var{file}.lreg}.
@item L
Dump after loop optimization, to @file{@var{file}.loop}.
@item M
Dump after performing the machine dependent reorganisation pass, to
@file{@var{file}.mach}. 
@item N
Dump after the register move pass, to @file{@var{file}.regmove}.
@item r
Dump after RTL generation, to @file{@var{file}.rtl}.
@item R
Dump after the second instruction scheduling pass, to @file{@var{file}.sched2}.
@item s
Dump after CSE (including the jump optimization that sometimes follows
CSE), to @file{@var{file}.cse}. 
@item S
Dump after the first instruction scheduling pass, to @file{@var{file}.sched}.
@item t
Dump after the second CSE pass (including the jump optimization that
sometimes follows CSE), to @file{@var{file}.cse2}. 
@item x
Just generate RTL for a function instead of compiling it.  Usually used
with @samp{r}.
@item a
Produce all the dumps listed above.
@item m
Print statistics on memory usage, at the end of the run, to
standard error.
@item p
Annotate the assembler output with a comment indicating which
pattern and alternative was used.
@item y
Dump debugging information during parsing, to standard error.
@item A
Annotate the assembler output with miscellaneous debugging information.
@end table

@item -fpretend-float
When running a cross-compiler, pretend that the target machine uses the
same floating point format as the host machine.  This causes incorrect
output of the actual floating constants, but the actual instruction
sequence will probably be the same as GNU CC would make when running on
the target machine.

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

@item -print-file-name=@var{library}
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, GNU CC does not compile or link anything; it just prints the
file name.

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

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

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

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

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

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

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

These options control various sorts of optimizations:

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

Without @samp{-O}, 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.

Without @samp{-O}, the compiler only allocates variables declared
@code{register} in registers.  The resulting compiled code is a little
worse than produced by PCC without @samp{-O}.

With @samp{-O}, the compiler tries to reduce code size and execution
time.

When you specify @samp{-O}, the compiler turns on @samp{-fthread-jumps}
and @samp{-fdefer-pop} on all machines.  The compiler turns on
@samp{-fdelayed-branch} on machines that have delay slots, and
@samp{-fomit-frame-pointer} on machines that can support debugging even
without a frame pointer.  On some machines the compiler also turns
on other flags.@refill

@item -O2
Optimize even more.  GNU CC 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 @samp{-O2}.
As compared to @samp{-O}, this option increases both compilation time
and the performance of the generated code.

@samp{-O2} turns on all optional optimizations except for loop unrolling
and function inlining.  It also turns on the @samp{-fforce-mem} option
on all machines and frame pointer elimination on machines where doing so
does not interfere with debugging.

@item -O3
Optimize yet more.  @samp{-O3} turns on all optimizations specified by
@samp{-O2} and also turns on the @samp{inline-functions} option.

@item -O0
Do not optimize.

@item -Os
Optimize for size.  @samp{-Os} enables all @samp{-O2} optimizations that
do not typically increase code size.  It also performs further
optimizations designed to reduce code size.

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

Options of the form @samp{-f@var{flag}} specify machine-independent
flags.  Most flags have both positive and negative forms; the negative
form of @samp{-ffoo} would be @samp{-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 @code
@item -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 @samp{-ffloat-store} for such programs.

@item -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{@samp{-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
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.

@item -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.  The @samp{-O2} option turns on this option.

@item -fforce-addr
Force memory address constants to be copied into registers before
doing arithmetic on them.  This may produce better code just as
@samp{-fforce-mem} may.

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

@ifset INTERNALS
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}.@refill
@end ifset
@ifclear INTERNALS
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, gcc.info, Using and Porting GCC}.@refill
@end ifclear

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

@item -fkeep-inline-functions
Even if all calls to a given function are integrated, and the function
is declared @code{static}, nevertheless output a separate run-time
callable version of the function.  This switch does not affect
@code{extern inline} functions.

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

GNU CC 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 @samp{-fno-keep-static-consts} option.

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

@item -ffast-math
This option allows GCC to violate some ANSI or IEEE rules and/or
specifications in the interest of optimizing code for speed.  For
example, it allows the compiler to assume arguments to the @code{sqrt}
function are non-negative numbers and that no floating-point values
are NaNs.

This option should never be turned on by any @samp{-O} option since
it can result in incorrect output for programs which depend on
an exact implementation of IEEE or ANSI rules/specifications for
math functions.
@end table

@c following causes underfulls.. they don't look great, but we deal.
@c --mew 26jan93
The following options control specific optimizations.  The @samp{-O2}
option turns on all of these optimizations except @samp{-funroll-loops}
and @samp{-funroll-all-loops}.  On most machines, the @samp{-O} option
turns on the @samp{-fthread-jumps} and @samp{-fdelayed-branch} options,
but specific machines may handle it differently.

You can use the following flags in the rare cases when ``fine-tuning''
of optimizations to be performed is desired.

@table @code
@item -fstrength-reduce
Perform the optimizations of loop strength reduction and
elimination of iteration variables.

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

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

@item -fcse-skip-blocks
This is similar to @samp{-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,
@samp{-fcse-skip-blocks} causes CSE to follow the jump around the
body of the @code{if}.

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

@item -frerun-loop-opt
Run the loop optimizer twice.

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

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

@item -foptimize-register-moves
@item -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.  GNU CC enables this optimization by default with @samp{-O2}
or higher.

Note @code{-fregmove} and @code{-foptimize-register-moves} are the same
optimization.

@item -fdelayed-branch
If supported for the target machine, attempt to reorder instructions
to exploit instruction slots available after delayed branch
instructions.

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

@item -fschedule-insns2
Similar to @samp{-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.

@item -ffunction-sections
Place each function into its own section in the output file if the
target supports arbitrary sections.  The function's name determines
the section's name in the output file.

Use this option on systems where the linker can perform optimizations
to improve locality of reference in the instruction space.  HPPA
processors running HP-UX and Sparc processors running Solaris 2 have
linkers with such optimizations.  Other systems using the ELF object format
as well as AIX may have these optimizations in the future.

Only use this option when there are significant benefits from doing
so.  When you specify this option, 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 @samp{-g}.

@item -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 enabled by default on certain machines, usually those
which have no call-preserved registers to use instead.

@item -funroll-loops
Perform the optimization of loop unrolling.  This is only done for loops
whose number of iterations can be determined at compile time or run time.
@samp{-funroll-loop} implies both @samp{-fstrength-reduce} and
@samp{-frerun-cse-after-loop}.

@item -funroll-all-loops
Perform the optimization of loop unrolling.  This is done for all loops
and usually makes programs run more slowly.  @samp{-funroll-all-loops}
implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}.

@item -fmove-all-movables
Forces all invariant computations in loops to be moved
outside the loop.

@item -freduce-all-givs
Forces all general-induction variables in loops to be
strength-reduced.

@emph{Note:} When compiling programs written in Fortran,
@samp{-fmove-all-moveables} and @samp{-freduce-all-givs} are enabled
by default when you use the optimizer.

These options may generate better or worse code; results are highly
dependent on the structure of loops within the source code.

These two options are intended to be removed someday, once
they have helped determine the efficacy of various
approaches to improving loop optimizations.

Please let us (@code{egcs@@cygnus.com} and @code{fortran@@gnu.org})
know how use of these options affects
the performance of your production code.
We're very interested in code that runs @emph{slower}
when these options are @emph{enabled}.

@item -fno-peephole
Disable any machine-specific peephole optimizations.

@item -fbranch-probabilities
After running a program compiled with @samp{-fprofile-arcs}
(@pxref{Debugging Options,, Options for Debugging Your Program or
@code{gcc}}), you can compile it a second time using
@samp{-fbranch-probabilities}, to improve optimizations based on
guessing the path a branch might take.

@ifset INTERNALS
With @samp{-fbranch-probabilities}, GCC puts a @samp{REG_EXEC_COUNT}
note on the first instruction of each basic block, and 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.
@end ifset

@item -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:
@example
union a_union @{ 
  int i;
  double d;
@};

int f() @{
  a_union t;
  t.d = 3.0;
  return t.i;
@}
@end example
The practice of reading from a different union member than the one most
recently written to (called ``type-punning'') is common.  Even with
@samp{-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:
@example
int f() @{ 
  a_union t;
  int* ip;
  t.d = 3.0;
  ip = &t.i;
  return *ip;
@}
@end example

This option is not enabled by default at any optimization level because
it is new and has yet to be subjected to thorough testing.  You may
of course enable it manually with @samp{-fstrict-aliasing}.

@ifset INTERNALS
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}.
@end ifset

@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 @samp{-E} option, nothing is done except preprocessing.
Some of these options make sense only together with @samp{-E} because
they cause the preprocessor output to be unsuitable for actual
compilation.

@table @code
@item -include @var{file}
Process @var{file} as input before processing the regular input file.
In effect, the contents of @var{file} are compiled first.  Any @samp{-D}
and @samp{-U} options on the command line are always processed before
@samp{-include @var{file}}, regardless of the order in which they are
written.  All the @samp{-include} and @samp{-imacros} options are
processed in the order in which they are written.

@item -imacros @var{file}
Process @var{file} as input, discarding the resulting output, before
processing the regular input file.  Because the output generated from
@var{file} is discarded, the only effect of @samp{-imacros @var{file}}
is to make the macros defined in @var{file} available for use in the
main input.

Any @samp{-D} and @samp{-U} options on the command line are always
processed before @samp{-imacros @var{file}}, regardless of the order in
which they are written.  All the @samp{-include} and @samp{-imacros}
options are processed in the order in which they are written.

@item -idirafter @var{dir}
@cindex second include path
Add the directory @var{dir} to the second include path.  The directories
on the second include path are searched when a header file is not found
in any of the directories in the main include path (the one that
@samp{-I} adds to).

@item -iprefix @var{prefix}
Specify @var{prefix} as the prefix for subsequent @samp{-iwithprefix}
options.

@item -iwithprefix @var{dir}
Add a directory to the second include path.  The directory's name is
made by concatenating @var{prefix} and @var{dir}, where @var{prefix} was
specified previously with @samp{-iprefix}.  If you have not specified a
prefix yet, the directory containing the installed passes of the
compiler is used as the default.

@item -iwithprefixbefore @var{dir}
Add a directory to the main include path.  The directory's name is made
by concatenating @var{prefix} and @var{dir}, as in the case of
@samp{-iwithprefix}.

@item -isystem @var{dir}
Add a directory to the beginning of the second include path, marking it
as a system directory, so that it gets the same special treatment as
is applied to the standard system directories.

@item -nostdinc
Do not search the standard system directories for header files.  Only
the directories you have specified with @samp{-I} options (and the
current directory, if appropriate) are searched.  @xref{Directory
Options}, for information on @samp{-I}.

By using both @samp{-nostdinc} and @samp{-I-}, you can limit the include-file
search path to only those directories you specify explicitly.

@item -undef
Do not predefine any nonstandard macros.  (Including architecture flags).

@item -E
Run only the C preprocessor.  Preprocess all the C source files
specified and output the results to standard output or to the
specified output file.

@item -C
Tell the preprocessor not to discard comments.  Used with the
@samp{-E} option.

@item -P
Tell the preprocessor not to generate @samp{#line} directives.
Used with the @samp{-E} option.

@cindex make
@cindex dependencies, make
@item -M
Tell the preprocessor to output a rule suitable for @code{make}
describing the dependencies of each object file.  For each source file,
the preprocessor outputs one @code{make}-rule whose target is the object
file name for that source file and whose dependencies are all the
@code{#include} header files it uses.  This rule may be a single line or
may be continued with @samp{\}-newline if it is long.  The list of rules
is printed on standard output instead of the preprocessed C program.

@samp{-M} implies @samp{-E}.

Another way to specify output of a @code{make} rule is by setting
the environment variable @code{DEPENDENCIES_OUTPUT} (@pxref{Environment
Variables}).

@item -MM
Like @samp{-M} but the output mentions only the user header files
included with @samp{#include "@var{file}"}.  System header files
included with @samp{#include <@var{file}>} are omitted.

@item -MD
Like @samp{-M} but the dependency information is written to a file made by
replacing ".c" with ".d" at the end of the input file names.
This is in addition to compiling the file as specified---@samp{-MD} does
not inhibit ordinary compilation the way @samp{-M} does.

In Mach, you can use the utility @code{md} to merge multiple dependency
files into a single dependency file suitable for using with the @samp{make}
command.

@item -MMD
Like @samp{-MD} except mention only user header files, not system
header files.

@item -MG
Treat missing header files as generated files and assume they live in the
same directory as the source file.  If you specify @samp{-MG}, you
must also specify either @samp{-M} or @samp{-MM}.  @samp{-MG} is not
supported with @samp{-MD} or @samp{-MMD}.

@item -H
Print the name of each header file used, in addition to other normal
activities.

@item -A@var{question}(@var{answer})
Assert the answer @var{answer} for @var{question}, in case it is tested
with a preprocessing conditional such as @samp{#if
#@var{question}(@var{answer})}.  @samp{-A-} disables the standard
assertions that normally describe the target machine.

@item -D@var{macro}
Define macro @var{macro} with the string @samp{1} as its definition.

@item -D@var{macro}=@var{defn}
Define macro @var{macro} as @var{defn}.  All instances of @samp{-D} on
the command line are processed before any @samp{-U} options.

@item -U@var{macro}
Undefine macro @var{macro}.  @samp{-U} options are evaluated after all
@samp{-D} options, but before any @samp{-include} and @samp{-imacros}
options.

@item -dM
Tell the preprocessor to output only a list of the macro definitions
that are in effect at the end of preprocessing.  Used with the @samp{-E}
option.

@item -dD
Tell the preprocessing to pass all macro definitions into the output, in
their proper sequence in the rest of the output.

@item -dN
Like @samp{-dD} except that the macro arguments and contents are omitted.
Only @samp{#define @var{name}} is included in the output.

@item -trigraphs
Support ANSI C trigraphs.  The @samp{-ansi} option also has this effect.

@item -Wp,@var{option}
Pass @var{option} as an option to the preprocessor.  If @var{option}
contains commas, it is split into multiple options at the commas.
@end table

@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 @code
@item -Wa,@var{option}
Pass @var{option} as an option to the assembler.  If @var{option}
contains commas, it is split into multiple options at the commas.
@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.

@table @code
@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
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}
Search the library named @var{library} when linking.

It makes a difference where in the command you write this option; the
linker searches 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 @samp{-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 @samp{-l} option and specifying a file name
is that @samp{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
and searches several directories.

@item -lobjc
You need this special case of the @samp{-l} option in order to
link an Objective C program.

@item -nostartfiles
Do not use the standard system startup files when linking.
The standard system libraries are used normally, unless @code{-nostdlib}
or @code{-nodefaultlibs} is used.

@item -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 @code{-nostartfiles}
is used.  The compiler may generate calls to memcmp, memset, and memcpy
for System V (and ANSI C) environments or to bcopy and bzero for
BSD environments.  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
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 memcmp, memset, and memcpy
for System V (and ANSI C) environments or to bcopy and bzero for
BSD environments.  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 @code{-lgcc}, use with @code{-nostdlib}
@cindex @code{-nostdlib} and unresolved references
@cindex unresolved references and @code{-nostdlib}
@cindex @code{-lgcc}, use with @code{-nodefaultlibs}
@cindex @code{-nodefaultlibs} and unresolved references
@cindex unresolved references and @code{-nodefaultlibs}
One of the standard libraries bypassed by @samp{-nostdlib} and
@samp{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
that GNU CC uses to overcome shortcomings of particular machines, or special
needs for some languages.
@ifset INTERNALS
(@xref{Interface,,Interfacing to GNU CC Output}, for more discussion of
@file{libgcc.a}.)
@end ifset
@ifclear INTERNALS
(@xref{Interface,,Interfacing to GNU CC Output,gcc.info,Porting GNU CC},
for more discussion of @file{libgcc.a}.)
@end ifclear
In most cases, you need @file{libgcc.a} even when you want to avoid
other standard libraries.  In other words, when you specify @samp{-nostdlib}
or @samp{-nodefaultlibs} you should usually specify @samp{-lgcc} as well.
This ensures that you have no unresolved references to internal GNU CC
library subroutines.  (For example, @samp{__main}, used to ensure C++
constructors will be called; @pxref{Collect2,,@code{collect2}}.)

@item -s
Remove all symbol table and relocation information from the executable.

@item -static
On systems that support dynamic linking, this prevents linking with the shared
libraries.  On other systems, this option has no effect.

@item -shared
Produce a shared object which can then be linked with other objects to
form an executable.  Not all systems support this option.  You must
also specify @samp{-fpic} or @samp{-fPIC} on some systems when
you specify this option.

@item -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}
Pass @var{option} as an option to the linker.  You can use this to
supply system-specific linker options which GNU CC does not know how to
recognize.

If you want to pass an option that takes an argument, you must use
@samp{-Xlinker} twice, once for the option and once for the argument.
For example, to pass @samp{-assert definitions}, you must write
@samp{-Xlinker -assert -Xlinker definitions}.  It does not work to write
@samp{-Xlinker "-assert definitions"}, because this passes the entire
string as a single argument, which is not what the linker expects.

@item -Wl,@var{option}
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}
Pretend the symbol @var{symbol} is undefined, to force linking of
library modules to define it.  You can use @samp{-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 @code
@item -I@var{dir}
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.  If you use more
than one @samp{-I} option, the directories are scanned in left-to-right
order; the standard system directories come after.

@item -I-
Any directories you specify with @samp{-I} options before the @samp{-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 @samp{-I} options after
the @samp{-I-}, these directories are searched for all @samp{#include}
directives.  (Ordinarily @emph{all} @samp{-I} directories are used
this way.)

In addition, the @samp{-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 @samp{-I-}.  With @samp{-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.

@samp{-I-} does not inhibit the use of the standard system directories
for header files.  Thus, @samp{-I-} and @samp{-nostdinc} are
independent.

@item -L@var{dir}
Add directory @var{dir} to the list of directories to be searched
for @samp{-l}.

@item -B@var{prefix}
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
@samp{-B} prefix, if any.  If that name is not found, or if @samp{-B}
was not specified, the driver tries two standard prefixes, which are
@file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc-lib/}.  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
@samp{PATH} environment variable.

@samp{-B} prefixes that effectively specify directory names also apply
to libraries in the linker, because the compiler translates these
options into @samp{-L} options for the linker.  They also apply to
includes files in the preprocessor, because the compiler translates these
options into @samp{-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 @samp{-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 @samp{-B} prefix is to use
the environment variable @code{GCC_EXEC_PREFIX}.  @xref{Environment
Variables}.

@item -specs=@var{file}
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
@samp{-specs=}@var{file} can be specified on the command line, and they
are processed in order, from left to right.
@end table

@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

By default, GNU CC compiles code for the same type of machine that you
are using.  However, it can also be installed as a cross-compiler, to
compile for some other type of machine.  In fact, several different
configurations of GNU CC, for different target machines, can be
installed side by side.  Then you specify which one to use with the
@samp{-b} option.

In addition, older and newer versions of GNU CC can be installed side
by side.  One of them (probably the newest) will be the default, but
you may sometimes wish to use another.

@table @code
@item -b @var{machine}
The argument @var{machine} specifies the target machine for compilation.
This is useful when you have installed GNU CC as a cross-compiler.

The value to use for @var{machine} is the same as was specified as the
machine type when configuring GNU CC as a cross-compiler.  For
example, if a cross-compiler was configured with @samp{configure
i386v}, meaning to compile for an 80386 running System V, then you
would specify @samp{-b i386v} to run that cross compiler.

When you do not specify @samp{-b}, it normally means to compile for
the same type of machine that you are using.

@item -V @var{version}
The argument @var{version} specifies which version of GNU CC to run.
This is useful when multiple versions are installed.  For example,
@var{version} might be @samp{2.0}, meaning to run GNU CC version 2.0.

The default version, when you do not specify @samp{-V}, is the last
version of GNU CC that you installed.
@end table

The @samp{-b} and @samp{-V} options actually work by controlling part of
the file name used for the executable files and libraries used for
compilation.  A given version of GNU CC, for a given target machine, is
normally kept in the directory @file{/usr/local/lib/gcc-lib/@var{machine}/@var{version}}.@refill

Thus, sites can customize the effect of @samp{-b} or @samp{-V} either by
changing the names of these directories or adding alternate names (or
symbolic links).  If in directory @file{/usr/local/lib/gcc-lib/} the
file @file{80386} is a link to the file @file{i386v}, then @samp{-b
80386} becomes an alias for @samp{-b i386v}.

In one respect, the @samp{-b} or @samp{-V} do not completely change
to a different compiler: the top-level driver program @code{gcc}
that you originally invoked continues to run and invoke the other
executables (preprocessor, compiler per se, assembler and linker)
that do the real work.  However, since no real work is done in the
driver program, it usually does not matter that the driver program
in use is not the one for the specified target and version.

The only way that the driver program depends on the target machine is
in the parsing and handling of special machine-specific options.
However, this is controlled by a file which is found, along with the
other executables, in the directory for the specified version and
target machine.  As a result, a single installed driver program adapts
to any specified target machine and compiler version.

The driver program executable does control one significant thing,
however: the default version and target machine.  Therefore, you can
install different instances of the driver program, compiled for
different targets or versions, under different names.

For example, if the driver for version 2.0 is installed as @code{ogcc}
and that for version 2.1 is installed as @code{gcc}, then the command
@code{gcc} will use version 2.1 by default, while @code{ogcc} will use
2.0 by default.  However, you can choose either version with either
command with the @samp{-V} option.

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

@ifset INTERNALS
These options are defined by the macro @code{TARGET_SWITCHES} in the
machine description.  The default for the options is also defined by
that macro, which enables you to change the defaults.
@end ifset

@menu
* M680x0 Options::
* VAX Options::
* SPARC Options::
* Convex Options::
* AMD29K Options::
* ARM Options::
* Thumb Options::
* MN10200 Options::
* MN10300 Options::
* M32R/D Options::
* M88K Options::
* RS/6000 and PowerPC Options::
* RT Options::
* MIPS Options::
* i386 Options::
* HPPA Options::
* Intel 960 Options::
* DEC Alpha Options::
* Clipper Options::
* H8/300 Options::
* SH Options::
* System V Options::
* V850 Options::
* ARC Options::
@end menu

@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 @code
@item -m68000
@itemx -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
Generate output for a 68020.  This is the default
when the compiler is configured for 68020-based systems.

@item -m68881
Generate output containing 68881 instructions for floating point.
This is the default for most 68020 systems unless @samp{-nfp} was
specified when the compiler was configured.

@item -m68030
Generate output for a 68030.  This is the default when the compiler is
configured for 68030-based systems.

@item -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
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
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
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 -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
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 -mfpa
Generate output containing Sun FPA instructions for floating point.

@item -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
Consider type @code{int} to be 16 bits wide, like @code{short int}.

@item -mnobitfield
Do not use the bit-field instructions.  The @samp{-m68000}, @samp{-mcpu32}
and @samp{-m5200} options imply @w{@samp{-mnobitfield}}.

@item -mbitfield
Do use the bit-field instructions.  The @samp{-m68020} option implies
@samp{-mbitfield}.  This is the default if you use a configuration
designed for a 68020.

@item -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
Control whether GNU CC aligns @code{int}, @code{long}, @code{long long}, 
@code{float}, @code{double}, and @code{long double} variables on a 32-bit
boundary (@samp{-malign-int}) or a 16-bit boundary (@samp{-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 @samp{-malign-int} switch, GNU CC will
align structures containing the above types  differently than
most published application binary interface specifications for the m68k.

@end table

@node VAX Options
@subsection VAX Options
@cindex VAX options

These @samp{-m} options are defined for the Vax:

@table @code
@item -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
Do output those jump instructions, on the assumption that you
will assemble with the GNU assembler.

@item -mg
Output code for g-format floating point numbers instead of d-format.
@end table

@node SPARC Options
@subsection SPARC Options
@cindex SPARC options

These @samp{-m} switches are supported on the SPARC:

@table @code
@item -mno-app-regs
@itemx -mapp-regs
Specify @samp{-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 @samp{-mno-app-regs}.  You should compile libraries and system
software with this option.

@item -mfpu
@itemx -mhard-float
Generate output containing floating point instructions.  This is the
default.

@item -mno-fpu
@itemx -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.

@samp{-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 GNU CC, with @samp{-msoft-float} in order for
this to work.

@item -mhard-quad-float
Generate output containing quad-word (long double) floating point
instructions.

@item -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
@samp{-msoft-quad-float} option is the default.

@item -mno-epilogue
@itemx -mepilogue
With @samp{-mepilogue} (the default), the compiler always emits code for
function exit at the end of each function.  Any function exit in
the middle of the function (such as a return statement in C) will
generate a jump to the exit code at the end of the function.

With @samp{-mno-epilogue}, the compiler tries to emit exit code inline
at every function exit.

@item -mno-flat
@itemx -mflat
With @samp{-mflat}, the compiler does not generate save/restore instructions
and will use a "flat" or single register window calling convention.
This model uses %i7 as the frame pointer and is compatible with the normal
register window model.  Code from either may be intermixed.
The local registers and the input registers (0-5) are still treated as
"call saved" registers and will be saved on the stack as necessary.

With @samp{-mno-flat} (the default), the compiler emits save/restore
instructions (except for leaf functions) and is the normal mode of operation.

@item -mno-unaligned-doubles
@itemx -munaligned-doubles
Assume that doubles have 8 byte alignment.  This is the default.

With @samp{-munaligned-doubles}, GNU CC 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 -mv8
@itemx -msparclite
These two options select variations on the SPARC architecture.

By default (unless specifically configured for the Fujitsu SPARClite),
GCC generates code for the v7 variant of the SPARC architecture.

@samp{-mv8} will give you SPARC v8 code.  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.

@samp{-msparclite} will give you SPARClite code.  This adds the integer
multiply, integer divide step and scan (@code{ffs}) instructions which
exist in SPARClite but not in SPARC v7.

These options are deprecated and will be deleted in GNU CC 2.9.
They have been replaced with @samp{-mcpu=xxx}.

@item -mcypress
@itemx -msupersparc
These two options select the processor for which the code is optimised.

With @samp{-mcypress} (the default), the compiler optimizes code 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 @samp{-msupersparc} the compiler optimizes code for the SuperSparc cpu, as
used in the SparcStation 10, 1000 and 2000 series. This flag also enables use
of the full SPARC v8 instruction set.

These options are deprecated and will be deleted in GNU CC 2.9.
They have been replaced with @samp{-mcpu=xxx}.

@item -mcpu=@var{cpu_type}
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{sparclet}, @samp{tsc701}, @samp{v9}, and
@samp{ultrasparc}.

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
    sparclite:      f930, f934
    sparclet:       tsc701
    v9:             ultrasparc
@end smallexample

@item -mtune=@var{cpu_type}
Set the instruction scheduling parameters for machine type
@var{cpu_type}, but do not set the instruction set or register set that the
option @samp{-mcpu=}@var{cpu_type} would.

The same values for @samp{-mcpu=}@var{cpu_type} are used for
@samp{-mtune=}@*@var{cpu_type}, though the only useful values are those that
select a particular cpu implementation: @samp{cypress}, @samp{supersparc},
@samp{f930}, @samp{f934}, @samp{tsc701}, @samp{ultrasparc}.

@item -malign-loops=@var{num}
Align loops to a 2 raised to a @var{num} byte boundary.  If
@samp{-malign-loops} is not specified, the default is 2.

@item -malign-jumps=@var{num}
Align instructions that are only jumped to to a 2 raised to a @var{num}
byte boundary.  If @samp{-malign-jumps} is not specified, the default is 2.

@item -malign-functions=@var{num}
Align the start of functions to a 2 raised to @var{num} byte boundary.
If @samp{-malign-functions} is not specified, the default is 2 if compiling
for 32 bit sparc, and 5 if compiling for 64 bit sparc.

@end table

These @samp{-m} switches are supported in addition to the above
on the SPARCLET processor.

@table @code
@item -mlittle-endian
Generate code for a processor running in little-endian mode.

@item -mlive-g0
Treat register @code{%g0} as a normal register.
GCC will continue to clobber it as necessary but will not assume
it always reads as 0.

@item -mbroken-saverestore
Generate code that does not use non-trivial forms of the @code{save} and
@code{restore} instructions.  Early versions of the SPARCLET processor do
not correctly handle @code{save} and @code{restore} instructions used with
arguments.  They correctly handle them used without arguments.  A @code{save}
instruction used without arguments increments the current window pointer
but does not allocate a new stack frame.  It is assumed that the window
overflow trap handler will properly handle this case as will interrupt
handlers.
@end table

These @samp{-m} switches are supported in addition to the above
on SPARC V9 processors in 64 bit environments.

@table @code
@item -mlittle-endian
Generate code for a processor running in little-endian mode.

@item -m32
@itemx -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
Generate code for the Medium/Low code model: the program must be linked
in the low 32 bits of the address space.  Pointers are 64 bits.
Programs can be statically or dynamically linked.

@item -mcmodel=medmid
Generate code for the Medium/Middle code model: the program must be linked
in the low 44 bits of the address space, the text segment must be less than
2G bytes, and data segment must be within 2G of the text segment.
Pointers are 64 bits.

@item -mcmodel=medany
Generate code for the Medium/Anywhere code model: the program may be linked
anywhere in the address space, the text segment must be less than
2G bytes, and data segment must be within 2G of the text segment.
Pointers are 64 bits.

@item -mcmodel=embmedany
Generate code for the Medium/Anywhere code model for embedded systems:
assume a 32 bit text and a 32 bit data segment, both starting anywhere
(determined at link time).  Register %g4 points to the base of the
data segment.  Pointers still 64 bits.
Programs are statically linked, PIC is not supported.

@item -mstack-bias
@itemx -mno-stack-bias
With @samp{-mstack-bias}, GNU CC assumes that the stack pointer, and
frame pointer if present, are offset by -2047 which must be added back
when making stack frame references.
Otherwise, assume no such offset is present.
@end table

@node Convex Options
@subsection Convex Options
@cindex Convex options

These @samp{-m} options are defined for Convex:

@table @code
@item -mc1
Generate output for C1.  The code will run on any Convex machine.
The preprocessor symbol @code{__convex__c1__} is defined.

@item -mc2
Generate output for C2.  Uses instructions not available on C1.
Scheduling and other optimizations are chosen for max performance on C2.
The preprocessor symbol @code{__convex_c2__} is defined.

@item -mc32
Generate output for C32xx.  Uses instructions not available on C1.
Scheduling and other optimizations are chosen for max performance on C32.
The preprocessor symbol @code{__convex_c32__} is defined.

@item -mc34
Generate output for C34xx.  Uses instructions not available on C1.
Scheduling and other optimizations are chosen for max performance on C34.
The preprocessor symbol @code{__convex_c34__} is defined.

@item -mc38
Generate output for C38xx.  Uses instructions not available on C1.
Scheduling and other optimizations are chosen for max performance on C38.
The preprocessor symbol @code{__convex_c38__} is defined.

@item -margcount
Generate code which puts an argument count in the word preceding each
argument list.  This is compatible with regular CC, and a few programs
may need the argument count word.  GDB and other source-level debuggers
do not need it; this info is in the symbol table.

@item -mnoargcount
Omit the argument count word.  This is the default.

@item -mvolatile-cache
Allow volatile references to be cached.  This is the default.

@item -mvolatile-nocache
Volatile references bypass the data cache, going all the way to memory.
This is only needed for multi-processor code that does not use standard
synchronization instructions.  Making non-volatile references to volatile
locations will not necessarily work.

@item -mlong32
Type long is 32 bits, the same as type int.  This is the default.

@item -mlong64
Type long is 64 bits, the same as type long long.  This option is useless,
because no library support exists for it.
@end table

@node AMD29K Options
@subsection AMD29K Options
@cindex AMD29K options

These @samp{-m} options are defined for the AMD Am29000:

@table @code
@item -mdw
@kindex -mdw
@cindex DW bit (29k)
Generate code that assumes the @code{DW} bit is set, i.e., that byte and
halfword operations are directly supported by the hardware.  This is the
default.

@item -mndw
@kindex -mndw
Generate code that assumes the @code{DW} bit is not set.

@item -mbw
@kindex -mbw
@cindex byte writes (29k)
Generate code that assumes the system supports byte and halfword write
operations.  This is the default.

@item -mnbw
@kindex -mnbw
Generate code that assumes the systems does not support byte and
halfword write operations.  @samp{-mnbw} implies @samp{-mndw}.

@item -msmall
@kindex -msmall
@cindex memory model (29k)
Use a small memory model that assumes that all function addresses are
either within a single 256 KB segment or at an absolute address of less
than 256k.  This allows the @code{call} instruction to be used instead
of a @code{const}, @code{consth}, @code{calli} sequence.

@item -mnormal
@kindex -mnormal
Use the normal memory model: Generate @code{call} instructions only when
calling functions in the same file and @code{calli} instructions
otherwise.  This works if each file occupies less than 256 KB but allows
the entire executable to be larger than 256 KB.  This is the default.

@item -mlarge
Always use @code{calli} instructions.  Specify this option if you expect
a single file to compile into more than 256 KB of code.

@item -m29050
@kindex -m29050
@cindex processor selection (29k)
Generate code for the Am29050.

@item -m29000
@kindex -m29000
Generate code for the Am29000.  This is the default.

@item -mkernel-registers
@kindex -mkernel-registers
@cindex kernel and user registers (29k)
Generate references to registers @code{gr64-gr95} instead of to
registers @code{gr96-gr127}.  This option can be used when compiling
kernel code that wants a set of global registers disjoint from that used
by user-mode code.

Note that when this option is used, register names in @samp{-f} flags
must use the normal, user-mode, names.

@item -muser-registers
@kindex -muser-registers
Use the normal set of global registers, @code{gr96-gr127}.  This is the
default.

@item -mstack-check
@itemx -mno-stack-check
@kindex -mstack-check
@cindex stack checks (29k)
Insert (or do not insert) a call to @code{__msp_check} after each stack
adjustment.  This is often used for kernel code.

@item -mstorem-bug
@itemx -mno-storem-bug
@kindex -mstorem-bug
@cindex storem bug (29k)
@samp{-mstorem-bug} handles 29k processors which cannot handle the
separation of a mtsrim insn and a storem instruction (most 29000 chips
to date, but not the 29050).

@item -mno-reuse-arg-regs
@itemx -mreuse-arg-regs
@kindex -mreuse-arg-regs
@samp{-mno-reuse-arg-regs} tells the compiler to only use incoming argument
registers for copying out arguments.  This helps detect calling a function
with fewer arguments than it was declared with.

@item -mno-impure-text
@itemx -mimpure-text
@kindex -mimpure-text
@samp{-mimpure-text}, used in addition to @samp{-shared}, tells the compiler to
not pass @samp{-assert pure-text} to the linker when linking a shared object.

@item -msoft-float
@kindex -msoft-float
Generate output containing library calls for floating point.
@strong{Warning:} the requisite libraries are not part of GNU CC.
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.
@end table

@node ARM Options
@subsection ARM Options
@cindex ARM options

These @samp{-m} options are defined for Advanced RISC Machines (ARM)
architectures:

@table @code
@item -mapcs-frame
@kindex -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 @samp{-fomit-frame-pointer}
with this option will cause the stack frames not to be generated for
leaf functions.  The default is @samp{-mno-apcs-frame}.

@item -mapcs
@kindex -mapcs
This is a synonym for @samp{-mapcs-frame}.

@item -mapcs-26
@kindex -mapcs-26
Generate code for a processor running with a 26-bit program counter,
and conforming to the function calling standards for the APCS 26-bit
option.  This option replaces the @samp{-m2} and @samp{-m3} options
of previous releases of the compiler.

@item -mapcs-32
@kindex -mapcs-32
Generate code for a processor running with a 32-bit program counter,
and conforming to the function calling standards for the APCS 32-bit
option.  This option replaces the @samp{-m6} option of previous releases
of the compiler.

@item -mapcs-stack-check
@kindex -mapcs-stack-check
@kindex -mno-apcs-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
@samp{-mno-apcs-stack-check}, since this produces smaller code.

@item -mapcs-float
@kindex -mapcs-float
@kindex -mno-apcs-float
Pass floating point arguments using the float point registers.  This is
one of the variants of the APCS.  This option is reccommended 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
@samp{-mno-apcs-float}, since integer only code is slightly increased in
size if @samp{-mapcs-float} is used.

@item -mapcs-reentrant
@kindex -mapcs-reentrant
@kindex -mno-apcs-reentrant
Generate reentrant, position independent code.  This is the equivalent
to specifying the @samp{-fpic} option.  The default is
@samp{-mno-apcs-reentrant}.

@item -mthumb-interwork
@kindex -mthumb-interwork
@kindex -mno-thumb-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
@samp{-mno-thumb-interwork}, since slightly larger code is generated
when @samp{-mthumb-interwork} is specified.

@item -mno-sched-prolog
@kindex -mno-sched-prolog
@kindex -msched-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 recognisable set
of instructions (or in fact one of a chioce 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 @samp{-msched-prolog}.

@item -mhard-float
Generate output containing floating point instructions.  This is the
default.

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

@samp{-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 GNU CC, with @samp{-msoft-float} in order for
this to work.

@item -mlittle-endian
Generate code for a processor running in little-endian mode.  This is
the default for all standard configurations.

@item -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
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 -mshort-load-bytes
@kindex -mshort-load-bytes
Do not try to load half-words (eg @samp{short}s) by loading a word from
an unaligned address.  For some targets the MMU is configured to trap
unaligned loads; use this option to generate code that is safe in these
environments.

@item -mno-short-load-bytes
@kindex -mno-short-load-bytes
Use unaligned word loads to load half-words (eg @samp{short}s).  This
option produces more efficient code, but the MMU is sometimes configured
to trap these instructions.

@item -mshort-load-words
@kindex -mshort-load-words
This is a synonym for the @samp{-mno-short-load-bytes}.

@item -mno-short-load-words
@kindex -mno-short-load-words
This is a synonym for the @samp{-mshort-load-bytes}.

@item -mbsd
@kindex -mbsd
This option only applies to RISC iX.  Emulate the native BSD-mode
compiler.  This is the default if @samp{-ansi} is not specified.

@item -mxopen
@kindex -mxopen
This option only applies to RISC iX.  Emulate the native X/Open-mode
compiler.

@item -mno-symrename
@kindex -mno-symrename
This option only applies to RISC iX.  Do not run the assembler
post-processor, @samp{symrename}, after code has been assembled.
Normally it is necessary to modify some of the standard symbols in
preparation for linking with the RISC iX C library; this option
suppresses this pass.  The post-processor is never run when the
compiler is built for cross-compilation.

@item -mcpu=<name>
@kindex -mcpu=
This specifies the name of the target ARM processor.  GCC uses this name
to determine what kind of instructions it can use when generating
assembly code.  Permissable names are: arm2, arm250, arm3, arm6, arm60,
arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di, arm7dmi,
arm70, arm700, arm700i, arm710, arm710c, arm7100, arm7500, arm7500fe,
arm7tdmi, arm8, strongarm, strongarm110

@item -march=<name>
@kindex -march=
This specifies the name of the target ARM architecture.  GCC uses this
name to determine what kind of instructions it can use when generating
assembly code.  This option can be used in conjunction with or instead
of the @samp{-mcpu=} option.  Permissable names are: armv2, armv2a,
armv3, armv3m, armv4, armv4t

@item -mfpe=<number>
@kindex -mfpe=
This specifes the version of the floating point emulation available on
the target.  Permissable values are 2 and 3.

@item -mstructure-size-boundary=<n>
@kindex -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.  Permissable values are 8 and
32.  The default value varies for different toolchains.  For the COFF
targeted toolchain the default value is 8.  Specifying the larger number
can produced faster, more efficient code, but can also increase the size
of the program.  The two values are potentially incompatible.  Code
compiled with one value cannot necessarily expect to work with code or
libraries compiled with the other value, if they exchange information
using structures or unions.  Programmers are encouraged to use the 32
value as future versions of the toolchain may default to this value.

@end table

@node Thumb Options
@subsection Thumb Options
@cindex Thumb Options

@table @code

@item -mthumb-interwork
@kindex -mthumb-interwork
@kindex -mno-thumb-interwork
Generate code which supports calling between the THUMB and ARM
instruction sets.  Without this option the two instruction sets cannot
be reliably used inside one program.  The default is
@samp{-mno-thumb-interwork}, since slightly smaller code is generated
with this option.

@item -mtpcs-frame
@kindex -mtpcs-frame
@kindex -mno-tpcs-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 @samp{-mno-apcs-frame}. 

@item -mtpcs-leaf-frame
@kindex -mtpcs-leaf-frame
@kindex -mno-tpcs-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 @samp{-mno-apcs-leaf-frame}. 

@item -mlittle-endian
@kindex -mlittle-endian
Generate code for a processor running in little-endian mode.  This is
the default for all standard configurations.

@item -mbig-endian
@kindex -mbig-endian
Generate code for a processor running in big-endian mode.

@item -mstructure-size-boundary=<n>
@kindex -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.  Permissable values are 8 and
32.  The default value varies for different toolchains.  For the COFF
targeted toolchain the default value is 8.  Specifying the larger number
can produced faster, more efficient code, but can also increase the size
of the program.  The two values are potentially incompatible.  Code
compiled with one value cannot necessarily expect to work with code or
libraries compiled with the other value, if they exchange information
using structures or unions.  Programmers are encouraged to use the 32
value as future versions of the toolchain may default to this value.

@end table

@node MN10200 Options
@subsection MN10200 Options
@cindex MN10200 options
These @samp{-m} options are defined for Matsushita MN10200 architectures:
@table @code

@item -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 MN10300 Options
@subsection MN10300 Options
@cindex MN10300 options
These @samp{-m} options are defined for Matsushita MN10300 architectures:

@table @code
@item -mmult-bug
Generate code to avoid bugs in the multiply instructions for the MN10300
processors.  This is the default.

@item -mno-mult-bug
Do not generate code to avoid bugs in the multiply instructions for the
MN10300 processors.

@item -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 M32R/D Options
@subsection M32R/D Options
@cindex M32R/D options

These @samp{-m} options are defined for Mitsubishi M32R/D architectures:

@table @code
@item -mcode-model=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 -mcode-model=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 -mcode-model=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
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
Put small global and static data in the small data area, but do not
generate special code to reference them.

@item -msdata=use
Put small global and static data in the small data area, and generate
special instructions to reference them.

@item -G @var{num}
@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 @samp{-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 @samp{-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.

@end table

@node M88K Options
@subsection M88K Options
@cindex M88k options

These @samp{-m} options are defined for Motorola 88k architectures:

@table @code
@item -m88000
@kindex -m88000
Generate code that works well on both the m88100 and the
m88110.

@item -m88100
@kindex -m88100
Generate code that works best for the m88100, but that also
runs on the m88110.

@item -m88110
@kindex -m88110
Generate code that works best for the m88110, and may not run
on the m88100.

@item -mbig-pic
@kindex -mbig-pic
Obsolete option to be removed from the next revision.
Use @samp{-fPIC}.

@item -midentify-revision
@kindex -midentify-revision
@kindex ident
@cindex identifying source, compiler (88k)
Include an @code{ident} directive in the assembler output recording the
source file name, compiler name and version, timestamp, and compilation
flags used.

@item -mno-underscores
@kindex -mno-underscores
@cindex underscores, avoiding (88k)
In assembler output, emit symbol names without adding an underscore
character at the beginning of each name.  The default is to use an
underscore as prefix on each name.

@item -mocs-debug-info
@itemx -mno-ocs-debug-info
@kindex -mocs-debug-info
@kindex -mno-ocs-debug-info
@cindex OCS (88k)
@cindex debugging, 88k OCS
Include (or omit) additional debugging information (about registers used
in each stack frame) as specified in the 88open Object Compatibility
Standard, ``OCS''.  This extra information allows debugging of code that
has had the frame pointer eliminated.  The default for DG/UX, SVr4, and
Delta 88 SVr3.2 is to include this information; other 88k configurations
omit this information by default.

@item -mocs-frame-position
@kindex -mocs-frame-position
@cindex register positions in frame (88k)
When emitting COFF debugging information for automatic variables and
parameters stored on the stack, use the offset from the canonical frame
address, which is the stack pointer (register 31) on entry to the
function.  The DG/UX, SVr4, Delta88 SVr3.2, and BCS configurations use
@samp{-mocs-frame-position}; other 88k configurations have the default
@samp{-mno-ocs-frame-position}.

@item -mno-ocs-frame-position
@kindex -mno-ocs-frame-position
@cindex register positions in frame (88k)
When emitting COFF debugging information for automatic variables and
parameters stored on the stack, use the offset from the frame pointer
register (register 30).  When this option is in effect, the frame
pointer is not eliminated when debugging information is selected by the
-g switch.

@item -moptimize-arg-area
@itemx -mno-optimize-arg-area
@kindex -moptimize-arg-area
@kindex -mno-optimize-arg-area
@cindex arguments in frame (88k)
Control how function arguments are stored in stack frames.
@samp{-moptimize-arg-area} saves space by optimizing them, but this
conflicts with the 88open specifications.  The opposite alternative,
@samp{-mno-optimize-arg-area}, agrees with 88open standards.  By default
GNU CC does not optimize the argument area.

@item -mshort-data-@var{num}
@kindex -mshort-data-@var{num}
@cindex smaller data references (88k)
@cindex r0-relative references (88k)
Generate smaller data references by making them relative to @code{r0},
which allows loading a value using a single instruction (rather than the
usual two).  You control which data references are affected by
specifying @var{num} with this option.  For example, if you specify
@samp{-mshort-data-512}, then the data references affected are those
involving displacements of less than 512 bytes.
@samp{-mshort-data-@var{num}} is not effective for @var{num} greater
than 64k.

@item -mserialize-volatile
@kindex -mserialize-volatile
@itemx -mno-serialize-volatile
@kindex -mno-serialize-volatile
@cindex sequential consistency on 88k
Do, or don't, generate code to guarantee sequential consistency
of volatile memory references.  By default, consistency is
guaranteed.

The order of memory references made by the MC88110 processor does
not always match the order of the instructions requesting those
references.  In particular, a load instruction may execute before
a preceding store instruction.  Such reordering violates
sequential consistency of volatile memory references, when there
are multiple processors.   When consistency must be guaranteed,
GNU C generates special instructions, as needed, to force
execution in the proper order.

The MC88100 processor does not reorder memory references and so
always provides sequential consistency.  However, by default, GNU
C generates the special instructions to guarantee consistency
even when you use @samp{-m88100}, so that the code may be run on an
MC88110 processor.  If you intend to run your code only on the
MC88100 processor, you may use @samp{-mno-serialize-volatile}.

The extra code generated to guarantee consistency may affect the
performance of your application.  If you know that you can safely
forgo this guarantee, you may use @samp{-mno-serialize-volatile}.

@item -msvr4
@itemx -msvr3
@kindex -msvr4
@kindex -msvr3
@cindex assembler syntax, 88k
@cindex SVr4
Turn on (@samp{-msvr4}) or off (@samp{-msvr3}) compiler extensions
related to System V release 4 (SVr4).  This controls the following:

@enumerate
@item
Which variant of the assembler syntax to emit.
@item
@samp{-msvr4} makes the C preprocessor recognize @samp{#pragma weak}
that is used on System V release 4.
@item
@samp{-msvr4} makes GNU CC issue additional declaration directives used in
SVr4.
@end enumerate

@samp{-msvr4} is the default for the m88k-motorola-sysv4 and
m88k-dg-dgux m88k configurations. @samp{-msvr3} is the default for all
other m88k configurations.

@item -mversion-03.00
@kindex -mversion-03.00
This option is obsolete, and is ignored.
@c ??? which asm syntax better for GAS?  option there too?

@item -mno-check-zero-division
@itemx -mcheck-zero-division
@kindex -mno-check-zero-division
@kindex -mcheck-zero-division
@cindex zero division on 88k
Do, or don't, generate code to guarantee that integer division by
zero will be detected.  By default, detection is guaranteed.

Some models of the MC88100 processor fail to trap upon integer
division by zero under certain conditions.  By default, when
compiling code that might be run on such a processor, GNU C
generates code that explicitly checks for zero-valued divisors
and traps with exception number 503 when one is detected.  Use of
mno-check-zero-division suppresses such checking for code
generated to run on an MC88100 processor.

GNU C assumes that the MC88110 processor correctly detects all
instances of integer division by zero.  When @samp{-m88110} is
specified, both @samp{-mcheck-zero-division} and
@samp{-mno-check-zero-division} are ignored, and no explicit checks for
zero-valued divisors are generated.

@item -muse-div-instruction
@kindex -muse-div-instruction
@cindex divide instruction, 88k
Use the div instruction for signed integer division on the
MC88100 processor.  By default, the div instruction is not used.

On the MC88100 processor the signed integer division instruction
div) traps to the operating system on a negative operand.  The
operating system transparently completes the operation, but at a
large cost in execution time.  By default, when compiling code
that might be run on an MC88100 processor, GNU C emulates signed
integer division using the unsigned integer division instruction
divu), thereby avoiding the large penalty of a trap to the
operating system.  Such emulation has its own, smaller, execution
cost in both time and space.  To the extent that your code's
important signed integer division operations are performed on two
nonnegative operands, it may be desirable to use the div
instruction directly.

On the MC88110 processor the div instruction (also known as the
divs instruction) processes negative operands without trapping to
the operating system.  When @samp{-m88110} is specified,
@samp{-muse-div-instruction} is ignored, and the div instruction is used
for signed integer division.

Note that the result of dividing INT_MIN by -1 is undefined.  In
particular, the behavior of such a division with and without
@samp{-muse-div-instruction}  may differ.

@item -mtrap-large-shift
@itemx -mhandle-large-shift
@kindex -mtrap-large-shift
@kindex -mhandle-large-shift
@cindex bit shift overflow (88k)
@cindex large bit shifts (88k)
Include code to detect bit-shifts of more than 31 bits; respectively,
trap such shifts or emit code to handle them properly.  By default GNU CC
makes no special provision for large bit shifts.

@item -mwarn-passed-structs
@kindex -mwarn-passed-structs
@cindex structure passing (88k)
Warn when a function passes a struct as an argument or result.
Structure-passing conventions have changed during the evolution of the C
language, and are often the source of portability problems.  By default,
GNU CC issues no such warning.
@end table

@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 @code
@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
@kindex -mpower
@kindex -mpower2
@kindex -mpowerpc
@kindex -mpowerpc-gpopt
@kindex -mpowerpc-gfxopt
@kindex -mpowerpc64
GNU CC 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 Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
the IBM 4xx 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 GNU CC.  Specifying the
@samp{-mcpu=@var{cpu_type}} overrides the specification of these
options.  We recommend you use the @samp{-mcpu=@var{cpu_type}} option
rather than the options listed above.

The @samp{-mpower} option allows GNU CC to generate instructions that
are found only in the POWER architecture and to use the MQ register.
Specifying @samp{-mpower2} implies @samp{-power} and also allows GNU CC
to generate instructions that are present in the POWER2 architecture but
not the original POWER architecture.

The @samp{-mpowerpc} option allows GNU CC to generate instructions that
are found only in the 32-bit subset of the PowerPC architecture.
Specifying @samp{-mpowerpc-gpopt} implies @samp{-mpowerpc} and also allows
GNU CC to use the optional PowerPC architecture instructions in the
General Purpose group, including floating-point square root.  Specifying
@samp{-mpowerpc-gfxopt} implies @samp{-mpowerpc} and also allows GNU CC to
use the optional PowerPC architecture instructions in the Graphics
group, including floating-point select.

The @samp{-mpowerpc64} option allows GNU CC to generate the additional
64-bit instructions that are found in the full PowerPC64 architecture
and to treat GPRs as 64-bit, doubleword quantities.  GNU CC defaults to
@samp{-mno-powerpc64}.

If you specify both @samp{-mno-power} and @samp{-mno-powerpc}, GNU CC
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 @samp{-mpower} and @samp{-mpowerpc}
permits GNU CC 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
@kindex -mnew-mnemonics
@kindex -mold-mnemonics
Select which mnemonics to use in the generated assembler code.
@samp{-mnew-mnemonics} requests output that uses the assembler mnemonics
defined for the PowerPC architecture, while @samp{-mold-mnemonics}
requests the assembler mnemonics defined for the POWER architecture.
Instructions defined in only one architecture have only one mnemonic;
GNU CC uses that mnemonic irrespective of which of these options is
specified.

GNU CC defaults to the mnemonics appropriate for the architecture in
use.  Specifying @samp{-mcpu=@var{cpu_type}} sometimes overrides the
value of these option.  Unless you are building a cross-compiler, you
should normally not specify either @samp{-mnew-mnemonics} or
@samp{-mold-mnemonics}, but should instead accept the default.

@item -mcpu=@var{cpu_type}
@kindex -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{rs6000}, @samp{rios1},
@samp{rios2}, @samp{rsc}, @samp{601}, @samp{602}, @samp{603},
@samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{power},
@samp{power2}, @samp{powerpc}, @samp{403}, @samp{505}, @samp{801},
@samp{821}, @samp{823}, and @samp{860} and @samp{common}.
@samp{-mcpu=power}, @samp{-mcpu=power2}, and @samp{-mcpu=powerpc}
specify generic POWER, POWER2 and pure PowerPC (i.e., not MPC601)
architecture machine types, with an appropriate, generic processor model
assumed for scheduling purposes.@refill

@c overfull hbox here --bob 22 jul96
@c original text between ignore ... end ignore
@ignore
Specifying any of the @samp{-mcpu=rios1}, @samp{-mcpu=rios2},
@samp{-mcpu=rsc}, @samp{-mcpu=power}, or @samp{-mcpu=power2} options
enables the @samp{-mpower} option and disables the @samp{-mpowerpc}
option; @samp{-mcpu=601} enables both the @samp{-mpower} and
@samp{-mpowerpc} options; all of @samp{-mcpu=602}, @samp{-mcpu=603},
@samp{-mcpu=603e}, @samp{-mcpu=604}, @samp{-mcpu=604e},
@samp{-mcpu=620}, @samp{-mcpu=403}, @samp{-mcpu=505}, @samp{-mcpu=801},
@samp{-mcpu=821}, @samp{-mcpu=823}, @samp{-mcpu=860} and
@samp{-mcpu=powerpc} enable the @samp{-mpowerpc} option and disable the
@samp{-mpower} option; @samp{-mcpu=common} disables both the
@samp{-mpower} and @samp{-mpowerpc} options.@refill
@end ignore
@c            changed paragraph
Specifying any of the following options: 
@samp{-mcpu=rios1}, @samp{-mcpu=rios2}, @samp{-mcpu=rsc},
@samp{-mcpu=power}, or @samp{-mcpu=power2}  
enables the @samp{-mpower} option and disables the @samp{-mpowerpc} option; 
@samp{-mcpu=601} enables both the @samp{-mpower} and @samp{-mpowerpc} options.
All of @samp{-mcpu=602}, @samp{-mcpu=603}, @samp{-mcpu=603e},
@samp{-mcpu=604}, @samp{-mcpu=620}, 
enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.  
Exactly similarly, all of @samp{-mcpu=403},
@samp{-mcpu=505}, @samp{-mcpu=821}, @samp{-mcpu=860} and @samp{-mcpu=powerpc} 
enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.
@samp{-mcpu=common} disables both the 
@samp{-mpower} and @samp{-mpowerpc} options.@refill
@c             end changes to prevent overfull hboxes

AIX versions 4 or greater selects @samp{-mcpu=common} by default, so
that code will operate on all members of the RS/6000 and PowerPC
families.  In that case, GNU CC 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.  GNU CC assumes a generic
processor model for scheduling purposes.

Specifying any of the options @samp{-mcpu=rios1}, @samp{-mcpu=rios2},
@samp{-mcpu=rsc}, @samp{-mcpu=power}, or @samp{-mcpu=power2} also
disables the @samp{new-mnemonics} option.  Specifying @samp{-mcpu=601},
@samp{-mcpu=602}, @samp{-mcpu=603}, @samp{-mcpu=603e}, @samp{-mcpu=604},
@samp{620}, @samp{403}, or @samp{-mcpu=powerpc} also enables the
@samp{new-mnemonics} option.@refill

Specifying @samp{-mcpu=403}, @samp{-mcpu=821}, or @samp{-mcpu=860} also
enables the @samp{-msoft-float} option.

@item -mtune=@var{cpu_type}
Set the instruction scheduling parameters for machine type
@var{cpu_type}, but do not set the architecture type, register usage,
choice of mnemonics like @samp{-mcpu=}@var{cpu_type} would.  The same
values for @var{cpu_type} are used for @samp{-mtune=}@var{cpu_type} as
for @samp{-mcpu=}@var{cpu_type}.  The @samp{-mtune=}@var{cpu_type}
option overrides the @samp{-mcpu=}@var{cpu_type} option in terms of
instruction scheduling parameters.

@item -mfull-toc
@itemx -mno-fp-in-toc
@itemx -mno-sum-in-toc
@itemx -mminimal-toc
@kindex -mminimal-toc
Modify generation of the TOC (Table Of Contents), which is created for
every executable file.  The @samp{-mfull-toc} option is selected by
default.  In that case, GNU CC will allocate at least one TOC entry for
each unique non-automatic variable reference in your program.  GNU CC
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 @samp{-mno-fp-in-toc} and @samp{-mno-sum-in-toc} options.
@samp{-mno-fp-in-toc} prevents GNU CC from putting floating-point
constants in the TOC and @samp{-mno-sum-in-toc} forces GNU CC 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 GNU CC 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 @samp{-mminimal-toc} instead.  This option causes
GNU CC to make only one TOC entry for every file.  When you specify this
option, GNU CC 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. @refill

@item -maix64
@itemx -maix32
@kindex -maix64
@kindex -maix32
Enable AIX 64-bit ABI and calling convention: 64-bit pointers, 64-bit
@code{long} type, and the infrastructure needed to support them.
Specifying @samp{-maix64} implies @samp{-mpowerpc64} and
@samp{-mpowerpc}, while @samp{-maix32} disables the 64-bit ABI and
implies @samp{-mno-powerpc64}.  GNU CC defaults to @samp{-maix32}.

@item -mxl-call
@itemx -mno-xl-call
@kindex -mxl-call
On AIX, pass floating-point arguments to prototyped functions beyond the
register save area (RSA) on the stack in addition to argument FPRs.  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.  AIX 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 AIX
XL compilers without optimization.

@item -mthreads
@kindex -mthreads
Support @dfn{AIX Threads}.  Link an application written to use
@dfn{pthreads} with special libraries and startup code to enable the
application to run.

@item -mpe
@kindex -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 @samp{-specs=} option to specify the
appropriate directory location.  The Parallel Environment does not
support threads, so the @samp{-mpe} option and the @samp{-mthreads}
option are incompatible.

@item -msoft-float
@itemx -mhard-float
@kindex -msoft-float
Generate code that does not use (uses) the floating-point register set.
Software floating point emulation is provided if you use the
@samp{-msoft-float} option, and pass the option to GNU CC when linking.

@item -mmultiple
@itemx -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 @samp{-mmultiple} on little
endian PowerPC systems, since those instructions do not work when the
processor is in little endian mode.

@item -mstring
@itemx -mno-string
@kindex -mstring
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 @samp{-mstring} on little endian
PowerPC systems, since those instructions do not work when the processor is in
little endian mode.

@item -mupdate
@itemx -mno-update
@kindex -mupdate
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
@samp{-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
@kindex -mfused-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 -mno-bit-align
@itemx -mbit-align
@kindex -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} bitfields of length 1 would be aligned to a 4 byte
boundary and have a size of 4 bytes.  By using @samp{-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
@kindex -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
@kindex -mrelocatable
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 @samp{-mrelocatable} on any module, all objects linked together must
be compiled with @samp{-mrelocatable} or @samp{-mrelocatable-lib}.

@item -mrelocatable-lib
@itemx -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 @samp{-mrelocatable-lib} can be linked with either modules
compiled without @samp{-mrelocatable} and @samp{-mrelocatable-lib} or
with modules compiled with the @samp{-mrelocatable} options.

@item -mno-toc
@itemx -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
On System V.4 and embedded PowerPC systems compile code for the
processor in little endian mode.  The @samp{-mlittle-endian} option is
the same as @samp{-mlittle}.

@item -mbig
@itemx -mbig-endian
On System V.4 and embedded PowerPC systems compile code for the
processor in big endian mode.  The @samp{-mbig-endian} option is
the same as @samp{-mbig}.

@item -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
Specify both @samp{-mcall-sysv} and @samp{-meabi} options.

@item -mcall-sysv-noeabi
Specify both @samp{-mcall-sysv} and @samp{-mno-eabi} options.

@item -mcall-aix
On System V.4 and embedded PowerPC systems compile code using calling
conventions that are similar to those used on AIX.  This is the
default if you configured GCC using @samp{powerpc-*-eabiaix}.

@item -mcall-solaris
On System V.4 and embedded PowerPC systems compile code for the Solaris
operating system.

@item -mcall-linux
On System V.4 and embedded PowerPC systems compile code for the
Linux-based GNU system.

@item -mprototype
@itemx -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
@samp{-mprototype}, only calls to prototyped variable argument functions
will set or clear the bit.

@item -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
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
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
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 -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
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 @code{-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 @samp{-msdata} option can use both @code{r2} and
@code{r13} to point to two separate small data areas.  Selecting
@code{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
do not call an initialization function from @code{main}, and the
@samp{-msdata} option will only use @code{r13} to point to a single
small data area.  The @samp{-meabi} option is on by default if you
configured GCC using one of the @samp{powerpc*-*-eabi*} options.

@item -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 @samp{-msdata=eabi} option is
incompatible with the @samp{-mrelocatable} option.  The
@samp{-msdata=eabi} option also sets the @samp{-memb} option.

@item -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 @samp{-msdata=sysv} option is incompatible with the
@samp{-mrelocatable} option.

@item -msdata=default
@itemx -msdata
On System V.4 and embedded PowerPC systems, if @samp{-meabi} is used,
compile code the same as @samp{-msdata=eabi}, otherwise compile code the
same as @samp{-msdata=sysv}.

@item -msdata-data
On System V.4 and embedded PowerPC systems, put small global and static
data in the @samp{.sdata} section.  Put small uninitialized global and
static data in the @samp{.sbss} section.  Do not use register @code{r13}
to address small data however.  This is the default behavior unless
other @samp{-msdata} options are used.

@item -msdata=none
@itemx -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}
@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
@samp{-G @var{num}} switch is also passed to the linker.
All modules should be compiled with the same @samp{-G @var{num}} value.

@item -mregnames
@itemx -mno-regnames
On System V.4 and embedded PowerPC systems do (do not) emit register
names in the assembly language output using symbolic forms.
@end table
@node RT Options
@subsection IBM RT Options
@cindex RT options
@cindex IBM RT options

These @samp{-m} options are defined for the IBM RT PC:

@table @code
@item -min-line-mul
Use an in-line code sequence for integer multiplies.  This is the
default.

@item -mcall-lib-mul
Call @code{lmul$$} for integer multiples.

@item -mfull-fp-blocks
Generate full-size floating point data blocks, including the minimum
amount of scratch space recommended by IBM.  This is the default.

@item -mminimum-fp-blocks
Do not include extra scratch space in floating point data blocks.  This
results in smaller code, but slower execution, since scratch space must
be allocated dynamically.

@cindex @file{varargs.h} and RT PC
@cindex @file{stdarg.h} and RT PC
@item -mfp-arg-in-fpregs
Use a calling sequence incompatible with the IBM calling convention in
which floating point arguments are passed in floating point registers.
Note that @code{varargs.h} and @code{stdargs.h} will not work with
floating point operands if this option is specified.

@item -mfp-arg-in-gregs
Use the normal calling convention for floating point arguments.  This is
the default.

@item -mhc-struct-return
Return structures of more than one word in memory, rather than in a
register.  This provides compatibility with the MetaWare HighC (hc)
compiler.  Use the option @samp{-fpcc-struct-return} for compatibility
with the Portable C Compiler (pcc).

@item -mnohc-struct-return
Return some structures of more than one word in registers, when
convenient.  This is the default.  For compatibility with the
IBM-supplied compilers, use the option @samp{-fpcc-struct-return} or the
option @samp{-mhc-struct-return}.
@end table

@node MIPS Options
@subsection MIPS Options
@cindex MIPS options

These @samp{-m} options are defined for the MIPS family of computers:

@table @code
@item -mcpu=@var{cpu type}
Assume the defaults for the machine type @var{cpu type} when scheduling
instructions.  The choices for @var{cpu type} are @samp{r2000}, @samp{r3000},
@samp{r4000}, @samp{r4400}, @samp{r4600}, and @samp{r6000}.  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
meet level 1 of the MIPS ISA (instruction set architecture) without
the @samp{-mips2} or @samp{-mips3} switches being used.

@item -mips1
Issue instructions from level 1 of the MIPS ISA.  This is the default.
@samp{r3000} is the default @var{cpu type} at this ISA level.

@item -mips2
Issue instructions from level 2 of the MIPS ISA (branch likely, square
root instructions).  @samp{r6000} is the default @var{cpu type} at this
ISA level.

@item -mips3
Issue instructions from level 3 of the MIPS ISA (64 bit instructions).
@samp{r4000} is the default @var{cpu type} at this ISA level.
This option does not change the sizes of any of the C data types.

@item -mips4
Issue instructions from level 4 of the MIPS ISA.  @samp{r8000} is the
default @var{cpu type} at this ISA level.

@item -mfp32
Assume that 32 32-bit floating point registers are available.  This is
the default.

@item -mfp64
Assume that 32 64-bit floating point registers are available.  This is
the default when the @samp{-mips3} option is used.

@item -mgp32
Assume that 32 32-bit general purpose registers are available.  This is
the default.

@item -mgp64
Assume that 32 64-bit general purpose registers are available.  This is
the default when the @samp{-mips3} option is used.

@item -mint64
Types long, int, and pointer are 64 bits.  This works only if @samp{-mips3}
is also specified.

@item -mlong64
Types long and pointer are 64 bits, and type int is 32 bits.
This works only if @samp{-mips3} is also specified.

@itemx -mabi=32
@itemx -mabi=n32
@itemx -mabi=64
@itemx -mabi=eabi
Generate code for the indicated ABI.

@item -mmips-as
Generate code for the MIPS assembler, and invoke @file{mips-tfile} to
add normal debug information.  This is the default for all
platforms except for the OSF/1 reference platform, using the OSF/rose
object format.  If the either of the @samp{-gstabs} or @samp{-gstabs+}
switches are used, the @file{mips-tfile} program will encapsulate the
stabs within MIPS ECOFF.

@item -mgas
Generate code for the GNU assembler.  This is the default on the OSF/1
reference platform, using the OSF/rose object format.  Also, this is
the default if the configure option @samp{--with-gnu-as} is used.

@item -msplit-addresses
@itemx -mno-split-addresses
Generate code to load the high and low parts of address constants separately.
This allows @code{gcc} to optimize away redundant loads of the high order
bits of addresses.  This optimization requires GNU as and GNU ld.
This optimization is enabled by default for some embedded targets where
GNU as and GNU ld are standard.

@item -mrnames
@itemx -mno-rnames
The @samp{-mrnames} switch says to output code using the MIPS software
names for the registers, instead of the hardware names (ie, @var{a0}
instead of @var{$4}).  The only known assembler that supports this option
is the Algorithmics assembler.

@item -mgpopt
@itemx -mno-gpopt
The @samp{-mgpopt} switch says to write all of the data declarations
before the instructions in the text section, this allows the MIPS
assembler to generate one word memory references instead of using two
words for short global or static data items.  This is on by default if
optimization is selected.

@item -mstats
@itemx -mno-stats
For each non-inline function processed, the @samp{-mstats} switch
causes the compiler to emit one line to the standard error file to
print statistics about the program (number of registers saved, stack
size, etc.).

@item -mmemcpy
@itemx -mno-memcpy
The @samp{-mmemcpy} switch makes all block moves call the appropriate
string function (@samp{memcpy} or @samp{bcopy}) instead of possibly
generating inline code.

@item -mmips-tfile
@itemx -mno-mips-tfile
The @samp{-mno-mips-tfile} switch causes the compiler not
postprocess the object file with the @file{mips-tfile} program,
after the MIPS assembler has generated it to add debug support.  If
@file{mips-tfile} is not run, then no local variables will be
available to the debugger.  In addition, @file{stage2} and
@file{stage3} objects will have the temporary file names passed to the
assembler embedded in the object file, which means the objects will
not compare the same.  The @samp{-mno-mips-tfile} switch should only
be used when there are bugs in the @file{mips-tfile} program that
prevents compilation.

@item -msoft-float
Generate output containing library calls for floating point.
@strong{Warning:} the requisite libraries are not part of GNU CC.
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.

@item -mhard-float
Generate output containing floating point instructions.  This is the
default if you use the unmodified sources.

@item -mabicalls
@itemx -mno-abicalls
Emit (or do not emit) the pseudo operations @samp{.abicalls},
@samp{.cpload}, and @samp{.cprestore} that some System V.4 ports use for
position independent code.

@item -mlong-calls
@itemx -mno-long-calls
Do all calls with the @samp{JALR} instruction, which requires
loading up a function's address into a register before the call.
You need to use this switch, if you call outside of the current
512 megabyte segment to functions that are not through pointers.

@item -mhalf-pic
@itemx -mno-half-pic
Put pointers to extern references into the data section and load them
up, rather than put the references in the text section.

@item -membedded-pic
@itemx -mno-embedded-pic
Generate PIC code suitable for some embedded systems.  All calls are
made using PC relative address, and all data is addressed using the $gp
register.  No more than 65536 bytes of global data may be used.  This
requires GNU as and GNU ld which do most of the work.  This currently
only works on targets which use ECOFF; it does not work with ELF.

@item -membedded-data
@itemx -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 -msingle-float
@itemx -mdouble-float
The @samp{-msingle-float} switch tells gcc to assume that the floating
point coprocessor only supports single precision operations, as on the
@samp{r4650} chip.  The @samp{-mdouble-float} switch permits gcc to use
double precision operations.  This is the default.

@item -mmad
@itemx -mno-mad
Permit use of the @samp{mad}, @samp{madu} and @samp{mul} instructions,
as on the @samp{r4650} chip.

@item -m4650
Turns on @samp{-msingle-float}, @samp{-mmad}, and, at least for now,
@samp{-mcpu=r4650}.

@item -EL
Compile code for the processor in little endian mode.
The requisite libraries are assumed to exist.

@item -EB
Compile code for the processor in big endian mode.
The requisite libraries are assumed to exist.

@item -G @var{num}
@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 sections instead of the normal data or bss
section.  This allows the assembler to emit one word memory reference
instructions based on the global pointer (@var{gp} or @var{$28}),
instead of the normal two words used.  By default, @var{num} is 8 when
the MIPS assembler is used, and 0 when the GNU assembler is used.  The
@samp{-G @var{num}} switch is also passed to the assembler and linker.
All modules should be compiled with the same @samp{-G @var{num}}
value.

@item -nocpp
Tell the MIPS assembler to not run its preprocessor over user
assembler files (with a @samp{.s} suffix) when assembling them.
@end table

@ifset INTERNALS
These options are defined by the macro
@code{TARGET_SWITCHES} in the machine description.  The default for the
options is also defined by that macro, which enables you to change the
defaults.
@end ifset

@node i386 Options
@subsection Intel 386 Options
@cindex i386 Options
@cindex Intel 386 Options

These @samp{-m} options are defined for the i386 family of computers:

@table @code
@item -mcpu=@var{cpu type}
Assume the defaults for the machine type @var{cpu type} when scheduling
instructions.  The choices for @var{cpu type} are: @samp{i386},
@samp{i486}, @samp{i586} (@samp{pentium}), @samp{pentium}, @samp{i686}
(@samp{pentiumpro}) and @samp{pentiumpro}. 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 @samp{-march=@var{cpu type}} option being used.

@item -march=@var{cpu type}
Generate instructions for the machine type @var{cpu type}.  The choices
for @var{cpu type} are: @samp{i386}, @samp{i486}, @samp{pentium}, and
@samp{pentiumpro}.  Specifying @samp{-march=@var{cpu type}} implies
@samp{-mcpu=@var{cpu type}}.

@item -m386
@itemx -m486
@itemx -mpentium
@itemx -mpentiumpro
Synonyms for -mcpu=i386, -mcpu=i486, -mcpu=pentium, and -mcpu=pentiumpro
respectively.

@item -mieee-fp
@itemx -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
Generate output containing library calls for floating point.
@strong{Warning:} the requisite libraries are not part of GNU CC.
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
@samp{-msoft-float} is used.

@item -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 @samp{-mno-fp-ret-in-387} causes such values to be returned
in ordinary CPU registers instead.

@item -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.
As of revision 2.6.1, these instructions are not generated unless you
also use the @samp{-ffast-math} switch.

@item -malign-double
@itemx -mno-align-double
Control whether GNU CC 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.

@strong{Warning:} if you use the @samp{-malign-double} switch,
structures containing the above types will be aligned differently than
the published application binary interface specifications for the 386.

@item -msvr3-shlib
@itemx -mno-svr3-shlib
Control whether GNU CC places uninitialized locals into @code{bss} or
@code{data}.  @samp{-msvr3-shlib} places these locals into @code{bss}.
These options are meaningful only on System V Release 3.

@item -mno-wide-multiply
@itemx -mwide-multiply
Control whether GNU CC uses the @code{mul} and @code{imul} that produce
64 bit results in @code{eax:edx} from 32 bit operands to do @code{long
long} multiplies and 32-bit division by constants.

@item -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 @samp{-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 -mreg-alloc=@var{regs}
Control the default allocation order of integer registers.  The
string @var{regs} is a series of letters specifying a register.  The
supported letters are: @code{a} allocate EAX; @code{b} allocate EBX;
@code{c} allocate ECX; @code{d} allocate EDX; @code{S} allocate ESI;
@code{D} allocate EDI; @code{B} allocate EBP.

@item -mregparm=@var{num}
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 -malign-loops=@var{num}
Align loops to a 2 raised to a @var{num} byte boundary.  If
@samp{-malign-loops} is not specified, the default is 2 unless
gas 2.8 (or later) is being used in which case the default is
to align the loop on a 16 byte boundary if it is less than 8
bytes away.

@item -malign-jumps=@var{num}
Align instructions that are only jumped to to a 2 raised to a @var{num}
byte boundary.  If @samp{-malign-jumps} is not specified, the default is
2 if optimizing for a 386, and 4 if optimizing for a 486 unless
gas 2.8 (or later) is being used in which case the default is
to align the instruction on a 16 byte boundary if it is less
than 8 bytes away.

@item -malign-functions=@var{num}
Align the start of functions to a 2 raised to @var{num} byte boundary.
If @samp{-malign-functions} is not specified, the default is 2 if optimizing
for a 386, and 4 if optimizing for a 486.
@end table

@node HPPA Options
@subsection HPPA Options
@cindex HPPA Options

These @samp{-m} options are defined for the HPPA family of computers:

@table @code
@item -mpa-risc-1-0
Generate code for a PA 1.0 processor.

@item -mpa-risc-1-1
Generate code for a PA 1.1 processor.

@item -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
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
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
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
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
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 presense of shared libraries or nested
functions.

@item -mspace
Optimize for space rather than execution time.  Currently this only
enables out of line function prologues and epilogues.  This option is
incompatible with PIC code generation and profiling.

@item -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
Use the portable calling conventions proposed by HP for ELF systems.

@item -mgas
Enable the use of assembler directives only GAS understands.

@item -mschedule=@var{cpu type}
Schedule code according to the constraints for the machine type
@var{cpu type}.  The choices for @var{cpu type} are @samp{700} for
7@var{n}0 machines, @samp{7100} for 7@var{n}5 machines, and @samp{7100LC}
for 7@var{n}2 machines.  @samp{7100} is the default for @var{cpu type}.

Note the @samp{7100LC} scheduling information is incomplete and using
@samp{7100LC} often leads to bad schedules.  For now it's probably best
to use @samp{7100} instead of @samp{7100LC} for the 7@var{n}2 machines.

@item -mlinker-opt
Enable the optimization pass in the HPUX linker.  Note this makes symbolic
debugging impossible.  It also triggers a bug in the HPUX 8 and HPUX 9 linkers
in which they give bogus error messages when linking some programs.

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

@samp{-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 GNU CC, with @samp{-msoft-float} in order for
this to work.
@end table

@node Intel 960 Options
@subsection Intel 960 Options

These @samp{-m} options are defined for the Intel 960 implementations:

@table @code
@item -m@var{cpu type}
Assume the defaults for the machine type @var{cpu type} for some of
the other options, including instruction scheduling, floating point
support, and addressing modes.  The choices for @var{cpu type} are
@samp{ka}, @samp{kb}, @samp{mc}, @samp{ca}, @samp{cf},
@samp{sa}, and @samp{sb}.
The default is
@samp{kb}.

@item -mnumerics
@itemx -msoft-float
The @samp{-mnumerics} option indicates that the processor does support
floating-point instructions.  The @samp{-msoft-float} option indicates
that floating-point support should not be assumed.

@item -mleaf-procedures
@itemx -mno-leaf-procedures
Do (or do not) attempt to alter leaf procedures to be callable with the
@code{bal} instruction as well as @code{call}.  This will result in more
efficient code for explicit calls when the @code{bal} instruction can be
substituted by the assembler or linker, but less efficient code in other
cases, such as calls via function pointers, or using a linker that doesn't
support this optimization.

@item -mtail-call
@itemx -mno-tail-call
Do (or do not) make additional attempts (beyond those of the
machine-independent portions of the compiler) to optimize tail-recursive
calls into branches.  You may not want to do this because the detection of
cases where this is not valid is not totally complete.  The default is
@samp{-mno-tail-call}.

@item -mcomplex-addr
@itemx -mno-complex-addr
Assume (or do not assume) that the use of a complex addressing mode is a
win on this implementation of the i960.  Complex addressing modes may not
be worthwhile on the K-series, but they definitely are on the C-series.
The default is currently @samp{-mcomplex-addr} for all processors except
the CB and CC.

@item -mcode-align
@itemx -mno-code-align
Align code to 8-byte boundaries for faster fetching (or don't bother).
Currently turned on by default for C-series implementations only.

@ignore
@item -mclean-linkage
@itemx -mno-clean-linkage
These options are not fully implemented.
@end ignore

@item -mic-compat
@itemx -mic2.0-compat
@itemx -mic3.0-compat
Enable compatibility with iC960 v2.0 or v3.0.

@item -masm-compat
@itemx -mintel-asm
Enable compatibility with the iC960 assembler.

@item -mstrict-align
@itemx -mno-strict-align
Do not permit (do permit) unaligned accesses.

@item -mold-align
Enable structure-alignment compatibility with Intel's gcc release version
1.3 (based on gcc 1.37).  This option implies @samp{-mstrict-align}.
@end table

@node DEC Alpha Options
@subsection DEC Alpha Options

These @samp{-m} options are defined for the DEC Alpha implementations:

@table @code
@item -mno-soft-float
@itemx -msoft-float
Use (do not use) the hardware floating-point instructions for
floating-point operations.  When @code{-msoft-float} is specified,
functions in @file{libgcc1.c} 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
Generate code that uses (does not use) the floating-point register set.
@code{-mno-fp-regs} implies @code{-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 $0 instead of $f0.  This is a non-standard calling sequence, so any
function with a floating-point argument or return value called by code
compiled with @code{-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
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 CPP macro @code{_IEEE_FP} is defined
during compilation.  The option is a shorthand for: @samp{-D_IEEE_FP
-mfp-trap-mode=su -mtrap-precision=i -mieee-conformant}.  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
@code{-ieee_with_no_inexact}.

@item -mieee-with-inexact
@c overfull hbox here --bob 22 jul96
@c original text between ignore ... end ignore
@ignore
This is like @samp{-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.  The option is a shorthand
for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus @samp{-mieee-conformant},
@samp{-mfp-trap-mode=sui}, and @samp{-mtrap-precision=i}.  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
@samp{-ieee_with_inexact}.
@end ignore
@c            changed paragraph
This is like @samp{-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.  The option is a shorthand
for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus the three following:
@samp{-mieee-conformant},
@samp{-mfp-trap-mode=sui}, 
and @samp{-mtrap-precision=i}.  
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 @samp{-ieee_with_inexact}.
@c             end changes to prevent overfull hboxes

@item -mfp-trap-mode=@var{trap mode}
This option controls what floating-point related traps are enabled.
Other Alpha compilers call this option @samp{-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{su}, 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}
Selects the IEEE rounding mode.  Other Alpha compilers call this option
@samp{-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}
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.
GNU CC 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
@samp{-scope_safe} and @samp{-resumption_safe}.

@item -mieee-conformant
This option marks the generated code as IEEE conformant.  You must not
use this option unless you also specify @samp{-mtrap-precision=i} and either
@samp{-mfp-trap-mode=su} or @samp{-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
Normally GNU CC 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 GNU CC 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
Select whether to generate code to be assembled by the vendor-supplied
assembler (@samp{-malpha-as}) or by the GNU assembler @samp{-mgas}.

@item -mbwx
@itemx -mno-bwx
@itemx -mcix
@itemx -mno-cix
@itemx -mmax
@itemx -mno-max
Indicate whether GNU CC should generate code to use the optional BWX,
CIX, and MAX instruction sets.  The default is to use the instruction sets
supported by the CPU type specified via @samp{-mcpu=} option or that
of the CPU on which GNU CC was built if none was specified.

@item -mcpu=@var{cpu_type}
Set the instruction set, register 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.  GNU CC
supports scheduling parameters for the EV4 and EV5 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,
GNU CC will default to the processor on which the compiler was built.

Supported values for @var{cpu_type} are

@table @samp
@item ev4
@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 EV5 (until Digital releases the scheduling parameters
for the EV6) and supports the BWX, CIX, and MAX extensions.
@end table

@item -mmemory-latency=@var{time}
Sets the latency the scheduler should assume for typical memory
references as seen by the application.  This number is highly
dependant 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 Clipper Options
@subsection Clipper Options

These @samp{-m} options are defined for the Clipper implementations:

@table @code
@item -mc300
Produce code for a C300 Clipper processor. This is the default.

@itemx -mc400
Produce code for a C400 Clipper processor i.e. use floating point
registers f8..f15.
@end table

@node H8/300 Options
@subsection H8/300 Options

These @samp{-m} options are defined for the H8/300 implementations:

@table @code
@item -mrelax
Shorten some address references at link time, when possible; uses the
linker option @samp{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
ld.info, Using ld}, for a fuller description.

@item -mh
Generate code for the H8/300H.

@item -ms
Generate code for the H8/S.

@item -mint32
Make @code{int} data 32 bits by default.

@item -malign-300
On the h8/300h, use the same alignment rules as for the h8/300.
The default for the h8/300h is to align longs and floats on 4 byte boundaries.
@samp{-malign-300} causes them to be aligned on 2 byte boundaries.
This option has no effect on the h8/300.
@end table

@node SH Options
@subsection SH Options

These @samp{-m} options are defined for the SH implementations:

@table @code
@item -m1
Generate code for the SH1.

@item -m2
Generate code for the SH2.

@item -m3
Generate code for the SH3.

@item -m3e
Generate code for the SH3e.

@item -mb
Compile code for the processor in big endian mode.

@item -ml
Compile code for the processor in little endian mode.

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

@item -mrelax
Shorten some address references at link time, when possible; uses the
linker option @samp{-relax}.
@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 @code
@item -G
Create a shared object.
It is recommended that @samp{-symbolic} or @samp{-shared} be used instead.

@item -Qy
Identify the versions of each tool used by the compiler, in a
@code{.ident} assembler directive in the output.

@item -Qn
Refrain from adding @code{.ident} directives to the output file (this is
the default).

@item -YP,@var{dirs}
Search the directories @var{dirs}, and no others, for libraries
specified with @samp{-l}.

@item -Ym,@var{dir}
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 V850 Options
@subsection V850 Options
@cindex V850 Options

These @samp{-m} options are defined for V850 implementations:

@table @code
@item -mlong-calls
@itemx -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
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 @samp{-mep}
option is on by default if you optimize.

@item -mno-prolog-function
@itemx -mprolog-function
Do not use (do use) external functions to save and restore registers at
the prolog and epilog 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 @samp{-mprolog-function} option is on by default if
you optimize.

@item -mspace
Try to make the code as small as possible.  At present, this just turns
on the @samp{-mep} and @samp{-mprolog-function} options.

@item -mtda=@var{n}
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}
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}
Put static or global variables whose size is @var{n} bytes or less into
the first 32 kilobytes of memory.
 
@item -mv850
Specify that the target processor is the V850.

@item -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.
@end table

@node ARC Options
@subsection ARC Options
@cindex ARC Options

These options are defined for ARC implementations:

@table @code
@item -EL
Compile code for little endian mode.  This is the default.

@item -EB
Compile code for big endian mode.

@item -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}
Compile code for ARC variant @var{cpu}.
Which variants are supported depend on the configuration.
All variants support @samp{-mcpu=base}, this is the default.

@item -mtext=@var{text section}
@item -mdata=@var{data section}
@item -mrodata=@var{readonly data section}
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


@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 @samp{-ffoo} would be @samp{-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 @code
@item -fexceptions
Enable exception handling, and generate extra code needed to propagate
exceptions.  If you do not specify this option, GNU CC enables it by
default for languages like C++ that normally require exception handling,
and disabled for languages like C that do not normally require it.
However, when compiling C code that needs to interoperate properly with
exception handlers written in C++, you may need to enable this option.
You may also wish to disable this option is you are compiling older C++
programs that don't use exception handling.

@item -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
GNU CC-compiled files and files compiled with other compilers.

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.

@item -freg-struct-return
Use the convention that @code{struct} and @code{union} values are
returned in registers when possible.  This is more efficient for small
structures than @samp{-fpcc-struct-return}.

If you specify neither @samp{-fpcc-struct-return} nor its contrary
@samp{-freg-struct-return}, GNU CC defaults to whichever convention is
standard for the target.  If there is no standard convention, GNU CC
defaults to @samp{-fpcc-struct-return}, except on targets where GNU CC
is the principal compiler.  In those cases, we can choose the standard,
and we chose the more efficient register return alternative.

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

@item -fshort-double
Use the same size for @code{double} as for @code{float}.

@item -fshared-data
Requests that the data and non-@code{const} variables of this
compilation be shared data rather than private data.  The distinction
makes sense only on certain operating systems, where shared data is
shared between processes running the same program, while private data
exists in one copy per process.

@item -fno-common
Allocate even uninitialized global variables in the bss 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
Ignore the @samp{#ident} directive.

@item -fno-gnu-linker
Do not output global initializations (such as C++ constructors and
destructors) in the form used by the GNU linker (on systems where the GNU
linker is the standard method of handling them).  Use this option when
you want to use a non-GNU linker, which also requires using the
@code{collect2} program to make sure the system linker includes
constructors and destructors.  (@code{collect2} is included in the GNU CC
distribution.)  For systems which @emph{must} use @code{collect2}, the
compiler driver @code{gcc} is configured to do this automatically.

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

@samp{-fno-verbose-asm}, the default, causes the
extra information to be omitted and is useful when comparing two assembler
files.

@item -fvolatile
Consider all memory references through pointers to be volatile.

@item -fvolatile-global
Consider all memory references to extern and global data items to
be volatile.

@item -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 GNU CC; 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
@samp{-fpic} does not work; in that case, recompile with @samp{-fPIC}
instead.  (These maximums are 16k on the m88k, 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, GNU CC supports PIC for System V
but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
position-independent.

@item -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, m88k,
and the Sparc.

Position-independent code requires special support, and therefore works
only on certain machines.

@item -ffixed-@var{reg}
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}
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}.

Use of this flag for a register that has a fixed pervasive role in the
machine's execution model, such as the stack pointer or frame pointer,
will produce disastrous results.

This flag does not have a negative form, because it specifies a
three-way choice.

@item -fcall-saved-@var{reg}
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.

Use of this flag for a register that has a fixed pervasive role in the
machine's execution model, such as the stack pointer or frame pointer,
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
Pack all structure members together without holes.  Usually you would
not want to use this option, since it makes the code suboptimal, and
the offsets of structure members won't agree with system libraries.

@item -fcheck-memory-usage
Generate extra code to check each memory access.  GNU CC will generate
code that is suitable for a detector of bad memory accesses such as
@file{Checker}.  If you specify this option, you can not use the
@code{asm} or @code{__asm__} keywords.

You must also specify this option when you compile functions you call that
have side effects.  If you do not, you may get erroneous messages from
the detector.  Normally,  you should compile all your code with this option.
If you use functions from a library that have side-effects (such as
@code{read}), you may not be able to recompile the library and
specify this option.  In that case, you can enable the
@samp{-fprefix-function-name} option, which requests GNU CC to encapsulate
your code and make other functions look as if they were compiled with
@samp{-fcheck-memory-usage}.  This is done by calling ``stubs'',
which are provided by the detector.  If you cannot find or build
stubs for every function you call, you may have to specify
@samp{-fcheck-memory-usage} without @samp{-fprefix-function-name}.

@item -fprefix-function-name
Request GNU CC to add a prefix to the symbols generated for function names.
GNU CC adds a prefix to the names of functions defined as well as
functions called.  Code compiled with this option and code compiled
without the option can't be linked together, unless or stubs are used.

If you compile the following code with @samp{-fprefix-function-name}
@example
extern void bar (int);
void
foo (int a)
@{
  return bar (a + 5);

@}
@end example

@noindent
GNU CC will compile the code as if it was written:
@example
extern void prefix_bar (int);
void
prefix_foo (int a)
@{
  return prefix_bar (a + 5);
@}
@end example
This option is designed to be used with @samp{-fcheck-memory-usage}.

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

@item -fexceptions
Enable exception handling.  For some targets, this implies
generation of frame unwind information for all functions, which can produce
significant data size overhead, though it does not affect execution.

This option is on by default for languages that support exception
handling (such as C++), and off for those that don't (such as C).

@item +e0
@itemx +e1
Control whether virtual function definitions in classes are used to
generate code, or only to define interfaces for their callers.  (C++
only).

These options are provided for compatibility with @code{cfront} 1.x
usage; the recommended alternative GNU C++ usage is in flux.  @xref{C++
Interface,,Declarations and Definitions in One Header}.

With @samp{+e0}, virtual function definitions in classes are declared
@code{extern}; the declaration is used only as an interface
specification, not to generate code for the virtual functions (in this
compilation).

With @samp{+e1}, G++ actually generates the code implementing virtual
functions defined in the code, and makes them publicly visible.

@cindex aliasing of parameters
@cindex parameters, aliased
@item -fargument-alias
@itemx -fargument-noalias
@itemx -fargument-noalias-global
Specify the possible relationships among parameters and between
parameters and global data.

@samp{-fargument-alias} specifies that arguments (parameters) may
alias each other and may alias global storage.
@samp{-fargument-noalias} specifies that arguments do not alias
each other, but may alias global storage.
@samp{-fargument-noalias-global} specifies that arguments do not
alias each other and do not alias global storage.

Each language will automatically use whatever option is required by
the language standard.  You should not need to use these options yourself.
@end table

@node Environment Variables
@section Environment Variables Affecting GNU CC
@cindex environment variables

This section describes several environment variables that affect how GNU
CC operates.  They work by specifying directories or prefixes to use
when searching for various kinds of files.

@ifclear INTERNALS
Note that you can also specify places to search using options such as
@samp{-B}, @samp{-I} and @samp{-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 GNU
CC.
@end ifclear
@ifset INTERNALS
Note that you can also specify places to search using options such as
@samp{-B}, @samp{-I} and @samp{-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 GNU
CC.  @xref{Driver}.
@end ifset

@table @code
@item TMPDIR
@findex TMPDIR
If @code{TMPDIR} is set, it specifies the directory to use for temporary
files.  GNU CC 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 @code{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 GNU CC cannot find the subprogram using the specified prefix, it
tries looking in the usual places for the subprogram.

The default value of @code{GCC_EXEC_PREFIX} is
@file{@var{prefix}/lib/gcc-lib/} where @var{prefix} is the value
of @code{prefix} when you ran the @file{configure} script.

Other prefixes specified with @samp{-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-lib}
(more precisely, with the value of @code{GCC_INCLUDE_DIR}), GNU CC tries
replacing that beginning with the specified prefix to produce an
alternate directory name.  Thus, with @samp{-Bfoo/}, GNU CC 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 @code{COMPILER_PATH} is a colon-separated list of
directories, much like @code{PATH}.  GNU CC tries the directories thus
specified when searching for subprograms, if it can't find the
subprograms using @code{GCC_EXEC_PREFIX}.

@item LIBRARY_PATH
@findex LIBRARY_PATH
The value of @code{LIBRARY_PATH} is a colon-separated list of
directories, much like @code{PATH}.  When configured as a native compiler,
GNU CC tries the directories thus specified when searching for special
linker files, if it can't find them using @code{GCC_EXEC_PREFIX}.  Linking
using GNU CC also uses these directories when searching for ordinary
libraries for the @samp{-l} option (but directories specified with
@samp{-L} come first).

@item C_INCLUDE_PATH
@itemx CPLUS_INCLUDE_PATH
@itemx OBJC_INCLUDE_PATH
@findex C_INCLUDE_PATH
@findex CPLUS_INCLUDE_PATH
@findex OBJC_INCLUDE_PATH
@c @itemx OBJCPLUS_INCLUDE_PATH
These environment variables pertain to particular languages.  Each
variable's value is a colon-separated list of directories, much like
@code{PATH}.  When GNU CC searches for header files, it tries the
directories listed in the variable for the language you are using, after
the directories specified with @samp{-I} but before the standard header
file directories.

@item DEPENDENCIES_OUTPUT
@findex DEPENDENCIES_OUTPUT
@cindex dependencies for make as output
If this variable is set, its value specifies how to output dependencies
for Make based on the header files processed by the compiler.  This
output looks much like the output from the @samp{-M} option
(@pxref{Preprocessor Options}), but it goes to a separate file, and is
in addition to the usual results of compilation.

The value of @code{DEPENDENCIES_OUTPUT} can be just a file name, in
which case the Make rules are written to that file, guessing the target
name from the source file name.  Or the value can have the form
@samp{@var{file} @var{target}}, in which case the rules are written to
file @var{file} using @var{target} as the target name.
@end table

@node Running Protoize
@section Running Protoize

The program @code{protoize} is an optional part of GNU C.  You can use
it to add prototypes to a program, thus converting the program to ANSI
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 @samp{-d @var{directory}}
option.  You can also specify particular files to exclude with the
@samp{-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-ANSI form.

Both conversion programs print a warning for any function declaration or
definition that they can't convert.  You can suppress these warnings
with @samp{-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}.  If the @samp{.save} file already exists, then
the source file is simply discarded.

@code{protoize} and @code{unprotoize} both depend on GNU CC itself to
scan the program and collect information about the functions it uses.
So neither of these programs will work until GNU CC 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 @code{gcc} to
produce the @samp{.X} files.  The special option @samp{-aux-info} is
always passed in addition, to tell @code{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
@code{gcc} options, you must quote the entire set of compilation options
to make them a single word in the shell.

There are certain @code{gcc} arguments that you cannot use, because they
would produce the wrong kind of output.  These include @samp{-g},
@samp{-O}, @samp{-c}, @samp{-S}, and @samp{-o} If you include these in
the @var{compilation-options}, they are ignored.

@item -C
Rename files to end in @samp{.C} 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 @samp{-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 @samp{-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 @samp{-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 @samp{-v} for @code{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 @code{gcc} on that source file with the
appropriate options and the option @samp{-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:

@example
gcc -Dfoo=bar file1.c -aux-info
protoize *.c
@end example

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

