Patch from jason.
[official-gcc.git] / gcc / invoke.texi
blob874c28fe2de11658399c1e2669b39c5fc6d50ae6
1 @c Copyright (C) 1988,89,92,93,94,95,96,1997 Free Software Foundation, Inc.
2 @c This is part of the GCC manual.
3 @c For copying conditions, see the file gcc.texi.
5 @node Invoking GCC
6 @chapter GNU CC Command Options
7 @cindex GNU CC command options
8 @cindex command options
9 @cindex options, GNU CC command
11 When you invoke GNU CC, it normally does preprocessing, compilation,
12 assembly and linking.  The ``overall options'' allow you to stop this
13 process at an intermediate stage.  For example, the @samp{-c} option
14 says not to run the linker.  Then the output consists of object files
15 output by the assembler.
17 Other options are passed on to one stage of processing.  Some options
18 control the preprocessor and others the compiler itself.  Yet other
19 options control the assembler and linker; most of these are not
20 documented here, since you rarely need to use any of them.
22 @cindex C compilation options
23 Most of the command line options that you can use with GNU CC are useful
24 for C programs; when an option is only useful with another language
25 (usually C++), the explanation says so explicitly.  If the description
26 for a particular option does not mention a source language, you can use
27 that option with all supported languages.
29 @cindex C++ compilation options
30 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
31 options for compiling C++ programs.
33 @cindex grouping options
34 @cindex options, grouping
35 The @code{gcc} program accepts options and file names as operands.  Many
36 options have multiletter names; therefore multiple single-letter options
37 may @emph{not} be grouped: @samp{-dr} is very different from @w{@samp{-d
38 -r}}.
40 @cindex order of options
41 @cindex options, order
42 You can mix options and other arguments.  For the most part, the order
43 you use doesn't matter.  Order does matter when you use several options
44 of the same kind; for example, if you specify @samp{-L} more than once,
45 the directories are searched in the order specified.
47 Many options have long names starting with @samp{-f} or with
48 @samp{-W}---for example, @samp{-fforce-mem},
49 @samp{-fstrength-reduce}, @samp{-Wformat} and so on.  Most of
50 these have both positive and negative forms; the negative form of
51 @samp{-ffoo} would be @samp{-fno-foo}.  This manual documents
52 only one of these two forms, whichever one is not the default.
54 @menu
55 * Option Summary::      Brief list of all options, without explanations.
56 * Overall Options::     Controlling the kind of output:
57                         an executable, object files, assembler files,
58                         or preprocessed source.
59 * Invoking G++::        Compiling C++ programs.
60 * C Dialect Options::   Controlling the variant of C language compiled.
61 * C++ Dialect Options:: Variations on C++.
62 * Warning Options::     How picky should the compiler be?
63 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
64 * Optimize Options::    How much optimization?
65 * Preprocessor Options:: Controlling header files and macro definitions.
66                          Also, getting dependency information for Make.
67 * Assembler Options::   Passing options to the assembler.
68 * Link Options::        Specifying libraries and so on.
69 * Directory Options::   Where to find header files and libraries.
70                         Where to find the compiler executable files.
71 * Target Options::      Running a cross-compiler, or an old version of GNU CC.
72 * Submodel Options::    Specifying minor hardware or convention variations,
73                         such as 68010 vs 68020.
74 * Code Gen Options::    Specifying conventions for function calls, data layout
75                         and register usage.
76 * Environment Variables:: Env vars that affect GNU CC.
77 * Running Protoize::    Automatically adding or removing function prototypes.
78 @end menu
80 @node Option Summary
81 @section Option Summary
83 Here is a summary of all the options, grouped by type.  Explanations are
84 in the following sections.
86 @table @emph
87 @item Overall Options
88 @xref{Overall Options,,Options Controlling the Kind of Output}.
89 @smallexample
90 -c  -S  -E  -o @var{file}  -pipe  -v  -x @var{language}
91 @end smallexample
93 @item C Language Options
94 @xref{C Dialect Options,,Options Controlling C Dialect}.
95 @smallexample
96 -ansi  -fallow-single-precision  -fcond-mismatch  -fno-asm
97 -fno-builtin  -ffreestanding  -fhosted  -fsigned-bitfields  -fsigned-char
98 -funsigned-bitfields  -funsigned-char  -fwritable-strings
99 -traditional  -traditional-cpp  -trigraphs
100 @end smallexample
102 @item C++ Language Options
103 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
104 @smallexample
105 -fall-virtual  -fdollars-in-identifiers  -felide-constructors
106 -fenum-int-equiv  -fexternal-templates  -ffor-scope  -fno-for-scope
107 -fhandle-signatures  -fmemoize-lookups  -fname-mangling-version-@var{n}
108 -fno-default-inline  -fno-gnu-keywords -fnonnull-objects -fguiding-decls
109 -foperator-names  -fstrict-prototype  -fthis-is-variable
110 -ftemplate-depth-@var{n}  -nostdinc++  -traditional  +e@var{n}
111 @end smallexample
113 @item Warning Options
114 @xref{Warning Options,,Options to Request or Suppress Warnings}.
115 @smallexample
116 -fsyntax-only  -pedantic  -pedantic-errors
117 -w  -W  -Wall  -Waggregate-return  -Wbad-function-cast
118 -Wcast-align  -Wcast-qual  -Wchar-subscript  -Wcomment
119 -Wconversion  -Werror  -Wformat
120 -Wid-clash-@var{len}  -Wimplicit  -Wimport  -Winline
121 -Wlarger-than-@var{len}  -Wmain  -Wmissing-declarations
122 -Wmissing-prototypes  -Wnested-externs
123 -Wno-import  -Wold-style-cast  -Woverloaded-virtual  -Wparentheses
124 -Wpointer-arith  -Wredundant-decls  -Wreorder  -Wreturn-type  -Wshadow
125 -Wsign-compare  -Wstrict-prototypes  -Wswitch  -Wsynth
126 -Wtemplate-debugging  -Wtraditional  -Wtrigraphs
127 -Wundef  -Wuninitialized  -Wunused  -Wwrite-strings
128 @end smallexample
130 @item Debugging Options
131 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
132 @smallexample
133 -a  -ax  -d@var{letters}  -fpretend-float
134 -fprofile-arcs  -ftest-coverage
135 -g  -g@var{level}  -gcoff  -gdwarf  -gdwarf-1  -gdwarf-1+  -gdwarf-2
136 -ggdb  -gstabs  -gstabs+  -gxcoff  -gxcoff+
137 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name
138 -print-prog-name=@var{program}  -print-search-dirs  -save-temps
139 @end smallexample
141 @item Optimization Options
142 @xref{Optimize Options,,Options that Control Optimization}.
143 @smallexample
144 -fbranch-probabilities
145 -fcaller-saves  -fcse-follow-jumps  -fcse-skip-blocks
146 -fdelayed-branch   -fexpensive-optimizations
147 -ffast-math  -ffloat-store  -fforce-addr  -fforce-mem
148 -ffunction-sections  -finline-functions
149 -fkeep-inline-functions  -fno-default-inline
150 -fno-defer-pop  -fno-function-cse
151 -fno-inline  -fno-peephole  -fomit-frame-pointer -fregmove
152 -frerun-cse-after-loop  -frerun-loop-opt -fschedule-insns
153 -fschedule-insns2  -fstrength-reduce  -fthread-jumps
154 -funroll-all-loops  -funroll-loops
155 -fmove-all-movables  -freduce-all-givs
156 -O  -O0  -O1  -O2  -O3
157 @end smallexample
159 @item Preprocessor Options
160 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
161 @smallexample
162 -A@var{question}(@var{answer})  -C  -dD  -dM  -dN
163 -D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H
164 -idirafter @var{dir}
165 -include @var{file}  -imacros @var{file}
166 -iprefix @var{file}  -iwithprefix @var{dir}
167 -iwithprefixbefore @var{dir}  -isystem @var{dir}
168 -M  -MD  -MM  -MMD  -MG  -nostdinc  -P  -trigraphs
169 -undef  -U@var{macro}  -Wp,@var{option}
170 @end smallexample
172 @item Assembler Option
173 @xref{Assembler Options,,Passing Options to the Assembler}.
174 @smallexample
175 -Wa,@var{option}
176 @end smallexample
178 @item Linker Options
179 @xref{Link Options,,Options for Linking}.
180 @smallexample
181 @var{object-file-name}  -l@var{library}
182 -nostartfiles  -nodefaultlibs  -nostdlib
183 -s  -static  -shared  -symbolic
184 -Wl,@var{option}  -Xlinker @var{option}
185 -u @var{symbol}
186 @end smallexample
188 @item Directory Options
189 @xref{Directory Options,,Options for Directory Search}.
190 @smallexample
191 -B@var{prefix}  -I@var{dir}  -I-  -L@var{dir}  -specs=@var{file}
192 @end smallexample
194 @item Target Options
195 @c I wrote this xref this way to avoid overfull hbox. -- rms
196 @xref{Target Options}.
197 @smallexample
198 -b @var{machine}  -V @var{version}
199 @end smallexample
201 @item Machine Dependent Options
202 @xref{Submodel Options,,Hardware Models and Configurations}.
203 @smallexample
204 @emph{M680x0 Options}
205 -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
206 -m68060  -m5200  -m68881  -mbitfield  -mc68000  -mc68020  -mfpa
207 -mnobitfield  -mrtd  -mshort  -msoft-float  -malign-int
209 @emph{VAX Options}
210 -mg  -mgnu  -munix
212 @emph{SPARC Options}
213 -mcpu=@var{cpu type}
214 -mtune=@var{cpu type}
215 -mcmodel=@var{code model}
216 -malign-jumps=@var{num}  -malign-loops=@var{num}
217 -malign-functions=@var{num}
218 -m32  -m64
219 -mapp-regs  -mbroken-saverestore  -mcypress  -mepilogue
220 -mflat  -mfpu  -mhard-float  -mhard-quad-float
221 -mimpure-text  -mlive-g0  -mno-app-regs  -mno-epilogue
222 -mno-flat  -mno-fpu  -mno-impure-text
223 -mno-stack-bias  -mno-unaligned-doubles
224 -msoft-float  -msoft-quad-float  -msparclite  -mstack-bias
225 -msupersparc  -munaligned-doubles  -mv8
227 @emph{Convex Options}
228 -mc1  -mc2  -mc32  -mc34  -mc38
229 -margcount  -mnoargcount
230 -mlong32  -mlong64
231 -mvolatile-cache  -mvolatile-nocache
233 @emph{AMD29K Options}
234 -m29000  -m29050  -mbw  -mnbw  -mdw  -mndw
235 -mlarge  -mnormal  -msmall
236 -mkernel-registers  -mno-reuse-arg-regs
237 -mno-stack-check  -mno-storem-bug
238 -mreuse-arg-regs  -msoft-float  -mstack-check
239 -mstorem-bug  -muser-registers
241 @emph{ARM Options}
242 -mapcs-frame  -mapcs-26  -mapcs-32
243 -mlittle-endian  -mbig-endian  -mwords-little-endian
244 -mshort-load-bytes  -mno-short-load-bytes
245 -msoft-float  -mhard-float
246 -mbsd  -mxopen  -mno-symrename
248 @emph{MN10300 Options}
249 -mmult-bug
250 -mno-mult-bug
252 @emph{M32R/D Options}
253 -mcode-model=@var{model type}  -msdata=@var{sdata type}
254 -G @var{num}
256 @emph{M88K Options}
257 -m88000  -m88100  -m88110  -mbig-pic
258 -mcheck-zero-division  -mhandle-large-shift
259 -midentify-revision  -mno-check-zero-division
260 -mno-ocs-debug-info  -mno-ocs-frame-position
261 -mno-optimize-arg-area  -mno-serialize-volatile
262 -mno-underscores  -mocs-debug-info
263 -mocs-frame-position  -moptimize-arg-area
264 -mserialize-volatile  -mshort-data-@var{num}  -msvr3
265 -msvr4  -mtrap-large-shift  -muse-div-instruction
266 -mversion-03.00  -mwarn-passed-structs
268 @emph{RS/6000 and PowerPC Options}
269 -mcpu=@var{cpu type}
270 -mtune=@var{cpu type}
271 -mpower  -mno-power  -mpower2  -mno-power2
272 -mpowerpc  -mno-powerpc
273 -mpowerpc-gpopt  -mno-powerpc-gpopt
274 -mpowerpc-gfxopt  -mno-powerpc-gfxopt
275 -mnew-mnemonics  -mno-new-mnemonics
276 -mfull-toc   -mminimal-toc  -mno-fop-in-toc  -mno-sum-in-toc
277 -mxl-call  -mno-xl-call  -mthreads  -mpe
278 -msoft-float  -mhard-float  -mmultiple  -mno-multiple
279 -mstring  -mno-string  -mupdate  -mno-update
280 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
281 -mstrict-align  -mno-strict-align  -mrelocatable
282 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
283 -mtoc  -mno-toc  -mtraceback  -mno-traceback
284 -mlittle  -mlittle-endian  -mbig  -mbig-endian
285 -mcall-aix  -mcall-sysv  -mprototype  -mno-prototype
286 -msim  -mmvme  -memb  -msdata  -msdata=@var{opt}  -G @var{num}
288 @emph{RT Options}
289 -mcall-lib-mul  -mfp-arg-in-fpregs  -mfp-arg-in-gregs
290 -mfull-fp-blocks  -mhc-struct-return  -min-line-mul
291 -mminimum-fp-blocks  -mnohc-struct-return
293 @emph{MIPS Options}
294 -mabicalls  -mcpu=@var{cpu type}  -membedded-data
295 -membedded-pic  -mfp32  -mfp64  -mgas  -mgp32  -mgp64
296 -mgpopt  -mhalf-pic  -mhard-float  -mint64  -mips1
297 -mips2  -mips3  -mlong64  -mlong-calls  -mmemcpy
298 -mmips-as  -mmips-tfile  -mno-abicalls
299 -mno-embedded-data  -mno-embedded-pic
300 -mno-gpopt  -mno-long-calls
301 -mno-memcpy  -mno-mips-tfile  -mno-rnames  -mno-stats
302 -mrnames  -msoft-float
303 -m4650  -msingle-float  -mmad
304 -mstats  -EL  -EB  -G @var{num}  -nocpp
306 @emph{i386 Options}
307 -mcpu=@var{cpu type}
308 -march=@var{cpu type}
309 -mieee-fp  -mno-fancy-math-387
310 -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib
311 -mno-wide-multiply  -mrtd  -malign-double
312 -mreg-alloc=@var{list}  -mregparm=@var{num}
313 -malign-jumps=@var{num}  -malign-loops=@var{num}
314 -malign-functions=@var{num}
316 @emph{HPPA Options}
317 -mbig-switch  -mdisable-fpregs  -mdisable-indexing  -mfast-indirect-calls
318 -mgas  -mjump-in-delay  -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
319 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
320 -mno-jump-in-delay
321 -mno-long-load-store
322 -mno-portable-runtime -mno-soft-float -mno-space -mno-space-regs -msoft-float
323 -mpa-risc-1-0  -mpa-risc-1-1  -mportable-runtime
324 -mschedule=@var{list}  -mspace  -mspace-regs
326 @emph{Intel 960 Options}
327 -m@var{cpu type}  -masm-compat  -mclean-linkage
328 -mcode-align  -mcomplex-addr  -mleaf-procedures
329 -mic-compat  -mic2.0-compat  -mic3.0-compat
330 -mintel-asm  -mno-clean-linkage  -mno-code-align
331 -mno-complex-addr  -mno-leaf-procedures
332 -mno-old-align  -mno-strict-align  -mno-tail-call
333 -mnumerics  -mold-align  -msoft-float  -mstrict-align
334 -mtail-call
336 @emph{DEC Alpha Options}
337 -mfp-regs  -mno-fp-regs
338 -mno-soft-float  -msoft-float
339 -mieee  -mieee-with-inexact  -mieee-conformant
340 -mfp-trap-mode  -mfp-rounding-mode  -mtrap-precision
341 -mbuild-constants
343 @emph{Clipper Options}
344 -mc300  -mc400
346 @emph{H8/300 Options}
347 -mrelax  -mh -ms -mint32  -malign-300
349 @emph{SH Options}
350 -m1  -m2  -m3  -m3e  -mb  -ml  -mrelax
352 @emph{System V Options}
353 -Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}
355 @emph{V850 Options}
356 -mlong-calls -mno-long-calls -mep -mno-ep
357 -mprolog-function -mno-prolog-function -mspace
358 -mtda=@var{n} -msda=@var{n} -mzda=@var{n}
359 -mv850
360 @end smallexample
362 @item Code Generation Options
363 @xref{Code Gen Options,,Options for Code Generation Conventions}.
364 @smallexample
365 -fcall-saved-@var{reg}  -fcall-used-@var{reg}
366 -fexceptions -ffixed-@var{reg}  -finhibit-size-directive
367 -fcheck-memory-usage  -fprefix-function-name
368 -fno-common  -fno-ident  -fno-gnu-linker
369 -fpcc-struct-return  -fpic  -fPIC
370 -freg-struct-return  -fshared-data  -fshort-enums
371 -fshort-double  -fvolatile  -fvolatile-global
372 -fverbose-asm -fpack-struct  -fstack-check  +e0  +e1
373 -fargument-alias  -fargument-noalias
374 -fargument-noalias-global
375 @end smallexample
376 @end table
378 @menu
379 * Overall Options::     Controlling the kind of output:
380                         an executable, object files, assembler files,
381                         or preprocessed source.
382 * C Dialect Options::   Controlling the variant of C language compiled.
383 * C++ Dialect Options:: Variations on C++.
384 * Warning Options::     How picky should the compiler be?
385 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
386 * Optimize Options::    How much optimization?
387 * Preprocessor Options:: Controlling header files and macro definitions.
388                          Also, getting dependency information for Make.
389 * Assembler Options::   Passing options to the assembler.
390 * Link Options::        Specifying libraries and so on.
391 * Directory Options::   Where to find header files and libraries.
392                         Where to find the compiler executable files.
393 * Target Options::      Running a cross-compiler, or an old version of GNU CC.
394 @end menu
396 @node Overall Options
397 @section Options Controlling the Kind of Output
399 Compilation can involve up to four stages: preprocessing, compilation
400 proper, assembly and linking, always in that order.  The first three
401 stages apply to an individual source file, and end by producing an
402 object file; linking combines all the object files (those newly
403 compiled, and those specified as input) into an executable file.
405 @cindex file name suffix
406 For any given input file, the file name suffix determines what kind of
407 compilation is done:
409 @table @code
410 @item @var{file}.c
411 C source code which must be preprocessed.
413 @item @var{file}.i
414 C source code which should not be preprocessed.
416 @item @var{file}.ii
417 C++ source code which should not be preprocessed.
419 @item @var{file}.m
420 Objective-C source code.  Note that you must link with the library
421 @file{libobjc.a} to make an Objective-C program work.
423 @item @var{file}.h
424 C header file (not to be compiled or linked).
426 @item @var{file}.cc
427 @itemx @var{file}.cxx
428 @itemx @var{file}.cpp
429 @itemx @var{file}.C
430 C++ source code which must be preprocessed.  Note that in @samp{.cxx},
431 the last two letters must both be literally @samp{x}.  Likewise,
432 @samp{.C} refers to a literal capital C.
434 @item @var{file}.s
435 Assembler code.
437 @item @var{file}.S
438 Assembler code which must be preprocessed.
440 @item @var{other}
441 An object file to be fed straight into linking.
442 Any file name with no recognized suffix is treated this way.
443 @end table
445 You can specify the input language explicitly with the @samp{-x} option:
447 @table @code
448 @item -x @var{language}
449 Specify explicitly the @var{language} for the following input files
450 (rather than letting the compiler choose a default based on the file
451 name suffix).  This option applies to all following input files until
452 the next @samp{-x} option.  Possible values for @var{language} are:
453 @example
454 c  objective-c  c++
455 c-header  cpp-output  c++-cpp-output
456 assembler  assembler-with-cpp
457 @end example
459 @item -x none
460 Turn off any specification of a language, so that subsequent files are
461 handled according to their file name suffixes (as they are if @samp{-x}
462 has not been used at all).
463 @end table
465 If you only want some of the stages of compilation, you can use
466 @samp{-x} (or filename suffixes) to tell @code{gcc} where to start, and
467 one of the options @samp{-c}, @samp{-S}, or @samp{-E} to say where
468 @code{gcc} is to stop.  Note that some combinations (for example,
469 @samp{-x cpp-output -E} instruct @code{gcc} to do nothing at all.
471 @table @code
472 @item -c
473 Compile or assemble the source files, but do not link.  The linking
474 stage simply is not done.  The ultimate output is in the form of an
475 object file for each source file.
477 By default, the object file name for a source file is made by replacing
478 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
480 Unrecognized input files, not requiring compilation or assembly, are
481 ignored.
483 @item -S
484 Stop after the stage of compilation proper; do not assemble.  The output
485 is in the form of an assembler code file for each non-assembler input
486 file specified.
488 By default, the assembler file name for a source file is made by
489 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
491 Input files that don't require compilation are ignored.
493 @item -E
494 Stop after the preprocessing stage; do not run the compiler proper.  The
495 output is in the form of preprocessed source code, which is sent to the
496 standard output.
498 Input files which don't require preprocessing are ignored.
500 @cindex output file option
501 @item -o @var{file}
502 Place output in file @var{file}.  This applies regardless to whatever
503 sort of output is being produced, whether it be an executable file,
504 an object file, an assembler file or preprocessed C code.
506 Since only one output file can be specified, it does not make sense to
507 use @samp{-o} when compiling more than one input file, unless you are
508 producing an executable file as output.
510 If @samp{-o} is not specified, the default is to put an executable file
511 in @file{a.out}, the object file for @file{@var{source}.@var{suffix}} in
512 @file{@var{source}.o}, its assembler file in @file{@var{source}.s}, and
513 all preprocessed C source on standard output.@refill
515 @item -v
516 Print (on standard error output) the commands executed to run the stages
517 of compilation.  Also print the version number of the compiler driver
518 program and of the preprocessor and the compiler proper.
520 @item -pipe
521 Use pipes rather than temporary files for communication between the
522 various stages of compilation.  This fails to work on some systems where
523 the assembler is unable to read from a pipe; but the GNU assembler has
524 no trouble.
525 @end table
527 @node Invoking G++
528 @section Compiling C++ Programs
530 @cindex suffixes for C++ source
531 @cindex C++ source file suffixes
532 C++ source files conventionally use one of the suffixes @samp{.C},
533 @samp{.cc}, @samp{cpp}, or @samp{.cxx}; preprocessed C++ files use the
534 suffix @samp{.ii}.  GNU CC recognizes files with these names and
535 compiles them as C++ programs even if you call the compiler the same way
536 as for compiling C programs (usually with the name @code{gcc}).
538 @findex g++
539 @findex c++
540 However, C++ programs often require class libraries as well as a
541 compiler that understands the C++ language---and under some
542 circumstances, you might want to compile programs from standard input,
543 or otherwise without a suffix that flags them as C++ programs.
544 @code{g++} is a program that calls GNU CC with the default language
545 set to C++, and automatically specifies linking against the GNU class
546 library libg++.
547 @cindex @code{g++ 1.@var{xx}}
548 @cindex @code{g++}, separate compiler
549 @cindex @code{g++} older version
550 @footnote{Prior to release 2 of the compiler,
551 there was a separate @code{g++} compiler.  That version was based on GNU
552 CC, but not integrated with it.  Versions of @code{g++} with a
553 @samp{1.@var{xx}} version number---for example, @code{g++} version 1.37
554 or 1.42---are much less reliable than the versions integrated with GCC
555 2.  Moreover, combining G++ @samp{1.@var{xx}} with a version 2 GCC will
556 simply not work.} On many systems, the script @code{g++} is also
557 installed with the name @code{c++}.
559 @cindex invoking @code{g++}
560 When you compile C++ programs, you may specify many of the same
561 command-line options that you use for compiling programs in any
562 language; or command-line options meaningful for C and related
563 languages; or options that are meaningful only for C++ programs.
564 @xref{C Dialect Options,,Options Controlling C Dialect}, for
565 explanations of options for languages related to C.
566 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
567 explanations of options that are meaningful only for C++ programs.
569 @node C Dialect Options
570 @section Options Controlling C Dialect
571 @cindex dialect options
572 @cindex language dialect options
573 @cindex options, dialect
575 The following options control the dialect of C (or languages derived
576 from C, such as C++ and Objective C) that the compiler accepts:
578 @table @code
579 @cindex ANSI support
580 @item -ansi
581 Support all ANSI standard C programs.
583 This turns off certain features of GNU C that are incompatible with ANSI
584 C, such as the @code{asm}, @code{inline} and @code{typeof} keywords, and
585 predefined macros such as @code{unix} and @code{vax} that identify the
586 type of system you are using.  It also enables the undesirable and
587 rarely used ANSI trigraph feature, and it disables recognition of C++
588 style @samp{//} comments.
590 The alternate keywords @code{__asm__}, @code{__extension__},
591 @code{__inline__} and @code{__typeof__} continue to work despite
592 @samp{-ansi}.  You would not want to use them in an ANSI C program, of
593 course, but it is useful to put them in header files that might be included
594 in compilations done with @samp{-ansi}.  Alternate predefined macros
595 such as @code{__unix__} and @code{__vax__} are also available, with or
596 without @samp{-ansi}.
598 The @samp{-ansi} option does not cause non-ANSI programs to be
599 rejected gratuitously.  For that, @samp{-pedantic} is required in
600 addition to @samp{-ansi}.  @xref{Warning Options}.
602 The macro @code{__STRICT_ANSI__} is predefined when the @samp{-ansi}
603 option is used.  Some header files may notice this macro and refrain
604 from declaring certain functions or defining certain macros that the
605 ANSI standard doesn't call for; this is to avoid interfering with any
606 programs that might use these names for other things.
608 The functions @code{alloca}, @code{abort}, @code{exit}, and
609 @code{_exit} are not builtin functions when @samp{-ansi} is used.
611 @item -fno-asm
612 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
613 keyword, so that code can use these words as identifiers.  You can use
614 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
615 instead.  @samp{-ansi} implies @samp{-fno-asm}.
617 In C++, this switch only affects the @code{typeof} keyword, since
618 @code{asm} and @code{inline} are standard keywords.  You may want to
619 use the @samp{-fno-gnu-keywords} flag instead, as it also disables the
620 other, C++-specific, extension keywords such as @code{headof}.
622 @item -fno-builtin
623 @cindex builtin functions
624 @findex abort
625 @findex abs
626 @findex alloca
627 @findex cos
628 @findex exit
629 @findex fabs
630 @findex ffs
631 @findex labs
632 @findex memcmp
633 @findex memcpy
634 @findex sin
635 @findex sqrt
636 @findex strcmp
637 @findex strcpy
638 @findex strlen
639 Don't recognize builtin functions that do not begin with two leading
640 underscores.  Currently, the functions affected include @code{abort},
641 @code{abs}, @code{alloca}, @code{cos}, @code{exit}, @code{fabs},
642 @code{ffs}, @code{labs}, @code{memcmp}, @code{memcpy}, @code{sin},
643 @code{sqrt}, @code{strcmp}, @code{strcpy}, and @code{strlen}.
645 GCC normally generates special code to handle certain builtin functions
646 more efficiently; for instance, calls to @code{alloca} may become single
647 instructions that adjust the stack directly, and calls to @code{memcpy}
648 may become inline copy loops.  The resulting code is often both smaller
649 and faster, but since the function calls no longer appear as such, you
650 cannot set a breakpoint on those calls, nor can you change the behavior
651 of the functions by linking with a different library.
653 The @samp{-ansi} option prevents @code{alloca} and @code{ffs} from being
654 builtin functions, since these functions do not have an ANSI standard
655 meaning.
657 @item -fhosted
658 @cindex hosted environment
660 Assert that compilation takes place in a hosted environment.  This implies
661 @samp{-fbuiltin}.  A hosted environment is one in which the
662 entire standard library is available, and in which @code{main} has a return
663 type of @code{int}.  Examples are nearly everything except a kernel.
664 This is equivalent to @samp{-fno-freestanding}.
666 @item -ffreestanding
667 @cindex hosted environment
669 Assert that compilation takes place in a freestanding environment.  This
670 implies @samp{-fno-builtin}.  A freestanding environment
671 is one in which the standard library may not exist, and program startup may
672 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
673 This is equivalent to @samp{-fno-hosted}.
675 @item -trigraphs
676 Support ANSI C trigraphs.  You don't want to know about this
677 brain-damage.  The @samp{-ansi} option implies @samp{-trigraphs}.
679 @cindex traditional C language
680 @cindex C language, traditional
681 @item -traditional
682 Attempt to support some aspects of traditional C compilers.
683 Specifically:
685 @itemize @bullet
686 @item
687 All @code{extern} declarations take effect globally even if they
688 are written inside of a function definition.  This includes implicit
689 declarations of functions.
691 @item
692 The newer keywords @code{typeof}, @code{inline}, @code{signed}, @code{const}
693 and @code{volatile} are not recognized.  (You can still use the
694 alternative keywords such as @code{__typeof__}, @code{__inline__}, and
695 so on.)
697 @item
698 Comparisons between pointers and integers are always allowed.
700 @item
701 Integer types @code{unsigned short} and @code{unsigned char} promote
702 to @code{unsigned int}.
704 @item
705 Out-of-range floating point literals are not an error.
707 @item
708 Certain constructs which ANSI regards as a single invalid preprocessing
709 number, such as @samp{0xe-0xd}, are treated as expressions instead.
711 @item
712 String ``constants'' are not necessarily constant; they are stored in
713 writable space, and identical looking constants are allocated
714 separately.  (This is the same as the effect of
715 @samp{-fwritable-strings}.)
717 @cindex @code{longjmp} and automatic variables
718 @item
719 All automatic variables not declared @code{register} are preserved by
720 @code{longjmp}.  Ordinarily, GNU C follows ANSI C: automatic variables
721 not declared @code{volatile} may be clobbered.
723 @item
724 @kindex \x
725 @kindex \a
726 @cindex escape sequences, traditional
727 The character escape sequences @samp{\x} and @samp{\a} evaluate as the
728 literal characters @samp{x} and @samp{a} respectively.  Without
729 @w{@samp{-traditional}}, @samp{\x} is a prefix for the hexadecimal
730 representation of a character, and @samp{\a} produces a bell.
732 @item
733 In C++ programs, assignment to @code{this} is permitted with
734 @samp{-traditional}.  (The option @samp{-fthis-is-variable} also has
735 this effect.)
736 @end itemize
738 You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
739 if your program uses names that are normally GNU C builtin functions for
740 other purposes of its own.
742 You cannot use @samp{-traditional} if you include any header files that
743 rely on ANSI C features.  Some vendors are starting to ship systems with
744 ANSI C header files and you cannot use @samp{-traditional} on such
745 systems to compile files that include any system headers.
747 The @samp{-traditional} option also enables the @samp{-traditional-cpp}
748 option, which is described next.
750 @item -traditional-cpp
751 Attempt to support some aspects of traditional C preprocessors.
752 Specifically:
754 @itemize @bullet
755 @item
756 Comments convert to nothing at all, rather than to a space.  This allows
757 traditional token concatenation.
759 @item
760 In a preprocessing directive, the @samp{#} symbol must appear as the first
761 character of a line.
763 @item
764 Macro arguments are recognized within string constants in a macro
765 definition (and their values are stringified, though without additional
766 quote marks, when they appear in such a context).  The preprocessor
767 always considers a string constant to end at a newline.
769 @item
770 @cindex detecting @w{@samp{-traditional}}
771 The predefined macro @code{__STDC__} is not defined when you use
772 @samp{-traditional}, but @code{__GNUC__} is (since the GNU extensions
773 which @code{__GNUC__} indicates are not affected by
774 @samp{-traditional}).  If you need to write header files that work
775 differently depending on whether @samp{-traditional} is in use, by
776 testing both of these predefined macros you can distinguish four
777 situations: GNU C, traditional GNU C, other ANSI C compilers, and other
778 old C compilers.  The predefined macro @code{__STDC_VERSION__} is also
779 not defined when you use @samp{-traditional}.  @xref{Standard
780 Predefined,,Standard Predefined Macros,cpp.info,The C Preprocessor},
781 for more discussion of these and other predefined macros.
783 @item
784 @cindex string constants vs newline
785 @cindex newline vs string constants
786 The preprocessor considers a string constant to end at a newline (unless
787 the newline is escaped with @samp{\}).  (Without @w{@samp{-traditional}},
788 string constants can contain the newline character as typed.)
789 @end itemize
791 @item -fcond-mismatch
792 Allow conditional expressions with mismatched types in the second and
793 third arguments.  The value of such an expression is void.
795 @item -funsigned-char
796 Let the type @code{char} be unsigned, like @code{unsigned char}.
798 Each kind of machine has a default for what @code{char} should
799 be.  It is either like @code{unsigned char} by default or like
800 @code{signed char} by default.
802 Ideally, a portable program should always use @code{signed char} or
803 @code{unsigned char} when it depends on the signedness of an object.
804 But many programs have been written to use plain @code{char} and
805 expect it to be signed, or expect it to be unsigned, depending on the
806 machines they were written for.  This option, and its inverse, let you
807 make such a program work with the opposite default.
809 The type @code{char} is always a distinct type from each of
810 @code{signed char} or @code{unsigned char}, even though its behavior
811 is always just like one of those two.
813 @item -fsigned-char
814 Let the type @code{char} be signed, like @code{signed char}.
816 Note that this is equivalent to @samp{-fno-unsigned-char}, which is
817 the negative form of @samp{-funsigned-char}.  Likewise, the option
818 @samp{-fno-signed-char} is equivalent to @samp{-funsigned-char}.
820 You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
821 if your program uses names that are normally GNU C builtin functions for
822 other purposes of its own.
824 You cannot use @samp{-traditional} if you include any header files that
825 rely on ANSI C features.  Some vendors are starting to ship systems with
826 ANSI C header files and you cannot use @samp{-traditional} on such
827 systems to compile files that include any system headers.
829 @item -fsigned-bitfields
830 @itemx -funsigned-bitfields
831 @itemx -fno-signed-bitfields
832 @itemx -fno-unsigned-bitfields
833 These options control whether a bitfield is signed or unsigned, when the
834 declaration does not use either @code{signed} or @code{unsigned}.  By
835 default, such a bitfield is signed, because this is consistent: the
836 basic integer types such as @code{int} are signed types.
838 However, when @samp{-traditional} is used, bitfields are all unsigned
839 no matter what.
841 @item -fwritable-strings
842 Store string constants in the writable data segment and don't uniquize
843 them.  This is for compatibility with old programs which assume they can
844 write into string constants.  The option @samp{-traditional} also has
845 this effect.
847 Writing into string constants is a very bad idea; ``constants'' should
848 be constant.
850 @item -fallow-single-precision
851 Do not promote single precision math operations to double precision,
852 even when compiling with @samp{-traditional}.
854 Traditional K&R C promotes all floating point operations to double
855 precision, regardless of the sizes of the operands.   On the
856 architecture for which you are compiling, single precision may be faster
857 than double precision.   If you must use @samp{-traditional}, but want
858 to use single precision operations when the operands are single
859 precision, use this option.   This option has no effect when compiling
860 with ANSI or GNU C conventions (the default).
862 @end table
864 @node C++ Dialect Options
865 @section Options Controlling C++ Dialect
867 @cindex compiler options, C++
868 @cindex C++ options, command line
869 @cindex options, C++
870 This section describes the command-line options that are only meaningful
871 for C++ programs; but you can also use most of the GNU compiler options
872 regardless of what language your program is in.  For example, you
873 might compile a file @code{firstClass.C} like this:
875 @example
876 g++ -g -felide-constructors -O -c firstClass.C
877 @end example
879 @noindent
880 In this example, only @samp{-felide-constructors} is an option meant
881 only for C++ programs; you can use the other options with any
882 language supported by GNU CC.
884 Here is a list of options that are @emph{only} for compiling C++ programs:
886 @table @code
887 @item -fno-access-control
888 Turn off all access checking.  This switch is mainly useful for working
889 around bugs in the access control code.
891 @item -fall-virtual
892 Treat all possible member functions as virtual, implicitly.
893 All member functions (except for constructor functions and @code{new} or
894 @code{delete} member operators) are treated as virtual functions of the
895 class where they appear.
897 This does not mean that all calls to these member functions will be made
898 through the internal table of virtual functions.  Under some
899 circumstances, the compiler can determine that a call to a given virtual
900 function can be made directly; in these cases the calls are direct in
901 any case.
903 @item -fcheck-new
904 Check that the pointer returned by @code{operator new} is non-null
905 before attempting to modify the storage allocated.  The current Working
906 Paper requires that @code{operator new} never return a null pointer, so
907 this check is normally unnecessary.
909 @item -fconserve-space
910 Put uninitialized or runtime-initialized global variables into the
911 common segment, as C does.  This saves space in the executable at the
912 cost of not diagnosing duplicate definitions.  If you compile with this
913 flag and your program mysteriously crashes after @code{main()} has
914 completed, you may have an object that is being destroyed twice because
915 two definitions were merged.
917 @item -fdollars-in-identifiers
918 Accept @samp{$} in identifiers.  You can also explicitly prohibit use of
919 @samp{$} with the option @samp{-fno-dollars-in-identifiers}.  (GNU C allows
920 @samp{$} by default on most target systems, but there are a few exceptions.)
921 Traditional C allowed the character @samp{$} to form part of
922 identifiers.  However, ANSI C and C++ forbid @samp{$} in identifiers.
924 @item -fenum-int-equiv
925 Anachronistically permit implicit conversion of @code{int} to
926 enumeration types.  Current C++ allows conversion of @code{enum} to
927 @code{int}, but not the other way around.
929 @item -fexternal-templates
930 Cause template instantiations to obey @samp{#pragma interface} and
931 @samp{implementation}; template instances are emitted or not according
932 to the location of the template definition.  @xref{Template
933 Instantiation}, for more information.
935 This option is deprecated.
937 @item -falt-external-templates
938 Similar to -fexternal-templates, but template instances are emitted or
939 not according to the place where they are first instantiated.
940 @xref{Template Instantiation}, for more information.
942 This option is deprecated.
944 @item -ffor-scope
945 @itemx -fno-for-scope
946 If -ffor-scope is specified, the scope of variables declared in
947 a @i{for-init-statement} is limited to the @samp{for} loop itself,
948 as specified by the draft C++ standard.
949 If -fno-for-scope is specified, the scope of variables declared in
950 a @i{for-init-statement} extends to the end of the enclosing scope,
951 as was the case in old versions of gcc, and other (traditional)
952 implementations of C++.
954 The default if neither flag is given to follow the standard,
955 but to allow and give a warning for old-style code that would
956 otherwise be invalid, or have different behavior.
958 @item -fno-gnu-keywords
959 Do not recognize @code{classof}, @code{headof}, @code{signature},
960 @code{sigof} or @code{typeof} as a keyword, so that code can use these
961 words as identifiers.  You can use the keywords @code{__classof__},
962 @code{__headof__}, @code{__signature__}, @code{__sigof__}, and
963 @code{__typeof__} instead.  @samp{-ansi} implies
964 @samp{-fno-gnu-keywords}.
966 @item -fguiding-decls
967 Treat a function declaration with the same type as a potential function
968 template instantiation as though it declares that instantiation, not a
969 normal function.  If a definition is given for the function later in the
970 translation unit (or another translation unit if the target supports
971 weak symbols), that definition will be used; otherwise the template will
972 be instantiated.  This behavior reflects the C++ language prior to
973 September 1996, when guiding declarations were removed.
975 This option implies @samp{-fname-mangling-version-0}, and will not work
976 with other name mangling versions.
978 @item -fno-implicit-templates
979 Never emit code for templates which are instantiated implicitly (i.e. by
980 use); only emit code for explicit instantiations.  @xref{Template
981 Instantiation}, for more information.
983 @item -fhandle-signatures
984 Recognize the @code{signature} and @code{sigof} keywords for specifying
985 abstract types.  The default (@samp{-fno-handle-signatures}) is not to
986 recognize them.  @xref{C++ Signatures, Type Abstraction using
987 Signatures}.
989 @item -fhuge-objects
990 Support virtual function calls for objects that exceed the size
991 representable by a @samp{short int}.  Users should not use this flag by
992 default; if you need to use it, the compiler will tell you so.  If you
993 compile any of your code with this flag, you must compile @emph{all} of
994 your code with this flag (including libg++, if you use it).
996 This flag is not useful when compiling with -fvtable-thunks.
998 @item -fno-implement-inlines
999 To save space, do not emit out-of-line copies of inline functions
1000 controlled by @samp{#pragma implementation}.  This will cause linker
1001 errors if these functions are not inlined everywhere they are called.
1003 @item -fmemoize-lookups
1004 @itemx -fsave-memoized
1005 Use heuristics to compile faster.  These heuristics are not enabled by
1006 default, since they are only effective for certain input files.  Other
1007 input files compile more slowly.
1009 The first time the compiler must build a call to a member function (or
1010 reference to a data member), it must (1) determine whether the class
1011 implements member functions of that name; (2) resolve which member
1012 function to call (which involves figuring out what sorts of type
1013 conversions need to be made); and (3) check the visibility of the member
1014 function to the caller.  All of this adds up to slower compilation.
1015 Normally, the second time a call is made to that member function (or
1016 reference to that data member), it must go through the same lengthy
1017 process again.  This means that code like this:
1019 @smallexample
1020 cout << "This " << p << " has " << n << " legs.\n";
1021 @end smallexample
1023 @noindent
1024 makes six passes through all three steps.  By using a software cache, a
1025 ``hit'' significantly reduces this cost.  Unfortunately, using the cache
1026 introduces another layer of mechanisms which must be implemented, and so
1027 incurs its own overhead.  @samp{-fmemoize-lookups} enables the software
1028 cache.
1030 Because access privileges (visibility) to members and member functions
1031 may differ from one function context to the next, G++ may need to flush
1032 the cache.  With the @samp{-fmemoize-lookups} flag, the cache is flushed
1033 after every function that is compiled.  The @samp{-fsave-memoized} flag
1034 enables the same software cache, but when the compiler determines that
1035 the context of the last function compiled would yield the same access
1036 privileges of the next function to compile, it preserves the cache.
1037 This is most helpful when defining many member functions for the same
1038 class: with the exception of member functions which are friends of other
1039 classes, each member function has exactly the same access privileges as
1040 every other, and the cache need not be flushed.
1042 The code that implements these flags has rotted; you should probably
1043 avoid using them.
1045 @item -fstrict-prototype
1046 Within an @samp{extern "C"} linkage specification, treat a function
1047 declaration with no arguments, such as @samp{int foo ();}, as declaring
1048 the function to take no arguments.  Normally, such a declaration means
1049 that the function @code{foo} can take any combination of arguments, as
1050 in C.  @samp{-pedantic} implies @samp{-fstrict-prototype} unless
1051 overridden with @samp{-fno-strict-prototype}.
1053 This flag no longer affects declarations with C++ linkage.
1055 @item -fname-mangling-version-@var{n}
1056 Control the way in which names are mangled.  Version 0 is compatible
1057 with versions of g++ before 2.8.  Version 1 is the default.  Version 1
1058 will allow correct mangling of function templates.  For example, 
1059 version 0 mangling does not mangle foo<int, double> and foo<int, char>
1060 given this declaration:
1062 @example
1063 template <class T, class U> void foo(T t);
1064 @end example
1066 @item -fno-nonnull-objects
1067 Don't assume that a reference is initialized to refer to a valid object.
1068 Although the current C++ Working Paper prohibits null references, some
1069 old code may rely on them, and you can use @samp{-fno-nonnull-objects}
1070 to turn on checking.
1072 At the moment, the compiler only does this checking for conversions to
1073 virtual base classes.
1075 @item -foperator-names
1076 Recognize the operator name keywords @code{and}, @code{bitand},
1077 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1078 synonyms for the symbols they refer to.  @samp{-ansi} implies
1079 @samp{-foperator-names}.
1081 @item -frepo
1082 Enable automatic template instantiation.  This option also implies
1083 @samp{-fno-implicit-templates}.  @xref{Template Instantiation}, for more
1084 information.
1086 @item -fthis-is-variable
1087 Permit assignment to @code{this}.  The incorporation of user-defined
1088 free store management into C++ has made assignment to @samp{this} an
1089 anachronism.  Therefore, by default it is invalid to assign to
1090 @code{this} within a class member function; that is, GNU C++ treats
1091 @samp{this} in a member function of class @code{X} as a non-lvalue of
1092 type @samp{X *}.  However, for backwards compatibility, you can make it
1093 valid with @samp{-fthis-is-variable}.
1095 @item -fvtable-thunks
1096 Use @samp{thunks} to implement the virtual function dispatch table
1097 (@samp{vtable}).  The traditional (cfront-style) approach to
1098 implementing vtables was to store a pointer to the function and two
1099 offsets for adjusting the @samp{this} pointer at the call site.  Newer
1100 implementations store a single pointer to a @samp{thunk} function which
1101 does any necessary adjustment and then calls the target function.
1103 This option also enables a heuristic for controlling emission of
1104 vtables; if a class has any non-inline virtual functions, the vtable
1105 will be emitted in the translation unit containing the first one of
1106 those.
1108 @item -ftemplate-depth-@var{n}
1109 Set the maximum instantiation depth for template classes to @var{n}.
1110 A limit on the template instantiation depth is needed to detect
1111 endless recursions during template class instantiation. ANSI/ISO C++
1112 conforming programs must not rely on a maximum depth greater than 17.
1114 @item -nostdinc++
1115 Do not search for header files in the standard directories specific to
1116 C++, but do still search the other standard directories.  (This option
1117 is used when building libg++.)
1119 @item -traditional
1120 For C++ programs (in addition to the effects that apply to both C and
1121 C++), this has the same effect as @samp{-fthis-is-variable}.
1122 @xref{C Dialect Options,, Options Controlling C Dialect}.
1123 @end table
1125 In addition, these optimization, warning, and code generation options
1126 have meanings only for C++ programs:
1128 @table @code
1129 @item -fno-default-inline
1130 Do not assume @samp{inline} for functions defined inside a class scope.
1131 @xref{Optimize Options,,Options That Control Optimization}.
1133 @item -Wold-style-cast
1134 @itemx -Woverloaded-virtual
1135 @itemx -Wtemplate-debugging
1136 Warnings that apply only to C++ programs.  @xref{Warning
1137 Options,,Options to Request or Suppress Warnings}.
1139 @item -Weffc++
1140 Warn about violation of some style rules from Effective C++ by Scott Myers.
1142 @item +e@var{n}
1143 Control how virtual function definitions are used, in a fashion
1144 compatible with @code{cfront} 1.x.  @xref{Code Gen Options,,Options for
1145 Code Generation Conventions}.
1146 @end table
1148 @node Warning Options
1149 @section Options to Request or Suppress Warnings
1150 @cindex options to control warnings
1151 @cindex warning messages
1152 @cindex messages, warning
1153 @cindex suppressing warnings
1155 Warnings are diagnostic messages that report constructions which
1156 are not inherently erroneous but which are risky or suggest there
1157 may have been an error.
1159 You can request many specific warnings with options beginning @samp{-W},
1160 for example @samp{-Wimplicit} to request warnings on implicit
1161 declarations.  Each of these specific warning options also has a
1162 negative form beginning @samp{-Wno-} to turn off warnings;
1163 for example, @samp{-Wno-implicit}.  This manual lists only one of the
1164 two forms, whichever is not the default.
1166 These options control the amount and kinds of warnings produced by GNU
1169 @table @code
1170 @cindex syntax checking
1171 @item -fsyntax-only
1172 Check the code for syntax errors, but don't do anything beyond that.
1174 @item -pedantic
1175 Issue all the warnings demanded by strict ANSI standard C; reject
1176 all programs that use forbidden extensions.
1178 Valid ANSI standard C programs should compile properly with or without
1179 this option (though a rare few will require @samp{-ansi}).  However,
1180 without this option, certain GNU extensions and traditional C features
1181 are supported as well.  With this option, they are rejected.
1183 @samp{-pedantic} does not cause warning messages for use of the
1184 alternate keywords whose names begin and end with @samp{__}.  Pedantic
1185 warnings are also disabled in the expression that follows
1186 @code{__extension__}.  However, only system header files should use
1187 these escape routes; application programs should avoid them.
1188 @xref{Alternate Keywords}.
1190 This option is not intended to be @i{useful}; it exists only to satisfy
1191 pedants who would otherwise claim that GNU CC fails to support the ANSI
1192 standard.
1194 Some users try to use @samp{-pedantic} to check programs for strict ANSI
1195 C conformance.  They soon find that it does not do quite what they want:
1196 it finds some non-ANSI practices, but not all---only those for which
1197 ANSI C @emph{requires} a diagnostic.
1199 A feature to report any failure to conform to ANSI C might be useful in
1200 some instances, but would require considerable additional work and would
1201 be quite different from @samp{-pedantic}.  We recommend, rather, that
1202 users take advantage of the extensions of GNU C and disregard the
1203 limitations of other compilers.  Aside from certain supercomputers and
1204 obsolete small machines, there is less and less reason ever to use any
1205 other C compiler other than for bootstrapping GNU CC.
1207 @item -pedantic-errors
1208 Like @samp{-pedantic}, except that errors are produced rather than
1209 warnings.
1211 @item -w
1212 Inhibit all warning messages.
1214 @item -Wno-import
1215 Inhibit warning messages about the use of @samp{#import}.
1217 @item -Wchar-subscripts
1218 Warn if an array subscript has type @code{char}.  This is a common cause
1219 of error, as programmers often forget that this type is signed on some
1220 machines.
1222 @item -Wcomment
1223 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
1224 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
1226 @item -Wformat
1227 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
1228 the arguments supplied have types appropriate to the format string
1229 specified.
1231 @item -Wimplicit
1232 Warn whenever a function or parameter is implicitly declared,
1233 or when a type implicitly defaults to @code{int}.
1235 @item -Wmain
1236 Warn if the type of @samp{main} is suspicious.  @samp{main} should be a
1237 function with external linkage, returning int, taking either zero
1238 arguments, two, or three arguments of appropriate types.
1239   
1240 @item -Wparentheses
1241 Warn if parentheses are omitted in certain contexts, such
1242 as when there is an assignment in a context where a truth value
1243 is expected, or when operators are nested whose precedence people
1244 often get confused about.
1246 @item -Wreturn-type
1247 Warn whenever a function is defined with a return-type that defaults
1248 to @code{int}.  Also warn about any @code{return} statement with no
1249 return-value in a function whose return-type is not @code{void}.
1251 @item -Wswitch
1252 Warn whenever a @code{switch} statement has an index of enumeral type
1253 and lacks a @code{case} for one or more of the named codes of that
1254 enumeration.  (The presence of a @code{default} label prevents this
1255 warning.)  @code{case} labels outside the enumeration range also
1256 provoke warnings when this option is used.
1258 @item -Wtrigraphs
1259 Warn if any trigraphs are encountered (assuming they are enabled).
1261 @item -Wunused
1262 Warn whenever a variable is unused aside from its declaration,
1263 whenever a function is declared static but never defined, whenever a
1264 label is declared but not used, and whenever a statement computes a
1265 result that is explicitly not used.
1267 To suppress this warning for an expression, simply cast it to void.  For
1268 unused variables and parameters, use the @samp{unused} attribute
1269 (@pxref{Variable Attributes}).
1271 @item -Wuninitialized
1272 An automatic variable is used without first being initialized.
1274 These warnings are possible only in optimizing compilation,
1275 because they require data flow information that is computed only
1276 when optimizing.  If you don't specify @samp{-O}, you simply won't
1277 get these warnings.
1279 These warnings occur only for variables that are candidates for
1280 register allocation.  Therefore, they do not occur for a variable that
1281 is declared @code{volatile}, or whose address is taken, or whose size
1282 is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
1283 structures, unions or arrays, even when they are in registers.
1285 Note that there may be no warning about a variable that is used only
1286 to compute a value that itself is never used, because such
1287 computations may be deleted by data flow analysis before the warnings
1288 are printed.
1290 These warnings are made optional because GNU CC is not smart
1291 enough to see all the reasons why the code might be correct
1292 despite appearing to have an error.  Here is one example of how
1293 this can happen:
1295 @smallexample
1297   int x;
1298   switch (y)
1299     @{
1300     case 1: x = 1;
1301       break;
1302     case 2: x = 4;
1303       break;
1304     case 3: x = 5;
1305     @}
1306   foo (x);
1308 @end smallexample
1310 @noindent
1311 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
1312 always initialized, but GNU CC doesn't know this.  Here is
1313 another common case:
1315 @smallexample
1317   int save_y;
1318   if (change_y) save_y = y, y = new_y;
1319   @dots{}
1320   if (change_y) y = save_y;
1322 @end smallexample
1324 @noindent
1325 This has no bug because @code{save_y} is used only if it is set.
1327 Some spurious warnings can be avoided if you declare all the functions
1328 you use that never return as @code{noreturn}.  @xref{Function
1329 Attributes}.
1331 @item -Wreorder (C++ only)
1332 @cindex reordering, warning
1333 @cindex warning for reordering of member initializers
1334 Warn when the order of member initializers given in the code does not
1335 match the order in which they must be executed.  For instance:
1337 @smallexample
1338 struct A @{
1339   int i;
1340   int j;
1341   A(): j (0), i (1) @{ @}
1343 @end smallexample
1345 Here the compiler will warn that the member initializers for @samp{i}
1346 and @samp{j} will be rearranged to match the declaration order of the
1347 members.
1349 @item -Wsign-compare
1350 @cindex warning for comparison of signed and unsigned values
1351 @cindex comparison of signed and unsigned values, warning
1352 @cindex signed and unsigned values, comparison warning
1353 Warn when a comparison between signed and unsigned values could produce
1354 an incorrect result when the signed value is converted to unsigned.
1356 @item -Wtemplate-debugging
1357 @cindex template debugging
1358 When using templates in a C++ program, warn if debugging is not yet
1359 fully available (C++ only).
1361 @item -Wall
1362 All of the above @samp{-W} options combined.  This enables all the
1363 warnings about constructions that some users consider questionable, and
1364 that are easy to avoid (or modify to prevent the warning), even in
1365 conjunction with macros.
1366 @end table
1368 The following @samp{-W@dots{}} options are not implied by @samp{-Wall}.
1369 Some of them warn about constructions that users generally do not
1370 consider questionable, but which occasionally you might wish to check
1371 for; others warn about constructions that are necessary or hard to avoid
1372 in some cases, and there is no simple way to modify the code to suppress
1373 the warning.
1375 @table @code
1376 @item -W
1377 Print extra warning messages for these events:
1379 @itemize @bullet
1380 @cindex @code{longjmp} warnings
1381 @item
1382 A nonvolatile automatic variable might be changed by a call to
1383 @code{longjmp}.  These warnings as well are possible only in
1384 optimizing compilation.
1386 The compiler sees only the calls to @code{setjmp}.  It cannot know
1387 where @code{longjmp} will be called; in fact, a signal handler could
1388 call it at any point in the code.  As a result, you may get a warning
1389 even when there is in fact no problem because @code{longjmp} cannot
1390 in fact be called at the place which would cause a problem.
1392 @item
1393 A function can return either with or without a value.  (Falling
1394 off the end of the function body is considered returning without
1395 a value.)  For example, this function would evoke such a
1396 warning:
1398 @smallexample
1399 @group
1400 foo (a)
1402   if (a > 0)
1403     return a;
1405 @end group
1406 @end smallexample
1408 @item
1409 An expression-statement or the left-hand side of a comma expression
1410 contains no side effects.
1411 To suppress the warning, cast the unused expression to void.
1412 For example, an expression such as @samp{x[i,j]} will cause a warning,
1413 but @samp{x[(void)i,j]} will not.
1415 @item
1416 An unsigned value is compared against zero with @samp{<} or @samp{<=}.
1418 @item
1419 A comparison like @samp{x<=y<=z} appears; this is equivalent to
1420 @samp{(x<=y ? 1 : 0) <= z}, which is a different interpretation from
1421 that of ordinary mathematical notation.
1423 @item
1424 Storage-class specifiers like @code{static} are not the first things in
1425 a declaration.  According to the C Standard, this usage is obsolescent.
1427 @item
1428 If @samp{-Wall} or @samp{-Wunused} is also specified, warn about unused
1429 arguments.
1431 @item
1432 An aggregate has a partly bracketed initializer.
1433 For example, the following code would evoke such a warning,
1434 because braces are missing around the initializer for @code{x.h}:
1436 @smallexample
1437 struct s @{ int f, g; @};
1438 struct t @{ struct s h; int i; @};
1439 struct t x = @{ 1, 2, 3 @};
1440 @end smallexample
1441 @end itemize
1443 @item -Wtraditional
1444 Warn about certain constructs that behave differently in traditional and
1445 ANSI C.
1447 @itemize @bullet
1448 @item
1449 Macro arguments occurring within string constants in the macro body.
1450 These would substitute the argument in traditional C, but are part of
1451 the constant in ANSI C.
1453 @item
1454 A function declared external in one block and then used after the end of
1455 the block.
1457 @item
1458 A @code{switch} statement has an operand of type @code{long}.
1459 @end itemize
1461 @item -Wundef
1462 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
1464 @item -Wshadow
1465 Warn whenever a local variable shadows another local variable.
1467 @item -Wid-clash-@var{len}
1468 Warn whenever two distinct identifiers match in the first @var{len}
1469 characters.  This may help you prepare a program that will compile
1470 with certain obsolete, brain-damaged compilers.
1472 @item -Wlarger-than-@var{len}
1473 Warn whenever an object of larger than @var{len} bytes is defined.
1475 @item -Wpointer-arith
1476 Warn about anything that depends on the ``size of'' a function type or
1477 of @code{void}.  GNU C assigns these types a size of 1, for
1478 convenience in calculations with @code{void *} pointers and pointers
1479 to functions.
1481 @item -Wbad-function-cast
1482 Warn whenever a function call is cast to a non-matching type.
1483 For example, warn if @code{int malloc()} is cast to @code{anything *}.
1485 @item -Wcast-qual
1486 Warn whenever a pointer is cast so as to remove a type qualifier from
1487 the target type.  For example, warn if a @code{const char *} is cast
1488 to an ordinary @code{char *}.
1490 @item -Wcast-align
1491 Warn whenever a pointer is cast such that the required alignment of the
1492 target is increased.  For example, warn if a @code{char *} is cast to
1493 an @code{int *} on machines where integers can only be accessed at
1494 two- or four-byte boundaries.
1496 @item -Wwrite-strings
1497 Give string constants the type @code{const char[@var{length}]} so that
1498 copying the address of one into a non-@code{const} @code{char *}
1499 pointer will get a warning.  These warnings will help you find at
1500 compile time code that can try to write into a string constant, but
1501 only if you have been very careful about using @code{const} in
1502 declarations and prototypes.  Otherwise, it will just be a nuisance;
1503 this is why we did not make @samp{-Wall} request these warnings.
1505 @item -Wconversion
1506 Warn if a prototype causes a type conversion that is different from what
1507 would happen to the same argument in the absence of a prototype.  This
1508 includes conversions of fixed point to floating and vice versa, and
1509 conversions changing the width or signedness of a fixed point argument
1510 except when the same as the default promotion.
1512 Also, warn if a negative integer constant expression is implicitly
1513 converted to an unsigned type.  For example, warn about the assignment
1514 @code{x = -1} if @code{x} is unsigned.  But do not warn about explicit
1515 casts like @code{(unsigned) -1}.
1517 @item -Waggregate-return
1518 Warn if any functions that return structures or unions are defined or
1519 called.  (In languages where you can return an array, this also elicits
1520 a warning.)
1522 @item -Wstrict-prototypes
1523 Warn if a function is declared or defined without specifying the
1524 argument types.  (An old-style function definition is permitted without
1525 a warning if preceded by a declaration which specifies the argument
1526 types.)
1528 @item -Wmissing-prototypes
1529 Warn if a global function is defined without a previous prototype
1530 declaration.  This warning is issued even if the definition itself
1531 provides a prototype.  The aim is to detect global functions that fail
1532 to be declared in header files.
1534 @item -Wmissing-declarations
1535 Warn if a global function is defined without a previous declaration.
1536 Do so even if the definition itself provides a prototype.
1537 Use this option to detect global functions that are not declared in
1538 header files.
1540 @item -Wredundant-decls
1541 Warn if anything is declared more than once in the same scope, even in
1542 cases where multiple declaration is valid and changes nothing.
1544 @item -Wnested-externs
1545 Warn if an @code{extern} declaration is encountered within an function.
1547 @item -Winline
1548 Warn if a function can not be inlined, and either it was declared as inline,
1549 or else the @samp{-finline-functions} option was given.
1551 @item -Wold-style-cast
1552 Warn if an old-style (C-style) cast is used within a program.
1554 @item -Woverloaded-virtual
1555 @cindex overloaded virtual fn, warning
1556 @cindex warning for overloaded virtual fn
1557 Warn when a derived class function declaration may be an error in
1558 defining a virtual function (C++ only).  In a derived class, the
1559 definitions of virtual functions must match the type signature of a
1560 virtual function declared in the base class.  With this option, the
1561 compiler warns when you define a function with the same name as a
1562 virtual function, but with a type signature that does not match any
1563 declarations from the base class.
1565 @item -Wsynth (C++ only)
1566 @cindex warning for synthesized methods
1567 @cindex synthesized methods, warning
1568 Warn when g++'s synthesis behavior does not match that of cfront.  For
1569 instance:
1571 @smallexample
1572 struct A @{
1573   operator int ();
1574   A& operator = (int);
1577 main ()
1579   A a,b;
1580   a = b;
1582 @end smallexample
1584 In this example, g++ will synthesize a default @samp{A& operator =
1585 (const A&);}, while cfront will use the user-defined @samp{operator =}.
1587 @item -Werror
1588 Make all warnings into errors.
1589 @end table
1591 @node Debugging Options
1592 @section Options for Debugging Your Program or GNU CC
1593 @cindex options, debugging
1594 @cindex debugging information options
1596 GNU CC has various special options that are used for debugging
1597 either your program or GCC:
1599 @table @code
1600 @item -g
1601 Produce debugging information in the operating system's native format
1602 (stabs, COFF, XCOFF, or DWARF).  GDB can work with this debugging
1603 information.
1605 On most systems that use stabs format, @samp{-g} enables use of extra
1606 debugging information that only GDB can use; this extra information
1607 makes debugging work better in GDB but will probably make other debuggers
1608 crash or
1609 refuse to read the program.  If you want to control for certain whether
1610 to generate the extra information, use @samp{-gstabs+}, @samp{-gstabs},
1611 @samp{-gxcoff+}, @samp{-gxcoff}, @samp{-gdwarf-1+}, or @samp{-gdwarf-1}
1612 (see below).
1614 Unlike most other C compilers, GNU CC allows you to use @samp{-g} with
1615 @samp{-O}.  The shortcuts taken by optimized code may occasionally
1616 produce surprising results: some variables you declared may not exist
1617 at all; flow of control may briefly move where you did not expect it;
1618 some statements may not be executed because they compute constant
1619 results or their values were already at hand; some statements may
1620 execute in different places because they were moved out of loops.
1622 Nevertheless it proves possible to debug optimized output.  This makes
1623 it reasonable to use the optimizer for programs that might have bugs.
1625 The following options are useful when GNU CC is generated with the
1626 capability for more than one debugging format.
1628 @item -ggdb
1629 Produce debugging information for use by GDB.  This means to use the
1630 most expressive format available (DWARF 2, stabs, or the native format
1631 if neither of those are supported), including GDB extensions if at all
1632 possible.
1634 @item -gstabs
1635 Produce debugging information in stabs format (if that is supported),
1636 without GDB extensions.  This is the format used by DBX on most BSD
1637 systems.  On MIPS, Alpha and System V Release 4 systems this option
1638 produces stabs debugging output which is not understood by DBX or SDB.
1639 On System V Release 4 systems this option requires the GNU assembler.
1641 @item -gstabs+
1642 Produce debugging information in stabs format (if that is supported),
1643 using GNU extensions understood only by the GNU debugger (GDB).  The
1644 use of these extensions is likely to make other debuggers crash or
1645 refuse to read the program.
1647 @item -gcoff
1648 Produce debugging information in COFF format (if that is supported).
1649 This is the format used by SDB on most System V systems prior to
1650 System V Release 4.
1652 @item -gxcoff
1653 Produce debugging information in XCOFF format (if that is supported).
1654 This is the format used by the DBX debugger on IBM RS/6000 systems.
1656 @item -gxcoff+
1657 Produce debugging information in XCOFF format (if that is supported),
1658 using GNU extensions understood only by the GNU debugger (GDB).  The
1659 use of these extensions is likely to make other debuggers crash or
1660 refuse to read the program, and may cause assemblers other than the GNU
1661 assembler (GAS) to fail with an error.
1663 @item -gdwarf
1664 Produce debugging information in DWARF version 1 format (if that is
1665 supported).  This is the format used by SDB on most System V Release 4
1666 systems.
1668 @item -gdwarf+
1669 Produce debugging information in DWARF version 1 format (if that is
1670 supported), using GNU extensions understood only by the GNU debugger
1671 (GDB).  The use of these extensions is likely to make other debuggers
1672 crash or refuse to read the program.
1674 @item -gdwarf-2
1675 Produce debugging information in DWARF version 2 format (if that is
1676 supported).  This is the format used by DBX on IRIX 6.
1678 @item -g@var{level}
1679 @itemx -ggdb@var{level}
1680 @itemx -gstabs@var{level}
1681 @itemx -gcoff@var{level}
1682 @itemx -gxcoff@var{level}
1683 @itemx -gdwarf@var{level}
1684 @itemx -gdwarf-2@var{level}
1685 Request debugging information and also use @var{level} to specify how
1686 much information.  The default level is 2.
1688 Level 1 produces minimal information, enough for making backtraces in
1689 parts of the program that you don't plan to debug.  This includes
1690 descriptions of functions and external variables, but no information
1691 about local variables and no line numbers.
1693 Level 3 includes extra information, such as all the macro definitions
1694 present in the program.  Some debuggers support macro expansion when
1695 you use @samp{-g3}.
1697 @cindex @code{prof}
1698 @item -p
1699 Generate extra code to write profile information suitable for the
1700 analysis program @code{prof}.  You must use this option when compiling
1701 the source files you want data about, and you must also use it when
1702 linking.
1704 @cindex @code{gprof}
1705 @item -pg
1706 Generate extra code to write profile information suitable for the
1707 analysis program @code{gprof}.  You must use this option when compiling
1708 the source files you want data about, and you must also use it when
1709 linking.
1711 @cindex @code{tcov}
1712 @item -a
1713 Generate extra code to write profile information for basic blocks, which will
1714 record the number of times each basic block is executed, the basic block start
1715 address, and the function name containing the basic block.  If @samp{-g} is
1716 used, the line number and filename of the start of the basic block will also be
1717 recorded.  If not overridden by the machine description, the default action is
1718 to append to the text file @file{bb.out}.
1720 This data could be analyzed by a program like @code{tcov}.  Note,
1721 however, that the format of the data is not what @code{tcov} expects.
1722 Eventually GNU @code{gprof} should be extended to process this data.
1724 @item -Q
1725 Makes the compiler print out each function name as it is compiled, and
1726 print some statistics about each pass when it finishes.
1728 @item -ax
1729 Generate extra code to profile basic blocks.  Your executable will
1730 produce output that is a superset of that produced when @samp{-a} is
1731 used.  Additional output is the source and target address of the basic
1732 blocks where a jump takes place, the number of times a jump is executed,
1733 and (optionally) the complete sequence of basic blocks being executed.
1734 The output is appended to file @file{bb.out}.
1736 You can examine different profiling aspects without recompilation.  Your
1737 execuable will read a list of function names from file @file{bb.in}.
1738 Profiling starts when a function on the list is entered and stops when
1739 that invocation is exited.  To exclude a function from profiling, prefix
1740 its name with `-'.  If a function name is not unique, you can
1741 disambiguate it by writing it in the form
1742 @samp{/path/filename.d:functionname}.  Your executable will write the
1743 available paths and filenames in file @file{bb.out}.
1745 Several function names have a special meaning:
1746 @table @code
1747 @item __bb_jumps__
1748 Write source, target and frequency of jumps to file @file{bb.out}.
1749 @item __bb_hidecall__
1750 Exclude function calls from frequency count.
1751 @item __bb_showret__
1752 Include function returns in frequency count.
1753 @item __bb_trace__
1754 Write the sequence of basic blocks executed to file @file{bbtrace.gz}.
1755 The file will be compressed using the program @samp{gzip}, which must
1756 exist in your @code{PATH}.  On systems without the @samp{popen}
1757 function, the file will be named @file{bbtrace} and will not be
1758 compressed.  @strong{Profiling for even a few seconds on these systems
1759 will produce a very large file.}  Note: @code{__bb_hidecall__} and
1760 @code{__bb_showret__} will not affect the sequence written to
1761 @file{bbtrace.gz}.
1762 @end table
1764 Here's a short example using different profiling parameters
1765 in file @file{bb.in}.  Assume function @code{foo} consists of basic blocks
1766 1 and 2 and is called twice from block 3 of function @code{main}.  After
1767 the calls, block 3 transfers control to block 4 of @code{main}.
1769 With @code{__bb_trace__} and @code{main} contained in file @file{bb.in},
1770 the following sequence of blocks is written to file @file{bbtrace.gz}:
1771 0 3 1 2 1 2 4.  The return from block 2 to block 3 is not shown, because
1772 the return is to a point inside the block and not to the top.  The
1773 block address 0 always indicates, that control is transferred
1774 to the trace from somewhere outside the observed functions.  With
1775 @samp{-foo} added to @file{bb.in}, the blocks of function
1776 @code{foo} are removed from the trace, so only 0 3 4 remains.
1778 With @code{__bb_jumps__} and @code{main} contained in file @file{bb.in},
1779 jump frequencies will be written to file @file{bb.out}.  The
1780 frequencies are obtained by constructing a trace of blocks
1781 and incrementing a counter for every neighbouring pair of blocks
1782 in the trace.  The trace 0 3 1 2 1 2 4 displays the following
1783 frequencies:
1785 @example
1786 Jump from block 0x0 to block 0x3 executed 1 time(s)
1787 Jump from block 0x3 to block 0x1 executed 1 time(s)
1788 Jump from block 0x1 to block 0x2 executed 2 time(s)
1789 Jump from block 0x2 to block 0x1 executed 1 time(s)
1790 Jump from block 0x2 to block 0x4 executed 1 time(s)
1791 @end example
1793 With @code{__bb_hidecall__}, control transfer due to call instructions
1794 is removed from the trace, that is the trace is cut into three parts: 0
1795 3 4, 0 1 2 and 0 1 2.  With @code{__bb_showret__}, control transfer due
1796 to return instructions is added to the trace.  The trace becomes: 0 3 1
1797 2 3 1 2 3 4.  Note, that this trace is not the same, as the sequence
1798 written to @file{bbtrace.gz}.  It is solely used for counting jump
1799 frequencies.
1801 @item -fprofile-arcs
1802 Instrument @dfn{arcs} during compilation.  For each function of your
1803 program, GNU CC creates a program flow graph, then finds a spanning tree
1804 for the graph.  Only arcs that are not on the spanning tree have to be
1805 instrumented: the compiler adds code to count the number of times that these
1806 arcs are executed.  When an arc is the only exit or only entrance to a
1807 block, the instrumentation code can be added to the block; otherwise, a
1808 new basic block must be created to hold the instrumentation code.
1810 Since not every arc in the program must be instrumented, programs
1811 compiled with this option run faster than programs compiled with
1812 @samp{-a}, which adds instrumentation code to every basic block in the
1813 program.  The tradeoff: since @code{gcov} does not have
1814 execution counts for all branches, it must start with the execution
1815 counts for the instrumented branches, and then iterate over the program
1816 flow graph until the entire graph has been solved.  Hence, @code{gcov}
1817 runs a little more slowly than a program which uses information from
1818 @samp{-a}.
1820 @samp{-fprofile-arcs} also makes it possible to estimate branch
1821 probabilities, and to calculate basic block execution counts.  In
1822 general, basic block execution counts do not give enough information to
1823 estimate all branch probabilities.  When the compiled program exits, it
1824 saves the arc execution counts to a file called
1825 @file{@var{sourcename}.da}.  Use the compiler option
1826 @samp{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
1827 Control Optimization}) when recompiling, to optimize using estimated
1828 branch probabilities.
1830 @need 2000
1831 @item -ftest-coverage
1832 Create data files for the @code{gcov} code-coverage utility
1833 (@pxref{Gcov,, @code{gcov}: a GNU CC Test Coverage Program}).
1834 The data file names begin with the name of your source file:
1836 @table @code
1837 @item @var{sourcename}.bb
1838 A mapping from basic blocks to line numbers, which @code{gcov} uses to
1839 associate basic block execution counts with line numbers.
1841 @item @var{sourcename}.bbg
1842 A list of all arcs in the program flow graph.  This allows @code{gcov}
1843 to reconstruct the program flow graph, so that it can compute all basic
1844 block and arc execution counts from the information in the
1845 @code{@var{sourcename}.da} file (this last file is the output from
1846 @samp{-fprofile-arcs}).
1847 @end table
1849 @item -d@var{letters}
1850 Says to make debugging dumps during compilation at times specified by
1851 @var{letters}.  This is used for debugging the compiler.  The file names
1852 for most of the dumps are made by appending a word to the source file
1853 name (e.g.  @file{foo.c.rtl} or @file{foo.c.jump}).  Here are the
1854 possible letters for use in @var{letters}, and their meanings:
1856 @table @samp
1857 @item M
1858 Dump all macro definitions, at the end of preprocessing, and write no
1859 output.
1860 @item N
1861 Dump all macro names, at the end of preprocessing.
1862 @item D
1863 Dump all macro definitions, at the end of preprocessing, in addition to
1864 normal output.
1865 @item y
1866 Dump debugging information during parsing, to standard error.
1867 @item r
1868 Dump after RTL generation, to @file{@var{file}.rtl}.
1869 @item x
1870 Just generate RTL for a function instead of compiling it.  Usually used
1871 with @samp{r}.
1872 @item j
1873 Dump after first jump optimization, to @file{@var{file}.jump}.
1874 @item s
1875 Dump after CSE (including the jump optimization that sometimes
1876 follows CSE), to @file{@var{file}.cse}.
1877 @item L
1878 Dump after loop optimization, to @file{@var{file}.loop}.
1879 @item t
1880 Dump after the second CSE pass (including the jump optimization that
1881 sometimes follows CSE), to @file{@var{file}.cse2}.
1882 @item f
1883 Dump after flow analysis, to @file{@var{file}.flow}.
1884 @item c
1885 Dump after instruction combination, to the file
1886 @file{@var{file}.combine}.
1887 @item S
1888 Dump after the first instruction scheduling pass, to
1889 @file{@var{file}.sched}.
1890 @item l
1891 Dump after local register allocation, to
1892 @file{@var{file}.lreg}.
1893 @item g
1894 Dump after global register allocation, to
1895 @file{@var{file}.greg}.
1896 @item R
1897 Dump after the second instruction scheduling pass, to
1898 @file{@var{file}.sched2}.
1899 @item J
1900 Dump after last jump optimization, to @file{@var{file}.jump2}.
1901 @item d
1902 Dump after delayed branch scheduling, to @file{@var{file}.dbr}.
1903 @item k
1904 Dump after conversion from registers to stack, to @file{@var{file}.stack}.
1905 @item a
1906 Produce all the dumps listed above.
1907 @item m
1908 Print statistics on memory usage, at the end of the run, to
1909 standard error.
1910 @item p
1911 Annotate the assembler output with a comment indicating which
1912 pattern and alternative was used.
1913 @item A
1914 Annotate the assembler output with miscellaneous debugging information.
1915 @end table
1917 @item -fpretend-float
1918 When running a cross-compiler, pretend that the target machine uses the
1919 same floating point format as the host machine.  This causes incorrect
1920 output of the actual floating constants, but the actual instruction
1921 sequence will probably be the same as GNU CC would make when running on
1922 the target machine.
1924 @item -save-temps
1925 Store the usual ``temporary'' intermediate files permanently; place them
1926 in the current directory and name them based on the source file.  Thus,
1927 compiling @file{foo.c} with @samp{-c -save-temps} would produce files
1928 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.
1930 @item -print-file-name=@var{library}
1931 Print the full absolute name of the library file @var{library} that
1932 would be used when linking---and don't do anything else.  With this
1933 option, GNU CC does not compile or link anything; it just prints the
1934 file name.
1936 @item -print-prog-name=@var{program}
1937 Like @samp{-print-file-name}, but searches for a program such as @samp{cpp}.
1939 @item -print-libgcc-file-name
1940 Same as @samp{-print-file-name=libgcc.a}.
1942 This is useful when you use @samp{-nostdlib} or @samp{-nodefaultlibs}
1943 but you do want to link with @file{libgcc.a}.  You can do
1945 @example
1946 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
1947 @end example
1949 @item -print-search-dirs
1950 Print the name of the configured installation directory and a list of
1951 program and library directories gcc will search---and don't do anything else.
1953 This is useful when gcc prints the error message
1954 @samp{installation problem, cannot exec cpp: No such file or directory}.
1955 To resolve this you either need to put @file{cpp} and the other compiler
1956 components where gcc expects to find them, or you can set the environment
1957 variable @code{GCC_EXEC_PREFIX} to the directory where you installed them.
1958 Don't forget the trailing '/'.
1959 @xref{Environment Variables}.
1960 @end table
1962 @node Optimize Options
1963 @section Options That Control Optimization
1964 @cindex optimize options
1965 @cindex options, optimization
1967 These options control various sorts of optimizations:
1969 @table @code
1970 @item -O
1971 @itemx -O1
1972 Optimize.  Optimizing compilation takes somewhat more time, and a lot
1973 more memory for a large function.
1975 Without @samp{-O}, the compiler's goal is to reduce the cost of
1976 compilation and to make debugging produce the expected results.
1977 Statements are independent: if you stop the program with a breakpoint
1978 between statements, you can then assign a new value to any variable or
1979 change the program counter to any other statement in the function and
1980 get exactly the results you would expect from the source code.
1982 Without @samp{-O}, the compiler only allocates variables declared
1983 @code{register} in registers.  The resulting compiled code is a little
1984 worse than produced by PCC without @samp{-O}.
1986 With @samp{-O}, the compiler tries to reduce code size and execution
1987 time.
1989 When you specify @samp{-O}, the compiler turns on @samp{-fthread-jumps}
1990 and @samp{-fdefer-pop} on all machines.  The compiler turns on
1991 @samp{-fdelayed-branch} on machines that have delay slots, and
1992 @samp{-fomit-frame-pointer} on machines that can support debugging even
1993 without a frame pointer.  On some machines the compiler also turns
1994 on other flags.@refill
1996 @item -O2
1997 Optimize even more.  GNU CC performs nearly all supported optimizations
1998 that do not involve a space-speed tradeoff.  The compiler does not
1999 perform loop unrolling or function inlining when you specify @samp{-O2}.
2000 As compared to @samp{-O}, this option increases both compilation time
2001 and the performance of the generated code.
2003 @samp{-O2} turns on all optional optimizations except for loop unrolling
2004 and function inlining.  It also turns on the @samp{-fforce-mem} option
2005 on all machines and frame pointer elimination on machines where doing so
2006 does not interfere with debugging.
2008 @item -O3
2009 Optimize yet more.  @samp{-O3} turns on all optimizations specified by
2010 @samp{-O2} and also turns on the @samp{inline-functions} option.
2012 @item -O0
2013 Do not optimize.
2015 If you use multiple @samp{-O} options, with or without level numbers,
2016 the last such option is the one that is effective.
2017 @end table
2019 Options of the form @samp{-f@var{flag}} specify machine-independent
2020 flags.  Most flags have both positive and negative forms; the negative
2021 form of @samp{-ffoo} would be @samp{-fno-foo}.  In the table below,
2022 only one of the forms is listed---the one which is not the default.
2023 You can figure out the other form by either removing @samp{no-} or
2024 adding it.
2026 @table @code
2027 @item -ffloat-store
2028 Do not store floating point variables in registers, and inhibit other
2029 options that might change whether a floating point value is taken from a
2030 register or memory.
2032 @cindex floating point precision
2033 This option prevents undesirable excess precision on machines such as
2034 the 68000 where the floating registers (of the 68881) keep more
2035 precision than a @code{double} is supposed to have.  Similarly for the
2036 x86 architecture.  For most programs, the excess precision does only
2037 good, but a few programs rely on the precise definition of IEEE floating
2038 point.  Use @samp{-ffloat-store} for such programs.
2040 @item -fno-default-inline
2041 Do not make member functions inline by default merely because they are
2042 defined inside the class scope (C++ only).  Otherwise, when you specify
2043 @w{@samp{-O}}, member functions defined inside class scope are compiled
2044 inline by default; i.e., you don't need to add @samp{inline} in front of
2045 the member function name.
2047 @item -fno-defer-pop
2048 Always pop the arguments to each function call as soon as that function
2049 returns.  For machines which must pop arguments after a function call,
2050 the compiler normally lets arguments accumulate on the stack for several
2051 function calls and pops them all at once.
2053 @item -fforce-mem
2054 Force memory operands to be copied into registers before doing
2055 arithmetic on them.  This produces better code by making all memory
2056 references potential common subexpressions.  When they are not common
2057 subexpressions, instruction combination should eliminate the separate
2058 register-load.  The @samp{-O2} option turns on this option.
2060 @item -fforce-addr
2061 Force memory address constants to be copied into registers before
2062 doing arithmetic on them.  This may produce better code just as
2063 @samp{-fforce-mem} may.
2065 @item -fomit-frame-pointer
2066 Don't keep the frame pointer in a register for functions that
2067 don't need one.  This avoids the instructions to save, set up and
2068 restore frame pointers; it also makes an extra register available
2069 in many functions.  @strong{It also makes debugging impossible on
2070 some machines.}
2072 @ifset INTERNALS
2073 On some machines, such as the Vax, this flag has no effect, because
2074 the standard calling sequence automatically handles the frame pointer
2075 and nothing is saved by pretending it doesn't exist.  The
2076 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
2077 whether a target machine supports this flag.  @xref{Registers}.@refill
2078 @end ifset
2079 @ifclear INTERNALS
2080 On some machines, such as the Vax, this flag has no effect, because
2081 the standard calling sequence automatically handles the frame pointer
2082 and nothing is saved by pretending it doesn't exist.  The
2083 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
2084 whether a target machine supports this flag.  @xref{Registers,,Register
2085 Usage, gcc.info, Using and Porting GCC}.@refill
2086 @end ifclear
2088 @item -fno-inline
2089 Don't pay attention to the @code{inline} keyword.  Normally this option
2090 is used to keep the compiler from expanding any functions inline.
2091 Note that if you are not optimizing, no functions can be expanded inline.
2093 @item -finline-functions
2094 Integrate all simple functions into their callers.  The compiler
2095 heuristically decides which functions are simple enough to be worth
2096 integrating in this way.
2098 If all calls to a given function are integrated, and the function is
2099 declared @code{static}, then the function is normally not output as
2100 assembler code in its own right.
2102 @item -fkeep-inline-functions
2103 Even if all calls to a given function are integrated, and the function
2104 is declared @code{static}, nevertheless output a separate run-time
2105 callable version of the function.  This switch does not affect
2106 @code{extern inline} functions.
2108 @item -fkeep-static-consts
2109 Emit variables declared @code{static const} when optimization isn't turned
2110 on, even if the variables aren't referenced.
2112 GNU CC enables this option by default.  If you want to force the compiler to
2113 check if the variable was referenced, regardless of whether or not
2114 optimization is turned on, use the @samp{-fno-keep-static-consts} option.
2116 @item -fno-function-cse
2117 Do not put function addresses in registers; make each instruction that
2118 calls a constant function contain the function's address explicitly.
2120 This option results in less efficient code, but some strange hacks
2121 that alter the assembler output may be confused by the optimizations
2122 performed when this option is not used.
2124 @item -ffast-math
2125 This option allows GCC to violate some ANSI or IEEE rules and/or
2126 specifications in the interest of optimizing code for speed.  For
2127 example, it allows the compiler to assume arguments to the @code{sqrt}
2128 function are non-negative numbers and that no floating-point values
2129 are NaNs.
2131 This option should never be turned on by any @samp{-O} option since
2132 it can result in incorrect output for programs which depend on
2133 an exact implementation of IEEE or ANSI rules/specifications for
2134 math functions.
2135 @end table
2137 @c following causes underfulls.. they don't look great, but we deal.
2138 @c --mew 26jan93
2139 The following options control specific optimizations.  The @samp{-O2}
2140 option turns on all of these optimizations except @samp{-funroll-loops}
2141 and @samp{-funroll-all-loops}.  On most machines, the @samp{-O} option
2142 turns on the @samp{-fthread-jumps} and @samp{-fdelayed-branch} options,
2143 but specific machines may handle it differently.
2145 You can use the following flags in the rare cases when ``fine-tuning''
2146 of optimizations to be performed is desired.
2148 @table @code
2149 @item -fstrength-reduce
2150 Perform the optimizations of loop strength reduction and
2151 elimination of iteration variables.
2153 @item -fthread-jumps
2154 Perform optimizations where we check to see if a jump branches to a
2155 location where another comparison subsumed by the first is found.  If
2156 so, the first branch is redirected to either the destination of the
2157 second branch or a point immediately following it, depending on whether
2158 the condition is known to be true or false.
2160 @item -fcse-follow-jumps
2161 In common subexpression elimination, scan through jump instructions
2162 when the target of the jump is not reached by any other path.  For
2163 example, when CSE encounters an @code{if} statement with an
2164 @code{else} clause, CSE will follow the jump when the condition
2165 tested is false.
2167 @item -fcse-skip-blocks
2168 This is similar to @samp{-fcse-follow-jumps}, but causes CSE to
2169 follow jumps which conditionally skip over blocks.  When CSE
2170 encounters a simple @code{if} statement with no else clause,
2171 @samp{-fcse-skip-blocks} causes CSE to follow the jump around the
2172 body of the @code{if}.
2174 @item -frerun-cse-after-loop
2175 Re-run common subexpression elimination after loop optimizations has been
2176 performed.
2178 @item -frerun-loop-opt
2179 Run the loop optimizer twice.
2181 @item -fexpensive-optimizations
2182 Perform a number of minor optimizations that are relatively expensive.
2184 @item -fdelayed-branch
2185 If supported for the target machine, attempt to reorder instructions
2186 to exploit instruction slots available after delayed branch
2187 instructions.
2189 @item -fschedule-insns
2190 If supported for the target machine, attempt to reorder instructions to
2191 eliminate execution stalls due to required data being unavailable.  This
2192 helps machines that have slow floating point or memory load instructions
2193 by allowing other instructions to be issued until the result of the load
2194 or floating point instruction is required.
2196 @item -fschedule-insns2
2197 Similar to @samp{-fschedule-insns}, but requests an additional pass of
2198 instruction scheduling after register allocation has been done.  This is
2199 especially useful on machines with a relatively small number of
2200 registers and where memory load instructions take more than one cycle.
2202 @item -ffunction-sections
2203 Place each function into its own section in the output file if the
2204 target supports arbitrary sections.  The function's name determines
2205 the section's name in the output file.
2207 Use this option on systems where the linker can perform optimizations
2208 to improve locality of reference in the instruction space.  HPPA
2209 processors running HP-UX and Sparc processors running Solaris 2 have
2210 linkers with such optimizations.  Other systems using the ELF object format
2211 as well as AIX may have these optimizations in the future.
2213 Only use this option when there are significant benefits from doing
2214 so.  When you specify this option, the assembler and linker will
2215 create larger object and executable files and will also be slower.
2216 You will not be able to use @code{gprof} on all systems if you
2217 specify this option and you may have problems with debugging if
2218 you specify both this option and @samp{-g}.
2220 @item -fcaller-saves
2221 Enable values to be allocated in registers that will be clobbered by
2222 function calls, by emitting extra instructions to save and restore the
2223 registers around such calls.  Such allocation is done only when it
2224 seems to result in better code than would otherwise be produced.
2226 This option is enabled by default on certain machines, usually those
2227 which have no call-preserved registers to use instead.
2229 @item -funroll-loops
2230 Perform the optimization of loop unrolling.  This is only done for loops
2231 whose number of iterations can be determined at compile time or run time.
2232 @samp{-funroll-loop} implies both @samp{-fstrength-reduce} and
2233 @samp{-frerun-cse-after-loop}.
2235 @item -funroll-all-loops
2236 Perform the optimization of loop unrolling.  This is done for all loops
2237 and usually makes programs run more slowly.  @samp{-funroll-all-loops}
2238 implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}.
2240 @item -fmove-all-movables
2241 Forces all invariant computations in loops to be moved
2242 outside the loop.
2244 @item -freduce-all-givs
2245 Forces all general-induction variables in loops to be
2246 strength-reduced.
2248 @emph{Note:} When compiling programs written in Fortran,
2249 @samp{-fmove-all-moveables} and @samp{-freduce-all-givs} are enabled
2250 by default when you use the optimizer.
2252 These options may generate better or worse code; results are highly
2253 dependent on the structure of loops within the source code.
2255 These two options are intended to be removed someday, once
2256 they have helped determine the efficacy of various
2257 approaches to improving loop optimizations.
2259 Please let us (@code{egcs@@cygnus.com} and @code{fortran@@gnu.org})
2260 know how use of these options affects
2261 the performance of your production code.
2262 We're very interested in code that runs @emph{slower}
2263 when these options are @emph{enabled}.
2265 @item -fno-peephole
2266 Disable any machine-specific peephole optimizations.
2268 @item -fbranch-probabilities
2269 After running a program compiled with @samp{-fprofile-arcs}
2270 (@pxref{Debugging Options,, Options for Debugging Your Program or
2271 @code{gcc}}), you can compile it a second time using
2272 @samp{-fbranch-probabilities}, to improve optimizations based on
2273 guessing the path a branch might take.
2275 @ifset INTERNALS
2276 With @samp{-fbranch-probabilities}, GNU CC puts a @samp{REG_EXEC_COUNT}
2277 note on the first instruction of each basic block, and a
2278 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
2279 These can be used to improve optimization.  Currently, they are only
2280 used in one place: in @file{reorg.c}, instead of guessing which path a
2281 branch is mostly to take, the @samp{REG_BR_PROB} values are used to
2282 exactly determine which path is taken more often.
2283 @end ifset
2285 @item -fregmove
2286 Some machines only support 2 operands per instruction.  On such
2287 machines, GNU CC might have to do extra copies.  The @samp{-fregmove}
2288 option overrides the default for the machine to do the copy before
2289 register allocation.
2290 @end table
2292 @node Preprocessor Options
2293 @section Options Controlling the Preprocessor
2294 @cindex preprocessor options
2295 @cindex options, preprocessor
2297 These options control the C preprocessor, which is run on each C source
2298 file before actual compilation.
2300 If you use the @samp{-E} option, nothing is done except preprocessing.
2301 Some of these options make sense only together with @samp{-E} because
2302 they cause the preprocessor output to be unsuitable for actual
2303 compilation.
2305 @table @code
2306 @item -include @var{file}
2307 Process @var{file} as input before processing the regular input file.
2308 In effect, the contents of @var{file} are compiled first.  Any @samp{-D}
2309 and @samp{-U} options on the command line are always processed before
2310 @samp{-include @var{file}}, regardless of the order in which they are
2311 written.  All the @samp{-include} and @samp{-imacros} options are
2312 processed in the order in which they are written.
2314 @item -imacros @var{file}
2315 Process @var{file} as input, discarding the resulting output, before
2316 processing the regular input file.  Because the output generated from
2317 @var{file} is discarded, the only effect of @samp{-imacros @var{file}}
2318 is to make the macros defined in @var{file} available for use in the
2319 main input.
2321 Any @samp{-D} and @samp{-U} options on the command line are always
2322 processed before @samp{-imacros @var{file}}, regardless of the order in
2323 which they are written.  All the @samp{-include} and @samp{-imacros}
2324 options are processed in the order in which they are written.
2326 @item -idirafter @var{dir}
2327 @cindex second include path
2328 Add the directory @var{dir} to the second include path.  The directories
2329 on the second include path are searched when a header file is not found
2330 in any of the directories in the main include path (the one that
2331 @samp{-I} adds to).
2333 @item -iprefix @var{prefix}
2334 Specify @var{prefix} as the prefix for subsequent @samp{-iwithprefix}
2335 options.
2337 @item -iwithprefix @var{dir}
2338 Add a directory to the second include path.  The directory's name is
2339 made by concatenating @var{prefix} and @var{dir}, where @var{prefix} was
2340 specified previously with @samp{-iprefix}.  If you have not specified a
2341 prefix yet, the directory containing the installed passes of the
2342 compiler is used as the default.
2344 @item -iwithprefixbefore @var{dir}
2345 Add a directory to the main include path.  The directory's name is made
2346 by concatenating @var{prefix} and @var{dir}, as in the case of
2347 @samp{-iwithprefix}.
2349 @item -isystem @var{dir}
2350 Add a directory to the beginning of the second include path, marking it
2351 as a system directory, so that it gets the same special treatment as
2352 is applied to the standard system directories.
2354 @item -nostdinc
2355 Do not search the standard system directories for header files.  Only
2356 the directories you have specified with @samp{-I} options (and the
2357 current directory, if appropriate) are searched.  @xref{Directory
2358 Options}, for information on @samp{-I}.
2360 By using both @samp{-nostdinc} and @samp{-I-}, you can limit the include-file
2361 search path to only those directories you specify explicitly.
2363 @item -undef
2364 Do not predefine any nonstandard macros.  (Including architecture flags).
2366 @item -E
2367 Run only the C preprocessor.  Preprocess all the C source files
2368 specified and output the results to standard output or to the
2369 specified output file.
2371 @item -C
2372 Tell the preprocessor not to discard comments.  Used with the
2373 @samp{-E} option.
2375 @item -P
2376 Tell the preprocessor not to generate @samp{#line} directives.
2377 Used with the @samp{-E} option.
2379 @cindex make
2380 @cindex dependencies, make
2381 @item -M
2382 Tell the preprocessor to output a rule suitable for @code{make}
2383 describing the dependencies of each object file.  For each source file,
2384 the preprocessor outputs one @code{make}-rule whose target is the object
2385 file name for that source file and whose dependencies are all the
2386 @code{#include} header files it uses.  This rule may be a single line or
2387 may be continued with @samp{\}-newline if it is long.  The list of rules
2388 is printed on standard output instead of the preprocessed C program.
2390 @samp{-M} implies @samp{-E}.
2392 Another way to specify output of a @code{make} rule is by setting
2393 the environment variable @code{DEPENDENCIES_OUTPUT} (@pxref{Environment
2394 Variables}).
2396 @item -MM
2397 Like @samp{-M} but the output mentions only the user header files
2398 included with @samp{#include "@var{file}"}.  System header files
2399 included with @samp{#include <@var{file}>} are omitted.
2401 @item -MD
2402 Like @samp{-M} but the dependency information is written to a file made by
2403 replacing ".c" with ".d" at the end of the input file names.
2404 This is in addition to compiling the file as specified---@samp{-MD} does
2405 not inhibit ordinary compilation the way @samp{-M} does.
2407 In Mach, you can use the utility @code{md} to merge multiple dependency
2408 files into a single dependency file suitable for using with the @samp{make}
2409 command.
2411 @item -MMD
2412 Like @samp{-MD} except mention only user header files, not system
2413 header files.
2415 @item -MG
2416 Treat missing header files as generated files and assume they live in the
2417 same directory as the source file.  If you specify @samp{-MG}, you
2418 must also specify either @samp{-M} or @samp{-MM}.  @samp{-MG} is not
2419 supported with @samp{-MD} or @samp{-MMD}.
2421 @item -H
2422 Print the name of each header file used, in addition to other normal
2423 activities.
2425 @item -A@var{question}(@var{answer})
2426 Assert the answer @var{answer} for @var{question}, in case it is tested
2427 with a preprocessing conditional such as @samp{#if
2428 #@var{question}(@var{answer})}.  @samp{-A-} disables the standard
2429 assertions that normally describe the target machine.
2431 @item -D@var{macro}
2432 Define macro @var{macro} with the string @samp{1} as its definition.
2434 @item -D@var{macro}=@var{defn}
2435 Define macro @var{macro} as @var{defn}.  All instances of @samp{-D} on
2436 the command line are processed before any @samp{-U} options.
2438 @item -U@var{macro}
2439 Undefine macro @var{macro}.  @samp{-U} options are evaluated after all
2440 @samp{-D} options, but before any @samp{-include} and @samp{-imacros}
2441 options.
2443 @item -dM
2444 Tell the preprocessor to output only a list of the macro definitions
2445 that are in effect at the end of preprocessing.  Used with the @samp{-E}
2446 option.
2448 @item -dD
2449 Tell the preprocessing to pass all macro definitions into the output, in
2450 their proper sequence in the rest of the output.
2452 @item -dN
2453 Like @samp{-dD} except that the macro arguments and contents are omitted.
2454 Only @samp{#define @var{name}} is included in the output.
2456 @item -trigraphs
2457 Support ANSI C trigraphs.  The @samp{-ansi} option also has this effect.
2459 @item -Wp,@var{option}
2460 Pass @var{option} as an option to the preprocessor.  If @var{option}
2461 contains commas, it is split into multiple options at the commas.
2462 @end table
2464 @node Assembler Options
2465 @section Passing Options to the Assembler
2467 @c prevent bad page break with this line
2468 You can pass options to the assembler.
2470 @table @code
2471 @item -Wa,@var{option}
2472 Pass @var{option} as an option to the assembler.  If @var{option}
2473 contains commas, it is split into multiple options at the commas.
2474 @end table
2476 @node Link Options
2477 @section Options for Linking
2478 @cindex link options
2479 @cindex options, linking
2481 These options come into play when the compiler links object files into
2482 an executable output file.  They are meaningless if the compiler is
2483 not doing a link step.
2485 @table @code
2486 @cindex file names
2487 @item @var{object-file-name}
2488 A file name that does not end in a special recognized suffix is
2489 considered to name an object file or library.  (Object files are
2490 distinguished from libraries by the linker according to the file
2491 contents.)  If linking is done, these object files are used as input
2492 to the linker.
2494 @item -c
2495 @itemx -S
2496 @itemx -E
2497 If any of these options is used, then the linker is not run, and
2498 object file names should not be used as arguments.  @xref{Overall
2499 Options}.
2501 @cindex Libraries
2502 @item -l@var{library}
2503 Search the library named @var{library} when linking.
2505 It makes a difference where in the command you write this option; the
2506 linker searches processes libraries and object files in the order they
2507 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
2508 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
2509 to functions in @samp{z}, those functions may not be loaded.
2511 The linker searches a standard list of directories for the library,
2512 which is actually a file named @file{lib@var{library}.a}.  The linker
2513 then uses this file as if it had been specified precisely by name.
2515 The directories searched include several standard system directories
2516 plus any that you specify with @samp{-L}.
2518 Normally the files found this way are library files---archive files
2519 whose members are object files.  The linker handles an archive file by
2520 scanning through it for members which define symbols that have so far
2521 been referenced but not defined.  But if the file that is found is an
2522 ordinary object file, it is linked in the usual fashion.  The only
2523 difference between using an @samp{-l} option and specifying a file name
2524 is that @samp{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
2525 and searches several directories.
2527 @item -lobjc
2528 You need this special case of the @samp{-l} option in order to
2529 link an Objective C program.
2531 @item -nostartfiles
2532 Do not use the standard system startup files when linking.
2533 The standard system libraries are used normally, unless @code{-nostdlib}
2534 or @code{-nodefaultlibs} is used.
2536 @item -nodefaultlibs
2537 Do not use the standard system libraries when linking.
2538 Only the libraries you specify will be passed to the linker.
2539 The standard startup files are used normally, unless @code{-nostartfiles}
2540 is used.
2542 @item -nostdlib
2543 Do not use the standard system startup files or libraries when linking.
2544 No startup files and only the libraries you specify will be passed to
2545 the linker.
2547 @cindex @code{-lgcc}, use with @code{-nostdlib}
2548 @cindex @code{-nostdlib} and unresolved references
2549 @cindex unresolved references and @code{-nostdlib}
2550 @cindex @code{-lgcc}, use with @code{-nodefaultlibs}
2551 @cindex @code{-nodefaultlibs} and unresolved references
2552 @cindex unresolved references and @code{-nodefaultlibs}
2553 One of the standard libraries bypassed by @samp{-nostdlib} and
2554 @samp{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
2555 that GNU CC uses to overcome shortcomings of particular machines, or special
2556 needs for some languages.
2557 @ifset INTERNALS
2558 (@xref{Interface,,Interfacing to GNU CC Output}, for more discussion of
2559 @file{libgcc.a}.)
2560 @end ifset
2561 @ifclear INTERNALS
2562 (@xref{Interface,,Interfacing to GNU CC Output,gcc.info,Porting GNU CC},
2563 for more discussion of @file{libgcc.a}.)
2564 @end ifclear
2565 In most cases, you need @file{libgcc.a} even when you want to avoid
2566 other standard libraries.  In other words, when you specify @samp{-nostdlib}
2567 or @samp{-nodefaultlibs} you should usually specify @samp{-lgcc} as well.
2568 This ensures that you have no unresolved references to internal GNU CC
2569 library subroutines.  (For example, @samp{__main}, used to ensure C++
2570 constructors will be called; @pxref{Collect2,,@code{collect2}}.)
2572 @item -s
2573 Remove all symbol table and relocation information from the executable.
2575 @item -static
2576 On systems that support dynamic linking, this prevents linking with the shared
2577 libraries.  On other systems, this option has no effect.
2579 @item -shared
2580 Produce a shared object which can then be linked with other objects to
2581 form an executable.  Not all systems support this option.  You must
2582 also specify @samp{-fpic} or @samp{-fPIC} on some systems when
2583 you specify this option.
2585 @item -symbolic
2586 Bind references to global symbols when building a shared object.  Warn
2587 about any unresolved references (unless overridden by the link editor
2588 option @samp{-Xlinker -z -Xlinker defs}).  Only a few systems support
2589 this option.
2591 @item -Xlinker @var{option}
2592 Pass @var{option} as an option to the linker.  You can use this to
2593 supply system-specific linker options which GNU CC does not know how to
2594 recognize.
2596 If you want to pass an option that takes an argument, you must use
2597 @samp{-Xlinker} twice, once for the option and once for the argument.
2598 For example, to pass @samp{-assert definitions}, you must write
2599 @samp{-Xlinker -assert -Xlinker definitions}.  It does not work to write
2600 @samp{-Xlinker "-assert definitions"}, because this passes the entire
2601 string as a single argument, which is not what the linker expects.
2603 @item -Wl,@var{option}
2604 Pass @var{option} as an option to the linker.  If @var{option} contains
2605 commas, it is split into multiple options at the commas.
2607 @item -u @var{symbol}
2608 Pretend the symbol @var{symbol} is undefined, to force linking of
2609 library modules to define it.  You can use @samp{-u} multiple times with
2610 different symbols to force loading of additional library modules.
2611 @end table
2613 @node Directory Options
2614 @section Options for Directory Search
2615 @cindex directory options
2616 @cindex options, directory search
2617 @cindex search path
2619 These options specify directories to search for header files, for
2620 libraries and for parts of the compiler:
2622 @table @code
2623 @item -I@var{dir}
2624 Add the directory @var{dir} to the head of the list of directories to be
2625 searched for header files.  This can be used to override a system header
2626 file, substituting your own version, since these directories are
2627 searched before the system header file directories.  If you use more
2628 than one @samp{-I} option, the directories are scanned in left-to-right
2629 order; the standard system directories come after.
2631 @item -I-
2632 Any directories you specify with @samp{-I} options before the @samp{-I-}
2633 option are searched only for the case of @samp{#include "@var{file}"};
2634 they are not searched for @samp{#include <@var{file}>}.
2636 If additional directories are specified with @samp{-I} options after
2637 the @samp{-I-}, these directories are searched for all @samp{#include}
2638 directives.  (Ordinarily @emph{all} @samp{-I} directories are used
2639 this way.)
2641 In addition, the @samp{-I-} option inhibits the use of the current
2642 directory (where the current input file came from) as the first search
2643 directory for @samp{#include "@var{file}"}.  There is no way to
2644 override this effect of @samp{-I-}.  With @samp{-I.} you can specify
2645 searching the directory which was current when the compiler was
2646 invoked.  That is not exactly the same as what the preprocessor does
2647 by default, but it is often satisfactory.
2649 @samp{-I-} does not inhibit the use of the standard system directories
2650 for header files.  Thus, @samp{-I-} and @samp{-nostdinc} are
2651 independent.
2653 @item -L@var{dir}
2654 Add directory @var{dir} to the list of directories to be searched
2655 for @samp{-l}.
2657 @item -B@var{prefix}
2658 This option specifies where to find the executables, libraries,
2659 include files, and data files of the compiler itself.
2661 The compiler driver program runs one or more of the subprograms
2662 @file{cpp}, @file{cc1}, @file{as} and @file{ld}.  It tries
2663 @var{prefix} as a prefix for each program it tries to run, both with and
2664 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
2666 For each subprogram to be run, the compiler driver first tries the
2667 @samp{-B} prefix, if any.  If that name is not found, or if @samp{-B}
2668 was not specified, the driver tries two standard prefixes, which are
2669 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc-lib/}.  If neither of
2670 those results in a file name that is found, the unmodified program
2671 name is searched for using the directories specified in your
2672 @samp{PATH} environment variable.
2674 @samp{-B} prefixes that effectively specify directory names also apply
2675 to libraries in the linker, because the compiler translates these
2676 options into @samp{-L} options for the linker.  They also apply to
2677 includes files in the preprocessor, because the compiler translates these
2678 options into @samp{-isystem} options for the preprocessor.  In this case,
2679 the compiler appends @samp{include} to the prefix.
2681 The run-time support file @file{libgcc.a} can also be searched for using
2682 the @samp{-B} prefix, if needed.  If it is not found there, the two
2683 standard prefixes above are tried, and that is all.  The file is left
2684 out of the link if it is not found by those means.
2686 Another way to specify a prefix much like the @samp{-B} prefix is to use
2687 the environment variable @code{GCC_EXEC_PREFIX}.  @xref{Environment
2688 Variables}.
2690 @item -specs=@var{file}
2691 Process @var{file} after the compiler reads in the standard @file{specs}
2692 file, in order to override the defaults that the @file{gcc} driver
2693 program uses when determining what switches to pass to @file{cc1},
2694 @file{cc1plus}, @file{as}, @file{ld}, etc.  More than one
2695 @samp{-specs=}@var{file} can be specified on the command line, and they
2696 are processed in order, from left to right.
2697 @end table
2699 @node Target Options
2700 @section Specifying Target Machine and Compiler Version
2701 @cindex target options
2702 @cindex cross compiling
2703 @cindex specifying machine version
2704 @cindex specifying compiler version and target machine
2705 @cindex compiler version, specifying
2706 @cindex target machine, specifying
2708 By default, GNU CC compiles code for the same type of machine that you
2709 are using.  However, it can also be installed as a cross-compiler, to
2710 compile for some other type of machine.  In fact, several different
2711 configurations of GNU CC, for different target machines, can be
2712 installed side by side.  Then you specify which one to use with the
2713 @samp{-b} option.
2715 In addition, older and newer versions of GNU CC can be installed side
2716 by side.  One of them (probably the newest) will be the default, but
2717 you may sometimes wish to use another.
2719 @table @code
2720 @item -b @var{machine}
2721 The argument @var{machine} specifies the target machine for compilation.
2722 This is useful when you have installed GNU CC as a cross-compiler.
2724 The value to use for @var{machine} is the same as was specified as the
2725 machine type when configuring GNU CC as a cross-compiler.  For
2726 example, if a cross-compiler was configured with @samp{configure
2727 i386v}, meaning to compile for an 80386 running System V, then you
2728 would specify @samp{-b i386v} to run that cross compiler.
2730 When you do not specify @samp{-b}, it normally means to compile for
2731 the same type of machine that you are using.
2733 @item -V @var{version}
2734 The argument @var{version} specifies which version of GNU CC to run.
2735 This is useful when multiple versions are installed.  For example,
2736 @var{version} might be @samp{2.0}, meaning to run GNU CC version 2.0.
2738 The default version, when you do not specify @samp{-V}, is the last
2739 version of GNU CC that you installed.
2740 @end table
2742 The @samp{-b} and @samp{-V} options actually work by controlling part of
2743 the file name used for the executable files and libraries used for
2744 compilation.  A given version of GNU CC, for a given target machine, is
2745 normally kept in the directory @file{/usr/local/lib/gcc-lib/@var{machine}/@var{version}}.@refill
2747 Thus, sites can customize the effect of @samp{-b} or @samp{-V} either by
2748 changing the names of these directories or adding alternate names (or
2749 symbolic links).  If in directory @file{/usr/local/lib/gcc-lib/} the
2750 file @file{80386} is a link to the file @file{i386v}, then @samp{-b
2751 80386} becomes an alias for @samp{-b i386v}.
2753 In one respect, the @samp{-b} or @samp{-V} do not completely change
2754 to a different compiler: the top-level driver program @code{gcc}
2755 that you originally invoked continues to run and invoke the other
2756 executables (preprocessor, compiler per se, assembler and linker)
2757 that do the real work.  However, since no real work is done in the
2758 driver program, it usually does not matter that the driver program
2759 in use is not the one for the specified target and version.
2761 The only way that the driver program depends on the target machine is
2762 in the parsing and handling of special machine-specific options.
2763 However, this is controlled by a file which is found, along with the
2764 other executables, in the directory for the specified version and
2765 target machine.  As a result, a single installed driver program adapts
2766 to any specified target machine and compiler version.
2768 The driver program executable does control one significant thing,
2769 however: the default version and target machine.  Therefore, you can
2770 install different instances of the driver program, compiled for
2771 different targets or versions, under different names.
2773 For example, if the driver for version 2.0 is installed as @code{ogcc}
2774 and that for version 2.1 is installed as @code{gcc}, then the command
2775 @code{gcc} will use version 2.1 by default, while @code{ogcc} will use
2776 2.0 by default.  However, you can choose either version with either
2777 command with the @samp{-V} option.
2779 @node Submodel Options
2780 @section Hardware Models and Configurations
2781 @cindex submodel options
2782 @cindex specifying hardware config
2783 @cindex hardware models and configurations, specifying
2784 @cindex machine dependent options
2786 Earlier we discussed the standard option @samp{-b} which chooses among
2787 different installed compilers for completely different target
2788 machines, such as Vax vs. 68000 vs. 80386.
2790 In addition, each of these target machine types can have its own
2791 special options, starting with @samp{-m}, to choose among various
2792 hardware models or configurations---for example, 68010 vs 68020,
2793 floating coprocessor or none.  A single installed version of the
2794 compiler can compile for any model or configuration, according to the
2795 options specified.
2797 Some configurations of the compiler also support additional special
2798 options, usually for compatibility with other compilers on the same
2799 platform.
2801 @ifset INTERNALS
2802 These options are defined by the macro @code{TARGET_SWITCHES} in the
2803 machine description.  The default for the options is also defined by
2804 that macro, which enables you to change the defaults.
2805 @end ifset
2807 @menu
2808 * M680x0 Options::
2809 * VAX Options::
2810 * SPARC Options::
2811 * Convex Options::
2812 * AMD29K Options::
2813 * ARM Options::
2814 * MN10300 Options::
2815 * M32R/D Options::
2816 * M88K Options::
2817 * RS/6000 and PowerPC Options::
2818 * RT Options::
2819 * MIPS Options::
2820 * i386 Options::
2821 * HPPA Options::
2822 * Intel 960 Options::
2823 * DEC Alpha Options::
2824 * Clipper Options::
2825 * H8/300 Options::
2826 * SH Options::
2827 * System V Options::
2828 * V850 Options::
2829 @end menu
2831 @node M680x0 Options
2832 @subsection M680x0 Options
2833 @cindex M680x0 options
2835 These are the @samp{-m} options defined for the 68000 series.  The default
2836 values for these options depends on which style of 68000 was selected when
2837 the compiler was configured; the defaults for the most common choices are
2838 given below.
2840 @table @code
2841 @item -m68000
2842 @itemx -mc68000
2843 Generate output for a 68000.  This is the default
2844 when the compiler is configured for 68000-based systems.
2846 @item -m68020
2847 @itemx -mc68020
2848 Generate output for a 68020.  This is the default
2849 when the compiler is configured for 68020-based systems.
2851 @item -m68881
2852 Generate output containing 68881 instructions for floating point.
2853 This is the default for most 68020 systems unless @samp{-nfp} was
2854 specified when the compiler was configured.
2856 @item -m68030
2857 Generate output for a 68030.  This is the default when the compiler is
2858 configured for 68030-based systems.
2860 @item -m68040
2861 Generate output for a 68040.  This is the default when the compiler is
2862 configured for 68040-based systems.
2864 This option inhibits the use of 68881/68882 instructions that have to be
2865 emulated by software on the 68040.  If your 68040 does not have code to
2866 emulate those instructions, use @samp{-m68040}.
2868 @item -m68060
2869 Generate output for a 68060.  This is the default when the compiler is
2870 configured for 68060-based systems.
2872 This option inhibits the use of 68020 and 68881/68882 instructions that
2873 have to be emulated by software on the 68060.  If your 68060 does not
2874 have code to emulate those instructions, use @samp{-m68060}.
2876 @item -m5200
2877 Generate output for a 520X "coldfire" family cpu.  This is the default
2878 when the compiler is configured for 520X-based systems.
2881 @item -m68020-40
2882 Generate output for a 68040, without using any of the new instructions.
2883 This results in code which can run relatively efficiently on either a
2884 68020/68881 or a 68030 or a 68040.  The generated code does use the
2885 68881 instructions that are emulated on the 68040.
2887 @item -m68020-60
2888 Generate output for a 68060, without using any of the new instructions.
2889 This results in code which can run relatively efficiently on either a
2890 68020/68881 or a 68030 or a 68040.  The generated code does use the
2891 68881 instructions that are emulated on the 68060.
2893 @item -mfpa
2894 Generate output containing Sun FPA instructions for floating point.
2896 @item -msoft-float
2897 Generate output containing library calls for floating point.
2898 @strong{Warning:} the requisite libraries are not available for all m68k
2899 targets.  Normally the facilities of the machine's usual C compiler are
2900 used, but this can't be done directly in cross-compilation.  You must
2901 make your own arrangements to provide suitable library functions for
2902 cross-compilation.  The embedded targets @samp{m68k-*-aout} and
2903 @samp{m68k-*-coff} do provide software floating point support.
2905 @item -mshort
2906 Consider type @code{int} to be 16 bits wide, like @code{short int}.
2908 @item -mnobitfield
2909 Do not use the bit-field instructions.  The @samp{-m68000} option
2910 implies @w{@samp{-mnobitfield}}.
2912 @item -mbitfield
2913 Do use the bit-field instructions.  The @samp{-m68020} option implies
2914 @samp{-mbitfield}.  This is the default if you use a configuration
2915 designed for a 68020.
2917 @item -mrtd
2918 Use a different function-calling convention, in which functions
2919 that take a fixed number of arguments return with the @code{rtd}
2920 instruction, which pops their arguments while returning.  This
2921 saves one instruction in the caller since there is no need to pop
2922 the arguments there.
2924 This calling convention is incompatible with the one normally
2925 used on Unix, so you cannot use it if you need to call libraries
2926 compiled with the Unix compiler.
2928 Also, you must provide function prototypes for all functions that
2929 take variable numbers of arguments (including @code{printf});
2930 otherwise incorrect code will be generated for calls to those
2931 functions.
2933 In addition, seriously incorrect code will result if you call a
2934 function with too many arguments.  (Normally, extra arguments are
2935 harmlessly ignored.)
2937 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
2938 68040, and 68060 processors, but not by the 68000 or 5200.
2940 @item -malign-int
2941 @itemx -mno-align-int
2942 Control whether GNU CC aligns @code{int}, @code{long}, @code{long long}, 
2943 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
2944 boundary (@samp{-malign-int}) or a 16-bit boundary (@samp{-mno-align-int}).
2945 Aligning variables on 32-bit boundaries produces code that runs somewhat
2946 faster on processors with 32-bit busses at the expense of more memory.
2948 @strong{Warning:} if you use the @samp{-malign-int} switch, GNU CC will
2949 align structures containing the above types  differently than
2950 most published application binary interface specifications for the m68k.
2952 @end table
2954 @node VAX Options
2955 @subsection VAX Options
2956 @cindex VAX options
2958 These @samp{-m} options are defined for the Vax:
2960 @table @code
2961 @item -munix
2962 Do not output certain jump instructions (@code{aobleq} and so on)
2963 that the Unix assembler for the Vax cannot handle across long
2964 ranges.
2966 @item -mgnu
2967 Do output those jump instructions, on the assumption that you
2968 will assemble with the GNU assembler.
2970 @item -mg
2971 Output code for g-format floating point numbers instead of d-format.
2972 @end table
2974 @node SPARC Options
2975 @subsection SPARC Options
2976 @cindex SPARC options
2978 These @samp{-m} switches are supported on the SPARC:
2980 @table @code
2981 @item -mno-app-regs
2982 @itemx -mapp-regs
2983 Specify @samp{-mapp-regs} to generate output using the global registers
2984 2 through 4, which the SPARC SVR4 ABI reserves for applications.  This
2985 is the default.
2987 To be fully SVR4 ABI compliant at the cost of some performance loss,
2988 specify @samp{-mno-app-regs}.  You should compile libraries and system
2989 software with this option.
2991 @item -mfpu
2992 @itemx -mhard-float
2993 Generate output containing floating point instructions.  This is the
2994 default.
2996 @item -mno-fpu
2997 @itemx -msoft-float
2998 Generate output containing library calls for floating point.
2999 @strong{Warning:} the requisite libraries are not available for all SPARC
3000 targets.  Normally the facilities of the machine's usual C compiler are
3001 used, but this cannot be done directly in cross-compilation.  You must make
3002 your own arrangements to provide suitable library functions for
3003 cross-compilation.  The embedded targets @samp{sparc-*-aout} and
3004 @samp{sparclite-*-*} do provide software floating point support.
3006 @samp{-msoft-float} changes the calling convention in the output file;
3007 therefore, it is only useful if you compile @emph{all} of a program with
3008 this option.  In particular, you need to compile @file{libgcc.a}, the
3009 library that comes with GNU CC, with @samp{-msoft-float} in order for
3010 this to work.
3012 @item -mhard-quad-float
3013 Generate output containing quad-word (long double) floating point
3014 instructions.
3016 @item -msoft-quad-float
3017 Generate output containing library calls for quad-word (long double)
3018 floating point instructions.  The functions called are those specified
3019 in the SPARC ABI.  This is the default.
3021 As of this writing, there are no sparc implementations that have hardware
3022 support for the quad-word floating point instructions.  They all invoke
3023 a trap handler for one of these instructions, and then the trap handler
3024 emulates the effect of the instruction.  Because of the trap handler overhead,
3025 this is much slower than calling the ABI library routines.  Thus the
3026 @samp{-msoft-quad-float} option is the default.
3028 @item -mno-epilogue
3029 @itemx -mepilogue
3030 With @samp{-mepilogue} (the default), the compiler always emits code for
3031 function exit at the end of each function.  Any function exit in
3032 the middle of the function (such as a return statement in C) will
3033 generate a jump to the exit code at the end of the function.
3035 With @samp{-mno-epilogue}, the compiler tries to emit exit code inline
3036 at every function exit.
3038 @item -mno-flat
3039 @itemx -mflat
3040 With @samp{-mflat}, the compiler does not generate save/restore instructions
3041 and will use a "flat" or single register window calling convention.
3042 This model uses %i7 as the frame pointer and is compatible with the normal
3043 register window model.  Code from either may be intermixed.
3044 The local registers and the input registers (0-5) are still treated as
3045 "call saved" registers and will be saved on the stack as necessary.
3047 With @samp{-mno-flat} (the default), the compiler emits save/restore
3048 instructions (except for leaf functions) and is the normal mode of operation.
3050 @item -mno-unaligned-doubles
3051 @itemx -munaligned-doubles
3052 Assume that doubles have 8 byte alignment.  This is the default.
3054 With @samp{-munaligned-doubles}, GNU CC assumes that doubles have 8 byte
3055 alignment only if they are contained in another type, or if they have an
3056 absolute address.  Otherwise, it assumes they have 4 byte alignment.
3057 Specifying this option avoids some rare compatibility problems with code
3058 generated by other compilers.  It is not the default because it results
3059 in a performance loss, especially for floating point code.
3061 @item -mv8
3062 @itemx -msparclite
3063 These two options select variations on the SPARC architecture.
3065 By default (unless specifically configured for the Fujitsu SPARClite),
3066 GCC generates code for the v7 variant of the SPARC architecture.
3068 @samp{-mv8} will give you SPARC v8 code.  The only difference from v7
3069 code is that the compiler emits the integer multiply and integer
3070 divide instructions which exist in SPARC v8 but not in SPARC v7.
3072 @samp{-msparclite} will give you SPARClite code.  This adds the integer
3073 multiply, integer divide step and scan (@code{ffs}) instructions which
3074 exist in SPARClite but not in SPARC v7.
3076 These options are deprecated and will be deleted in GNU CC 2.9.
3077 They have been replaced with @samp{-mcpu=xxx}.
3079 @item -mcypress
3080 @itemx -msupersparc
3081 These two options select the processor for which the code is optimised.
3083 With @samp{-mcypress} (the default), the compiler optimizes code for the
3084 Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx series.
3085 This is also appropriate for the older SparcStation 1, 2, IPX etc.
3087 With @samp{-msupersparc} the compiler optimizes code for the SuperSparc cpu, as
3088 used in the SparcStation 10, 1000 and 2000 series. This flag also enables use
3089 of the full SPARC v8 instruction set.
3091 These options are deprecated and will be deleted in GNU CC 2.9.
3092 They have been replaced with @samp{-mcpu=xxx}.
3094 @item -mcpu=@var{cpu_type}
3095 Set the instruction set, register set, and instruction scheduling parameters
3096 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
3097 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
3098 @samp{f930}, @samp{f934}, @samp{sparclet}, @samp{tsc701}, @samp{v9}, and
3099 @samp{ultrasparc}.
3101 Default instruction scheduling parameters are used for values that select
3102 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
3103 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
3105 Here is a list of each supported architecture and their supported
3106 implementations.
3108 @smallexample
3109     v7:             cypress
3110     v8:             supersparc
3111     sparclite:      f930, f934
3112     sparclet:       tsc701
3113     v9:             ultrasparc
3114 @end smallexample
3116 @item -mtune=@var{cpu_type}
3117 Set the instruction scheduling parameters for machine type
3118 @var{cpu_type}, but do not set the instruction set or register set that the
3119 option @samp{-mcpu=}@var{cpu_type} would.
3121 The same values for @samp{-mcpu=}@var{cpu_type} are used for
3122 @samp{-mtune=}@var{cpu_type}, though the only useful values are those that
3123 select a particular cpu implementation: @samp{cypress}, @samp{supersparc},
3124 @samp{f930}, @samp{f934}, @samp{tsc701}, @samp{ultrasparc}.
3126 @item -malign-loops=@var{num}
3127 Align loops to a 2 raised to a @var{num} byte boundary.  If
3128 @samp{-malign-loops} is not specified, the default is 2.
3130 @item -malign-jumps=@var{num}
3131 Align instructions that are only jumped to to a 2 raised to a @var{num}
3132 byte boundary.  If @samp{-malign-jumps} is not specified, the default is 2.
3134 @item -malign-functions=@var{num}
3135 Align the start of functions to a 2 raised to @var{num} byte boundary.
3136 If @samp{-malign-functions} is not specified, the default is 2 if compiling
3137 for 32 bit sparc, and 5 if compiling for 64 bit sparc.
3139 @end table
3141 These @samp{-m} switches are supported in addition to the above
3142 on the SPARCLET processor.
3144 @table @code
3145 @item -mlittle-endian
3146 Generate code for a processor running in little-endian mode.
3148 @item -mlive-g0
3149 Treat register @code{%g0} as a normal register.
3150 GCC will continue to clobber it as necessary but will not assume
3151 it always reads as 0.
3153 @item -mbroken-saverestore
3154 Generate code that does not use non-trivial forms of the @code{save} and
3155 @code{restore} instructions.  Early versions of the SPARCLET processor do
3156 not correctly handle @code{save} and @code{restore} instructions used with
3157 arguments.  They correctly handle them used without arguments.  A @code{save}
3158 instruction used without arguments increments the current window pointer
3159 but does not allocate a new stack frame.  It is assumed that the window
3160 overflow trap handler will properly handle this case as will interrupt
3161 handlers.
3162 @end table
3164 These @samp{-m} switches are supported in addition to the above
3165 on SPARC V9 processors in 64 bit environments.
3167 @table @code
3168 @item -mlittle-endian
3169 Generate code for a processor running in little-endian mode.
3171 @item -m32
3172 @itemx -m64
3173 Generate code for a 32 bit or 64 bit environment.
3174 The 32 bit environment sets int, long and pointer to 32 bits.
3175 The 64 bit environment sets int to 32 bits and long and pointer
3176 to 64 bits.
3178 @item -mcmodel=medlow
3179 Generate code for the Medium/Low code model: the program must be linked
3180 in the low 32 bits of the address space.  Pointers are 64 bits.
3181 Programs can be statically or dynamically linked.
3183 @item -mcmodel=medmid
3184 Generate code for the Medium/Middle code model: the program must be linked
3185 in the low 44 bits of the address space, the text segment must be less than
3186 2G bytes, and data segment must be within 2G of the text segment.
3187 Pointers are 64 bits.
3189 @item -mcmodel=medany
3190 Generate code for the Medium/Anywhere code model: the program may be linked
3191 anywhere in the address space, the text segment must be less than
3192 2G bytes, and data segment must be within 2G of the text segment.
3193 Pointers are 64 bits.
3195 @item -mcmodel=embmedany
3196 Generate code for the Medium/Anywhere code model for embedded systems:
3197 assume a 32 bit text and a 32 bit data segment, both starting anywhere
3198 (determined at link time).  Register %g4 points to the base of the
3199 data segment.  Pointers still 64 bits.
3200 Programs are statically linked, PIC is not supported.
3202 @item -mstack-bias
3203 @itemx -mno-stack-bias
3204 With @samp{-mstack-bias}, GNU CC assumes that the stack pointer, and
3205 frame pointer if present, are offset by -2047 which must be added back
3206 when making stack frame references.
3207 Otherwise, assume no such offset is present.
3208 @end table
3210 @node Convex Options
3211 @subsection Convex Options
3212 @cindex Convex options
3214 These @samp{-m} options are defined for Convex:
3216 @table @code
3217 @item -mc1
3218 Generate output for C1.  The code will run on any Convex machine.
3219 The preprocessor symbol @code{__convex__c1__} is defined.
3221 @item -mc2
3222 Generate output for C2.  Uses instructions not available on C1.
3223 Scheduling and other optimizations are chosen for max performance on C2.
3224 The preprocessor symbol @code{__convex_c2__} is defined.
3226 @item -mc32
3227 Generate output for C32xx.  Uses instructions not available on C1.
3228 Scheduling and other optimizations are chosen for max performance on C32.
3229 The preprocessor symbol @code{__convex_c32__} is defined.
3231 @item -mc34
3232 Generate output for C34xx.  Uses instructions not available on C1.
3233 Scheduling and other optimizations are chosen for max performance on C34.
3234 The preprocessor symbol @code{__convex_c34__} is defined.
3236 @item -mc38
3237 Generate output for C38xx.  Uses instructions not available on C1.
3238 Scheduling and other optimizations are chosen for max performance on C38.
3239 The preprocessor symbol @code{__convex_c38__} is defined.
3241 @item -margcount
3242 Generate code which puts an argument count in the word preceding each
3243 argument list.  This is compatible with regular CC, and a few programs
3244 may need the argument count word.  GDB and other source-level debuggers
3245 do not need it; this info is in the symbol table.
3247 @item -mnoargcount
3248 Omit the argument count word.  This is the default.
3250 @item -mvolatile-cache
3251 Allow volatile references to be cached.  This is the default.
3253 @item -mvolatile-nocache
3254 Volatile references bypass the data cache, going all the way to memory.
3255 This is only needed for multi-processor code that does not use standard
3256 synchronization instructions.  Making non-volatile references to volatile
3257 locations will not necessarily work.
3259 @item -mlong32
3260 Type long is 32 bits, the same as type int.  This is the default.
3262 @item -mlong64
3263 Type long is 64 bits, the same as type long long.  This option is useless,
3264 because no library support exists for it.
3265 @end table
3267 @node AMD29K Options
3268 @subsection AMD29K Options
3269 @cindex AMD29K options
3271 These @samp{-m} options are defined for the AMD Am29000:
3273 @table @code
3274 @item -mdw
3275 @kindex -mdw
3276 @cindex DW bit (29k)
3277 Generate code that assumes the @code{DW} bit is set, i.e., that byte and
3278 halfword operations are directly supported by the hardware.  This is the
3279 default.
3281 @item -mndw
3282 @kindex -mndw
3283 Generate code that assumes the @code{DW} bit is not set.
3285 @item -mbw
3286 @kindex -mbw
3287 @cindex byte writes (29k)
3288 Generate code that assumes the system supports byte and halfword write
3289 operations.  This is the default.
3291 @item -mnbw
3292 @kindex -mnbw
3293 Generate code that assumes the systems does not support byte and
3294 halfword write operations.  @samp{-mnbw} implies @samp{-mndw}.
3296 @item -msmall
3297 @kindex -msmall
3298 @cindex memory model (29k)
3299 Use a small memory model that assumes that all function addresses are
3300 either within a single 256 KB segment or at an absolute address of less
3301 than 256k.  This allows the @code{call} instruction to be used instead
3302 of a @code{const}, @code{consth}, @code{calli} sequence.
3304 @item -mnormal
3305 @kindex -mnormal
3306 Use the normal memory model: Generate @code{call} instructions only when
3307 calling functions in the same file and @code{calli} instructions
3308 otherwise.  This works if each file occupies less than 256 KB but allows
3309 the entire executable to be larger than 256 KB.  This is the default.
3311 @item -mlarge
3312 Always use @code{calli} instructions.  Specify this option if you expect
3313 a single file to compile into more than 256 KB of code.
3315 @item -m29050
3316 @kindex -m29050
3317 @cindex processor selection (29k)
3318 Generate code for the Am29050.
3320 @item -m29000
3321 @kindex -m29000
3322 Generate code for the Am29000.  This is the default.
3324 @item -mkernel-registers
3325 @kindex -mkernel-registers
3326 @cindex kernel and user registers (29k)
3327 Generate references to registers @code{gr64-gr95} instead of to
3328 registers @code{gr96-gr127}.  This option can be used when compiling
3329 kernel code that wants a set of global registers disjoint from that used
3330 by user-mode code.
3332 Note that when this option is used, register names in @samp{-f} flags
3333 must use the normal, user-mode, names.
3335 @item -muser-registers
3336 @kindex -muser-registers
3337 Use the normal set of global registers, @code{gr96-gr127}.  This is the
3338 default.
3340 @item -mstack-check
3341 @itemx -mno-stack-check
3342 @kindex -mstack-check
3343 @cindex stack checks (29k)
3344 Insert (or do not insert) a call to @code{__msp_check} after each stack
3345 adjustment.  This is often used for kernel code.
3347 @item -mstorem-bug
3348 @itemx -mno-storem-bug
3349 @kindex -mstorem-bug
3350 @cindex storem bug (29k)
3351 @samp{-mstorem-bug} handles 29k processors which cannot handle the
3352 separation of a mtsrim insn and a storem instruction (most 29000 chips
3353 to date, but not the 29050).
3355 @item -mno-reuse-arg-regs
3356 @itemx -mreuse-arg-regs
3357 @kindex -mreuse-arg-regs
3358 @samp{-mno-reuse-arg-regs} tells the compiler to only use incoming argument
3359 registers for copying out arguments.  This helps detect calling a function
3360 with fewer arguments than it was declared with.
3362 @item -mno-impure-text
3363 @itemx -mimpure-text
3364 @kindex -mimpure-text
3365 @samp{-mimpure-text}, used in addition to @samp{-shared}, tells the compiler to
3366 not pass @samp{-assert pure-text} to the linker when linking a shared object.
3368 @item -msoft-float
3369 @kindex -msoft-float
3370 Generate output containing library calls for floating point.
3371 @strong{Warning:} the requisite libraries are not part of GNU CC.
3372 Normally the facilities of the machine's usual C compiler are used, but
3373 this can't be done directly in cross-compilation.  You must make your
3374 own arrangements to provide suitable library functions for
3375 cross-compilation.
3376 @end table
3378 @node ARM Options
3379 @subsection ARM Options
3380 @cindex ARM options
3382 These @samp{-m} options are defined for Advanced RISC Machines (ARM)
3383 architectures:
3385 @table @code
3386 @item -mapcs-frame
3387 @kindex -mapcs-frame
3388 Generate a stack frame that is compliant with the ARM Procedure Call
3389 Standard for all functions, even if this is not strictly necessary for
3390 correct execution of the code.
3392 @item -mapcs-26
3393 @kindex -mapcs-26
3394 Generate code for a processor running with a 26-bit program counter,
3395 and conforming to the function calling standards for the APCS 26-bit
3396 option.  This option replaces the @samp{-m2} and @samp{-m3} options
3397 of previous releases of the compiler.
3399 @item -mapcs-32
3400 @kindex -mapcs-32
3401 Generate code for a processor running with a 32-bit program counter,
3402 and conforming to the function calling standards for the APCS 32-bit
3403 option.  This option replaces the @samp{-m6} option of previous releases
3404 of the compiler.
3406 @item -mhard-float
3407 Generate output containing floating point instructions.  This is the
3408 default.
3410 @item -msoft-float
3411 Generate output containing library calls for floating point.
3412 @strong{Warning:} the requisite libraries are not available for all ARM
3413 targets.  Normally the facilities of the machine's usual C compiler are
3414 used, but this cannot be done directly in cross-compilation.  You must make
3415 your own arrangements to provide suitable library functions for
3416 cross-compilation.
3418 @samp{-msoft-float} changes the calling convention in the output file;
3419 therefore, it is only useful if you compile @emph{all} of a program with
3420 this option.  In particular, you need to compile @file{libgcc.a}, the
3421 library that comes with GNU CC, with @samp{-msoft-float} in order for
3422 this to work.
3424 @item -mlittle-endian
3425 Generate code for a processor running in little-endian mode.  This is
3426 the default for all standard configurations.
3428 @item -mbig-endian
3429 Generate code for a processor running in big-endian mode; the default is
3430 to compile code for a little-endian processor.
3432 @item -mwords-little-endian
3433 This option only applies when generating code for big-endian processors.
3434 Generate code for a little-endian word order but a big-endian byte
3435 order.  That is, a byte order of the form @samp{32107654}.  Note: this
3436 option should only be used if you require compatibility with code for
3437 big-endian ARM processors generated by versions of the compiler prior to
3438 2.8.
3440 @item -mshort-load-bytes
3441 @kindex -mshort-load-bytes
3442 Do not try to load half-words (eg @samp{short}s) by loading a word from
3443 an unaligned address.  For some targets the MMU is configured to trap
3444 unaligned loads; use this option to generate code that is safe in these
3445 environments.
3447 @item -mno-short-load-bytes
3448 @kindex -mno-short-load-bytes
3449 Use unaligned word loads to load half-words (eg @samp{short}s).  This
3450 option produces more efficient code, but the MMU is sometimes configured
3451 to trap these instructions.
3453 @item -mbsd
3454 @kindex -mbsd
3455 This option only applies to RISC iX.  Emulate the native BSD-mode
3456 compiler.  This is the default if @samp{-ansi} is not specified.
3458 @item -mxopen
3459 @kindex -mxopen
3460 This option only applies to RISC iX.  Emulate the native X/Open-mode
3461 compiler.
3463 @item -mno-symrename
3464 @kindex -mno-symrename
3465 This option only applies to RISC iX.  Do not run the assembler
3466 post-processor, @samp{symrename}, after code has been assembled.
3467 Normally it is necessary to modify some of the standard symbols in
3468 preparation for linking with the RISC iX C library; this option
3469 suppresses this pass.  The post-processor is never run when the
3470 compiler is built for cross-compilation.
3471 @end table
3473 @node MN10300 Options
3474 @subsection MN10300 Options
3475 @cindex MN10300 options
3476 These @samp{-m} options are defined for Matsushita MN10300 architectures:
3478 @table @code
3479 @item -mmult-bug
3480 Generate code to avoid bugs in the multiply instructions for the MN10300
3481 processors.  This is the default.
3483 @item -mno-mult-bug
3484 Do not generate code to avoid bugs in the multiply instructions for the
3485 MN10300 processors.
3486 @end table
3488 @node M32R/D Options
3489 @subsection M32R/D Options
3490 @cindex M32R/D options
3492 These @samp{-m} options are defined for Mitsubishi M32R/D architectures:
3494 @table @code
3495 @item -mcode-model=small
3496 Assume all objects live in the lower 16MB of memory (so that their addresses
3497 can be loaded with the @code{ld24} instruction), and assume all subroutines
3498 are reachable with the @code{bl} instruction.
3499 This is the default.
3501 The addressability of a particular object can be set with the
3502 @code{model} attribute.
3504 @item -mcode-model=medium
3505 Assume objects may be anywhere in the 32 bit address space (the compiler
3506 will generate @code{seth/add3} instructions to load their addresses), and
3507 assume all subroutines are reachable with the @code{bl} instruction.
3509 @item -mcode-model=large
3510 Assume objects may be anywhere in the 32 bit address space (the compiler
3511 will generate @code{seth/add3} instructions to load their addresses), and
3512 assume subroutines may not be reachable with the @code{bl} instruction
3513 (the compiler will generate the much slower @code{seth/add3/jl}
3514 instruction sequence).
3516 @item -msdata=none
3517 Disable use of the small data area.  Variables will be put into
3518 one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
3519 @code{section} attribute has been specified).
3520 This is the default.
3522 The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
3523 Objects may be explicitly put in the small data area with the
3524 @code{section} attribute using one of these sections.
3526 @item -msdata=sdata
3527 Put small global and static data in the small data area, but do not
3528 generate special code to reference them.
3530 @item -msdata=use
3531 Put small global and static data in the small data area, and generate
3532 special instructions to reference them.
3534 @item -G @var{num}
3535 @cindex smaller data references
3536 Put global and static objects less than or equal to @var{num} bytes
3537 into the small data or bss sections instead of the normal data or bss
3538 sections.  The default value of @var{num} is 8.
3539 The @samp{-msdata} option must be set to one of @samp{sdata} or @samp{use}
3540 for this option to have any effect.
3542 All modules should be compiled with the same @samp{-G @var{num}} value.
3543 Compiling with different values of @var{num} may or may not work; if it
3544 doesn't the linker will give an error message - incorrect code will not be
3545 generated.
3547 @end table
3549 @node M88K Options
3550 @subsection M88K Options
3551 @cindex M88k options
3553 These @samp{-m} options are defined for Motorola 88k architectures:
3555 @table @code
3556 @item -m88000
3557 @kindex -m88000
3558 Generate code that works well on both the m88100 and the
3559 m88110.
3561 @item -m88100
3562 @kindex -m88100
3563 Generate code that works best for the m88100, but that also
3564 runs on the m88110.
3566 @item -m88110
3567 @kindex -m88110
3568 Generate code that works best for the m88110, and may not run
3569 on the m88100.
3571 @item -mbig-pic
3572 @kindex -mbig-pic
3573 Obsolete option to be removed from the next revision.
3574 Use @samp{-fPIC}.
3576 @item -midentify-revision
3577 @kindex -midentify-revision
3578 @kindex ident
3579 @cindex identifying source, compiler (88k)
3580 Include an @code{ident} directive in the assembler output recording the
3581 source file name, compiler name and version, timestamp, and compilation
3582 flags used.
3584 @item -mno-underscores
3585 @kindex -mno-underscores
3586 @cindex underscores, avoiding (88k)
3587 In assembler output, emit symbol names without adding an underscore
3588 character at the beginning of each name.  The default is to use an
3589 underscore as prefix on each name.
3591 @item -mocs-debug-info
3592 @itemx -mno-ocs-debug-info
3593 @kindex -mocs-debug-info
3594 @kindex -mno-ocs-debug-info
3595 @cindex OCS (88k)
3596 @cindex debugging, 88k OCS
3597 Include (or omit) additional debugging information (about registers used
3598 in each stack frame) as specified in the 88open Object Compatibility
3599 Standard, ``OCS''.  This extra information allows debugging of code that
3600 has had the frame pointer eliminated.  The default for DG/UX, SVr4, and
3601 Delta 88 SVr3.2 is to include this information; other 88k configurations
3602 omit this information by default.
3604 @item -mocs-frame-position
3605 @kindex -mocs-frame-position
3606 @cindex register positions in frame (88k)
3607 When emitting COFF debugging information for automatic variables and
3608 parameters stored on the stack, use the offset from the canonical frame
3609 address, which is the stack pointer (register 31) on entry to the
3610 function.  The DG/UX, SVr4, Delta88 SVr3.2, and BCS configurations use
3611 @samp{-mocs-frame-position}; other 88k configurations have the default
3612 @samp{-mno-ocs-frame-position}.
3614 @item -mno-ocs-frame-position
3615 @kindex -mno-ocs-frame-position
3616 @cindex register positions in frame (88k)
3617 When emitting COFF debugging information for automatic variables and
3618 parameters stored on the stack, use the offset from the frame pointer
3619 register (register 30).  When this option is in effect, the frame
3620 pointer is not eliminated when debugging information is selected by the
3621 -g switch.
3623 @item -moptimize-arg-area
3624 @itemx -mno-optimize-arg-area
3625 @kindex -moptimize-arg-area
3626 @kindex -mno-optimize-arg-area
3627 @cindex arguments in frame (88k)
3628 Control how function arguments are stored in stack frames.
3629 @samp{-moptimize-arg-area} saves space by optimizing them, but this
3630 conflicts with the 88open specifications.  The opposite alternative,
3631 @samp{-mno-optimize-arg-area}, agrees with 88open standards.  By default
3632 GNU CC does not optimize the argument area.
3634 @item -mshort-data-@var{num}
3635 @kindex -mshort-data-@var{num}
3636 @cindex smaller data references (88k)
3637 @cindex r0-relative references (88k)
3638 Generate smaller data references by making them relative to @code{r0},
3639 which allows loading a value using a single instruction (rather than the
3640 usual two).  You control which data references are affected by
3641 specifying @var{num} with this option.  For example, if you specify
3642 @samp{-mshort-data-512}, then the data references affected are those
3643 involving displacements of less than 512 bytes.
3644 @samp{-mshort-data-@var{num}} is not effective for @var{num} greater
3645 than 64k.
3647 @item -mserialize-volatile
3648 @kindex -mserialize-volatile
3649 @itemx -mno-serialize-volatile
3650 @kindex -mno-serialize-volatile
3651 @cindex sequential consistency on 88k
3652 Do, or don't, generate code to guarantee sequential consistency
3653 of volatile memory references.  By default, consistency is
3654 guaranteed.
3656 The order of memory references made by the MC88110 processor does
3657 not always match the order of the instructions requesting those
3658 references.  In particular, a load instruction may execute before
3659 a preceding store instruction.  Such reordering violates
3660 sequential consistency of volatile memory references, when there
3661 are multiple processors.   When consistency must be guaranteed,
3662 GNU C generates special instructions, as needed, to force
3663 execution in the proper order.
3665 The MC88100 processor does not reorder memory references and so
3666 always provides sequential consistency.  However, by default, GNU
3667 C generates the special instructions to guarantee consistency
3668 even when you use @samp{-m88100}, so that the code may be run on an
3669 MC88110 processor.  If you intend to run your code only on the
3670 MC88100 processor, you may use @samp{-mno-serialize-volatile}.
3672 The extra code generated to guarantee consistency may affect the
3673 performance of your application.  If you know that you can safely
3674 forgo this guarantee, you may use @samp{-mno-serialize-volatile}.
3676 @item -msvr4
3677 @itemx -msvr3
3678 @kindex -msvr4
3679 @kindex -msvr3
3680 @cindex assembler syntax, 88k
3681 @cindex SVr4
3682 Turn on (@samp{-msvr4}) or off (@samp{-msvr3}) compiler extensions
3683 related to System V release 4 (SVr4).  This controls the following:
3685 @enumerate
3686 @item
3687 Which variant of the assembler syntax to emit.
3688 @item
3689 @samp{-msvr4} makes the C preprocessor recognize @samp{#pragma weak}
3690 that is used on System V release 4.
3691 @item
3692 @samp{-msvr4} makes GNU CC issue additional declaration directives used in
3693 SVr4.
3694 @end enumerate
3696 @samp{-msvr4} is the default for the m88k-motorola-sysv4 and
3697 m88k-dg-dgux m88k configurations. @samp{-msvr3} is the default for all
3698 other m88k configurations.
3700 @item -mversion-03.00
3701 @kindex -mversion-03.00
3702 This option is obsolete, and is ignored.
3703 @c ??? which asm syntax better for GAS?  option there too?
3705 @item -mno-check-zero-division
3706 @itemx -mcheck-zero-division
3707 @kindex -mno-check-zero-division
3708 @kindex -mcheck-zero-division
3709 @cindex zero division on 88k
3710 Do, or don't, generate code to guarantee that integer division by
3711 zero will be detected.  By default, detection is guaranteed.
3713 Some models of the MC88100 processor fail to trap upon integer
3714 division by zero under certain conditions.  By default, when
3715 compiling code that might be run on such a processor, GNU C
3716 generates code that explicitly checks for zero-valued divisors
3717 and traps with exception number 503 when one is detected.  Use of
3718 mno-check-zero-division suppresses such checking for code
3719 generated to run on an MC88100 processor.
3721 GNU C assumes that the MC88110 processor correctly detects all
3722 instances of integer division by zero.  When @samp{-m88110} is
3723 specified, both @samp{-mcheck-zero-division} and
3724 @samp{-mno-check-zero-division} are ignored, and no explicit checks for
3725 zero-valued divisors are generated.
3727 @item -muse-div-instruction
3728 @kindex -muse-div-instruction
3729 @cindex divide instruction, 88k
3730 Use the div instruction for signed integer division on the
3731 MC88100 processor.  By default, the div instruction is not used.
3733 On the MC88100 processor the signed integer division instruction
3734 div) traps to the operating system on a negative operand.  The
3735 operating system transparently completes the operation, but at a
3736 large cost in execution time.  By default, when compiling code
3737 that might be run on an MC88100 processor, GNU C emulates signed
3738 integer division using the unsigned integer division instruction
3739 divu), thereby avoiding the large penalty of a trap to the
3740 operating system.  Such emulation has its own, smaller, execution
3741 cost in both time and space.  To the extent that your code's
3742 important signed integer division operations are performed on two
3743 nonnegative operands, it may be desirable to use the div
3744 instruction directly.
3746 On the MC88110 processor the div instruction (also known as the
3747 divs instruction) processes negative operands without trapping to
3748 the operating system.  When @samp{-m88110} is specified,
3749 @samp{-muse-div-instruction} is ignored, and the div instruction is used
3750 for signed integer division.
3752 Note that the result of dividing INT_MIN by -1 is undefined.  In
3753 particular, the behavior of such a division with and without
3754 @samp{-muse-div-instruction}  may differ.
3756 @item -mtrap-large-shift
3757 @itemx -mhandle-large-shift
3758 @kindex -mtrap-large-shift
3759 @kindex -mhandle-large-shift
3760 @cindex bit shift overflow (88k)
3761 @cindex large bit shifts (88k)
3762 Include code to detect bit-shifts of more than 31 bits; respectively,
3763 trap such shifts or emit code to handle them properly.  By default GNU CC
3764 makes no special provision for large bit shifts.
3766 @item -mwarn-passed-structs
3767 @kindex -mwarn-passed-structs
3768 @cindex structure passing (88k)
3769 Warn when a function passes a struct as an argument or result.
3770 Structure-passing conventions have changed during the evolution of the C
3771 language, and are often the source of portability problems.  By default,
3772 GNU CC issues no such warning.
3773 @end table
3775 @node RS/6000 and PowerPC Options
3776 @subsection IBM RS/6000 and PowerPC Options
3777 @cindex RS/6000 and PowerPC Options
3778 @cindex IBM RS/6000 and PowerPC Options
3780 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
3781 @table @code
3782 @item -mpower
3783 @itemx -mno-power
3784 @itemx -mpower2
3785 @itemx -mno-power2
3786 @itemx -mpowerpc
3787 @itemx -mno-powerpc
3788 @itemx -mpowerpc-gpopt
3789 @itemx -mno-powerpc-gpopt
3790 @itemx -mpowerpc-gfxopt
3791 @itemx -mno-powerpc-gfxopt
3792 @kindex -mpower
3793 @kindex -mpower2
3794 @kindex -mpowerpc
3795 @kindex -mpowerpc-gpopt
3796 @kindex -mpowerpc-gfxopt
3797 GNU CC supports two related instruction set architectures for the
3798 RS/6000 and PowerPC.  The @dfn{POWER} instruction set are those
3799 instructions supported by the @samp{rios} chip set used in the original
3800 RS/6000 systems and the @dfn{PowerPC} instruction set is the
3801 architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
3802 the IBM 4xx microprocessors.
3804 Neither architecture is a subset of the other.  However there is a
3805 large common subset of instructions supported by both.  An MQ
3806 register is included in processors supporting the POWER architecture.
3808 You use these options to specify which instructions are available on the
3809 processor you are using.  The default value of these options is
3810 determined when configuring GNU CC.  Specifying the
3811 @samp{-mcpu=@var{cpu_type}} overrides the specification of these
3812 options.  We recommend you use the @samp{-mcpu=@var{cpu_type}} option
3813 rather than the options listed above.
3815 The @samp{-mpower} option allows GNU CC to generate instructions that
3816 are found only in the POWER architecture and to use the MQ register.
3817 Specifying @samp{-mpower2} implies @samp{-power} and also allows GNU CC
3818 to generate instructions that are present in the POWER2 architecture but
3819 not the original POWER architecture.
3821 The @samp{-mpowerpc} option allows GNU CC to generate instructions that
3822 are found only in the 32-bit subset of the PowerPC architecture.
3823 Specifying @samp{-mpowerpc-gpopt} implies @samp{-mpowerpc} and also allows
3824 GNU CC to use the optional PowerPC architecture instructions in the
3825 General Purpose group, including floating-point square root.  Specifying
3826 @samp{-mpowerpc-gfxopt} implies @samp{-mpowerpc} and also allows GNU CC to
3827 use the optional PowerPC architecture instructions in the Graphics
3828 group, including floating-point select.
3830 If you specify both @samp{-mno-power} and @samp{-mno-powerpc}, GNU CC
3831 will use only the instructions in the common subset of both
3832 architectures plus some special AIX common-mode calls, and will not use
3833 the MQ register.  Specifying both @samp{-mpower} and @samp{-mpowerpc}
3834 permits GNU CC to use any instruction from either architecture and to
3835 allow use of the MQ register; specify this for the Motorola MPC601.
3837 @item -mnew-mnemonics
3838 @itemx -mold-mnemonics
3839 @kindex -mnew-mnemonics
3840 @kindex -mold-mnemonics
3841 Select which mnemonics to use in the generated assembler code.
3842 @samp{-mnew-mnemonics} requests output that uses the assembler mnemonics
3843 defined for the PowerPC architecture, while @samp{-mold-mnemonics}
3844 requests the assembler mnemonics defined for the POWER architecture.
3845 Instructions defined in only one architecture have only one mnemonic;
3846 GNU CC uses that mnemonic irrespective of which of these options is
3847 specified.
3849 PowerPC assemblers support both the old and new mnemonics, as will later
3850 POWER assemblers.  Current POWER assemblers only support the old
3851 mnemonics.  Specify @samp{-mnew-mnemonics} if you have an assembler that
3852 supports them, otherwise specify @samp{-mold-mnemonics}.
3854 The default value of these options depends on how GNU CC was configured.
3855 Specifying @samp{-mcpu=@var{cpu_type}} sometimes overrides the value of
3856 these option.  Unless you are building a cross-compiler, you should
3857 normally not specify either @samp{-mnew-mnemonics} or
3858 @samp{-mold-mnemonics}, but should instead accept the default.
3860 @item -mcpu=@var{cpu_type}
3861 Set architecture type, register usage, choice of mnemonics, and
3862 instruction scheduling parameters for machine type @var{cpu_type}.
3863 Supported values for @var{cpu_type} are @samp{rs6000}, @samp{rios1},
3864 @samp{rios2}, @samp{rsc}, @samp{601}, @samp{602}, @samp{603},
3865 @samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{power},
3866 @samp{power2}, @samp{powerpc}, @samp{403}, @samp{505}, @samp{801},
3867 @samp{821}, @samp{823}, and @samp{860} and @samp{common}.
3868 @samp{-mcpu=power}, @samp{-mcpu=power2}, and @samp{-mcpu=powerpc}
3869 specify generic POWER, POWER2 and pure PowerPC (i.e., not MPC601)
3870 architecture machine types, with an appropriate, generic processor model
3871 assumed for scheduling purposes.@refill
3873 @c overfull hbox here --bob 22 jul96
3874 @c original text between ignore ... end ignore
3875 @ignore
3876 Specifying any of the @samp{-mcpu=rios1}, @samp{-mcpu=rios2},
3877 @samp{-mcpu=rsc}, @samp{-mcpu=power}, or @samp{-mcpu=power2} options
3878 enables the @samp{-mpower} option and disables the @samp{-mpowerpc}
3879 option; @samp{-mcpu=601} enables both the @samp{-mpower} and
3880 @samp{-mpowerpc} options; all of @samp{-mcpu=602}, @samp{-mcpu=603},
3881 @samp{-mcpu=603e}, @samp{-mcpu=604}, @samp{-mcpu=604e},
3882 @samp{-mcpu=620}, @samp{-mcpu=403}, @samp{-mcpu=505}, @samp{-mcpu=801},
3883 @samp{-mcpu=821}, @samp{-mcpu=823}, @samp{-mcpu=860} and
3884 @samp{-mcpu=powerpc} enable the @samp{-mpowerpc} option and disable the
3885 @samp{-mpower} option; @samp{-mcpu=common} disables both the
3886 @samp{-mpower} and @samp{-mpowerpc} options.@refill
3887 @end ignore
3888 @c            changed paragraph
3889 Specifying any of the following options: 
3890 @samp{-mcpu=rios1}, @samp{-mcpu=rios2}, @samp{-mcpu=rsc},
3891 @samp{-mcpu=power}, or @samp{-mcpu=power2}  
3892 enables the @samp{-mpower} option and disables the @samp{-mpowerpc} option; 
3893 @samp{-mcpu=601} enables both the @samp{-mpower} and @samp{-mpowerpc} options.
3894 All of @samp{-mcpu=602}, @samp{-mcpu=603}, @samp{-mcpu=603e},
3895 @samp{-mcpu=604}, @samp{-mcpu=620}, 
3896 enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.  
3897 Exactly similarly, all of @samp{-mcpu=403},
3898 @samp{-mcpu=505}, @samp{-mcpu=821}, @samp{-mcpu=860} and @samp{-mcpu=powerpc} 
3899 enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.
3900 @samp{-mcpu=common} disables both the 
3901 @samp{-mpower} and @samp{-mpowerpc} options.@refill
3902 @c             end changes to prevent overfull hboxes
3904 AIX versions 4 or greater selects @samp{-mcpu=common} by default, so
3905 that code will operate on all members of the RS/6000 and PowerPC
3906 families.  In that case, GNU CC will use only the instructions in the
3907 common subset of both architectures plus some special AIX common-mode
3908 calls, and will not use the MQ register.  GNU CC assumes a generic
3909 processor model for scheduling purposes.
3911 Specifying any of the options @samp{-mcpu=rios1}, @samp{-mcpu=rios2},
3912 @samp{-mcpu=rsc}, @samp{-mcpu=power}, or @samp{-mcpu=power2} also
3913 disables the @samp{new-mnemonics} option.  Specifying @samp{-mcpu=601},
3914 @samp{-mcpu=602}, @samp{-mcpu=603}, @samp{-mcpu=603e}, @samp{-mcpu=604},
3915 @samp{620}, @samp{403}, or @samp{-mcpu=powerpc} also enables the
3916 @samp{new-mnemonics} option.@refill
3918 Specifying @samp{-mcpu=403}, @samp{-mcpu=821}, or @samp{-mcpu=860} also
3919 enables the @samp{-msoft-float} option.
3921 @item -mtune=@var{cpu_type}
3922 Set the instruction scheduling parameters for machine type
3923 @var{cpu_type}, but do not set the architecture type, register usage,
3924 choice of mnemonics like @samp{-mcpu=}@var{cpu_type} would.  The same
3925 values for @var{cpu_type} are used for @samp{-mtune=}@var{cpu_type} as
3926 for @samp{-mcpu=}@var{cpu_type}.  The @samp{-mtune=}@var{cpu_type}
3927 option overrides the @samp{-mcpu=}@var{cpu_type} option in terms of
3928 instruction scheduling parameters.
3930 @item -mfull-toc
3931 @itemx -mno-fp-in-toc
3932 @itemx -mno-sum-in-toc
3933 @itemx -mminimal-toc
3934 Modify generation of the TOC (Table Of Contents), which is created for
3935 every executable file.  The @samp{-mfull-toc} option is selected by
3936 default.  In that case, GNU CC will allocate at least one TOC entry for
3937 each unique non-automatic variable reference in your program.  GNU CC
3938 will also place floating-point constants in the TOC.  However, only
3939 16,384 entries are available in the TOC.
3941 If you receive a linker error message that saying you have overflowed
3942 the available TOC space, you can reduce the amount of TOC space used
3943 with the @samp{-mno-fp-in-toc} and @samp{-mno-sum-in-toc} options.
3944 @samp{-mno-fp-in-toc} prevents GNU CC from putting floating-point
3945 constants in the TOC and @samp{-mno-sum-in-toc} forces GNU CC to
3946 generate code to calculate the sum of an address and a constant at
3947 run-time instead of putting that sum into the TOC.  You may specify one
3948 or both of these options.  Each causes GNU CC to produce very slightly
3949 slower and larger code at the expense of conserving TOC space.
3951 If you still run out of space in the TOC even when you specify both of
3952 these options, specify @samp{-mminimal-toc} instead.  This option causes
3953 GNU CC to make only one TOC entry for every file.  When you specify this
3954 option, GNU CC will produce code that is slower and larger but which
3955 uses extremely little TOC space.  You may wish to use this option
3956 only on files that contain less frequently executed code. @refill
3958 @item -mxl-call
3959 @itemx -mno-xl-call
3960 On AIX, pass floating-point arguments to prototyped functions beyond the
3961 register save area (RSA) on the stack in addition to argument FPRs.  The
3962 AIX calling convention was extended but not initially documented to
3963 handle an obscure K&R C case of calling a function that takes the
3964 address of its arguments with fewer arguments than declared.  AIX XL
3965 compilers assume that floating point arguments which do not fit in the
3966 RSA are on the stack when they compile a subroutine without
3967 optimization.  Because always storing floating-point arguments on the
3968 stack is inefficient and rarely needed, this option is not enabled by
3969 default and only is necessary when calling subroutines compiled by AIX
3970 XL compilers without optimization.
3972 @item -mthreads
3973 Support @dfn{AIX Threads}.  Link an application written to use
3974 @dfn{pthreads} with special libraries and startup code to enable the
3975 application to run.
3977 @item -mpe
3978 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE).  Link an
3979 application written to use message passing with special startup code to
3980 enable the application to run.  The system must have PE installed in the
3981 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
3982 must be overridden with the @samp{-specs=} option to specify the
3983 appropriate directory location.  The Parallel Environment does not
3984 support threads, so the @samp{-mpe} option and the @samp{-mthreads}
3985 option are incompatible.
3987 @item -msoft-float
3988 @itemx -mhard-float
3989 Generate code that does not use (uses) the floating-point register set.
3990 Software floating point emulation is provided if you use the
3991 @samp{-msoft-float} option, and pass the option to GNU CC when linking.
3993 @item -mmultiple
3994 @itemx -mno-multiple
3995 Generate code that uses (does not use) the load multiple word
3996 instructions and the store multiple word instructions.  These
3997 instructions are generated by default on POWER systems, and not
3998 generated on PowerPC systems.  Do not use @samp{-mmultiple} on little
3999 endian PowerPC systems, since those instructions do not work when the
4000 processor is in little endian mode.
4002 @item -mstring
4003 @itemx -mno-string
4004 Generate code that uses (does not use) the load string instructions and the
4005 store string word instructions to save multiple registers and do small block
4006 moves.  These instructions are generated by default on POWER systems, and not
4007 generated on PowerPC systems.  Do not use @samp{-mstring} on little endian
4008 PowerPC systems, since those instructions do not work when the processor is in
4009 little endian mode.
4011 @item -mupdate
4012 @itemx -mno-update
4013 Generate code that uses (does not use) the load or store instructions
4014 that update the base register to the address of the calculated memory
4015 location.  These instructions are generated by default.  If you use
4016 @samp{-mno-update}, there is a small window between the time that the
4017 stack pointer is updated and the address of the previous frame is
4018 stored, which means code that walks the stack frame across interrupts or
4019 signals may get corrupted data.
4021 @item -mfused-madd
4022 @itemx -mno-fused-madd
4023 Generate code that uses (does not use) the floating point multiply and
4024 accumulate instructions.  These instructions are generated by default if
4025 hardware floating is used.
4027 @item -mno-bit-align
4028 @itemx -mbit-align
4029 On System V.4 and embedded PowerPC systems do not (do) force structures
4030 and unions that contain bit fields to be aligned to the base type of the
4031 bit field.
4033 For example, by default a structure containing nothing but 8
4034 @code{unsigned} bitfields of length 1 would be aligned to a 4 byte
4035 boundary and have a size of 4 bytes.  By using @samp{-mno-bit-align},
4036 the structure would be aligned to a 1 byte boundary and be one byte in
4037 size.
4039 @item -mno-strict-align
4040 @itemx -mstrict-align
4041 On System V.4 and embedded PowerPC systems do not (do) assume that
4042 unaligned memory references will be handled by the system.
4044 @item -mrelocatable
4045 @itemx -mno-relocatable
4046 On embedded PowerPC systems generate code that allows (does not allow)
4047 the program to be relocated to a different address at runtime.  If you
4048 use @samp{-mrelocatable} on any module, all objects linked together must
4049 be compiled with @samp{-mrelocatable} or @samp{-mrelocatable-lib}.
4051 @item -mrelocatable-lib
4052 @itemx -mno-relocatable-lib
4053 On embedded PowerPC systems generate code that allows (does not allow)
4054 the program to be relocated to a different address at runtime.  Modules
4055 compiled with @samp{-mreloctable-lib} can be linked with either modules
4056 compiled without @samp{-mrelocatable} and @samp{-mrelocatable-lib} or
4057 with modules compiled with the @samp{-mrelocatable} options.
4059 @item -mno-toc
4060 @itemx -mtoc
4061 On System V.4 and embedded PowerPC systems do not (do) assume that
4062 register 2 contains a pointer to a global area pointing to the addresses
4063 used in the program.
4065 @item -mno-traceback
4066 @itemx -mtraceback
4067 On embedded PowerPC systems do not (do) generate a traceback tag before
4068 the start of the function.  This tag can be used by the debugger to
4069 identify where the start of a function is.
4071 @item -mlittle
4072 @itemx -mlittle-endian
4073 On System V.4 and embedded PowerPC systems compile code for the
4074 processor in little endian mode.  The @samp{-mlittle-endian} option is
4075 the same as @samp{-mlittle}.
4077 @item -mbig
4078 @itemx -mbig-endian
4079 On System V.4 and embedded PowerPC systems compile code for the
4080 processor in big endian mode.  The @samp{-mbig-endian} option is
4081 the same as @samp{-mbig}.
4083 @item -mcall-sysv
4084 On System V.4 and embedded PowerPC systems compile code using calling
4085 conventions that adheres to the March 1995 draft of the System V
4086 Application Binary Interface, PowerPC processor supplement.  This is the
4087 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
4089 @item -mcall-sysv-eabi
4090 Specify both @samp{-mcall-sysv} and @samp{-meabi} options.
4092 @item -mcall-sysv-noeabi
4093 Specify both @samp{-mcall-sysv} and @samp{-mno-eabi} options.
4095 @item -mcall-aix
4096 On System V.4 and embedded PowerPC systems compile code using calling
4097 conventions that are similar to those used on AIX.  This is the
4098 default if you configured GCC using @samp{powerpc-*-eabiaix}.
4100 @item -mcall-solaris
4101 On System V.4 and embedded PowerPC systems compile code for the Solaris
4102 operating system.
4104 @item -mcall-linux
4105 On System V.4 and embedded PowerPC systems compile code for the
4106 Linux-based GNU system.
4108 @item -mprototype
4109 @item -mno-prototype
4110 On System V.4 and embedded PowerPC systems assume that all calls to
4111 variable argument functions are properly prototyped.  Otherwise, the
4112 compiler must insert an instruction before every non prototyped call to
4113 set or clear bit 6 of the condition code register (@var{CR}) to
4114 indicate whether floating point values were passed in the floating point
4115 registers in case the function takes a variable arguments.  With
4116 @samp{-mprototype}, only calls to prototyped variable argument functions
4117 will set or clear the bit.
4119 @item -msim
4120 On embedded PowerPC systems, assume that the startup module is called
4121 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
4122 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}.
4123 configurations.
4125 @item -mmvme
4126 On embedded PowerPC systems, assume that the startup module is called
4127 @file{mvme-crt0.o} and the standard C libraries are @file{libmvme.a} and
4128 @file{libc.a}.
4130 @item -memb
4131 On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
4132 header to indicate that @samp{eabi} extended relocations are used.
4134 @item -meabi
4135 @itemx -mno-eabi
4136 On System V.4 and embedded PowerPC systems do (do not) adhere to the
4137 Embedded Applications Binary Interface (eabi) which is a set of
4138 modifications to the System V.4 specifications.  Selecting @code{-meabi}
4139 means that the stack is aligned to an 8 byte boundary, a function
4140 @code{__eabi} is called to from @code{main} to set up the eabi
4141 environment, and the @samp{-msdata} option can use both @code{r2} and
4142 @code{r13} to point to two separate small data areas.  Selecting
4143 @code{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
4144 do not call an initialization function from @code{main}, and the
4145 @samp{-msdata} option will only use @code{r13} to point to a single
4146 small data area.  The @samp{-meabi} option is on by default if you
4147 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
4149 @item -msdata=eabi
4150 On System V.4 and embedded PowerPC systems, put small initialized
4151 @code{const} global and static data in the @samp{.sdata2} section, which
4152 is pointed to by register @code{r2}.  Put small initialized
4153 non-@code{const} global and static data in the @samp{.sdata} section,
4154 which is pointed to by register @code{r13}.  Put small uninitialized
4155 global and static data in the @samp{.sbss} section, which is adjacent to
4156 the @samp{.sdata} section.  The @samp{-msdata=eabi} option is
4157 incompatible with the @samp{-mrelocatable} option.  The
4158 @samp{-msdata=eabi} option also sets the @samp{-memb} option.
4160 @item -msdata=sysv
4161 On System V.4 and embedded PowerPC systems, put small global and static
4162 data in the @samp{.sdata} section, which is pointed to by register
4163 @code{r13}.  Put small uninitialized global and static data in the
4164 @samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
4165 The @samp{-msdata=sysv} option is incompatible with the
4166 @samp{-mrelocatable} option.
4168 @item -msdata=default
4169 @itemx -msdata
4170 On System V.4 and embedded PowerPC systems, if @samp{-meabi} is used,
4171 compile code the same as @samp{-msdata=eabi}, otherwise compile code the
4172 same as @samp{-msdata=sysv}.
4174 @item -msdata-data
4175 On System V.4 and embedded PowerPC systems, put small global and static
4176 data in the @samp{.sdata} section.  Put small uninitialized global and
4177 static data in the @samp{.sbss} section.  Do not use register @code{r13}
4178 to address small data however.  This is the default behavior unless
4179 other @samp{-msdata} options are used.
4181 @item -msdata=none
4182 @itemx -mno-sdata
4183 On embedded PowerPC systems, put all initialized global and static data
4184 in the @samp{.data} section, and all uninitialized data in the
4185 @samp{.bss} section.
4187 @item -G @var{num}
4188 @cindex smaller data references (PowerPC)
4189 @cindex .sdata/.sdata2 references (PowerPC)
4190 On embbeded PowerPC systems, put global and static items less than or
4191 equal to @var{num} bytes into the small data or bss sections instead of
4192 the normal data or bss section.  By default, @var{num} is 8.  The
4193 @samp{-G @var{num}} switch is also passed to the linker.
4194 All modules should be compiled with the same @samp{-G @var{num}} value.
4196 @item -mregnames
4197 @itemx -mno-regnames
4198 On System V.4 and embedded PowerPC systems do (do not) emit register
4199 names in the assembly language output using symbolic forms.
4200 @end table
4201 @node RT Options
4202 @subsection IBM RT Options
4203 @cindex RT options
4204 @cindex IBM RT options
4206 These @samp{-m} options are defined for the IBM RT PC:
4208 @table @code
4209 @item -min-line-mul
4210 Use an in-line code sequence for integer multiplies.  This is the
4211 default.
4213 @item -mcall-lib-mul
4214 Call @code{lmul$$} for integer multiples.
4216 @item -mfull-fp-blocks
4217 Generate full-size floating point data blocks, including the minimum
4218 amount of scratch space recommended by IBM.  This is the default.
4220 @item -mminimum-fp-blocks
4221 Do not include extra scratch space in floating point data blocks.  This
4222 results in smaller code, but slower execution, since scratch space must
4223 be allocated dynamically.
4225 @cindex @file{varargs.h} and RT PC
4226 @cindex @file{stdarg.h} and RT PC
4227 @item -mfp-arg-in-fpregs
4228 Use a calling sequence incompatible with the IBM calling convention in
4229 which floating point arguments are passed in floating point registers.
4230 Note that @code{varargs.h} and @code{stdargs.h} will not work with
4231 floating point operands if this option is specified.
4233 @item -mfp-arg-in-gregs
4234 Use the normal calling convention for floating point arguments.  This is
4235 the default.
4237 @item -mhc-struct-return
4238 Return structures of more than one word in memory, rather than in a
4239 register.  This provides compatibility with the MetaWare HighC (hc)
4240 compiler.  Use the option @samp{-fpcc-struct-return} for compatibility
4241 with the Portable C Compiler (pcc).
4243 @item -mnohc-struct-return
4244 Return some structures of more than one word in registers, when
4245 convenient.  This is the default.  For compatibility with the
4246 IBM-supplied compilers, use the option @samp{-fpcc-struct-return} or the
4247 option @samp{-mhc-struct-return}.
4248 @end table
4250 @node MIPS Options
4251 @subsection MIPS Options
4252 @cindex MIPS options
4254 These @samp{-m} options are defined for the MIPS family of computers:
4256 @table @code
4257 @item -mcpu=@var{cpu type}
4258 Assume the defaults for the machine type @var{cpu type} when scheduling
4259 instructions.  The choices for @var{cpu type} are @samp{r2000}, @samp{r3000},
4260 @samp{r4000}, @samp{r4400}, @samp{r4600}, and @samp{r6000}.  While picking a
4261 specific @var{cpu type} will schedule things appropriately for that
4262 particular chip, the compiler will not generate any code that does not
4263 meet level 1 of the MIPS ISA (instruction set architecture) without
4264 the @samp{-mips2} or @samp{-mips3} switches being used.
4266 @item -mips1
4267 Issue instructions from level 1 of the MIPS ISA.  This is the default.
4268 @samp{r3000} is the default @var{cpu type} at this ISA level.
4270 @item -mips2
4271 Issue instructions from level 2 of the MIPS ISA (branch likely, square
4272 root instructions).  @samp{r6000} is the default @var{cpu type} at this
4273 ISA level.
4275 @item -mips3
4276 Issue instructions from level 3 of the MIPS ISA (64 bit instructions).
4277 @samp{r4000} is the default @var{cpu type} at this ISA level.
4278 This option does not change the sizes of any of the C data types.
4280 @item -mfp32
4281 Assume that 32 32-bit floating point registers are available.  This is
4282 the default.
4284 @item -mfp64
4285 Assume that 32 64-bit floating point registers are available.  This is
4286 the default when the @samp{-mips3} option is used.
4288 @item -mgp32
4289 Assume that 32 32-bit general purpose registers are available.  This is
4290 the default.
4292 @item -mgp64
4293 Assume that 32 64-bit general purpose registers are available.  This is
4294 the default when the @samp{-mips3} option is used.
4296 @item -mint64
4297 Types long, int, and pointer are 64 bits.  This works only if @samp{-mips3}
4298 is also specified.
4300 @item -mlong64
4301 Types long and pointer are 64 bits, and type int is 32 bits.
4302 This works only if @samp{-mips3} is also specified.
4304 @item -mmips-as
4305 Generate code for the MIPS assembler, and invoke @file{mips-tfile} to
4306 add normal debug information.  This is the default for all
4307 platforms except for the OSF/1 reference platform, using the OSF/rose
4308 object format.  If the either of the @samp{-gstabs} or @samp{-gstabs+}
4309 switches are used, the @file{mips-tfile} program will encapsulate the
4310 stabs within MIPS ECOFF.
4312 @item -mgas
4313 Generate code for the GNU assembler.  This is the default on the OSF/1
4314 reference platform, using the OSF/rose object format.  Also, this is
4315 the default if the configure option @samp{--with-gnu-as} is used.
4317 @item -msplit-addresses
4318 @itemx -mno-split-addresses
4319 Generate code to load the high and low parts of address constants separately.
4320 This allows @code{gcc} to optimize away redundant loads of the high order
4321 bits of addresses.  This optimization requires GNU as and GNU ld.
4322 This optimization is enabled by default for some embedded targets where
4323 GNU as and GNU ld are standard.
4325 @item -mrnames
4326 @itemx -mno-rnames
4327 The @samp{-mrnames} switch says to output code using the MIPS software
4328 names for the registers, instead of the hardware names (ie, @var{a0}
4329 instead of @var{$4}).  The only known assembler that supports this option
4330 is the Algorithmics assembler.
4332 @item -mgpopt
4333 @itemx -mno-gpopt
4334 The @samp{-mgpopt} switch says to write all of the data declarations
4335 before the instructions in the text section, this allows the MIPS
4336 assembler to generate one word memory references instead of using two
4337 words for short global or static data items.  This is on by default if
4338 optimization is selected.
4340 @item -mstats
4341 @itemx -mno-stats
4342 For each non-inline function processed, the @samp{-mstats} switch
4343 causes the compiler to emit one line to the standard error file to
4344 print statistics about the program (number of registers saved, stack
4345 size, etc.).
4347 @item -mmemcpy
4348 @itemx -mno-memcpy
4349 The @samp{-mmemcpy} switch makes all block moves call the appropriate
4350 string function (@samp{memcpy} or @samp{bcopy}) instead of possibly
4351 generating inline code.
4353 @item -mmips-tfile
4354 @itemx -mno-mips-tfile
4355 The @samp{-mno-mips-tfile} switch causes the compiler not
4356 postprocess the object file with the @file{mips-tfile} program,
4357 after the MIPS assembler has generated it to add debug support.  If
4358 @file{mips-tfile} is not run, then no local variables will be
4359 available to the debugger.  In addition, @file{stage2} and
4360 @file{stage3} objects will have the temporary file names passed to the
4361 assembler embedded in the object file, which means the objects will
4362 not compare the same.  The @samp{-mno-mips-tfile} switch should only
4363 be used when there are bugs in the @file{mips-tfile} program that
4364 prevents compilation.
4366 @item -msoft-float
4367 Generate output containing library calls for floating point.
4368 @strong{Warning:} the requisite libraries are not part of GNU CC.
4369 Normally the facilities of the machine's usual C compiler are used, but
4370 this can't be done directly in cross-compilation.  You must make your
4371 own arrangements to provide suitable library functions for
4372 cross-compilation.
4374 @item -mhard-float
4375 Generate output containing floating point instructions.  This is the
4376 default if you use the unmodified sources.
4378 @item -mabicalls
4379 @itemx -mno-abicalls
4380 Emit (or do not emit) the pseudo operations @samp{.abicalls},
4381 @samp{.cpload}, and @samp{.cprestore} that some System V.4 ports use for
4382 position independent code.
4384 @item -mlong-calls
4385 @itemx -mno-long-calls
4386 Do all calls with the @samp{JALR} instruction, which requires
4387 loading up a function's address into a register before the call.
4388 You need to use this switch, if you call outside of the current
4389 512 megabyte segment to functions that are not through pointers.
4391 @item -mhalf-pic
4392 @itemx -mno-half-pic
4393 Put pointers to extern references into the data section and load them
4394 up, rather than put the references in the text section.
4396 @item -membedded-pic
4397 @itemx -mno-embedded-pic
4398 Generate PIC code suitable for some embedded systems.  All calls are made
4399 using PC relative address, and all data is addressed using the $gp register.
4400 This requires GNU as and GNU ld which do most of the work.
4402 @item -membedded-data
4403 @itemx -mno-embedded-data
4404 Allocate variables to the read-only data section first if possible, then
4405 next in the small data section if possible, otherwise in data.  This gives
4406 slightly slower code than the default, but reduces the amount of RAM required
4407 when executing, and thus may be preferred for some embedded systems.
4409 @item -msingle-float
4410 @itemx -mdouble-float
4411 The @samp{-msingle-float} switch tells gcc to assume that the floating
4412 point coprocessor only supports single precision operations, as on the
4413 @samp{r4650} chip.  The @samp{-mdouble-float} switch permits gcc to use
4414 double precision operations.  This is the default.
4416 @item -mmad
4417 @itemx -mno-mad
4418 Permit use of the @samp{mad}, @samp{madu} and @samp{mul} instructions,
4419 as on the @samp{r4650} chip.
4421 @item -m4650
4422 Turns on @samp{-msingle-float}, @samp{-mmad}, and, at least for now,
4423 @samp{-mcpu=r4650}.
4425 @item -EL
4426 Compile code for the processor in little endian mode.
4427 The requisite libraries are assumed to exist.
4429 @item -EB
4430 Compile code for the processor in big endian mode.
4431 The requisite libraries are assumed to exist.
4433 @item -G @var{num}
4434 @cindex smaller data references (MIPS)
4435 @cindex gp-relative references (MIPS)
4436 Put global and static items less than or equal to @var{num} bytes into
4437 the small data or bss sections instead of the normal data or bss
4438 section.  This allows the assembler to emit one word memory reference
4439 instructions based on the global pointer (@var{gp} or @var{$28}),
4440 instead of the normal two words used.  By default, @var{num} is 8 when
4441 the MIPS assembler is used, and 0 when the GNU assembler is used.  The
4442 @samp{-G @var{num}} switch is also passed to the assembler and linker.
4443 All modules should be compiled with the same @samp{-G @var{num}}
4444 value.
4446 @item -nocpp
4447 Tell the MIPS assembler to not run it's preprocessor over user
4448 assembler files (with a @samp{.s} suffix) when assembling them.
4449 @end table
4451 @ifset INTERNALS
4452 These options are defined by the macro
4453 @code{TARGET_SWITCHES} in the machine description.  The default for the
4454 options is also defined by that macro, which enables you to change the
4455 defaults.
4456 @end ifset
4458 @node i386 Options
4459 @subsection Intel 386 Options
4460 @cindex i386 Options
4461 @cindex Intel 386 Options
4463 These @samp{-m} options are defined for the i386 family of computers:
4465 @table @code
4466 @item -mcpu=@var{cpu type}
4467 Assume the defaults for the machine type @var{cpu type} when scheduling
4468 instructions.  The choices for @var{cpu type} are: @samp{i386},
4469 @samp{i486}, @samp{i586} (@samp{pentium}), @samp{pentium}, @samp{i686}
4470 (@samp{pentiumpro}) and @samp{pentiumpro}. While picking a specific
4471 @var{cpu type} will schedule things appropriately for that particular
4472 chip, the compiler will not generate any code that does not run on the
4473 i386 without the @samp{-march=@var{cpu type}} option being used.
4475 @item -march=@var{cpu type}
4476 Generate instructions for the machine type @var{cpu type}.  The choices
4477 for @var{cpu type} are: @samp{i386}, @samp{i486}, @samp{pentium}, and
4478 @samp{pentiumpro}.  Specifying @samp{-march=@var{cpu type}} implies
4479 @samp{-mcpu=@var{cpu type}}.
4481 @item -m386
4482 @itemx -m486
4483 @itemx -mpentium
4484 @itemx -mpentiumpro
4485 Synonyms for -mcpu=i386, -mcpu=i486, -mcpu=pentium, and -mcpu=pentiumpro
4486 respectively.
4488 @item -mieee-fp
4489 @itemx -mno-ieee-fp
4490 Control whether or not the compiler uses IEEE floating point
4491 comparisons.  These handle correctly the case where the result of a
4492 comparison is unordered.
4494 @item -msoft-float
4495 Generate output containing library calls for floating point.
4496 @strong{Warning:} the requisite libraries are not part of GNU CC.
4497 Normally the facilities of the machine's usual C compiler are used, but
4498 this can't be done directly in cross-compilation.  You must make your
4499 own arrangements to provide suitable library functions for
4500 cross-compilation.
4502 On machines where a function returns floating point results in the 80387
4503 register stack, some floating point opcodes may be emitted even if
4504 @samp{-msoft-float} is used.
4506 @item -mno-fp-ret-in-387
4507 Do not use the FPU registers for return values of functions.
4509 The usual calling convention has functions return values of types
4510 @code{float} and @code{double} in an FPU register, even if there
4511 is no FPU.  The idea is that the operating system should emulate
4512 an FPU.
4514 The option @samp{-mno-fp-ret-in-387} causes such values to be returned
4515 in ordinary CPU registers instead.
4517 @item -mno-fancy-math-387
4518 Some 387 emulators do not support the @code{sin}, @code{cos} and
4519 @code{sqrt} instructions for the 387.  Specify this option to avoid
4520 generating those instructions. This option is the default on FreeBSD.
4521 As of revision 2.6.1, these instructions are not generated unless you
4522 also use the @samp{-ffast-math} switch.
4524 @item -malign-double
4525 @itemx -mno-align-double
4526 Control whether GNU CC aligns @code{double}, @code{long double}, and
4527 @code{long long} variables on a two word boundary or a one word
4528 boundary.  Aligning @code{double} variables on a two word boundary will
4529 produce code that runs somewhat faster on a @samp{Pentium} at the
4530 expense of more memory.
4532 @strong{Warning:} if you use the @samp{-malign-double} switch,
4533 structures containing the above types will be aligned differently than
4534 the published application binary interface specifications for the 386.
4536 @item -msvr3-shlib
4537 @itemx -mno-svr3-shlib
4538 Control whether GNU CC places uninitialized locals into @code{bss} or
4539 @code{data}.  @samp{-msvr3-shlib} places these locals into @code{bss}.
4540 These options are meaningful only on System V Release 3.
4542 @item -mno-wide-multiply
4543 @itemx -mwide-multiply
4544 Control whether GNU CC uses the @code{mul} and @code{imul} that produce
4545 64 bit results in @code{eax:edx} from 32 bit operands to do @code{long
4546 long} multiplies and 32-bit division by constants.
4548 @item -mrtd
4549 Use a different function-calling convention, in which functions that
4550 take a fixed number of arguments return with the @code{ret} @var{num}
4551 instruction, which pops their arguments while returning.  This saves one
4552 instruction in the caller since there is no need to pop the arguments
4553 there.
4555 You can specify that an individual function is called with this calling
4556 sequence with the function attribute @samp{stdcall}.  You can also
4557 override the @samp{-mrtd} option by using the function attribute
4558 @samp{cdecl}. @xref{Function Attributes}
4560 @strong{Warning:} this calling convention is incompatible with the one
4561 normally used on Unix, so you cannot use it if you need to call
4562 libraries compiled with the Unix compiler.
4564 Also, you must provide function prototypes for all functions that
4565 take variable numbers of arguments (including @code{printf});
4566 otherwise incorrect code will be generated for calls to those
4567 functions.
4569 In addition, seriously incorrect code will result if you call a
4570 function with too many arguments.  (Normally, extra arguments are
4571 harmlessly ignored.)
4573 @item -mreg-alloc=@var{regs}
4574 Control the default allocation order of integer registers.  The
4575 string @var{regs} is a series of letters specifying a register.  The
4576 supported letters are: @code{a} allocate EAX; @code{b} allocate EBX;
4577 @code{c} allocate ECX; @code{d} allocate EDX; @code{S} allocate ESI;
4578 @code{D} allocate EDI; @code{B} allocate EBP.
4580 @item -mregparm=@var{num}
4581 Control how many registers are used to pass integer arguments.  By
4582 default, no registers are used to pass arguments, and at most 3
4583 registers can be used.  You can control this behavior for a specific
4584 function by using the function attribute @samp{regparm}.   @xref{Function Attributes}
4586 @strong{Warning:} if you use this switch, and
4587 @var{num} is nonzero, then you must build all modules with the same
4588 value, including any libraries.  This includes the system libraries and
4589 startup modules.
4591 @item -malign-loops=@var{num}
4592 Align loops to a 2 raised to a @var{num} byte boundary.  If
4593 @samp{-malign-loops} is not specified, the default is 2.
4595 @item -malign-jumps=@var{num}
4596 Align instructions that are only jumped to to a 2 raised to a @var{num}
4597 byte boundary.  If @samp{-malign-jumps} is not specified, the default is
4598 2 if optimizing for a 386, and 4 if optimizing for a 486.
4600 @item -malign-functions=@var{num}
4601 Align the start of functions to a 2 raised to @var{num} byte boundary.
4602 If @samp{-malign-functions} is not specified, the default is 2 if optimizing
4603 for a 386, and 4 if optimizing for a 486.
4604 @end table
4606 @node HPPA Options
4607 @subsection HPPA Options
4608 @cindex HPPA Options
4610 These @samp{-m} options are defined for the HPPA family of computers:
4612 @table @code
4613 @item -mpa-risc-1-0
4614 Generate code for a PA 1.0 processor.
4616 @item -mpa-risc-1-1
4617 Generate code for a PA 1.1 processor.
4619 @item -mbig-switch
4620 Generate code suitable for big switch tables.  Use this option only if
4621 the assembler/linker complain about out of range branches within a switch
4622 table.
4624 @item -mjump-in-delay
4625 Fill delay slots of function calls with unconditional jump instructions
4626 by modifying the return pointer for the function call to be the target
4627 of the conditional jump.
4629 @item -mdisable-fpregs
4630 Prevent floating point registers from being used in any manner.  This is
4631 necessary for compiling kernels which perform lazy context switching of
4632 floating point registers.  If you use this option and attempt to perform
4633 floating point operations, the compiler will abort.
4635 @item -mdisable-indexing
4636 Prevent the compiler from using indexing address modes.  This avoids some
4637 rather obscure problems when compiling MIG generated code under MACH.
4639 @item -mno-space-regs
4640 Generate code that assumes the target has no space registers.  This allows
4641 GCC to generate faster indirect calls and use unscaled index address modes.
4643 Such code is suitable for level 0 PA systems and kernels.
4645 @item -mfast-indirect-calls
4646 Generate code that assumes calls never cross space boundaries.  This
4647 allows GCC to emit code which performs faster indirect calls.
4649 This option will not work in the presense of shared libraries or nested
4650 functions.
4652 @item -mspace
4653 Optimize for space rather than execution time.  Currently this only
4654 enables out of line function prologues and epilogues.  This option is
4655 incompatable with PIC code generation and profiling.
4657 @item -mlong-load-store
4658 Generate 3-instruction load and store sequences as sometimes required by
4659 the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
4660 the HP compilers.
4662 @item -mportable-runtime
4663 Use the portable calling conventions proposed by HP for ELF systems.
4665 @item -mgas
4666 Enable the use of assembler directives only GAS understands.
4668 @item -mschedule=@var{cpu type}
4669 Schedule code according to the constraints for the machine type
4670 @var{cpu type}.  The choices for @var{cpu type} are @samp{700} for
4671 7@var{n}0 machines, @samp{7100} for 7@var{n}5 machines, and @samp{7100}
4672 for 7@var{n}2 machines.  @samp{7100} is the default for @var{cpu type}.
4674 Note the @samp{7100LC} scheduling information is incomplete and using
4675 @samp{7100LC} often leads to bad schedules.  For now it's probably best
4676 to use @samp{7100} instead of @samp{7100LC} for the 7@var{n}2 machines.
4678 @item -mlinker-opt
4679 Enable the optimization pass in the HPUX linker.  Note this makes symbolic
4680 debugging impossible.  It also triggers a bug in the HPUX 8 and HPUX 9 linkers
4681 in which they give bogus error messages when linking some programs.
4683 @item -msoft-float
4684 Generate output containing library calls for floating point.
4685 @strong{Warning:} the requisite libraries are not available for all HPPA
4686 targets.  Normally the facilities of the machine's usual C compiler are
4687 used, but this cannot be done directly in cross-compilation.  You must make
4688 your own arrangements to provide suitable library functions for
4689 cross-compilation.  The embedded target @samp{hppa1.1-*-pro}
4690 does provide software floating point support.
4692 @samp{-msoft-float} changes the calling convention in the output file;
4693 therefore, it is only useful if you compile @emph{all} of a program with
4694 this option.  In particular, you need to compile @file{libgcc.a}, the
4695 library that comes with GNU CC, with @samp{-msoft-float} in order for
4696 this to work.
4697 @end table
4699 @node Intel 960 Options
4700 @subsection Intel 960 Options
4702 These @samp{-m} options are defined for the Intel 960 implementations:
4704 @table @code
4705 @item -m@var{cpu type}
4706 Assume the defaults for the machine type @var{cpu type} for some of
4707 the other options, including instruction scheduling, floating point
4708 support, and addressing modes.  The choices for @var{cpu type} are
4709 @samp{ka}, @samp{kb}, @samp{mc}, @samp{ca}, @samp{cf},
4710 @samp{sa}, and @samp{sb}.
4711 The default is
4712 @samp{kb}.
4714 @item -mnumerics
4715 @itemx -msoft-float
4716 The @samp{-mnumerics} option indicates that the processor does support
4717 floating-point instructions.  The @samp{-msoft-float} option indicates
4718 that floating-point support should not be assumed.
4720 @item -mleaf-procedures
4721 @itemx -mno-leaf-procedures
4722 Do (or do not) attempt to alter leaf procedures to be callable with the
4723 @code{bal} instruction as well as @code{call}.  This will result in more
4724 efficient code for explicit calls when the @code{bal} instruction can be
4725 substituted by the assembler or linker, but less efficient code in other
4726 cases, such as calls via function pointers, or using a linker that doesn't
4727 support this optimization.
4729 @item -mtail-call
4730 @itemx -mno-tail-call
4731 Do (or do not) make additional attempts (beyond those of the
4732 machine-independent portions of the compiler) to optimize tail-recursive
4733 calls into branches.  You may not want to do this because the detection of
4734 cases where this is not valid is not totally complete.  The default is
4735 @samp{-mno-tail-call}.
4737 @item -mcomplex-addr
4738 @itemx -mno-complex-addr
4739 Assume (or do not assume) that the use of a complex addressing mode is a
4740 win on this implementation of the i960.  Complex addressing modes may not
4741 be worthwhile on the K-series, but they definitely are on the C-series.
4742 The default is currently @samp{-mcomplex-addr} for all processors except
4743 the CB and CC.
4745 @item -mcode-align
4746 @itemx -mno-code-align
4747 Align code to 8-byte boundaries for faster fetching (or don't bother).
4748 Currently turned on by default for C-series implementations only.
4750 @ignore
4751 @item -mclean-linkage
4752 @itemx -mno-clean-linkage
4753 These options are not fully implemented.
4754 @end ignore
4756 @item -mic-compat
4757 @itemx -mic2.0-compat
4758 @itemx -mic3.0-compat
4759 Enable compatibility with iC960 v2.0 or v3.0.
4761 @item -masm-compat
4762 @itemx -mintel-asm
4763 Enable compatibility with the iC960 assembler.
4765 @item -mstrict-align
4766 @itemx -mno-strict-align
4767 Do not permit (do permit) unaligned accesses.
4769 @item -mold-align
4770 Enable structure-alignment compatibility with Intel's gcc release version
4771 1.3 (based on gcc 1.37).  This option implies @samp{-mstrict-align}.
4772 @end table
4774 @node DEC Alpha Options
4775 @subsection DEC Alpha Options
4777 These @samp{-m} options are defined for the DEC Alpha implementations:
4779 @table @code
4780 @item -mno-soft-float
4781 @itemx -msoft-float
4782 Use (do not use) the hardware floating-point instructions for
4783 floating-point operations.  When @code{-msoft-float} is specified,
4784 functions in @file{libgcc1.c} will be used to perform floating-point
4785 operations.  Unless they are replaced by routines that emulate the
4786 floating-point operations, or compiled in such a way as to call such
4787 emulations routines, these routines will issue floating-point
4788 operations.   If you are compiling for an Alpha without floating-point
4789 operations, you must ensure that the library is built so as not to call
4790 them.
4792 Note that Alpha implementations without floating-point operations are
4793 required to have floating-point registers.
4795 @item -mfp-reg
4796 @itemx -mno-fp-regs
4797 Generate code that uses (does not use) the floating-point register set.
4798 @code{-mno-fp-regs} implies @code{-msoft-float}.  If the floating-point
4799 register set is not used, floating point operands are passed in integer
4800 registers as if they were integers and floating-point results are passed
4801 in $0 instead of $f0.  This is a non-standard calling sequence, so any
4802 function with a floating-point argument or return value called by code
4803 compiled with @code{-mno-fp-regs} must also be compiled with that
4804 option.
4806 A typical use of this option is building a kernel that does not use,
4807 and hence need not save and restore, any floating-point registers.
4809 @item -mieee
4810 The Alpha architecture implements floating-point hardware optimized for
4811 maximum performance.  It is mostly compliant with the IEEE floating
4812 point standard.  However, for full compliance, software assistance is
4813 required.  This option generates code fully IEEE compliant code
4814 @emph{except} that the @var{inexact flag} is not maintained (see below).
4815 If this option is turned on, the CPP macro @code{_IEEE_FP} is defined
4816 during compilation.  The option is a shorthand for: @samp{-D_IEEE_FP
4817 -mfp-trap-mode=su -mtrap-precision=i -mieee-conformant}.  The resulting
4818 code is less efficient but is able to correctly support denormalized
4819 numbers and exceptional IEEE values such as not-a-number and plus/minus
4820 infinity.  Other Alpha compilers call this option
4821 @code{-ieee_with_no_inexact}.
4823 @item -mieee-with-inexact
4824 @c overfull hbox here --bob 22 jul96
4825 @c original text between ignore ... end ignore
4826 @ignore
4827 This is like @samp{-mieee} except the generated code also maintains the
4828 IEEE @var{inexact flag}.  Turning on this option causes the generated
4829 code to implement fully-compliant IEEE math.  The option is a shorthand
4830 for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus @samp{-mieee-conformant},
4831 @samp{-mfp-trap-mode=sui}, and @samp{-mtrap-precision=i}.  On some Alpha
4832 implementations the resulting code may execute significantly slower than
4833 the code generated by default.  Since there is very little code that
4834 depends on the @var{inexact flag}, you should normally not specify this
4835 option.  Other Alpha compilers call this option
4836 @samp{-ieee_with_inexact}.
4837 @end ignore
4838 @c            changed paragraph
4839 This is like @samp{-mieee} except the generated code also maintains the
4840 IEEE @var{inexact flag}.  Turning on this option causes the generated
4841 code to implement fully-compliant IEEE math.  The option is a shorthand
4842 for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus the three following:
4843 @samp{-mieee-conformant},
4844 @samp{-mfp-trap-mode=sui}, 
4845 and @samp{-mtrap-precision=i}.  
4846 On some Alpha implementations the resulting code may execute
4847 significantly slower than the code generated by default.  Since there
4848 is very little code that depends on the @var{inexact flag}, you should
4849 normally not specify this option.  Other Alpha compilers call this
4850 option @samp{-ieee_with_inexact}.
4851 @c             end changes to prevent overfull hboxes
4853 @item -mfp-trap-mode=@var{trap mode}
4854 This option controls what floating-point related traps are enabled.
4855 Other Alpha compilers call this option @samp{-fptm }@var{trap mode}.
4856 The trap mode can be set to one of four values:
4858 @table @samp
4859 @item n
4860 This is the default (normal) setting.  The only traps that are enabled
4861 are the ones that cannot be disabled in software (e.g., division by zero
4862 trap).
4864 @item u
4865 In addition to the traps enabled by @samp{n}, underflow traps are enabled
4866 as well.
4868 @item su
4869 Like @samp{su}, but the instructions are marked to be safe for software
4870 completion (see Alpha architecture manual for details).
4872 @item sui
4873 Like @samp{su}, but inexact traps are enabled as well.
4874 @end table
4876 @item -mfp-rounding-mode=@var{rounding mode}
4877 Selects the IEEE rounding mode.  Other Alpha compilers call this option
4878 @samp{-fprm }@var{rounding mode}.  The @var{rounding mode} can be one
4881 @table @samp
4882 @item n
4883 Normal IEEE rounding mode.  Floating point numbers are rounded towards
4884 the nearest machine number or towards the even machine number in case
4885 of a tie.
4887 @item m
4888 Round towards minus infinity.
4890 @item c
4891 Chopped rounding mode.  Floating point numbers are rounded towards zero.
4893 @item d
4894 Dynamic rounding mode.  A field in the floating point control register
4895 (@var{fpcr}, see Alpha architecture reference manual) controls the
4896 rounding mode in effect.  The C library initializes this register for
4897 rounding towards plus infinity.  Thus, unless your program modifies the
4898 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.@end table
4900 @item -mtrap-precision=@var{trap precision}
4901 In the Alpha architecture, floating point traps are imprecise.  This
4902 means without software assistance it is impossible to recover from a
4903 floating trap and program execution normally needs to be terminated.
4904 GNU CC can generate code that can assist operating system trap handlers
4905 in determining the exact location that caused a floating point trap.
4906 Depending on the requirements of an application, different levels of
4907 precisions can be selected:
4909 @table @samp
4910 @item p
4911 Program precision.  This option is the default and means a trap handler
4912 can only identify which program caused a floating point exception.
4914 @item f
4915 Function precision.  The trap handler can determine the function that
4916 caused a floating point exception.
4918 @item i
4919 Instruction precision.  The trap handler can determine the exact
4920 instruction that caused a floating point exception.
4921 @end table
4923 Other Alpha compilers provide the equivalent options called
4924 @samp{-scope_safe} and @samp{-resumption_safe}.
4926 @item -mieee-conformant
4927 This option marks the generated code as IEEE conformant.  You must not
4928 use this option unless you also specify @samp{-mtrap-precision=i} and either
4929 @samp{-mfp-trap-mode=su} or @samp{-mfp-trap-mode=sui}.  Its only effect
4930 is to emit the line @samp{.eflag 48} in the function prologue of the
4931 generated assembly file.  Under DEC Unix, this has the effect that
4932 IEEE-conformant math library routines will be linked in.
4934 @item -mbuild-constants
4935 Normally GNU CC examines a 32- or 64-bit integer constant to
4936 see if it can construct it from smaller constants in two or three
4937 instructions.  If it cannot, it will output the constant as a literal and
4938 generate code to load it from the data segement at runtime.
4940 Use this option to require GNU CC to construct @emph{all} integer constants
4941 using code, even if it takes more instructions (the maximum is six).
4943 You would typically use this option to build a shared library dynamic
4944 loader.  Itself a shared library, it must relocate itself in memory
4945 before it can find the variables and constants in its own data segment.
4946 @end table
4948 @node Clipper Options
4949 @subsection Clipper Options
4951 These @samp{-m} options are defined for the Clipper implementations:
4953 @table @code
4954 @item -mc300
4955 Produce code for a C300 Clipper processor. This is the default.
4957 @itemx -mc400
4958 Produce code for a C400 Clipper processor i.e. use floating point
4959 registers f8..f15.
4960 @end table
4962 @node H8/300 Options
4963 @subsection H8/300 Options
4965 These @samp{-m} options are defined for the H8/300 implementations:
4967 @table @code
4968 @item -mrelax
4969 Shorten some address references at link time, when possible; uses the
4970 linker option @samp{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
4971 ld.info, Using ld}, for a fuller description.
4973 @item -mh
4974 Generate code for the H8/300H.
4976 @item -ms
4977 Generate code for the H8/S.
4979 @item -mint32
4980 Make @code{int} data 32 bits by default.
4982 @item -malign-300
4983 On the h8/300h, use the same alignment rules as for the h8/300.
4984 The default for the h8/300h is to align longs and floats on 4 byte boundaries.
4985 @samp{-malign-300} causes them to be aligned on 2 byte boundaries.
4986 This option has no effect on the h8/300.
4987 @end table
4989 @node SH Options
4990 @subsection SH Options
4992 These @samp{-m} options are defined for the SH implementations:
4994 @table @code
4995 @item -m1
4996 Generate code for the SH1.
4998 @item -m2
4999 Generate code for the SH2.
5001 @item -m3
5002 Generate code for the SH3.
5004 @item -m3e
5005 Generate code for the SH3e.
5007 @item -mb
5008 Compile code for the processor in big endian mode.
5010 @item -ml
5011 Compile code for the processor in little endian mode.
5013 @item -mrelax
5014 Shorten some address references at link time, when possible; uses the
5015 linker option @samp{-relax}.
5016 @end table
5018 @node System V Options
5019 @subsection Options for System V
5021 These additional options are available on System V Release 4 for
5022 compatibility with other compilers on those systems:
5024 @table @code
5025 @item -G
5026 Create a shared object.
5027 It is recommended that @samp{-symbolic} or @samp{-shared} be used instead.
5029 @item -Qy
5030 Identify the versions of each tool used by the compiler, in a
5031 @code{.ident} assembler directive in the output.
5033 @item -Qn
5034 Refrain from adding @code{.ident} directives to the output file (this is
5035 the default).
5037 @item -YP,@var{dirs}
5038 Search the directories @var{dirs}, and no others, for libraries
5039 specified with @samp{-l}.
5041 @item -Ym,@var{dir}
5042 Look in the directory @var{dir} to find the M4 preprocessor.
5043 The assembler uses this option.
5044 @c This is supposed to go with a -Yd for predefined M4 macro files, but
5045 @c the generic assembler that comes with Solaris takes just -Ym.
5046 @end table
5048 @node V850 Options
5049 @subsection V850 Options
5050 @cindex V850 Options
5052 These @samp{-m} options are defined for V850 implementations:
5054 @table @code
5055 @item -mlong-calls
5056 @itemx -mno-long-calls
5057 Treat all calls as being far away (near).  If calls are assumed to be
5058 far away, the compiler will always load the functions address up into a
5059 register, and call indirect through the pointer.
5061 @item -mno-ep
5062 @item -mep
5063 Do not optimize (do optimize) basic blocks that use the same index
5064 pointer 4 or more times to copy pointer into the @code{ep} register, and
5065 use the shorter @code{sld} and @code{sst} instructions.  The @samp{-mep}
5066 option is on by default if you optimize.
5068 @item -mno-prolog-function
5069 @itemx -mprolog-function
5070 Do not use (do use) external functions to save and restore registers at
5071 the prolog and epilog of a function.  The external functions are slower,
5072 but use less code space if more than one function saves the same number
5073 of registers.  The @samp{-mprolog-function} option is on by default if
5074 you optimize.
5076 @item -mspace
5077 Try to make the code as small as possible.  At present, this just turns
5078 on the @samp{-mep} and @samp{-mprolog-function} options.
5080 @item -mtda=@var{n}
5081 Put static or global variables whose size is @var{n} bytes or less into
5082 the tiny data area that register @code{ep} points to.  The tiny data
5083 area can hold up to 256 bytes in total (128 bytes for byte references).
5085 @item -msda=@var{n}
5086 Put static or global variables whose size is @var{n} bytes or less into
5087 the small data area that register @code{gp} points to.  The small data
5088 area can hold up to 64 kilobytes.
5090 @item -mzda=@var{n}
5091 Put static or global variables whose size is @var{n} bytes or less into
5092 the first 32 kilobytes of memory.
5094 @item -mv850
5095 Specify that the target processor is the V850.
5097 @end table
5099 @node Code Gen Options
5100 @section Options for Code Generation Conventions
5101 @cindex code generation conventions
5102 @cindex options, code generation
5103 @cindex run-time options
5105 These machine-independent options control the interface conventions
5106 used in code generation.
5108 Most of them have both positive and negative forms; the negative form
5109 of @samp{-ffoo} would be @samp{-fno-foo}.  In the table below, only
5110 one of the forms is listed---the one which is not the default.  You
5111 can figure out the other form by either removing @samp{no-} or adding
5114 @table @code
5115 @item -fpcc-struct-return
5116 Return ``short'' @code{struct} and @code{union} values in memory like
5117 longer ones, rather than in registers.  This convention is less
5118 efficient, but it has the advantage of allowing intercallability between
5119 GNU CC-compiled files and files compiled with other compilers.
5121 The precise convention for returning structures in memory depends
5122 on the target configuration macros.
5124 Short structures and unions are those whose size and alignment match
5125 that of some integer type.
5127 @item -freg-struct-return
5128 Use the convention that @code{struct} and @code{union} values are
5129 returned in registers when possible.  This is more efficient for small
5130 structures than @samp{-fpcc-struct-return}.
5132 If you specify neither @samp{-fpcc-struct-return} nor its contrary
5133 @samp{-freg-struct-return}, GNU CC defaults to whichever convention is
5134 standard for the target.  If there is no standard convention, GNU CC
5135 defaults to @samp{-fpcc-struct-return}, except on targets where GNU CC
5136 is the principal compiler.  In those cases, we can choose the standard,
5137 and we chose the more efficient register return alternative.
5139 @item -fshort-enums
5140 Allocate to an @code{enum} type only as many bytes as it needs for the
5141 declared range of possible values.  Specifically, the @code{enum} type
5142 will be equivalent to the smallest integer type which has enough room.
5144 @item -fshort-double
5145 Use the same size for @code{double} as for @code{float}.
5147 @item -fshared-data
5148 Requests that the data and non-@code{const} variables of this
5149 compilation be shared data rather than private data.  The distinction
5150 makes sense only on certain operating systems, where shared data is
5151 shared between processes running the same program, while private data
5152 exists in one copy per process.
5154 @item -fno-common
5155 Allocate even uninitialized global variables in the bss section of the
5156 object file, rather than generating them as common blocks.  This has the
5157 effect that if the same variable is declared (without @code{extern}) in
5158 two different compilations, you will get an error when you link them.
5159 The only reason this might be useful is if you wish to verify that the
5160 program will work on other systems which always work this way.
5162 @item -fno-ident
5163 Ignore the @samp{#ident} directive.
5165 @item -fno-gnu-linker
5166 Do not output global initializations (such as C++ constructors and
5167 destructors) in the form used by the GNU linker (on systems where the GNU
5168 linker is the standard method of handling them).  Use this option when
5169 you want to use a non-GNU linker, which also requires using the
5170 @code{collect2} program to make sure the system linker includes
5171 constructors and destructors.  (@code{collect2} is included in the GNU CC
5172 distribution.)  For systems which @emph{must} use @code{collect2}, the
5173 compiler driver @code{gcc} is configured to do this automatically.
5175 @item -finhibit-size-directive
5176 Don't output a @code{.size} assembler directive, or anything else that
5177 would cause trouble if the function is split in the middle, and the
5178 two halves are placed at locations far apart in memory.  This option is
5179 used when compiling @file{crtstuff.c}; you should not need to use it
5180 for anything else.
5182 @item -fverbose-asm
5183 Put extra commentary information in the generated assembly code to
5184 make it more readable.  This option is generally only of use to those
5185 who actually need to read the generated assembly code (perhaps while
5186 debugging the compiler itself).
5188 @samp{-fverbose-asm} is the default.  @samp{-fno-verbose-asm} causes the
5189 extra information to be omitted and is useful when comparing two assembler
5190 files.
5192 @item -fvolatile
5193 Consider all memory references through pointers to be volatile.
5195 @item -fvolatile-global
5196 Consider all memory references to extern and global data items to
5197 be volatile.
5199 @item -fpic
5200 @cindex global offset table
5201 @cindex PIC
5202 Generate position-independent code (PIC) suitable for use in a shared
5203 library, if supported for the target machine.  Such code accesses all
5204 constant addresses through a global offset table (GOT).  The dynamic
5205 loader resolves the GOT entries when the program starts (the dynamic
5206 loader is not part of GNU CC; it is part of the operating system).  If
5207 the GOT size for the linked executable exceeds a machine-specific
5208 maximum size, you get an error message from the linker indicating that
5209 @samp{-fpic} does not work; in that case, recompile with @samp{-fPIC}
5210 instead.  (These maximums are 16k on the m88k, 8k on the Sparc, and 32k
5211 on the m68k and RS/6000.  The 386 has no such limit.)
5213 Position-independent code requires special support, and therefore works
5214 only on certain machines.  For the 386, GNU CC supports PIC for System V
5215 but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
5216 position-independent.
5218 @item -fPIC
5219 If supported for the target machine, emit position-independent code,
5220 suitable for dynamic linking and avoiding any limit on the size of the
5221 global offset table.  This option makes a difference on the m68k, m88k,
5222 and the Sparc.
5224 Position-independent code requires special support, and therefore works
5225 only on certain machines.
5227 @item -ffixed-@var{reg}
5228 Treat the register named @var{reg} as a fixed register; generated code
5229 should never refer to it (except perhaps as a stack pointer, frame
5230 pointer or in some other fixed role).
5232 @var{reg} must be the name of a register.  The register names accepted
5233 are machine-specific and are defined in the @code{REGISTER_NAMES}
5234 macro in the machine description macro file.
5236 This flag does not have a negative form, because it specifies a
5237 three-way choice.
5239 @item -fcall-used-@var{reg}
5240 Treat the register named @var{reg} as an allocatable register that is
5241 clobbered by function calls.  It may be allocated for temporaries or
5242 variables that do not live across a call.  Functions compiled this way
5243 will not save and restore the register @var{reg}.
5245 Use of this flag for a register that has a fixed pervasive role in the
5246 machine's execution model, such as the stack pointer or frame pointer,
5247 will produce disastrous results.
5249 This flag does not have a negative form, because it specifies a
5250 three-way choice.
5252 @item -fcall-saved-@var{reg}
5253 Treat the register named @var{reg} as an allocatable register saved by
5254 functions.  It may be allocated even for temporaries or variables that
5255 live across a call.  Functions compiled this way will save and restore
5256 the register @var{reg} if they use it.
5258 Use of this flag for a register that has a fixed pervasive role in the
5259 machine's execution model, such as the stack pointer or frame pointer,
5260 will produce disastrous results.
5262 A different sort of disaster will result from the use of this flag for
5263 a register in which function values may be returned.
5265 This flag does not have a negative form, because it specifies a
5266 three-way choice.
5268 @item -fpack-struct
5269 Pack all structure members together without holes.  Usually you would
5270 not want to use this option, since it makes the code suboptimal, and
5271 the offsets of structure members won't agree with system libraries.
5273 @item -fcheck-memory-usage
5274 Generate extra code to check each memory access.  GNU CC will generate
5275 code that is suitable for a detector of bad memory accesses such as
5276 @file{Checker}.  If you specify this option, you can not use the
5277 @code{asm} or @code{__asm__} keywords.
5279 You must also specify this option when you compile functions you call that
5280 have side effects.  If you do not, you may get erronous messages from
5281 the detector.  Normally,  you should compile all your code with this option.
5282 If you use functions from a library that have side-effects (such as
5283 @code{read}), you may not be able to recompile the library and
5284 specify this option.  In that case, you can enable the
5285 @samp{-fprefix-function-name} option, which requests GNU CC to encapsulate
5286 your code and make other functions look as if they were compiled with
5287 @samp{-fcheck-memory-usage}.  This is done by calling ``stubs'',
5288 which are provided by the detector.  If you cannot find or build
5289 stubs for every function you call, you may have to specify
5290 @samp{-fcheck-memory-usage} without @samp{-fprefix-function-name}.
5292 @item -fprefix-function-name
5293 Request GNU CC to add a prefix to the symbols generated for function names.
5294 GNU CC adds a prefix to the names of functions defined as well as
5295 functions called.  Code compiled with this option and code compiled
5296 without the option can't be linked together, unless or stubs are used.
5298 If you compile the following code with @samp{-fprefix-function-name}
5299 @example
5300 extern void bar (int);
5301 void
5302 foo (int a)
5304   return bar (a + 5);
5307 @end example
5309 @noindent
5310 GNU CC will compile the code as if it was written:
5311 @example
5312 extern void prefix_bar (int);
5313 void
5314 prefix_foo (int a)
5316   return prefix_bar (a + 5);
5318 @end example
5319 This option is designed to be used with @samp{-fcheck-memory-usage}.
5321 @item -fstack-check
5322 Generate code to verify that you do not go beyond the boundary of the
5323 stack.  You should specify this flag if you are running in an
5324 environment with multiple threads, but only rarely need to specify it in
5325 a single-threaded environment since stack overflow is automatically
5326 detected on nearly all systems if there is only one stack.
5328 @item -fexceptions
5329 Enable exception handling.  For some targets, this implies
5330 generation of frame unwind information for all functions, which can produce
5331 significant data size overhead, though it does not affect execution.
5333 This option is on by default for languages that support exception
5334 handling (such as C++), and off for those that don't (such as C).
5336 @item +e0
5337 @itemx +e1
5338 Control whether virtual function definitions in classes are used to
5339 generate code, or only to define interfaces for their callers.  (C++
5340 only).
5342 These options are provided for compatibility with @code{cfront} 1.x
5343 usage; the recommended alternative GNU C++ usage is in flux.  @xref{C++
5344 Interface,,Declarations and Definitions in One Header}.
5346 With @samp{+e0}, virtual function definitions in classes are declared
5347 @code{extern}; the declaration is used only as an interface
5348 specification, not to generate code for the virtual functions (in this
5349 compilation).
5351 With @samp{+e1}, G++ actually generates the code implementing virtual
5352 functions defined in the code, and makes them publicly visible.
5354 @cindex aliasing of parameters
5355 @cindex parameters, aliased
5356 @item -fargument-alias
5357 @item -fargument-noalias
5358 @item -fargument-noalias-global
5359 Specify the possible relationships among parameters and between
5360 parameters and global data.
5362 @samp{-fargument-alias} specifies that arguments (parameters) may
5363 alias each other and may alias global storage.
5364 @samp{-fargument-noalias} specifies that arguments do not alias
5365 each other, but may alias global storage.
5366 @samp{-fargument-noalias-global} specifies that arguments do not
5367 alias each other and do not alias global storage.
5369 Each language will automatically use whatever option is required by
5370 the language standard.  You should not need to use these options yourself.
5371 @end table
5373 @node Environment Variables
5374 @section Environment Variables Affecting GNU CC
5375 @cindex environment variables
5377 This section describes several environment variables that affect how GNU
5378 CC operates.  They work by specifying directories or prefixes to use
5379 when searching for various kinds of files.
5381 @ifclear INTERNALS
5382 Note that you can also specify places to search using options such as
5383 @samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}).  These
5384 take precedence over places specified using environment variables, which
5385 in turn take precedence over those specified by the configuration of GNU
5387 @end ifclear
5388 @ifset INTERNALS
5389 Note that you can also specify places to search using options such as
5390 @samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}).  These
5391 take precedence over places specified using environment variables, which
5392 in turn take precedence over those specified by the configuration of GNU
5393 CC.  @xref{Driver}.
5394 @end ifset
5396 @table @code
5397 @item TMPDIR
5398 @findex TMPDIR
5399 If @code{TMPDIR} is set, it specifies the directory to use for temporary
5400 files.  GNU CC uses temporary files to hold the output of one stage of
5401 compilation which is to be used as input to the next stage: for example,
5402 the output of the preprocessor, which is the input to the compiler
5403 proper.
5405 @item GCC_EXEC_PREFIX
5406 @findex GCC_EXEC_PREFIX
5407 If @code{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
5408 names of the subprograms executed by the compiler.  No slash is added
5409 when this prefix is combined with the name of a subprogram, but you can
5410 specify a prefix that ends with a slash if you wish.
5412 If GNU CC cannot find the subprogram using the specified prefix, it
5413 tries looking in the usual places for the subprogram.
5415 The default value of @code{GCC_EXEC_PREFIX} is
5416 @file{@var{prefix}/lib/gcc-lib/} where @var{prefix} is the value
5417 of @code{prefix} when you ran the @file{configure} script.
5419 Other prefixes specified with @samp{-B} take precedence over this prefix.
5421 This prefix is also used for finding files such as @file{crt0.o} that are
5422 used for linking.
5424 In addition, the prefix is used in an unusual way in finding the
5425 directories to search for header files.  For each of the standard
5426 directories whose name normally begins with @samp{/usr/local/lib/gcc-lib}
5427 (more precisely, with the value of @code{GCC_INCLUDE_DIR}), GNU CC tries
5428 replacing that beginning with the specified prefix to produce an
5429 alternate directory name.  Thus, with @samp{-Bfoo/}, GNU CC will search
5430 @file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
5431 These alternate directories are searched first; the standard directories
5432 come next.
5434 @item COMPILER_PATH
5435 @findex COMPILER_PATH
5436 The value of @code{COMPILER_PATH} is a colon-separated list of
5437 directories, much like @code{PATH}.  GNU CC tries the directories thus
5438 specified when searching for subprograms, if it can't find the
5439 subprograms using @code{GCC_EXEC_PREFIX}.
5441 @item LIBRARY_PATH
5442 @findex LIBRARY_PATH
5443 The value of @code{LIBRARY_PATH} is a colon-separated list of
5444 directories, much like @code{PATH}.  When configured as a native compiler,
5445 GNU CC tries the directories thus specified when searching for special
5446 linker files, if it can't find them using @code{GCC_EXEC_PREFIX}.  Linking
5447 using GNU CC also uses these directories when searching for ordinary
5448 libraries for the @samp{-l} option (but directories specified with
5449 @samp{-L} come first).
5451 @item C_INCLUDE_PATH
5452 @itemx CPLUS_INCLUDE_PATH
5453 @itemx OBJC_INCLUDE_PATH
5454 @findex C_INCLUDE_PATH
5455 @findex CPLUS_INCLUDE_PATH
5456 @findex OBJC_INCLUDE_PATH
5457 @c @itemx OBJCPLUS_INCLUDE_PATH
5458 These environment variables pertain to particular languages.  Each
5459 variable's value is a colon-separated list of directories, much like
5460 @code{PATH}.  When GNU CC searches for header files, it tries the
5461 directories listed in the variable for the language you are using, after
5462 the directories specified with @samp{-I} but before the standard header
5463 file directories.
5465 @item DEPENDENCIES_OUTPUT
5466 @findex DEPENDENCIES_OUTPUT
5467 @cindex dependencies for make as output
5468 If this variable is set, its value specifies how to output dependencies
5469 for Make based on the header files processed by the compiler.  This
5470 output looks much like the output from the @samp{-M} option
5471 (@pxref{Preprocessor Options}), but it goes to a separate file, and is
5472 in addition to the usual results of compilation.
5474 The value of @code{DEPENDENCIES_OUTPUT} can be just a file name, in
5475 which case the Make rules are written to that file, guessing the target
5476 name from the source file name.  Or the value can have the form
5477 @samp{@var{file} @var{target}}, in which case the rules are written to
5478 file @var{file} using @var{target} as the target name.
5479 @end table
5481 @node Running Protoize
5482 @section Running Protoize
5484 The program @code{protoize} is an optional part of GNU C.  You can use
5485 it to add prototypes to a program, thus converting the program to ANSI
5486 C in one respect.  The companion program @code{unprotoize} does the
5487 reverse: it removes argument types from any prototypes that are found.
5489 When you run these programs, you must specify a set of source files as
5490 command line arguments.  The conversion programs start out by compiling
5491 these files to see what functions they define.  The information gathered
5492 about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
5494 After scanning comes actual conversion.  The specified files are all
5495 eligible to be converted; any files they include (whether sources or
5496 just headers) are eligible as well.
5498 But not all the eligible files are converted.  By default,
5499 @code{protoize} and @code{unprotoize} convert only source and header
5500 files in the current directory.  You can specify additional directories
5501 whose files should be converted with the @samp{-d @var{directory}}
5502 option.  You can also specify particular files to exclude with the
5503 @samp{-x @var{file}} option.  A file is converted if it is eligible, its
5504 directory name matches one of the specified directory names, and its
5505 name within the directory has not been excluded.
5507 Basic conversion with @code{protoize} consists of rewriting most
5508 function definitions and function declarations to specify the types of
5509 the arguments.  The only ones not rewritten are those for varargs
5510 functions.
5512 @code{protoize} optionally inserts prototype declarations at the
5513 beginning of the source file, to make them available for any calls that
5514 precede the function's definition.  Or it can insert prototype
5515 declarations with block scope in the blocks where undeclared functions
5516 are called.
5518 Basic conversion with @code{unprotoize} consists of rewriting most
5519 function declarations to remove any argument types, and rewriting
5520 function definitions to the old-style pre-ANSI form.
5522 Both conversion programs print a warning for any function declaration or
5523 definition that they can't convert.  You can suppress these warnings
5524 with @samp{-q}.
5526 The output from @code{protoize} or @code{unprotoize} replaces the
5527 original source file.  The original file is renamed to a name ending
5528 with @samp{.save}.  If the @samp{.save} file already exists, then
5529 the source file is simply discarded.
5531 @code{protoize} and @code{unprotoize} both depend on GNU CC itself to
5532 scan the program and collect information about the functions it uses.
5533 So neither of these programs will work until GNU CC is installed.
5535 Here is a table of the options you can use with @code{protoize} and
5536 @code{unprotoize}.  Each option works with both programs unless
5537 otherwise stated.
5539 @table @code
5540 @item -B @var{directory}
5541 Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
5542 usual directory (normally @file{/usr/local/lib}).  This file contains
5543 prototype information about standard system functions.  This option
5544 applies only to @code{protoize}.
5546 @item -c @var{compilation-options}
5547 Use  @var{compilation-options} as the options when running @code{gcc} to
5548 produce the @samp{.X} files.  The special option @samp{-aux-info} is
5549 always passed in addition, to tell @code{gcc} to write a @samp{.X} file.
5551 Note that the compilation options must be given as a single argument to
5552 @code{protoize} or @code{unprotoize}.  If you want to specify several
5553 @code{gcc} options, you must quote the entire set of compilation options
5554 to make them a single word in the shell.
5556 There are certain @code{gcc} arguments that you cannot use, because they
5557 would produce the wrong kind of output.  These include @samp{-g},
5558 @samp{-O}, @samp{-c}, @samp{-S}, and @samp{-o} If you include these in
5559 the @var{compilation-options}, they are ignored.
5561 @item -C
5562 Rename files to end in @samp{.C} instead of @samp{.c}.
5563 This is convenient if you are converting a C program to C++.
5564 This option applies only to @code{protoize}.
5566 @item -g
5567 Add explicit global declarations.  This means inserting explicit
5568 declarations at the beginning of each source file for each function
5569 that is called in the file and was not declared.  These declarations
5570 precede the first function definition that contains a call to an
5571 undeclared function.  This option applies only to @code{protoize}.
5573 @item -i @var{string}
5574 Indent old-style parameter declarations with the string @var{string}.
5575 This option applies only to @code{protoize}.
5577 @code{unprotoize} converts prototyped function definitions to old-style
5578 function definitions, where the arguments are declared between the
5579 argument list and the initial @samp{@{}.  By default, @code{unprotoize}
5580 uses five spaces as the indentation.  If you want to indent with just
5581 one space instead, use @samp{-i " "}.
5583 @item -k
5584 Keep the @samp{.X} files.  Normally, they are deleted after conversion
5585 is finished.
5587 @item -l
5588 Add explicit local declarations.  @code{protoize} with @samp{-l} inserts
5589 a prototype declaration for each function in each block which calls the
5590 function without any declaration.  This option applies only to
5591 @code{protoize}.
5593 @item -n
5594 Make no real changes.  This mode just prints information about the conversions
5595 that would have been done without @samp{-n}.
5597 @item -N
5598 Make no @samp{.save} files.  The original files are simply deleted.
5599 Use this option with caution.
5601 @item -p @var{program}
5602 Use the program @var{program} as the compiler.  Normally, the name
5603 @file{gcc} is used.
5605 @item -q
5606 Work quietly.  Most warnings are suppressed.
5608 @item -v
5609 Print the version number, just like @samp{-v} for @code{gcc}.
5610 @end table
5612 If you need special compiler options to compile one of your program's
5613 source files, then you should generate that file's @samp{.X} file
5614 specially, by running @code{gcc} on that source file with the
5615 appropriate options and the option @samp{-aux-info}.  Then run
5616 @code{protoize} on the entire set of files.  @code{protoize} will use
5617 the existing @samp{.X} file because it is newer than the source file.
5618 For example:
5620 @example
5621 gcc -Dfoo=bar file1.c -aux-info
5622 protoize *.c
5623 @end example
5625 @noindent
5626 You need to include the special files along with the rest in the
5627 @code{protoize} command, even though their @samp{.X} files already
5628 exist, because otherwise they won't get converted.
5630 @xref{Protoize Caveats}, for more information on how to use
5631 @code{protoize} successfully.