Import final gcc2 snapshot (990109)
[official-gcc.git] / gcc / invoke.texi
blob223c3f273ddd6719533d3fad0c081a72cfb6f082
1 @c Copyright (C) 1988,89,92,93,94,95,96,97,1998 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  
107 -fno-for-scope  -fhandle-signatures  -fmemoize-lookups  
108 -fname-mangling-version-@var{n}  -fno-default-inline  
109 -fno-gnu-keywords -fnonnull-objects -fguiding-decls
110 -foperator-names  -fstrict-prototype  -fthis-is-variable
111 -ftemplate-depth-@var{n}  -nostdinc++  -traditional  +e@var{n}
112 @end smallexample
114 @item Warning Options
115 @xref{Warning Options,,Options to Request or Suppress Warnings}.
116 @smallexample
117 -fsyntax-only  -pedantic  -pedantic-errors
118 -w  -W  -Wall  -Waggregate-return  -Wbad-function-cast
119 -Wcast-align  -Wcast-qual  -Wchar-subscript  -Wcomment
120 -Wconversion  -Werror  -Wformat
121 -Wid-clash-@var{len}  -Wimplicit -Wimplicit-int 
122 -Wimplicit-function-declaration  -Wimport
123 -Werror-implicit-function-declaration  -Winline
124 -Wlarger-than-@var{len}  -Wmain  -Wmissing-declarations
125 -Wmissing-prototypes  -Wnested-externs  -Wno-import  
126 -Wold-style-cast  -Woverloaded-virtual  -Wparentheses
127 -Wpointer-arith  -Wredundant-decls  -Wreorder  -Wreturn-type
128 -Wshadow  -Wsign-compare  -Wstrict-prototypes  -Wswitch
129 -Wsynth  -Wtemplate-debugging  -Wtraditional  -Wtrigraphs
130 -Wundef  -Wuninitialized  -Wunused  -Wwrite-strings
131 @end smallexample
133 @item Debugging Options
134 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
135 @smallexample
136 -a  -ax  -d@var{letters}  -fpretend-float
137 -fprofile-arcs  -ftest-coverage
138 -g  -g@var{level}  -gcoff  -gdwarf  -gdwarf-1  -gdwarf-1+  -gdwarf-2
139 -ggdb  -gstabs  -gstabs+  -gxcoff  -gxcoff+
140 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name
141 -print-prog-name=@var{program}  -print-search-dirs  -save-temps
142 @end smallexample
144 @item Optimization Options
145 @xref{Optimize Options,,Options that Control Optimization}.
146 @smallexample
147 -fbranch-probabilities  -foptimize-register-moves
148 -fcaller-saves  -fcse-follow-jumps  -fcse-skip-blocks
149 -fdelayed-branch   -fexpensive-optimizations
150 -ffast-math  -ffloat-store  -fforce-addr  -fforce-mem
151 -ffunction-sections  -finline-functions
152 -fkeep-inline-functions  -fno-default-inline
153 -fno-defer-pop  -fno-function-cse
154 -fno-inline  -fno-peephole  -fomit-frame-pointer
155 -frerun-cse-after-loop  -fschedule-insns
156 -fschedule-insns2  -fstrength-reduce  -fthread-jumps
157 -funroll-all-loops  -funroll-loops
158 -O  -O0  -O1  -O2  -O3
159 @end smallexample
161 @item Preprocessor Options
162 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
163 @smallexample
164 -A@var{question}(@var{answer})  -C  -dD  -dM  -dN
165 -D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H
166 -idirafter @var{dir}
167 -include @var{file}  -imacros @var{file}
168 -iprefix @var{file}  -iwithprefix @var{dir}
169 -iwithprefixbefore @var{dir}  -isystem @var{dir}
170 -M  -MD  -MM  -MMD  -MG  -nostdinc  -P  -trigraphs
171 -undef  -U@var{macro}  -Wp,@var{option}
172 @end smallexample
174 @item Assembler Option
175 @xref{Assembler Options,,Passing Options to the Assembler}.
176 @smallexample
177 -Wa,@var{option}
178 @end smallexample
180 @item Linker Options
181 @xref{Link Options,,Options for Linking}.
182 @smallexample
183 @var{object-file-name}  -l@var{library}
184 -nostartfiles  -nodefaultlibs  -nostdlib
185 -s  -static  -shared  -symbolic
186 -Wl,@var{option}  -Xlinker @var{option}
187 -u @var{symbol}
188 @end smallexample
190 @item Directory Options
191 @xref{Directory Options,,Options for Directory Search}.
192 @smallexample
193 -B@var{prefix}  -I@var{dir}  -I-  -L@var{dir}  -specs=@var{file}
194 @end smallexample
196 @item Target Options
197 @c I wrote this xref this way to avoid overfull hbox. -- rms
198 @xref{Target Options}.
199 @smallexample
200 -b @var{machine}  -V @var{version}
201 @end smallexample
203 @item Machine Dependent Options
204 @xref{Submodel Options,,Hardware Models and Configurations}.
205 @smallexample
206 @emph{M680x0 Options}
207 -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
208 -m68060  -m5200  -m68881  -mbitfield  -mc68000  -mc68020  
209 -mfpa -mnobitfield  -mrtd  -mshort  -msoft-float  
210 -malign-int
212 @emph{VAX Options}
213 -mg  -mgnu  -munix
215 @emph{SPARC Options}
216 -mcpu=@var{cpu type}
217 -mtune=@var{cpu type}
218 -mcmodel=@var{code model}
219 -malign-jumps=@var{num}  -malign-loops=@var{num}
220 -malign-functions=@var{num}
221 -m32  -m64
222 -mapp-regs  -mbroken-saverestore  -mcypress  -mepilogue
223 -mflat  -mfpu  -mhard-float  -mhard-quad-float
224 -mimpure-text  -mlive-g0  -mno-app-regs  -mno-epilogue
225 -mno-flat  -mno-fpu  -mno-impure-text
226 -mno-stack-bias  -mno-unaligned-doubles
227 -msoft-float  -msoft-quad-float  -msparclite  -mstack-bias
228 -msupersparc  -munaligned-doubles  -mv8
230 @emph{Convex Options}
231 -mc1  -mc2  -mc32  -mc34  -mc38
232 -margcount  -mnoargcount
233 -mlong32  -mlong64
234 -mvolatile-cache  -mvolatile-nocache
236 @emph{AMD29K Options}
237 -m29000  -m29050  -mbw  -mnbw  -mdw  -mndw
238 -mlarge  -mnormal  -msmall
239 -mkernel-registers  -mno-reuse-arg-regs
240 -mno-stack-check  -mno-storem-bug
241 -mreuse-arg-regs  -msoft-float  -mstack-check
242 -mstorem-bug  -muser-registers
244 @emph{ARM Options}
245 -mapcs-frame  -mapcs-26  -mapcs-32
246 -mlittle-endian  -mbig-endian  -mwords-little-endian
247 -mshort-load-bytes  -mno-short-load-bytes
248 -msoft-float  -mhard-float
249 -mbsd  -mxopen  -mno-symrename
251 @emph{MN10300 Options}
252 -mmult-bug
253 -mno-mult-bug
255 @emph{M32R/D Options}
256 -mcode-model=@var{model type}  -msdata=@var{sdata type}
257 -G @var{num}
259 @emph{M88K Options}
260 -m88000  -m88100  -m88110  -mbig-pic
261 -mcheck-zero-division  -mhandle-large-shift
262 -midentify-revision  -mno-check-zero-division
263 -mno-ocs-debug-info  -mno-ocs-frame-position
264 -mno-optimize-arg-area  -mno-serialize-volatile
265 -mno-underscores  -mocs-debug-info
266 -mocs-frame-position  -moptimize-arg-area
267 -mserialize-volatile  -mshort-data-@var{num}  -msvr3
268 -msvr4  -mtrap-large-shift  -muse-div-instruction
269 -mversion-03.00  -mwarn-passed-structs
271 @emph{RS/6000 and PowerPC Options}
272 -mcpu=@var{cpu type}
273 -mtune=@var{cpu type}
274 -mpower  -mno-power  -mpower2  -mno-power2
275 -mpowerpc  -mno-powerpc
276 -mpowerpc-gpopt  -mno-powerpc-gpopt
277 -mpowerpc-gfxopt  -mno-powerpc-gfxopt
278 -mnew-mnemonics  -mno-new-mnemonics
279 -mfull-toc   -mminimal-toc  -mno-fop-in-toc  -mno-sum-in-toc
280 -maix64  -maix32  -mxl-call  -mno-xl-call  -mthreads  -mpe
281 -msoft-float  -mhard-float  -mmultiple  -mno-multiple
282 -mstring  -mno-string  -mupdate  -mno-update
283 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
284 -mstrict-align  -mno-strict-align  -mrelocatable
285 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
286 -mtoc  -mno-toc  -mtraceback  -mno-traceback
287 -mlittle  -mlittle-endian  -mbig  -mbig-endian
288 -mcall-aix  -mcall-sysv  -mprototype  -mno-prototype
289 -msim  -mmvme  -mads  -myellowknife  -memb
290 -msdata  -msdata=@var{opt}  -G @var{num}
292 @emph{RT Options}
293 -mcall-lib-mul  -mfp-arg-in-fpregs  -mfp-arg-in-gregs
294 -mfull-fp-blocks  -mhc-struct-return  -min-line-mul
295 -mminimum-fp-blocks  -mnohc-struct-return
297 @emph{MIPS Options}
298 -mabicalls  -mcpu=@var{cpu type}  -membedded-data
299 -membedded-pic  -mfp32  -mfp64  -mgas  -mgp32  -mgp64
300 -mgpopt  -mhalf-pic  -mhard-float  -mint64  -mips1
301 -mips2  -mips3  -mlong64  -mlong-calls  -mmemcpy
302 -mmips-as  -mmips-tfile  -mno-abicalls
303 -mno-embedded-data  -mno-embedded-pic
304 -mno-gpopt  -mno-long-calls
305 -mno-memcpy  -mno-mips-tfile  -mno-rnames  -mno-stats
306 -mrnames  -msoft-float
307 -m4650  -msingle-float  -mmad
308 -mstats  -EL  -EB  -G @var{num}  -nocpp
310 @emph{i386 Options}
311 -mcpu=@var{cpu type}
312 -march=@var{cpu type}
313 -mieee-fp  -mno-fancy-math-387
314 -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib
315 -mno-wide-multiply  -mrtd  -malign-double
316 -mreg-alloc=@var{list}  -mregparm=@var{num}
317 -malign-jumps=@var{num}  -malign-loops=@var{num}
318 -malign-functions=@var{num}
320 @emph{HPPA Options}
321 -mbig-switch  -mdisable-fpregs  -mdisable-indexing  
322 -mfast-indirect-calls -mgas  -mjump-in-delay  
323 -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
324 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
325 -mno-jump-in-delay  -mno-long-load-store  
326 -mno-portable-runtime  -mno-soft-float  -mno-space  
327 -mno-space-regs  -msoft-float  -mpa-risc-1-0  
328 -mpa-risc-1-1  -mportable-runtime
329 -mschedule=@var{list}  -mspace  -mspace-regs
331 @emph{Intel 960 Options}
332 -m@var{cpu type}  -masm-compat  -mclean-linkage
333 -mcode-align  -mcomplex-addr  -mleaf-procedures
334 -mic-compat  -mic2.0-compat  -mic3.0-compat
335 -mintel-asm  -mno-clean-linkage  -mno-code-align
336 -mno-complex-addr  -mno-leaf-procedures
337 -mno-old-align  -mno-strict-align  -mno-tail-call
338 -mnumerics  -mold-align  -msoft-float  -mstrict-align
339 -mtail-call
341 @emph{DEC Alpha Options}
342 -mfp-regs  -mno-fp-regs -mno-soft-float  -msoft-float
343 -malpha-as -mgas
344 -mieee  -mieee-with-inexact  -mieee-conformant
345 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode}
346 -mtrap-precision=@var{mode}  -mbuild-constants
347 -mcpu=@var{cpu type}
348 -mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max
350 @emph{Clipper Options}
351 -mc300  -mc400
353 @emph{H8/300 Options}
354 -mrelax  -mh -ms -mint32  -malign-300
356 @emph{SH Options}
357 -m1  -m2  -m3  -m3e  -mb  -ml  -mrelax
359 @emph{System V Options}
360 -Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}
362 @emph{V850 Options}
363 -mlong-calls -mno-long-calls -mep -mno-ep
364 -mprolog-function -mno-prolog-function -mspace
365 -mtda=@var{n} -msda=@var{n} -mzda=@var{n}
366 -mv850 -mbig-switch
367 @end smallexample
369 @item Code Generation Options
370 @xref{Code Gen Options,,Options for Code Generation Conventions}.
371 @smallexample
372 -fcall-saved-@var{reg}  -fcall-used-@var{reg}
373 -ffixed-@var{reg}  -finhibit-size-directive
374 -fcheck-memory-usage  -fprefix-function-name
375 -fno-common  -fno-ident  -fno-gnu-linker
376 -fpcc-struct-return  -freg-struct-return
377 -fshared-data  -fpic  -fPIC  -fexceptions
378 -fshort-enums  -fshort-double
379 -fvolatile  -fvolatile-global  -fvolatile-static
380 -fverbose-asm  -fpack-struct  -fstack-check  +e0  +e1
381 @end smallexample
382 @end table
384 @menu
385 * Overall Options::     Controlling the kind of output:
386                         an executable, object files, assembler files,
387                         or preprocessed source.
388 * C Dialect Options::   Controlling the variant of C language compiled.
389 * C++ Dialect Options:: Variations on C++.
390 * Warning Options::     How picky should the compiler be?
391 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
392 * Optimize Options::    How much optimization?
393 * Preprocessor Options:: Controlling header files and macro definitions.
394                          Also, getting dependency information for Make.
395 * Assembler Options::   Passing options to the assembler.
396 * Link Options::        Specifying libraries and so on.
397 * Directory Options::   Where to find header files and libraries.
398                         Where to find the compiler executable files.
399 * Target Options::      Running a cross-compiler, or an old version of GNU CC.
400 @end menu
402 @node Overall Options
403 @section Options Controlling the Kind of Output
405 Compilation can involve up to four stages: preprocessing, compilation
406 proper, assembly and linking, always in that order.  The first three
407 stages apply to an individual source file, and end by producing an
408 object file; linking combines all the object files (those newly
409 compiled, and those specified as input) into an executable file.
411 @cindex file name suffix
412 For any given input file, the file name suffix determines what kind of
413 compilation is done:
415 @table @code
416 @item @var{file}.c
417 C source code which must be preprocessed.
419 @item @var{file}.i
420 C source code which should not be preprocessed.
422 @item @var{file}.ii
423 C++ source code which should not be preprocessed.
425 @item @var{file}.m
426 Objective-C source code.  Note that you must link with the library
427 @file{libobjc.a} to make an Objective-C program work.
429 @item @var{file}.h
430 C header file (not to be compiled or linked).
432 @item @var{file}.cc
433 @itemx @var{file}.cxx
434 @itemx @var{file}.cpp
435 @itemx @var{file}.C
436 C++ source code which must be preprocessed.  Note that in @samp{.cxx},
437 the last two letters must both be literally @samp{x}.  Likewise,
438 @samp{.C} refers to a literal capital C.
440 @item @var{file}.s
441 Assembler code.
443 @item @var{file}.S
444 Assembler code which must be preprocessed.
446 @item @var{other}
447 An object file to be fed straight into linking.
448 Any file name with no recognized suffix is treated this way.
449 @end table
451 You can specify the input language explicitly with the @samp{-x} option:
453 @table @code
454 @item -x @var{language}
455 Specify explicitly the @var{language} for the following input files
456 (rather than letting the compiler choose a default based on the file
457 name suffix).  This option applies to all following input files until
458 the next @samp{-x} option.  Possible values for @var{language} are:
459 @example
460 c  objective-c  c++
461 c-header  cpp-output  c++-cpp-output
462 assembler  assembler-with-cpp
463 @end example
465 @item -x none
466 Turn off any specification of a language, so that subsequent files are
467 handled according to their file name suffixes (as they are if @samp{-x}
468 has not been used at all).
469 @end table
471 If you only want some of the stages of compilation, you can use
472 @samp{-x} (or filename suffixes) to tell @code{gcc} where to start, and
473 one of the options @samp{-c}, @samp{-S}, or @samp{-E} to say where
474 @code{gcc} is to stop.  Note that some combinations (for example,
475 @samp{-x cpp-output -E} instruct @code{gcc} to do nothing at all.
477 @table @code
478 @item -c
479 Compile or assemble the source files, but do not link.  The linking
480 stage simply is not done.  The ultimate output is in the form of an
481 object file for each source file.
483 By default, the object file name for a source file is made by replacing
484 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
486 Unrecognized input files, not requiring compilation or assembly, are
487 ignored.
489 @item -S
490 Stop after the stage of compilation proper; do not assemble.  The output
491 is in the form of an assembler code file for each non-assembler input
492 file specified.
494 By default, the assembler file name for a source file is made by
495 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
497 Input files that don't require compilation are ignored.
499 @item -E
500 Stop after the preprocessing stage; do not run the compiler proper.  The
501 output is in the form of preprocessed source code, which is sent to the
502 standard output.
504 Input files which don't require preprocessing are ignored.
506 @cindex output file option
507 @item -o @var{file}
508 Place output in file @var{file}.  This applies regardless to whatever
509 sort of output is being produced, whether it be an executable file,
510 an object file, an assembler file or preprocessed C code.
512 Since only one output file can be specified, it does not make sense to
513 use @samp{-o} when compiling more than one input file, unless you are
514 producing an executable file as output.
516 If @samp{-o} is not specified, the default is to put an executable file
517 in @file{a.out}, the object file for @file{@var{source}.@var{suffix}} in
518 @file{@var{source}.o}, its assembler file in @file{@var{source}.s}, and
519 all preprocessed C source on standard output.@refill
521 @item -v
522 Print (on standard error output) the commands executed to run the stages
523 of compilation.  Also print the version number of the compiler driver
524 program and of the preprocessor and the compiler proper.
526 @item -pipe
527 Use pipes rather than temporary files for communication between the
528 various stages of compilation.  This fails to work on some systems where
529 the assembler is unable to read from a pipe; but the GNU assembler has
530 no trouble.
531 @end table
533 @node Invoking G++
534 @section Compiling C++ Programs
536 @cindex suffixes for C++ source
537 @cindex C++ source file suffixes
538 C++ source files conventionally use one of the suffixes @samp{.C},
539 @samp{.cc}, @samp{cpp}, or @samp{.cxx}; preprocessed C++ files use the
540 suffix @samp{.ii}.  GNU CC recognizes files with these names and
541 compiles them as C++ programs even if you call the compiler the same way
542 as for compiling C programs (usually with the name @code{gcc}).
544 @findex g++
545 @findex c++
546 However, C++ programs often require class libraries as well as a
547 compiler that understands the C++ language---and under some
548 circumstances, you might want to compile programs from standard input,
549 or otherwise without a suffix that flags them as C++ programs.
550 @code{g++} is a program that calls GNU CC with the default language
551 set to C++, and automatically specifies linking against the C++
552 library.
553 @cindex @code{g++ 1.@var{xx}}
554 @cindex @code{g++}, separate compiler
555 @cindex @code{g++} older version
556 @footnote{Prior to release 2 of the compiler,
557 there was a separate @code{g++} compiler.  That version was based on GNU
558 CC, but not integrated with it.  Versions of @code{g++} with a
559 @samp{1.@var{xx}} version number---for example, @code{g++} version 1.37
560 or 1.42---are much less reliable than the versions integrated with GCC
561 2.  Moreover, combining G++ @samp{1.@var{xx}} with a version 2 GCC will
562 simply not work.} On many systems, the script @code{g++} is also
563 installed with the name @code{c++}.
565 @cindex invoking @code{g++}
566 When you compile C++ programs, you may specify many of the same
567 command-line options that you use for compiling programs in any
568 language; or command-line options meaningful for C and related
569 languages; or options that are meaningful only for C++ programs.
570 @xref{C Dialect Options,,Options Controlling C Dialect}, for
571 explanations of options for languages related to C.
572 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
573 explanations of options that are meaningful only for C++ programs.
575 @node C Dialect Options
576 @section Options Controlling C Dialect
577 @cindex dialect options
578 @cindex language dialect options
579 @cindex options, dialect
581 The following options control the dialect of C (or languages derived
582 from C, such as C++ and Objective C) that the compiler accepts:
584 @table @code
585 @cindex ANSI support
586 @item -ansi
587 Support all ANSI standard C programs.
589 This turns off certain features of GNU C that are incompatible with ANSI
590 C, such as the @code{asm}, @code{inline} and @code{typeof} keywords, and
591 predefined macros such as @code{unix} and @code{vax} that identify the
592 type of system you are using.  It also enables the undesirable and
593 rarely used ANSI trigraph feature, and it disables recognition of C++
594 style @samp{//} comments.
596 The alternate keywords @code{__asm__}, @code{__extension__},
597 @code{__inline__} and @code{__typeof__} continue to work despite
598 @samp{-ansi}.  You would not want to use them in an ANSI C program, of
599 course, but it is useful to put them in header files that might be included
600 in compilations done with @samp{-ansi}.  Alternate predefined macros
601 such as @code{__unix__} and @code{__vax__} are also available, with or
602 without @samp{-ansi}.
604 The @samp{-ansi} option does not cause non-ANSI programs to be
605 rejected gratuitously.  For that, @samp{-pedantic} is required in
606 addition to @samp{-ansi}.  @xref{Warning Options}.
608 The macro @code{__STRICT_ANSI__} is predefined when the @samp{-ansi}
609 option is used.  Some header files may notice this macro and refrain
610 from declaring certain functions or defining certain macros that the
611 ANSI standard doesn't call for; this is to avoid interfering with any
612 programs that might use these names for other things.
614 The functions @code{alloca}, @code{abort}, @code{exit}, and
615 @code{_exit} are not builtin functions when @samp{-ansi} is used.
617 @item -fno-asm
618 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
619 keyword, so that code can use these words as identifiers.  You can use
620 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
621 instead.  @samp{-ansi} implies @samp{-fno-asm}.
623 In C++, this switch only affects the @code{typeof} keyword, since
624 @code{asm} and @code{inline} are standard keywords.  You may want to
625 use the @samp{-fno-gnu-keywords} flag instead, as it also disables the
626 other, C++-specific, extension keywords such as @code{headof}.
628 @item -fno-builtin
629 @cindex builtin functions
630 @findex abort
631 @findex abs
632 @findex alloca
633 @findex cos
634 @findex exit
635 @findex fabs
636 @findex ffs
637 @findex labs
638 @findex memcmp
639 @findex memcpy
640 @findex sin
641 @findex sqrt
642 @findex strcmp
643 @findex strcpy
644 @findex strlen
645 Don't recognize builtin functions that do not begin with @samp{__builtin_}
646 as prefix.  Currently, the functions affected include @code{abort},
647 @code{abs}, @code{alloca}, @code{cos}, @code{exit}, @code{fabs},
648 @code{ffs}, @code{labs}, @code{memcmp}, @code{memcpy}, @code{sin},
649 @code{sqrt}, @code{strcmp}, @code{strcpy}, and @code{strlen}.
651 GCC normally generates special code to handle certain builtin functions
652 more efficiently; for instance, calls to @code{alloca} may become single
653 instructions that adjust the stack directly, and calls to @code{memcpy}
654 may become inline copy loops.  The resulting code is often both smaller
655 and faster, but since the function calls no longer appear as such, you
656 cannot set a breakpoint on those calls, nor can you change the behavior
657 of the functions by linking with a different library.
659 The @samp{-ansi} option prevents @code{alloca} and @code{ffs} from being
660 builtin functions, since these functions do not have an ANSI standard
661 meaning.
663 @item -fhosted
664 @cindex hosted environment
666 Assert that compilation takes place in a hosted environment.  This implies
667 @samp{-fbuiltin}.  A hosted environment is one in which the
668 entire standard library is available, and in which @code{main} has a return
669 type of @code{int}.  Examples are nearly everything except a kernel.
670 This is equivalent to @samp{-fno-freestanding}.
672 @item -ffreestanding
673 @cindex hosted environment
675 Assert that compilation takes place in a freestanding environment.  This
676 implies @samp{-fno-builtin}.  A freestanding environment
677 is one in which the standard library may not exist, and program startup may
678 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
679 This is equivalent to @samp{-fno-hosted}.
681 @item -trigraphs
682 Support ANSI C trigraphs.  You don't want to know about this
683 brain-damage.  The @samp{-ansi} option implies @samp{-trigraphs}.
685 @cindex traditional C language
686 @cindex C language, traditional
687 @item -traditional
688 Attempt to support some aspects of traditional C compilers.
689 Specifically:
691 @itemize @bullet
692 @item
693 All @code{extern} declarations take effect globally even if they
694 are written inside of a function definition.  This includes implicit
695 declarations of functions.
697 @item
698 The newer keywords @code{typeof}, @code{inline}, @code{signed}, @code{const}
699 and @code{volatile} are not recognized.  (You can still use the
700 alternative keywords such as @code{__typeof__}, @code{__inline__}, and
701 so on.)
703 @item
704 Comparisons between pointers and integers are always allowed.
706 @item
707 Integer types @code{unsigned short} and @code{unsigned char} promote
708 to @code{unsigned int}.
710 @item
711 Out-of-range floating point literals are not an error.
713 @item
714 Certain constructs which ANSI regards as a single invalid preprocessing
715 number, such as @samp{0xe-0xd}, are treated as expressions instead.
717 @item
718 String ``constants'' are not necessarily constant; they are stored in
719 writable space, and identical looking constants are allocated
720 separately.  (This is the same as the effect of
721 @samp{-fwritable-strings}.)
723 @cindex @code{longjmp} and automatic variables
724 @item
725 All automatic variables not declared @code{register} are preserved by
726 @code{longjmp}.  Ordinarily, GNU C follows ANSI C: automatic variables
727 not declared @code{volatile} may be clobbered.
729 @item
730 @kindex \x
731 @kindex \a
732 @cindex escape sequences, traditional
733 The character escape sequences @samp{\x} and @samp{\a} evaluate as the
734 literal characters @samp{x} and @samp{a} respectively.  Without
735 @w{@samp{-traditional}}, @samp{\x} is a prefix for the hexadecimal
736 representation of a character, and @samp{\a} produces a bell.
738 @item
739 In C++ programs, assignment to @code{this} is permitted with
740 @samp{-traditional}.  (The option @samp{-fthis-is-variable} also has
741 this effect.)
742 @end itemize
744 You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
745 if your program uses names that are normally GNU C builtin functions for
746 other purposes of its own.
748 You cannot use @samp{-traditional} if you include any header files that
749 rely on ANSI C features.  Some vendors are starting to ship systems with
750 ANSI C header files and you cannot use @samp{-traditional} on such
751 systems to compile files that include any system headers.
753 The @samp{-traditional} option also enables @samp{-traditional-cpp},
754 which is described next.
756 @item -traditional-cpp
757 Attempt to support some aspects of traditional C preprocessors.
758 Specifically:
760 @itemize @bullet
761 @item
762 Comments convert to nothing at all, rather than to a space.  This allows
763 traditional token concatenation.
765 @item
766 In a preprocessing directive, the @samp{#} symbol must appear as the first
767 character of a line.
769 @item
770 Macro arguments are recognized within string constants in a macro
771 definition (and their values are stringified, though without additional
772 quote marks, when they appear in such a context).  The preprocessor
773 always considers a string constant to end at a newline.
775 @item
776 @cindex detecting @w{@samp{-traditional}}
777 The predefined macro @code{__STDC__} is not defined when you use
778 @samp{-traditional}, but @code{__GNUC__} is (since the GNU extensions
779 which @code{__GNUC__} indicates are not affected by
780 @samp{-traditional}).  If you need to write header files that work
781 differently depending on whether @samp{-traditional} is in use, by
782 testing both of these predefined macros you can distinguish four
783 situations: GNU C, traditional GNU C, other ANSI C compilers, and other
784 old C compilers.  The predefined macro @code{__STDC_VERSION__} is also
785 not defined when you use @samp{-traditional}.  @xref{Standard
786 Predefined,,Standard Predefined Macros,cpp.info,The C Preprocessor},
787 for more discussion of these and other predefined macros.
789 @item
790 @cindex string constants vs newline
791 @cindex newline vs string constants
792 The preprocessor considers a string constant to end at a newline (unless
793 the newline is escaped with @samp{\}).  (Without @w{@samp{-traditional}},
794 string constants can contain the newline character as typed.)
795 @end itemize
797 @item -fcond-mismatch
798 Allow conditional expressions with mismatched types in the second and
799 third arguments.  The value of such an expression is void.
801 @item -funsigned-char
802 Let the type @code{char} be unsigned, like @code{unsigned char}.
804 Each kind of machine has a default for what @code{char} should
805 be.  It is either like @code{unsigned char} by default or like
806 @code{signed char} by default.
808 Ideally, a portable program should always use @code{signed char} or
809 @code{unsigned char} when it depends on the signedness of an object.
810 But many programs have been written to use plain @code{char} and
811 expect it to be signed, or expect it to be unsigned, depending on the
812 machines they were written for.  This option, and its inverse, let you
813 make such a program work with the opposite default.
815 The type @code{char} is always a distinct type from each of
816 @code{signed char} or @code{unsigned char}, even though its behavior
817 is always just like one of those two.
819 @item -fsigned-char
820 Let the type @code{char} be signed, like @code{signed char}.
822 Note that this is equivalent to @samp{-fno-unsigned-char}, which is
823 the negative form of @samp{-funsigned-char}.  Likewise, the option
824 @samp{-fno-signed-char} is equivalent to @samp{-funsigned-char}.
826 You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
827 if your program uses names that are normally GNU C builtin functions for
828 other purposes of its own.
830 You cannot use @samp{-traditional} if you include any header files that
831 rely on ANSI C features.  Some vendors are starting to ship systems with
832 ANSI C header files and you cannot use @samp{-traditional} on such
833 systems to compile files that include any system headers.
835 @item -fsigned-bitfields
836 @itemx -funsigned-bitfields
837 @itemx -fno-signed-bitfields
838 @itemx -fno-unsigned-bitfields
839 These options control whether a bitfield is signed or unsigned, when the
840 declaration does not use either @code{signed} or @code{unsigned}.  By
841 default, such a bitfield is signed, because this is consistent: the
842 basic integer types such as @code{int} are signed types.
844 However, when @samp{-traditional} is used, bitfields are all unsigned
845 no matter what.
847 @item -fwritable-strings
848 Store string constants in the writable data segment and don't uniquize
849 them.  This is for compatibility with old programs which assume they can
850 write into string constants.  The option @samp{-traditional} also has
851 this effect.
853 Writing into string constants is a very bad idea; ``constants'' should
854 be constant.
856 @item -fallow-single-precision
857 Do not promote single precision math operations to double precision,
858 even when compiling with @samp{-traditional}.
860 Traditional K&R C promotes all floating point operations to double
861 precision, regardless of the sizes of the operands.   On the
862 architecture for which you are compiling, single precision may be faster
863 than double precision.   If you must use @samp{-traditional}, but want
864 to use single precision operations when the operands are single
865 precision, use this option.   This option has no effect when compiling
866 with ANSI or GNU C conventions (the default).
868 @end table
870 @node C++ Dialect Options
871 @section Options Controlling C++ Dialect
873 @cindex compiler options, C++
874 @cindex C++ options, command line
875 @cindex options, C++
876 This section describes the command-line options that are only meaningful
877 for C++ programs; but you can also use most of the GNU compiler options
878 regardless of what language your program is in.  For example, you
879 might compile a file @code{firstClass.C} like this:
881 @example
882 g++ -g -felide-constructors -O -c firstClass.C
883 @end example
885 @noindent
886 In this example, only @samp{-felide-constructors} is an option meant
887 only for C++ programs; you can use the other options with any
888 language supported by GNU CC.
890 Here is a list of options that are @emph{only} for compiling C++ programs:
892 @table @code
893 @item -fno-access-control
894 Turn off all access checking.  This switch is mainly useful for working
895 around bugs in the access control code.
897 @item -fall-virtual
898 Treat all possible member functions as virtual, implicitly.
899 All member functions (except for constructor functions and @code{new} or
900 @code{delete} member operators) are treated as virtual functions of the
901 class where they appear.
903 This does not mean that all calls to these member functions will be made
904 through the internal table of virtual functions.  Under some
905 circumstances, the compiler can determine that a call to a given virtual
906 function can be made directly; in these cases the calls are direct in
907 any case.
909 @item -fcheck-new
910 Check that the pointer returned by @code{operator new} is non-null
911 before attempting to modify the storage allocated.  The current Working
912 Paper requires that @code{operator new} never return a null pointer, so
913 this check is normally unnecessary.
915 @item -fconserve-space
916 Put uninitialized or runtime-initialized global variables into the
917 common segment, as C does.  This saves space in the executable at the
918 cost of not diagnosing duplicate definitions.  If you compile with this
919 flag and your program mysteriously crashes after @code{main()} has
920 completed, you may have an object that is being destroyed twice because
921 two definitions were merged.
923 @item -fdollars-in-identifiers
924 Accept @samp{$} in identifiers.  You can also explicitly prohibit use of
925 @samp{$} with the option @samp{-fno-dollars-in-identifiers}.  (GNU C allows
926 @samp{$} by default on most target systems, but there are a few exceptions.)
927 Traditional C allowed the character @samp{$} to form part of
928 identifiers.  However, ANSI C and C++ forbid @samp{$} in identifiers.
930 @item -fenum-int-equiv
931 Anachronistically permit implicit conversion of @code{int} to
932 enumeration types.  Current C++ allows conversion of @code{enum} to
933 @code{int}, but not the other way around.
935 @item -fexternal-templates
936 Cause template instantiations to obey @samp{#pragma interface} and
937 @samp{implementation}; template instances are emitted or not according
938 to the location of the template definition.  @xref{Template
939 Instantiation}, for more information.
941 This option is deprecated.
943 @item -falt-external-templates
944 Similar to -fexternal-templates, but template instances are emitted or
945 not according to the place where they are first instantiated.
946 @xref{Template Instantiation}, for more information.
948 This option is deprecated.
950 @item -ffor-scope
951 @itemx -fno-for-scope
952 If -ffor-scope is specified, the scope of variables declared in
953 a @i{for-init-statement} is limited to the @samp{for} loop itself,
954 as specified by the draft C++ standard.
955 If -fno-for-scope is specified, the scope of variables declared in
956 a @i{for-init-statement} extends to the end of the enclosing scope,
957 as was the case in old versions of gcc, and other (traditional)
958 implementations of C++.
960 The default if neither flag is given to follow the standard,
961 but to allow and give a warning for old-style code that would
962 otherwise be invalid, or have different behavior.
964 @item -fno-gnu-keywords
965 Do not recognize @code{classof}, @code{headof}, @code{signature},
966 @code{sigof} or @code{typeof} as a keyword, so that code can use these
967 words as identifiers.  You can use the keywords @code{__classof__},
968 @code{__headof__}, @code{__signature__}, @code{__sigof__}, and
969 @code{__typeof__} instead.  @samp{-ansi} implies
970 @samp{-fno-gnu-keywords}.
972 @item -fguiding-decls
973 Treat a function declaration with the same type as a potential function
974 template instantiation as though it declares that instantiation, not a
975 normal function.  If a definition is given for the function later in the
976 translation unit (or another translation unit if the target supports
977 weak symbols), that definition will be used; otherwise the template will
978 be instantiated.  This behavior reflects the C++ language prior to
979 September 1996, when guiding declarations were removed.
981 This option implies @samp{-fname-mangling-version-0}, and will not work
982 with other name mangling versions.
984 @item -fno-implicit-templates
985 Never emit code for templates which are instantiated implicitly (i.e. by
986 use); only emit code for explicit instantiations.  @xref{Template
987 Instantiation}, for more information.
989 @item -fhandle-signatures
990 Recognize the @code{signature} and @code{sigof} keywords for specifying
991 abstract types.  The default (@samp{-fno-handle-signatures}) is not to
992 recognize them.  @xref{C++ Signatures, Type Abstraction using
993 Signatures}.
995 @item -fhuge-objects
996 Support virtual function calls for objects that exceed the size
997 representable by a @samp{short int}.  Users should not use this flag by
998 default; if you need to use it, the compiler will tell you so.  If you
999 compile any of your code with this flag, you must compile @emph{all} of
1000 your code with this flag (including the C++ library, if you use it).
1002 This flag is not useful when compiling with -fvtable-thunks.
1004 @item -fno-implement-inlines
1005 To save space, do not emit out-of-line copies of inline functions
1006 controlled by @samp{#pragma implementation}.  This will cause linker
1007 errors if these functions are not inlined everywhere they are called.
1009 @item -fmemoize-lookups
1010 @itemx -fsave-memoized
1011 Use heuristics to compile faster.  These heuristics are not enabled by
1012 default, since they are only effective for certain input files.  Other
1013 input files compile more slowly.
1015 The first time the compiler must build a call to a member function (or
1016 reference to a data member), it must (1) determine whether the class
1017 implements member functions of that name; (2) resolve which member
1018 function to call (which involves figuring out what sorts of type
1019 conversions need to be made); and (3) check the visibility of the member
1020 function to the caller.  All of this adds up to slower compilation.
1021 Normally, the second time a call is made to that member function (or
1022 reference to that data member), it must go through the same lengthy
1023 process again.  This means that code like this:
1025 @smallexample
1026 cout << "This " << p << " has " << n << " legs.\n";
1027 @end smallexample
1029 @noindent
1030 makes six passes through all three steps.  By using a software cache, a
1031 ``hit'' significantly reduces this cost.  Unfortunately, using the cache
1032 introduces another layer of mechanisms which must be implemented, and so
1033 incurs its own overhead.  @samp{-fmemoize-lookups} enables the software
1034 cache.
1036 Because access privileges (visibility) to members and member functions
1037 may differ from one function context to the next, G++ may need to flush
1038 the cache.  With the @samp{-fmemoize-lookups} flag, the cache is flushed
1039 after every function that is compiled.  The @samp{-fsave-memoized} flag
1040 enables the same software cache, but when the compiler determines that
1041 the context of the last function compiled would yield the same access
1042 privileges of the next function to compile, it preserves the cache.
1043 This is most helpful when defining many member functions for the same
1044 class: with the exception of member functions which are friends of other
1045 classes, each member function has exactly the same access privileges as
1046 every other, and the cache need not be flushed.
1048 The code that implements these flags has rotted; you should probably
1049 avoid using them.
1051 @item -fstrict-prototype
1052 Within an @samp{extern "C"} linkage specification, treat a function
1053 declaration with no arguments, such as @samp{int foo ();}, as declaring
1054 the function to take no arguments.  Normally, such a declaration means
1055 that the function @code{foo} can take any combination of arguments, as
1056 in C.  @samp{-pedantic} implies @samp{-fstrict-prototype} unless
1057 overridden with @samp{-fno-strict-prototype}.
1059 This flag no longer affects declarations with C++ linkage.
1061 @item -fname-mangling-version-@var{n}
1062 Control the way in which names are mangled.  Version 0 is compatible
1063 with versions of g++ before 2.8.  Version 1 is the default.  Version 1
1064 will allow correct mangling of function templates.  For example, 
1065 version 0 mangling does not mangle foo<int, double> and foo<int, char>
1066 given this declaration:
1068 @example
1069 template <class T, class U> void foo(T t);
1070 @end example
1072 @item -fno-nonnull-objects
1073 Don't assume that a reference is initialized to refer to a valid object.
1074 Although the current C++ Working Paper prohibits null references, some
1075 old code may rely on them, and you can use @samp{-fno-nonnull-objects}
1076 to turn on checking.
1078 At the moment, the compiler only does this checking for conversions to
1079 virtual base classes.
1081 @item -foperator-names
1082 Recognize the operator name keywords @code{and}, @code{bitand},
1083 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1084 synonyms for the symbols they refer to.  @samp{-ansi} implies
1085 @samp{-foperator-names}.
1087 @item -fthis-is-variable
1088 Permit assignment to @code{this}.  The incorporation of user-defined
1089 free store management into C++ has made assignment to @samp{this} an
1090 anachronism.  Therefore, by default it is invalid to assign to
1091 @code{this} within a class member function; that is, GNU C++ treats
1092 @samp{this} in a member function of class @code{X} as a non-lvalue of
1093 type @samp{X *}.  However, for backwards compatibility, you can make it
1094 valid with @samp{-fthis-is-variable}.
1096 @item -fvtable-thunks
1097 Use @samp{thunks} to implement the virtual function dispatch table
1098 (@samp{vtable}).  The traditional (cfront-style) approach to
1099 implementing vtables was to store a pointer to the function and two
1100 offsets for adjusting the @samp{this} pointer at the call site.  Newer
1101 implementations store a single pointer to a @samp{thunk} function which
1102 does any necessary adjustment and then calls the target function.
1104 This option also enables a heuristic for controlling emission of
1105 vtables; if a class has any non-inline virtual functions, the vtable
1106 will be emitted in the translation unit containing the first one of
1107 those.
1109 @item -ftemplate-depth-@var{n}
1110 Set the maximum instantiation depth for template classes to @var{n}.
1111 A limit on the template instantiation depth is needed to detect
1112 endless recursions during template class instantiation. ANSI/ISO C++
1113 conforming programs must not rely on a maximum depth greater than 17.
1115 @item -nostdinc++
1116 Do not search for header files in the standard directories specific to
1117 C++, but do still search the other standard directories.  (This option
1118 is used when building the C++ library.)
1120 @item -traditional
1121 For C++ programs (in addition to the effects that apply to both C and
1122 C++), this has the same effect as @samp{-fthis-is-variable}.
1123 @xref{C Dialect Options,, Options Controlling C Dialect}.
1124 @end table
1126 In addition, these optimization, warning, and code generation options
1127 have meanings only for C++ programs:
1129 @table @code
1130 @item -fno-default-inline
1131 Do not assume @samp{inline} for functions defined inside a class scope.
1132 @xref{Optimize Options,,Options That Control Optimization}.
1134 @item -Wold-style-cast
1135 @itemx -Woverloaded-virtual
1136 @itemx -Wtemplate-debugging
1137 Warnings that apply only to C++ programs.  @xref{Warning
1138 Options,,Options to Request or Suppress Warnings}.
1140 @item -Weffc++
1141 Warn about violation of some style rules from Effective C++ by Scott Myers.
1143 @item +e@var{n}
1144 Control how virtual function definitions are used, in a fashion
1145 compatible with @code{cfront} 1.x.  @xref{Code Gen Options,,Options for
1146 Code Generation Conventions}.
1147 @end table
1149 @node Warning Options
1150 @section Options to Request or Suppress Warnings
1151 @cindex options to control warnings
1152 @cindex warning messages
1153 @cindex messages, warning
1154 @cindex suppressing warnings
1156 Warnings are diagnostic messages that report constructions which
1157 are not inherently erroneous but which are risky or suggest there
1158 may have been an error.
1160 You can request many specific warnings with options beginning @samp{-W},
1161 for example @samp{-Wimplicit} to request warnings on implicit
1162 declarations.  Each of these specific warning options also has a
1163 negative form beginning @samp{-Wno-} to turn off warnings;
1164 for example, @samp{-Wno-implicit}.  This manual lists only one of the
1165 two forms, whichever is not the default.
1167 These options control the amount and kinds of warnings produced by GNU
1170 @table @code
1171 @cindex syntax checking
1172 @item -fsyntax-only
1173 Check the code for syntax errors, but don't do anything beyond that.
1175 @item -pedantic
1176 Issue all the warnings demanded by strict ANSI standard C; reject
1177 all programs that use forbidden extensions.
1179 Valid ANSI standard C programs should compile properly with or without
1180 this option (though a rare few will require @samp{-ansi}).  However,
1181 without this option, certain GNU extensions and traditional C features
1182 are supported as well.  With this option, they are rejected.
1184 @samp{-pedantic} does not cause warning messages for use of the
1185 alternate keywords whose names begin and end with @samp{__}.  Pedantic
1186 warnings are also disabled in the expression that follows
1187 @code{__extension__}.  However, only system header files should use
1188 these escape routes; application programs should avoid them.
1189 @xref{Alternate Keywords}.
1191 This option is not intended to be @i{useful}; it exists only to satisfy
1192 pedants who would otherwise claim that GNU CC fails to support the ANSI
1193 standard.
1195 Some users try to use @samp{-pedantic} to check programs for strict ANSI
1196 C conformance.  They soon find that it does not do quite what they want:
1197 it finds some non-ANSI practices, but not all---only those for which
1198 ANSI C @emph{requires} a diagnostic.
1200 A feature to report any failure to conform to ANSI C might be useful in
1201 some instances, but would require considerable additional work and would
1202 be quite different from @samp{-pedantic}.  We recommend, rather, that
1203 users take advantage of the extensions of GNU C and disregard the
1204 limitations of other compilers.  Aside from certain supercomputers and
1205 obsolete small machines, there is less and less reason ever to use any
1206 other C compiler other than for bootstrapping GNU CC.
1208 @item -pedantic-errors
1209 Like @samp{-pedantic}, except that errors are produced rather than
1210 warnings.
1212 @item -w
1213 Inhibit all warning messages.
1215 @item -Wno-import
1216 Inhibit warning messages about the use of @samp{#import}.
1218 @item -Wchar-subscripts
1219 Warn if an array subscript has type @code{char}.  This is a common cause
1220 of error, as programmers often forget that this type is signed on some
1221 machines.
1223 @item -Wcomment
1224 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
1225 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
1227 @item -Wformat
1228 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
1229 the arguments supplied have types appropriate to the format string
1230 specified.
1232 @item -Wimplicit-int
1233 Warn when a declaration does not specify a type.
1235 @item -Wimplicit-function-declaration
1236 @itemx -Werror-implicit-function-declaration
1237 Give a warning (or error) whenever a function is used before being
1238 declared.
1240 @item -Wimplicit
1241 Same as @samp{-Wimplicit-int} and @samp{-Wimplicit-function-}@*
1242 @samp{declaration}.
1244 @item -Wmain
1245 Warn if the type of @samp{main} is suspicious.  @samp{main} should be a
1246 function with external linkage, returning int, taking either zero
1247 arguments, two, or three arguments of appropriate types.
1248   
1249 @item -Wparentheses
1250 Warn if parentheses are omitted in certain contexts, such
1251 as when there is an assignment in a context where a truth value
1252 is expected, or when operators are nested whose precedence people
1253 often get confused about.
1255 Also warn about constructions where there may be confusion to which
1256 @code{if} statement an @code{else} branch belongs.  Here is an example of
1257 such a case:
1259 @smallexample
1261   if (a)
1262     if (b)
1263       foo ();
1264   else
1265     bar ();
1267 @end smallexample
1269 In C, every @code{else} branch belongs to the innermost possible @code{if}
1270 statement, which in this example is @code{if (b)}.  This is often not
1271 what the programmer expected, as illustrated in the above example by
1272 indentation the programmer chose.  When there is the potential for this
1273 confusion, GNU C will issue a warning when this flag is specified.
1274 To eliminate the warning, add explicit braces around the innermost
1275 @code{if} statement so there is no way the @code{else} could belong to
1276 the enclosing @code{if}.  The resulting code would look like this:
1278 @smallexample
1280   if (a)
1281     @{
1282       if (b)
1283         foo ();
1284       else
1285         bar ();
1286     @}
1288 @end smallexample
1290 @item -Wreturn-type
1291 Warn whenever a function is defined with a return-type that defaults
1292 to @code{int}.  Also warn about any @code{return} statement with no
1293 return-value in a function whose return-type is not @code{void}.
1295 @item -Wswitch
1296 Warn whenever a @code{switch} statement has an index of enumeral type
1297 and lacks a @code{case} for one or more of the named codes of that
1298 enumeration.  (The presence of a @code{default} label prevents this
1299 warning.)  @code{case} labels outside the enumeration range also
1300 provoke warnings when this option is used.
1302 @item -Wtrigraphs
1303 Warn if any trigraphs are encountered (assuming they are enabled).
1305 @item -Wunused
1306 Warn whenever a variable is unused aside from its declaration,
1307 whenever a function is declared static but never defined, whenever a
1308 label is declared but not used, and whenever a statement computes a
1309 result that is explicitly not used.
1311 In order to get a warning about an unused function parameter, you must
1312 specify both @samp{-W} and @samp{-Wunused}.
1314 To suppress this warning for an expression, simply cast it to void.  For
1315 unused variables and parameters, use the @samp{unused} attribute
1316 (@pxref{Variable Attributes}).
1318 @item -Wuninitialized
1319 Warn if an automatic variable is used without first being initialized or
1320 if a variable may be clobbered by a @code{setjmp} call.
1322 These warnings are possible only in optimizing compilation,
1323 because they require data flow information that is computed only
1324 when optimizing.  If you don't specify @samp{-O}, you simply won't
1325 get these warnings.
1327 These warnings occur only for variables that are candidates for
1328 register allocation.  Therefore, they do not occur for a variable that
1329 is declared @code{volatile}, or whose address is taken, or whose size
1330 is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
1331 structures, unions or arrays, even when they are in registers.
1333 Note that there may be no warning about a variable that is used only
1334 to compute a value that itself is never used, because such
1335 computations may be deleted by data flow analysis before the warnings
1336 are printed.
1338 These warnings are made optional because GNU CC is not smart
1339 enough to see all the reasons why the code might be correct
1340 despite appearing to have an error.  Here is one example of how
1341 this can happen:
1343 @smallexample
1345   int x;
1346   switch (y)
1347     @{
1348     case 1: x = 1;
1349       break;
1350     case 2: x = 4;
1351       break;
1352     case 3: x = 5;
1353     @}
1354   foo (x);
1356 @end smallexample
1358 @noindent
1359 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
1360 always initialized, but GNU CC doesn't know this.  Here is
1361 another common case:
1363 @smallexample
1365   int save_y;
1366   if (change_y) save_y = y, y = new_y;
1367   @dots{}
1368   if (change_y) y = save_y;
1370 @end smallexample
1372 @noindent
1373 This has no bug because @code{save_y} is used only if it is set.
1375 Some spurious warnings can be avoided if you declare all the functions
1376 you use that never return as @code{noreturn}.  @xref{Function
1377 Attributes}.
1379 @cindex @code{longjmp} warnings
1380 A nonvolatile automatic variable might be changed by a call to
1381 @code{longjmp}.  These warnings as well are possible only in
1382 optimizing compilation.
1384 The compiler sees only the calls to @code{setjmp}.  It cannot know
1385 where @code{longjmp} will be called; in fact, a signal handler could
1386 call it at any point in the code.  As a result, you may get a warning
1387 even when there is in fact no problem because @code{longjmp} cannot
1388 in fact be called at the place which would cause a problem.
1390 @item -Wreorder (C++ only)
1391 @cindex reordering, warning
1392 @cindex warning for reordering of member initializers
1393 Warn when the order of member initializers given in the code does not
1394 match the order in which they must be executed.  For instance:
1396 @smallexample
1397 struct A @{
1398   int i;
1399   int j;
1400   A(): j (0), i (1) @{ @}
1402 @end smallexample
1404 Here the compiler will warn that the member initializers for @samp{i}
1405 and @samp{j} will be rearranged to match the declaration order of the
1406 members.
1408 @item -Wtemplate-debugging
1409 @cindex template debugging
1410 When using templates in a C++ program, warn if debugging is not yet
1411 fully available (C++ only).
1413 @item -Wall
1414 All of the above @samp{-W} options combined.  This enables all the
1415 warnings about constructions that some users consider questionable, and
1416 that are easy to avoid (or modify to prevent the warning), even in
1417 conjunction with macros.
1418 @end table
1420 The following @samp{-W@dots{}} options are not implied by @samp{-Wall}.
1421 Some of them warn about constructions that users generally do not
1422 consider questionable, but which occasionally you might wish to check
1423 for; others warn about constructions that are necessary or hard to avoid
1424 in some cases, and there is no simple way to modify the code to suppress
1425 the warning.
1427 @table @code
1428 @item -W
1429 Print extra warning messages for these events:
1431 @itemize @bullet
1432 @item
1433 A function can return either with or without a value.  (Falling
1434 off the end of the function body is considered returning without
1435 a value.)  For example, this function would evoke such a
1436 warning:
1438 @smallexample
1439 @group
1440 foo (a)
1442   if (a > 0)
1443     return a;
1445 @end group
1446 @end smallexample
1448 @item
1449 An expression-statement or the left-hand side of a comma expression
1450 contains no side effects.
1451 To suppress the warning, cast the unused expression to void.
1452 For example, an expression such as @samp{x[i,j]} will cause a warning,
1453 but @samp{x[(void)i,j]} will not.
1455 @item
1456 An unsigned value is compared against zero with @samp{<} or @samp{<=}.
1458 @item
1459 A comparison like @samp{x<=y<=z} appears; this is equivalent to
1460 @samp{(x<=y ? 1 : 0) <= z}, which is a different interpretation from
1461 that of ordinary mathematical notation.
1463 @item
1464 Storage-class specifiers like @code{static} are not the first things in
1465 a declaration.  According to the C Standard, this usage is obsolescent.
1467 @item
1468 If @samp{-Wall} or @samp{-Wunused} is also specified, warn about unused
1469 arguments.
1471 @item
1472 A comparison between signed and unsigned values could produce an
1473 incorrect result when the signed value is converted to unsigned.
1474 (But don't warn if @samp{-Wno-sign-compare} is also specified.)
1476 @item
1477 An aggregate has a partly bracketed initializer.
1478 For example, the following code would evoke such a warning,
1479 because braces are missing around the initializer for @code{x.h}:
1481 @smallexample
1482 struct s @{ int f, g; @};
1483 struct t @{ struct s h; int i; @};
1484 struct t x = @{ 1, 2, 3 @};
1485 @end smallexample
1486 @end itemize
1488 @item -Wtraditional
1489 Warn about certain constructs that behave differently in traditional and
1490 ANSI C.
1492 @itemize @bullet
1493 @item
1494 Macro arguments occurring within string constants in the macro body.
1495 These would substitute the argument in traditional C, but are part of
1496 the constant in ANSI C.
1498 @item
1499 A function declared external in one block and then used after the end of
1500 the block.
1502 @item
1503 A @code{switch} statement has an operand of type @code{long}.
1504 @end itemize
1506 @item -Wundef
1507 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
1509 @item -Wshadow
1510 Warn whenever a local variable shadows another local variable.
1512 @item -Wid-clash-@var{len}
1513 Warn whenever two distinct identifiers match in the first @var{len}
1514 characters.  This may help you prepare a program that will compile
1515 with certain obsolete, brain-damaged compilers.
1517 @item -Wlarger-than-@var{len}
1518 Warn whenever an object of larger than @var{len} bytes is defined.
1520 @item -Wpointer-arith
1521 Warn about anything that depends on the ``size of'' a function type or
1522 of @code{void}.  GNU C assigns these types a size of 1, for
1523 convenience in calculations with @code{void *} pointers and pointers
1524 to functions.
1526 @item -Wbad-function-cast
1527 Warn whenever a function call is cast to a non-matching type.
1528 For example, warn if @code{int malloc()} is cast to @code{anything *}.
1530 @item -Wcast-qual
1531 Warn whenever a pointer is cast so as to remove a type qualifier from
1532 the target type.  For example, warn if a @code{const char *} is cast
1533 to an ordinary @code{char *}.
1535 @item -Wcast-align
1536 Warn whenever a pointer is cast such that the required alignment of the
1537 target is increased.  For example, warn if a @code{char *} is cast to
1538 an @code{int *} on machines where integers can only be accessed at
1539 two- or four-byte boundaries.
1541 @item -Wwrite-strings
1542 Give string constants the type @code{const char[@var{length}]} so that
1543 copying the address of one into a non-@code{const} @code{char *}
1544 pointer will get a warning.  These warnings will help you find at
1545 compile time code that can try to write into a string constant, but
1546 only if you have been very careful about using @code{const} in
1547 declarations and prototypes.  Otherwise, it will just be a nuisance;
1548 this is why we did not make @samp{-Wall} request these warnings.
1550 @item -Wconversion
1551 Warn if a prototype causes a type conversion that is different from what
1552 would happen to the same argument in the absence of a prototype.  This
1553 includes conversions of fixed point to floating and vice versa, and
1554 conversions changing the width or signedness of a fixed point argument
1555 except when the same as the default promotion.
1557 Also, warn if a negative integer constant expression is implicitly
1558 converted to an unsigned type.  For example, warn about the assignment
1559 @code{x = -1} if @code{x} is unsigned.  But do not warn about explicit
1560 casts like @code{(unsigned) -1}.
1562 @item -Wsign-compare
1563 @cindex warning for comparison of signed and unsigned values
1564 @cindex comparison of signed and unsigned values, warning
1565 @cindex signed and unsigned values, comparison warning
1566 Warn when a comparison between signed and unsigned values could produce
1567 an incorrect result when the signed value is converted to unsigned.
1568 This warning is also enabled by @samp{-W}; to get the other warnings
1569 of @samp{-W} without this warning, use @samp{-W -Wno-sign-compare}.
1571 @item -Waggregate-return
1572 Warn if any functions that return structures or unions are defined or
1573 called.  (In languages where you can return an array, this also elicits
1574 a warning.)
1576 @item -Wstrict-prototypes
1577 Warn if a function is declared or defined without specifying the
1578 argument types.  (An old-style function definition is permitted without
1579 a warning if preceded by a declaration which specifies the argument
1580 types.)
1582 @item -Wmissing-prototypes
1583 Warn if a global function is defined without a previous prototype
1584 declaration.  This warning is issued even if the definition itself
1585 provides a prototype.  The aim is to detect global functions that fail
1586 to be declared in header files.
1588 @item -Wmissing-declarations
1589 Warn if a global function is defined without a previous declaration.
1590 Do so even if the definition itself provides a prototype.
1591 Use this option to detect global functions that are not declared in
1592 header files.
1594 @item -Wredundant-decls
1595 Warn if anything is declared more than once in the same scope, even in
1596 cases where multiple declaration is valid and changes nothing.
1598 @item -Wnested-externs
1599 Warn if an @code{extern} declaration is encountered within an function.
1601 @item -Winline
1602 Warn if a function can not be inlined and it was declared as inline.
1604 @item -Wold-style-cast
1605 Warn if an old-style (C-style) cast is used within a program.
1607 @item -Woverloaded-virtual
1608 @cindex overloaded virtual fn, warning
1609 @cindex warning for overloaded virtual fn
1610 Warn when a derived class function declaration may be an error in
1611 defining a virtual function (C++ only).  In a derived class, the
1612 definitions of virtual functions must match the type signature of a
1613 virtual function declared in the base class.  With this option, the
1614 compiler warns when you define a function with the same name as a
1615 virtual function, but with a type signature that does not match any
1616 declarations from the base class.
1618 @item -Wsynth (C++ only)
1619 @cindex warning for synthesized methods
1620 @cindex synthesized methods, warning
1621 Warn when g++'s synthesis behavior does not match that of cfront.  For
1622 instance:
1624 @smallexample
1625 struct A @{
1626   operator int ();
1627   A& operator = (int);
1630 main ()
1632   A a,b;
1633   a = b;
1635 @end smallexample
1637 In this example, g++ will synthesize a default @samp{A& operator =
1638 (const A&);}, while cfront will use the user-defined @samp{operator =}.
1640 @item -Werror
1641 Make all warnings into errors.
1642 @end table
1644 @node Debugging Options
1645 @section Options for Debugging Your Program or GNU CC
1646 @cindex options, debugging
1647 @cindex debugging information options
1649 GNU CC has various special options that are used for debugging
1650 either your program or GCC:
1652 @table @code
1653 @item -g
1654 Produce debugging information in the operating system's native format
1655 (stabs, COFF, XCOFF, or DWARF).  GDB can work with this debugging
1656 information.
1658 On most systems that use stabs format, @samp{-g} enables use of extra
1659 debugging information that only GDB can use; this extra information
1660 makes debugging work better in GDB but will probably make other debuggers
1661 crash or
1662 refuse to read the program.  If you want to control for certain whether
1663 to generate the extra information, use @samp{-gstabs+}, @samp{-gstabs},
1664 @samp{-gxcoff+}, @samp{-gxcoff}, @samp{-gdwarf-1+}, or @samp{-gdwarf-1}
1665 (see below).
1667 Unlike most other C compilers, GNU CC allows you to use @samp{-g} with
1668 @samp{-O}.  The shortcuts taken by optimized code may occasionally
1669 produce surprising results: some variables you declared may not exist
1670 at all; flow of control may briefly move where you did not expect it;
1671 some statements may not be executed because they compute constant
1672 results or their values were already at hand; some statements may
1673 execute in different places because they were moved out of loops.
1675 Nevertheless it proves possible to debug optimized output.  This makes
1676 it reasonable to use the optimizer for programs that might have bugs.
1678 The following options are useful when GNU CC is generated with the
1679 capability for more than one debugging format.
1681 @item -ggdb
1682 Produce debugging information for use by GDB.  This means to use the
1683 most expressive format available (DWARF 2, stabs, or the native format
1684 if neither of those are supported), including GDB extensions if at all
1685 possible.
1687 @item -gstabs
1688 Produce debugging information in stabs format (if that is supported),
1689 without GDB extensions.  This is the format used by DBX on most BSD
1690 systems.  On MIPS, Alpha and System V Release 4 systems this option
1691 produces stabs debugging output which is not understood by DBX or SDB.
1692 On System V Release 4 systems this option requires the GNU assembler.
1694 @item -gstabs+
1695 Produce debugging information in stabs format (if that is supported),
1696 using GNU extensions understood only by the GNU debugger (GDB).  The
1697 use of these extensions is likely to make other debuggers crash or
1698 refuse to read the program.
1700 @item -gcoff
1701 Produce debugging information in COFF format (if that is supported).
1702 This is the format used by SDB on most System V systems prior to
1703 System V Release 4.
1705 @item -gxcoff
1706 Produce debugging information in XCOFF format (if that is supported).
1707 This is the format used by the DBX debugger on IBM RS/6000 systems.
1709 @item -gxcoff+
1710 Produce debugging information in XCOFF format (if that is supported),
1711 using GNU extensions understood only by the GNU debugger (GDB).  The
1712 use of these extensions is likely to make other debuggers crash or
1713 refuse to read the program, and may cause assemblers other than the GNU
1714 assembler (GAS) to fail with an error.
1716 @item -gdwarf
1717 Produce debugging information in DWARF version 1 format (if that is
1718 supported).  This is the format used by SDB on most System V Release 4
1719 systems.
1721 @item -gdwarf+
1722 Produce debugging information in DWARF version 1 format (if that is
1723 supported), using GNU extensions understood only by the GNU debugger
1724 (GDB).  The use of these extensions is likely to make other debuggers
1725 crash or refuse to read the program.
1727 @item -gdwarf-2
1728 Produce debugging information in DWARF version 2 format (if that is
1729 supported).  This is the format used by DBX on IRIX 6.
1731 @item -g@var{level}
1732 @itemx -ggdb@var{level}
1733 @itemx -gstabs@var{level}
1734 @itemx -gcoff@var{level}
1735 @itemx -gxcoff@var{level}
1736 @itemx -gdwarf@var{level}
1737 @itemx -gdwarf-2@var{level}
1738 Request debugging information and also use @var{level} to specify how
1739 much information.  The default level is 2.
1741 Level 1 produces minimal information, enough for making backtraces in
1742 parts of the program that you don't plan to debug.  This includes
1743 descriptions of functions and external variables, but no information
1744 about local variables and no line numbers.
1746 Level 3 includes extra information, such as all the macro definitions
1747 present in the program.  Some debuggers support macro expansion when
1748 you use @samp{-g3}.
1750 @cindex @code{prof}
1751 @item -p
1752 Generate extra code to write profile information suitable for the
1753 analysis program @code{prof}.  You must use this option when compiling
1754 the source files you want data about, and you must also use it when
1755 linking.
1757 @cindex @code{gprof}
1758 @item -pg
1759 Generate extra code to write profile information suitable for the
1760 analysis program @code{gprof}.  You must use this option when compiling
1761 the source files you want data about, and you must also use it when
1762 linking.
1764 @cindex @code{tcov}
1765 @item -a
1766 Generate extra code to write profile information for basic blocks, which will
1767 record the number of times each basic block is executed, the basic block start
1768 address, and the function name containing the basic block.  If @samp{-g} is
1769 used, the line number and filename of the start of the basic block will also be
1770 recorded.  If not overridden by the machine description, the default action is
1771 to append to the text file @file{bb.out}.
1773 This data could be analyzed by a program like @code{tcov}.  Note,
1774 however, that the format of the data is not what @code{tcov} expects.
1775 Eventually GNU @code{gprof} should be extended to process this data.
1777 @item -ax
1778 Generate extra code to profile basic blocks.  Your executable will
1779 produce output that is a superset of that produced when @samp{-a} is
1780 used.  Additional output is the source and target address of the basic
1781 blocks where a jump takes place, the number of times a jump is executed,
1782 and (optionally) the complete sequence of basic blocks being executed.
1783 The output is appended to file @file{bb.out}.
1785 You can examine different profiling aspects without recompilation.  Your
1786 executable will read a list of function names from file @file{bb.in}.
1787 Profiling starts when a function on the list is entered and stops when
1788 that invocation is exited.  To exclude a function from profiling, prefix
1789 its name with `-'.  If a function name is not unique, you can
1790 disambiguate it by writing it in the form
1791 @samp{/path/filename.d:functionname}.  Your executable will write the
1792 available paths and filenames in file @file{bb.out}.
1794 Several function names have a special meaning:
1795 @table @code
1796 @item __bb_jumps__
1797 Write source, target and frequency of jumps to file @file{bb.out}.
1798 @item __bb_hidecall__
1799 Exclude function calls from frequency count.
1800 @item __bb_showret__
1801 Include function returns in frequency count.
1802 @item __bb_trace__
1803 Write the sequence of basic blocks executed to file @file{bbtrace.gz}.
1804 The file will be compressed using the program @samp{gzip}, which must
1805 exist in your @code{PATH}.  On systems without the @samp{popen}
1806 function, the file will be named @file{bbtrace} and will not be
1807 compressed.  @strong{Profiling for even a few seconds on these systems
1808 will produce a very large file.}  Note: @code{__bb_hidecall__} and
1809 @code{__bb_showret__} will not affect the sequence written to
1810 @file{bbtrace.gz}.
1811 @end table
1813 Here's a short example using different profiling parameters
1814 in file @file{bb.in}.  Assume function @code{foo} consists of basic blocks
1815 1 and 2 and is called twice from block 3 of function @code{main}.  After
1816 the calls, block 3 transfers control to block 4 of @code{main}.
1818 With @code{__bb_trace__} and @code{main} contained in file @file{bb.in},
1819 the following sequence of blocks is written to file @file{bbtrace.gz}:
1820 0 3 1 2 1 2 4.  The return from block 2 to block 3 is not shown, because
1821 the return is to a point inside the block and not to the top.  The
1822 block address 0 always indicates, that control is transferred
1823 to the trace from somewhere outside the observed functions.  With
1824 @samp{-foo} added to @file{bb.in}, the blocks of function
1825 @code{foo} are removed from the trace, so only 0 3 4 remains.
1827 With @code{__bb_jumps__} and @code{main} contained in file @file{bb.in},
1828 jump frequencies will be written to file @file{bb.out}.  The
1829 frequencies are obtained by constructing a trace of blocks
1830 and incrementing a counter for every neighbouring pair of blocks
1831 in the trace.  The trace 0 3 1 2 1 2 4 displays the following
1832 frequencies:
1834 @example
1835 Jump from block 0x0 to block 0x3 executed 1 time(s)
1836 Jump from block 0x3 to block 0x1 executed 1 time(s)
1837 Jump from block 0x1 to block 0x2 executed 2 time(s)
1838 Jump from block 0x2 to block 0x1 executed 1 time(s)
1839 Jump from block 0x2 to block 0x4 executed 1 time(s)
1840 @end example
1842 With @code{__bb_hidecall__}, control transfer due to call instructions
1843 is removed from the trace, that is the trace is cut into three parts: 0
1844 3 4, 0 1 2 and 0 1 2.  With @code{__bb_showret__}, control transfer due
1845 to return instructions is added to the trace.  The trace becomes: 0 3 1
1846 2 3 1 2 3 4.  Note, that this trace is not the same, as the sequence
1847 written to @file{bbtrace.gz}.  It is solely used for counting jump
1848 frequencies.
1850 @item -fprofile-arcs
1851 Instrument @dfn{arcs} during compilation.  For each function of your
1852 program, GNU CC creates a program flow graph, then finds a spanning tree
1853 for the graph.  Only arcs that are not on the spanning tree have to be
1854 instrumented: the compiler adds code to count the number of times that these
1855 arcs are executed.  When an arc is the only exit or only entrance to a
1856 block, the instrumentation code can be added to the block; otherwise, a
1857 new basic block must be created to hold the instrumentation code.
1859 Since not every arc in the program must be instrumented, programs
1860 compiled with this option run faster than programs compiled with
1861 @samp{-a}, which adds instrumentation code to every basic block in the
1862 program.  The tradeoff: since @code{gcov} does not have
1863 execution counts for all branches, it must start with the execution
1864 counts for the instrumented branches, and then iterate over the program
1865 flow graph until the entire graph has been solved.  Hence, @code{gcov}
1866 runs a little more slowly than a program which uses information from
1867 @samp{-a}.
1869 @samp{-fprofile-arcs} also makes it possible to estimate branch
1870 probabilities, and to calculate basic block execution counts.  In
1871 general, basic block execution counts do not give enough information to
1872 estimate all branch probabilities.  When the compiled program exits, it
1873 saves the arc execution counts to a file called
1874 @file{@var{sourcename}.da}.  Use the compiler option
1875 @samp{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
1876 Control Optimization}) when recompiling, to optimize using estimated
1877 branch probabilities.
1879 @need 2000
1880 @item -ftest-coverage
1881 Create data files for the @code{gcov} code-coverage utility
1882 (@pxref{Gcov,, @code{gcov}: a GNU CC Test Coverage Program}).
1883 The data file names begin with the name of your source file:
1885 @table @code
1886 @item @var{sourcename}.bb
1887 A mapping from basic blocks to line numbers, which @code{gcov} uses to
1888 associate basic block execution counts with line numbers.
1890 @item @var{sourcename}.bbg
1891 A list of all arcs in the program flow graph.  This allows @code{gcov}
1892 to reconstruct the program flow graph, so that it can compute all basic
1893 block and arc execution counts from the information in the
1894 @code{@var{sourcename}.da} file (this last file is the output from
1895 @samp{-fprofile-arcs}).
1896 @end table
1898 @item -Q
1899 Makes the compiler print out each function name as it is compiled, and
1900 print some statistics about each pass when it finishes.
1902 @item -d@var{letters}
1903 Says to make debugging dumps during compilation at times specified by
1904 @var{letters}.  This is used for debugging the compiler.  The file names
1905 for most of the dumps are made by appending a word to the source file
1906 name (e.g.  @file{foo.c.rtl} or @file{foo.c.jump}).  Here are the
1907 possible letters for use in @var{letters}, and their meanings:
1909 @table @samp
1910 @item M
1911 Dump all macro definitions, at the end of preprocessing, and write no
1912 output.
1913 @item N
1914 Dump all macro names, at the end of preprocessing.
1915 @item D
1916 Dump all macro definitions, at the end of preprocessing, in addition to
1917 normal output.
1918 @item y
1919 Dump debugging information during parsing, to standard error.
1920 @item r
1921 Dump after RTL generation, to @file{@var{file}.rtl}.
1922 @item x
1923 Just generate RTL for a function instead of compiling it.  Usually used
1924 with @samp{r}.
1925 @item j
1926 Dump after first jump optimization, to @file{@var{file}.jump}.
1927 @item s
1928 Dump after CSE (including the jump optimization that sometimes
1929 follows CSE), to @file{@var{file}.cse}.
1930 @item F
1931 Dump after purging ADDRESSOF, to @file{@var{file}.addressof}.
1932 @item L
1933 Dump after loop optimization, to @file{@var{file}.loop}.
1934 @item t
1935 Dump after the second CSE pass (including the jump optimization that
1936 sometimes follows CSE), to @file{@var{file}.cse2}.
1937 @item b
1938 Dump after computing branch probabilities, to @file{@var{file}.bp}.
1939 @item f
1940 Dump after flow analysis, to @file{@var{file}.flow}.
1941 @item c
1942 Dump after instruction combination, to the file
1943 @file{@var{file}.combine}.
1944 @item N
1945 Dump after the register move pass, to @file{@var{file}.regmove}.
1946 @item S
1947 Dump after the first instruction scheduling pass, to
1948 @file{@var{file}.sched}.
1949 @item l
1950 Dump after local register allocation, to
1951 @file{@var{file}.lreg}.
1952 @item g
1953 Dump after global register allocation, to
1954 @file{@var{file}.greg}.
1955 @item R
1956 Dump after the second instruction scheduling pass, to
1957 @file{@var{file}.sched2}.
1958 @item J
1959 Dump after last jump optimization, to @file{@var{file}.jump2}.
1960 @item d
1961 Dump after delayed branch scheduling, to @file{@var{file}.dbr}.
1962 @item k
1963 Dump after conversion from registers to stack, to @file{@var{file}.stack}.
1964 @item a
1965 Produce all the dumps listed above.
1966 @item m
1967 Print statistics on memory usage, at the end of the run, to
1968 standard error.
1969 @item p
1970 Annotate the assembler output with a comment indicating which
1971 pattern and alternative was used.
1972 @item A
1973 Annotate the assembler output with miscellaneous debugging information.
1974 @end table
1976 @item -fpretend-float
1977 When running a cross-compiler, pretend that the target machine uses the
1978 same floating point format as the host machine.  This causes incorrect
1979 output of the actual floating constants, but the actual instruction
1980 sequence will probably be the same as GNU CC would make when running on
1981 the target machine.
1983 @item -save-temps
1984 Store the usual ``temporary'' intermediate files permanently; place them
1985 in the current directory and name them based on the source file.  Thus,
1986 compiling @file{foo.c} with @samp{-c -save-temps} would produce files
1987 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.
1989 @item -print-file-name=@var{library}
1990 Print the full absolute name of the library file @var{library} that
1991 would be used when linking---and don't do anything else.  With this
1992 option, GNU CC does not compile or link anything; it just prints the
1993 file name.
1995 @item -print-prog-name=@var{program}
1996 Like @samp{-print-file-name}, but searches for a program such as @samp{cpp}.
1998 @item -print-libgcc-file-name
1999 Same as @samp{-print-file-name=libgcc.a}.
2001 This is useful when you use @samp{-nostdlib} or @samp{-nodefaultlibs}
2002 but you do want to link with @file{libgcc.a}.  You can do
2004 @example
2005 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
2006 @end example
2008 @item -print-search-dirs
2009 Print the name of the configured installation directory and a list of
2010 program and library directories gcc will search---and don't do anything else.
2012 This is useful when gcc prints the error message
2013 @samp{installation problem, cannot exec cpp: No such file or directory}.
2014 To resolve this you either need to put @file{cpp} and the other compiler
2015 components where gcc expects to find them, or you can set the environment
2016 variable @code{GCC_EXEC_PREFIX} to the directory where you installed them.
2017 Don't forget the trailing '/'.
2018 @xref{Environment Variables}.
2019 @end table
2021 @node Optimize Options
2022 @section Options That Control Optimization
2023 @cindex optimize options
2024 @cindex options, optimization
2026 These options control various sorts of optimizations:
2028 @table @code
2029 @item -O
2030 @itemx -O1
2031 Optimize.  Optimizing compilation takes somewhat more time, and a lot
2032 more memory for a large function.
2034 Without @samp{-O}, the compiler's goal is to reduce the cost of
2035 compilation and to make debugging produce the expected results.
2036 Statements are independent: if you stop the program with a breakpoint
2037 between statements, you can then assign a new value to any variable or
2038 change the program counter to any other statement in the function and
2039 get exactly the results you would expect from the source code.
2041 Without @samp{-O}, the compiler only allocates variables declared
2042 @code{register} in registers.  The resulting compiled code is a little
2043 worse than produced by PCC without @samp{-O}.
2045 With @samp{-O}, the compiler tries to reduce code size and execution
2046 time.
2048 When you specify @samp{-O}, the compiler turns on @samp{-fthread-jumps}
2049 and @samp{-fdefer-pop} on all machines.  The compiler turns on
2050 @samp{-fdelayed-branch} on machines that have delay slots, and
2051 @samp{-fomit-frame-pointer} on machines that can support debugging even
2052 without a frame pointer.  On some machines the compiler also turns
2053 on other flags.@refill
2055 @item -O2
2056 Optimize even more.  GNU CC performs nearly all supported optimizations
2057 that do not involve a space-speed tradeoff.  The compiler does not
2058 perform loop unrolling or function inlining when you specify @samp{-O2}.
2059 As compared to @samp{-O}, this option increases both compilation time
2060 and the performance of the generated code.
2062 @samp{-O2} turns on all optional optimizations except for loop unrolling
2063 and function inlining.  It also turns on the @samp{-fforce-mem} option
2064 on all machines and frame pointer elimination on machines where doing so
2065 does not interfere with debugging.
2067 @item -O3
2068 Optimize yet more.  @samp{-O3} turns on all optimizations specified by
2069 @samp{-O2} and also turns on the @samp{inline-functions} option.
2071 @item -O0
2072 Do not optimize.
2074 If you use multiple @samp{-O} options, with or without level numbers,
2075 the last such option is the one that is effective.
2076 @end table
2078 Options of the form @samp{-f@var{flag}} specify machine-independent
2079 flags.  Most flags have both positive and negative forms; the negative
2080 form of @samp{-ffoo} would be @samp{-fno-foo}.  In the table below,
2081 only one of the forms is listed---the one which is not the default.
2082 You can figure out the other form by either removing @samp{no-} or
2083 adding it.
2085 @table @code
2086 @item -ffloat-store
2087 Do not store floating point variables in registers, and inhibit other
2088 options that might change whether a floating point value is taken from a
2089 register or memory.
2091 @cindex floating point precision
2092 This option prevents undesirable excess precision on machines such as
2093 the 68000 where the floating registers (of the 68881) keep more
2094 precision than a @code{double} is supposed to have.  Similarly for the
2095 x86 architecture.  For most programs, the excess precision does only
2096 good, but a few programs rely on the precise definition of IEEE floating
2097 point.  Use @samp{-ffloat-store} for such programs.
2099 @item -fno-default-inline
2100 Do not make member functions inline by default merely because they are
2101 defined inside the class scope (C++ only).  Otherwise, when you specify
2102 @w{@samp{-O}}, member functions defined inside class scope are compiled
2103 inline by default; i.e., you don't need to add @samp{inline} in front of
2104 the member function name.
2106 @item -fno-defer-pop
2107 Always pop the arguments to each function call as soon as that function
2108 returns.  For machines which must pop arguments after a function call,
2109 the compiler normally lets arguments accumulate on the stack for several
2110 function calls and pops them all at once.
2112 @item -fforce-mem
2113 Force memory operands to be copied into registers before doing
2114 arithmetic on them.  This produces better code by making all memory
2115 references potential common subexpressions.  When they are not common
2116 subexpressions, instruction combination should eliminate the separate
2117 register-load.  The @samp{-O2} option turns on this option.
2119 @item -fforce-addr
2120 Force memory address constants to be copied into registers before
2121 doing arithmetic on them.  This may produce better code just as
2122 @samp{-fforce-mem} may.
2124 @item -fomit-frame-pointer
2125 Don't keep the frame pointer in a register for functions that
2126 don't need one.  This avoids the instructions to save, set up and
2127 restore frame pointers; it also makes an extra register available
2128 in many functions.  @strong{It also makes debugging impossible on
2129 some machines.}
2131 @ifset INTERNALS
2132 On some machines, such as the Vax, this flag has no effect, because
2133 the standard calling sequence automatically handles the frame pointer
2134 and nothing is saved by pretending it doesn't exist.  The
2135 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
2136 whether a target machine supports this flag.  @xref{Registers}.@refill
2137 @end ifset
2138 @ifclear INTERNALS
2139 On some machines, such as the Vax, this flag has no effect, because
2140 the standard calling sequence automatically handles the frame pointer
2141 and nothing is saved by pretending it doesn't exist.  The
2142 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
2143 whether a target machine supports this flag.  @xref{Registers,,Register
2144 Usage, gcc.info, Using and Porting GCC}.@refill
2145 @end ifclear
2147 @item -fno-inline
2148 Don't pay attention to the @code{inline} keyword.  Normally this option
2149 is used to keep the compiler from expanding any functions inline.
2150 Note that if you are not optimizing, no functions can be expanded inline.
2152 @item -finline-functions
2153 Integrate all simple functions into their callers.  The compiler
2154 heuristically decides which functions are simple enough to be worth
2155 integrating in this way.
2157 If all calls to a given function are integrated, and the function is
2158 declared @code{static}, then the function is normally not output as
2159 assembler code in its own right.
2161 @item -fkeep-inline-functions
2162 Even if all calls to a given function are integrated, and the function
2163 is declared @code{static}, nevertheless output a separate run-time
2164 callable version of the function.  This switch does not affect
2165 @code{extern inline} functions.
2167 @item -fkeep-static-consts
2168 Emit variables declared @code{static const} when optimization isn't turned
2169 on, even if the variables aren't referenced.
2171 GNU CC enables this option by default.  If you want to force the compiler to
2172 check if the variable was referenced, regardless of whether or not
2173 optimization is turned on, use the @samp{-fno-keep-static-consts} option.
2175 @item -fno-function-cse
2176 Do not put function addresses in registers; make each instruction that
2177 calls a constant function contain the function's address explicitly.
2179 This option results in less efficient code, but some strange hacks
2180 that alter the assembler output may be confused by the optimizations
2181 performed when this option is not used.
2183 @item -ffast-math
2184 This option allows GCC to violate some ANSI or IEEE rules and/or
2185 specifications in the interest of optimizing code for speed.  For
2186 example, it allows the compiler to assume arguments to the @code{sqrt}
2187 function are non-negative numbers and that no floating-point values
2188 are NaNs.
2190 This option should never be turned on by any @samp{-O} option since
2191 it can result in incorrect output for programs which depend on
2192 an exact implementation of IEEE or ANSI rules/specifications for
2193 math functions.
2194 @end table
2196 @c following causes underfulls.. they don't look great, but we deal.
2197 @c --mew 26jan93
2198 The following options control specific optimizations.  The @samp{-O2}
2199 option turns on all of these optimizations except @samp{-funroll-loops}
2200 and @samp{-funroll-all-loops}.  On most machines, the @samp{-O} option
2201 turns on the @samp{-fthread-jumps} and @samp{-fdelayed-branch} options,
2202 but specific machines may handle it differently.
2204 You can use the following flags in the rare cases when ``fine-tuning''
2205 of optimizations to be performed is desired.
2207 @table @code
2208 @item -fstrength-reduce
2209 Perform the optimizations of loop strength reduction and
2210 elimination of iteration variables.
2212 @item -fthread-jumps
2213 Perform optimizations where we check to see if a jump branches to a
2214 location where another comparison subsumed by the first is found.  If
2215 so, the first branch is redirected to either the destination of the
2216 second branch or a point immediately following it, depending on whether
2217 the condition is known to be true or false.
2219 @item -fcse-follow-jumps
2220 In common subexpression elimination, scan through jump instructions
2221 when the target of the jump is not reached by any other path.  For
2222 example, when CSE encounters an @code{if} statement with an
2223 @code{else} clause, CSE will follow the jump when the condition
2224 tested is false.
2226 @item -fcse-skip-blocks
2227 This is similar to @samp{-fcse-follow-jumps}, but causes CSE to
2228 follow jumps which conditionally skip over blocks.  When CSE
2229 encounters a simple @code{if} statement with no else clause,
2230 @samp{-fcse-skip-blocks} causes CSE to follow the jump around the
2231 body of the @code{if}.
2233 @item -frerun-cse-after-loop
2234 Re-run common subexpression elimination after loop optimizations has been
2235 performed.
2237 @item -fexpensive-optimizations
2238 Perform a number of minor optimizations that are relatively expensive.
2240 @item -foptimize-register-moves
2241 Attempt to reassign register numbers in move instructions and as
2242 operands of other simple instructions in order to maximize the amount of
2243 register tying.  This is especially helpfu on machines with two-operand
2244 instructions.  GNU CC enables this optimization by default with @samp{-O2}
2245 or higher on those machines where it is likely to be of the most benefit.
2247 @item -fdelayed-branch
2248 If supported for the target machine, attempt to reorder instructions
2249 to exploit instruction slots available after delayed branch
2250 instructions.
2252 @item -fschedule-insns
2253 If supported for the target machine, attempt to reorder instructions to
2254 eliminate execution stalls due to required data being unavailable.  This
2255 helps machines that have slow floating point or memory load instructions
2256 by allowing other instructions to be issued until the result of the load
2257 or floating point instruction is required.
2259 @item -fschedule-insns2
2260 Similar to @samp{-fschedule-insns}, but requests an additional pass of
2261 instruction scheduling after register allocation has been done.  This is
2262 especially useful on machines with a relatively small number of
2263 registers and where memory load instructions take more than one cycle.
2265 @item -ffunction-sections
2266 Place each function into its own section in the output file if the
2267 target supports arbitrary sections.  The function's name determines
2268 the section's name in the output file.
2270 Use this option on systems where the linker can perform optimizations
2271 to improve locality of reference in the instruction space.  HPPA
2272 processors running HP-UX and Sparc processors running Solaris 2 have
2273 linkers with such optimizations.  Other systems using the ELF object format
2274 as well as AIX may have these optimizations in the future.
2276 Only use this option when there are significant benefits from doing
2277 so.  When you specify this option, the assembler and linker will
2278 create larger object and executable files and will also be slower.
2279 You will not be able to use @code{gprof} on all systems if you
2280 specify this option and you may have problems with debugging if
2281 you specify both this option and @samp{-g}.
2283 @item -fcaller-saves
2284 Enable values to be allocated in registers that will be clobbered by
2285 function calls, by emitting extra instructions to save and restore the
2286 registers around such calls.  Such allocation is done only when it
2287 seems to result in better code than would otherwise be produced.
2289 This option is enabled by default on certain machines, usually those
2290 which have no call-preserved registers to use instead.
2292 @item -funroll-loops
2293 Perform the optimization of loop unrolling.  This is only done for loops
2294 whose number of iterations can be determined at compile time or run time.
2295 @samp{-funroll-loop} implies both @samp{-fstrength-reduce} and
2296 @samp{-frerun-cse-after-loop}.
2298 @item -funroll-all-loops
2299 Perform the optimization of loop unrolling.  This is done for all loops
2300 and usually makes programs run more slowly.  @samp{-funroll-all-loops}
2301 implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}.
2303 @item -fno-peephole
2304 Disable any machine-specific peephole optimizations.
2306 @item -fbranch-probabilities
2307 After running a program compiled with @samp{-fprofile-arcs}
2308 (@pxref{Debugging Options,, Options for Debugging Your Program or
2309 @code{gcc}}), you can compile it a second time using
2310 @samp{-fbranch-probabilities}, to improve optimizations based on
2311 guessing the path a branch might take.
2313 @ifset INTERNALS
2314 With @samp{-fbranch-probabilities}, GCC puts a @samp{REG_EXEC_COUNT}
2315 note on the first instruction of each basic block, and a
2316 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
2317 These can be used to improve optimization.  Currently, they are only
2318 used in one place: in @file{reorg.c}, instead of guessing which path a
2319 branch is mostly to take, the @samp{REG_BR_PROB} values are used to
2320 exactly determine which path is taken more often.
2321 @end ifset
2322 @end table
2324 @node Preprocessor Options
2325 @section Options Controlling the Preprocessor
2326 @cindex preprocessor options
2327 @cindex options, preprocessor
2329 These options control the C preprocessor, which is run on each C source
2330 file before actual compilation.
2332 If you use the @samp{-E} option, nothing is done except preprocessing.
2333 Some of these options make sense only together with @samp{-E} because
2334 they cause the preprocessor output to be unsuitable for actual
2335 compilation.
2337 @table @code
2338 @item -include @var{file}
2339 Process @var{file} as input before processing the regular input file.
2340 In effect, the contents of @var{file} are compiled first.  Any @samp{-D}
2341 and @samp{-U} options on the command line are always processed before
2342 @samp{-include @var{file}}, regardless of the order in which they are
2343 written.  All the @samp{-include} and @samp{-imacros} options are
2344 processed in the order in which they are written.
2346 @item -imacros @var{file}
2347 Process @var{file} as input, discarding the resulting output, before
2348 processing the regular input file.  Because the output generated from
2349 @var{file} is discarded, the only effect of @samp{-imacros @var{file}}
2350 is to make the macros defined in @var{file} available for use in the
2351 main input.
2353 Any @samp{-D} and @samp{-U} options on the command line are always
2354 processed before @samp{-imacros @var{file}}, regardless of the order in
2355 which they are written.  All the @samp{-include} and @samp{-imacros}
2356 options are processed in the order in which they are written.
2358 @item -idirafter @var{dir}
2359 @cindex second include path
2360 Add the directory @var{dir} to the second include path.  The directories
2361 on the second include path are searched when a header file is not found
2362 in any of the directories in the main include path (the one that
2363 @samp{-I} adds to).
2365 @item -iprefix @var{prefix}
2366 Specify @var{prefix} as the prefix for subsequent @samp{-iwithprefix}
2367 options.
2369 @item -iwithprefix @var{dir}
2370 Add a directory to the second include path.  The directory's name is
2371 made by concatenating @var{prefix} and @var{dir}, where @var{prefix} was
2372 specified previously with @samp{-iprefix}.  If you have not specified a
2373 prefix yet, the directory containing the installed passes of the
2374 compiler is used as the default.
2376 @item -iwithprefixbefore @var{dir}
2377 Add a directory to the main include path.  The directory's name is made
2378 by concatenating @var{prefix} and @var{dir}, as in the case of
2379 @samp{-iwithprefix}.
2381 @item -isystem @var{dir}
2382 Add a directory to the beginning of the second include path, marking it
2383 as a system directory, so that it gets the same special treatment as
2384 is applied to the standard system directories.
2386 @item -nostdinc
2387 Do not search the standard system directories for header files.  Only
2388 the directories you have specified with @samp{-I} options (and the
2389 current directory, if appropriate) are searched.  @xref{Directory
2390 Options}, for information on @samp{-I}.
2392 By using both @samp{-nostdinc} and @samp{-I-}, you can limit the include-file
2393 search path to only those directories you specify explicitly.
2395 @item -undef
2396 Do not predefine any nonstandard macros.  (Including architecture flags).
2398 @item -E
2399 Run only the C preprocessor.  Preprocess all the C source files
2400 specified and output the results to standard output or to the
2401 specified output file.
2403 @item -C
2404 Tell the preprocessor not to discard comments.  Used with the
2405 @samp{-E} option.
2407 @item -P
2408 Tell the preprocessor not to generate @samp{#line} directives.
2409 Used with the @samp{-E} option.
2411 @cindex make
2412 @cindex dependencies, make
2413 @item -M
2414 Tell the preprocessor to output a rule suitable for @code{make}
2415 describing the dependencies of each object file.  For each source file,
2416 the preprocessor outputs one @code{make}-rule whose target is the object
2417 file name for that source file and whose dependencies are all the
2418 @code{#include} header files it uses.  This rule may be a single line or
2419 may be continued with @samp{\}-newline if it is long.  The list of rules
2420 is printed on standard output instead of the preprocessed C program.
2422 @samp{-M} implies @samp{-E}.
2424 Another way to specify output of a @code{make} rule is by setting
2425 the environment variable @code{DEPENDENCIES_OUTPUT} (@pxref{Environment
2426 Variables}).
2428 @item -MM
2429 Like @samp{-M} but the output mentions only the user header files
2430 included with @samp{#include "@var{file}"}.  System header files
2431 included with @samp{#include <@var{file}>} are omitted.
2433 @item -MD
2434 Like @samp{-M} but the dependency information is written to a file made by
2435 replacing ".c" with ".d" at the end of the input file names.
2436 This is in addition to compiling the file as specified---@samp{-MD} does
2437 not inhibit ordinary compilation the way @samp{-M} does.
2439 In Mach, you can use the utility @code{md} to merge multiple dependency
2440 files into a single dependency file suitable for using with the @samp{make}
2441 command.
2443 @item -MMD
2444 Like @samp{-MD} except mention only user header files, not system
2445 header files.
2447 @item -MG
2448 Treat missing header files as generated files and assume they live in the
2449 same directory as the source file.  If you specify @samp{-MG}, you
2450 must also specify either @samp{-M} or @samp{-MM}.  @samp{-MG} is not
2451 supported with @samp{-MD} or @samp{-MMD}.
2453 @item -H
2454 Print the name of each header file used, in addition to other normal
2455 activities.
2457 @item -A@var{question}(@var{answer})
2458 Assert the answer @var{answer} for @var{question}, in case it is tested
2459 with a preprocessing conditional such as @samp{#if
2460 #@var{question}(@var{answer})}.  @samp{-A-} disables the standard
2461 assertions that normally describe the target machine.
2463 @item -D@var{macro}
2464 Define macro @var{macro} with the string @samp{1} as its definition.
2466 @item -D@var{macro}=@var{defn}
2467 Define macro @var{macro} as @var{defn}.  All instances of @samp{-D} on
2468 the command line are processed before any @samp{-U} options.
2470 @item -U@var{macro}
2471 Undefine macro @var{macro}.  @samp{-U} options are evaluated after all
2472 @samp{-D} options, but before any @samp{-include} and @samp{-imacros}
2473 options.
2475 @item -dM
2476 Tell the preprocessor to output only a list of the macro definitions
2477 that are in effect at the end of preprocessing.  Used with the @samp{-E}
2478 option.
2480 @item -dD
2481 Tell the preprocessing to pass all macro definitions into the output, in
2482 their proper sequence in the rest of the output.
2484 @item -dN
2485 Like @samp{-dD} except that the macro arguments and contents are omitted.
2486 Only @samp{#define @var{name}} is included in the output.
2488 @item -trigraphs
2489 Support ANSI C trigraphs.  The @samp{-ansi} option also has this effect.
2491 @item -Wp,@var{option}
2492 Pass @var{option} as an option to the preprocessor.  If @var{option}
2493 contains commas, it is split into multiple options at the commas.
2494 @end table
2496 @node Assembler Options
2497 @section Passing Options to the Assembler
2499 @c prevent bad page break with this line
2500 You can pass options to the assembler.
2502 @table @code
2503 @item -Wa,@var{option}
2504 Pass @var{option} as an option to the assembler.  If @var{option}
2505 contains commas, it is split into multiple options at the commas.
2506 @end table
2508 @node Link Options
2509 @section Options for Linking
2510 @cindex link options
2511 @cindex options, linking
2513 These options come into play when the compiler links object files into
2514 an executable output file.  They are meaningless if the compiler is
2515 not doing a link step.
2517 @table @code
2518 @cindex file names
2519 @item @var{object-file-name}
2520 A file name that does not end in a special recognized suffix is
2521 considered to name an object file or library.  (Object files are
2522 distinguished from libraries by the linker according to the file
2523 contents.)  If linking is done, these object files are used as input
2524 to the linker.
2526 @item -c
2527 @itemx -S
2528 @itemx -E
2529 If any of these options is used, then the linker is not run, and
2530 object file names should not be used as arguments.  @xref{Overall
2531 Options}.
2533 @cindex Libraries
2534 @item -l@var{library}
2535 Search the library named @var{library} when linking.
2537 It makes a difference where in the command you write this option; the
2538 linker searches processes libraries and object files in the order they
2539 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
2540 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
2541 to functions in @samp{z}, those functions may not be loaded.
2543 The linker searches a standard list of directories for the library,
2544 which is actually a file named @file{lib@var{library}.a}.  The linker
2545 then uses this file as if it had been specified precisely by name.
2547 The directories searched include several standard system directories
2548 plus any that you specify with @samp{-L}.
2550 Normally the files found this way are library files---archive files
2551 whose members are object files.  The linker handles an archive file by
2552 scanning through it for members which define symbols that have so far
2553 been referenced but not defined.  But if the file that is found is an
2554 ordinary object file, it is linked in the usual fashion.  The only
2555 difference between using an @samp{-l} option and specifying a file name
2556 is that @samp{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
2557 and searches several directories.
2559 @item -lobjc
2560 You need this special case of the @samp{-l} option in order to
2561 link an Objective C program.
2563 @item -nostartfiles
2564 Do not use the standard system startup files when linking.
2565 The standard system libraries are used normally, unless @code{-nostdlib}
2566 or @code{-nodefaultlibs} is used.
2568 @item -nodefaultlibs
2569 Do not use the standard system libraries when linking.
2570 Only the libraries you specify will be passed to the linker.
2571 The standard startup files are used normally, unless @code{-nostartfiles}
2572 is used.
2574 @item -nostdlib
2575 Do not use the standard system startup files or libraries when linking.
2576 No startup files and only the libraries you specify will be passed to
2577 the linker.
2579 @cindex @code{-lgcc}, use with @code{-nostdlib}
2580 @cindex @code{-nostdlib} and unresolved references
2581 @cindex unresolved references and @code{-nostdlib}
2582 @cindex @code{-lgcc}, use with @code{-nodefaultlibs}
2583 @cindex @code{-nodefaultlibs} and unresolved references
2584 @cindex unresolved references and @code{-nodefaultlibs}
2585 One of the standard libraries bypassed by @samp{-nostdlib} and
2586 @samp{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
2587 that GNU CC uses to overcome shortcomings of particular machines, or special
2588 needs for some languages.
2589 @ifset INTERNALS
2590 (@xref{Interface,,Interfacing to GNU CC Output}, for more discussion of
2591 @file{libgcc.a}.)
2592 @end ifset
2593 @ifclear INTERNALS
2594 (@xref{Interface,,Interfacing to GNU CC Output,gcc.info,Porting GNU CC},
2595 for more discussion of @file{libgcc.a}.)
2596 @end ifclear
2597 In most cases, you need @file{libgcc.a} even when you want to avoid
2598 other standard libraries.  In other words, when you specify @samp{-nostdlib}
2599 or @samp{-nodefaultlibs} you should usually specify @samp{-lgcc} as well.
2600 This ensures that you have no unresolved references to internal GNU CC
2601 library subroutines.  (For example, @samp{__main}, used to ensure C++
2602 constructors will be called; @pxref{Collect2,,@code{collect2}}.)
2604 @item -s
2605 Remove all symbol table and relocation information from the executable.
2607 @item -static
2608 On systems that support dynamic linking, this prevents linking with the shared
2609 libraries.  On other systems, this option has no effect.
2611 @item -shared
2612 Produce a shared object which can then be linked with other objects to
2613 form an executable.  Not all systems support this option.  You must
2614 also specify @samp{-fpic} or @samp{-fPIC} on some systems when
2615 you specify this option.
2617 @item -symbolic
2618 Bind references to global symbols when building a shared object.  Warn
2619 about any unresolved references (unless overridden by the link editor
2620 option @samp{-Xlinker -z -Xlinker defs}).  Only a few systems support
2621 this option.
2623 @item -Xlinker @var{option}
2624 Pass @var{option} as an option to the linker.  You can use this to
2625 supply system-specific linker options which GNU CC does not know how to
2626 recognize.
2628 If you want to pass an option that takes an argument, you must use
2629 @samp{-Xlinker} twice, once for the option and once for the argument.
2630 For example, to pass @samp{-assert definitions}, you must write
2631 @samp{-Xlinker -assert -Xlinker definitions}.  It does not work to write
2632 @samp{-Xlinker "-assert definitions"}, because this passes the entire
2633 string as a single argument, which is not what the linker expects.
2635 @item -Wl,@var{option}
2636 Pass @var{option} as an option to the linker.  If @var{option} contains
2637 commas, it is split into multiple options at the commas.
2639 @item -u @var{symbol}
2640 Pretend the symbol @var{symbol} is undefined, to force linking of
2641 library modules to define it.  You can use @samp{-u} multiple times with
2642 different symbols to force loading of additional library modules.
2643 @end table
2645 @node Directory Options
2646 @section Options for Directory Search
2647 @cindex directory options
2648 @cindex options, directory search
2649 @cindex search path
2651 These options specify directories to search for header files, for
2652 libraries and for parts of the compiler:
2654 @table @code
2655 @item -I@var{dir}
2656 Add the directory @var{dir} to the head of the list of directories to be
2657 searched for header files.  This can be used to override a system header
2658 file, substituting your own version, since these directories are
2659 searched before the system header file directories.  If you use more
2660 than one @samp{-I} option, the directories are scanned in left-to-right
2661 order; the standard system directories come after.
2663 @item -I-
2664 Any directories you specify with @samp{-I} options before the @samp{-I-}
2665 option are searched only for the case of @samp{#include "@var{file}"};
2666 they are not searched for @samp{#include <@var{file}>}.
2668 If additional directories are specified with @samp{-I} options after
2669 the @samp{-I-}, these directories are searched for all @samp{#include}
2670 directives.  (Ordinarily @emph{all} @samp{-I} directories are used
2671 this way.)
2673 In addition, the @samp{-I-} option inhibits the use of the current
2674 directory (where the current input file came from) as the first search
2675 directory for @samp{#include "@var{file}"}.  There is no way to
2676 override this effect of @samp{-I-}.  With @samp{-I.} you can specify
2677 searching the directory which was current when the compiler was
2678 invoked.  That is not exactly the same as what the preprocessor does
2679 by default, but it is often satisfactory.
2681 @samp{-I-} does not inhibit the use of the standard system directories
2682 for header files.  Thus, @samp{-I-} and @samp{-nostdinc} are
2683 independent.
2685 @item -L@var{dir}
2686 Add directory @var{dir} to the list of directories to be searched
2687 for @samp{-l}.
2689 @item -B@var{prefix}
2690 This option specifies where to find the executables, libraries,
2691 include files, and data files of the compiler itself.
2693 The compiler driver program runs one or more of the subprograms
2694 @file{cpp}, @file{cc1}, @file{as} and @file{ld}.  It tries
2695 @var{prefix} as a prefix for each program it tries to run, both with and
2696 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
2698 For each subprogram to be run, the compiler driver first tries the
2699 @samp{-B} prefix, if any.  If that name is not found, or if @samp{-B}
2700 was not specified, the driver tries two standard prefixes, which are
2701 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc-lib/}.  If neither of
2702 those results in a file name that is found, the unmodified program
2703 name is searched for using the directories specified in your
2704 @samp{PATH} environment variable.
2706 @samp{-B} prefixes that effectively specify directory names also apply
2707 to libraries in the linker, because the compiler translates these
2708 options into @samp{-L} options for the linker.  They also apply to
2709 includes files in the preprocessor, because the compiler translates these
2710 options into @samp{-isystem} options for the preprocessor.  In this case,
2711 the compiler appends @samp{include} to the prefix.
2713 The run-time support file @file{libgcc.a} can also be searched for using
2714 the @samp{-B} prefix, if needed.  If it is not found there, the two
2715 standard prefixes above are tried, and that is all.  The file is left
2716 out of the link if it is not found by those means.
2718 Another way to specify a prefix much like the @samp{-B} prefix is to use
2719 the environment variable @code{GCC_EXEC_PREFIX}.  @xref{Environment
2720 Variables}.
2722 @item -specs=@var{file}
2723 Process @var{file} after the compiler reads in the standard @file{specs}
2724 file, in order to override the defaults that the @file{gcc} driver
2725 program uses when determining what switches to pass to @file{cc1},
2726 @file{cc1plus}, @file{as}, @file{ld}, etc.  More than one
2727 @samp{-specs=}@var{file} can be specified on the command line, and they
2728 are processed in order, from left to right.
2729 @end table
2731 @node Target Options
2732 @section Specifying Target Machine and Compiler Version
2733 @cindex target options
2734 @cindex cross compiling
2735 @cindex specifying machine version
2736 @cindex specifying compiler version and target machine
2737 @cindex compiler version, specifying
2738 @cindex target machine, specifying
2740 By default, GNU CC compiles code for the same type of machine that you
2741 are using.  However, it can also be installed as a cross-compiler, to
2742 compile for some other type of machine.  In fact, several different
2743 configurations of GNU CC, for different target machines, can be
2744 installed side by side.  Then you specify which one to use with the
2745 @samp{-b} option.
2747 In addition, older and newer versions of GNU CC can be installed side
2748 by side.  One of them (probably the newest) will be the default, but
2749 you may sometimes wish to use another.
2751 @table @code
2752 @item -b @var{machine}
2753 The argument @var{machine} specifies the target machine for compilation.
2754 This is useful when you have installed GNU CC as a cross-compiler.
2756 The value to use for @var{machine} is the same as was specified as the
2757 machine type when configuring GNU CC as a cross-compiler.  For
2758 example, if a cross-compiler was configured with @samp{configure
2759 i386v}, meaning to compile for an 80386 running System V, then you
2760 would specify @samp{-b i386v} to run that cross compiler.
2762 When you do not specify @samp{-b}, it normally means to compile for
2763 the same type of machine that you are using.
2765 @item -V @var{version}
2766 The argument @var{version} specifies which version of GNU CC to run.
2767 This is useful when multiple versions are installed.  For example,
2768 @var{version} might be @samp{2.0}, meaning to run GNU CC version 2.0.
2770 The default version, when you do not specify @samp{-V}, is the last
2771 version of GNU CC that you installed.
2772 @end table
2774 The @samp{-b} and @samp{-V} options actually work by controlling part of
2775 the file name used for the executable files and libraries used for
2776 compilation.  A given version of GNU CC, for a given target machine, is
2777 normally kept in the directory @file{/usr/local/lib/gcc-lib/@var{machine}/@var{version}}.@refill
2779 Thus, sites can customize the effect of @samp{-b} or @samp{-V} either by
2780 changing the names of these directories or adding alternate names (or
2781 symbolic links).  If in directory @file{/usr/local/lib/gcc-lib/} the
2782 file @file{80386} is a link to the file @file{i386v}, then @samp{-b
2783 80386} becomes an alias for @samp{-b i386v}.
2785 In one respect, the @samp{-b} or @samp{-V} do not completely change
2786 to a different compiler: the top-level driver program @code{gcc}
2787 that you originally invoked continues to run and invoke the other
2788 executables (preprocessor, compiler per se, assembler and linker)
2789 that do the real work.  However, since no real work is done in the
2790 driver program, it usually does not matter that the driver program
2791 in use is not the one for the specified target and version.
2793 The only way that the driver program depends on the target machine is
2794 in the parsing and handling of special machine-specific options.
2795 However, this is controlled by a file which is found, along with the
2796 other executables, in the directory for the specified version and
2797 target machine.  As a result, a single installed driver program adapts
2798 to any specified target machine and compiler version.
2800 The driver program executable does control one significant thing,
2801 however: the default version and target machine.  Therefore, you can
2802 install different instances of the driver program, compiled for
2803 different targets or versions, under different names.
2805 For example, if the driver for version 2.0 is installed as @code{ogcc}
2806 and that for version 2.1 is installed as @code{gcc}, then the command
2807 @code{gcc} will use version 2.1 by default, while @code{ogcc} will use
2808 2.0 by default.  However, you can choose either version with either
2809 command with the @samp{-V} option.
2811 @node Submodel Options
2812 @section Hardware Models and Configurations
2813 @cindex submodel options
2814 @cindex specifying hardware config
2815 @cindex hardware models and configurations, specifying
2816 @cindex machine dependent options
2818 Earlier we discussed the standard option @samp{-b} which chooses among
2819 different installed compilers for completely different target
2820 machines, such as Vax vs. 68000 vs. 80386.
2822 In addition, each of these target machine types can have its own
2823 special options, starting with @samp{-m}, to choose among various
2824 hardware models or configurations---for example, 68010 vs 68020,
2825 floating coprocessor or none.  A single installed version of the
2826 compiler can compile for any model or configuration, according to the
2827 options specified.
2829 Some configurations of the compiler also support additional special
2830 options, usually for compatibility with other compilers on the same
2831 platform.
2833 @ifset INTERNALS
2834 These options are defined by the macro @code{TARGET_SWITCHES} in the
2835 machine description.  The default for the options is also defined by
2836 that macro, which enables you to change the defaults.
2837 @end ifset
2839 @menu
2840 * M680x0 Options::
2841 * VAX Options::
2842 * SPARC Options::
2843 * Convex Options::
2844 * AMD29K Options::
2845 * ARM Options::
2846 * MN10300 Options::
2847 * M32R/D Options::
2848 * M88K Options::
2849 * RS/6000 and PowerPC Options::
2850 * RT Options::
2851 * MIPS Options::
2852 * i386 Options::
2853 * HPPA Options::
2854 * Intel 960 Options::
2855 * DEC Alpha Options::
2856 * Clipper Options::
2857 * H8/300 Options::
2858 * SH Options::
2859 * System V Options::
2860 * V850 Options::
2861 @end menu
2863 @node M680x0 Options
2864 @subsection M680x0 Options
2865 @cindex M680x0 options
2867 These are the @samp{-m} options defined for the 68000 series.  The default
2868 values for these options depends on which style of 68000 was selected when
2869 the compiler was configured; the defaults for the most common choices are
2870 given below.
2872 @table @code
2873 @item -m68000
2874 @itemx -mc68000
2875 Generate output for a 68000.  This is the default
2876 when the compiler is configured for 68000-based systems.
2878 @item -m68020
2879 @itemx -mc68020
2880 Generate output for a 68020.  This is the default
2881 when the compiler is configured for 68020-based systems.
2883 @item -m68881
2884 Generate output containing 68881 instructions for floating point.
2885 This is the default for most 68020 systems unless @samp{-nfp} was
2886 specified when the compiler was configured.
2888 @item -m68030
2889 Generate output for a 68030.  This is the default when the compiler is
2890 configured for 68030-based systems.
2892 @item -m68040
2893 Generate output for a 68040.  This is the default when the compiler is
2894 configured for 68040-based systems.
2896 This option inhibits the use of 68881/68882 instructions that have to be
2897 emulated by software on the 68040.  If your 68040 does not have code to
2898 emulate those instructions, use @samp{-m68040}.
2900 @item -m68060
2901 Generate output for a 68060.  This is the default when the compiler is
2902 configured for 68060-based systems.
2904 This option inhibits the use of 68020 and 68881/68882 instructions that
2905 have to be emulated by software on the 68060.  If your 68060 does not
2906 have code to emulate those instructions, use @samp{-m68060}.
2908 @item -m5200
2909 Generate output for a 520X "coldfire" family cpu.  This is the default
2910 when the compiler is configured for 520X-based systems.
2913 @item -m68020-40
2914 Generate output for a 68040, without using any of the new instructions.
2915 This results in code which can run relatively efficiently on either a
2916 68020/68881 or a 68030 or a 68040.  The generated code does use the
2917 68881 instructions that are emulated on the 68040.
2919 @item -m68020-60
2920 Generate output for a 68060, without using any of the new instructions.
2921 This results in code which can run relatively efficiently on either a
2922 68020/68881 or a 68030 or a 68040.  The generated code does use the
2923 68881 instructions that are emulated on the 68060.
2925 @item -mfpa
2926 Generate output containing Sun FPA instructions for floating point.
2928 @item -msoft-float
2929 Generate output containing library calls for floating point.
2930 @strong{Warning:} the requisite libraries are not available for all m68k
2931 targets.  Normally the facilities of the machine's usual C compiler are
2932 used, but this can't be done directly in cross-compilation.  You must
2933 make your own arrangements to provide suitable library functions for
2934 cross-compilation.  The embedded targets @samp{m68k-*-aout} and
2935 @samp{m68k-*-coff} do provide software floating point support.
2937 @item -mshort
2938 Consider type @code{int} to be 16 bits wide, like @code{short int}.
2940 @item -mnobitfield
2941 Do not use the bit-field instructions.  The @samp{-m68000} option
2942 implies @w{@samp{-mnobitfield}}.
2944 @item -mbitfield
2945 Do use the bit-field instructions.  The @samp{-m68020} option implies
2946 @samp{-mbitfield}.  This is the default if you use a configuration
2947 designed for a 68020.
2949 @item -mrtd
2950 Use a different function-calling convention, in which functions
2951 that take a fixed number of arguments return with the @code{rtd}
2952 instruction, which pops their arguments while returning.  This
2953 saves one instruction in the caller since there is no need to pop
2954 the arguments there.
2956 This calling convention is incompatible with the one normally
2957 used on Unix, so you cannot use it if you need to call libraries
2958 compiled with the Unix compiler.
2960 Also, you must provide function prototypes for all functions that
2961 take variable numbers of arguments (including @code{printf});
2962 otherwise incorrect code will be generated for calls to those
2963 functions.
2965 In addition, seriously incorrect code will result if you call a
2966 function with too many arguments.  (Normally, extra arguments are
2967 harmlessly ignored.)
2969 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
2970 68040, and 68060 processors, but not by the 68000 or 5200.
2972 @item -malign-int
2973 @itemx -mno-align-int
2974 Control whether GNU CC aligns @code{int}, @code{long}, @code{long long}, 
2975 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
2976 boundary (@samp{-malign-int}) or a 16-bit boundary (@samp{-mno-align-int}).
2977 Aligning variables on 32-bit boundaries produces code that runs somewhat
2978 faster on processors with 32-bit busses at the expense of more memory.
2980 @strong{Warning:} if you use the @samp{-malign-int} switch, GNU CC will
2981 align structures containing the above types  differently than
2982 most published application binary interface specifications for the m68k.
2984 @end table
2986 @node VAX Options
2987 @subsection VAX Options
2988 @cindex VAX options
2990 These @samp{-m} options are defined for the Vax:
2992 @table @code
2993 @item -munix
2994 Do not output certain jump instructions (@code{aobleq} and so on)
2995 that the Unix assembler for the Vax cannot handle across long
2996 ranges.
2998 @item -mgnu
2999 Do output those jump instructions, on the assumption that you
3000 will assemble with the GNU assembler.
3002 @item -mg
3003 Output code for g-format floating point numbers instead of d-format.
3004 @end table
3006 @node SPARC Options
3007 @subsection SPARC Options
3008 @cindex SPARC options
3010 These @samp{-m} switches are supported on the SPARC:
3012 @table @code
3013 @item -mno-app-regs
3014 @itemx -mapp-regs
3015 Specify @samp{-mapp-regs} to generate output using the global registers
3016 2 through 4, which the SPARC SVR4 ABI reserves for applications.  This
3017 is the default.
3019 To be fully SVR4 ABI compliant at the cost of some performance loss,
3020 specify @samp{-mno-app-regs}.  You should compile libraries and system
3021 software with this option.
3023 @item -mfpu
3024 @itemx -mhard-float
3025 Generate output containing floating point instructions.  This is the
3026 default.
3028 @item -mno-fpu
3029 @itemx -msoft-float
3030 Generate output containing library calls for floating point.
3031 @strong{Warning:} the requisite libraries are not available for all SPARC
3032 targets.  Normally the facilities of the machine's usual C compiler are
3033 used, but this cannot be done directly in cross-compilation.  You must make
3034 your own arrangements to provide suitable library functions for
3035 cross-compilation.  The embedded targets @samp{sparc-*-aout} and
3036 @samp{sparclite-*-*} do provide software floating point support.
3038 @samp{-msoft-float} changes the calling convention in the output file;
3039 therefore, it is only useful if you compile @emph{all} of a program with
3040 this option.  In particular, you need to compile @file{libgcc.a}, the
3041 library that comes with GNU CC, with @samp{-msoft-float} in order for
3042 this to work.
3044 @item -mhard-quad-float
3045 Generate output containing quad-word (long double) floating point
3046 instructions.
3048 @item -msoft-quad-float
3049 Generate output containing library calls for quad-word (long double)
3050 floating point instructions.  The functions called are those specified
3051 in the SPARC ABI.  This is the default.
3053 As of this writing, there are no sparc implementations that have hardware
3054 support for the quad-word floating point instructions.  They all invoke
3055 a trap handler for one of these instructions, and then the trap handler
3056 emulates the effect of the instruction.  Because of the trap handler overhead,
3057 this is much slower than calling the ABI library routines.  Thus the
3058 @samp{-msoft-quad-float} option is the default.
3060 @item -mno-epilogue
3061 @itemx -mepilogue
3062 With @samp{-mepilogue} (the default), the compiler always emits code for
3063 function exit at the end of each function.  Any function exit in
3064 the middle of the function (such as a return statement in C) will
3065 generate a jump to the exit code at the end of the function.
3067 With @samp{-mno-epilogue}, the compiler tries to emit exit code inline
3068 at every function exit.
3070 @item -mno-flat
3071 @itemx -mflat
3072 With @samp{-mflat}, the compiler does not generate save/restore instructions
3073 and will use a "flat" or single register window calling convention.
3074 This model uses %i7 as the frame pointer and is compatible with the normal
3075 register window model.  Code from either may be intermixed.
3076 The local registers and the input registers (0-5) are still treated as
3077 "call saved" registers and will be saved on the stack as necessary.
3079 With @samp{-mno-flat} (the default), the compiler emits save/restore
3080 instructions (except for leaf functions) and is the normal mode of operation.
3082 @item -mno-unaligned-doubles
3083 @itemx -munaligned-doubles
3084 Assume that doubles have 8 byte alignment.  This is the default.
3086 With @samp{-munaligned-doubles}, GNU CC assumes that doubles have 8 byte
3087 alignment only if they are contained in another type, or if they have an
3088 absolute address.  Otherwise, it assumes they have 4 byte alignment.
3089 Specifying this option avoids some rare compatibility problems with code
3090 generated by other compilers.  It is not the default because it results
3091 in a performance loss, especially for floating point code.
3093 @item -mv8
3094 @itemx -msparclite
3095 These two options select variations on the SPARC architecture.
3097 By default (unless specifically configured for the Fujitsu SPARClite),
3098 GCC generates code for the v7 variant of the SPARC architecture.
3100 @samp{-mv8} will give you SPARC v8 code.  The only difference from v7
3101 code is that the compiler emits the integer multiply and integer
3102 divide instructions which exist in SPARC v8 but not in SPARC v7.
3104 @samp{-msparclite} will give you SPARClite code.  This adds the integer
3105 multiply, integer divide step and scan (@code{ffs}) instructions which
3106 exist in SPARClite but not in SPARC v7.
3108 These options are deprecated and will be deleted in GNU CC 2.9.
3109 They have been replaced with @samp{-mcpu=xxx}.
3111 @item -mcypress
3112 @itemx -msupersparc
3113 These two options select the processor for which the code is optimised.
3115 With @samp{-mcypress} (the default), the compiler optimizes code for the
3116 Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx series.
3117 This is also appropriate for the older SparcStation 1, 2, IPX etc.
3119 With @samp{-msupersparc} the compiler optimizes code for the SuperSparc cpu, as
3120 used in the SparcStation 10, 1000 and 2000 series. This flag also enables use
3121 of the full SPARC v8 instruction set.
3123 These options are deprecated and will be deleted in GNU CC 2.9.
3124 They have been replaced with @samp{-mcpu=xxx}.
3126 @item -mcpu=@var{cpu_type}
3127 Set the instruction set, register set, and instruction scheduling parameters
3128 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
3129 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
3130 @samp{f930}, @samp{f934}, @samp{sparclet}, @samp{tsc701}, @samp{v9}, and
3131 @samp{ultrasparc}.
3133 Default instruction scheduling parameters are used for values that select
3134 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
3135 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
3137 Here is a list of each supported architecture and their supported
3138 implementations.
3140 @smallexample
3141     v7:             cypress
3142     v8:             supersparc
3143     sparclite:      f930, f934
3144     sparclet:       tsc701
3145     v9:             ultrasparc
3146 @end smallexample
3148 @item -mtune=@var{cpu_type}
3149 Set the instruction scheduling parameters for machine type
3150 @var{cpu_type}, but do not set the instruction set or register set that the
3151 option @samp{-mcpu=}@var{cpu_type} would.
3153 The same values for @samp{-mcpu=}@var{cpu_type} are used for
3154 @samp{-mtune=}@*@var{cpu_type}, though the only useful values are those that
3155 select a particular cpu implementation: @samp{cypress}, @samp{supersparc},
3156 @samp{f930}, @samp{f934}, @samp{tsc701}, @samp{ultrasparc}.
3158 @item -malign-loops=@var{num}
3159 Align loops to a 2 raised to a @var{num} byte boundary.  If
3160 @samp{-malign-loops} is not specified, the default is 2.
3162 @item -malign-jumps=@var{num}
3163 Align instructions that are only jumped to to a 2 raised to a @var{num}
3164 byte boundary.  If @samp{-malign-jumps} is not specified, the default is 2.
3166 @item -malign-functions=@var{num}
3167 Align the start of functions to a 2 raised to @var{num} byte boundary.
3168 If @samp{-malign-functions} is not specified, the default is 2 if compiling
3169 for 32 bit sparc, and 5 if compiling for 64 bit sparc.
3171 @end table
3173 These @samp{-m} switches are supported in addition to the above
3174 on the SPARCLET processor.
3176 @table @code
3177 @item -mlittle-endian
3178 Generate code for a processor running in little-endian mode.
3180 @item -mlive-g0
3181 Treat register @code{%g0} as a normal register.
3182 GCC will continue to clobber it as necessary but will not assume
3183 it always reads as 0.
3185 @item -mbroken-saverestore
3186 Generate code that does not use non-trivial forms of the @code{save} and
3187 @code{restore} instructions.  Early versions of the SPARCLET processor do
3188 not correctly handle @code{save} and @code{restore} instructions used with
3189 arguments.  They correctly handle them used without arguments.  A @code{save}
3190 instruction used without arguments increments the current window pointer
3191 but does not allocate a new stack frame.  It is assumed that the window
3192 overflow trap handler will properly handle this case as will interrupt
3193 handlers.
3194 @end table
3196 These @samp{-m} switches are supported in addition to the above
3197 on SPARC V9 processors in 64 bit environments.
3199 @table @code
3200 @item -mlittle-endian
3201 Generate code for a processor running in little-endian mode.
3203 @item -m32
3204 @itemx -m64
3205 Generate code for a 32 bit or 64 bit environment.
3206 The 32 bit environment sets int, long and pointer to 32 bits.
3207 The 64 bit environment sets int to 32 bits and long and pointer
3208 to 64 bits.
3210 @item -mcmodel=medlow
3211 Generate code for the Medium/Low code model: the program must be linked
3212 in the low 32 bits of the address space.  Pointers are 64 bits.
3213 Programs can be statically or dynamically linked.
3215 @item -mcmodel=medmid
3216 Generate code for the Medium/Middle code model: the program must be linked
3217 in the low 44 bits of the address space, the text segment must be less than
3218 2G bytes, and data segment must be within 2G of the text segment.
3219 Pointers are 64 bits.
3221 @item -mcmodel=medany
3222 Generate code for the Medium/Anywhere code model: the program may be linked
3223 anywhere in the address space, the text segment must be less than
3224 2G bytes, and data segment must be within 2G of the text segment.
3225 Pointers are 64 bits.
3227 @item -mcmodel=embmedany
3228 Generate code for the Medium/Anywhere code model for embedded systems:
3229 assume a 32 bit text and a 32 bit data segment, both starting anywhere
3230 (determined at link time).  Register %g4 points to the base of the
3231 data segment.  Pointers still 64 bits.
3232 Programs are statically linked, PIC is not supported.
3234 @item -mstack-bias
3235 @itemx -mno-stack-bias
3236 With @samp{-mstack-bias}, GNU CC assumes that the stack pointer, and
3237 frame pointer if present, are offset by -2047 which must be added back
3238 when making stack frame references.
3239 Otherwise, assume no such offset is present.
3240 @end table
3242 @node Convex Options
3243 @subsection Convex Options
3244 @cindex Convex options
3246 These @samp{-m} options are defined for Convex:
3248 @table @code
3249 @item -mc1
3250 Generate output for C1.  The code will run on any Convex machine.
3251 The preprocessor symbol @code{__convex__c1__} is defined.
3253 @item -mc2
3254 Generate output for C2.  Uses instructions not available on C1.
3255 Scheduling and other optimizations are chosen for max performance on C2.
3256 The preprocessor symbol @code{__convex_c2__} is defined.
3258 @item -mc32
3259 Generate output for C32xx.  Uses instructions not available on C1.
3260 Scheduling and other optimizations are chosen for max performance on C32.
3261 The preprocessor symbol @code{__convex_c32__} is defined.
3263 @item -mc34
3264 Generate output for C34xx.  Uses instructions not available on C1.
3265 Scheduling and other optimizations are chosen for max performance on C34.
3266 The preprocessor symbol @code{__convex_c34__} is defined.
3268 @item -mc38
3269 Generate output for C38xx.  Uses instructions not available on C1.
3270 Scheduling and other optimizations are chosen for max performance on C38.
3271 The preprocessor symbol @code{__convex_c38__} is defined.
3273 @item -margcount
3274 Generate code which puts an argument count in the word preceding each
3275 argument list.  This is compatible with regular CC, and a few programs
3276 may need the argument count word.  GDB and other source-level debuggers
3277 do not need it; this info is in the symbol table.
3279 @item -mnoargcount
3280 Omit the argument count word.  This is the default.
3282 @item -mvolatile-cache
3283 Allow volatile references to be cached.  This is the default.
3285 @item -mvolatile-nocache
3286 Volatile references bypass the data cache, going all the way to memory.
3287 This is only needed for multi-processor code that does not use standard
3288 synchronization instructions.  Making non-volatile references to volatile
3289 locations will not necessarily work.
3291 @item -mlong32
3292 Type long is 32 bits, the same as type int.  This is the default.
3294 @item -mlong64
3295 Type long is 64 bits, the same as type long long.  This option is useless,
3296 because no library support exists for it.
3297 @end table
3299 @node AMD29K Options
3300 @subsection AMD29K Options
3301 @cindex AMD29K options
3303 These @samp{-m} options are defined for the AMD Am29000:
3305 @table @code
3306 @item -mdw
3307 @kindex -mdw
3308 @cindex DW bit (29k)
3309 Generate code that assumes the @code{DW} bit is set, i.e., that byte and
3310 halfword operations are directly supported by the hardware.  This is the
3311 default.
3313 @item -mndw
3314 @kindex -mndw
3315 Generate code that assumes the @code{DW} bit is not set.
3317 @item -mbw
3318 @kindex -mbw
3319 @cindex byte writes (29k)
3320 Generate code that assumes the system supports byte and halfword write
3321 operations.  This is the default.
3323 @item -mnbw
3324 @kindex -mnbw
3325 Generate code that assumes the systems does not support byte and
3326 halfword write operations.  @samp{-mnbw} implies @samp{-mndw}.
3328 @item -msmall
3329 @kindex -msmall
3330 @cindex memory model (29k)
3331 Use a small memory model that assumes that all function addresses are
3332 either within a single 256 KB segment or at an absolute address of less
3333 than 256k.  This allows the @code{call} instruction to be used instead
3334 of a @code{const}, @code{consth}, @code{calli} sequence.
3336 @item -mnormal
3337 @kindex -mnormal
3338 Use the normal memory model: Generate @code{call} instructions only when
3339 calling functions in the same file and @code{calli} instructions
3340 otherwise.  This works if each file occupies less than 256 KB but allows
3341 the entire executable to be larger than 256 KB.  This is the default.
3343 @item -mlarge
3344 Always use @code{calli} instructions.  Specify this option if you expect
3345 a single file to compile into more than 256 KB of code.
3347 @item -m29050
3348 @kindex -m29050
3349 @cindex processor selection (29k)
3350 Generate code for the Am29050.
3352 @item -m29000
3353 @kindex -m29000
3354 Generate code for the Am29000.  This is the default.
3356 @item -mkernel-registers
3357 @kindex -mkernel-registers
3358 @cindex kernel and user registers (29k)
3359 Generate references to registers @code{gr64-gr95} instead of to
3360 registers @code{gr96-gr127}.  This option can be used when compiling
3361 kernel code that wants a set of global registers disjoint from that used
3362 by user-mode code.
3364 Note that when this option is used, register names in @samp{-f} flags
3365 must use the normal, user-mode, names.
3367 @item -muser-registers
3368 @kindex -muser-registers
3369 Use the normal set of global registers, @code{gr96-gr127}.  This is the
3370 default.
3372 @item -mstack-check
3373 @itemx -mno-stack-check
3374 @kindex -mstack-check
3375 @cindex stack checks (29k)
3376 Insert (or do not insert) a call to @code{__msp_check} after each stack
3377 adjustment.  This is often used for kernel code.
3379 @item -mstorem-bug
3380 @itemx -mno-storem-bug
3381 @kindex -mstorem-bug
3382 @cindex storem bug (29k)
3383 @samp{-mstorem-bug} handles 29k processors which cannot handle the
3384 separation of a mtsrim insn and a storem instruction (most 29000 chips
3385 to date, but not the 29050).
3387 @item -mno-reuse-arg-regs
3388 @itemx -mreuse-arg-regs
3389 @kindex -mreuse-arg-regs
3390 @samp{-mno-reuse-arg-regs} tells the compiler to only use incoming argument
3391 registers for copying out arguments.  This helps detect calling a function
3392 with fewer arguments than it was declared with.
3394 @item -mno-impure-text
3395 @itemx -mimpure-text
3396 @kindex -mimpure-text
3397 @samp{-mimpure-text}, used in addition to @samp{-shared}, tells the compiler to
3398 not pass @samp{-assert pure-text} to the linker when linking a shared object.
3400 @item -msoft-float
3401 @kindex -msoft-float
3402 Generate output containing library calls for floating point.
3403 @strong{Warning:} the requisite libraries are not part of GNU CC.
3404 Normally the facilities of the machine's usual C compiler are used, but
3405 this can't be done directly in cross-compilation.  You must make your
3406 own arrangements to provide suitable library functions for
3407 cross-compilation.
3408 @end table
3410 @node ARM Options
3411 @subsection ARM Options
3412 @cindex ARM options
3414 These @samp{-m} options are defined for Advanced RISC Machines (ARM)
3415 architectures:
3417 @table @code
3418 @item -mapcs-frame
3419 @kindex -mapcs-frame
3420 Generate a stack frame that is compliant with the ARM Procedure Call
3421 Standard for all functions, even if this is not strictly necessary for
3422 correct execution of the code.
3424 @item -mapcs-26
3425 @kindex -mapcs-26
3426 Generate code for a processor running with a 26-bit program counter,
3427 and conforming to the function calling standards for the APCS 26-bit
3428 option.  This option replaces the @samp{-m2} and @samp{-m3} options
3429 of previous releases of the compiler.
3431 @item -mapcs-32
3432 @kindex -mapcs-32
3433 Generate code for a processor running with a 32-bit program counter,
3434 and conforming to the function calling standards for the APCS 32-bit
3435 option.  This option replaces the @samp{-m6} option of previous releases
3436 of the compiler.
3438 @item -mhard-float
3439 Generate output containing floating point instructions.  This is the
3440 default.
3442 @item -msoft-float
3443 Generate output containing library calls for floating point.
3444 @strong{Warning:} the requisite libraries are not available for all ARM
3445 targets.  Normally the facilities of the machine's usual C compiler are
3446 used, but this cannot be done directly in cross-compilation.  You must make
3447 your own arrangements to provide suitable library functions for
3448 cross-compilation.
3450 @samp{-msoft-float} changes the calling convention in the output file;
3451 therefore, it is only useful if you compile @emph{all} of a program with
3452 this option.  In particular, you need to compile @file{libgcc.a}, the
3453 library that comes with GNU CC, with @samp{-msoft-float} in order for
3454 this to work.
3456 @item -mlittle-endian
3457 Generate code for a processor running in little-endian mode.  This is
3458 the default for all standard configurations.
3460 @item -mbig-endian
3461 Generate code for a processor running in big-endian mode; the default is
3462 to compile code for a little-endian processor.
3464 @item -mwords-little-endian
3465 This option only applies when generating code for big-endian processors.
3466 Generate code for a little-endian word order but a big-endian byte
3467 order.  That is, a byte order of the form @samp{32107654}.  Note: this
3468 option should only be used if you require compatibility with code for
3469 big-endian ARM processors generated by versions of the compiler prior to
3470 2.8.
3472 @item -mshort-load-bytes
3473 @kindex -mshort-load-bytes
3474 Do not try to load half-words (eg @samp{short}s) by loading a word from
3475 an unaligned address.  For some targets the MMU is configured to trap
3476 unaligned loads; use this option to generate code that is safe in these
3477 environments.
3479 @item -mno-short-load-bytes
3480 @kindex -mno-short-load-bytes
3481 Use unaligned word loads to load half-words (eg @samp{short}s).  This
3482 option produces more efficient code, but the MMU is sometimes configured
3483 to trap these instructions.
3485 @item -mbsd
3486 @kindex -mbsd
3487 This option only applies to RISC iX.  Emulate the native BSD-mode
3488 compiler.  This is the default if @samp{-ansi} is not specified.
3490 @item -mxopen
3491 @kindex -mxopen
3492 This option only applies to RISC iX.  Emulate the native X/Open-mode
3493 compiler.
3495 @item -mno-symrename
3496 @kindex -mno-symrename
3497 This option only applies to RISC iX.  Do not run the assembler
3498 post-processor, @samp{symrename}, after code has been assembled.
3499 Normally it is necessary to modify some of the standard symbols in
3500 preparation for linking with the RISC iX C library; this option
3501 suppresses this pass.  The post-processor is never run when the
3502 compiler is built for cross-compilation.
3503 @end table
3505 @node MN10300 Options
3506 @subsection MN10300 Options
3507 @cindex MN10300 options
3508 These @samp{-m} options are defined for Matsushita MN10300 architectures:
3510 @table @code
3511 @item -mmult-bug
3512 Generate code to avoid bugs in the multiply instructions for the MN10300
3513 processors.  This is the default.
3515 @item -mno-mult-bug
3516 Do not generate code to avoid bugs in the multiply instructions for the
3517 MN10300 processors.
3518 @end table
3520 @node M32R/D Options
3521 @subsection M32R/D Options
3522 @cindex M32R/D options
3524 These @samp{-m} options are defined for Mitsubishi M32R/D architectures:
3526 @table @code
3527 @item -mcode-model=small
3528 Assume all objects live in the lower 16MB of memory (so that their addresses
3529 can be loaded with the @code{ld24} instruction), and assume all subroutines
3530 are reachable with the @code{bl} instruction.
3531 This is the default.
3533 The addressability of a particular object can be set with the
3534 @code{model} attribute.
3536 @item -mcode-model=medium
3537 Assume objects may be anywhere in the 32 bit address space (the compiler
3538 will generate @code{seth/add3} instructions to load their addresses), and
3539 assume all subroutines are reachable with the @code{bl} instruction.
3541 @item -mcode-model=large
3542 Assume objects may be anywhere in the 32 bit address space (the compiler
3543 will generate @code{seth/add3} instructions to load their addresses), and
3544 assume subroutines may not be reachable with the @code{bl} instruction
3545 (the compiler will generate the much slower @code{seth/add3/jl}
3546 instruction sequence).
3548 @item -msdata=none
3549 Disable use of the small data area.  Variables will be put into
3550 one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
3551 @code{section} attribute has been specified).
3552 This is the default.
3554 The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
3555 Objects may be explicitly put in the small data area with the
3556 @code{section} attribute using one of these sections.
3558 @item -msdata=sdata
3559 Put small global and static data in the small data area, but do not
3560 generate special code to reference them.
3562 @item -msdata=use
3563 Put small global and static data in the small data area, and generate
3564 special instructions to reference them.
3566 @item -G @var{num}
3567 @cindex smaller data references
3568 Put global and static objects less than or equal to @var{num} bytes
3569 into the small data or bss sections instead of the normal data or bss
3570 sections.  The default value of @var{num} is 8.
3571 The @samp{-msdata} option must be set to one of @samp{sdata} or @samp{use}
3572 for this option to have any effect.
3574 All modules should be compiled with the same @samp{-G @var{num}} value.
3575 Compiling with different values of @var{num} may or may not work; if it
3576 doesn't the linker will give an error message - incorrect code will not be
3577 generated.
3579 @end table
3581 @node M88K Options
3582 @subsection M88K Options
3583 @cindex M88k options
3585 These @samp{-m} options are defined for Motorola 88k architectures:
3587 @table @code
3588 @item -m88000
3589 @kindex -m88000
3590 Generate code that works well on both the m88100 and the
3591 m88110.
3593 @item -m88100
3594 @kindex -m88100
3595 Generate code that works best for the m88100, but that also
3596 runs on the m88110.
3598 @item -m88110
3599 @kindex -m88110
3600 Generate code that works best for the m88110, and may not run
3601 on the m88100.
3603 @item -mbig-pic
3604 @kindex -mbig-pic
3605 Obsolete option to be removed from the next revision.
3606 Use @samp{-fPIC}.
3608 @item -midentify-revision
3609 @kindex -midentify-revision
3610 @kindex ident
3611 @cindex identifying source, compiler (88k)
3612 Include an @code{ident} directive in the assembler output recording the
3613 source file name, compiler name and version, timestamp, and compilation
3614 flags used.
3616 @item -mno-underscores
3617 @kindex -mno-underscores
3618 @cindex underscores, avoiding (88k)
3619 In assembler output, emit symbol names without adding an underscore
3620 character at the beginning of each name.  The default is to use an
3621 underscore as prefix on each name.
3623 @item -mocs-debug-info
3624 @itemx -mno-ocs-debug-info
3625 @kindex -mocs-debug-info
3626 @kindex -mno-ocs-debug-info
3627 @cindex OCS (88k)
3628 @cindex debugging, 88k OCS
3629 Include (or omit) additional debugging information (about registers used
3630 in each stack frame) as specified in the 88open Object Compatibility
3631 Standard, ``OCS''.  This extra information allows debugging of code that
3632 has had the frame pointer eliminated.  The default for DG/UX, SVr4, and
3633 Delta 88 SVr3.2 is to include this information; other 88k configurations
3634 omit this information by default.
3636 @item -mocs-frame-position
3637 @kindex -mocs-frame-position
3638 @cindex register positions in frame (88k)
3639 When emitting COFF debugging information for automatic variables and
3640 parameters stored on the stack, use the offset from the canonical frame
3641 address, which is the stack pointer (register 31) on entry to the
3642 function.  The DG/UX, SVr4, Delta88 SVr3.2, and BCS configurations use
3643 @samp{-mocs-frame-position}; other 88k configurations have the default
3644 @samp{-mno-ocs-frame-position}.
3646 @item -mno-ocs-frame-position
3647 @kindex -mno-ocs-frame-position
3648 @cindex register positions in frame (88k)
3649 When emitting COFF debugging information for automatic variables and
3650 parameters stored on the stack, use the offset from the frame pointer
3651 register (register 30).  When this option is in effect, the frame
3652 pointer is not eliminated when debugging information is selected by the
3653 -g switch.
3655 @item -moptimize-arg-area
3656 @itemx -mno-optimize-arg-area
3657 @kindex -moptimize-arg-area
3658 @kindex -mno-optimize-arg-area
3659 @cindex arguments in frame (88k)
3660 Control how function arguments are stored in stack frames.
3661 @samp{-moptimize-arg-area} saves space by optimizing them, but this
3662 conflicts with the 88open specifications.  The opposite alternative,
3663 @samp{-mno-optimize-arg-area}, agrees with 88open standards.  By default
3664 GNU CC does not optimize the argument area.
3666 @item -mshort-data-@var{num}
3667 @kindex -mshort-data-@var{num}
3668 @cindex smaller data references (88k)
3669 @cindex r0-relative references (88k)
3670 Generate smaller data references by making them relative to @code{r0},
3671 which allows loading a value using a single instruction (rather than the
3672 usual two).  You control which data references are affected by
3673 specifying @var{num} with this option.  For example, if you specify
3674 @samp{-mshort-data-512}, then the data references affected are those
3675 involving displacements of less than 512 bytes.
3676 @samp{-mshort-data-@var{num}} is not effective for @var{num} greater
3677 than 64k.
3679 @item -mserialize-volatile
3680 @kindex -mserialize-volatile
3681 @itemx -mno-serialize-volatile
3682 @kindex -mno-serialize-volatile
3683 @cindex sequential consistency on 88k
3684 Do, or don't, generate code to guarantee sequential consistency
3685 of volatile memory references.  By default, consistency is
3686 guaranteed.
3688 The order of memory references made by the MC88110 processor does
3689 not always match the order of the instructions requesting those
3690 references.  In particular, a load instruction may execute before
3691 a preceding store instruction.  Such reordering violates
3692 sequential consistency of volatile memory references, when there
3693 are multiple processors.   When consistency must be guaranteed,
3694 GNU C generates special instructions, as needed, to force
3695 execution in the proper order.
3697 The MC88100 processor does not reorder memory references and so
3698 always provides sequential consistency.  However, by default, GNU
3699 C generates the special instructions to guarantee consistency
3700 even when you use @samp{-m88100}, so that the code may be run on an
3701 MC88110 processor.  If you intend to run your code only on the
3702 MC88100 processor, you may use @samp{-mno-serialize-volatile}.
3704 The extra code generated to guarantee consistency may affect the
3705 performance of your application.  If you know that you can safely
3706 forgo this guarantee, you may use @samp{-mno-serialize-volatile}.
3708 @item -msvr4
3709 @itemx -msvr3
3710 @kindex -msvr4
3711 @kindex -msvr3
3712 @cindex assembler syntax, 88k
3713 @cindex SVr4
3714 Turn on (@samp{-msvr4}) or off (@samp{-msvr3}) compiler extensions
3715 related to System V release 4 (SVr4).  This controls the following:
3717 @enumerate
3718 @item
3719 Which variant of the assembler syntax to emit.
3720 @item
3721 @samp{-msvr4} makes the C preprocessor recognize @samp{#pragma weak}
3722 that is used on System V release 4.
3723 @item
3724 @samp{-msvr4} makes GNU CC issue additional declaration directives used in
3725 SVr4.
3726 @end enumerate
3728 @samp{-msvr4} is the default for the m88k-motorola-sysv4 and
3729 m88k-dg-dgux m88k configurations. @samp{-msvr3} is the default for all
3730 other m88k configurations.
3732 @item -mversion-03.00
3733 @kindex -mversion-03.00
3734 This option is obsolete, and is ignored.
3735 @c ??? which asm syntax better for GAS?  option there too?
3737 @item -mno-check-zero-division
3738 @itemx -mcheck-zero-division
3739 @kindex -mno-check-zero-division
3740 @kindex -mcheck-zero-division
3741 @cindex zero division on 88k
3742 Do, or don't, generate code to guarantee that integer division by
3743 zero will be detected.  By default, detection is guaranteed.
3745 Some models of the MC88100 processor fail to trap upon integer
3746 division by zero under certain conditions.  By default, when
3747 compiling code that might be run on such a processor, GNU C
3748 generates code that explicitly checks for zero-valued divisors
3749 and traps with exception number 503 when one is detected.  Use of
3750 mno-check-zero-division suppresses such checking for code
3751 generated to run on an MC88100 processor.
3753 GNU C assumes that the MC88110 processor correctly detects all
3754 instances of integer division by zero.  When @samp{-m88110} is
3755 specified, both @samp{-mcheck-zero-division} and
3756 @samp{-mno-check-zero-division} are ignored, and no explicit checks for
3757 zero-valued divisors are generated.
3759 @item -muse-div-instruction
3760 @kindex -muse-div-instruction
3761 @cindex divide instruction, 88k
3762 Use the div instruction for signed integer division on the
3763 MC88100 processor.  By default, the div instruction is not used.
3765 On the MC88100 processor the signed integer division instruction
3766 div) traps to the operating system on a negative operand.  The
3767 operating system transparently completes the operation, but at a
3768 large cost in execution time.  By default, when compiling code
3769 that might be run on an MC88100 processor, GNU C emulates signed
3770 integer division using the unsigned integer division instruction
3771 divu), thereby avoiding the large penalty of a trap to the
3772 operating system.  Such emulation has its own, smaller, execution
3773 cost in both time and space.  To the extent that your code's
3774 important signed integer division operations are performed on two
3775 nonnegative operands, it may be desirable to use the div
3776 instruction directly.
3778 On the MC88110 processor the div instruction (also known as the
3779 divs instruction) processes negative operands without trapping to
3780 the operating system.  When @samp{-m88110} is specified,
3781 @samp{-muse-div-instruction} is ignored, and the div instruction is used
3782 for signed integer division.
3784 Note that the result of dividing INT_MIN by -1 is undefined.  In
3785 particular, the behavior of such a division with and without
3786 @samp{-muse-div-instruction}  may differ.
3788 @item -mtrap-large-shift
3789 @itemx -mhandle-large-shift
3790 @kindex -mtrap-large-shift
3791 @kindex -mhandle-large-shift
3792 @cindex bit shift overflow (88k)
3793 @cindex large bit shifts (88k)
3794 Include code to detect bit-shifts of more than 31 bits; respectively,
3795 trap such shifts or emit code to handle them properly.  By default GNU CC
3796 makes no special provision for large bit shifts.
3798 @item -mwarn-passed-structs
3799 @kindex -mwarn-passed-structs
3800 @cindex structure passing (88k)
3801 Warn when a function passes a struct as an argument or result.
3802 Structure-passing conventions have changed during the evolution of the C
3803 language, and are often the source of portability problems.  By default,
3804 GNU CC issues no such warning.
3805 @end table
3807 @node RS/6000 and PowerPC Options
3808 @subsection IBM RS/6000 and PowerPC Options
3809 @cindex RS/6000 and PowerPC Options
3810 @cindex IBM RS/6000 and PowerPC Options
3812 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
3813 @table @code
3814 @item -mpower
3815 @itemx -mno-power
3816 @itemx -mpower2
3817 @itemx -mno-power2
3818 @itemx -mpowerpc
3819 @itemx -mno-powerpc
3820 @itemx -mpowerpc-gpopt
3821 @itemx -mno-powerpc-gpopt
3822 @itemx -mpowerpc-gfxopt
3823 @itemx -mno-powerpc-gfxopt
3824 @itemx -mpowerpc64
3825 @itemx -mno-powerpc64
3826 @kindex -mpower
3827 @kindex -mpower2
3828 @kindex -mpowerpc
3829 @kindex -mpowerpc-gpopt
3830 @kindex -mpowerpc-gfxopt
3831 @kindex -mpowerpc64
3832 GNU CC supports two related instruction set architectures for the
3833 RS/6000 and PowerPC.  The @dfn{POWER} instruction set are those
3834 instructions supported by the @samp{rios} chip set used in the original
3835 RS/6000 systems and the @dfn{PowerPC} instruction set is the
3836 architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
3837 the IBM 4xx microprocessors.
3839 Neither architecture is a subset of the other.  However there is a
3840 large common subset of instructions supported by both.  An MQ
3841 register is included in processors supporting the POWER architecture.
3843 You use these options to specify which instructions are available on the
3844 processor you are using.  The default value of these options is
3845 determined when configuring GNU CC.  Specifying the
3846 @samp{-mcpu=@var{cpu_type}} overrides the specification of these
3847 options.  We recommend you use the @samp{-mcpu=@var{cpu_type}} option
3848 rather than the options listed above.
3850 The @samp{-mpower} option allows GNU CC to generate instructions that
3851 are found only in the POWER architecture and to use the MQ register.
3852 Specifying @samp{-mpower2} implies @samp{-power} and also allows GNU CC
3853 to generate instructions that are present in the POWER2 architecture but
3854 not the original POWER architecture.
3856 The @samp{-mpowerpc} option allows GNU CC to generate instructions that
3857 are found only in the 32-bit subset of the PowerPC architecture.
3858 Specifying @samp{-mpowerpc-gpopt} implies @samp{-mpowerpc} and also allows
3859 GNU CC to use the optional PowerPC architecture instructions in the
3860 General Purpose group, including floating-point square root.  Specifying
3861 @samp{-mpowerpc-gfxopt} implies @samp{-mpowerpc} and also allows GNU CC to
3862 use the optional PowerPC architecture instructions in the Graphics
3863 group, including floating-point select.
3865 The @samp{-mpowerpc64} option allows GNU CC to generate the additional
3866 64-bit instructions that are found in the full PowerPC64 architecture
3867 and to treat GPRs as 64-bit, doubleword quantities.  GNU CC defaults to
3868 @samp{-mno-powerpc64}.
3870 If you specify both @samp{-mno-power} and @samp{-mno-powerpc}, GNU CC
3871 will use only the instructions in the common subset of both
3872 architectures plus some special AIX common-mode calls, and will not use
3873 the MQ register.  Specifying both @samp{-mpower} and @samp{-mpowerpc}
3874 permits GNU CC to use any instruction from either architecture and to
3875 allow use of the MQ register; specify this for the Motorola MPC601.
3877 @item -mnew-mnemonics
3878 @itemx -mold-mnemonics
3879 @kindex -mnew-mnemonics
3880 @kindex -mold-mnemonics
3881 Select which mnemonics to use in the generated assembler code.
3882 @samp{-mnew-mnemonics} requests output that uses the assembler mnemonics
3883 defined for the PowerPC architecture, while @samp{-mold-mnemonics}
3884 requests the assembler mnemonics defined for the POWER architecture.
3885 Instructions defined in only one architecture have only one mnemonic;
3886 GNU CC uses that mnemonic irrespective of which of these options is
3887 specified.
3889 GNU CC defaults to the mnemonics appropriate for the architecture in
3890 use.  Specifying @samp{-mcpu=@var{cpu_type}} sometimes overrides the
3891 value of these option.  Unless you are building a cross-compiler, you
3892 should normally not specify either @samp{-mnew-mnemonics} or
3893 @samp{-mold-mnemonics}, but should instead accept the default.
3895 @item -mcpu=@var{cpu_type}
3896 @kindex -mcpu
3897 Set architecture type, register usage, choice of mnemonics, and
3898 instruction scheduling parameters for machine type @var{cpu_type}.
3899 Supported values for @var{cpu_type} are @samp{rs6000}, @samp{rios1},
3900 @samp{rios2}, @samp{rsc}, @samp{601}, @samp{602}, @samp{603},
3901 @samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{power},
3902 @samp{power2}, @samp{powerpc}, @samp{403}, @samp{505}, @samp{801},
3903 @samp{821}, @samp{823}, and @samp{860} and @samp{common}.
3904 @samp{-mcpu=power}, @samp{-mcpu=power2}, and @samp{-mcpu=powerpc}
3905 specify generic POWER, POWER2 and pure PowerPC (i.e., not MPC601)
3906 architecture machine types, with an appropriate, generic processor model
3907 assumed for scheduling purposes.@refill
3909 @c overfull hbox here --bob 22 jul96
3910 @c original text between ignore ... end ignore
3911 @ignore
3912 Specifying any of the @samp{-mcpu=rios1}, @samp{-mcpu=rios2},
3913 @samp{-mcpu=rsc}, @samp{-mcpu=power}, or @samp{-mcpu=power2} options
3914 enables the @samp{-mpower} option and disables the @samp{-mpowerpc}
3915 option; @samp{-mcpu=601} enables both the @samp{-mpower} and
3916 @samp{-mpowerpc} options; all of @samp{-mcpu=602}, @samp{-mcpu=603},
3917 @samp{-mcpu=603e}, @samp{-mcpu=604}, @samp{-mcpu=604e},
3918 @samp{-mcpu=620}, @samp{-mcpu=403}, @samp{-mcpu=505}, @samp{-mcpu=801},
3919 @samp{-mcpu=821}, @samp{-mcpu=823}, @samp{-mcpu=860} and
3920 @samp{-mcpu=powerpc} enable the @samp{-mpowerpc} option and disable the
3921 @samp{-mpower} option; @samp{-mcpu=common} disables both the
3922 @samp{-mpower} and @samp{-mpowerpc} options.@refill
3923 @end ignore
3924 @c            changed paragraph
3925 Specifying any of the following options: 
3926 @samp{-mcpu=rios1}, @samp{-mcpu=rios2}, @samp{-mcpu=rsc},
3927 @samp{-mcpu=power}, or @samp{-mcpu=power2}  
3928 enables the @samp{-mpower} option and disables the @samp{-mpowerpc} option; 
3929 @samp{-mcpu=601} enables both the @samp{-mpower} and @samp{-mpowerpc} options.
3930 All of @samp{-mcpu=602}, @samp{-mcpu=603}, @samp{-mcpu=603e},
3931 @samp{-mcpu=604}, @samp{-mcpu=620}, 
3932 enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.  
3933 Exactly similarly, all of @samp{-mcpu=403},
3934 @samp{-mcpu=505}, @samp{-mcpu=821}, @samp{-mcpu=860} and @samp{-mcpu=powerpc} 
3935 enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.
3936 @samp{-mcpu=common} disables both the 
3937 @samp{-mpower} and @samp{-mpowerpc} options.@refill
3938 @c             end changes to prevent overfull hboxes
3940 AIX versions 4 or greater selects @samp{-mcpu=common} by default, so
3941 that code will operate on all members of the RS/6000 and PowerPC
3942 families.  In that case, GNU CC will use only the instructions in the
3943 common subset of both architectures plus some special AIX common-mode
3944 calls, and will not use the MQ register.  GNU CC assumes a generic
3945 processor model for scheduling purposes.
3947 Specifying any of the options @samp{-mcpu=rios1}, @samp{-mcpu=rios2},
3948 @samp{-mcpu=rsc}, @samp{-mcpu=power}, or @samp{-mcpu=power2} also
3949 disables the @samp{new-mnemonics} option.  Specifying @samp{-mcpu=601},
3950 @samp{-mcpu=602}, @samp{-mcpu=603}, @samp{-mcpu=603e}, @samp{-mcpu=604},
3951 @samp{620}, @samp{403}, or @samp{-mcpu=powerpc} also enables the
3952 @samp{new-mnemonics} option.@refill
3954 Specifying @samp{-mcpu=403}, @samp{-mcpu=821}, or @samp{-mcpu=860} also
3955 enables the @samp{-msoft-float} option.
3957 @item -mtune=@var{cpu_type}
3958 Set the instruction scheduling parameters for machine type
3959 @var{cpu_type}, but do not set the architecture type, register usage,
3960 choice of mnemonics like @samp{-mcpu=}@var{cpu_type} would.  The same
3961 values for @var{cpu_type} are used for @samp{-mtune=}@var{cpu_type} as
3962 for @samp{-mcpu=}@var{cpu_type}.  The @samp{-mtune=}@var{cpu_type}
3963 option overrides the @samp{-mcpu=}@var{cpu_type} option in terms of
3964 instruction scheduling parameters.
3966 @item -mfull-toc
3967 @itemx -mno-fp-in-toc
3968 @itemx -mno-sum-in-toc
3969 @itemx -mminimal-toc
3970 @kindex -mminimal-toc
3971 Modify generation of the TOC (Table Of Contents), which is created for
3972 every executable file.  The @samp{-mfull-toc} option is selected by
3973 default.  In that case, GNU CC will allocate at least one TOC entry for
3974 each unique non-automatic variable reference in your program.  GNU CC
3975 will also place floating-point constants in the TOC.  However, only
3976 16,384 entries are available in the TOC.
3978 If you receive a linker error message that saying you have overflowed
3979 the available TOC space, you can reduce the amount of TOC space used
3980 with the @samp{-mno-fp-in-toc} and @samp{-mno-sum-in-toc} options.
3981 @samp{-mno-fp-in-toc} prevents GNU CC from putting floating-point
3982 constants in the TOC and @samp{-mno-sum-in-toc} forces GNU CC to
3983 generate code to calculate the sum of an address and a constant at
3984 run-time instead of putting that sum into the TOC.  You may specify one
3985 or both of these options.  Each causes GNU CC to produce very slightly
3986 slower and larger code at the expense of conserving TOC space.
3988 If you still run out of space in the TOC even when you specify both of
3989 these options, specify @samp{-mminimal-toc} instead.  This option causes
3990 GNU CC to make only one TOC entry for every file.  When you specify this
3991 option, GNU CC will produce code that is slower and larger but which
3992 uses extremely little TOC space.  You may wish to use this option
3993 only on files that contain less frequently executed code. @refill
3995 @item -maix64
3996 @itemx -maix32
3997 @kindex -maix64
3998 @kindex -maix32
3999 Enable AIX 64-bit ABI and calling convention: 64-bit pointers, 64-bit
4000 @code{long} type, and the infrastructure needed to support them.
4001 Specifying @samp{-maix64} implies @samp{-mpowerpc64} and
4002 @samp{-mpowerpc}, while @samp{-maix32} disables the 64-bit ABI and
4003 implies @samp{-mno-powerpc64}.  GNU CC defaults to @samp{-maix32}.
4005 @item -mxl-call
4006 @itemx -mno-xl-call
4007 @kindex -mxl-call
4008 On AIX, pass floating-point arguments to prototyped functions beyond the
4009 register save area (RSA) on the stack in addition to argument FPRs.  The
4010 AIX calling convention was extended but not initially documented to
4011 handle an obscure K&R C case of calling a function that takes the
4012 address of its arguments with fewer arguments than declared.  AIX XL
4013 compilers access floating point arguments which do not fit in the
4014 RSA from the stack when a subroutine is compiled without
4015 optimization.  Because always storing floating-point arguments on the
4016 stack is inefficient and rarely needed, this option is not enabled by
4017 default and only is necessary when calling subroutines compiled by AIX
4018 XL compilers without optimization.
4020 @item -mthreads
4021 @kindex -mthreads
4022 Support @dfn{AIX Threads}.  Link an application written to use
4023 @dfn{pthreads} with special libraries and startup code to enable the
4024 application to run.
4026 @item -mpe
4027 @kindex -mpe
4028 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE).  Link an
4029 application written to use message passing with special startup code to
4030 enable the application to run.  The system must have PE installed in the
4031 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
4032 must be overridden with the @samp{-specs=} option to specify the
4033 appropriate directory location.  The Parallel Environment does not
4034 support threads, so the @samp{-mpe} option and the @samp{-mthreads}
4035 option are incompatible.
4037 @item -msoft-float
4038 @itemx -mhard-float
4039 @kindex -msoft-float
4040 Generate code that does not use (uses) the floating-point register set.
4041 Software floating point emulation is provided if you use the
4042 @samp{-msoft-float} option, and pass the option to GNU CC when linking.
4044 @item -mmultiple
4045 @itemx -mno-multiple
4046 Generate code that uses (does not use) the load multiple word
4047 instructions and the store multiple word instructions.  These
4048 instructions are generated by default on POWER systems, and not
4049 generated on PowerPC systems.  Do not use @samp{-mmultiple} on little
4050 endian PowerPC systems, since those instructions do not work when the
4051 processor is in little endian mode.
4053 @item -mstring
4054 @itemx -mno-string
4055 @kindex -mstring
4056 Generate code that uses (does not use) the load string instructions and the
4057 store string word instructions to save multiple registers and do small block
4058 moves.  These instructions are generated by default on POWER systems, and not
4059 generated on PowerPC systems.  Do not use @samp{-mstring} on little endian
4060 PowerPC systems, since those instructions do not work when the processor is in
4061 little endian mode.
4063 @item -mupdate
4064 @itemx -mno-update
4065 @kindex -mupdate
4066 Generate code that uses (does not use) the load or store instructions
4067 that update the base register to the address of the calculated memory
4068 location.  These instructions are generated by default.  If you use
4069 @samp{-mno-update}, there is a small window between the time that the
4070 stack pointer is updated and the address of the previous frame is
4071 stored, which means code that walks the stack frame across interrupts or
4072 signals may get corrupted data.
4074 @item -mfused-madd
4075 @itemx -mno-fused-madd
4076 @kindex -mfused-madd
4077 Generate code that uses (does not use) the floating point multiply and
4078 accumulate instructions.  These instructions are generated by default if
4079 hardware floating is used.
4081 @item -mno-bit-align
4082 @itemx -mbit-align
4083 @kindex -mbit-align
4084 On System V.4 and embedded PowerPC systems do not (do) force structures
4085 and unions that contain bit fields to be aligned to the base type of the
4086 bit field.
4088 For example, by default a structure containing nothing but 8
4089 @code{unsigned} bitfields of length 1 would be aligned to a 4 byte
4090 boundary and have a size of 4 bytes.  By using @samp{-mno-bit-align},
4091 the structure would be aligned to a 1 byte boundary and be one byte in
4092 size.
4094 @item -mno-strict-align
4095 @itemx -mstrict-align
4096 @kindex -mstrict-align
4097 On System V.4 and embedded PowerPC systems do not (do) assume that
4098 unaligned memory references will be handled by the system.
4100 @item -mrelocatable
4101 @itemx -mno-relocatable
4102 @kindex -mrelocatable
4103 On embedded PowerPC systems generate code that allows (does not allow)
4104 the program to be relocated to a different address at runtime.  If you
4105 use @samp{-mrelocatable} on any module, all objects linked together must
4106 be compiled with @samp{-mrelocatable} or @samp{-mrelocatable-lib}.
4108 @item -mrelocatable-lib
4109 @itemx -mno-relocatable-lib
4110 On embedded PowerPC systems generate code that allows (does not allow)
4111 the program to be relocated to a different address at runtime.  Modules
4112 compiled with @samp{-mrelocatable-lib} can be linked with either modules
4113 compiled without @samp{-mrelocatable} and @samp{-mrelocatable-lib} or
4114 with modules compiled with the @samp{-mrelocatable} options.
4116 @item -mno-toc
4117 @itemx -mtoc
4118 On System V.4 and embedded PowerPC systems do not (do) assume that
4119 register 2 contains a pointer to a global area pointing to the addresses
4120 used in the program.
4122 @item -mno-traceback
4123 @itemx -mtraceback
4124 On embedded PowerPC systems do not (do) generate a traceback tag before
4125 the start of the function.  This tag can be used by the debugger to
4126 identify where the start of a function is.
4128 @item -mlittle
4129 @itemx -mlittle-endian
4130 On System V.4 and embedded PowerPC systems compile code for the
4131 processor in little endian mode.  The @samp{-mlittle-endian} option is
4132 the same as @samp{-mlittle}.
4134 @item -mbig
4135 @itemx -mbig-endian
4136 On System V.4 and embedded PowerPC systems compile code for the
4137 processor in big endian mode.  The @samp{-mbig-endian} option is
4138 the same as @samp{-mbig}.
4140 @item -mcall-sysv
4141 On System V.4 and embedded PowerPC systems compile code using calling
4142 conventions that adheres to the March 1995 draft of the System V
4143 Application Binary Interface, PowerPC processor supplement.  This is the
4144 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
4146 @item -mcall-sysv-eabi
4147 Specify both @samp{-mcall-sysv} and @samp{-meabi} options.
4149 @item -mcall-sysv-noeabi
4150 Specify both @samp{-mcall-sysv} and @samp{-mno-eabi} options.
4152 @item -mcall-aix
4153 On System V.4 and embedded PowerPC systems compile code using calling
4154 conventions that are similar to those used on AIX.  This is the
4155 default if you configured GCC using @samp{powerpc-*-eabiaix}.
4157 @item -mcall-solaris
4158 On System V.4 and embedded PowerPC systems compile code for the Solaris
4159 operating system.
4161 @item -mcall-linux
4162 On System V.4 and embedded PowerPC systems compile code for the
4163 Linux-based GNU system.
4165 @item -mprototype
4166 @itemx -mno-prototype
4167 On System V.4 and embedded PowerPC systems assume that all calls to
4168 variable argument functions are properly prototyped.  Otherwise, the
4169 compiler must insert an instruction before every non prototyped call to
4170 set or clear bit 6 of the condition code register (@var{CR}) to
4171 indicate whether floating point values were passed in the floating point
4172 registers in case the function takes a variable arguments.  With
4173 @samp{-mprototype}, only calls to prototyped variable argument functions
4174 will set or clear the bit.
4176 @item -msim
4177 On embedded PowerPC systems, assume that the startup module is called
4178 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
4179 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}.
4180 configurations.
4182 @item -mmvme
4183 On embedded PowerPC systems, assume that the startup module is called
4184 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
4185 @file{libc.a}.
4187 @item -mads
4188 On embedded PowerPC systems, assume that the startup module is called
4189 @file{crt0.o} and the standard C libraries are @file{libads.a} and
4190 @file{libc.a}.
4192 @item -myellowknife
4193 On embedded PowerPC systems, assume that the startup module is called
4194 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
4195 @file{libc.a}.
4197 @item -memb
4198 On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
4199 header to indicate that @samp{eabi} extended relocations are used.
4201 @item -meabi
4202 @itemx -mno-eabi
4203 On System V.4 and embedded PowerPC systems do (do not) adhere to the
4204 Embedded Applications Binary Interface (eabi) which is a set of
4205 modifications to the System V.4 specifications.  Selecting @code{-meabi}
4206 means that the stack is aligned to an 8 byte boundary, a function
4207 @code{__eabi} is called to from @code{main} to set up the eabi
4208 environment, and the @samp{-msdata} option can use both @code{r2} and
4209 @code{r13} to point to two separate small data areas.  Selecting
4210 @code{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
4211 do not call an initialization function from @code{main}, and the
4212 @samp{-msdata} option will only use @code{r13} to point to a single
4213 small data area.  The @samp{-meabi} option is on by default if you
4214 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
4216 @item -msdata=eabi
4217 On System V.4 and embedded PowerPC systems, put small initialized
4218 @code{const} global and static data in the @samp{.sdata2} section, which
4219 is pointed to by register @code{r2}.  Put small initialized
4220 non-@code{const} global and static data in the @samp{.sdata} section,
4221 which is pointed to by register @code{r13}.  Put small uninitialized
4222 global and static data in the @samp{.sbss} section, which is adjacent to
4223 the @samp{.sdata} section.  The @samp{-msdata=eabi} option is
4224 incompatible with the @samp{-mrelocatable} option.  The
4225 @samp{-msdata=eabi} option also sets the @samp{-memb} option.
4227 @item -msdata=sysv
4228 On System V.4 and embedded PowerPC systems, put small global and static
4229 data in the @samp{.sdata} section, which is pointed to by register
4230 @code{r13}.  Put small uninitialized global and static data in the
4231 @samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
4232 The @samp{-msdata=sysv} option is incompatible with the
4233 @samp{-mrelocatable} option.
4235 @item -msdata=default
4236 @itemx -msdata
4237 On System V.4 and embedded PowerPC systems, if @samp{-meabi} is used,
4238 compile code the same as @samp{-msdata=eabi}, otherwise compile code the
4239 same as @samp{-msdata=sysv}.
4241 @item -msdata-data
4242 On System V.4 and embedded PowerPC systems, put small global and static
4243 data in the @samp{.sdata} section.  Put small uninitialized global and
4244 static data in the @samp{.sbss} section.  Do not use register @code{r13}
4245 to address small data however.  This is the default behavior unless
4246 other @samp{-msdata} options are used.
4248 @item -msdata=none
4249 @itemx -mno-sdata
4250 On embedded PowerPC systems, put all initialized global and static data
4251 in the @samp{.data} section, and all uninitialized data in the
4252 @samp{.bss} section.
4254 @item -G @var{num}
4255 @cindex smaller data references (PowerPC)
4256 @cindex .sdata/.sdata2 references (PowerPC)
4257 On embedded PowerPC systems, put global and static items less than or
4258 equal to @var{num} bytes into the small data or bss sections instead of
4259 the normal data or bss section.  By default, @var{num} is 8.  The
4260 @samp{-G @var{num}} switch is also passed to the linker.
4261 All modules should be compiled with the same @samp{-G @var{num}} value.
4263 @item -mregnames
4264 @itemx -mno-regnames
4265 On System V.4 and embedded PowerPC systems do (do not) emit register
4266 names in the assembly language output using symbolic forms.
4267 @end table
4268 @node RT Options
4269 @subsection IBM RT Options
4270 @cindex RT options
4271 @cindex IBM RT options
4273 These @samp{-m} options are defined for the IBM RT PC:
4275 @table @code
4276 @item -min-line-mul
4277 Use an in-line code sequence for integer multiplies.  This is the
4278 default.
4280 @item -mcall-lib-mul
4281 Call @code{lmul$$} for integer multiples.
4283 @item -mfull-fp-blocks
4284 Generate full-size floating point data blocks, including the minimum
4285 amount of scratch space recommended by IBM.  This is the default.
4287 @item -mminimum-fp-blocks
4288 Do not include extra scratch space in floating point data blocks.  This
4289 results in smaller code, but slower execution, since scratch space must
4290 be allocated dynamically.
4292 @cindex @file{varargs.h} and RT PC
4293 @cindex @file{stdarg.h} and RT PC
4294 @item -mfp-arg-in-fpregs
4295 Use a calling sequence incompatible with the IBM calling convention in
4296 which floating point arguments are passed in floating point registers.
4297 Note that @code{varargs.h} and @code{stdargs.h} will not work with
4298 floating point operands if this option is specified.
4300 @item -mfp-arg-in-gregs
4301 Use the normal calling convention for floating point arguments.  This is
4302 the default.
4304 @item -mhc-struct-return
4305 Return structures of more than one word in memory, rather than in a
4306 register.  This provides compatibility with the MetaWare HighC (hc)
4307 compiler.  Use the option @samp{-fpcc-struct-return} for compatibility
4308 with the Portable C Compiler (pcc).
4310 @item -mnohc-struct-return
4311 Return some structures of more than one word in registers, when
4312 convenient.  This is the default.  For compatibility with the
4313 IBM-supplied compilers, use the option @samp{-fpcc-struct-return} or the
4314 option @samp{-mhc-struct-return}.
4315 @end table
4317 @node MIPS Options
4318 @subsection MIPS Options
4319 @cindex MIPS options
4321 These @samp{-m} options are defined for the MIPS family of computers:
4323 @table @code
4324 @item -mcpu=@var{cpu type}
4325 Assume the defaults for the machine type @var{cpu type} when scheduling
4326 instructions.  The choices for @var{cpu type} are @samp{r2000}, @samp{r3000},
4327 @samp{r4000}, @samp{r4400}, @samp{r4600}, and @samp{r6000}.  While picking a
4328 specific @var{cpu type} will schedule things appropriately for that
4329 particular chip, the compiler will not generate any code that does not
4330 meet level 1 of the MIPS ISA (instruction set architecture) without
4331 the @samp{-mips2} or @samp{-mips3} switches being used.
4333 @item -mips1
4334 Issue instructions from level 1 of the MIPS ISA.  This is the default.
4335 @samp{r3000} is the default @var{cpu type} at this ISA level.
4337 @item -mips2
4338 Issue instructions from level 2 of the MIPS ISA (branch likely, square
4339 root instructions).  @samp{r6000} is the default @var{cpu type} at this
4340 ISA level.
4342 @item -mips3
4343 Issue instructions from level 3 of the MIPS ISA (64 bit instructions).
4344 @samp{r4000} is the default @var{cpu type} at this ISA level.
4345 This option does not change the sizes of any of the C data types.
4347 @item -mfp32
4348 Assume that 32 32-bit floating point registers are available.  This is
4349 the default.
4351 @item -mfp64
4352 Assume that 32 64-bit floating point registers are available.  This is
4353 the default when the @samp{-mips3} option is used.
4355 @item -mgp32
4356 Assume that 32 32-bit general purpose registers are available.  This is
4357 the default.
4359 @item -mgp64
4360 Assume that 32 64-bit general purpose registers are available.  This is
4361 the default when the @samp{-mips3} option is used.
4363 @item -mint64
4364 Types long, int, and pointer are 64 bits.  This works only if @samp{-mips3}
4365 is also specified.
4367 @item -mlong64
4368 Types long and pointer are 64 bits, and type int is 32 bits.
4369 This works only if @samp{-mips3} is also specified.
4371 @item -mmips-as
4372 Generate code for the MIPS assembler, and invoke @file{mips-tfile} to
4373 add normal debug information.  This is the default for all
4374 platforms except for the OSF/1 reference platform, using the OSF/rose
4375 object format.  If the either of the @samp{-gstabs} or @samp{-gstabs+}
4376 switches are used, the @file{mips-tfile} program will encapsulate the
4377 stabs within MIPS ECOFF.
4379 @item -mgas
4380 Generate code for the GNU assembler.  This is the default on the OSF/1
4381 reference platform, using the OSF/rose object format.  Also, this is
4382 the default if the configure option @samp{--with-gnu-as} is used.
4384 @item -msplit-addresses
4385 @itemx -mno-split-addresses
4386 Generate code to load the high and low parts of address constants separately.
4387 This allows @code{gcc} to optimize away redundant loads of the high order
4388 bits of addresses.  This optimization requires GNU as and GNU ld.
4389 This optimization is enabled by default for some embedded targets where
4390 GNU as and GNU ld are standard.
4392 @item -mrnames
4393 @itemx -mno-rnames
4394 The @samp{-mrnames} switch says to output code using the MIPS software
4395 names for the registers, instead of the hardware names (ie, @var{a0}
4396 instead of @var{$4}).  The only known assembler that supports this option
4397 is the Algorithmics assembler.
4399 @item -mgpopt
4400 @itemx -mno-gpopt
4401 The @samp{-mgpopt} switch says to write all of the data declarations
4402 before the instructions in the text section, this allows the MIPS
4403 assembler to generate one word memory references instead of using two
4404 words for short global or static data items.  This is on by default if
4405 optimization is selected.
4407 @item -mstats
4408 @itemx -mno-stats
4409 For each non-inline function processed, the @samp{-mstats} switch
4410 causes the compiler to emit one line to the standard error file to
4411 print statistics about the program (number of registers saved, stack
4412 size, etc.).
4414 @item -mmemcpy
4415 @itemx -mno-memcpy
4416 The @samp{-mmemcpy} switch makes all block moves call the appropriate
4417 string function (@samp{memcpy} or @samp{bcopy}) instead of possibly
4418 generating inline code.
4420 @item -mmips-tfile
4421 @itemx -mno-mips-tfile
4422 The @samp{-mno-mips-tfile} switch causes the compiler not
4423 postprocess the object file with the @file{mips-tfile} program,
4424 after the MIPS assembler has generated it to add debug support.  If
4425 @file{mips-tfile} is not run, then no local variables will be
4426 available to the debugger.  In addition, @file{stage2} and
4427 @file{stage3} objects will have the temporary file names passed to the
4428 assembler embedded in the object file, which means the objects will
4429 not compare the same.  The @samp{-mno-mips-tfile} switch should only
4430 be used when there are bugs in the @file{mips-tfile} program that
4431 prevents compilation.
4433 @item -msoft-float
4434 Generate output containing library calls for floating point.
4435 @strong{Warning:} the requisite libraries are not part of GNU CC.
4436 Normally the facilities of the machine's usual C compiler are used, but
4437 this can't be done directly in cross-compilation.  You must make your
4438 own arrangements to provide suitable library functions for
4439 cross-compilation.
4441 @item -mhard-float
4442 Generate output containing floating point instructions.  This is the
4443 default if you use the unmodified sources.
4445 @item -mabicalls
4446 @itemx -mno-abicalls
4447 Emit (or do not emit) the pseudo operations @samp{.abicalls},
4448 @samp{.cpload}, and @samp{.cprestore} that some System V.4 ports use for
4449 position independent code.
4451 @item -mlong-calls
4452 @itemx -mno-long-calls
4453 Do all calls with the @samp{JALR} instruction, which requires
4454 loading up a function's address into a register before the call.
4455 You need to use this switch, if you call outside of the current
4456 512 megabyte segment to functions that are not through pointers.
4458 @item -mhalf-pic
4459 @itemx -mno-half-pic
4460 Put pointers to extern references into the data section and load them
4461 up, rather than put the references in the text section.
4463 @item -membedded-pic
4464 @itemx -mno-embedded-pic
4465 Generate PIC code suitable for some embedded systems.  All calls are made
4466 using PC relative address, and all data is addressed using the $gp register.
4467 This requires GNU as and GNU ld which do most of the work.
4469 @item -membedded-data
4470 @itemx -mno-embedded-data
4471 Allocate variables to the read-only data section first if possible, then
4472 next in the small data section if possible, otherwise in data.  This gives
4473 slightly slower code than the default, but reduces the amount of RAM required
4474 when executing, and thus may be preferred for some embedded systems.
4476 @item -msingle-float
4477 @itemx -mdouble-float
4478 The @samp{-msingle-float} switch tells gcc to assume that the floating
4479 point coprocessor only supports single precision operations, as on the
4480 @samp{r4650} chip.  The @samp{-mdouble-float} switch permits gcc to use
4481 double precision operations.  This is the default.
4483 @item -mmad
4484 @itemx -mno-mad
4485 Permit use of the @samp{mad}, @samp{madu} and @samp{mul} instructions,
4486 as on the @samp{r4650} chip.
4488 @item -m4650
4489 Turns on @samp{-msingle-float}, @samp{-mmad}, and, at least for now,
4490 @samp{-mcpu=r4650}.
4492 @item -EL
4493 Compile code for the processor in little endian mode.
4494 The requisite libraries are assumed to exist.
4496 @item -EB
4497 Compile code for the processor in big endian mode.
4498 The requisite libraries are assumed to exist.
4500 @item -G @var{num}
4501 @cindex smaller data references (MIPS)
4502 @cindex gp-relative references (MIPS)
4503 Put global and static items less than or equal to @var{num} bytes into
4504 the small data or bss sections instead of the normal data or bss
4505 section.  This allows the assembler to emit one word memory reference
4506 instructions based on the global pointer (@var{gp} or @var{$28}),
4507 instead of the normal two words used.  By default, @var{num} is 8 when
4508 the MIPS assembler is used, and 0 when the GNU assembler is used.  The
4509 @samp{-G @var{num}} switch is also passed to the assembler and linker.
4510 All modules should be compiled with the same @samp{-G @var{num}}
4511 value.
4513 @item -nocpp
4514 Tell the MIPS assembler to not run its preprocessor over user
4515 assembler files (with a @samp{.s} suffix) when assembling them.
4516 @end table
4518 @ifset INTERNALS
4519 These options are defined by the macro
4520 @code{TARGET_SWITCHES} in the machine description.  The default for the
4521 options is also defined by that macro, which enables you to change the
4522 defaults.
4523 @end ifset
4525 @node i386 Options
4526 @subsection Intel 386 Options
4527 @cindex i386 Options
4528 @cindex Intel 386 Options
4530 These @samp{-m} options are defined for the i386 family of computers:
4532 @table @code
4533 @item -mcpu=@var{cpu type}
4534 Assume the defaults for the machine type @var{cpu type} when scheduling
4535 instructions.  The choices for @var{cpu type} are: @samp{i386},
4536 @samp{i486}, @samp{i586} (@samp{pentium}), @samp{pentium}, @samp{i686}
4537 (@samp{pentiumpro}) and @samp{pentiumpro}. While picking a specific
4538 @var{cpu type} will schedule things appropriately for that particular
4539 chip, the compiler will not generate any code that does not run on the
4540 i386 without the @samp{-march=@var{cpu type}} option being used.
4542 @item -march=@var{cpu type}
4543 Generate instructions for the machine type @var{cpu type}.  The choices
4544 for @var{cpu type} are: @samp{i386}, @samp{i486}, @samp{pentium}, and
4545 @samp{pentiumpro}.  Specifying @samp{-march=@var{cpu type}} implies
4546 @samp{-mcpu=@var{cpu type}}.
4548 @item -m386
4549 @itemx -m486
4550 @itemx -mpentium
4551 @itemx -mpentiumpro
4552 Synonyms for -mcpu=i386, -mcpu=i486, -mcpu=pentium, and -mcpu=pentiumpro
4553 respectively.
4555 @item -mieee-fp
4556 @itemx -mno-ieee-fp
4557 Control whether or not the compiler uses IEEE floating point
4558 comparisons.  These handle correctly the case where the result of a
4559 comparison is unordered.
4561 @item -msoft-float
4562 Generate output containing library calls for floating point.
4563 @strong{Warning:} the requisite libraries are not part of GNU CC.
4564 Normally the facilities of the machine's usual C compiler are used, but
4565 this can't be done directly in cross-compilation.  You must make your
4566 own arrangements to provide suitable library functions for
4567 cross-compilation.
4569 On machines where a function returns floating point results in the 80387
4570 register stack, some floating point opcodes may be emitted even if
4571 @samp{-msoft-float} is used.
4573 @item -mno-fp-ret-in-387
4574 Do not use the FPU registers for return values of functions.
4576 The usual calling convention has functions return values of types
4577 @code{float} and @code{double} in an FPU register, even if there
4578 is no FPU.  The idea is that the operating system should emulate
4579 an FPU.
4581 The option @samp{-mno-fp-ret-in-387} causes such values to be returned
4582 in ordinary CPU registers instead.
4584 @item -mno-fancy-math-387
4585 Some 387 emulators do not support the @code{sin}, @code{cos} and
4586 @code{sqrt} instructions for the 387.  Specify this option to avoid
4587 generating those instructions. This option is the default on FreeBSD.
4588 As of revision 2.6.1, these instructions are not generated unless you
4589 also use the @samp{-ffast-math} switch.
4591 @item -malign-double
4592 @itemx -mno-align-double
4593 Control whether GNU CC aligns @code{double}, @code{long double}, and
4594 @code{long long} variables on a two word boundary or a one word
4595 boundary.  Aligning @code{double} variables on a two word boundary will
4596 produce code that runs somewhat faster on a @samp{Pentium} at the
4597 expense of more memory.
4599 @strong{Warning:} if you use the @samp{-malign-double} switch,
4600 structures containing the above types will be aligned differently than
4601 the published application binary interface specifications for the 386.
4603 @item -msvr3-shlib
4604 @itemx -mno-svr3-shlib
4605 Control whether GNU CC places uninitialized locals into @code{bss} or
4606 @code{data}.  @samp{-msvr3-shlib} places these locals into @code{bss}.
4607 These options are meaningful only on System V Release 3.
4609 @item -mno-wide-multiply
4610 @itemx -mwide-multiply
4611 Control whether GNU CC uses the @code{mul} and @code{imul} that produce
4612 64 bit results in @code{eax:edx} from 32 bit operands to do @code{long
4613 long} multiplies and 32-bit division by constants.
4615 @item -mrtd
4616 Use a different function-calling convention, in which functions that
4617 take a fixed number of arguments return with the @code{ret} @var{num}
4618 instruction, which pops their arguments while returning.  This saves one
4619 instruction in the caller since there is no need to pop the arguments
4620 there.
4622 You can specify that an individual function is called with this calling
4623 sequence with the function attribute @samp{stdcall}.  You can also
4624 override the @samp{-mrtd} option by using the function attribute
4625 @samp{cdecl}. @xref{Function Attributes}
4627 @strong{Warning:} this calling convention is incompatible with the one
4628 normally used on Unix, so you cannot use it if you need to call
4629 libraries compiled with the Unix compiler.
4631 Also, you must provide function prototypes for all functions that
4632 take variable numbers of arguments (including @code{printf});
4633 otherwise incorrect code will be generated for calls to those
4634 functions.
4636 In addition, seriously incorrect code will result if you call a
4637 function with too many arguments.  (Normally, extra arguments are
4638 harmlessly ignored.)
4640 @item -mreg-alloc=@var{regs}
4641 Control the default allocation order of integer registers.  The
4642 string @var{regs} is a series of letters specifying a register.  The
4643 supported letters are: @code{a} allocate EAX; @code{b} allocate EBX;
4644 @code{c} allocate ECX; @code{d} allocate EDX; @code{S} allocate ESI;
4645 @code{D} allocate EDI; @code{B} allocate EBP.
4647 @item -mregparm=@var{num}
4648 Control how many registers are used to pass integer arguments.  By
4649 default, no registers are used to pass arguments, and at most 3
4650 registers can be used.  You can control this behavior for a specific
4651 function by using the function attribute @samp{regparm}.   @xref{Function Attributes}
4653 @strong{Warning:} if you use this switch, and
4654 @var{num} is nonzero, then you must build all modules with the same
4655 value, including any libraries.  This includes the system libraries and
4656 startup modules.
4658 @item -malign-loops=@var{num}
4659 Align loops to a 2 raised to a @var{num} byte boundary.  If
4660 @samp{-malign-loops} is not specified, the default is 2.
4662 @item -malign-jumps=@var{num}
4663 Align instructions that are only jumped to to a 2 raised to a @var{num}
4664 byte boundary.  If @samp{-malign-jumps} is not specified, the default is
4665 2 if optimizing for a 386, and 4 if optimizing for a 486.
4667 @item -malign-functions=@var{num}
4668 Align the start of functions to a 2 raised to @var{num} byte boundary.
4669 If @samp{-malign-functions} is not specified, the default is 2 if optimizing
4670 for a 386, and 4 if optimizing for a 486.
4671 @end table
4673 @node HPPA Options
4674 @subsection HPPA Options
4675 @cindex HPPA Options
4677 These @samp{-m} options are defined for the HPPA family of computers:
4679 @table @code
4680 @item -mpa-risc-1-0
4681 Generate code for a PA 1.0 processor.
4683 @item -mpa-risc-1-1
4684 Generate code for a PA 1.1 processor.
4686 @item -mbig-switch
4687 Generate code suitable for big switch tables.  Use this option only if
4688 the assembler/linker complain about out of range branches within a switch
4689 table.
4691 @item -mjump-in-delay
4692 Fill delay slots of function calls with unconditional jump instructions
4693 by modifying the return pointer for the function call to be the target
4694 of the conditional jump.
4696 @item -mdisable-fpregs
4697 Prevent floating point registers from being used in any manner.  This is
4698 necessary for compiling kernels which perform lazy context switching of
4699 floating point registers.  If you use this option and attempt to perform
4700 floating point operations, the compiler will abort.
4702 @item -mdisable-indexing
4703 Prevent the compiler from using indexing address modes.  This avoids some
4704 rather obscure problems when compiling MIG generated code under MACH.
4706 @item -mno-space-regs
4707 Generate code that assumes the target has no space registers.  This allows
4708 GCC to generate faster indirect calls and use unscaled index address modes.
4710 Such code is suitable for level 0 PA systems and kernels.
4712 @item -mfast-indirect-calls
4713 Generate code that assumes calls never cross space boundaries.  This
4714 allows GCC to emit code which performs faster indirect calls.
4716 This option will not work in the presense of shared libraries or nested
4717 functions.
4719 @item -mspace
4720 Optimize for space rather than execution time.  Currently this only
4721 enables out of line function prologues and epilogues.  This option is
4722 incompatible with PIC code generation and profiling.
4724 @item -mlong-load-store
4725 Generate 3-instruction load and store sequences as sometimes required by
4726 the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
4727 the HP compilers.
4729 @item -mportable-runtime
4730 Use the portable calling conventions proposed by HP for ELF systems.
4732 @item -mgas
4733 Enable the use of assembler directives only GAS understands.
4735 @item -mschedule=@var{cpu type}
4736 Schedule code according to the constraints for the machine type
4737 @var{cpu type}.  The choices for @var{cpu type} are @samp{700} for
4738 7@var{n}0 machines, @samp{7100} for 7@var{n}5 machines, and @samp{7100}
4739 for 7@var{n}2 machines.  @samp{7100} is the default for @var{cpu type}.
4741 Note the @samp{7100LC} scheduling information is incomplete and using
4742 @samp{7100LC} often leads to bad schedules.  For now it's probably best
4743 to use @samp{7100} instead of @samp{7100LC} for the 7@var{n}2 machines.
4745 @item -mlinker-opt
4746 Enable the optimization pass in the HPUX linker.  Note this makes symbolic
4747 debugging impossible.  It also triggers a bug in the HPUX 8 and HPUX 9 linkers
4748 in which they give bogus error messages when linking some programs.
4750 @item -msoft-float
4751 Generate output containing library calls for floating point.
4752 @strong{Warning:} the requisite libraries are not available for all HPPA
4753 targets.  Normally the facilities of the machine's usual C compiler are
4754 used, but this cannot be done directly in cross-compilation.  You must make
4755 your own arrangements to provide suitable library functions for
4756 cross-compilation.  The embedded target @samp{hppa1.1-*-pro}
4757 does provide software floating point support.
4759 @samp{-msoft-float} changes the calling convention in the output file;
4760 therefore, it is only useful if you compile @emph{all} of a program with
4761 this option.  In particular, you need to compile @file{libgcc.a}, the
4762 library that comes with GNU CC, with @samp{-msoft-float} in order for
4763 this to work.
4764 @end table
4766 @node Intel 960 Options
4767 @subsection Intel 960 Options
4769 These @samp{-m} options are defined for the Intel 960 implementations:
4771 @table @code
4772 @item -m@var{cpu type}
4773 Assume the defaults for the machine type @var{cpu type} for some of
4774 the other options, including instruction scheduling, floating point
4775 support, and addressing modes.  The choices for @var{cpu type} are
4776 @samp{ka}, @samp{kb}, @samp{mc}, @samp{ca}, @samp{cf},
4777 @samp{sa}, and @samp{sb}.
4778 The default is
4779 @samp{kb}.
4781 @item -mnumerics
4782 @itemx -msoft-float
4783 The @samp{-mnumerics} option indicates that the processor does support
4784 floating-point instructions.  The @samp{-msoft-float} option indicates
4785 that floating-point support should not be assumed.
4787 @item -mleaf-procedures
4788 @itemx -mno-leaf-procedures
4789 Do (or do not) attempt to alter leaf procedures to be callable with the
4790 @code{bal} instruction as well as @code{call}.  This will result in more
4791 efficient code for explicit calls when the @code{bal} instruction can be
4792 substituted by the assembler or linker, but less efficient code in other
4793 cases, such as calls via function pointers, or using a linker that doesn't
4794 support this optimization.
4796 @item -mtail-call
4797 @itemx -mno-tail-call
4798 Do (or do not) make additional attempts (beyond those of the
4799 machine-independent portions of the compiler) to optimize tail-recursive
4800 calls into branches.  You may not want to do this because the detection of
4801 cases where this is not valid is not totally complete.  The default is
4802 @samp{-mno-tail-call}.
4804 @item -mcomplex-addr
4805 @itemx -mno-complex-addr
4806 Assume (or do not assume) that the use of a complex addressing mode is a
4807 win on this implementation of the i960.  Complex addressing modes may not
4808 be worthwhile on the K-series, but they definitely are on the C-series.
4809 The default is currently @samp{-mcomplex-addr} for all processors except
4810 the CB and CC.
4812 @item -mcode-align
4813 @itemx -mno-code-align
4814 Align code to 8-byte boundaries for faster fetching (or don't bother).
4815 Currently turned on by default for C-series implementations only.
4817 @ignore
4818 @item -mclean-linkage
4819 @itemx -mno-clean-linkage
4820 These options are not fully implemented.
4821 @end ignore
4823 @item -mic-compat
4824 @itemx -mic2.0-compat
4825 @itemx -mic3.0-compat
4826 Enable compatibility with iC960 v2.0 or v3.0.
4828 @item -masm-compat
4829 @itemx -mintel-asm
4830 Enable compatibility with the iC960 assembler.
4832 @item -mstrict-align
4833 @itemx -mno-strict-align
4834 Do not permit (do permit) unaligned accesses.
4836 @item -mold-align
4837 Enable structure-alignment compatibility with Intel's gcc release version
4838 1.3 (based on gcc 1.37).  This option implies @samp{-mstrict-align}.
4839 @end table
4841 @node DEC Alpha Options
4842 @subsection DEC Alpha Options
4844 These @samp{-m} options are defined for the DEC Alpha implementations:
4846 @table @code
4847 @item -mno-soft-float
4848 @itemx -msoft-float
4849 Use (do not use) the hardware floating-point instructions for
4850 floating-point operations.  When @code{-msoft-float} is specified,
4851 functions in @file{libgcc1.c} will be used to perform floating-point
4852 operations.  Unless they are replaced by routines that emulate the
4853 floating-point operations, or compiled in such a way as to call such
4854 emulations routines, these routines will issue floating-point
4855 operations.   If you are compiling for an Alpha without floating-point
4856 operations, you must ensure that the library is built so as not to call
4857 them.
4859 Note that Alpha implementations without floating-point operations are
4860 required to have floating-point registers.
4862 @item -mfp-reg
4863 @itemx -mno-fp-regs
4864 Generate code that uses (does not use) the floating-point register set.
4865 @code{-mno-fp-regs} implies @code{-msoft-float}.  If the floating-point
4866 register set is not used, floating point operands are passed in integer
4867 registers as if they were integers and floating-point results are passed
4868 in $0 instead of $f0.  This is a non-standard calling sequence, so any
4869 function with a floating-point argument or return value called by code
4870 compiled with @code{-mno-fp-regs} must also be compiled with that
4871 option.
4873 A typical use of this option is building a kernel that does not use,
4874 and hence need not save and restore, any floating-point registers.
4876 @item -mieee
4877 The Alpha architecture implements floating-point hardware optimized for
4878 maximum performance.  It is mostly compliant with the IEEE floating
4879 point standard.  However, for full compliance, software assistance is
4880 required.  This option generates code fully IEEE compliant code
4881 @emph{except} that the @var{inexact flag} is not maintained (see below).
4882 If this option is turned on, the CPP macro @code{_IEEE_FP} is defined
4883 during compilation.  The option is a shorthand for: @samp{-D_IEEE_FP
4884 -mfp-trap-mode=su -mtrap-precision=i -mieee-conformant}.  The resulting
4885 code is less efficient but is able to correctly support denormalized
4886 numbers and exceptional IEEE values such as not-a-number and plus/minus
4887 infinity.  Other Alpha compilers call this option
4888 @code{-ieee_with_no_inexact}.
4890 @item -mieee-with-inexact
4891 @c overfull hbox here --bob 22 jul96
4892 @c original text between ignore ... end ignore
4893 @ignore
4894 This is like @samp{-mieee} except the generated code also maintains the
4895 IEEE @var{inexact flag}.  Turning on this option causes the generated
4896 code to implement fully-compliant IEEE math.  The option is a shorthand
4897 for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus @samp{-mieee-conformant},
4898 @samp{-mfp-trap-mode=sui}, and @samp{-mtrap-precision=i}.  On some Alpha
4899 implementations the resulting code may execute significantly slower than
4900 the code generated by default.  Since there is very little code that
4901 depends on the @var{inexact flag}, you should normally not specify this
4902 option.  Other Alpha compilers call this option
4903 @samp{-ieee_with_inexact}.
4904 @end ignore
4905 @c            changed paragraph
4906 This is like @samp{-mieee} except the generated code also maintains the
4907 IEEE @var{inexact flag}.  Turning on this option causes the generated
4908 code to implement fully-compliant IEEE math.  The option is a shorthand
4909 for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus the three following:
4910 @samp{-mieee-conformant},
4911 @samp{-mfp-trap-mode=sui}, 
4912 and @samp{-mtrap-precision=i}.  
4913 On some Alpha implementations the resulting code may execute
4914 significantly slower than the code generated by default.  Since there
4915 is very little code that depends on the @var{inexact flag}, you should
4916 normally not specify this option.  Other Alpha compilers call this
4917 option @samp{-ieee_with_inexact}.
4918 @c             end changes to prevent overfull hboxes
4920 @item -mfp-trap-mode=@var{trap mode}
4921 This option controls what floating-point related traps are enabled.
4922 Other Alpha compilers call this option @samp{-fptm }@var{trap mode}.
4923 The trap mode can be set to one of four values:
4925 @table @samp
4926 @item n
4927 This is the default (normal) setting.  The only traps that are enabled
4928 are the ones that cannot be disabled in software (e.g., division by zero
4929 trap).
4931 @item u
4932 In addition to the traps enabled by @samp{n}, underflow traps are enabled
4933 as well.
4935 @item su
4936 Like @samp{su}, but the instructions are marked to be safe for software
4937 completion (see Alpha architecture manual for details).
4939 @item sui
4940 Like @samp{su}, but inexact traps are enabled as well.
4941 @end table
4943 @item -mfp-rounding-mode=@var{rounding mode}
4944 Selects the IEEE rounding mode.  Other Alpha compilers call this option
4945 @samp{-fprm }@var{rounding mode}.  The @var{rounding mode} can be one
4948 @table @samp
4949 @item n
4950 Normal IEEE rounding mode.  Floating point numbers are rounded towards
4951 the nearest machine number or towards the even machine number in case
4952 of a tie.
4954 @item m
4955 Round towards minus infinity.
4957 @item c
4958 Chopped rounding mode.  Floating point numbers are rounded towards zero.
4960 @item d
4961 Dynamic rounding mode.  A field in the floating point control register
4962 (@var{fpcr}, see Alpha architecture reference manual) controls the
4963 rounding mode in effect.  The C library initializes this register for
4964 rounding towards plus infinity.  Thus, unless your program modifies the
4965 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.@end table
4967 @item -mtrap-precision=@var{trap precision}
4968 In the Alpha architecture, floating point traps are imprecise.  This
4969 means without software assistance it is impossible to recover from a
4970 floating trap and program execution normally needs to be terminated.
4971 GNU CC can generate code that can assist operating system trap handlers
4972 in determining the exact location that caused a floating point trap.
4973 Depending on the requirements of an application, different levels of
4974 precisions can be selected:
4976 @table @samp
4977 @item p
4978 Program precision.  This option is the default and means a trap handler
4979 can only identify which program caused a floating point exception.
4981 @item f
4982 Function precision.  The trap handler can determine the function that
4983 caused a floating point exception.
4985 @item i
4986 Instruction precision.  The trap handler can determine the exact
4987 instruction that caused a floating point exception.
4988 @end table
4990 Other Alpha compilers provide the equivalent options called
4991 @samp{-scope_safe} and @samp{-resumption_safe}.
4993 @item -mieee-conformant
4994 This option marks the generated code as IEEE conformant.  You must not
4995 use this option unless you also specify @samp{-mtrap-precision=i} and either
4996 @samp{-mfp-trap-mode=su} or @samp{-mfp-trap-mode=sui}.  Its only effect
4997 is to emit the line @samp{.eflag 48} in the function prologue of the
4998 generated assembly file.  Under DEC Unix, this has the effect that
4999 IEEE-conformant math library routines will be linked in.
5001 @item -mbuild-constants
5002 Normally GNU CC examines a 32- or 64-bit integer constant to
5003 see if it can construct it from smaller constants in two or three
5004 instructions.  If it cannot, it will output the constant as a literal and
5005 generate code to load it from the data segment at runtime.
5007 Use this option to require GNU CC to construct @emph{all} integer constants
5008 using code, even if it takes more instructions (the maximum is six).
5010 You would typically use this option to build a shared library dynamic
5011 loader.  Itself a shared library, it must relocate itself in memory
5012 before it can find the variables and constants in its own data segment.
5014 @item -malpha-as
5015 @itemx -mgas
5016 Select whether to generate code to be assembled by the vendor-supplied
5017 assembler (@samp{-malpha-as}) or by the GNU assembler @samp{-mgas}.
5019 @item -mbwx
5020 @itemx -mno-bwx
5021 @itemx -mcix
5022 @itemx -mno-cix
5023 @itemx -mmax
5024 @itemx -mno-max
5025 Indicate whether GNU CC should generate code to use the optional BWX,
5026 CIX, and MAX instruction sets.  The default is to use the instruction sets
5027 supported by the CPU type specified via @samp{-mcpu=} option or that
5028 of the CPU on which GNU CC was built if none was specified.
5030 @item -mcpu=@var{cpu_type}
5031 Set the instruction set, register set, and instruction scheduling
5032 parameters for machine type @var{cpu_type}.  You can specify either the
5033 @samp{EV} style name or the corresponding chip number.  GNU CC
5034 supports scheduling parameters for the EV4 and EV5 family of processors
5035 and will choose the default values for the instruction set from
5036 the processor you specify.  If you do not specify a processor type,
5037 GNU CC will default to the processor on which the compiler was built.
5039 Supported values for @var{cpu_type} are
5041 @table @samp
5042 @item ev4
5043 @itemx 21064
5044 Schedules as an EV4 and has no instruction set extensions.
5046 @item ev5
5047 @itemx 21164
5048 Schedules as an EV5 and has no instruction set extensions.
5050 @item ev56
5051 @itemx 21164a
5052 Schedules as an EV5 and supports the BWX extension.
5054 @item pca56
5055 @itemx 21164PC
5056 Schedules as an EV5 and supports the BWX and MAX extensions.
5058 @item ev6
5059 @itemx 21264
5060 Schedules as an EV5 (until Digital releases the scheduling parameters
5061 for the EV6) and supports the BWX, CIX, and MAX extensions.
5062 @end table
5063 @end table
5065 @node Clipper Options
5066 @subsection Clipper Options
5068 These @samp{-m} options are defined for the Clipper implementations:
5070 @table @code
5071 @item -mc300
5072 Produce code for a C300 Clipper processor. This is the default.
5074 @itemx -mc400
5075 Produce code for a C400 Clipper processor i.e. use floating point
5076 registers f8..f15.
5077 @end table
5079 @node H8/300 Options
5080 @subsection H8/300 Options
5082 These @samp{-m} options are defined for the H8/300 implementations:
5084 @table @code
5085 @item -mrelax
5086 Shorten some address references at link time, when possible; uses the
5087 linker option @samp{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
5088 ld.info, Using ld}, for a fuller description.
5090 @item -mh
5091 Generate code for the H8/300H.
5093 @item -ms
5094 Generate code for the H8/S.
5096 @item -mint32
5097 Make @code{int} data 32 bits by default.
5099 @item -malign-300
5100 On the h8/300h, use the same alignment rules as for the h8/300.
5101 The default for the h8/300h is to align longs and floats on 4 byte boundaries.
5102 @samp{-malign-300} causes them to be aligned on 2 byte boundaries.
5103 This option has no effect on the h8/300.
5104 @end table
5106 @node SH Options
5107 @subsection SH Options
5109 These @samp{-m} options are defined for the SH implementations:
5111 @table @code
5112 @item -m1
5113 Generate code for the SH1.
5115 @item -m2
5116 Generate code for the SH2.
5118 @item -m3
5119 Generate code for the SH3.
5121 @item -m3e
5122 Generate code for the SH3e.
5124 @item -mb
5125 Compile code for the processor in big endian mode.
5127 @item -ml
5128 Compile code for the processor in little endian mode.
5130 @item -mrelax
5131 Shorten some address references at link time, when possible; uses the
5132 linker option @samp{-relax}.
5133 @end table
5135 @node System V Options
5136 @subsection Options for System V
5138 These additional options are available on System V Release 4 for
5139 compatibility with other compilers on those systems:
5141 @table @code
5142 @item -G
5143 Create a shared object.
5144 It is recommended that @samp{-symbolic} or @samp{-shared} be used instead.
5146 @item -Qy
5147 Identify the versions of each tool used by the compiler, in a
5148 @code{.ident} assembler directive in the output.
5150 @item -Qn
5151 Refrain from adding @code{.ident} directives to the output file (this is
5152 the default).
5154 @item -YP,@var{dirs}
5155 Search the directories @var{dirs}, and no others, for libraries
5156 specified with @samp{-l}.
5158 @item -Ym,@var{dir}
5159 Look in the directory @var{dir} to find the M4 preprocessor.
5160 The assembler uses this option.
5161 @c This is supposed to go with a -Yd for predefined M4 macro files, but
5162 @c the generic assembler that comes with Solaris takes just -Ym.
5163 @end table
5165 @node V850 Options
5166 @subsection V850 Options
5167 @cindex V850 Options
5169 These @samp{-m} options are defined for V850 implementations:
5171 @table @code
5172 @item -mlong-calls
5173 @itemx -mno-long-calls
5174 Treat all calls as being far away (near).  If calls are assumed to be
5175 far away, the compiler will always load the functions address up into a
5176 register, and call indirect through the pointer.
5178 @item -mno-ep
5179 @item -mep
5180 Do not optimize (do optimize) basic blocks that use the same index
5181 pointer 4 or more times to copy pointer into the @code{ep} register, and
5182 use the shorter @code{sld} and @code{sst} instructions.  The @samp{-mep}
5183 option is on by default if you optimize.
5185 @item -mno-prolog-function
5186 @itemx -mprolog-function
5187 Do not use (do use) external functions to save and restore registers at
5188 the prolog and epilog of a function.  The external functions are slower,
5189 but use less code space if more than one function saves the same number
5190 of registers.  The @samp{-mprolog-function} option is on by default if
5191 you optimize.
5193 @item -mspace
5194 Try to make the code as small as possible.  At present, this just turns
5195 on the @samp{-mep} and @samp{-mprolog-function} options.
5197 @item -mtda=@var{n}
5198 Put static or global variables whose size is @var{n} bytes or less into
5199 the tiny data area that register @code{ep} points to.  The tiny data
5200 area can hold up to 256 bytes in total (128 bytes for byte references).
5202 @item -msda=@var{n}
5203 Put static or global variables whose size is @var{n} bytes or less into
5204 the small data area that register @code{gp} points to.  The small data
5205 area can hold up to 64 kilobytes.
5207 @item -mzda=@var{n}
5208 Put static or global variables whose size is @var{n} bytes or less into
5209 the first 32 kilobytes of memory.
5211 @item -mv850
5212 Specify that the target processor is the V850.
5214 @item -mbig-switch
5215 Generate code suitable for big switch tables.  Use this option only if
5216 the assembler/linker complain about out of range branches within a switch
5217 table.
5218 @end table
5220 @node Code Gen Options
5221 @section Options for Code Generation Conventions
5222 @cindex code generation conventions
5223 @cindex options, code generation
5224 @cindex run-time options
5226 These machine-independent options control the interface conventions
5227 used in code generation.
5229 Most of them have both positive and negative forms; the negative form
5230 of @samp{-ffoo} would be @samp{-fno-foo}.  In the table below, only
5231 one of the forms is listed---the one which is not the default.  You
5232 can figure out the other form by either removing @samp{no-} or adding
5235 @table @code
5236 @item -fexceptions
5237 Enable exception handling. Generates extra code needed to propagate
5238 exceptions.  For some targets, this implies GNU CC will generate frame
5239 unwind information for all functions, which can produce significant data
5240 size overhead, although it does not affect execution.  If you do not
5241 specify this option, GNU CC will enable it by default for languages like
5242 C++ which normally require exception handling, and disable itfor
5243 languages like C that do not normally require it.  However, you may need
5244 to enable this option when compiling C code that needs to interoperate
5245 properly with exception handlers written in C++.  You may also wish to
5246 disable this option if you are compiling older C++ programs that don't
5247 use exception handling.
5249 @item -fpcc-struct-return
5250 Return ``short'' @code{struct} and @code{union} values in memory like
5251 longer ones, rather than in registers.  This convention is less
5252 efficient, but it has the advantage of allowing intercallability between
5253 GNU CC-compiled files and files compiled with other compilers.
5255 The precise convention for returning structures in memory depends
5256 on the target configuration macros.
5258 Short structures and unions are those whose size and alignment match
5259 that of some integer type.
5261 @item -freg-struct-return
5262 Use the convention that @code{struct} and @code{union} values are
5263 returned in registers when possible.  This is more efficient for small
5264 structures than @samp{-fpcc-struct-return}.
5266 If you specify neither @samp{-fpcc-struct-return} nor its contrary
5267 @samp{-freg-struct-return}, GNU CC defaults to whichever convention is
5268 standard for the target.  If there is no standard convention, GNU CC
5269 defaults to @samp{-fpcc-struct-return}, except on targets where GNU CC
5270 is the principal compiler.  In those cases, we can choose the standard,
5271 and we chose the more efficient register return alternative.
5273 @item -fshort-enums
5274 Allocate to an @code{enum} type only as many bytes as it needs for the
5275 declared range of possible values.  Specifically, the @code{enum} type
5276 will be equivalent to the smallest integer type which has enough room.
5278 @item -fshort-double
5279 Use the same size for @code{double} as for @code{float}.
5281 @item -fshared-data
5282 Requests that the data and non-@code{const} variables of this
5283 compilation be shared data rather than private data.  The distinction
5284 makes sense only on certain operating systems, where shared data is
5285 shared between processes running the same program, while private data
5286 exists in one copy per process.
5288 @item -fno-common
5289 Allocate even uninitialized global variables in the data section of the
5290 object file, rather than generating them as common blocks.  This has the
5291 effect that if the same variable is declared (without @code{extern}) in
5292 two different compilations, you will get an error when you link them.
5293 The only reason this might be useful is if you wish to verify that the
5294 program will work on other systems which always work this way.
5296 @item -fno-ident
5297 Ignore the @samp{#ident} directive.
5299 @item -fno-gnu-linker
5300 Do not output global initializations (such as C++ constructors and
5301 destructors) in the form used by the GNU linker (on systems where the GNU
5302 linker is the standard method of handling them).  Use this option when
5303 you want to use a non-GNU linker, which also requires using the
5304 @code{collect2} program to make sure the system linker includes
5305 constructors and destructors.  (@code{collect2} is included in the GNU CC
5306 distribution.)  For systems which @emph{must} use @code{collect2}, the
5307 compiler driver @code{gcc} is configured to do this automatically.
5309 @item -finhibit-size-directive
5310 Don't output a @code{.size} assembler directive, or anything else that
5311 would cause trouble if the function is split in the middle, and the
5312 two halves are placed at locations far apart in memory.  This option is
5313 used when compiling @file{crtstuff.c}; you should not need to use it
5314 for anything else.
5316 @item -fverbose-asm
5317 Put extra commentary information in the generated assembly code to
5318 make it more readable.  This option is generally only of use to those
5319 who actually need to read the generated assembly code (perhaps while
5320 debugging the compiler itself).
5322 @samp{-fno-verbose-asm}, the default, causes the
5323 extra information to be omitted and is useful when comparing two assembler
5324 files.
5326 @item -fvolatile
5327 Consider all memory references through pointers to be volatile.
5329 @item -fvolatile-global
5330 Consider all memory references to extern and global data items to
5331 be volatile.  GNU CC does not consider static data items to be volatile
5332 because of this switch.
5334 @item -fvolatile-static
5335 Consider all memory references to static data to be volatile.
5337 @item -fpic
5338 @cindex global offset table
5339 @cindex PIC
5340 Generate position-independent code (PIC) suitable for use in a shared
5341 library, if supported for the target machine.  Such code accesses all
5342 constant addresses through a global offset table (GOT).  The dynamic
5343 loader resolves the GOT entries when the program starts (the dynamic
5344 loader is not part of GNU CC; it is part of the operating system).  If
5345 the GOT size for the linked executable exceeds a machine-specific
5346 maximum size, you get an error message from the linker indicating that
5347 @samp{-fpic} does not work; in that case, recompile with @samp{-fPIC}
5348 instead.  (These maximums are 16k on the m88k, 8k on the Sparc, and 32k
5349 on the m68k and RS/6000.  The 386 has no such limit.)
5351 Position-independent code requires special support, and therefore works
5352 only on certain machines.  For the 386, GNU CC supports PIC for System V
5353 but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
5354 position-independent.
5356 @item -fPIC
5357 If supported for the target machine, emit position-independent code,
5358 suitable for dynamic linking and avoiding any limit on the size of the
5359 global offset table.  This option makes a difference on the m68k, m88k,
5360 and the Sparc.
5362 Position-independent code requires special support, and therefore works
5363 only on certain machines.
5365 @item -ffixed-@var{reg}
5366 Treat the register named @var{reg} as a fixed register; generated code
5367 should never refer to it (except perhaps as a stack pointer, frame
5368 pointer or in some other fixed role).
5370 @var{reg} must be the name of a register.  The register names accepted
5371 are machine-specific and are defined in the @code{REGISTER_NAMES}
5372 macro in the machine description macro file.
5374 This flag does not have a negative form, because it specifies a
5375 three-way choice.
5377 @item -fcall-used-@var{reg}
5378 Treat the register named @var{reg} as an allocable register that is
5379 clobbered by function calls.  It may be allocated for temporaries or
5380 variables that do not live across a call.  Functions compiled this way
5381 will not save and restore the register @var{reg}.
5383 Use of this flag for a register that has a fixed pervasive role in the
5384 machine's execution model, such as the stack pointer or frame pointer,
5385 will produce disastrous results.
5387 This flag does not have a negative form, because it specifies a
5388 three-way choice.
5390 @item -fcall-saved-@var{reg}
5391 Treat the register named @var{reg} as an allocable register saved by
5392 functions.  It may be allocated even for temporaries or variables that
5393 live across a call.  Functions compiled this way will save and restore
5394 the register @var{reg} if they use it.
5396 Use of this flag for a register that has a fixed pervasive role in the
5397 machine's execution model, such as the stack pointer or frame pointer,
5398 will produce disastrous results.
5400 A different sort of disaster will result from the use of this flag for
5401 a register in which function values may be returned.
5403 This flag does not have a negative form, because it specifies a
5404 three-way choice.
5406 @item -fpack-struct
5407 Pack all structure members together without holes.  Usually you would
5408 not want to use this option, since it makes the code suboptimal, and
5409 the offsets of structure members won't agree with system libraries.
5411 @item -fcheck-memory-usage
5412 Generate extra code to check each memory access.  GNU CC will generate
5413 code that is suitable for a detector of bad memory accesses such as
5414 @file{Checker}.
5416 You must also specify this option when you compile functions you call that
5417 have side effects.  If you do not, you may get erroneous messages from
5418 the detector.  Normally,  you should compile all your code with this option.
5419 If you use functions from a library that have side-effects (such as
5420 @code{read}), you may not be able to recompile the library and
5421 specify this option.  In that case, you can enable the
5422 @samp{-fprefix-function-name} option, which requests GNU CC to encapsulate
5423 your code and make other functions look as if they were compiled with
5424 @samp{-fcheck-memory-usage}.  This is done by calling ``stubs'',
5425 which are provided by the detector.  If you cannot find or build
5426 stubs for every function you call, you may have to specify
5427 @samp{-fcheck-memory-usage} without @samp{-fprefix-function-name}.
5429 If you specify this option, you can not use the @code{asm} or
5430 @code{__asm__} keywords in functions with memory checking enabled.  GNU
5431 CC cannot understand what the @code{asm} statement may do, and therefore
5432 cannot generate the appropriate code, so it will reject it.  However, if
5433 you specify the function attribute @code{no_check_memory_usage} (see
5434 @pxref{Function Attributes}, GNU CC will disable memory checking within a
5435 function; you may use @code{asm} statements inside such functions.  You
5436 may have an inline expansion of a non-checked function within a checked
5437 function; in that case GNU CC will not generate checks for the inlined
5438 function's memory accesses.
5440 If you move your @code{asm} statements to non-checked inline functions
5441 and they do access memory, you can add calls to the support code in your
5442 inline function, to indicate any reads, writes, or copies being done.
5443 These calls would be similar to those done in the stubs described above.
5445 @item -fprefix-function-name
5446 Request GNU CC to add a prefix to the symbols generated for function names.
5447 GNU CC adds a prefix to the names of functions defined as well as
5448 functions called.  Code compiled with this option and code compiled
5449 without the option can't be linked together, unless or stubs are used.
5451 If you compile the following code with @samp{-fprefix-function-name}
5452 @example
5453 extern void bar (int);
5454 void
5455 foo (int a)
5457   return bar (a + 5);
5460 @end example
5462 @noindent
5463 GNU CC will compile the code as if it was written:
5464 @example
5465 extern void prefix_bar (int);
5466 void
5467 prefix_foo (int a)
5469   return prefix_bar (a + 5);
5471 @end example
5472 This option is designed to be used with @samp{-fcheck-memory-usage}.
5474 @item -fstack-check
5475 Generate code to verify that you do not go beyond the boundary of the
5476 stack.  You should specify this flag if you are running in an
5477 environment with multiple threads, but only rarely need to specify it in
5478 a single-threaded environment since stack overflow is automatically
5479 detected on nearly all systems if there is only one stack.
5481 @item +e0
5482 @itemx +e1
5483 Control whether virtual function definitions in classes are used to
5484 generate code, or only to define interfaces for their callers.  (C++
5485 only).
5487 These options are provided for compatibility with @code{cfront} 1.x
5488 usage; the recommended alternative GNU C++ usage is in flux.  @xref{C++
5489 Interface,,Declarations and Definitions in One Header}.
5491 With @samp{+e0}, virtual function definitions in classes are declared
5492 @code{extern}; the declaration is used only as an interface
5493 specification, not to generate code for the virtual functions (in this
5494 compilation).
5496 With @samp{+e1}, G++ actually generates the code implementing virtual
5497 functions defined in the code, and makes them publicly visible.
5498 @end table
5500 @node Environment Variables
5501 @section Environment Variables Affecting GNU CC
5502 @cindex environment variables
5504 This section describes several environment variables that affect how GNU
5505 CC operates.  They work by specifying directories or prefixes to use
5506 when searching for various kinds of files.
5508 @ifclear INTERNALS
5509 Note that you can also specify places to search using options such as
5510 @samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}).  These
5511 take precedence over places specified using environment variables, which
5512 in turn take precedence over those specified by the configuration of GNU
5514 @end ifclear
5515 @ifset INTERNALS
5516 Note that you can also specify places to search using options such as
5517 @samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}).  These
5518 take precedence over places specified using environment variables, which
5519 in turn take precedence over those specified by the configuration of GNU
5520 CC.  @xref{Driver}.
5521 @end ifset
5523 @table @code
5524 @item LANG
5525 @itemx LC_CTYPE
5526 @c @itemx LC_COLLATE
5527 @itemx LC_MESSAGES
5528 @c @itemx LC_MONETARY
5529 @c @itemx LC_NUMERIC
5530 @c @itemx LC_TIME
5531 @itemx LC_ALL
5532 @findex LANG
5533 @findex LC_CTYPE
5534 @c @findex LC_COLLATE
5535 @findex LC_MESSAGES
5536 @c @findex LC_MONETARY
5537 @c @findex LC_NUMERIC
5538 @c @findex LC_TIME
5539 @findex LC_ALL
5540 @cindex locale
5541 These environment variables control the way that GNU CC uses
5542 localization information that allow GNU CC to work with different
5543 national conventions.  GNU CC inspects the locale categories
5544 @code{LC_CTYPE} and @code{LC_MESSAGES} if it has been configured to do
5545 so.  These locale categories can be set to any value supported by your
5546 installation.  A typical value is @samp{en_UK} for English in the United
5547 Kingdom.
5549 The @code{LC_CTYPE} environment variable specifies character
5550 classification.  GNU CC uses it to determine the character boundaries in
5551 a string; this is needed for some multibyte encodings that contain quote
5552 and escape characters that would otherwise be interpreted as a string
5553 end or escape.
5555 The @code{LC_MESSAGES} environment variable specifies the language to
5556 use in diagnostic messages.
5558 If the @code{LC_ALL} environment variable is set, it overrides the value
5559 of @code{LC_CTYPE} and @code{LC_MESSAGES}; otherwise, @code{LC_CTYPE}
5560 and @code{LC_MESSAGES} default to the value of the @code{LANG}
5561 environment variable.  If none of these variables are set, GNU CC
5562 defaults to traditional C English behavior.
5564 @item TMPDIR
5565 @findex TMPDIR
5566 If @code{TMPDIR} is set, it specifies the directory to use for temporary
5567 files.  GNU CC uses temporary files to hold the output of one stage of
5568 compilation which is to be used as input to the next stage: for example,
5569 the output of the preprocessor, which is the input to the compiler
5570 proper.
5572 @item GCC_EXEC_PREFIX
5573 @findex GCC_EXEC_PREFIX
5574 If @code{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
5575 names of the subprograms executed by the compiler.  No slash is added
5576 when this prefix is combined with the name of a subprogram, but you can
5577 specify a prefix that ends with a slash if you wish.
5579 If GNU CC cannot find the subprogram using the specified prefix, it
5580 tries looking in the usual places for the subprogram.
5582 The default value of @code{GCC_EXEC_PREFIX} is
5583 @file{@var{prefix}/lib/gcc-lib/} where @var{prefix} is the value
5584 of @code{prefix} when you ran the @file{configure} script.
5586 Other prefixes specified with @samp{-B} take precedence over this prefix.
5588 This prefix is also used for finding files such as @file{crt0.o} that are
5589 used for linking.
5591 In addition, the prefix is used in an unusual way in finding the
5592 directories to search for header files.  For each of the standard
5593 directories whose name normally begins with @samp{/usr/local/lib/gcc-lib}
5594 (more precisely, with the value of @code{GCC_INCLUDE_DIR}), GNU CC tries
5595 replacing that beginning with the specified prefix to produce an
5596 alternate directory name.  Thus, with @samp{-Bfoo/}, GNU CC will search
5597 @file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
5598 These alternate directories are searched first; the standard directories
5599 come next.
5601 @item COMPILER_PATH
5602 @findex COMPILER_PATH
5603 The value of @code{COMPILER_PATH} is a colon-separated list of
5604 directories, much like @code{PATH}.  GNU CC tries the directories thus
5605 specified when searching for subprograms, if it can't find the
5606 subprograms using @code{GCC_EXEC_PREFIX}.
5608 @item LIBRARY_PATH
5609 @findex LIBRARY_PATH
5610 The value of @code{LIBRARY_PATH} is a colon-separated list of
5611 directories, much like @code{PATH}.  When configured as a native compiler,
5612 GNU CC tries the directories thus specified when searching for special
5613 linker files, if it can't find them using @code{GCC_EXEC_PREFIX}.  Linking
5614 using GNU CC also uses these directories when searching for ordinary
5615 libraries for the @samp{-l} option (but directories specified with
5616 @samp{-L} come first).
5618 @item C_INCLUDE_PATH
5619 @itemx CPLUS_INCLUDE_PATH
5620 @itemx OBJC_INCLUDE_PATH
5621 @findex C_INCLUDE_PATH
5622 @findex CPLUS_INCLUDE_PATH
5623 @findex OBJC_INCLUDE_PATH
5624 @c @itemx OBJCPLUS_INCLUDE_PATH
5625 These environment variables pertain to particular languages.  Each
5626 variable's value is a colon-separated list of directories, much like
5627 @code{PATH}.  When GNU CC searches for header files, it tries the
5628 directories listed in the variable for the language you are using, after
5629 the directories specified with @samp{-I} but before the standard header
5630 file directories.
5632 @item DEPENDENCIES_OUTPUT
5633 @findex DEPENDENCIES_OUTPUT
5634 @cindex dependencies for make as output
5635 If this variable is set, its value specifies how to output dependencies
5636 for Make based on the header files processed by the compiler.  This
5637 output looks much like the output from the @samp{-M} option
5638 (@pxref{Preprocessor Options}), but it goes to a separate file, and is
5639 in addition to the usual results of compilation.
5641 The value of @code{DEPENDENCIES_OUTPUT} can be just a file name, in
5642 which case the Make rules are written to that file, guessing the target
5643 name from the source file name.  Or the value can have the form
5644 @samp{@var{file} @var{target}}, in which case the rules are written to
5645 file @var{file} using @var{target} as the target name.
5646 @end table
5648 @node Running Protoize
5649 @section Running Protoize
5651 The program @code{protoize} is an optional part of GNU C.  You can use
5652 it to add prototypes to a program, thus converting the program to ANSI
5653 C in one respect.  The companion program @code{unprotoize} does the
5654 reverse: it removes argument types from any prototypes that are found.
5656 When you run these programs, you must specify a set of source files as
5657 command line arguments.  The conversion programs start out by compiling
5658 these files to see what functions they define.  The information gathered
5659 about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
5661 After scanning comes actual conversion.  The specified files are all
5662 eligible to be converted; any files they include (whether sources or
5663 just headers) are eligible as well.
5665 But not all the eligible files are converted.  By default,
5666 @code{protoize} and @code{unprotoize} convert only source and header
5667 files in the current directory.  You can specify additional directories
5668 whose files should be converted with the @samp{-d @var{directory}}
5669 option.  You can also specify particular files to exclude with the
5670 @samp{-x @var{file}} option.  A file is converted if it is eligible, its
5671 directory name matches one of the specified directory names, and its
5672 name within the directory has not been excluded.
5674 Basic conversion with @code{protoize} consists of rewriting most
5675 function definitions and function declarations to specify the types of
5676 the arguments.  The only ones not rewritten are those for varargs
5677 functions.
5679 @code{protoize} optionally inserts prototype declarations at the
5680 beginning of the source file, to make them available for any calls that
5681 precede the function's definition.  Or it can insert prototype
5682 declarations with block scope in the blocks where undeclared functions
5683 are called.
5685 Basic conversion with @code{unprotoize} consists of rewriting most
5686 function declarations to remove any argument types, and rewriting
5687 function definitions to the old-style pre-ANSI form.
5689 Both conversion programs print a warning for any function declaration or
5690 definition that they can't convert.  You can suppress these warnings
5691 with @samp{-q}.
5693 The output from @code{protoize} or @code{unprotoize} replaces the
5694 original source file.  The original file is renamed to a name ending
5695 with @samp{.save}.  If the @samp{.save} file already exists, then
5696 the source file is simply discarded.
5698 @code{protoize} and @code{unprotoize} both depend on GNU CC itself to
5699 scan the program and collect information about the functions it uses.
5700 So neither of these programs will work until GNU CC is installed.
5702 Here is a table of the options you can use with @code{protoize} and
5703 @code{unprotoize}.  Each option works with both programs unless
5704 otherwise stated.
5706 @table @code
5707 @item -B @var{directory}
5708 Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
5709 usual directory (normally @file{/usr/local/lib}).  This file contains
5710 prototype information about standard system functions.  This option
5711 applies only to @code{protoize}.
5713 @item -c @var{compilation-options}
5714 Use  @var{compilation-options} as the options when running @code{gcc} to
5715 produce the @samp{.X} files.  The special option @samp{-aux-info} is
5716 always passed in addition, to tell @code{gcc} to write a @samp{.X} file.
5718 Note that the compilation options must be given as a single argument to
5719 @code{protoize} or @code{unprotoize}.  If you want to specify several
5720 @code{gcc} options, you must quote the entire set of compilation options
5721 to make them a single word in the shell.
5723 There are certain @code{gcc} arguments that you cannot use, because they
5724 would produce the wrong kind of output.  These include @samp{-g},
5725 @samp{-O}, @samp{-c}, @samp{-S}, and @samp{-o} If you include these in
5726 the @var{compilation-options}, they are ignored.
5728 @item -C
5729 Rename files to end in @samp{.C} instead of @samp{.c}.
5730 This is convenient if you are converting a C program to C++.
5731 This option applies only to @code{protoize}.
5733 @item -g
5734 Add explicit global declarations.  This means inserting explicit
5735 declarations at the beginning of each source file for each function
5736 that is called in the file and was not declared.  These declarations
5737 precede the first function definition that contains a call to an
5738 undeclared function.  This option applies only to @code{protoize}.
5740 @item -i @var{string}
5741 Indent old-style parameter declarations with the string @var{string}.
5742 This option applies only to @code{protoize}.
5744 @code{unprotoize} converts prototyped function definitions to old-style
5745 function definitions, where the arguments are declared between the
5746 argument list and the initial @samp{@{}.  By default, @code{unprotoize}
5747 uses five spaces as the indentation.  If you want to indent with just
5748 one space instead, use @samp{-i " "}.
5750 @item -k
5751 Keep the @samp{.X} files.  Normally, they are deleted after conversion
5752 is finished.
5754 @item -l
5755 Add explicit local declarations.  @code{protoize} with @samp{-l} inserts
5756 a prototype declaration for each function in each block which calls the
5757 function without any declaration.  This option applies only to
5758 @code{protoize}.
5760 @item -n
5761 Make no real changes.  This mode just prints information about the conversions
5762 that would have been done without @samp{-n}.
5764 @item -N
5765 Make no @samp{.save} files.  The original files are simply deleted.
5766 Use this option with caution.
5768 @item -p @var{program}
5769 Use the program @var{program} as the compiler.  Normally, the name
5770 @file{gcc} is used.
5772 @item -q
5773 Work quietly.  Most warnings are suppressed.
5775 @item -v
5776 Print the version number, just like @samp{-v} for @code{gcc}.
5777 @end table
5779 If you need special compiler options to compile one of your program's
5780 source files, then you should generate that file's @samp{.X} file
5781 specially, by running @code{gcc} on that source file with the
5782 appropriate options and the option @samp{-aux-info}.  Then run
5783 @code{protoize} on the entire set of files.  @code{protoize} will use
5784 the existing @samp{.X} file because it is newer than the source file.
5785 For example:
5787 @example
5788 gcc -Dfoo=bar file1.c -aux-info
5789 protoize *.c
5790 @end example
5792 @noindent
5793 You need to include the special files along with the rest in the
5794 @code{protoize} command, even though their @samp{.X} files already
5795 exist, because otherwise they won't get converted.
5797 @xref{Protoize Caveats}, for more information on how to use
5798 @code{protoize} successfully.