@c Copyright (C) 1988,89,92,93,94,95,96,1997 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  -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-declarations -Wimport  -Winline
-Wlarger-than-@var{len}  -Wmain  -Wmissing-declarations
-Wmissing-prototypes  -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
@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
-fcaller-saves  -fcse-follow-jumps  -fcse-skip-blocks
-fdelayed-branch   -fexpensive-optimizations
-ffast-math  -ffloat-store  -fforce-addr  -fforce-mem
-ffunction-sections  -finline-functions
-fkeep-inline-functions  -fno-default-inline
-fno-defer-pop  -fno-function-cse
-fno-inline  -fno-peephole  -fomit-frame-pointer
-frerun-cse-after-loop  -fschedule-insns
-fschedule-insns2  -fstrength-reduce  -fthread-jumps
-funroll-all-loops  -funroll-loops
-O  -O0  -O1  -O2  -O3
@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  -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  -mapcs-26  -mapcs-32
-mlittle-endian  -mbig-endian  -mwords-little-endian
-mshort-load-bytes  -mno-short-load-bytes
-msoft-float  -mhard-float
-mbsd  -mxopen  -mno-symrename

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

@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
-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  -mtraceback  -mno-traceback
-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  -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

@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

@emph{Clipper Options}
-mc300  -mc400

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

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

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

@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}
-ffixed-@var{reg}  -finhibit-size-directive
-fcheck-memory-usage  -fprefix-function-name
-fno-common  -fno-ident  -fno-gnu-linker
-fpcc-struct-return  -freg-struct-return
-fshared-data  -fpic  -fPIC  -fexceptions
-fshort-enums  -fshort-double  -fvolatile  -fvolatile-global
-fverbose-asm  -fpack-struct  -fstack-check  +e0  +e1
@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 GNU class
library libg++.
@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 two leading
underscores.  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 the @samp{-traditional-cpp}
option, 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 libg++, 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 -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 libg++.)

@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 standard C; reject
all programs that use forbidden extensions.

Valid ANSI standard 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 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-declarations
Warn whenever a function is used before being declared.

@item -Wimplicit
Same as @samp{-Wimplicit-int} @samp{-Wimplicit-function-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 -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 -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 do not 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
@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 -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 -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 M
Dump all macro definitions, at the end of preprocessing, and write no
output.
@item N
Dump all macro names, at the end of preprocessing.
@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 D
Dump after purging ADDRESSOF, to @file{@var{file}.addressof}.
@item L
Dump after loop optimization, to @file{@var{file}.loop}.
@item t
Dump after the second CSE pass (including the jump optimization that
sometimes follows CSE), to @file{@var{file}.cse2}.
@item b
Dump after computing branch probabilities, to @file{@var{file}.bp}.
@item f
Dump after flow analysis, to @file{@var{file}.flow}.
@item c
Dump after instruction combination, to the file
@file{@var{file}.combine}.
@item S
Dump after the first instruction scheduling pass, to
@file{@var{file}.sched}.
@item l
Dump after local register allocation, to
@file{@var{file}.lreg}.
@item g
Dump after global register allocation, to
@file{@var{file}.greg}.
@item R
Dump after the second instruction scheduling pass, to
@file{@var{file}.sched2}.
@item J
Dump after last jump optimization, to @file{@var{file}.jump2}.
@item d
Dump after delayed branch scheduling, to @file{@var{file}.dbr}.
@item k
Dump after conversion from registers to stack, to @file{@var{file}.stack}.
@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 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.

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 -fexpensive-optimizations
Perform a number of minor optimizations that are relatively expensive.

@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 -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}, GNU CC 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
@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.

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

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

@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.  If your 68040 does not have code to
emulate those instructions, use @samp{-m68040}.

@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.  If your 68060 does not
have code to emulate those instructions, use @samp{-m68060}.

@item -m5200
Generate output for a 520X "coldfire" family cpu.  This is the default
when the compiler is configured for 520X-based systems.


@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} option
implies @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, and 68060 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.

@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 -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 -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.
@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.
@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
@kindex -mpower
@kindex -mpower2
@kindex -mpowerpc
@kindex -mpowerpc-gpopt
@kindex -mpowerpc-gfxopt
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.

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.

PowerPC assemblers support both the old and new mnemonics, as will later
POWER assemblers.  Current POWER assemblers only support the old
mnemonics.  Specify @samp{-mnew-mnemonics} if you have an assembler that
supports them, otherwise specify @samp{-mold-mnemonics}.

The default value of these options depends on how GNU CC was configured.
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}
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
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 -mxl-call
@itemx -mno-xl-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 assume that floating point arguments which do not fit in the
RSA are on the stack when they compile a subroutine 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
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
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
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
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
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
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
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
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
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 -mno-traceback
@itemx -mtraceback
On embedded PowerPC systems do not (do) generate a traceback tag before
the start of the function.  This tag can be used by the debugger to
identify where the start of a function is.

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

@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.
This requires GNU as and GNU ld which do most of the work.

@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 it's 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.

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

@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{7100}
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}
@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
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
@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 -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
@item -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 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{-fverbose-asm} is the default.  @samp{-fno-verbose-asm} 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 +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.
@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.

