* cpp.texi, extend.texi, gcc.texi, install.texi, invoke.texi,
[official-gcc.git] / gcc / invoke.texi
blob667a0642538e445fd4beb9287845ef357ab67f5b
1 @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
2 @c This is part of the GCC manual.
3 @c For copying conditions, see the file gcc.texi.
5 @ignore
6 @c man begin COPYRIGHT
7 Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
8 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
10 Permission is granted to make and distribute verbatim copies of this
11 manual provided the copyright notice and this permission notice are
12 preserved on all copies.
14 Permission is granted to copy and distribute modified versions of this
15 manual under the conditions for verbatim copying, provided also that the
16 entire resulting derived work is distributed under the terms of a
17 permission notice identical to this one.
19 Permission is granted to copy and distribute translations of this manual
20 into another language, under the above conditions for modified versions,
21 except that this permission notice may be included in translations
22 approved by the Free Software Foundation instead of in the original
23 English.
24 @c man end
25 @c Set file name and title for the man page.
26 @setfilename gcc
27 @settitle GNU project C and C++ compiler
28 @c man begin SYNOPSIS
29 gcc [@samp{-c}|@samp{-S}|@samp{-E}] [@samp{-std=}@var{standard}]
30     [@samp{-g}] [@samp{-pg}] [@samp{-O}@var{level}]
31     [@samp{-W}@var{warn}...] [@samp{-pedantic}]
32     [@samp{-I}@var{dir}...] [@samp{-L}@var{dir}...]
33     [@samp{-D}@var{macro}[=@var{defn}]...] [@samp{-U}@var{macro}]
34     [@samp{-f}@var{option}...] [@samp{-m}@var{machine-option}...]
35     [@samp{-o} @var{outfile}] @var{infile}...
37 Only the most useful options are listed here; see below for the
38 remainder.  @samp{g++} accepts mostly the same options as @samp{gcc}.
39 @c man end
40 @c man begin SEEALSO
41 cpp(1), gcov(1), g77(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
42 and the Info entries for @file{gcc}, @file{cpp}, @file{g77}, @file{as},
43 @file{ld}, @file{binutils} and @file{gdb}.
44 @c man end
45 @c man begin BUGS
46 For instructions on reporting bugs, see
47 @w{@uref{http://gcc.gnu.org/bugs.html}}.  Use of the @command{gccbug}
48 script to report bugs is recommended.
49 @c man end
50 @c man begin AUTHOR
51 See the Info entry for @file{gcc}, or
52 @w{@uref{http://gcc.gnu.org/thanks.html}}, for contributors to GCC.
53 @c man end
54 @end ignore
56 @node Invoking GCC
57 @chapter GCC Command Options
58 @cindex GCC command options
59 @cindex command options
60 @cindex options, GCC command
62 @c man begin DESCRIPTION
64 When you invoke GCC, it normally does preprocessing, compilation,
65 assembly and linking.  The ``overall options'' allow you to stop this
66 process at an intermediate stage.  For example, the @samp{-c} option
67 says not to run the linker.  Then the output consists of object files
68 output by the assembler.
70 Other options are passed on to one stage of processing.  Some options
71 control the preprocessor and others the compiler itself.  Yet other
72 options control the assembler and linker; most of these are not
73 documented here, since you rarely need to use any of them.
75 @cindex C compilation options
76 Most of the command line options that you can use with GCC are useful
77 for C programs; when an option is only useful with another language
78 (usually C++), the explanation says so explicitly.  If the description
79 for a particular option does not mention a source language, you can use
80 that option with all supported languages.
82 @cindex C++ compilation options
83 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
84 options for compiling C++ programs.
86 @cindex grouping options
87 @cindex options, grouping
88 The @command{gcc} program accepts options and file names as operands.  Many
89 options have multi-letter names; therefore multiple single-letter options
90 may @emph{not} be grouped: @samp{-dr} is very different from @w{@samp{-d
91 -r}}.
93 @cindex order of options
94 @cindex options, order
95 You can mix options and other arguments.  For the most part, the order
96 you use doesn't matter.  Order does matter when you use several options
97 of the same kind; for example, if you specify @samp{-L} more than once,
98 the directories are searched in the order specified.
100 Many options have long names starting with @samp{-f} or with
101 @samp{-W}---for example, @samp{-fforce-mem},
102 @samp{-fstrength-reduce}, @samp{-Wformat} and so on.  Most of
103 these have both positive and negative forms; the negative form of
104 @samp{-ffoo} would be @samp{-fno-foo}.  This manual documents
105 only one of these two forms, whichever one is not the default.
107 @c man end
109 @menu
110 * Option Summary::      Brief list of all options, without explanations.
111 * Overall Options::     Controlling the kind of output:
112                         an executable, object files, assembler files,
113                         or preprocessed source.
114 * Invoking G++::        Compiling C++ programs.
115 * C Dialect Options::   Controlling the variant of C language compiled.
116 * C++ Dialect Options:: Variations on C++.
117 * Language Independent Options:: Controlling how diagnostics should be
118                         formatted. 
119 * Warning Options::     How picky should the compiler be?
120 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
121 * Optimize Options::    How much optimization?
122 * Preprocessor Options:: Controlling header files and macro definitions.
123                          Also, getting dependency information for Make.
124 * Assembler Options::   Passing options to the assembler.
125 * Link Options::        Specifying libraries and so on.
126 * Directory Options::   Where to find header files and libraries.
127                         Where to find the compiler executable files.
128 * Spec Files::          How to pass switches to sub-processes.
129 * Target Options::      Running a cross-compiler, or an old version of GCC.
130 * Submodel Options::    Specifying minor hardware or convention variations,
131                         such as 68010 vs 68020.
132 * Code Gen Options::    Specifying conventions for function calls, data layout
133                         and register usage.
134 * Environment Variables:: Env vars that affect GCC.
135 * Running Protoize::    Automatically adding or removing function prototypes.
136 @end menu
138 @node Option Summary
139 @section Option Summary
141 Here is a summary of all the options, grouped by type.  Explanations are
142 in the following sections.
144 @table @emph
145 @item Overall Options
146 @xref{Overall Options,,Options Controlling the Kind of Output}.
147 @smallexample
148 -c  -S  -E  -o @var{file}  -pipe  -pass-exit-codes  -x @var{language}
149 -v  --target-help  --help
150 @end smallexample
152 @item C Language Options
153 @xref{C Dialect Options,,Options Controlling C Dialect}.
154 @smallexample
155 -ansi  -std=@var{standard}  -fno-asm  -fno-builtin
156 -fhosted  -ffreestanding
157 -trigraphs  -traditional  -traditional-cpp
158 -fallow-single-precision  -fcond-mismatch
159 -fsigned-bitfields  -fsigned-char
160 -funsigned-bitfields  -funsigned-char
161 -fwritable-strings  -fshort-wchar
162 @end smallexample
164 @item C++ Language Options
165 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
166 @smallexample
167 -fno-access-control  -fcheck-new  -fconserve-space
168 -fdollars-in-identifiers  -fno-elide-constructors
169 -fno-enforce-eh-specs  -fexternal-templates
170 -falt-external-templates
171 -ffor-scope  -fno-for-scope  -fno-gnu-keywords  -fhonor-std
172 -fhuge-objects  -fno-implicit-templates
173 -fno-implicit-inline-templates
174 -fno-implement-inlines  -fms-extensions
175 -fname-mangling-version-@var{n}  -fno-operator-names
176 -fno-optional-diags  -fpermissive
177 -frepo  -fno-rtti  -fsquangle  -ftemplate-depth-@var{n}
178 -fuse-cxa-atexit  -fvtable-thunks  -nostdinc++
179 -fno-default-inline  -Wctor-dtor-privacy
180 -Wnon-virtual-dtor  -Wreorder
181 -Weffc++  -Wno-deprecated
182 -Wno-non-template-friend  -Wold-style-cast
183 -Woverloaded-virtual  -Wno-pmf-conversions
184 -Wsign-promo  -Wsynth
185 @end smallexample
187 @item Language Independent Options
188 @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
189 @smallexample
190 -fmessage-length=@var{n} 
191 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}
192 @end smallexample
194 @item Warning Options
195 @xref{Warning Options,,Options to Request or Suppress Warnings}.
196 @smallexample
197 -fsyntax-only  -pedantic  -pedantic-errors
198 -w  -W  -Wall  -Waggregate-return
199 -Wcast-align  -Wcast-qual  -Wchar-subscripts  -Wcomment
200 -Wconversion  -Wdisabled-optimization -Werror
201 -Wfloat-equal  -Wformat  -Wformat=2
202 -Wformat-nonliteral -Wformat-security
203 -Wid-clash-@var{len}  -Wimplicit -Wimplicit-int 
204 -Wimplicit-function-declaration
205 -Werror-implicit-function-declaration
206 -Wimport  -Winline
207 -Wlarger-than-@var{len}  -Wlong-long
208 -Wmain  -Wmissing-declarations
209 -Wmissing-format-attribute  -Wmissing-noreturn
210 -Wmultichar  -Wno-format-extra-args -Wno-format-y2k
211 -Wno-import  -Wpacked  -Wpadded
212 -Wparentheses -Wpointer-arith  -Wredundant-decls
213 -Wreturn-type  -Wsequence-point  -Wshadow
214 -Wsign-compare  -Wswitch  -Wsystem-headers
215 -Wtrigraphs  -Wundef  -Wuninitialized
216 -Wunknown-pragmas  -Wunreachable-code
217 -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter
218 -Wunused-value  -Wunused-variable  -Wwrite-strings
219 @end smallexample
221 @item C-only Warning Options
222 @smallexample
223 -Wbad-function-cast -Wmissing-prototypes -Wnested-externs
224 -Wstrict-prototypes -Wtraditional
225 @end smallexample
227 @item Debugging Options
228 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
229 @smallexample
230 -a  -ax  -d@var{letters}  -fdump-unnumbered -fdump-translation-unit-@var{file}
231 -fpretend-float -fprofile-arcs  -ftest-coverage
232 -g  -g@var{level}  -gcoff  -gdwarf  -gdwarf-1  -gdwarf-1+  -gdwarf-2
233 -ggdb  -gstabs  -gstabs+  -gxcoff  -gxcoff+
234 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name
235 -print-prog-name=@var{program}  -print-search-dirs  -Q
236 -save-temps  -time
237 @end smallexample
239 @item Optimization Options
240 @xref{Optimize Options,,Options that Control Optimization}.
241 @smallexample
242 -falign-functions=@var{n}  -falign-jumps=@var{n}
243 -falign-labels=@var{n}  -falign-loops=@var{n} 
244 -fbranch-probabilities  -fcaller-saves
245 -fcse-follow-jumps  -fcse-skip-blocks  -fdata-sections  -fdce
246 -fdelayed-branch  -fdelete-null-pointer-checks
247 -fexpensive-optimizations  -ffast-math  -ffloat-store
248 -fforce-addr  -fforce-mem  -ffunction-sections  -fgcse 
249 -finline-functions  -finline-limit=@var{n}  -fkeep-inline-functions
250 -fkeep-static-consts  -fmove-all-movables
251 -fno-default-inline  -fno-defer-pop
252 -fno-function-cse  -fno-inline  -fno-math-errno  -fno-peephole
253 -fomit-frame-pointer  -foptimize-register-move
254 -foptimize-sibling-calls  -freduce-all-givs
255 -fregmove  -frename-registers
256 -frerun-cse-after-loop  -frerun-loop-opt
257 -fschedule-insns  -fschedule-insns2
258 -fsingle-precision-constant  -fssa
259 -fstrength-reduce  -fstrict-aliasing  -fthread-jumps  -ftrapv
260 -funroll-all-loops  -funroll-loops 
261 -O  -O0  -O1  -O2  -O3  -Os
262 @end smallexample
264 @item Preprocessor Options
265 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
266 @smallexample
267 -$  -A@var{question}=@var{answer}  -A-@var{question}[=@var{answer}]
268 -C  -dD  -dI  -dM  -dN
269 -D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H
270 -idirafter @var{dir}
271 -include @var{file}  -imacros @var{file}
272 -iprefix @var{file}  -iwithprefix @var{dir}
273 -iwithprefixbefore @var{dir}  -isystem @var{dir} -isystem-c++ @var{dir}
274 -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  -P  -remap
275 -trigraphs  -undef  -U@var{macro}  -Wp,@var{option}
276 @end smallexample
278 @item Assembler Option
279 @xref{Assembler Options,,Passing Options to the Assembler}.
280 @smallexample
281 -Wa,@var{option}
282 @end smallexample
284 @item Linker Options
285 @xref{Link Options,,Options for Linking}.
286 @smallexample
287 @var{object-file-name}  -l@var{library}
288 -nostartfiles  -nodefaultlibs  -nostdlib
289 -s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic
290 -Wl,@var{option}  -Xlinker @var{option}
291 -u @var{symbol}
292 @end smallexample
294 @item Directory Options
295 @xref{Directory Options,,Options for Directory Search}.
296 @smallexample
297 -B@var{prefix}  -I@var{dir}  -I-  -L@var{dir}  -specs=@var{file}
298 @end smallexample
300 @item Target Options
301 @c I wrote this xref this way to avoid overfull hbox. -- rms
302 @xref{Target Options}.
303 @smallexample
304 -b @var{machine}  -V @var{version}
305 @end smallexample
307 @item Machine Dependent Options
308 @xref{Submodel Options,,Hardware Models and Configurations}.
309 @smallexample
310 @emph{M680x0 Options}
311 -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
312 -m68060  -mcpu32 -m5200  -m68881  -mbitfield  -mc68000  -mc68020  
313 -mfpa -mnobitfield  -mrtd  -mshort  -msoft-float  -mpcrel
314 -malign-int -mstrict-align
316 @emph{M68hc1x Options}
317 -m6811  -m6812  -m68hc11  -m68hc12
318 -mauto-incdec  -mshort  -msoft-reg-count=@var{count}
320 @emph{VAX Options}
321 -mg  -mgnu  -munix
323 @emph{SPARC Options}
324 -mcpu=@var{cpu type}
325 -mtune=@var{cpu type}
326 -mcmodel=@var{code model}
327 -m32  -m64
328 -mapp-regs  -mbroken-saverestore  -mcypress
329 -mepilogue -mfaster-structs -mflat
330 -mfpu  -mhard-float  -mhard-quad-float
331 -mimpure-text  -mlive-g0  -mno-app-regs
332 -mno-epilogue -mno-faster-structs -mno-flat  -mno-fpu
333 -mno-impure-text -mno-stack-bias  -mno-unaligned-doubles
334 -msoft-float  -msoft-quad-float  -msparclite  -mstack-bias
335 -msupersparc  -munaligned-doubles  -mv8
337 @emph{Convex Options}
338 -mc1  -mc2  -mc32  -mc34  -mc38
339 -margcount  -mnoargcount
340 -mlong32  -mlong64
341 -mvolatile-cache  -mvolatile-nocache
343 @emph{AMD29K Options}
344 -m29000  -m29050  -mbw  -mnbw  -mdw  -mndw
345 -mlarge  -mnormal  -msmall
346 -mkernel-registers  -mno-reuse-arg-regs
347 -mno-stack-check  -mno-storem-bug
348 -mreuse-arg-regs  -msoft-float  -mstack-check
349 -mstorem-bug  -muser-registers
351 @emph{ARM Options}
352 -mapcs-frame -mno-apcs-frame
353 -mapcs-26 -mapcs-32
354 -mapcs-stack-check -mno-apcs-stack-check
355 -mapcs-float -mno-apcs-float
356 -mapcs-reentrant -mno-apcs-reentrant
357 -msched-prolog -mno-sched-prolog
358 -mlittle-endian -mbig-endian -mwords-little-endian
359 -malignment-traps -mno-alignment-traps
360 -msoft-float -mhard-float -mfpe
361 -mthumb-interwork -mno-thumb-interwork
362 -mcpu= -march= -mfpe= 
363 -mstructure-size-boundary=
364 -mbsd -mxopen -mno-symrename
365 -mabort-on-noreturn
366 -mlong-calls -mno-long-calls
367 -mnop-fun-dllimport -mno-nop-fun-dllimport
368 -msingle-pic-base -mno-single-pic-base
369 -mpic-register=
371 @emph{Thumb Options}
372 -mtpcs-frame -mno-tpcs-frame
373 -mtpcs-leaf-frame -mno-tpcs-leaf-frame
374 -mlittle-endian  -mbig-endian
375 -mthumb-interwork -mno-thumb-interwork
376 -mstructure-size-boundary=
377 -mnop-fun-dllimport -mno-nop-fun-dllimport
378 -mcallee-super-interworking -mno-callee-super-interworking
379 -mcaller-super-interworking -mno-caller-super-interworking
380 -msingle-pic-base -mno-single-pic-base
381 -mpic-register=
383 @emph{MN10200 Options}
384 -mrelax
386 @emph{MN10300 Options}
387 -mmult-bug
388 -mno-mult-bug
389 -mam33
390 -mno-am33
391 -mrelax
393 @emph{M32R/D Options}
394 -mcode-model=@var{model type}  -msdata=@var{sdata type}
395 -G @var{num}
397 @emph{M88K Options}
398 -m88000  -m88100  -m88110  -mbig-pic
399 -mcheck-zero-division  -mhandle-large-shift
400 -midentify-revision  -mno-check-zero-division
401 -mno-ocs-debug-info  -mno-ocs-frame-position
402 -mno-optimize-arg-area  -mno-serialize-volatile
403 -mno-underscores  -mocs-debug-info
404 -mocs-frame-position  -moptimize-arg-area
405 -mserialize-volatile  -mshort-data-@var{num}  -msvr3
406 -msvr4  -mtrap-large-shift  -muse-div-instruction
407 -mversion-03.00  -mwarn-passed-structs
409 @emph{RS/6000 and PowerPC Options}
410 -mcpu=@var{cpu type}
411 -mtune=@var{cpu type}
412 -mpower  -mno-power  -mpower2  -mno-power2
413 -mpowerpc  -mpowerpc64  -mno-powerpc
414 -mpowerpc-gpopt  -mno-powerpc-gpopt
415 -mpowerpc-gfxopt  -mno-powerpc-gfxopt
416 -mnew-mnemonics  -mold-mnemonics
417 -mfull-toc   -mminimal-toc  -mno-fop-in-toc  -mno-sum-in-toc
418 -m64  -m32  -mxl-call  -mno-xl-call  -mthreads  -mpe
419 -msoft-float  -mhard-float  -mmultiple  -mno-multiple
420 -mstring  -mno-string  -mupdate  -mno-update
421 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
422 -mstrict-align  -mno-strict-align  -mrelocatable
423 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
424 -mtoc  -mno-toc -mlittle  -mlittle-endian  -mbig  -mbig-endian
425 -mcall-aix  -mcall-sysv  -mprototype  -mno-prototype
426 -msim  -mmvme  -mads  -myellowknife  -memb -msdata
427 -msdata=@var{opt}  -mvxworks -G @var{num}
429 @emph{RT Options}
430 -mcall-lib-mul  -mfp-arg-in-fpregs  -mfp-arg-in-gregs
431 -mfull-fp-blocks  -mhc-struct-return  -min-line-mul
432 -mminimum-fp-blocks  -mnohc-struct-return
434 @emph{MIPS Options}
435 -mabicalls  -mcpu=@var{cpu type}
436 -membedded-data  -muninit-const-in-rodata
437 -membedded-pic  -mfp32  -mfp64  -mgas  -mgp32  -mgp64
438 -mgpopt  -mhalf-pic  -mhard-float  -mint64  -mips1
439 -mips2  -mips3 -mips4 -mlong64  -mlong32 -mlong-calls  -mmemcpy
440 -mmips-as  -mmips-tfile  -mno-abicalls
441 -mno-embedded-data  -mno-uninit-const-in-rodata  -mno-embedded-pic
442 -mno-gpopt  -mno-long-calls
443 -mno-memcpy  -mno-mips-tfile  -mno-rnames  -mno-stats
444 -mrnames  -msoft-float
445 -m4650  -msingle-float  -mmad
446 -mstats  -EL  -EB  -G @var{num}  -nocpp
447 -mabi=32 -mabi=n32 -mabi=64 -mabi=eabi
448 -mfix7000 -mno-crt0
450 @emph{i386 Options}
451 -mcpu=@var{cpu type} -march=@var{cpu type}
452 -mintel-syntax -mieee-fp  -mno-fancy-math-387
453 -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib
454 -mno-wide-multiply  -mrtd  -malign-double
455 -mreg-alloc=@var{list}  -mregparm=@var{num}
456 -malign-jumps=@var{num}  -malign-loops=@var{num}
457 -malign-functions=@var{num} -mpreferred-stack-boundary=@var{num}
458 -mthreads -mno-align-stringops -minline-all-stringops
459 -mpush-args -maccumulate-outgoing-args -m128bit-long-double
460 -m96bit-long-double
462 @emph{HPPA Options}
463 -march=@var{architecture type}
464 -mbig-switch  -mdisable-fpregs  -mdisable-indexing  
465 -mfast-indirect-calls -mgas  -mjump-in-delay  
466 -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
467 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
468 -mno-jump-in-delay  -mno-long-load-store  
469 -mno-portable-runtime  -mno-soft-float
470 -mno-space-regs  -msoft-float  -mpa-risc-1-0  
471 -mpa-risc-1-1  -mpa-risc-2-0 -mportable-runtime
472 -mschedule=@var{cpu type}  -mspace-regs
474 @emph{Intel 960 Options}
475 -m@var{cpu type}  -masm-compat  -mclean-linkage
476 -mcode-align  -mcomplex-addr  -mleaf-procedures
477 -mic-compat  -mic2.0-compat  -mic3.0-compat
478 -mintel-asm  -mno-clean-linkage  -mno-code-align
479 -mno-complex-addr  -mno-leaf-procedures
480 -mno-old-align  -mno-strict-align  -mno-tail-call
481 -mnumerics  -mold-align  -msoft-float  -mstrict-align
482 -mtail-call
484 @emph{DEC Alpha Options}
485 -mfp-regs  -mno-fp-regs -mno-soft-float  -msoft-float
486 -malpha-as -mgas
487 -mieee  -mieee-with-inexact  -mieee-conformant
488 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode}
489 -mtrap-precision=@var{mode}  -mbuild-constants
490 -mcpu=@var{cpu type}
491 -mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max
492 -mmemory-latency=@var{time}
494 @emph{Clipper Options}
495 -mc300  -mc400
497 @emph{H8/300 Options}
498 -mrelax  -mh -ms -mint32  -malign-300
500 @emph{SH Options}
501 -m1  -m2  -m3  -m3e
502 -m4-nofpu  -m4-single-only  -m4-single  -m4
503 -mb  -ml  -mdalign  -mrelax
504 -mbigtable  -mfmovd  -mhitachi  -mnomacsave
505 -misize  -mpadstruct  -mspace
506 -mprefergot
507 -musermode
509 @emph{System V Options}
510 -Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}
512 @emph{ARC Options}
513 -EB  -EL
514 -mmangle-cpu  -mcpu=@var{cpu}  -mtext=@var{text section}
515 -mdata=@var{data section}  -mrodata=@var{readonly data section}
517 @emph{TMS320C3x/C4x Options}
518 -mcpu=@var{cpu} -mbig -msmall -mregparm -mmemparm
519 -mfast-fix -mmpyi -mbk -mti -mdp-isr-reload
520 -mrpts=@var{count}  -mrptb -mdb -mloop-unsigned
521 -mparallel-insns -mparallel-mpy -mpreserve-float
523 @emph{V850 Options}
524 -mlong-calls -mno-long-calls -mep -mno-ep
525 -mprolog-function -mno-prolog-function -mspace
526 -mtda=@var{n} -msda=@var{n} -mzda=@var{n}
527 -mv850 -mbig-switch
529 @emph{NS32K Options}
530 -m32032 -m32332 -m32532 -m32081 -m32381 -mmult-add -mnomult-add
531 -msoft-float -mrtd -mnortd -mregparam -mnoregparam -msb -mnosb
532 -mbitfield -mnobitfield -mhimem -mnohimem
534 @emph{AVR Options}
535 -mmcu=@var{mcu} -msize -minit-stack=@var{n} -mno-interrupts
536 -mcall-prologues -mno-tablejump -mtiny-stack
538 @emph{MCore Options}
539 -mhardlit, -mno-hardlit -mdiv -mno-div -mrelax-immediates 
540 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields
541 -m4byte-functions -mno-4byte-functions -mcallgraph-data
542 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim
543 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment
544 @end smallexample
546 @item Code Generation Options
547 @xref{Code Gen Options,,Options for Code Generation Conventions}.
548 @smallexample
549 -fcall-saved-@var{reg}  -fcall-used-@var{reg}
550 -fexceptions  -funwind-tables  -ffixed-@var{reg}
551 -finhibit-size-directive  -finstrument-functions
552 -fcheck-memory-usage  -fprefix-function-name
553 -fno-common  -fno-ident  -fno-gnu-linker
554 -fpcc-struct-return  -fpic  -fPIC
555 -freg-struct-return  -fshared-data  -fshort-enums
556 -fshort-double  -fvolatile  -fvolatile-global -fvolatile-static
557 -fverbose-asm  -fpack-struct  -fstack-check
558 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym}
559 -fargument-alias  -fargument-noalias
560 -fargument-noalias-global
561 -fleading-underscore
562 @end smallexample
563 @end table
565 @menu
566 * Overall Options::     Controlling the kind of output:
567                         an executable, object files, assembler files,
568                         or preprocessed source.
569 * C Dialect Options::   Controlling the variant of C language compiled.
570 * C++ Dialect Options:: Variations on C++.
571 * Language Independent Options:: Controlling how diagnostics should be
572                         formatted. 
573 * Warning Options::     How picky should the compiler be?
574 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
575 * Optimize Options::    How much optimization?
576 * Preprocessor Options:: Controlling header files and macro definitions.
577                          Also, getting dependency information for Make.
578 * Assembler Options::   Passing options to the assembler.
579 * Link Options::        Specifying libraries and so on.
580 * Directory Options::   Where to find header files and libraries.
581                         Where to find the compiler executable files.
582 * Spec Files::          How to pass switches to sub-processes.
583 * Target Options::      Running a cross-compiler, or an old version of GCC.
584 @end menu
586 @c man begin OPTIONS
588 @node Overall Options
589 @section Options Controlling the Kind of Output
591 Compilation can involve up to four stages: preprocessing, compilation
592 proper, assembly and linking, always in that order.  The first three
593 stages apply to an individual source file, and end by producing an
594 object file; linking combines all the object files (those newly
595 compiled, and those specified as input) into an executable file.
597 @cindex file name suffix
598 For any given input file, the file name suffix determines what kind of
599 compilation is done:
601 @table @gcctabopt
602 @item @var{file}.c
603 C source code which must be preprocessed.
605 @item @var{file}.i
606 C source code which should not be preprocessed.
608 @item @var{file}.ii
609 C++ source code which should not be preprocessed.
611 @item @var{file}.m
612 Objective-C source code.  Note that you must link with the library
613 @file{libobjc.a} to make an Objective-C program work.
615 @item @var{file}.mi
616 Objective-C source code which should not be preprocessed.
618 @item @var{file}.h
619 C header file (not to be compiled or linked).
621 @item @var{file}.cc
622 @itemx @var{file}.cp
623 @itemx @var{file}.cxx
624 @itemx @var{file}.cpp
625 @itemx @var{file}.c++
626 @itemx @var{file}.C
627 C++ source code which must be preprocessed.  Note that in @samp{.cxx},
628 the last two letters must both be literally @samp{x}.  Likewise,
629 @samp{.C} refers to a literal capital C.
631 @item @var{file}.f
632 @itemx @var{file}.for
633 @itemx @var{file}.FOR
634 Fortran source code which should not be preprocessed.
636 @item @var{file}.F
637 @itemx @var{file}.fpp
638 @itemx @var{file}.FPP
639 Fortran source code which must be preprocessed (with the traditional
640 preprocessor).
642 @item @var{file}.r
643 Fortran source code which must be preprocessed with a RATFOR
644 preprocessor (not included with GCC).
646 @xref{Overall Options,,Options Controlling the Kind of Output, g77,
647 Using and Porting GNU Fortran}, for more details of the handling of
648 Fortran input files.
650 @c FIXME: Descriptions of Java file types.
651 @c @var{file}.java
652 @c @var{file}.class
653 @c @var{file}.zip
654 @c @var{file}.jar
656 @c GCC also knows about some suffixes for languages not yet included:
657 @c Ada:
658 @c @var{file}.ads
659 @c @var{file}.adb
660 @c @var{file}.ada
661 @c Pascal:
662 @c @var{file}.p
663 @c @var{file}.pas
665 @item @var{file}.ch
666 @itemx @var{file}.chi
667 CHILL source code (preprocessed with the traditional preprocessor).
669 @item @var{file}.s
670 Assembler code.
672 @item @var{file}.S
673 Assembler code which must be preprocessed.
675 @item @var{other}
676 An object file to be fed straight into linking.
677 Any file name with no recognized suffix is treated this way.
678 @end table
680 You can specify the input language explicitly with the @samp{-x} option:
682 @table @gcctabopt
683 @item -x @var{language}
684 Specify explicitly the @var{language} for the following input files
685 (rather than letting the compiler choose a default based on the file
686 name suffix).  This option applies to all following input files until
687 the next @samp{-x} option.  Possible values for @var{language} are:
688 @example
689 c  c-header  cpp-output
690 c++  c++-cpp-output
691 objective-c  objc-cpp-output
692 assembler  assembler-with-cpp
693 f77  f77-cpp-input  ratfor
694 java  chill
695 @end example
696 @c Also f77-version, for internal use only.
698 @item -x none
699 Turn off any specification of a language, so that subsequent files are
700 handled according to their file name suffixes (as they are if @samp{-x}
701 has not been used at all).
703 @item -pass-exit-codes
704 Normally the @command{gcc} program will exit with the code of 1 if any
705 phase of the compiler returns a non-success return code.  If you specify
706 @samp{-pass-exit-codes}, the @command{gcc} program will instead return with
707 numerically highest error produced by any phase that returned an error
708 indication.
709 @end table
711 If you only want some of the stages of compilation, you can use
712 @samp{-x} (or filename suffixes) to tell @command{gcc} where to start, and
713 one of the options @samp{-c}, @samp{-S}, or @samp{-E} to say where
714 @command{gcc} is to stop.  Note that some combinations (for example,
715 @samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
717 @table @gcctabopt
718 @item -c
719 Compile or assemble the source files, but do not link.  The linking
720 stage simply is not done.  The ultimate output is in the form of an
721 object file for each source file.
723 By default, the object file name for a source file is made by replacing
724 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
726 Unrecognized input files, not requiring compilation or assembly, are
727 ignored.
729 @item -S
730 Stop after the stage of compilation proper; do not assemble.  The output
731 is in the form of an assembler code file for each non-assembler input
732 file specified.
734 By default, the assembler file name for a source file is made by
735 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
737 Input files that don't require compilation are ignored.
739 @item -E
740 Stop after the preprocessing stage; do not run the compiler proper.  The
741 output is in the form of preprocessed source code, which is sent to the
742 standard output.
744 Input files which don't require preprocessing are ignored.
746 @cindex output file option
747 @item -o @var{file}
748 Place output in file @var{file}.  This applies regardless to whatever
749 sort of output is being produced, whether it be an executable file,
750 an object file, an assembler file or preprocessed C code.
752 Since only one output file can be specified, it does not make sense to
753 use @samp{-o} when compiling more than one input file, unless you are
754 producing an executable file as output.
756 If @samp{-o} is not specified, the default is to put an executable file
757 in @file{a.out}, the object file for @file{@var{source}.@var{suffix}} in
758 @file{@var{source}.o}, its assembler file in @file{@var{source}.s}, and
759 all preprocessed C source on standard output.@refill
761 @item -v
762 Print (on standard error output) the commands executed to run the stages
763 of compilation.  Also print the version number of the compiler driver
764 program and of the preprocessor and the compiler proper.
766 @item -pipe
767 Use pipes rather than temporary files for communication between the
768 various stages of compilation.  This fails to work on some systems where
769 the assembler is unable to read from a pipe; but the GNU assembler has
770 no trouble.
772 @item --help
773 Print (on the standard output) a description of the command line options
774 understood by @command{gcc}.  If the @option{-v} option is also specified
775 then @option{--help} will also be passed on to the various processes
776 invoked by @command{gcc}, so that they can display the command line options
777 they accept.  If the @option{-W} option is also specified then command
778 line options which have no documentation associated with them will also
779 be displayed.
781 @item --target-help
782 Print (on the standard output) a description of target specific command
783 line options for each tool.
784 @end table
786 @node Invoking G++
787 @section Compiling C++ Programs
789 @cindex suffixes for C++ source
790 @cindex C++ source file suffixes
791 C++ source files conventionally use one of the suffixes @samp{.C},
792 @samp{.cc}, @samp{.cpp}, @samp{.c++}, @samp{.cp}, or @samp{.cxx};
793 preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
794 files with these names and compiles them as C++ programs even if you
795 call the compiler the same way as for compiling C programs (usually with
796 the name @command{gcc}).
798 @findex g++
799 @findex c++
800 However, C++ programs often require class libraries as well as a
801 compiler that understands the C++ language---and under some
802 circumstances, you might want to compile programs from standard input,
803 or otherwise without a suffix that flags them as C++ programs.
804 @command{g++} is a program that calls GCC with the default language
805 set to C++, and automatically specifies linking against the C++
806 library.  On many systems, @command{g++} is also
807 installed with the name @command{c++}.
809 @cindex invoking @command{g++}
810 When you compile C++ programs, you may specify many of the same
811 command-line options that you use for compiling programs in any
812 language; or command-line options meaningful for C and related
813 languages; or options that are meaningful only for C++ programs.
814 @xref{C Dialect Options,,Options Controlling C Dialect}, for
815 explanations of options for languages related to C.
816 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
817 explanations of options that are meaningful only for C++ programs.
819 @node C Dialect Options
820 @section Options Controlling C Dialect
821 @cindex dialect options
822 @cindex language dialect options
823 @cindex options, dialect
825 The following options control the dialect of C (or languages derived
826 from C, such as C++ and Objective C) that the compiler accepts:
828 @table @gcctabopt
829 @cindex ANSI support
830 @cindex ISO support
831 @item -ansi
832 In C mode, support all ISO C89 programs.  In C++ mode,
833 remove GNU extensions that conflict with ISO C++.
835 This turns off certain features of GCC that are incompatible with ISO
836 C (when compiling C code), or of standard C++ (when compiling C++ code),
837 such as the @code{asm} and @code{typeof} keywords, and
838 predefined macros such as @code{unix} and @code{vax} that identify the
839 type of system you are using.  It also enables the undesirable and
840 rarely used ISO trigraph feature.  For the C compiler, 
841 it disables recognition of C++ style @samp{//} comments as well as
842 the @code{inline} keyword.
844 The alternate keywords @code{__asm__}, @code{__extension__},
845 @code{__inline__} and @code{__typeof__} continue to work despite
846 @samp{-ansi}.  You would not want to use them in an ISO C program, of
847 course, but it is useful to put them in header files that might be included
848 in compilations done with @samp{-ansi}.  Alternate predefined macros
849 such as @code{__unix__} and @code{__vax__} are also available, with or
850 without @samp{-ansi}.
852 The @samp{-ansi} option does not cause non-ISO programs to be
853 rejected gratuitously.  For that, @samp{-pedantic} is required in
854 addition to @samp{-ansi}.  @xref{Warning Options}.
856 The macro @code{__STRICT_ANSI__} is predefined when the @samp{-ansi}
857 option is used.  Some header files may notice this macro and refrain
858 from declaring certain functions or defining certain macros that the
859 ISO standard doesn't call for; this is to avoid interfering with any
860 programs that might use these names for other things.
862 Functions which would normally be builtin but do not have semantics
863 defined by ISO C (such as @code{alloca} and @code{ffs}) are not builtin
864 functions with @samp{-ansi} is used.  @xref{Other Builtins,,Other
865 built-in functions provided by GNU CC}, for details of the functions
866 affected.
868 @item -std=
869 Determine the language standard.  A value for this option must be provided;
870 possible values are 
872 @table @samp
873 @item iso9899:1990
874 Same as @option{-ansi}
876 @item iso9899:199409
877 ISO C as modified in amend. 1
879 @item iso9899:1999
880 ISO C99.  Note that this standard is not yet fully supported; see
881 @w{@uref{http://gcc.gnu.org/c99status.html}} for more information.
883 @item c89
884 same as @option{-std=iso9899:1990}
886 @item c99
887 same as @option{-std=iso9899:1999}
889 @item gnu89
890 default, iso9899:1990 + gnu extensions
892 @item gnu99
893 iso9899:1999 + gnu extensions
895 @item iso9899:199x
896 same as @option{-std=iso9899:1999}, deprecated
898 @item c9x
899 same as @option{-std=iso9899:1999}, deprecated
901 @item gnu9x
902 same as @option{-std=gnu99}, deprecated
904 @end table
906 Even when this option is not specified, you can still use some of the
907 features of newer standards in so far as they do not conflict with
908 previous C standards.  For example, you may use @code{__restrict__} even
909 when @option{-std=c99} is not specified.
911 The @option{-std} options specifying some version of ISO C have the same
912 effects as @option{-ansi}, except that features that were not in ISO C89
913 but are in the specified version (for example, @samp{//} comments and
914 the @code{inline} keyword in ISO C99) are not disabled.
916 @xref{Standards,,Language Standards Supported by GCC}, for details of
917 these standard versions.
919 @item -fno-asm
920 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
921 keyword, so that code can use these words as identifiers.  You can use
922 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
923 instead.  @samp{-ansi} implies @samp{-fno-asm}.
925 In C++, this switch only affects the @code{typeof} keyword, since
926 @code{asm} and @code{inline} are standard keywords.  You may want to
927 use the @samp{-fno-gnu-keywords} flag instead, which has the same
928 effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
929 switch only affects the @code{asm} and @code{typeof} keywords, since
930 @code{inline} is a standard keyword in ISO C99.
932 @item -fno-builtin
933 @cindex builtin functions
934 Don't recognize builtin functions that do not begin with
935 @samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
936 functions provided by GNU CC}, for details of the functions affected,
937 including those which are not builtin functions when @option{-ansi} or
938 @option{-std} options for strict ISO C conformance are used because they
939 do not have an ISO standard meaning.
941 GCC normally generates special code to handle certain builtin functions
942 more efficiently; for instance, calls to @code{alloca} may become single
943 instructions that adjust the stack directly, and calls to @code{memcpy}
944 may become inline copy loops.  The resulting code is often both smaller
945 and faster, but since the function calls no longer appear as such, you
946 cannot set a breakpoint on those calls, nor can you change the behavior
947 of the functions by linking with a different library.
949 @item -fhosted
950 @cindex hosted environment
952 Assert that compilation takes place in a hosted environment.  This implies
953 @samp{-fbuiltin}.  A hosted environment is one in which the
954 entire standard library is available, and in which @code{main} has a return
955 type of @code{int}.  Examples are nearly everything except a kernel.
956 This is equivalent to @samp{-fno-freestanding}.
958 @item -ffreestanding
959 @cindex hosted environment
961 Assert that compilation takes place in a freestanding environment.  This
962 implies @samp{-fno-builtin}.  A freestanding environment
963 is one in which the standard library may not exist, and program startup may
964 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
965 This is equivalent to @samp{-fno-hosted}.
967 @xref{Standards,,Language Standards Supported by GCC}, for details of
968 freestanding and hosted environments.
970 @item -trigraphs
971 Support ISO C trigraphs.  You don't want to know about this
972 brain-damage.  The @option{-ansi} option (and @option{-std} options for
973 strict ISO C conformance) implies @option{-trigraphs}.
975 @cindex traditional C language
976 @cindex C language, traditional
977 @item -traditional
978 Attempt to support some aspects of traditional C compilers.
979 Specifically:
981 @itemize @bullet
982 @item
983 All @code{extern} declarations take effect globally even if they
984 are written inside of a function definition.  This includes implicit
985 declarations of functions.
987 @item
988 The newer keywords @code{typeof}, @code{inline}, @code{signed}, @code{const}
989 and @code{volatile} are not recognized.  (You can still use the
990 alternative keywords such as @code{__typeof__}, @code{__inline__}, and
991 so on.)
993 @item
994 Comparisons between pointers and integers are always allowed.
996 @item
997 Integer types @code{unsigned short} and @code{unsigned char} promote
998 to @code{unsigned int}.
1000 @item
1001 Out-of-range floating point literals are not an error.
1003 @item
1004 Certain constructs which ISO regards as a single invalid preprocessing
1005 number, such as @samp{0xe-0xd}, are treated as expressions instead.
1007 @item
1008 String ``constants'' are not necessarily constant; they are stored in
1009 writable space, and identical looking constants are allocated
1010 separately.  (This is the same as the effect of
1011 @samp{-fwritable-strings}.)
1013 @cindex @code{longjmp} and automatic variables
1014 @item
1015 All automatic variables not declared @code{register} are preserved by
1016 @code{longjmp}.  Ordinarily, GNU C follows ISO C: automatic variables
1017 not declared @code{volatile} may be clobbered.
1019 @item
1020 @kindex \x
1021 @kindex \a
1022 @cindex escape sequences, traditional
1023 The character escape sequences @samp{\x} and @samp{\a} evaluate as the
1024 literal characters @samp{x} and @samp{a} respectively.  Without
1025 @w{@samp{-traditional}}, @samp{\x} is a prefix for the hexadecimal
1026 representation of a character, and @samp{\a} produces a bell.
1027 @end itemize
1029 You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
1030 if your program uses names that are normally GNU C builtin functions for
1031 other purposes of its own.
1033 You cannot use @samp{-traditional} if you include any header files that
1034 rely on ISO C features.  Some vendors are starting to ship systems with
1035 ISO C header files and you cannot use @samp{-traditional} on such
1036 systems to compile files that include any system headers.
1038 The @samp{-traditional} option also enables @samp{-traditional-cpp},
1039 which is described next.
1041 @item -traditional-cpp
1042 Attempt to support some aspects of traditional C preprocessors.
1043 Specifically:
1045 @itemize @bullet
1046 @item
1047 Comments convert to nothing at all, rather than to a space.  This allows
1048 traditional token concatenation.
1050 @item
1051 In a preprocessing directive, the @samp{#} symbol must appear as the first
1052 character of a line.
1054 @item
1055 Macro arguments are recognized within string constants in a macro
1056 definition (and their values are stringified, though without additional
1057 quote marks, when they appear in such a context).  The preprocessor
1058 always considers a string constant to end at a newline.
1060 @item
1061 @cindex detecting @w{@samp{-traditional}}
1062 The predefined macro @code{__STDC__} is not defined when you use
1063 @samp{-traditional}, but @code{__GNUC__} is (since the GNU extensions
1064 which @code{__GNUC__} indicates are not affected by
1065 @samp{-traditional}).  If you need to write header files that work
1066 differently depending on whether @samp{-traditional} is in use, by
1067 testing both of these predefined macros you can distinguish four
1068 situations: GNU C, traditional GNU C, other ISO C compilers, and other
1069 old C compilers.  The predefined macro @code{__STDC_VERSION__} is also
1070 not defined when you use @samp{-traditional}.  @xref{Standard
1071 Predefined,,Standard Predefined Macros,cpp.info,The C Preprocessor},
1072 for more discussion of these and other predefined macros.
1074 @item
1075 @cindex string constants vs newline
1076 @cindex newline vs string constants
1077 The preprocessor considers a string constant to end at a newline (unless
1078 the newline is escaped with @samp{\}).  (Without @w{@samp{-traditional}},
1079 string constants can contain the newline character as typed.)
1080 @end itemize
1082 @item -fcond-mismatch
1083 Allow conditional expressions with mismatched types in the second and
1084 third arguments.  The value of such an expression is void.  This option
1085 is not supported for C++.
1087 @item -funsigned-char
1088 Let the type @code{char} be unsigned, like @code{unsigned char}.
1090 Each kind of machine has a default for what @code{char} should
1091 be.  It is either like @code{unsigned char} by default or like
1092 @code{signed char} by default.
1094 Ideally, a portable program should always use @code{signed char} or
1095 @code{unsigned char} when it depends on the signedness of an object.
1096 But many programs have been written to use plain @code{char} and
1097 expect it to be signed, or expect it to be unsigned, depending on the
1098 machines they were written for.  This option, and its inverse, let you
1099 make such a program work with the opposite default.
1101 The type @code{char} is always a distinct type from each of
1102 @code{signed char} or @code{unsigned char}, even though its behavior
1103 is always just like one of those two.
1105 @item -fsigned-char
1106 Let the type @code{char} be signed, like @code{signed char}.
1108 Note that this is equivalent to @samp{-fno-unsigned-char}, which is
1109 the negative form of @samp{-funsigned-char}.  Likewise, the option
1110 @samp{-fno-signed-char} is equivalent to @samp{-funsigned-char}.
1112 You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
1113 if your program uses names that are normally GNU C builtin functions for
1114 other purposes of its own.
1116 You cannot use @samp{-traditional} if you include any header files that
1117 rely on ISO C features.  Some vendors are starting to ship systems with
1118 ISO C header files and you cannot use @samp{-traditional} on such
1119 systems to compile files that include any system headers.
1121 @item -fsigned-bitfields
1122 @itemx -funsigned-bitfields
1123 @itemx -fno-signed-bitfields
1124 @itemx -fno-unsigned-bitfields
1125 These options control whether a bitfield is signed or unsigned, when the
1126 declaration does not use either @code{signed} or @code{unsigned}.  By
1127 default, such a bitfield is signed, because this is consistent: the
1128 basic integer types such as @code{int} are signed types.
1130 However, when @samp{-traditional} is used, bitfields are all unsigned
1131 no matter what.
1133 @item -fwritable-strings
1134 Store string constants in the writable data segment and don't uniquize
1135 them.  This is for compatibility with old programs which assume they can
1136 write into string constants.  The option @samp{-traditional} also has
1137 this effect.
1139 Writing into string constants is a very bad idea; ``constants'' should
1140 be constant.
1142 @item -fallow-single-precision
1143 Do not promote single precision math operations to double precision,
1144 even when compiling with @samp{-traditional}.
1146 Traditional K&R C promotes all floating point operations to double
1147 precision, regardless of the sizes of the operands.   On the
1148 architecture for which you are compiling, single precision may be faster
1149 than double precision.   If you must use @samp{-traditional}, but want
1150 to use single precision operations when the operands are single
1151 precision, use this option.   This option has no effect when compiling
1152 with ISO or GNU C conventions (the default).
1154 @item -fshort-wchar
1155 Override the underlying type for @samp{wchar_t} to be @samp{short
1156 unsigned int} instead of the default for the target.  This option is
1157 useful for building programs to run under WINE.
1158 @end table
1160 @node C++ Dialect Options
1161 @section Options Controlling C++ Dialect
1163 @cindex compiler options, C++
1164 @cindex C++ options, command line
1165 @cindex options, C++
1166 This section describes the command-line options that are only meaningful
1167 for C++ programs; but you can also use most of the GNU compiler options
1168 regardless of what language your program is in.  For example, you
1169 might compile a file @code{firstClass.C} like this:
1171 @example
1172 g++ -g -frepo -O -c firstClass.C
1173 @end example
1175 @noindent
1176 In this example, only @samp{-frepo} is an option meant
1177 only for C++ programs; you can use the other options with any
1178 language supported by GCC.
1180 Here is a list of options that are @emph{only} for compiling C++ programs:
1182 @table @gcctabopt
1183 @item -fno-access-control
1184 Turn off all access checking.  This switch is mainly useful for working
1185 around bugs in the access control code.
1187 @item -fcheck-new
1188 Check that the pointer returned by @code{operator new} is non-null
1189 before attempting to modify the storage allocated.  The current Working
1190 Paper requires that @code{operator new} never return a null pointer, so
1191 this check is normally unnecessary.
1193 An alternative to using this option is to specify that your
1194 @code{operator new} does not throw any exceptions; if you declare it
1195 @samp{throw()}, g++ will check the return value.  See also @samp{new
1196 (nothrow)}.
1198 @item -fconserve-space
1199 Put uninitialized or runtime-initialized global variables into the
1200 common segment, as C does.  This saves space in the executable at the
1201 cost of not diagnosing duplicate definitions.  If you compile with this
1202 flag and your program mysteriously crashes after @code{main()} has
1203 completed, you may have an object that is being destroyed twice because
1204 two definitions were merged.
1206 This option is no longer useful on most targets, now that support has
1207 been added for putting variables into BSS without making them common.
1209 @item -fdollars-in-identifiers
1210 Accept @samp{$} in identifiers.  You can also explicitly prohibit use of
1211 @samp{$} with the option @samp{-fno-dollars-in-identifiers}.  (GNU C allows
1212 @samp{$} by default on most target systems, but there are a few exceptions.)
1213 Traditional C allowed the character @samp{$} to form part of
1214 identifiers.  However, ISO C and C++ forbid @samp{$} in identifiers.
1216 @item -fno-elide-constructors
1217 The C++ standard allows an implementation to omit creating a temporary
1218 which is only used to initialize another object of the same type.
1219 Specifying this option disables that optimization, and forces g++ to
1220 call the copy constructor in all cases.
1222 @item -fno-enforce-eh-specs
1223 Don't check for violation of exception specifications at runtime.  This
1224 option violates the C++ standard, but may be useful for reducing code
1225 size in production builds, much like defining @samp{NDEBUG}.  The compiler
1226 will still optimize based on the exception specifications.
1228 @item -fexternal-templates
1229 Cause template instantiations to obey @samp{#pragma interface} and
1230 @samp{implementation}; template instances are emitted or not according
1231 to the location of the template definition.  @xref{Template
1232 Instantiation}, for more information.
1234 This option is deprecated.
1236 @item -falt-external-templates
1237 Similar to -fexternal-templates, but template instances are emitted or
1238 not according to the place where they are first instantiated.
1239 @xref{Template Instantiation}, for more information.
1241 This option is deprecated.
1243 @item -ffor-scope
1244 @itemx -fno-for-scope
1245 If -ffor-scope is specified, the scope of variables declared in
1246 a @i{for-init-statement} is limited to the @samp{for} loop itself,
1247 as specified by the C++ standard.
1248 If -fno-for-scope is specified, the scope of variables declared in
1249 a @i{for-init-statement} extends to the end of the enclosing scope,
1250 as was the case in old versions of gcc, and other (traditional)
1251 implementations of C++.
1253 The default if neither flag is given to follow the standard,
1254 but to allow and give a warning for old-style code that would
1255 otherwise be invalid, or have different behavior.
1257 @item -fno-gnu-keywords
1258 Do not recognize @code{typeof} as a keyword, so that code can use this
1259 word as an identifier. You can use the keyword @code{__typeof__} instead.  
1260 @samp{-ansi} implies @samp{-fno-gnu-keywords}.
1262 @item -fhonor-std
1263 Treat the @code{namespace std} as a namespace, instead of ignoring
1264 it. For compatibility with earlier versions of g++, the compiler will,
1265 by default, ignore @code{namespace-declarations},
1266 @code{using-declarations}, @code{using-directives}, and
1267 @code{namespace-names}, if they involve @code{std}.
1269 @item -fhuge-objects
1270 Support virtual function calls for objects that exceed the size
1271 representable by a @samp{short int}.  Users should not use this flag by
1272 default; if you need to use it, the compiler will tell you so.
1274 This flag is not useful when compiling with -fvtable-thunks.
1276 Like all options that change the ABI, all C++ code, @emph{including
1277 libgcc} must be built with the same setting of this option.
1279 @item -fno-implicit-templates
1280 Never emit code for non-inline templates which are instantiated
1281 implicitly (i.e. by use); only emit code for explicit instantiations.
1282 @xref{Template Instantiation}, for more information.
1284 @item -fno-implicit-inline-templates
1285 Don't emit code for implicit instantiations of inline templates, either.
1286 The default is to handle inlines differently so that compiles with and
1287 without optimization will need the same set of explicit instantiations.
1289 @item -fno-implement-inlines
1290 To save space, do not emit out-of-line copies of inline functions
1291 controlled by @samp{#pragma implementation}.  This will cause linker
1292 errors if these functions are not inlined everywhere they are called.
1294 @item -fms-extensions
1295 Disable pedantic warnings about constructs used in MFC, such as implicit
1296 int and getting a pointer to member function via non-standard syntax.
1298 @item -fname-mangling-version-@var{n}
1299 Control the way in which names are mangled.  Version 0 is compatible
1300 with versions of g++ before 2.8.  Version 1 is the default.  Version 1
1301 will allow correct mangling of function templates.  For example, 
1302 version 0 mangling does not mangle foo<int, double> and foo<int, char>
1303 given this declaration:
1305 @example
1306 template <class T, class U> void foo(T t);
1307 @end example
1309 Like all options that change the ABI, all C++ code, @emph{including
1310 libgcc} must be built with the same setting of this option.
1312 @item -fno-operator-names
1313 Do not treat the operator name keywords @code{and}, @code{bitand},
1314 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1315 synonyms as keywords.
1317 @item -fno-optional-diags
1318 Disable diagnostics that the standard says a compiler does not need to
1319 issue.  Currently, the only such diagnostic issued by g++ is the one for
1320 a name having multiple meanings within a class.
1322 @item -fpermissive
1323 Downgrade messages about nonconformant code from errors to warnings.  By
1324 default, g++ effectively sets @samp{-pedantic-errors} without
1325 @samp{-pedantic}; this option reverses that.  This behavior and this
1326 option are superseded by @samp{-pedantic}, which works as it does for GNU C.
1328 @item -frepo
1329 Enable automatic template instantiation.  This option also implies
1330 @samp{-fno-implicit-templates}.  @xref{Template Instantiation}, for more
1331 information.
1333 @item -fno-rtti
1334 Disable generation of information about every class with virtual
1335 functions for use by the C++ runtime type identification features
1336 (@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
1337 of the language, you can save some space by using this flag.  Note that
1338 exception handling uses the same information, but it will generate it as
1339 needed.
1341 @item -fsquangle
1342 @itemx -fno-squangle
1343 @samp{-fsquangle} will enable a compressed form of name mangling for
1344 identifiers. In particular, it helps to shorten very long names by recognizing
1345 types and class names which occur more than once, replacing them with special
1346 short ID codes.  This option also requires any C++ libraries being used to
1347 be compiled with this option as well.  The compiler has this disabled (the
1348 equivalent of @samp{-fno-squangle}) by default.
1350 Like all options that change the ABI, all C++ code, @emph{including
1351 libgcc.a} must be built with the same setting of this option.
1353 @item -ftemplate-depth-@var{n}
1354 Set the maximum instantiation depth for template classes to @var{n}.
1355 A limit on the template instantiation depth is needed to detect
1356 endless recursions during template class instantiation. ANSI/ISO C++
1357 conforming programs must not rely on a maximum depth greater than 17.
1359 @item -fuse-cxa-atexit
1360 Register destructors for objects with static storage duration with the
1361 @code{__cxa_atexit} function rather than the @code{atexit} function.
1362 This option is required for fully standards-compliant handling of static
1363 destructors, but will only work if your C library supports
1364 @code{__cxa_atexit}.
1366 @item -fvtable-thunks
1367 Use @samp{thunks} to implement the virtual function dispatch table
1368 (@samp{vtable}).  The traditional (cfront-style) approach to
1369 implementing vtables was to store a pointer to the function and two
1370 offsets for adjusting the @samp{this} pointer at the call site.  Newer
1371 implementations store a single pointer to a @samp{thunk} function which
1372 does any necessary adjustment and then calls the target function.
1374 This option also enables a heuristic for controlling emission of
1375 vtables; if a class has any non-inline virtual functions, the vtable
1376 will be emitted in the translation unit containing the first one of
1377 those.
1379 Like all options that change the ABI, all C++ code, @emph{including
1380 libgcc.a} must be built with the same setting of this option.
1382 @item -nostdinc++
1383 Do not search for header files in the standard directories specific to
1384 C++, but do still search the other standard directories.  (This option
1385 is used when building the C++ library.)
1386 @end table
1388 In addition, these optimization, warning, and code generation options
1389 have meanings only for C++ programs:
1391 @table @gcctabopt
1392 @item -fno-default-inline
1393 Do not assume @samp{inline} for functions defined inside a class scope.
1394 @xref{Optimize Options,,Options That Control Optimization}.  Note that these
1395 functions will have linkage like inline functions; they just won't be
1396 inlined by default.
1398 @item -Wctor-dtor-privacy (C++ only)
1399 Warn when a class seems unusable, because all the constructors or
1400 destructors in a class are private and the class has no friends or
1401 public static member functions.
1403 @item -Wnon-virtual-dtor (C++ only)
1404 Warn when a class declares a non-virtual destructor that should probably
1405 be virtual, because it looks like the class will be used polymorphically.
1407 @item -Wreorder (C++ only)
1408 @cindex reordering, warning
1409 @cindex warning for reordering of member initializers
1410 Warn when the order of member initializers given in the code does not
1411 match the order in which they must be executed.  For instance:
1413 @smallexample
1414 struct A @{
1415   int i;
1416   int j;
1417   A(): j (0), i (1) @{ @}
1419 @end smallexample
1421 Here the compiler will warn that the member initializers for @samp{i}
1422 and @samp{j} will be rearranged to match the declaration order of the
1423 members.
1424 @end table
1426 The following @samp{-W@dots{}} options are not affected by @samp{-Wall}.
1428 @table @gcctabopt
1429 @item -Weffc++ (C++ only)
1430 Warn about violations of various style guidelines from Scott Meyers'
1431 @cite{Effective C++} books.  If you use this option, you should be aware
1432 that the standard library headers do not obey all of these guidelines;
1433 you can use @samp{grep -v} to filter out those warnings.
1435 @item -Wno-deprecated (C++ only)
1436 Do not warn about usage of deprecated features. @xref{Deprecated Features}.
1438 @item -Wno-non-template-friend (C++ only)
1439 Disable warnings when non-templatized friend functions are declared
1440 within a template. With the advent of explicit template specification
1441 support in g++, if the name of the friend is an unqualified-id (ie,
1442 @samp{friend foo(int)}), the C++ language specification demands that the
1443 friend declare or define an ordinary, nontemplate function. (Section
1444 14.5.3). Before g++ implemented explicit specification, unqualified-ids
1445 could be interpreted as a particular specialization of a templatized
1446 function. Because this non-conforming behavior is no longer the default
1447 behavior for g++, @samp{-Wnon-template-friend} allows the compiler to
1448 check existing code for potential trouble spots, and is on by default.
1449 This new compiler behavior can be turned off with
1450 @samp{-Wno-non-template-friend} which keeps the conformant compiler code
1451 but disables the helpful warning.
1453 @item -Wold-style-cast (C++ only)
1454 Warn if an old-style (C-style) cast is used within a C++ program.  The
1455 new-style casts (@samp{static_cast}, @samp{reinterpret_cast}, and
1456 @samp{const_cast}) are less vulnerable to unintended effects.
1458 @item -Woverloaded-virtual (C++ only)
1459 @cindex overloaded virtual fn, warning
1460 @cindex warning for overloaded virtual fn
1461 Warn when a derived class function declaration may be an error in
1462 defining a virtual function.  In a derived class, the
1463 definitions of virtual functions must match the type signature of a
1464 virtual function declared in the base class.  With this option, the
1465 compiler warns when you define a function with the same name as a
1466 virtual function, but with a type signature that does not match any
1467 declarations from the base class.
1469 @item -Wno-pmf-conversions (C++ only)
1470 Disable the diagnostic for converting a bound pointer to member function
1471 to a plain pointer.
1473 @item -Wsign-promo (C++ only)
1474 Warn when overload resolution chooses a promotion from unsigned or
1475 enumeral type to a signed type over a conversion to an unsigned type of
1476 the same size.  Previous versions of g++ would try to preserve
1477 unsignedness, but the standard mandates the current behavior.
1479 @item -Wsynth (C++ only)
1480 @cindex warning for synthesized methods
1481 @cindex synthesized methods, warning
1482 Warn when g++'s synthesis behavior does not match that of cfront.  For
1483 instance:
1485 @smallexample
1486 struct A @{
1487   operator int ();
1488   A& operator = (int);
1491 main ()
1493   A a,b;
1494   a = b;
1496 @end smallexample
1498 In this example, g++ will synthesize a default @samp{A& operator =
1499 (const A&);}, while cfront will use the user-defined @samp{operator =}.
1500 @end table
1502 @node Language Independent Options
1503 @section Options to Control Diagnostic Messages Formatting
1504 @cindex options to control diagnostics formatting
1505 @cindex diagnostic messages
1506 @cindex message formatting
1508 Traditionally, diagnostic messages have been formatted irrespective of
1509 the output device's aspect (e.g. its width, ...).  The options described
1510 below can be used to control the diagnostic messages formatting
1511 algorithm, e.g. how many characters per line, how often source location
1512 information should be reported.  Right now, only the C++ front-end can
1513 honor these options.  However it is expected, in the near future, that
1514 the remaining front-ends would be able to digest them correctly. 
1516 @table @gcctabopt
1517 @item -fmessage-length=@var{n}
1518 Try to format error messages so that they fit on lines of about @var{n}
1519 characters.  The default is 72 characters for g++ and 0 for the rest of
1520 the front-ends supported by GCC.  If @var{n} is zero, then no
1521 line-wrapping will be done; each error message will appear on a single 
1522 line.
1524 @item -fdiagnostics-show-location=once
1525 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
1526 reporter to emit @emph{once} source location information; that is, in
1527 case the message is too long to fit on a single physical line and has to
1528 be wrapped, the source location won't be emitted (as prefix) again,
1529 over and over, in subsequent continuation lines.  This is the default
1530 behaviour. 
1532 @item -fdiagnostics-show-location=every-line
1533 Only meaningful in line-wrapping mode.  Instructs the diagnostic
1534 messages reporter to emit the same source location information (as
1535 prefix) for physical lines that result from the process of breaking a
1536 a message which is too long to fit on a single line.
1538 @end table
1540 @node Warning Options
1541 @section Options to Request or Suppress Warnings
1542 @cindex options to control warnings
1543 @cindex warning messages
1544 @cindex messages, warning
1545 @cindex suppressing warnings
1547 Warnings are diagnostic messages that report constructions which
1548 are not inherently erroneous but which are risky or suggest there
1549 may have been an error.
1551 You can request many specific warnings with options beginning @samp{-W},
1552 for example @samp{-Wimplicit} to request warnings on implicit
1553 declarations.  Each of these specific warning options also has a
1554 negative form beginning @samp{-Wno-} to turn off warnings;
1555 for example, @samp{-Wno-implicit}.  This manual lists only one of the
1556 two forms, whichever is not the default.
1558 These options control the amount and kinds of warnings produced by GCC:
1560 @table @gcctabopt
1561 @cindex syntax checking
1562 @item -fsyntax-only
1563 Check the code for syntax errors, but don't do anything beyond that.
1565 @item -pedantic
1566 Issue all the warnings demanded by strict ISO C and ISO C++;
1567 reject all programs that use forbidden extensions, and some other
1568 programs that do not follow ISO C and ISO C++.  For ISO C, follows the
1569 version of the ISO C standard specified by any @samp{-std} option used.
1571 Valid ISO C and ISO C++ programs should compile properly with or without
1572 this option (though a rare few will require @option{-ansi} or a
1573 @option{-std} option specifying the required version of ISO C).  However,
1574 without this option, certain GNU extensions and traditional C and C++
1575 features are supported as well.  With this option, they are rejected.
1577 @samp{-pedantic} does not cause warning messages for use of the
1578 alternate keywords whose names begin and end with @samp{__}.  Pedantic
1579 warnings are also disabled in the expression that follows
1580 @code{__extension__}.  However, only system header files should use
1581 these escape routes; application programs should avoid them.
1582 @xref{Alternate Keywords}.
1584 Some users try to use @samp{-pedantic} to check programs for strict ISO
1585 C conformance.  They soon find that it does not do quite what they want:
1586 it finds some non-ISO practices, but not all---only those for which
1587 ISO C @emph{requires} a diagnostic, and some others for which
1588 diagnostics have been added.
1590 A feature to report any failure to conform to ISO C might be useful in
1591 some instances, but would require considerable additional work and would
1592 be quite different from @samp{-pedantic}.  We don't have plans to
1593 support such a feature in the near future.
1595 @item -pedantic-errors
1596 Like @samp{-pedantic}, except that errors are produced rather than
1597 warnings.
1599 @item -w
1600 Inhibit all warning messages.
1602 @item -Wno-import
1603 Inhibit warning messages about the use of @samp{#import}.
1605 @item -Wchar-subscripts
1606 Warn if an array subscript has type @code{char}.  This is a common cause
1607 of error, as programmers often forget that this type is signed on some
1608 machines.
1610 @item -Wcomment
1611 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
1612 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
1614 @item -Wformat
1615 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
1616 the arguments supplied have types appropriate to the format string
1617 specified, and that the conversions specified in the format string make
1618 sense.  This includes standard functions, and others specified by format
1619 attributes (@pxref{Function Attributes}), in the @code{printf},
1620 @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
1621 not in the C standard) families.
1623 The formats are checked against the format features supported by GNU
1624 libc version 2.2.  These include all ISO C89 and C99 features, as well
1625 as features from the Single Unix Specification and some BSD and GNU
1626 extensions.  Other library implementations may not support all these
1627 features; GCC does not support warning about features that go beyond a
1628 particular library's limitations.  However, if @samp{-pedantic} is used
1629 with @samp{-Wformat}, warnings will be given about format features not
1630 in the selected standard version (but not for @code{strfmon} formats,
1631 since those are not in any version of the C standard).  @xref{C Dialect
1632 Options,,Options Controlling C Dialect}.
1634 @samp{-Wformat} is included in @samp{-Wall}.  For more control over some
1635 aspects of format checking, the options @samp{-Wno-format-y2k},
1636 @samp{-Wno-format-extra-args}, @samp{-Wformat-nonliteral},
1637 @samp{-Wformat-security} and @samp{-Wformat=2} are available, but are
1638 not included in @samp{-Wall}.
1640 @item -Wno-format-y2k
1641 If @samp{-Wformat} is specified, do not warn about @code{strftime}
1642 formats which may yield only a two-digit year.
1644 @item -Wno-format-extra-args
1645 If @samp{-Wformat} is specified, do not warn about excess arguments to a
1646 @code{printf} or @code{scanf} format function.  The C standard specifies
1647 that such arguments are ignored.
1649 @item -Wformat-nonliteral
1650 If @samp{-Wformat} is specified, also warn if the format string is not a
1651 string literal and so cannot be checked, unless the format function
1652 takes its format arguments as a @code{va_list}.
1654 @item -Wformat-security
1655 If @samp{-Wformat} is specified, also warn about uses of format
1656 functions that represent possible security problems.  At present, this
1657 warns about calls to @code{printf} and @code{scanf} functions where the
1658 format string is not a string literal and there are no format arguments,
1659 as in @code{printf (foo);}.  This may be a security hole if the format
1660 string came from untrusted input and contains @samp{%n}.  (This is
1661 currently a subset of what @samp{-Wformat-nonliteral} warns about, but
1662 in future warnings may be added to @samp{-Wformat-security} that are not
1663 included in @samp{-Wformat-nonliteral}.)
1665 @item -Wformat=2
1666 Enable @samp{-Wformat} plus format checks not included in
1667 @samp{-Wformat}.  Currently equivalent to @samp{-Wformat
1668 -Wformat-nonliteral -Wformat-security}.
1670 @item -Wimplicit-int
1671 Warn when a declaration does not specify a type.
1673 @item -Wimplicit-function-declaration
1674 @itemx -Werror-implicit-function-declaration
1675 Give a warning (or error) whenever a function is used before being
1676 declared.
1678 @item -Wimplicit
1679 Same as @samp{-Wimplicit-int} and @samp{-Wimplicit-function-}@*
1680 @samp{declaration}.
1682 @item -Wmain
1683 Warn if the type of @samp{main} is suspicious.  @samp{main} should be a
1684 function with external linkage, returning int, taking either zero
1685 arguments, two, or three arguments of appropriate types.
1687 @item -Wmultichar
1688 Warn if a multicharacter constant (@samp{'FOOF'}) is used.  Usually they
1689 indicate a typo in the user's code, as they have implementation-defined
1690 values, and should not be used in portable code.
1692 @item -Wparentheses
1693 Warn if parentheses are omitted in certain contexts, such
1694 as when there is an assignment in a context where a truth value
1695 is expected, or when operators are nested whose precedence people
1696 often get confused about.
1698 Also warn about constructions where there may be confusion to which
1699 @code{if} statement an @code{else} branch belongs.  Here is an example of
1700 such a case:
1702 @smallexample
1704   if (a)
1705     if (b)
1706       foo ();
1707   else
1708     bar ();
1710 @end smallexample
1712 In C, every @code{else} branch belongs to the innermost possible @code{if}
1713 statement, which in this example is @code{if (b)}.  This is often not
1714 what the programmer expected, as illustrated in the above example by
1715 indentation the programmer chose.  When there is the potential for this
1716 confusion, GNU C will issue a warning when this flag is specified.
1717 To eliminate the warning, add explicit braces around the innermost
1718 @code{if} statement so there is no way the @code{else} could belong to
1719 the enclosing @code{if}.  The resulting code would look like this:
1721 @smallexample
1723   if (a)
1724     @{
1725       if (b)
1726         foo ();
1727       else
1728         bar ();
1729     @}
1731 @end smallexample
1733 @item -Wsequence-point
1734 Warn about code that may have undefined semantics because of violations
1735 of sequence point rules in the C standard.
1737 The C standard defines the order in which expressions in a C program are
1738 evaluated in terms of @dfn{sequence points}, which represent a partial
1739 ordering between the execution of parts of the program: those executed
1740 before the sequence point, and those executed after it.  These occur
1741 after the evaluation of a full expression (one which is not part of a
1742 larger expression), after the evaluation of the first operand of a
1743 @code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
1744 function is called (but after the evaluation of its arguments and the
1745 expression denoting the called function), and in certain other places.
1746 Other than as expressed by the sequence point rules, the order of
1747 evaluation of subexpressions of an expression is not specified.  All
1748 these rules describe only a partial order rather than a total order,
1749 since, for example, if two functions are called within one expression
1750 with no sequence point between them, the order in which the functions
1751 are called is not specified.  However, the standards committee have
1752 ruled that function calls do not overlap.
1754 It is not specified when between sequence points modifications to the
1755 values of objects take effect.  Programs whose behavior depends on this
1756 have undefined behavior; the C standard specifies that ``Between the
1757 previous and next sequence point an object shall have its stored value
1758 modified at most once by the evaluation of an expression.  Furthermore,
1759 the prior value shall be read only to determine the value to be
1760 stored.''.  If a program breaks these rules, the results on any
1761 particular implementation are entirely unpredictable.
1763 Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
1764 = b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
1765 diagnosed by this option, and it may give an occasional false positive
1766 result, but in general it has been found fairly effective at detecting
1767 this sort of problem in programs.
1769 The present implementation of this option only works for C programs.  A
1770 future implementation may also work for C++ programs.
1772 There is some controversy over the precise meaning of the sequence point
1773 rules in subtle cases.  Alternative formal definitions may be found in
1774 Clive Feather's ``Annex S''
1775 @w{@uref{http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n925.htm}} and in
1776 Michael Norrish's thesis
1777 @w{@uref{http://www.cl.cam.ac.uk/users/mn200/PhD/thesis-report.ps.gz}}.
1778 Other discussions are by Raymond Mak
1779 @w{@uref{http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n926.htm}} and
1780 D. Hugh Redelmeier
1781 @w{@uref{http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n927.htm}}.
1783 @item -Wreturn-type
1784 Warn whenever a function is defined with a return-type that defaults to
1785 @code{int}.  Also warn about any @code{return} statement with no
1786 return-value in a function whose return-type is not @code{void}. 
1788 For C++, a function without return type always produces a diagnostic
1789 message, even when @samp{-Wno-return-type} is specified. The only
1790 exceptions are @samp{main} and functions defined in system headers.
1792 @item -Wswitch
1793 Warn whenever a @code{switch} statement has an index of enumeral type
1794 and lacks a @code{case} for one or more of the named codes of that
1795 enumeration.  (The presence of a @code{default} label prevents this
1796 warning.)  @code{case} labels outside the enumeration range also
1797 provoke warnings when this option is used.
1799 @item -Wtrigraphs
1800 Warn if any trigraphs are encountered that might change the meaning of
1801 the program (trigraphs within comments are not warned about).
1803 @item -Wunused-function
1804 Warn whenever a static function is declared but not defined or a
1805 non\-inline static function is unused.
1807 @item -Wunused-label
1808 Warn whenever a label is declared but not used.
1810 To suppress this warning use the @samp{unused} attribute
1811 (@pxref{Variable Attributes}).
1813 @item -Wunused-parameter
1814 Warn whenever a function parameter is unused aside from its declaration.
1816 To suppress this warning use the @samp{unused} attribute
1817 (@pxref{Variable Attributes}).
1819 @item -Wunused-variable
1820 Warn whenever a local variable or non-constant static variable is unused
1821 aside from its declaration
1823 To suppress this warning use the @samp{unused} attribute
1824 (@pxref{Variable Attributes}).
1826 @item -Wunused-value
1827 Warn whenever a statement computes a result that is explicitly not used.
1829 To suppress this warning cast the expression to @samp{void}.
1831 @item -Wunused
1832 All all the above @samp{-Wunused} options combined.
1834 In order to get a warning about an unused function parameter, you must
1835 either specify @samp{-W -Wunused} or separately specify
1836 @samp{-Wunused-parameter}.
1838 @item -Wuninitialized
1839 Warn if an automatic variable is used without first being initialized or
1840 if a variable may be clobbered by a @code{setjmp} call.
1842 These warnings are possible only in optimizing compilation,
1843 because they require data flow information that is computed only
1844 when optimizing.  If you don't specify @samp{-O}, you simply won't
1845 get these warnings.
1847 These warnings occur only for variables that are candidates for
1848 register allocation.  Therefore, they do not occur for a variable that
1849 is declared @code{volatile}, or whose address is taken, or whose size
1850 is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
1851 structures, unions or arrays, even when they are in registers.
1853 Note that there may be no warning about a variable that is used only
1854 to compute a value that itself is never used, because such
1855 computations may be deleted by data flow analysis before the warnings
1856 are printed.
1858 These warnings are made optional because GCC is not smart
1859 enough to see all the reasons why the code might be correct
1860 despite appearing to have an error.  Here is one example of how
1861 this can happen:
1863 @smallexample
1865   int x;
1866   switch (y)
1867     @{
1868     case 1: x = 1;
1869       break;
1870     case 2: x = 4;
1871       break;
1872     case 3: x = 5;
1873     @}
1874   foo (x);
1876 @end smallexample
1878 @noindent
1879 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
1880 always initialized, but GCC doesn't know this.  Here is
1881 another common case:
1883 @smallexample
1885   int save_y;
1886   if (change_y) save_y = y, y = new_y;
1887   @dots{}
1888   if (change_y) y = save_y;
1890 @end smallexample
1892 @noindent
1893 This has no bug because @code{save_y} is used only if it is set.
1895 @cindex @code{longjmp} warnings
1896 This option also warns when a non-volatile automatic variable might be
1897 changed by a call to @code{longjmp}.  These warnings as well are possible
1898 only in optimizing compilation.
1900 The compiler sees only the calls to @code{setjmp}.  It cannot know
1901 where @code{longjmp} will be called; in fact, a signal handler could
1902 call it at any point in the code.  As a result, you may get a warning
1903 even when there is in fact no problem because @code{longjmp} cannot
1904 in fact be called at the place which would cause a problem.
1906 Some spurious warnings can be avoided if you declare all the functions
1907 you use that never return as @code{noreturn}.  @xref{Function
1908 Attributes}.
1910 @item -Wreorder (C++ only)
1911 @cindex reordering, warning
1912 @cindex warning for reordering of member initializers
1913 Warn when the order of member initializers given in the code does not
1914 match the order in which they must be executed.  For instance:
1916 @item -Wunknown-pragmas
1917 @cindex warning for unknown pragmas
1918 @cindex unknown pragmas, warning
1919 @cindex pragmas, warning of unknown
1920 Warn when a #pragma directive is encountered which is not understood by
1921 GCC.  If this command line option is used, warnings will even be issued
1922 for unknown pragmas in system header files.  This is not the case if
1923 the warnings were only enabled by the @samp{-Wall} command line option.
1925 @item -Wall
1926 All of the above @samp{-W} options combined.  This enables all the
1927 warnings about constructions that some users consider questionable, and
1928 that are easy to avoid (or modify to prevent the warning), even in
1929 conjunction with macros.
1931 @item -Wsystem-headers
1932 @cindex warnings from system headers
1933 @cindex system headers, warnings from
1934 Print warning messages for constructs found in system header files.
1935 Warnings from system headers are normally suppressed, on the assumption
1936 that they usually do not indicate real problems and would only make the
1937 compiler output harder to read.  Using this command line option tells
1938 GCC to emit warnings from system headers as if they occurred in user
1939 code.  However, note that using @samp{-Wall} in conjunction with this
1940 option will @emph{not} warn about unknown pragmas in system
1941 headers---for that, @samp{-Wunknown-pragmas} must also be used.
1942 @end table
1944 The following @samp{-W@dots{}} options are not implied by @samp{-Wall}.
1945 Some of them warn about constructions that users generally do not
1946 consider questionable, but which occasionally you might wish to check
1947 for; others warn about constructions that are necessary or hard to avoid
1948 in some cases, and there is no simple way to modify the code to suppress
1949 the warning.
1951 @table @gcctabopt
1952 @item -W
1953 Print extra warning messages for these events:
1955 @itemize @bullet
1956 @item
1957 A function can return either with or without a value.  (Falling
1958 off the end of the function body is considered returning without
1959 a value.)  For example, this function would evoke such a
1960 warning:
1962 @smallexample
1963 @group
1964 foo (a)
1966   if (a > 0)
1967     return a;
1969 @end group
1970 @end smallexample
1972 @item
1973 An expression-statement or the left-hand side of a comma expression
1974 contains no side effects.
1975 To suppress the warning, cast the unused expression to void.
1976 For example, an expression such as @samp{x[i,j]} will cause a warning,
1977 but @samp{x[(void)i,j]} will not.
1979 @item
1980 An unsigned value is compared against zero with @samp{<} or @samp{<=}.
1982 @item
1983 A comparison like @samp{x<=y<=z} appears; this is equivalent to
1984 @samp{(x<=y ? 1 : 0) <= z}, which is a different interpretation from
1985 that of ordinary mathematical notation.
1987 @item
1988 Storage-class specifiers like @code{static} are not the first things in
1989 a declaration.  According to the C Standard, this usage is obsolescent.
1991 @item
1992 The return type of a function has a type qualifier such as @code{const}.
1993 Such a type qualifier has no effect, since the value returned by a
1994 function is not an lvalue.  (But don't warn about the GNU extension of
1995 @code{volatile void} return types.  That extension will be warned about
1996 if @samp{-pedantic} is specified.)
1998 @item
1999 If @samp{-Wall} or @samp{-Wunused} is also specified, warn about unused
2000 arguments.
2002 @item
2003 A comparison between signed and unsigned values could produce an
2004 incorrect result when the signed value is converted to unsigned.
2005 (But don't warn if @samp{-Wno-sign-compare} is also specified.)
2007 @item
2008 An aggregate has a partly bracketed initializer.
2009 For example, the following code would evoke such a warning,
2010 because braces are missing around the initializer for @code{x.h}:
2012 @smallexample
2013 struct s @{ int f, g; @};
2014 struct t @{ struct s h; int i; @};
2015 struct t x = @{ 1, 2, 3 @};
2016 @end smallexample
2018 @item
2019 An aggregate has an initializer which does not initialize all members.
2020 For example, the following code would cause such a warning, because
2021 @code{x.h} would be implicitly initialized to zero:
2023 @smallexample
2024 struct s @{ int f, g, h; @};
2025 struct s x = @{ 3, 4 @};
2026 @end smallexample
2027 @end itemize
2029 @item -Wfloat-equal
2030 Warn if floating point values are used in equality comparisons.
2032 The idea behind this is that sometimes it is convenient (for the
2033 programmer) to consider floating-point values as approximations to
2034 infinitely precise real numbers.  If you are doing this, then you need
2035 to compute (by analysing the code, or in some other way) the maximum or
2036 likely maximum error that the computation introduces, and allow for it
2037 when performing comparisons (and when producing output, but that's a
2038 different problem).  In particular, instead of testing for equality, you
2039 would check to see whether the two values have ranges that overlap; and
2040 this is done with the relational operators, so equality comparisons are
2041 probably mistaken.
2043 @item -Wtraditional (C only)
2044 Warn about certain constructs that behave differently in traditional and
2045 ISO C.
2047 @itemize @bullet
2048 @item
2049 Macro arguments occurring within string constants in the macro body.
2050 These would substitute the argument in traditional C, but are part of
2051 the constant in ISO C.
2053 @item
2054 A function declared external in one block and then used after the end of
2055 the block.
2057 @item
2058 A @code{switch} statement has an operand of type @code{long}.
2060 @item
2061 A non-@code{static} function declaration follows a @code{static} one.
2062 This construct is not accepted by some traditional C compilers.
2064 @item
2065 The ISO type of an integer constant has a different width or
2066 signedness from its traditional type.  This warning is only issued if
2067 the base of the constant is ten.  I.e. hexadecimal or octal values, which
2068 typically represent bit patterns, are not warned about.
2070 @item
2071 Usage of ISO string concatenation is detected.
2073 @item
2074 A function macro appears without arguments.
2076 @item
2077 The unary plus operator.
2079 @item
2080 Initialization of automatic aggregates.
2082 @item
2083 Identifier conflicts with labels.  Traditional C lacks a separate
2084 namespace for labels.
2086 @item
2087 Initialization of unions.  If the initializer is zero, the warning is
2088 omitted.  This is done under the assumption that the zero initializer in
2089 user code appears conditioned on e.g. @code{__STDC__} to avoid missing
2090 initializer warnings and relies on default initialization to zero in the
2091 traditional C case.
2093 @item
2094 The `U' integer constant suffix, or the `F' or `L' floating point
2095 constant suffixes.  (Traditonal C does support the `L' suffix on integer
2096 constants.)  Note, these suffixes appear in macros defined in the system
2097 headers of most modern systems, e.g. the _MIN/_MAX macros in limits.h.
2098 Use of these macros can lead to spurious warnings as they do not
2099 necessarily reflect whether the code in question is any less portable to
2100 traditional C given that suitable backup definitions are provided.
2101 @end itemize
2103 @item -Wundef
2104 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
2106 @item -Wshadow
2107 Warn whenever a local variable shadows another local variable.
2109 @item -Wid-clash-@var{len}
2110 Warn whenever two distinct identifiers match in the first @var{len}
2111 characters.  This may help you prepare a program that will compile
2112 with certain obsolete, brain-damaged compilers.
2114 @item -Wlarger-than-@var{len}
2115 Warn whenever an object of larger than @var{len} bytes is defined.
2117 @item -Wpointer-arith
2118 Warn about anything that depends on the ``size of'' a function type or
2119 of @code{void}.  GNU C assigns these types a size of 1, for
2120 convenience in calculations with @code{void *} pointers and pointers
2121 to functions.
2123 @item -Wbad-function-cast (C only)
2124 Warn whenever a function call is cast to a non-matching type.
2125 For example, warn if @code{int malloc()} is cast to @code{anything *}.
2127 @item -Wcast-qual
2128 Warn whenever a pointer is cast so as to remove a type qualifier from
2129 the target type.  For example, warn if a @code{const char *} is cast
2130 to an ordinary @code{char *}.
2132 @item -Wcast-align
2133 Warn whenever a pointer is cast such that the required alignment of the
2134 target is increased.  For example, warn if a @code{char *} is cast to
2135 an @code{int *} on machines where integers can only be accessed at
2136 two- or four-byte boundaries.
2138 @item -Wwrite-strings
2139 Give string constants the type @code{const char[@var{length}]} so that
2140 copying the address of one into a non-@code{const} @code{char *}
2141 pointer will get a warning.  These warnings will help you find at
2142 compile time code that can try to write into a string constant, but
2143 only if you have been very careful about using @code{const} in
2144 declarations and prototypes.  Otherwise, it will just be a nuisance;
2145 this is why we did not make @samp{-Wall} request these warnings.
2147 @item -Wconversion
2148 Warn if a prototype causes a type conversion that is different from what
2149 would happen to the same argument in the absence of a prototype.  This
2150 includes conversions of fixed point to floating and vice versa, and
2151 conversions changing the width or signedness of a fixed point argument
2152 except when the same as the default promotion.
2154 Also, warn if a negative integer constant expression is implicitly
2155 converted to an unsigned type.  For example, warn about the assignment
2156 @code{x = -1} if @code{x} is unsigned.  But do not warn about explicit
2157 casts like @code{(unsigned) -1}.
2159 @item -Wsign-compare
2160 @cindex warning for comparison of signed and unsigned values
2161 @cindex comparison of signed and unsigned values, warning
2162 @cindex signed and unsigned values, comparison warning
2163 Warn when a comparison between signed and unsigned values could produce
2164 an incorrect result when the signed value is converted to unsigned.
2165 This warning is also enabled by @samp{-W}; to get the other warnings
2166 of @samp{-W} without this warning, use @samp{-W -Wno-sign-compare}.
2168 @item -Waggregate-return
2169 Warn if any functions that return structures or unions are defined or
2170 called.  (In languages where you can return an array, this also elicits
2171 a warning.)
2173 @item -Wstrict-prototypes (C only)
2174 Warn if a function is declared or defined without specifying the
2175 argument types.  (An old-style function definition is permitted without
2176 a warning if preceded by a declaration which specifies the argument
2177 types.)
2179 @item -Wmissing-prototypes (C only)
2180 Warn if a global function is defined without a previous prototype
2181 declaration.  This warning is issued even if the definition itself
2182 provides a prototype.  The aim is to detect global functions that fail
2183 to be declared in header files.
2185 @item -Wmissing-declarations
2186 Warn if a global function is defined without a previous declaration.
2187 Do so even if the definition itself provides a prototype.
2188 Use this option to detect global functions that are not declared in
2189 header files.
2191 @item -Wmissing-noreturn
2192 Warn about functions which might be candidates for attribute @code{noreturn}.
2193 Note these are only possible candidates, not absolute ones.  Care should
2194 be taken to manually verify functions actually do not ever return before
2195 adding the @code{noreturn} attribute, otherwise subtle code generation
2196 bugs could be introduced.  You will not get a warning for @code{main} in
2197 hosted C environments.
2199 @item -Wmissing-format-attribute
2200 If @samp{-Wformat} is enabled, also warn about functions which might be
2201 candidates for @code{format} attributes.  Note these are only possible
2202 candidates, not absolute ones.  GCC will guess that @code{format}
2203 attributes might be appropriate for any function that calls a function
2204 like @code{vprintf} or @code{vscanf}, but this might not always be the
2205 case, and some functions for which @code{format} attributes are
2206 appropriate may not be detected.  This option has no effect unless
2207 @samp{-Wformat} is enabled (possibly by @samp{-Wall}).
2209 @item -Wpacked
2210 Warn if a structure is given the packed attribute, but the packed
2211 attribute has no effect on the layout or size of the structure.  
2212 Such structures may be mis-aligned for little benefit.  For
2213 instance, in this code, the variable @code{f.x} in @code{struct bar}
2214 will be misaligned even though @code{struct bar} does not itself
2215 have the packed attribute:
2217 @smallexample
2218 @group
2219 struct foo @{
2220   int x;
2221   char a, b, c, d;
2222 @} __attribute__((packed));
2223 struct bar @{
2224   char z;
2225   struct foo f;
2227 @end group
2228 @end smallexample
2230 @item -Wpadded
2231 Warn if padding is included in a structure, either to align an element
2232 of the structure or to align the whole structure.  Sometimes when this
2233 happens it is possible to rearrange the fields of the structure to
2234 reduce the padding and so make the structure smaller.
2236 @item -Wredundant-decls
2237 Warn if anything is declared more than once in the same scope, even in
2238 cases where multiple declaration is valid and changes nothing.
2240 @item -Wnested-externs (C only)
2241 Warn if an @code{extern} declaration is encountered within a function.
2243 @item -Wunreachable-code
2244 Warn if the compiler detects that code will never be executed.
2246 This option is intended to warn when the compiler detects that at
2247 least a whole line of source code will never be executed, because
2248 some condition is never satisfied or because it is after a
2249 procedure that never returns.
2251 It is possible for this option to produce a warning even though there
2252 are circumstances under which part of the affected line can be executed,
2253 so care should be taken when removing apparently-unreachable code.
2255 For instance, when a function is inlined, a warning may mean that the
2256 line is unreachable in only one inlined copy of the function.  
2258 This option is not made part of @samp{-Wall} because in a debugging
2259 version of a program there is often substantial code which checks
2260 correct functioning of the program and is, hopefully, unreachable
2261 because the program does work.  Another common use of unreachable
2262 code is to provide behaviour which is selectable at compile-time.
2264 @item -Winline
2265 Warn if a function can not be inlined and it was declared as inline.
2267 @item -Wlong-long
2268 Warn if @samp{long long} type is used.  This is default.  To inhibit
2269 the warning messages, use @samp{-Wno-long-long}.  Flags
2270 @samp{-Wlong-long} and @samp{-Wno-long-long} are taken into account
2271 only when @samp{-pedantic} flag is used.
2273 @item -Wdisabled-optimization
2274 Warn if a requested optimization pass is disabled.  This warning does
2275 not generally indicate that there is anything wrong with your code; it
2276 merely indicates that GCC's optimizers were unable to handle the code
2277 effectively.  Often, the problem is that your code is too big or too
2278 complex; GCC will refuse to optimize programs when the optimization
2279 itself is likely to take inordinate amounts of time.
2281 @item -Werror
2282 Make all warnings into errors.
2283 @end table
2285 @node Debugging Options
2286 @section Options for Debugging Your Program or GCC
2287 @cindex options, debugging
2288 @cindex debugging information options
2290 GCC has various special options that are used for debugging
2291 either your program or GCC:
2293 @table @gcctabopt
2294 @item -g
2295 Produce debugging information in the operating system's native format
2296 (stabs, COFF, XCOFF, or DWARF).  GDB can work with this debugging
2297 information.
2299 On most systems that use stabs format, @samp{-g} enables use of extra
2300 debugging information that only GDB can use; this extra information
2301 makes debugging work better in GDB but will probably make other debuggers
2302 crash or
2303 refuse to read the program.  If you want to control for certain whether
2304 to generate the extra information, use @samp{-gstabs+}, @samp{-gstabs},
2305 @samp{-gxcoff+}, @samp{-gxcoff}, @samp{-gdwarf-1+}, or @samp{-gdwarf-1}
2306 (see below).
2308 Unlike most other C compilers, GCC allows you to use @samp{-g} with
2309 @samp{-O}.  The shortcuts taken by optimized code may occasionally
2310 produce surprising results: some variables you declared may not exist
2311 at all; flow of control may briefly move where you did not expect it;
2312 some statements may not be executed because they compute constant
2313 results or their values were already at hand; some statements may
2314 execute in different places because they were moved out of loops.
2316 Nevertheless it proves possible to debug optimized output.  This makes
2317 it reasonable to use the optimizer for programs that might have bugs.
2319 The following options are useful when GCC is generated with the
2320 capability for more than one debugging format.
2322 @item -ggdb
2323 Produce debugging information for use by GDB.  This means to use the
2324 most expressive format available (DWARF 2, stabs, or the native format
2325 if neither of those are supported), including GDB extensions if at all
2326 possible.
2328 @item -gstabs
2329 Produce debugging information in stabs format (if that is supported),
2330 without GDB extensions.  This is the format used by DBX on most BSD
2331 systems.  On MIPS, Alpha and System V Release 4 systems this option
2332 produces stabs debugging output which is not understood by DBX or SDB.
2333 On System V Release 4 systems this option requires the GNU assembler.
2335 @item -gstabs+
2336 Produce debugging information in stabs format (if that is supported),
2337 using GNU extensions understood only by the GNU debugger (GDB).  The
2338 use of these extensions is likely to make other debuggers crash or
2339 refuse to read the program.
2341 @item -gcoff
2342 Produce debugging information in COFF format (if that is supported).
2343 This is the format used by SDB on most System V systems prior to
2344 System V Release 4.
2346 @item -gxcoff
2347 Produce debugging information in XCOFF format (if that is supported).
2348 This is the format used by the DBX debugger on IBM RS/6000 systems.
2350 @item -gxcoff+
2351 Produce debugging information in XCOFF format (if that is supported),
2352 using GNU extensions understood only by the GNU debugger (GDB).  The
2353 use of these extensions is likely to make other debuggers crash or
2354 refuse to read the program, and may cause assemblers other than the GNU
2355 assembler (GAS) to fail with an error.
2357 @item -gdwarf
2358 Produce debugging information in DWARF version 1 format (if that is
2359 supported).  This is the format used by SDB on most System V Release 4
2360 systems.
2362 @item -gdwarf+
2363 Produce debugging information in DWARF version 1 format (if that is
2364 supported), using GNU extensions understood only by the GNU debugger
2365 (GDB).  The use of these extensions is likely to make other debuggers
2366 crash or refuse to read the program.
2368 @item -gdwarf-2
2369 Produce debugging information in DWARF version 2 format (if that is
2370 supported).  This is the format used by DBX on IRIX 6.
2372 @item -g@var{level}
2373 @itemx -ggdb@var{level}
2374 @itemx -gstabs@var{level}
2375 @itemx -gcoff@var{level}
2376 @itemx -gxcoff@var{level}
2377 @itemx -gdwarf@var{level}
2378 @itemx -gdwarf-2@var{level}
2379 Request debugging information and also use @var{level} to specify how
2380 much information.  The default level is 2.
2382 Level 1 produces minimal information, enough for making backtraces in
2383 parts of the program that you don't plan to debug.  This includes
2384 descriptions of functions and external variables, but no information
2385 about local variables and no line numbers.
2387 Level 3 includes extra information, such as all the macro definitions
2388 present in the program.  Some debuggers support macro expansion when
2389 you use @samp{-g3}.
2391 @cindex @code{prof}
2392 @item -p
2393 Generate extra code to write profile information suitable for the
2394 analysis program @code{prof}.  You must use this option when compiling
2395 the source files you want data about, and you must also use it when
2396 linking.
2398 @cindex @code{gprof}
2399 @item -pg
2400 Generate extra code to write profile information suitable for the
2401 analysis program @code{gprof}.  You must use this option when compiling
2402 the source files you want data about, and you must also use it when
2403 linking.
2405 @cindex @code{tcov}
2406 @item -a
2407 Generate extra code to write profile information for basic blocks, which will
2408 record the number of times each basic block is executed, the basic block start
2409 address, and the function name containing the basic block.  If @samp{-g} is
2410 used, the line number and filename of the start of the basic block will also be
2411 recorded.  If not overridden by the machine description, the default action is
2412 to append to the text file @file{bb.out}.
2414 This data could be analyzed by a program like @code{tcov}.  Note,
2415 however, that the format of the data is not what @code{tcov} expects.
2416 Eventually GNU @code{gprof} should be extended to process this data.
2418 @item -Q
2419 Makes the compiler print out each function name as it is compiled, and
2420 print some statistics about each pass when it finishes.
2422 @item -ax
2423 Generate extra code to profile basic blocks.  Your executable will
2424 produce output that is a superset of that produced when @samp{-a} is
2425 used.  Additional output is the source and target address of the basic
2426 blocks where a jump takes place, the number of times a jump is executed,
2427 and (optionally) the complete sequence of basic blocks being executed.
2428 The output is appended to file @file{bb.out}.
2430 You can examine different profiling aspects without recompilation.  Your
2431 executable will read a list of function names from file @file{bb.in}.
2432 Profiling starts when a function on the list is entered and stops when
2433 that invocation is exited.  To exclude a function from profiling, prefix
2434 its name with `-'.  If a function name is not unique, you can
2435 disambiguate it by writing it in the form
2436 @samp{/path/filename.d:functionname}.  Your executable will write the
2437 available paths and filenames in file @file{bb.out}.
2439 Several function names have a special meaning:
2440 @table @code
2441 @item __bb_jumps__
2442 Write source, target and frequency of jumps to file @file{bb.out}.
2443 @item __bb_hidecall__
2444 Exclude function calls from frequency count.
2445 @item __bb_showret__
2446 Include function returns in frequency count.
2447 @item __bb_trace__
2448 Write the sequence of basic blocks executed to file @file{bbtrace.gz}.
2449 The file will be compressed using the program @samp{gzip}, which must
2450 exist in your @env{PATH}.  On systems without the @samp{popen}
2451 function, the file will be named @file{bbtrace} and will not be
2452 compressed.  @strong{Profiling for even a few seconds on these systems
2453 will produce a very large file.}  Note: @code{__bb_hidecall__} and
2454 @code{__bb_showret__} will not affect the sequence written to
2455 @file{bbtrace.gz}.
2456 @end table
2458 Here's a short example using different profiling parameters
2459 in file @file{bb.in}.  Assume function @code{foo} consists of basic blocks
2460 1 and 2 and is called twice from block 3 of function @code{main}.  After
2461 the calls, block 3 transfers control to block 4 of @code{main}.
2463 With @code{__bb_trace__} and @code{main} contained in file @file{bb.in},
2464 the following sequence of blocks is written to file @file{bbtrace.gz}:
2465 0 3 1 2 1 2 4.  The return from block 2 to block 3 is not shown, because
2466 the return is to a point inside the block and not to the top.  The
2467 block address 0 always indicates, that control is transferred
2468 to the trace from somewhere outside the observed functions.  With
2469 @samp{-foo} added to @file{bb.in}, the blocks of function
2470 @code{foo} are removed from the trace, so only 0 3 4 remains.
2472 With @code{__bb_jumps__} and @code{main} contained in file @file{bb.in},
2473 jump frequencies will be written to file @file{bb.out}.  The
2474 frequencies are obtained by constructing a trace of blocks
2475 and incrementing a counter for every neighbouring pair of blocks
2476 in the trace.  The trace 0 3 1 2 1 2 4 displays the following
2477 frequencies:
2479 @example
2480 Jump from block 0x0 to block 0x3 executed 1 time(s)
2481 Jump from block 0x3 to block 0x1 executed 1 time(s)
2482 Jump from block 0x1 to block 0x2 executed 2 time(s)
2483 Jump from block 0x2 to block 0x1 executed 1 time(s)
2484 Jump from block 0x2 to block 0x4 executed 1 time(s)
2485 @end example
2487 With @code{__bb_hidecall__}, control transfer due to call instructions
2488 is removed from the trace, that is the trace is cut into three parts: 0
2489 3 4, 0 1 2 and 0 1 2.  With @code{__bb_showret__}, control transfer due
2490 to return instructions is added to the trace.  The trace becomes: 0 3 1
2491 2 3 1 2 3 4.  Note, that this trace is not the same, as the sequence
2492 written to @file{bbtrace.gz}.  It is solely used for counting jump
2493 frequencies.
2495 @item -fprofile-arcs
2496 Instrument @dfn{arcs} during compilation.  For each function of your
2497 program, GCC creates a program flow graph, then finds a spanning tree
2498 for the graph.  Only arcs that are not on the spanning tree have to be
2499 instrumented: the compiler adds code to count the number of times that these
2500 arcs are executed.  When an arc is the only exit or only entrance to a
2501 block, the instrumentation code can be added to the block; otherwise, a
2502 new basic block must be created to hold the instrumentation code.
2504 Since not every arc in the program must be instrumented, programs
2505 compiled with this option run faster than programs compiled with
2506 @samp{-a}, which adds instrumentation code to every basic block in the
2507 program.  The tradeoff: since @code{gcov} does not have
2508 execution counts for all branches, it must start with the execution
2509 counts for the instrumented branches, and then iterate over the program
2510 flow graph until the entire graph has been solved.  Hence, @code{gcov}
2511 runs a little more slowly than a program which uses information from
2512 @samp{-a}.
2514 @samp{-fprofile-arcs} also makes it possible to estimate branch
2515 probabilities, and to calculate basic block execution counts.  In
2516 general, basic block execution counts do not give enough information to
2517 estimate all branch probabilities.  When the compiled program exits, it
2518 saves the arc execution counts to a file called
2519 @file{@var{sourcename}.da}.  Use the compiler option
2520 @samp{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
2521 Control Optimization}) when recompiling, to optimize using estimated
2522 branch probabilities.
2524 @need 2000
2525 @item -ftest-coverage
2526 Create data files for the @code{gcov} code-coverage utility
2527 (@pxref{Gcov,, @code{gcov}: a GCC Test Coverage Program}).
2528 The data file names begin with the name of your source file:
2530 @table @gcctabopt
2531 @item @var{sourcename}.bb
2532 A mapping from basic blocks to line numbers, which @code{gcov} uses to
2533 associate basic block execution counts with line numbers.
2535 @item @var{sourcename}.bbg
2536 A list of all arcs in the program flow graph.  This allows @code{gcov}
2537 to reconstruct the program flow graph, so that it can compute all basic
2538 block and arc execution counts from the information in the
2539 @code{@var{sourcename}.da} file (this last file is the output from
2540 @samp{-fprofile-arcs}).
2541 @end table
2543 @item -d@var{letters}
2544 Says to make debugging dumps during compilation at times specified by
2545 @var{letters}.  This is used for debugging the compiler.  The file names
2546 for most of the dumps are made by appending a pass number and a word to
2547 the source file name (e.g.  @file{foo.c.00.rtl} or @file{foo.c.01.sibling}). 
2548 Here are the possible letters for use in @var{letters}, and their meanings:
2550 @table @samp
2551 @item A
2552 Annotate the assembler output with miscellaneous debugging information.
2553 @item b
2554 Dump after computing branch probabilities, to @file{@var{file}.11.bp}.
2555 @item B
2556 Dump after block reordering, to @file{@var{file}.26.bbro}.
2557 @item c
2558 Dump after instruction combination, to the file @file{@var{file}.14.combine}.
2559 @item C
2560 Dump after the first if conversion, to the file @file{@var{file}.15.ce}.
2561 @item d
2562 Dump after delayed branch scheduling, to @file{@var{file}.29.dbr}.
2563 @item D
2564 Dump all macro definitions, at the end of preprocessing, in addition to
2565 normal output.
2566 @item e
2567 Dump after SSA optimizations, to @file{@var{file}.05.ssa} and
2568 @file{@var{file}.06.ussa}.
2569 @item E
2570 Dump after the second if conversion, to @file{@var{file}.24.ce2}.
2571 @item f
2572 Dump after life analysis, to @file{@var{file}.13.life}.
2573 @item F
2574 Dump after purging @code{ADDRESSOF} codes, to @file{@var{file}.04.addressof}.
2575 @item g
2576 Dump after global register allocation, to @file{@var{file}.19.greg}.
2577 @item o
2578 Dump after post-reload CSE and other optimizations, to @file{@var{file}.20.postreload}.
2579 @item G      
2580 Dump after GCSE, to @file{@var{file}.08.gcse}.
2581 @item i
2582 Dump after sibling call optimizations, to @file{@var{file}.01.sibling}.
2583 @item j
2584 Dump after the first jump optimization, to @file{@var{file}.02.jump}.
2585 @item J
2586 Dump after the last jump optimization, to @file{@var{file}.27.jump2}.
2587 @item k
2588 Dump after conversion from registers to stack, to @file{@var{file}.29.stack}.
2589 @item l
2590 Dump after local register allocation, to @file{@var{file}.18.lreg}.
2591 @item L
2592 Dump after loop optimization, to @file{@var{file}.09.loop}.
2593 @item M
2594 Dump after performing the machine dependent reorganisation pass, to
2595 @file{@var{file}.28.mach}. 
2596 @item n
2597 Dump after register renumbering, to @file{@var{file}.23.rnreg}.
2598 @item N
2599 Dump after the register move pass, to @file{@var{file}.16.regmove}.
2600 @item r
2601 Dump after RTL generation, to @file{@var{file}.00.rtl}.
2602 @item R
2603 Dump after the second instruction scheduling pass, to
2604 @file{@var{file}.25.sched2}.
2605 @item s
2606 Dump after CSE (including the jump optimization that sometimes follows
2607 CSE), to @file{@var{file}.03.cse}. 
2608 @item S
2609 Dump after the first instruction scheduling pass, to
2610 @file{@var{file}.17.sched}.
2611 @item t
2612 Dump after the second CSE pass (including the jump optimization that
2613 sometimes follows CSE), to @file{@var{file}.10.cse2}.
2614 @item w
2615 Dump after the second flow pass, to @file{@var{file}.21.flow2}.
2616 @item X
2617 Dump after dead code elimination, to @file{@var{file}.06.dce}.
2618 @item z
2619 Dump after the peephole pass, to @file{@var{file}.22.peephole2}.
2620 @item a
2621 Produce all the dumps listed above.
2622 @item m
2623 Print statistics on memory usage, at the end of the run, to
2624 standard error.
2625 @item p
2626 Annotate the assembler output with a comment indicating which
2627 pattern and alternative was used.  The length of each instruction is
2628 also printed.
2629 @item P
2630 Dump the RTL in the assembler output as a comment before each instruction.
2631 Also turns on @samp{-dp} annotation.
2632 @item v
2633 For each of the other indicated dump files (except for
2634 @file{@var{file}.00.rtl}), dump a representation of the control flow graph
2635 suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.
2636 @item x
2637 Just generate RTL for a function instead of compiling it.  Usually used
2638 with @samp{r}.
2639 @item y
2640 Dump debugging information during parsing, to standard error.
2641 @end table
2643 @item -fdump-unnumbered
2644 When doing debugging dumps (see -d option above), suppress instruction
2645 numbers and line number note output.  This makes it more feasible to
2646 use diff on debugging dumps for compiler invocations with different
2647 options, in particular with and without -g.
2649 @item -fdump-translation-unit-@var{file} (C and C++ only)
2650 Dump a representation of the tree structure for the entire translation
2651 unit to @var{file}.
2653 @item -fpretend-float
2654 When running a cross-compiler, pretend that the target machine uses the
2655 same floating point format as the host machine.  This causes incorrect
2656 output of the actual floating constants, but the actual instruction
2657 sequence will probably be the same as GCC would make when running on
2658 the target machine.
2660 @item -save-temps
2661 Store the usual ``temporary'' intermediate files permanently; place them
2662 in the current directory and name them based on the source file.  Thus,
2663 compiling @file{foo.c} with @samp{-c -save-temps} would produce files
2664 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
2665 preprocessed @file{foo.i} output file even though the compiler now
2666 normally uses an integrated preprocessor.
2668 @item -time
2669 Report the CPU time taken by each subprocess in the compilation
2670 sequence.  For C source files, this is the compiler proper and assembler
2671 (plus the linker if linking is done).  The output looks like this:
2673 @smallexample
2674 # cc1 0.12 0.01
2675 # as 0.00 0.01
2676 @end smallexample
2678 The first number on each line is the ``user time,'' that is time spent
2679 executing the program itself.  The second number is ``system time,''
2680 time spent executing operating system routines on behalf of the program.
2681 Both numbers are in seconds.
2683 @item -print-file-name=@var{library}
2684 Print the full absolute name of the library file @var{library} that
2685 would be used when linking---and don't do anything else.  With this
2686 option, GCC does not compile or link anything; it just prints the
2687 file name.
2689 @item -print-prog-name=@var{program}
2690 Like @samp{-print-file-name}, but searches for a program such as @samp{cpp}.
2692 @item -print-libgcc-file-name
2693 Same as @samp{-print-file-name=libgcc.a}.
2695 This is useful when you use @samp{-nostdlib} or @samp{-nodefaultlibs}
2696 but you do want to link with @file{libgcc.a}.  You can do
2698 @example
2699 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
2700 @end example
2702 @item -print-search-dirs
2703 Print the name of the configured installation directory and a list of
2704 program and library directories gcc will search---and don't do anything else.
2706 This is useful when gcc prints the error message
2707 @samp{installation problem, cannot exec cpp0: No such file or directory}.
2708 To resolve this you either need to put @file{cpp0} and the other compiler
2709 components where gcc expects to find them, or you can set the environment
2710 variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
2711 Don't forget the trailing '/'.
2712 @xref{Environment Variables}.
2713 @end table
2715 @node Optimize Options
2716 @section Options That Control Optimization
2717 @cindex optimize options
2718 @cindex options, optimization
2720 These options control various sorts of optimizations:
2722 @table @gcctabopt
2723 @item -O
2724 @itemx -O1
2725 Optimize.  Optimizing compilation takes somewhat more time, and a lot
2726 more memory for a large function.
2728 Without @samp{-O}, the compiler's goal is to reduce the cost of
2729 compilation and to make debugging produce the expected results.
2730 Statements are independent: if you stop the program with a breakpoint
2731 between statements, you can then assign a new value to any variable or
2732 change the program counter to any other statement in the function and
2733 get exactly the results you would expect from the source code.
2735 Without @samp{-O}, the compiler only allocates variables declared
2736 @code{register} in registers.  The resulting compiled code is a little
2737 worse than produced by PCC without @samp{-O}.
2739 With @samp{-O}, the compiler tries to reduce code size and execution
2740 time.
2742 When you specify @samp{-O}, the compiler turns on @samp{-fthread-jumps}
2743 and @samp{-fdefer-pop} on all machines.  The compiler turns on
2744 @samp{-fdelayed-branch} on machines that have delay slots, and
2745 @samp{-fomit-frame-pointer} on machines that can support debugging even
2746 without a frame pointer.  On some machines the compiler also turns
2747 on other flags.@refill
2749 @item -O2
2750 Optimize even more.  GCC performs nearly all supported optimizations
2751 that do not involve a space-speed tradeoff.  The compiler does not
2752 perform loop unrolling or function inlining when you specify @samp{-O2}.
2753 As compared to @samp{-O}, this option increases both compilation time
2754 and the performance of the generated code.
2756 @samp{-O2} turns on all optional optimizations except for loop unrolling,
2757 function inlining, and register renaming.  It also turns on the
2758 @samp{-fforce-mem} option on all machines and frame pointer elimination
2759 on machines where doing so does not interfere with debugging.
2761 @item -O3
2762 Optimize yet more.  @samp{-O3} turns on all optimizations specified by
2763 @samp{-O2} and also turns on the @samp{-finline-functions} and
2764 @samp{-frename-registers} options.
2766 @item -O0
2767 Do not optimize.
2769 @item -Os
2770 Optimize for size.  @samp{-Os} enables all @samp{-O2} optimizations that
2771 do not typically increase code size.  It also performs further
2772 optimizations designed to reduce code size.
2774 If you use multiple @samp{-O} options, with or without level numbers,
2775 the last such option is the one that is effective.
2776 @end table
2778 Options of the form @samp{-f@var{flag}} specify machine-independent
2779 flags.  Most flags have both positive and negative forms; the negative
2780 form of @samp{-ffoo} would be @samp{-fno-foo}.  In the table below,
2781 only one of the forms is listed---the one which is not the default.
2782 You can figure out the other form by either removing @samp{no-} or
2783 adding it.
2785 @table @gcctabopt
2786 @item -ffloat-store
2787 Do not store floating point variables in registers, and inhibit other
2788 options that might change whether a floating point value is taken from a
2789 register or memory.
2791 @cindex floating point precision
2792 This option prevents undesirable excess precision on machines such as
2793 the 68000 where the floating registers (of the 68881) keep more
2794 precision than a @code{double} is supposed to have.  Similarly for the
2795 x86 architecture.  For most programs, the excess precision does only
2796 good, but a few programs rely on the precise definition of IEEE floating
2797 point.  Use @samp{-ffloat-store} for such programs, after modifying
2798 them to store all pertinent intermediate computations into variables.
2800 @item -fno-default-inline
2801 Do not make member functions inline by default merely because they are
2802 defined inside the class scope (C++ only).  Otherwise, when you specify
2803 @w{@samp{-O}}, member functions defined inside class scope are compiled
2804 inline by default; i.e., you don't need to add @samp{inline} in front of
2805 the member function name.
2807 @item -fno-defer-pop
2808 Always pop the arguments to each function call as soon as that function
2809 returns.  For machines which must pop arguments after a function call,
2810 the compiler normally lets arguments accumulate on the stack for several
2811 function calls and pops them all at once.
2813 @item -fforce-mem
2814 Force memory operands to be copied into registers before doing
2815 arithmetic on them.  This produces better code by making all memory
2816 references potential common subexpressions.  When they are not common
2817 subexpressions, instruction combination should eliminate the separate
2818 register-load.  The @samp{-O2} option turns on this option.
2820 @item -fforce-addr
2821 Force memory address constants to be copied into registers before
2822 doing arithmetic on them.  This may produce better code just as
2823 @samp{-fforce-mem} may.
2825 @item -fomit-frame-pointer
2826 Don't keep the frame pointer in a register for functions that
2827 don't need one.  This avoids the instructions to save, set up and
2828 restore frame pointers; it also makes an extra register available
2829 in many functions.  @strong{It also makes debugging impossible on
2830 some machines.}
2832 @ifset INTERNALS
2833 On some machines, such as the Vax, this flag has no effect, because
2834 the standard calling sequence automatically handles the frame pointer
2835 and nothing is saved by pretending it doesn't exist.  The
2836 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
2837 whether a target machine supports this flag.  @xref{Registers}.@refill
2838 @end ifset
2839 @ifclear INTERNALS
2840 On some machines, such as the Vax, this flag has no effect, because
2841 the standard calling sequence automatically handles the frame pointer
2842 and nothing is saved by pretending it doesn't exist.  The
2843 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
2844 whether a target machine supports this flag.  @xref{Registers,,Register
2845 Usage, gcc.info, Using and Porting GCC}.@refill
2846 @end ifclear
2848 @item -foptimize-sibling-calls
2849 Optimize sibling and tail recursive calls.
2851 @item -ftrapv
2852 This option generates traps for signed overflow on addition, subtraction,
2853 multiplication operations.
2855 @item -fno-inline
2856 Don't pay attention to the @code{inline} keyword.  Normally this option
2857 is used to keep the compiler from expanding any functions inline.
2858 Note that if you are not optimizing, no functions can be expanded inline.
2860 @item -finline-functions
2861 Integrate all simple functions into their callers.  The compiler
2862 heuristically decides which functions are simple enough to be worth
2863 integrating in this way.
2865 If all calls to a given function are integrated, and the function is
2866 declared @code{static}, then the function is normally not output as
2867 assembler code in its own right.
2869 @item -finline-limit=@var{n}
2870 By default, gcc limits the size of functions that can be inlined.  This flag
2871 allows the control of this limit for functions that are explicitly marked as
2872 inline (ie marked with the inline keyword or defined within the class 
2873 definition in c++).  @var{n} is the size of functions that can be inlined in 
2874 number of pseudo instructions (not counting parameter handling).  The default
2875 value of n is 10000.  Increasing this value can result in more inlined code at
2876 the cost of compilation time and memory consumption.  Decreasing usually makes
2877 the compilation faster and less code will be inlined (which presumably 
2878 means slower programs).  This option is particularly useful for programs that 
2879 use inlining heavily such as those based on recursive templates with c++.
2881 @emph{Note:} pseudo instruction represents, in this particular context, an
2882 abstract measurement of function's size.  In no way, it represents a count
2883 of assembly instructions and as such its exact meaning might change from one
2884 release to an another.
2886 @item -fkeep-inline-functions
2887 Even if all calls to a given function are integrated, and the function
2888 is declared @code{static}, nevertheless output a separate run-time
2889 callable version of the function.  This switch does not affect
2890 @code{extern inline} functions.
2892 @item -fkeep-static-consts
2893 Emit variables declared @code{static const} when optimization isn't turned
2894 on, even if the variables aren't referenced.
2896 GCC enables this option by default.  If you want to force the compiler to
2897 check if the variable was referenced, regardless of whether or not
2898 optimization is turned on, use the @samp{-fno-keep-static-consts} option.
2900 @item -fno-function-cse
2901 Do not put function addresses in registers; make each instruction that
2902 calls a constant function contain the function's address explicitly.
2904 This option results in less efficient code, but some strange hacks
2905 that alter the assembler output may be confused by the optimizations
2906 performed when this option is not used.
2908 @item -ffast-math
2909 This option allows GCC to violate some ISO or IEEE rules and/or
2910 specifications in the interest of optimizing code for speed.  For
2911 example, it allows the compiler to assume arguments to the @code{sqrt}
2912 function are non-negative numbers and that no floating-point values
2913 are NaNs.
2915 This option should never be turned on by any @samp{-O} option since
2916 it can result in incorrect output for programs which depend on
2917 an exact implementation of IEEE or ISO rules/specifications for
2918 math functions.
2920 @item -fno-math-errno
2921 Do not set ERRNO after calling math functions that are executed
2922 with a single instruction, e.g., sqrt.  A program that relies on
2923 IEEE exceptions for math error handling may want to use this flag
2924 for speed while maintaining IEEE arithmetic compatibility.
2926 The default is @samp{-fmath-errno}.  The @samp{-ffast-math} option
2927 sets @samp{-fno-math-errno}.
2928 @end table
2930 @c following causes underfulls.. they don't look great, but we deal.
2931 @c --mew 26jan93
2932 The following options control specific optimizations.  The @samp{-O2}
2933 option turns on all of these optimizations except @samp{-funroll-loops}
2934 and @samp{-funroll-all-loops}.  On most machines, the @samp{-O} option
2935 turns on the @samp{-fthread-jumps} and @samp{-fdelayed-branch} options,
2936 but specific machines may handle it differently.
2938 You can use the following flags in the rare cases when ``fine-tuning''
2939 of optimizations to be performed is desired.
2941 @table @gcctabopt
2942 @item -fstrength-reduce
2943 Perform the optimizations of loop strength reduction and
2944 elimination of iteration variables.
2946 @item -fthread-jumps
2947 Perform optimizations where we check to see if a jump branches to a
2948 location where another comparison subsumed by the first is found.  If
2949 so, the first branch is redirected to either the destination of the
2950 second branch or a point immediately following it, depending on whether
2951 the condition is known to be true or false.
2953 @item -fcse-follow-jumps
2954 In common subexpression elimination, scan through jump instructions
2955 when the target of the jump is not reached by any other path.  For
2956 example, when CSE encounters an @code{if} statement with an
2957 @code{else} clause, CSE will follow the jump when the condition
2958 tested is false.
2960 @item -fcse-skip-blocks
2961 This is similar to @samp{-fcse-follow-jumps}, but causes CSE to
2962 follow jumps which conditionally skip over blocks.  When CSE
2963 encounters a simple @code{if} statement with no else clause,
2964 @samp{-fcse-skip-blocks} causes CSE to follow the jump around the
2965 body of the @code{if}.
2967 @item -frerun-cse-after-loop
2968 Re-run common subexpression elimination after loop optimizations has been
2969 performed.
2971 @item -frerun-loop-opt
2972 Run the loop optimizer twice.
2974 @item -fgcse
2975 Perform a global common subexpression elimination pass.
2976 This pass also performs global constant and copy propagation.
2978 @item -fdelete-null-pointer-checks
2979 Use global dataflow analysis to identify and eliminate useless null
2980 pointer checks.  Programs which rely on NULL pointer dereferences @emph{not}
2981 halting the program may not work properly with this option.  Use
2982 -fno-delete-null-pointer-checks to disable this optimizing for programs
2983 which depend on that behavior.
2985 @item -fexpensive-optimizations
2986 Perform a number of minor optimizations that are relatively expensive.
2988 @item -foptimize-register-move
2989 @itemx -fregmove
2990 Attempt to reassign register numbers in move instructions and as
2991 operands of other simple instructions in order to maximize the amount of
2992 register tying.  This is especially helpful on machines with two-operand
2993 instructions.  GCC enables this optimization by default with @samp{-O2}
2994 or higher.
2996 Note @option{-fregmove} and @option{-foptimize-register-move} are the same
2997 optimization.
2999 @item -fdelayed-branch
3000 If supported for the target machine, attempt to reorder instructions
3001 to exploit instruction slots available after delayed branch
3002 instructions.
3004 @item -fschedule-insns
3005 If supported for the target machine, attempt to reorder instructions to
3006 eliminate execution stalls due to required data being unavailable.  This
3007 helps machines that have slow floating point or memory load instructions
3008 by allowing other instructions to be issued until the result of the load
3009 or floating point instruction is required.
3011 @item -fschedule-insns2
3012 Similar to @samp{-fschedule-insns}, but requests an additional pass of
3013 instruction scheduling after register allocation has been done.  This is
3014 especially useful on machines with a relatively small number of
3015 registers and where memory load instructions take more than one cycle.
3017 @item -ffunction-sections
3018 @itemx -fdata-sections
3019 Place each function or data item into its own section in the output
3020 file if the target supports arbitrary sections.  The name of the
3021 function or the name of the data item determines the section's name
3022 in the output file.
3024 Use these options on systems where the linker can perform optimizations
3025 to improve locality of reference in the instruction space.  HPPA
3026 processors running HP-UX and Sparc processors running Solaris 2 have
3027 linkers with such optimizations.  Other systems using the ELF object format
3028 as well as AIX may have these optimizations in the future.
3030 Only use these options when there are significant benefits from doing
3031 so.  When you specify these options, the assembler and linker will
3032 create larger object and executable files and will also be slower.
3033 You will not be able to use @code{gprof} on all systems if you
3034 specify this option and you may have problems with debugging if
3035 you specify both this option and @samp{-g}.
3037 @item -fcaller-saves
3038 Enable values to be allocated in registers that will be clobbered by
3039 function calls, by emitting extra instructions to save and restore the
3040 registers around such calls.  Such allocation is done only when it
3041 seems to result in better code than would otherwise be produced.
3043 This option is always enabled by default on certain machines, usually
3044 those which have no call-preserved registers to use instead.
3046 For all machines, optimization level 2 and higher enables this flag by
3047 default.
3049 @item -funroll-loops
3050 Perform the optimization of loop unrolling.  This is only done for loops
3051 whose number of iterations can be determined at compile time or run time.
3052 @samp{-funroll-loops} implies both @samp{-fstrength-reduce} and
3053 @samp{-frerun-cse-after-loop}.
3055 @item -funroll-all-loops
3056 Perform the optimization of loop unrolling.  This is done for all loops
3057 and usually makes programs run more slowly.  @samp{-funroll-all-loops}
3058 implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}.
3060 @item -fmove-all-movables
3061 Forces all invariant computations in loops to be moved
3062 outside the loop.
3064 @item -freduce-all-givs
3065 Forces all general-induction variables in loops to be
3066 strength-reduced.
3068 @emph{Note:} When compiling programs written in Fortran,
3069 @samp{-fmove-all-movables} and @samp{-freduce-all-givs} are enabled
3070 by default when you use the optimizer.
3072 These options may generate better or worse code; results are highly
3073 dependent on the structure of loops within the source code.
3075 These two options are intended to be removed someday, once
3076 they have helped determine the efficacy of various
3077 approaches to improving loop optimizations.
3079 Please let us (@w{@email{gcc@@gcc.gnu.org}} and @w{@email{fortran@@gnu.org}})
3080 know how use of these options affects
3081 the performance of your production code.
3082 We're very interested in code that runs @emph{slower}
3083 when these options are @emph{enabled}.
3085 @item -fno-peephole
3086 Disable any machine-specific peephole optimizations.
3088 @item -fbranch-probabilities
3089 After running a program compiled with @samp{-fprofile-arcs}
3090 (@pxref{Debugging Options,, Options for Debugging Your Program or
3091 @command{gcc}}), you can compile it a second time using
3092 @samp{-fbranch-probabilities}, to improve optimizations based on
3093 guessing the path a branch might take.
3095 @ifset INTERNALS
3096 With @samp{-fbranch-probabilities}, GCC puts a @samp{REG_EXEC_COUNT}
3097 note on the first instruction of each basic block, and a
3098 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
3099 These can be used to improve optimization.  Currently, they are only
3100 used in one place: in @file{reorg.c}, instead of guessing which path a
3101 branch is mostly to take, the @samp{REG_BR_PROB} values are used to
3102 exactly determine which path is taken more often.
3103 @end ifset
3105 @item -fstrict-aliasing
3106 Allows the compiler to assume the strictest aliasing rules applicable to
3107 the language being compiled.  For C (and C++), this activates
3108 optimizations based on the type of expressions.  In particular, an
3109 object of one type is assumed never to reside at the same address as an
3110 object of a different type, unless the types are almost the same.  For
3111 example, an @code{unsigned int} can alias an @code{int}, but not a
3112 @code{void*} or a @code{double}.  A character type may alias any other
3113 type.  
3115 Pay special attention to code like this:
3116 @example
3117 union a_union @{ 
3118   int i;
3119   double d;
3122 int f() @{
3123   a_union t;
3124   t.d = 3.0;
3125   return t.i;
3127 @end example
3128 The practice of reading from a different union member than the one most
3129 recently written to (called ``type-punning'') is common.  Even with
3130 @samp{-fstrict-aliasing}, type-punning is allowed, provided the memory
3131 is accessed through the union type.  So, the code above will work as
3132 expected.  However, this code might not:
3133 @example
3134 int f() @{ 
3135   a_union t;
3136   int* ip;
3137   t.d = 3.0;
3138   ip = &t.i;
3139   return *ip;
3141 @end example
3143 @ifset INTERNALS
3144 Every language that wishes to perform language-specific alias analysis
3145 should define a function that computes, given an @code{tree}
3146 node, an alias set for the node.  Nodes in different alias sets are not
3147 allowed to alias.  For an example, see the C front-end function
3148 @code{c_get_alias_set}.
3149 @end ifset
3151 @item -falign-functions
3152 @itemx -falign-functions=@var{n}
3153 Align the start of functions to the next power-of-two greater than
3154 @var{n}, skipping up to @var{n} bytes.  For instance,
3155 @samp{-falign-functions=32} aligns functions to the next 32-byte
3156 boundary, but @samp{-falign-functions=24} would align to the next
3157 32-byte boundary only if this can be done by skipping 23 bytes or less.
3159 @samp{-fno-align-functions} and @samp{-falign-functions=1} are
3160 equivalent and mean that functions will not be aligned.
3162 Some assemblers only support this flag when @var{n} is a power of two;
3163 in that case, it is rounded up.
3165 If @var{n} is not specified, use a machine-dependent default.
3167 @item -falign-labels
3168 @itemx -falign-labels=@var{n}
3169 Align all branch targets to a power-of-two boundary, skipping up to
3170 @var{n} bytes like @samp{-falign-functions}.  This option can easily
3171 make code slower, because it must insert dummy operations for when the
3172 branch target is reached in the usual flow of the code.
3174 If @samp{-falign-loops} or @samp{-falign-jumps} are applicable and
3175 are greater than this value, then their values are used instead.
3177 If @var{n} is not specified, use a machine-dependent default which is
3178 very likely to be @samp{1}, meaning no alignment.
3180 @item -falign-loops
3181 @itemx -falign-loops=@var{n}
3182 Align loops to a power-of-two boundary, skipping up to @var{n} bytes
3183 like @samp{-falign-functions}.  The hope is that the loop will be
3184 executed many times, which will make up for any execution of the dummy
3185 operations.
3187 If @var{n} is not specified, use a machine-dependent default.
3189 @item -falign-jumps
3190 @itemx -falign-jumps=@var{n}
3191 Align branch targets to a power-of-two boundary, for branch targets
3192 where the targets can only be reached by jumping, skipping up to @var{n}
3193 bytes like @samp{-falign-functions}.  In this case, no dummy operations
3194 need be executed.
3196 If @var{n} is not specified, use a machine-dependent default.
3198 @item -fssa
3199 Perform optimizations in static single assignment form.  Each function's
3200 flow graph is translated into SSA form, optimizations are performed, and
3201 the flow graph is translated back from SSA form.  User's should not
3202 specify this option, since it is not yet ready for production use.
3204 @item -fdce
3205 Perform dead-code elimination in SSA form.  Requires @samp{-fssa}.  Like
3206 @samp{-fssa}, this is an experimental feature.
3208 @item -fsingle-precision-constant
3209 Treat floating point constant as single precision constant instead of
3210 implicitly converting it to double precision constant.
3212 @item -frename-registers
3213 Attempt to avoid false dependancies in scheduled code by making use
3214 of registers left over after register allocation.  This optimization
3215 will most benefit processors with lots of registers.  It can, however,
3216 make debugging impossible, since variables will no longer stay in
3217 a ``home register''.
3218 @end table
3220 @node Preprocessor Options
3221 @section Options Controlling the Preprocessor
3222 @cindex preprocessor options
3223 @cindex options, preprocessor
3225 These options control the C preprocessor, which is run on each C source
3226 file before actual compilation.
3228 If you use the @samp{-E} option, nothing is done except preprocessing.
3229 Some of these options make sense only together with @samp{-E} because
3230 they cause the preprocessor output to be unsuitable for actual
3231 compilation.
3233 @table @gcctabopt
3234 @item -include @var{file}
3235 Process @var{file} as input before processing the regular input file.
3236 In effect, the contents of @var{file} are compiled first.  Any @samp{-D}
3237 and @samp{-U} options on the command line are always processed before
3238 @samp{-include @var{file}}, regardless of the order in which they are
3239 written.  All the @samp{-include} and @samp{-imacros} options are
3240 processed in the order in which they are written.
3242 @item -imacros @var{file}
3243 Process @var{file} as input, discarding the resulting output, before
3244 processing the regular input file.  Because the output generated from
3245 @var{file} is discarded, the only effect of @samp{-imacros @var{file}}
3246 is to make the macros defined in @var{file} available for use in the
3247 main input.  All the @samp{-include} and @samp{-imacros} options are
3248 processed in the order in which they are written.
3250 @item -idirafter @var{dir}
3251 @cindex second include path
3252 Add the directory @var{dir} to the second include path.  The directories
3253 on the second include path are searched when a header file is not found
3254 in any of the directories in the main include path (the one that
3255 @samp{-I} adds to).
3257 @item -iprefix @var{prefix}
3258 Specify @var{prefix} as the prefix for subsequent @samp{-iwithprefix}
3259 options.
3261 @item -iwithprefix @var{dir}
3262 Add a directory to the second include path.  The directory's name is
3263 made by concatenating @var{prefix} and @var{dir}, where @var{prefix} was
3264 specified previously with @samp{-iprefix}.  If you have not specified a
3265 prefix yet, the directory containing the installed passes of the
3266 compiler is used as the default.
3268 @item -iwithprefixbefore @var{dir}
3269 Add a directory to the main include path.  The directory's name is made
3270 by concatenating @var{prefix} and @var{dir}, as in the case of
3271 @samp{-iwithprefix}.
3273 @item -isystem @var{dir}
3274 Add a directory to the beginning of the second include path, marking it
3275 as a system directory, so that it gets the same special treatment as
3276 is applied to the standard system directories.
3278 @item -nostdinc
3279 Do not search the standard system directories for header files.  Only
3280 the directories you have specified with @samp{-I} options (and the
3281 current directory, if appropriate) are searched.  @xref{Directory
3282 Options}, for information on @samp{-I}.
3284 By using both @samp{-nostdinc} and @samp{-I-}, you can limit the include-file
3285 search path to only those directories you specify explicitly.
3287 @item -remap
3288 @findex -remap
3289 When searching for a header file in a directory, remap file names if a
3290 file named @file{header.gcc} exists in that directory.  This can be used
3291 to work around limitations of file systems with file name restrictions.
3292 The @file{header.gcc} file should contain a series of lines with two
3293 tokens on each line: the first token is the name to map, and the second
3294 token is the actual name to use.
3296 @item -undef
3297 Do not predefine any nonstandard macros.  (Including architecture flags).
3299 @item -E
3300 Run only the C preprocessor.  Preprocess all the C source files
3301 specified and output the results to standard output or to the
3302 specified output file.
3304 @item -C
3305 Tell the preprocessor not to discard comments.  Used with the
3306 @samp{-E} option.
3308 @item -P
3309 Tell the preprocessor not to generate @samp{#line} directives.
3310 Used with the @samp{-E} option.
3312 @cindex make
3313 @cindex dependencies, make
3314 @item -M
3315 @findex -M
3316 Instead of outputting the result of preprocessing, output a rule
3317 suitable for @code{make} describing the dependencies of the main source
3318 file.  The preprocessor outputs one @code{make} rule containing the
3319 object file name for that source file, a colon, and the names of all the
3320 included files.  If there are many included files then the rule is split
3321 into several lines using @samp{\}-newline.
3323 @samp{-M} implies @samp{-E}.
3325 @item -MM
3326 @findex -MM
3327 Like @samp{-M}, but mention only the files included with @samp{#include
3328 "@var{file}"}.  System header files included with @samp{#include
3329 <@var{file}>} are omitted.
3331 @item -MD
3332 @findex -MD
3333 Like @samp{-M} but the dependency information is written to a file
3334 rather than stdout.  @code{gcc} will use the same file name and
3335 directory as the object file, but with the suffix ".d" instead.
3337 This is in addition to compiling the main file as specified ---
3338 @samp{-MD} does not inhibit ordinary compilation the way @samp{-M} does,
3339 unless you also specify @samp{-MG}.
3341 With Mach, you can use the utility @code{md} to merge multiple
3342 dependency files into a single dependency file suitable for using with
3343 the @samp{make} command.
3345 @item -MMD
3346 @findex -MMD
3347 Like @samp{-MD} except mention only user header files, not system
3348 -header files.
3350 @item -MF @var{file}
3351 @findex -MF
3352 When used with @samp{-M} or @samp{-MM}, specifies a file to write the
3353 dependencies to.  This allows the preprocessor to write the preprocessed
3354 file to stdout normally.  If no @samp{-MF} switch is given, CPP sends
3355 the rules to stdout and suppresses normal preprocessed output.
3357 Another way to specify output of a @code{make} rule is by setting
3358 the environment variable @env{DEPENDENCIES_OUTPUT} (@pxref{Environment
3359 Variables}).
3361 @item -MG
3362 @findex -MG
3363 When used with @samp{-M} or @samp{-MM}, @samp{-MG} says to treat missing
3364 header files as generated files and assume they live in the same
3365 directory as the source file.  It suppresses preprocessed output, as a
3366 missing header file is ordinarily an error.
3368 This feature is used in automatic updating of makefiles.
3370 @item -MP
3371 @findex -MP
3372 This option instructs CPP to add a phony target for each dependency
3373 other than the main file, causing each to depend on nothing.  These
3374 dummy rules work around errors @code{make} gives if you remove header
3375 files without updating the @code{Makefile} to match.
3377 This is typical output:-
3379 @smallexample
3380 /tmp/test.o: /tmp/test.c /tmp/test.h
3382 /tmp/test.h:
3383 @end smallexample
3385 @item -MQ @var{target}
3386 @item -MT @var{target}
3387 @findex -MQ
3388 @findex -MT
3389 By default CPP uses the main file name, including any path, and appends
3390 the object suffix, normally ``.o'', to it to obtain the name of the
3391 target for dependency generation.  With @samp{-MT} you can specify a
3392 target yourself, overriding the default one.
3394 If you want multiple targets, you can specify them as a single argument
3395 to @samp{-MT}, or use multiple @samp{-MT} options.
3397 The targets you specify are output in the order they appear on the
3398 command line.  @samp{-MQ} is identical to @samp{-MT}, except that the
3399 target name is quoted for Make, but with @samp{-MT} it isn't.  For
3400 example, -MT '$(objpfx)foo.o' gives
3402 @smallexample
3403 $(objpfx)foo.o: /tmp/foo.c
3404 @end smallexample
3406 but -MQ '$(objpfx)foo.o' gives
3408 @smallexample
3409 $$(objpfx)foo.o: /tmp/foo.c
3410 @end smallexample
3412 The default target is automatically quoted, as if it were given with
3413 @samp{-MQ}.
3415 @item -H
3416 Print the name of each header file used, in addition to other normal
3417 activities.
3419 @item -A@var{question}(@var{answer})
3420 Assert the answer @var{answer} for @var{question}, in case it is tested
3421 with a preprocessing conditional such as @samp{#if
3422 #@var{question}(@var{answer})}.  @samp{-A-} disables the standard
3423 assertions that normally describe the target machine.
3425 @item -D@var{macro}
3426 Define macro @var{macro} with the string @samp{1} as its definition.
3428 @item -D@var{macro}=@var{defn}
3429 Define macro @var{macro} as @var{defn}.  All instances of @samp{-D} on
3430 the command line are processed before any @samp{-U} options.
3432 Any @samp{-D} and @samp{-U} options on the command line are processed in
3433 order, and always before @samp{-imacros @var{file}}, regardless of the
3434 order in which they are written.
3436 @item -U@var{macro}
3437 Undefine macro @var{macro}.  @samp{-U} options are evaluated after all
3438 @samp{-D} options, but before any @samp{-include} and @samp{-imacros}
3439 options.
3441 Any @samp{-D} and @samp{-U} options on the command line are processed in
3442 order, and always before @samp{-imacros @var{file}}, regardless of the
3443 order in which they are written.
3445 @item -dM
3446 Tell the preprocessor to output only a list of the macro definitions
3447 that are in effect at the end of preprocessing.  Used with the @samp{-E}
3448 option.
3450 @item -dD
3451 Tell the preprocessing to pass all macro definitions into the output, in
3452 their proper sequence in the rest of the output.
3454 @item -dN
3455 Like @samp{-dD} except that the macro arguments and contents are omitted.
3456 Only @samp{#define @var{name}} is included in the output.
3458 @item -dI
3459 @findex -dI
3460 Output @samp{#include} directives in addition to the result of
3461 preprocessing.
3463 @item -trigraphs
3464 @findex -trigraphs
3465 Process ISO standard trigraph sequences.  These are three-character
3466 sequences, all starting with @samp{??}, that are defined by ISO C to
3467 stand for single characters.  For example, @samp{??/} stands for
3468 @samp{\}, so @samp{'??/n'} is a character constant for a newline.  By
3469 default, GCC ignores trigraphs, but in standard-conforming modes it
3470 converts them.  See the @samp{-std} and @samp{-ansi} options.
3472 The nine trigraph sequences are
3473 @table @samp
3474 @item ??(
3475 -> @samp{[}
3477 @item ??)
3478 -> @samp{]}
3480 @item ??<
3481 -> @samp{@{}
3483 @item ??>
3484 -> @samp{@}}
3486 @item ??=
3487 -> @samp{#}
3489 @item ??/
3490 -> @samp{\}
3492 @item ??'
3493 -> @samp{^}
3495 @item ??!
3496 -> @samp{|}
3498 @item ??-
3499 -> @samp{~}
3501 @end table
3503 Trigraph support is not popular, so many compilers do not implement it
3504 properly.  Portable code should not rely on trigraphs being either
3505 converted or ignored.
3507 @item -Wp,@var{option}
3508 Pass @var{option} as an option to the preprocessor.  If @var{option}
3509 contains commas, it is split into multiple options at the commas.
3510 @end table
3512 @node Assembler Options
3513 @section Passing Options to the Assembler
3515 @c prevent bad page break with this line
3516 You can pass options to the assembler.
3518 @table @gcctabopt
3519 @item -Wa,@var{option}
3520 Pass @var{option} as an option to the assembler.  If @var{option}
3521 contains commas, it is split into multiple options at the commas.
3522 @end table
3524 @node Link Options
3525 @section Options for Linking
3526 @cindex link options
3527 @cindex options, linking
3529 These options come into play when the compiler links object files into
3530 an executable output file.  They are meaningless if the compiler is
3531 not doing a link step.
3533 @table @gcctabopt
3534 @cindex file names
3535 @item @var{object-file-name}
3536 A file name that does not end in a special recognized suffix is
3537 considered to name an object file or library.  (Object files are
3538 distinguished from libraries by the linker according to the file
3539 contents.)  If linking is done, these object files are used as input
3540 to the linker.
3542 @item -c
3543 @itemx -S
3544 @itemx -E
3545 If any of these options is used, then the linker is not run, and
3546 object file names should not be used as arguments.  @xref{Overall
3547 Options}.
3549 @cindex Libraries
3550 @item -l@var{library}
3551 Search the library named @var{library} when linking.
3553 It makes a difference where in the command you write this option; the
3554 linker searches processes libraries and object files in the order they
3555 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
3556 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
3557 to functions in @samp{z}, those functions may not be loaded.
3559 The linker searches a standard list of directories for the library,
3560 which is actually a file named @file{lib@var{library}.a}.  The linker
3561 then uses this file as if it had been specified precisely by name.
3563 The directories searched include several standard system directories
3564 plus any that you specify with @samp{-L}.
3566 Normally the files found this way are library files---archive files
3567 whose members are object files.  The linker handles an archive file by
3568 scanning through it for members which define symbols that have so far
3569 been referenced but not defined.  But if the file that is found is an
3570 ordinary object file, it is linked in the usual fashion.  The only
3571 difference between using an @samp{-l} option and specifying a file name
3572 is that @samp{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
3573 and searches several directories.
3575 @item -lobjc
3576 You need this special case of the @samp{-l} option in order to
3577 link an Objective C program.
3579 @item -nostartfiles
3580 Do not use the standard system startup files when linking.
3581 The standard system libraries are used normally, unless @option{-nostdlib}
3582 or @option{-nodefaultlibs} is used.
3584 @item -nodefaultlibs
3585 Do not use the standard system libraries when linking.
3586 Only the libraries you specify will be passed to the linker.
3587 The standard startup files are used normally, unless @option{-nostartfiles}
3588 is used.  The compiler may generate calls to memcmp, memset, and memcpy
3589 for System V (and ISO C) environments or to bcopy and bzero for
3590 BSD environments.  These entries are usually resolved by entries in
3591 libc.  These entry points should be supplied through some other
3592 mechanism when this option is specified.
3594 @item -nostdlib
3595 Do not use the standard system startup files or libraries when linking.
3596 No startup files and only the libraries you specify will be passed to
3597 the linker. The compiler may generate calls to memcmp, memset, and memcpy
3598 for System V (and ISO C) environments or to bcopy and bzero for
3599 BSD environments.  These entries are usually resolved by entries in
3600 libc.  These entry points should be supplied through some other
3601 mechanism when this option is specified.
3603 @cindex @code{-lgcc}, use with @code{-nostdlib}
3604 @cindex @code{-nostdlib} and unresolved references
3605 @cindex unresolved references and @code{-nostdlib}
3606 @cindex @code{-lgcc}, use with @code{-nodefaultlibs}
3607 @cindex @code{-nodefaultlibs} and unresolved references
3608 @cindex unresolved references and @code{-nodefaultlibs}
3609 One of the standard libraries bypassed by @samp{-nostdlib} and
3610 @samp{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
3611 that GCC uses to overcome shortcomings of particular machines, or special
3612 needs for some languages.
3613 @ifset INTERNALS
3614 (@xref{Interface,,Interfacing to GCC Output}, for more discussion of
3615 @file{libgcc.a}.)
3616 @end ifset
3617 @ifclear INTERNALS
3618 (@xref{Interface,,Interfacing to GCC Output,gcc.info,Porting GCC},
3619 for more discussion of @file{libgcc.a}.)
3620 @end ifclear
3621 In most cases, you need @file{libgcc.a} even when you want to avoid
3622 other standard libraries.  In other words, when you specify @samp{-nostdlib}
3623 or @samp{-nodefaultlibs} you should usually specify @samp{-lgcc} as well.
3624 This ensures that you have no unresolved references to internal GCC
3625 library subroutines.  (For example, @samp{__main}, used to ensure C++
3626 constructors will be called; @pxref{Collect2,,@command{collect2}}.)
3628 @item -s
3629 Remove all symbol table and relocation information from the executable.
3631 @item -static
3632 On systems that support dynamic linking, this prevents linking with the shared
3633 libraries.  On other systems, this option has no effect.
3635 @item -shared
3636 Produce a shared object which can then be linked with other objects to
3637 form an executable.  Not all systems support this option.  For predictable
3638 results, you must also specify the same set of options that were used to 
3639 generate code (@samp{-fpic}, @samp{-fPIC}, or model suboptions)
3640 when you specify this option.@footnote{On some systems, @samp{gcc -shared}
3641 needs to build supplementary stub code for constructors to work. On
3642 multi-libbed systems, @samp{gcc -shared} must select the correct support
3643 libraries to link against.  Failing to supply the correct flags may lead
3644 to subtle defects. Supplying them in cases where they are not necessary
3645 is innocuous.}
3647 @item -shared-libgcc
3648 @itemx -static-libgcc
3649 On systems that provide @file{libgcc} as a shared library, these options
3650 force the use of either the shared or static version respectively.
3651 If no shared version of @file{libgcc} was built when the compiler was
3652 configured, these options have no effect.
3654 There are several situations in which an application should use the
3655 shared @file{libgcc} instead of the static version.  The most common
3656 of these is when the application wishes to throw and catch exceptions
3657 across different shared libraries.  In that case, each of the libraries
3658 as well as the application itself should use the shared @file{libgcc}.
3660 At present the GCC driver makes no attempt to recognize the situations
3661 in which the shared @file{libgcc} should be used, and defaults to using
3662 the static @file{libgcc} always.  This will likely change in the future,
3663 at which time @samp{-static-libgcc} becomes useful as a means for 
3664 overriding GCC's choice.
3666 @item -symbolic
3667 Bind references to global symbols when building a shared object.  Warn
3668 about any unresolved references (unless overridden by the link editor
3669 option @samp{-Xlinker -z -Xlinker defs}).  Only a few systems support
3670 this option.
3672 @item -Xlinker @var{option}
3673 Pass @var{option} as an option to the linker.  You can use this to
3674 supply system-specific linker options which GCC does not know how to
3675 recognize.
3677 If you want to pass an option that takes an argument, you must use
3678 @samp{-Xlinker} twice, once for the option and once for the argument.
3679 For example, to pass @samp{-assert definitions}, you must write
3680 @samp{-Xlinker -assert -Xlinker definitions}.  It does not work to write
3681 @samp{-Xlinker "-assert definitions"}, because this passes the entire
3682 string as a single argument, which is not what the linker expects.
3684 @item -Wl,@var{option}
3685 Pass @var{option} as an option to the linker.  If @var{option} contains
3686 commas, it is split into multiple options at the commas.
3688 @item -u @var{symbol}
3689 Pretend the symbol @var{symbol} is undefined, to force linking of
3690 library modules to define it.  You can use @samp{-u} multiple times with
3691 different symbols to force loading of additional library modules.
3692 @end table
3694 @node Directory Options
3695 @section Options for Directory Search
3696 @cindex directory options
3697 @cindex options, directory search
3698 @cindex search path
3700 These options specify directories to search for header files, for
3701 libraries and for parts of the compiler:
3703 @table @gcctabopt
3704 @item -I@var{dir}
3705 Add the directory @var{dir} to the head of the list of directories to be
3706 searched for header files.  This can be used to override a system header
3707 file, substituting your own version, since these directories are
3708 searched before the system header file directories.  If you use more
3709 than one @samp{-I} option, the directories are scanned in left-to-right
3710 order; the standard system directories come after.
3712 @item -I-
3713 Any directories you specify with @samp{-I} options before the @samp{-I-}
3714 option are searched only for the case of @samp{#include "@var{file}"};
3715 they are not searched for @samp{#include <@var{file}>}.
3717 If additional directories are specified with @samp{-I} options after
3718 the @samp{-I-}, these directories are searched for all @samp{#include}
3719 directives.  (Ordinarily @emph{all} @samp{-I} directories are used
3720 this way.)
3722 In addition, the @samp{-I-} option inhibits the use of the current
3723 directory (where the current input file came from) as the first search
3724 directory for @samp{#include "@var{file}"}.  There is no way to
3725 override this effect of @samp{-I-}.  With @samp{-I.} you can specify
3726 searching the directory which was current when the compiler was
3727 invoked.  That is not exactly the same as what the preprocessor does
3728 by default, but it is often satisfactory.
3730 @samp{-I-} does not inhibit the use of the standard system directories
3731 for header files.  Thus, @samp{-I-} and @samp{-nostdinc} are
3732 independent.
3734 @item -L@var{dir}
3735 Add directory @var{dir} to the list of directories to be searched
3736 for @samp{-l}.
3738 @item -B@var{prefix}
3739 This option specifies where to find the executables, libraries,
3740 include files, and data files of the compiler itself.
3742 The compiler driver program runs one or more of the subprograms
3743 @file{cpp}, @file{cc1}, @file{as} and @file{ld}.  It tries
3744 @var{prefix} as a prefix for each program it tries to run, both with and
3745 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
3747 For each subprogram to be run, the compiler driver first tries the
3748 @samp{-B} prefix, if any.  If that name is not found, or if @samp{-B}
3749 was not specified, the driver tries two standard prefixes, which are
3750 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc-lib/}.  If neither of
3751 those results in a file name that is found, the unmodified program
3752 name is searched for using the directories specified in your
3753 @env{PATH} environment variable.
3755 @samp{-B} prefixes that effectively specify directory names also apply
3756 to libraries in the linker, because the compiler translates these
3757 options into @samp{-L} options for the linker.  They also apply to
3758 includes files in the preprocessor, because the compiler translates these
3759 options into @samp{-isystem} options for the preprocessor.  In this case,
3760 the compiler appends @samp{include} to the prefix.
3762 The run-time support file @file{libgcc.a} can also be searched for using
3763 the @samp{-B} prefix, if needed.  If it is not found there, the two
3764 standard prefixes above are tried, and that is all.  The file is left
3765 out of the link if it is not found by those means.
3767 Another way to specify a prefix much like the @samp{-B} prefix is to use
3768 the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
3769 Variables}.
3771 @item -specs=@var{file}
3772 Process @var{file} after the compiler reads in the standard @file{specs}
3773 file, in order to override the defaults that the @file{gcc} driver
3774 program uses when determining what switches to pass to @file{cc1},
3775 @file{cc1plus}, @file{as}, @file{ld}, etc.  More than one
3776 @samp{-specs=}@var{file} can be specified on the command line, and they
3777 are processed in order, from left to right.
3778 @end table
3780 @c man end
3782 @node Spec Files
3783 @section Specifying subprocesses and the switches to pass to them
3784 @cindex Spec Files
3785 @command{gcc} is a driver program.  It performs its job by invoking a
3786 sequence of other programs to do the work of compiling, assembling and
3787 linking.  GCC interprets its command-line parameters and uses these to
3788 deduce which programs it should invoke, and which command-line options
3789 it ought to place on their command lines.  This behaviour is controlled
3790 by @dfn{spec strings}.  In most cases there is one spec string for each
3791 program that GCC can invoke, but a few programs have multiple spec
3792 strings to control their behaviour.  The spec strings built into GCC can
3793 be overridden by using the @samp{-specs=} command-line switch to specify
3794 a spec file.
3796 @dfn{Spec files} are plaintext files that are used to construct spec
3797 strings.  They consist of a sequence of directives separated by blank
3798 lines.  The type of directive is determined by the first non-whitespace
3799 character on the line and it can be one of the following:
3801 @table @code
3802 @item %@var{command}
3803 Issues a @var{command} to the spec file processor.  The commands that can
3804 appear here are: 
3806 @table @code
3807 @item %include <@var{file}>
3808 @cindex %include
3809 Search for @var{file} and insert its text at the current point in the
3810 specs file.
3812 @item %include_noerr <@var{file}>
3813 @cindex %include_noerr
3814 Just like @samp{%include}, but do not generate an error message if the include
3815 file cannot be found.
3817 @item %rename @var{old_name} @var{new_name}
3818 @cindex %rename
3819 Rename the spec string @var{old_name} to @var{new_name}.
3821 @end table
3823 @item *[@var{spec_name}]:
3824 This tells the compiler to create, override or delete the named spec
3825 string.  All lines after this directive up to the next directive or
3826 blank line are considered to be the text for the spec string.  If this
3827 results in an empty string then the spec will be deleted.  (Or, if the
3828 spec did not exist, then nothing will happened.)  Otherwise, if the spec
3829 does not currently exist a new spec will be created.  If the spec does
3830 exist then its contents will be overridden by the text of this
3831 directive, unless the first character of that text is the @samp{+}
3832 character, in which case the text will be appended to the spec.
3834 @item [@var{suffix}]:
3835 Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
3836 and up to the next directive or blank line are considered to make up the
3837 spec string for the indicated suffix.  When the compiler encounters an 
3838 input file with the named suffix, it will processes the spec string in
3839 order to work out how to compile that file.  For example:
3841 @smallexample
3842 .ZZ:
3843 z-compile -input %i
3844 @end smallexample
3846 This says that any input file whose name ends in @samp{.ZZ} should be
3847 passed to the program @samp{z-compile}, which should be invoked with the
3848 command-line switch @samp{-input} and with the result of performing the
3849 @samp{%i} substitution.  (See below.)
3851 As an alternative to providing a spec string, the text that follows a
3852 suffix directive can be one of the following:
3854 @table @code
3855 @item @@@var{language}
3856 This says that the suffix is an alias for a known @var{language}.  This is
3857 similar to using the @option{-x} command-line switch to GCC to specify a
3858 language explicitly.  For example:
3860 @smallexample
3861 .ZZ:
3862 @@c++
3863 @end smallexample
3865 Says that .ZZ files are, in fact, C++ source files.
3867 @item #@var{name}
3868 This causes an error messages saying:
3870 @smallexample
3871 @var{name} compiler not installed on this system.
3872 @end smallexample
3873 @end table
3875 GCC already has an extensive list of suffixes built into it.
3876 This directive will add an entry to the end of the list of suffixes, but
3877 since the list is searched from the end backwards, it is effectively
3878 possible to override earlier entries using this technique.
3880 @end table
3882 GCC has the following spec strings built into it.  Spec files can
3883 override these strings or create their own.  Note that individual
3884 targets can also add their own spec strings to this list. 
3886 @smallexample
3887 asm          Options to pass to the assembler
3888 asm_final    Options to pass to the assembler post-processor
3889 cpp          Options to pass to the C preprocessor
3890 cc1          Options to pass to the C compiler
3891 cc1plus      Options to pass to the C++ compiler
3892 endfile      Object files to include at the end of the link
3893 link         Options to pass to the linker
3894 lib          Libraries to include on the command line to the linker
3895 libgcc       Decides which GCC support library to pass to the linker
3896 linker       Sets the name of the linker
3897 predefines   Defines to be passed to the C preprocessor
3898 signed_char  Defines to pass to CPP to say whether @code{char} is signed by default
3899 startfile    Object files to include at the start of the link
3900 @end smallexample
3902 Here is a small example of a spec file:
3904 @smallexample
3905 %rename lib                 old_lib
3907 *lib:
3908 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
3909 @end smallexample
3911 This example renames the spec called @samp{lib} to @samp{old_lib} and
3912 then overrides the previous definition of @samp{lib} with a new one.
3913 The new definition adds in some extra command-line options before
3914 including the text of the old definition.
3916 @dfn{Spec strings} are a list of command-line options to be passed to their
3917 corresponding program.  In addition, the spec strings can contain
3918 @samp{%}-prefixed sequences to substitute variable text or to
3919 conditionally insert text into the command line.  Using these constructs
3920 it is possible to generate quite complex command lines.
3922 Here is a table of all defined @samp{%}-sequences for spec
3923 strings.  Note that spaces are not generated automatically around the
3924 results of expanding these sequences.  Therefore you can concatenate them
3925 together or combine them with constant text in a single argument. 
3927 @table @code
3928 @item %%
3929 Substitute one @samp{%} into the program name or argument.
3931 @item %i
3932 Substitute the name of the input file being processed.
3934 @item %b
3935 Substitute the basename of the input file being processed.
3936 This is the substring up to (and not including) the last period
3937 and not including the directory.
3939 @item %d
3940 Marks the argument containing or following the @samp{%d} as a
3941 temporary file name, so that that file will be deleted if GCC exits
3942 successfully.  Unlike @samp{%g}, this contributes no text to the
3943 argument. 
3945 @item %g@var{suffix}
3946 Substitute a file name that has suffix @var{suffix} and is chosen
3947 once per compilation, and mark the argument in the same way as
3948 @samp{%d}.  To reduce exposure to denial-of-service attacks, the file
3949 name is now chosen in a way that is hard to predict even when previously 
3950 chosen file names are known.  For example, @samp{%g.s ... %g.o ... %g.s}
3951 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
3952 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
3953 treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
3954 was simply substituted with a file name chosen once per compilation,
3955 without regard to any appended suffix (which was therefore treated
3956 just like ordinary text), making such attacks more likely to succeed.
3958 @item %u@var{suffix}
3959 Like @samp{%g}, but generates a new temporary file name even if
3960 @samp{%u@var{suffix}} was already seen.
3962 @item %U@var{suffix}
3963 Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
3964 new one if there is no such last file name.  In the absence of any
3965 @samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
3966 the same suffix @emph{space}, so @samp{%g.s ... %U.s ... %g.s ... %U.s}
3967 would involve the generation of two distinct file names, one
3968 for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
3969 simply substituted with a file name chosen for the previous @samp{%u},
3970 without regard to any appended suffix.
3972 @item %w
3973 Marks the argument containing or following the @samp{%w} as the
3974 designated output file of this compilation.  This puts the argument
3975 into the sequence of arguments that @samp{%o} will substitute later.
3977 @item %o
3978 Substitutes the names of all the output files, with spaces
3979 automatically placed around them.  You should write spaces
3980 around the @samp{%o} as well or the results are undefined.
3981 @samp{%o} is for use in the specs for running the linker.
3982 Input files whose names have no recognized suffix are not compiled
3983 at all, but they are included among the output files, so they will
3984 be linked.
3986 @item %O
3987 Substitutes the suffix for object files.  Note that this is
3988 handled specially when it immediately follows @samp{%g, %u, or %U},
3989 because of the need for those to form complete file names.  The
3990 handling is such that @samp{%O} is treated exactly as if it had already
3991 been substituted, except that @samp{%g, %u, and %U} do not currently
3992 support additional @var{suffix} characters following @samp{%O} as they would
3993 following, for example, @samp{.o}.
3995 @item %p
3996 Substitutes the standard macro predefinitions for the
3997 current target machine.  Use this when running @code{cpp}.
3999 @item %P
4000 Like @samp{%p}, but puts @samp{__} before and after the name of each
4001 predefined macro, except for macros that start with @samp{__} or with
4002 @samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
4003 C.  
4005 @item %I
4006 Substitute a @samp{-iprefix} option made from GCC_EXEC_PREFIX.
4008 @item %s
4009 Current argument is the name of a library or startup file of some sort.
4010 Search for that file in a standard list of directories and substitute
4011 the full name found. 
4013 @item %e@var{str}
4014 Print @var{str} as an error message.  @var{str} is terminated by a newline.
4015 Use this when inconsistent options are detected.
4017 @item %|
4018 Output @samp{-} if the input for the current command is coming from a pipe.
4020 @item %(@var{name})
4021 Substitute the contents of spec string @var{name} at this point.
4023 @item %[@var{name}]
4024 Like @samp{%(...)} but put @samp{__} around @samp{-D} arguments.
4026 @item %x@{@var{option}@}
4027 Accumulate an option for @samp{%X}.
4029 @item %X
4030 Output the accumulated linker options specified by @samp{-Wl} or a @samp{%x}
4031 spec string.
4033 @item %Y
4034 Output the accumulated assembler options specified by @samp{-Wa}.
4036 @item %Z
4037 Output the accumulated preprocessor options specified by @samp{-Wp}.
4039 @item %v1
4040 Substitute the major version number of GCC.
4041 (For version 2.9.5, this is 2.)
4043 @item %v2
4044 Substitute the minor version number of GCC.
4045 (For version 2.9.5, this is 9.)
4047 @item %a
4048 Process the @code{asm} spec.  This is used to compute the
4049 switches to be passed to the assembler.
4051 @item %A
4052 Process the @code{asm_final} spec.  This is a spec string for
4053 passing switches to an assembler post-processor, if such a program is
4054 needed.
4056 @item %l
4057 Process the @code{link} spec.  This is the spec for computing the
4058 command line passed to the linker.  Typically it will make use of the
4059 @samp{%L %G %S %D and %E} sequences.
4061 @item %D
4062 Dump out a @samp{-L} option for each directory that GCC believes might
4063 contain startup files.  If the target supports multilibs then the
4064 current multilib directory will be prepended to each of these paths. 
4066 @item %L
4067 Process the @code{lib} spec.  This is a spec string for deciding which
4068 libraries should be included on the command line to the linker. 
4070 @item %G
4071 Process the @code{libgcc} spec.  This is a spec string for deciding
4072 which GCC support library should be included on the command line to the linker. 
4074 @item %S
4075 Process the @code{startfile} spec.  This is a spec for deciding which
4076 object files should be the first ones passed to the linker.  Typically
4077 this might be a file named @file{crt0.o}. 
4079 @item %E
4080 Process the @code{endfile} spec.  This is a spec string that specifies
4081 the last object files that will be passed to the linker.  
4083 @item %C
4084 Process the @code{cpp} spec.  This is used to construct the arguments
4085 to be passed to the C preprocessor.
4087 @item %c
4088 Process the @code{signed_char} spec.  This is intended to be used
4089 to tell cpp whether a char is signed.  It typically has the definition: 
4090 @smallexample
4091 %@{funsigned-char:-D__CHAR_UNSIGNED__@}
4092 @end smallexample
4094 @item %1
4095 Process the @code{cc1} spec.  This is used to construct the options to be
4096 passed to the actual C compiler (@samp{cc1}).
4098 @item %2
4099 Process the @code{cc1plus} spec.  This is used to construct the options to be
4100 passed to the actual C++ compiler (@samp{cc1plus}).
4102 @item %*
4103 Substitute the variable part of a matched option.  See below.
4104 Note that each comma in the substituted string is replaced by
4105 a single space.
4107 @item %@{@code{S}@}
4108 Substitutes the @code{-S} switch, if that switch was given to GCC.
4109 If that switch was not specified, this substitutes nothing.  Note that
4110 the leading dash is omitted when specifying this option, and it is
4111 automatically inserted if the substitution is performed.  Thus the spec
4112 string @samp{%@{foo@}} would match the command-line option @samp{-foo}
4113 and would output the command line option @samp{-foo}.
4115 @item %W@{@code{S}@}
4116 Like %@{@code{S}@} but mark last argument supplied within as a file to be
4117 deleted on failure. 
4119 @item %@{@code{S}*@}
4120 Substitutes all the switches specified to GCC whose names start
4121 with @code{-S}, but which also take an argument.  This is used for
4122 switches like @samp{-o, -D, -I}, etc.  GCC considers @samp{-o foo} as being
4123 one switch whose names starts with @samp{o}.  %@{o*@} would substitute this
4124 text, including the space.  Thus two arguments would be generated. 
4126 @item %@{^@code{S}*@}
4127 Like %@{@code{S}*@}, but don't put a blank between a switch and its
4128 argument.  Thus %@{^o*@} would only generate one argument, not two.
4130 @item %@{<@code{S}@}
4131 Remove all occurrences of @code{-S} from the command line.  Note - this
4132 command is position dependent.  @samp{%} commands in the spec string
4133 before this option will see @code{-S}, @samp{%} commands in the spec
4134 string after this option will not.
4136 @item %@{@code{S}*:@code{X}@}
4137 Substitutes @code{X} if one or more switches whose names start with
4138 @code{-S} are specified to GCC.  Note that the tail part of the
4139 @code{-S} option (i.e. the part matched by the @samp{*}) will be substituted
4140 for each occurrence of @samp{%*} within @code{X}. 
4142 @item %@{@code{S}:@code{X}@}
4143 Substitutes @code{X}, but only if the @samp{-S} switch was given to GCC.
4145 @item %@{!@code{S}:@code{X}@}
4146 Substitutes @code{X}, but only if the @samp{-S} switch was @emph{not} given to GCC.
4148 @item %@{|@code{S}:@code{X}@}
4149 Like %@{@code{S}:@code{X}@}, but if no @code{S} switch, substitute @samp{-}.
4151 @item %@{|!@code{S}:@code{X}@}
4152 Like %@{!@code{S}:@code{X}@}, but if there is an @code{S} switch, substitute @samp{-}.
4154 @item %@{.@code{S}:@code{X}@}
4155 Substitutes @code{X}, but only if processing a file with suffix @code{S}.
4157 @item %@{!.@code{S}:@code{X}@}
4158 Substitutes @code{X}, but only if @emph{not} processing a file with suffix @code{S}.
4160 @item %@{@code{S}|@code{P}:@code{X}@}
4161 Substitutes @code{X} if either @code{-S} or @code{-P} was given to GCC.  This may be
4162 combined with @samp{!} and @samp{.} sequences as well, although they
4163 have a stronger binding than the @samp{|}.  For example a spec string
4164 like this:
4166 @smallexample
4167 %@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
4168 @end smallexample
4170 will output the following command-line options from the following input
4171 command-line options:
4173 @smallexample
4174 fred.c        -foo -baz
4175 jim.d         -bar -boggle
4176 -d fred.c     -foo -baz -boggle
4177 -d jim.d      -bar -baz -boggle
4178 @end smallexample
4180 @end table
4182 The conditional text @code{X} in a %@{@code{S}:@code{X}@} or
4183 %@{!@code{S}:@code{X}@} construct may contain other nested @samp{%} constructs
4184 or spaces, or even newlines.  They are processed as usual, as described
4185 above. 
4187 The @samp{-O, -f, -m, and -W} switches are handled specifically in these
4188 constructs.  If another value of @samp{-O} or the negated form of a @samp{-f, -m, or
4189 -W} switch is found later in the command line, the earlier switch
4190 value is ignored, except with @{@code{S}*@} where @code{S} is just one
4191 letter, which passes all matching options.
4193 The character @samp{|} at the beginning of the predicate text is used to indicate
4194 that a command should be piped to the following command, but only if @samp{-pipe}
4195 is specified.
4197 It is built into GCC which switches take arguments and which do not.
4198 (You might think it would be useful to generalize this to allow each
4199 compiler's spec to say which switches take arguments.  But this cannot
4200 be done in a consistent fashion.  GCC cannot even decide which input
4201 files have been specified without knowing which switches take arguments,
4202 and it must know which input files to compile in order to tell which
4203 compilers to run). 
4205 GCC also knows implicitly that arguments starting in @samp{-l} are to be
4206 treated as compiler output files, and passed to the linker in their
4207 proper position among the other output files.
4209 @c man begin OPTIONS
4211 @node Target Options
4212 @section Specifying Target Machine and Compiler Version
4213 @cindex target options
4214 @cindex cross compiling
4215 @cindex specifying machine version
4216 @cindex specifying compiler version and target machine
4217 @cindex compiler version, specifying
4218 @cindex target machine, specifying
4220 By default, GCC compiles code for the same type of machine that you
4221 are using.  However, it can also be installed as a cross-compiler, to
4222 compile for some other type of machine.  In fact, several different
4223 configurations of GCC, for different target machines, can be
4224 installed side by side.  Then you specify which one to use with the
4225 @samp{-b} option.
4227 In addition, older and newer versions of GCC can be installed side
4228 by side.  One of them (probably the newest) will be the default, but
4229 you may sometimes wish to use another.
4231 @table @gcctabopt
4232 @item -b @var{machine}
4233 The argument @var{machine} specifies the target machine for compilation.
4234 This is useful when you have installed GCC as a cross-compiler.
4236 The value to use for @var{machine} is the same as was specified as the
4237 machine type when configuring GCC as a cross-compiler.  For
4238 example, if a cross-compiler was configured with @samp{configure
4239 i386v}, meaning to compile for an 80386 running System V, then you
4240 would specify @samp{-b i386v} to run that cross compiler.
4242 When you do not specify @samp{-b}, it normally means to compile for
4243 the same type of machine that you are using.
4245 @item -V @var{version}
4246 The argument @var{version} specifies which version of GCC to run.
4247 This is useful when multiple versions are installed.  For example,
4248 @var{version} might be @samp{2.0}, meaning to run GCC version 2.0.
4250 The default version, when you do not specify @samp{-V}, is the last
4251 version of GCC that you installed.
4252 @end table
4254 The @samp{-b} and @samp{-V} options actually work by controlling part of
4255 the file name used for the executable files and libraries used for
4256 compilation.  A given version of GCC, for a given target machine, is
4257 normally kept in the directory @file{/usr/local/lib/gcc-lib/@var{machine}/@var{version}}.@refill
4259 Thus, sites can customize the effect of @samp{-b} or @samp{-V} either by
4260 changing the names of these directories or adding alternate names (or
4261 symbolic links).  If in directory @file{/usr/local/lib/gcc-lib/} the
4262 file @file{80386} is a link to the file @file{i386v}, then @samp{-b
4263 80386} becomes an alias for @samp{-b i386v}.
4265 In one respect, the @samp{-b} or @samp{-V} do not completely change
4266 to a different compiler: the top-level driver program @command{gcc}
4267 that you originally invoked continues to run and invoke the other
4268 executables (preprocessor, compiler per se, assembler and linker)
4269 that do the real work.  However, since no real work is done in the
4270 driver program, it usually does not matter that the driver program
4271 in use is not the one for the specified target.  It is common for the
4272 interface to the other executables to change incompatibly between
4273 compiler versions, so unless the version specified is very close to that
4274 of the driver (for example, @samp{-V 3.0} with a driver program from GCC
4275 version 3.0.1), use of @samp{-V} may not work; for example, using
4276 @samp{-V 2.95.2} will not work with a driver program from GCC 3.0.
4278 The only way that the driver program depends on the target machine is
4279 in the parsing and handling of special machine-specific options.
4280 However, this is controlled by a file which is found, along with the
4281 other executables, in the directory for the specified version and
4282 target machine.  As a result, a single installed driver program adapts
4283 to any specified target machine, and sufficiently similar compiler
4284 versions.
4286 The driver program executable does control one significant thing,
4287 however: the default version and target machine.  Therefore, you can
4288 install different instances of the driver program, compiled for
4289 different targets or versions, under different names.
4291 For example, if the driver for version 2.0 is installed as @command{ogcc}
4292 and that for version 2.1 is installed as @command{gcc}, then the command
4293 @command{gcc} will use version 2.1 by default, while @command{ogcc} will use
4294 2.0 by default.  However, you can choose either version with either
4295 command with the @samp{-V} option.
4297 @node Submodel Options
4298 @section Hardware Models and Configurations
4299 @cindex submodel options
4300 @cindex specifying hardware config
4301 @cindex hardware models and configurations, specifying
4302 @cindex machine dependent options
4304 Earlier we discussed the standard option @samp{-b} which chooses among
4305 different installed compilers for completely different target
4306 machines, such as Vax vs. 68000 vs. 80386.
4308 In addition, each of these target machine types can have its own
4309 special options, starting with @samp{-m}, to choose among various
4310 hardware models or configurations---for example, 68010 vs 68020,
4311 floating coprocessor or none.  A single installed version of the
4312 compiler can compile for any model or configuration, according to the
4313 options specified.
4315 Some configurations of the compiler also support additional special
4316 options, usually for compatibility with other compilers on the same
4317 platform.
4319 @ifset INTERNALS
4320 These options are defined by the macro @code{TARGET_SWITCHES} in the
4321 machine description.  The default for the options is also defined by
4322 that macro, which enables you to change the defaults.
4323 @end ifset
4325 @menu
4326 * M680x0 Options::
4327 * M68hc1x Options::
4328 * VAX Options::
4329 * SPARC Options::
4330 * Convex Options::
4331 * AMD29K Options::
4332 * ARM Options::
4333 * Thumb Options::
4334 * MN10200 Options::
4335 * MN10300 Options::
4336 * M32R/D Options::
4337 * M88K Options::
4338 * RS/6000 and PowerPC Options::
4339 * RT Options::
4340 * MIPS Options::
4341 * i386 Options::
4342 * HPPA Options::
4343 * Intel 960 Options::
4344 * DEC Alpha Options::
4345 * Clipper Options::
4346 * H8/300 Options::
4347 * SH Options::
4348 * System V Options::
4349 * TMS320C3x/C4x Options::
4350 * V850 Options::
4351 * ARC Options::
4352 * NS32K Options::
4353 * AVR Options::
4354 * MCore Options::
4355 * D30V Options::
4356 @end menu
4358 @node M680x0 Options
4359 @subsection M680x0 Options
4360 @cindex M680x0 options
4362 These are the @samp{-m} options defined for the 68000 series.  The default
4363 values for these options depends on which style of 68000 was selected when
4364 the compiler was configured; the defaults for the most common choices are
4365 given below.
4367 @table @gcctabopt
4368 @item -m68000
4369 @itemx -mc68000
4370 Generate output for a 68000.  This is the default
4371 when the compiler is configured for 68000-based systems.
4373 Use this option for microcontrollers with a 68000 or EC000 core,
4374 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
4376 @item -m68020
4377 @itemx -mc68020
4378 Generate output for a 68020.  This is the default
4379 when the compiler is configured for 68020-based systems.
4381 @item -m68881
4382 Generate output containing 68881 instructions for floating point.
4383 This is the default for most 68020 systems unless @samp{-nfp} was
4384 specified when the compiler was configured.
4386 @item -m68030
4387 Generate output for a 68030.  This is the default when the compiler is
4388 configured for 68030-based systems.
4390 @item -m68040
4391 Generate output for a 68040.  This is the default when the compiler is
4392 configured for 68040-based systems.
4394 This option inhibits the use of 68881/68882 instructions that have to be
4395 emulated by software on the 68040.  Use this option if your 68040 does not
4396 have code to emulate those instructions.
4398 @item -m68060
4399 Generate output for a 68060.  This is the default when the compiler is
4400 configured for 68060-based systems.
4402 This option inhibits the use of 68020 and 68881/68882 instructions that
4403 have to be emulated by software on the 68060.  Use this option if your 68060
4404 does not have code to emulate those instructions.
4406 @item -mcpu32
4407 Generate output for a CPU32. This is the default
4408 when the compiler is configured for CPU32-based systems.
4410 Use this option for microcontrollers with a
4411 CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
4412 68336, 68340, 68341, 68349 and 68360.
4414 @item -m5200
4415 Generate output for a 520X "coldfire" family cpu.  This is the default
4416 when the compiler is configured for 520X-based systems.
4418 Use this option for microcontroller with a 5200 core, including 
4419 the MCF5202, MCF5203, MCF5204 and MCF5202.
4422 @item -m68020-40
4423 Generate output for a 68040, without using any of the new instructions.
4424 This results in code which can run relatively efficiently on either a
4425 68020/68881 or a 68030 or a 68040.  The generated code does use the
4426 68881 instructions that are emulated on the 68040.
4428 @item -m68020-60
4429 Generate output for a 68060, without using any of the new instructions.
4430 This results in code which can run relatively efficiently on either a
4431 68020/68881 or a 68030 or a 68040.  The generated code does use the
4432 68881 instructions that are emulated on the 68060.
4434 @item -mfpa
4435 Generate output containing Sun FPA instructions for floating point.
4437 @item -msoft-float
4438 Generate output containing library calls for floating point.
4439 @strong{Warning:} the requisite libraries are not available for all m68k
4440 targets.  Normally the facilities of the machine's usual C compiler are
4441 used, but this can't be done directly in cross-compilation.  You must
4442 make your own arrangements to provide suitable library functions for
4443 cross-compilation.  The embedded targets @samp{m68k-*-aout} and
4444 @samp{m68k-*-coff} do provide software floating point support.
4446 @item -mshort
4447 Consider type @code{int} to be 16 bits wide, like @code{short int}.
4449 @item -mnobitfield
4450 Do not use the bit-field instructions.  The @samp{-m68000}, @samp{-mcpu32}
4451 and @samp{-m5200} options imply @w{@samp{-mnobitfield}}.
4453 @item -mbitfield
4454 Do use the bit-field instructions.  The @samp{-m68020} option implies
4455 @samp{-mbitfield}.  This is the default if you use a configuration
4456 designed for a 68020.
4458 @item -mrtd
4459 Use a different function-calling convention, in which functions
4460 that take a fixed number of arguments return with the @code{rtd}
4461 instruction, which pops their arguments while returning.  This
4462 saves one instruction in the caller since there is no need to pop
4463 the arguments there.
4465 This calling convention is incompatible with the one normally
4466 used on Unix, so you cannot use it if you need to call libraries
4467 compiled with the Unix compiler.
4469 Also, you must provide function prototypes for all functions that
4470 take variable numbers of arguments (including @code{printf});
4471 otherwise incorrect code will be generated for calls to those
4472 functions.
4474 In addition, seriously incorrect code will result if you call a
4475 function with too many arguments.  (Normally, extra arguments are
4476 harmlessly ignored.)
4478 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
4479 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
4481 @item -malign-int
4482 @itemx -mno-align-int
4483 Control whether GCC aligns @code{int}, @code{long}, @code{long long}, 
4484 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
4485 boundary (@samp{-malign-int}) or a 16-bit boundary (@samp{-mno-align-int}).
4486 Aligning variables on 32-bit boundaries produces code that runs somewhat
4487 faster on processors with 32-bit busses at the expense of more memory.
4489 @strong{Warning:} if you use the @samp{-malign-int} switch, GCC will
4490 align structures containing the above types  differently than
4491 most published application binary interface specifications for the m68k.
4493 @item -mpcrel
4494 Use the pc-relative addressing mode of the 68000 directly, instead of
4495 using a global offset table.  At present, this option implies -fpic,
4496 allowing at most a 16-bit offset for pc-relative addressing.  -fPIC is
4497 not presently supported with -mpcrel, though this could be supported for
4498 68020 and higher processors.
4500 @item -mno-strict-align
4501 @itemx -mstrict-align
4502 @kindex -mstrict-align
4503 Do not (do) assume that unaligned memory references will be handled by
4504 the system.
4506 @end table
4508 @node M68hc1x Options
4509 @subsection M68hc1x Options
4510 @cindex M68hc1x options
4512 These are the @samp{-m} options defined for the 68hc11 and 68hc12
4513 microcontrollers.  The default values for these options depends on 
4514 which style of microcontroller was selected when the compiler was configured;
4515 the defaults for the most common choices are given below.
4517 @table @gcctabopt
4518 @item -m6811
4519 @itemx -m68hc11
4520 Generate output for a 68HC11.  This is the default
4521 when the compiler is configured for 68HC11-based systems.
4523 @item -m6812
4524 @itemx -m68hc12
4525 Generate output for a 68HC12.  This is the default
4526 when the compiler is configured for 68HC12-based systems.
4528 @item -mauto-incdec
4529 Enable the use of 68HC12 pre and post auto-increment and auto-decrement
4530 addressing modes.
4532 @item -mshort
4533 Consider type @code{int} to be 16 bits wide, like @code{short int}.
4535 @item -msoft-reg-count=@var{count}
4536 Specify the number of pseudo-soft registers which are used for the
4537 code generation.  The maximum number is 32.  Using more pseudo-soft
4538 register may or may not result in better code depending on the program.
4539 The default is 4 for 68HC11 and 2 for 68HC12.
4541 @end table
4543 @node VAX Options
4544 @subsection VAX Options
4545 @cindex VAX options
4547 These @samp{-m} options are defined for the Vax:
4549 @table @gcctabopt
4550 @item -munix
4551 Do not output certain jump instructions (@code{aobleq} and so on)
4552 that the Unix assembler for the Vax cannot handle across long
4553 ranges.
4555 @item -mgnu
4556 Do output those jump instructions, on the assumption that you
4557 will assemble with the GNU assembler.
4559 @item -mg
4560 Output code for g-format floating point numbers instead of d-format.
4561 @end table
4563 @node SPARC Options
4564 @subsection SPARC Options
4565 @cindex SPARC options
4567 These @samp{-m} switches are supported on the SPARC:
4569 @table @gcctabopt
4570 @item -mno-app-regs
4571 @itemx -mapp-regs
4572 Specify @samp{-mapp-regs} to generate output using the global registers
4573 2 through 4, which the SPARC SVR4 ABI reserves for applications.  This
4574 is the default.
4576 To be fully SVR4 ABI compliant at the cost of some performance loss,
4577 specify @samp{-mno-app-regs}.  You should compile libraries and system
4578 software with this option.
4580 @item -mfpu
4581 @itemx -mhard-float
4582 Generate output containing floating point instructions.  This is the
4583 default.
4585 @item -mno-fpu
4586 @itemx -msoft-float
4587 Generate output containing library calls for floating point.
4588 @strong{Warning:} the requisite libraries are not available for all SPARC
4589 targets.  Normally the facilities of the machine's usual C compiler are
4590 used, but this cannot be done directly in cross-compilation.  You must make
4591 your own arrangements to provide suitable library functions for
4592 cross-compilation.  The embedded targets @samp{sparc-*-aout} and
4593 @samp{sparclite-*-*} do provide software floating point support.
4595 @samp{-msoft-float} changes the calling convention in the output file;
4596 therefore, it is only useful if you compile @emph{all} of a program with
4597 this option.  In particular, you need to compile @file{libgcc.a}, the
4598 library that comes with GCC, with @samp{-msoft-float} in order for
4599 this to work.
4601 @item -mhard-quad-float
4602 Generate output containing quad-word (long double) floating point
4603 instructions.
4605 @item -msoft-quad-float
4606 Generate output containing library calls for quad-word (long double)
4607 floating point instructions.  The functions called are those specified
4608 in the SPARC ABI.  This is the default.
4610 As of this writing, there are no sparc implementations that have hardware
4611 support for the quad-word floating point instructions.  They all invoke
4612 a trap handler for one of these instructions, and then the trap handler
4613 emulates the effect of the instruction.  Because of the trap handler overhead,
4614 this is much slower than calling the ABI library routines.  Thus the
4615 @samp{-msoft-quad-float} option is the default.
4617 @item -mno-epilogue
4618 @itemx -mepilogue
4619 With @samp{-mepilogue} (the default), the compiler always emits code for
4620 function exit at the end of each function.  Any function exit in
4621 the middle of the function (such as a return statement in C) will
4622 generate a jump to the exit code at the end of the function.
4624 With @samp{-mno-epilogue}, the compiler tries to emit exit code inline
4625 at every function exit.
4627 @item -mno-flat
4628 @itemx -mflat
4629 With @samp{-mflat}, the compiler does not generate save/restore instructions
4630 and will use a "flat" or single register window calling convention.
4631 This model uses %i7 as the frame pointer and is compatible with the normal
4632 register window model.  Code from either may be intermixed.
4633 The local registers and the input registers (0-5) are still treated as
4634 "call saved" registers and will be saved on the stack as necessary.
4636 With @samp{-mno-flat} (the default), the compiler emits save/restore
4637 instructions (except for leaf functions) and is the normal mode of operation.
4639 @item -mno-unaligned-doubles
4640 @itemx -munaligned-doubles
4641 Assume that doubles have 8 byte alignment.  This is the default.
4643 With @samp{-munaligned-doubles}, GCC assumes that doubles have 8 byte
4644 alignment only if they are contained in another type, or if they have an
4645 absolute address.  Otherwise, it assumes they have 4 byte alignment.
4646 Specifying this option avoids some rare compatibility problems with code
4647 generated by other compilers.  It is not the default because it results
4648 in a performance loss, especially for floating point code.
4650 @item -mno-faster-structs
4651 @itemx -mfaster-structs
4652 With @samp{-mfaster-structs}, the compiler assumes that structures
4653 should have 8 byte alignment.  This enables the use of pairs of
4654 @code{ldd} and @code{std} instructions for copies in structure
4655 assignment, in place of twice as many @code{ld} and @code{st} pairs.
4656 However, the use of this changed alignment directly violates the Sparc
4657 ABI.  Thus, it's intended only for use on targets where the developer
4658 acknowledges that their resulting code will not be directly in line with
4659 the rules of the ABI.
4661 @item -mv8
4662 @itemx -msparclite
4663 These two options select variations on the SPARC architecture.
4665 By default (unless specifically configured for the Fujitsu SPARClite),
4666 GCC generates code for the v7 variant of the SPARC architecture.
4668 @samp{-mv8} will give you SPARC v8 code.  The only difference from v7
4669 code is that the compiler emits the integer multiply and integer
4670 divide instructions which exist in SPARC v8 but not in SPARC v7.
4672 @samp{-msparclite} will give you SPARClite code.  This adds the integer
4673 multiply, integer divide step and scan (@code{ffs}) instructions which
4674 exist in SPARClite but not in SPARC v7.
4676 These options are deprecated and will be deleted in a future GCC release.
4677 They have been replaced with @samp{-mcpu=xxx}.
4679 @item -mcypress
4680 @itemx -msupersparc
4681 These two options select the processor for which the code is optimised.
4683 With @samp{-mcypress} (the default), the compiler optimizes code for the
4684 Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx series.
4685 This is also appropriate for the older SparcStation 1, 2, IPX etc.
4687 With @samp{-msupersparc} the compiler optimizes code for the SuperSparc cpu, as
4688 used in the SparcStation 10, 1000 and 2000 series. This flag also enables use
4689 of the full SPARC v8 instruction set.
4691 These options are deprecated and will be deleted in a future GCC release.
4692 They have been replaced with @samp{-mcpu=xxx}.
4694 @item -mcpu=@var{cpu_type}
4695 Set the instruction set, register set, and instruction scheduling parameters
4696 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
4697 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
4698 @samp{hypersparc}, @samp{sparclite86x}, @samp{f930}, @samp{f934},
4699 @samp{sparclet}, @samp{tsc701}, @samp{v9}, and @samp{ultrasparc}.
4701 Default instruction scheduling parameters are used for values that select
4702 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
4703 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
4705 Here is a list of each supported architecture and their supported
4706 implementations.
4708 @smallexample
4709     v7:             cypress
4710     v8:             supersparc, hypersparc
4711     sparclite:      f930, f934, sparclite86x
4712     sparclet:       tsc701
4713     v9:             ultrasparc
4714 @end smallexample
4716 @item -mtune=@var{cpu_type}
4717 Set the instruction scheduling parameters for machine type
4718 @var{cpu_type}, but do not set the instruction set or register set that the
4719 option @samp{-mcpu=}@var{cpu_type} would.
4721 The same values for @samp{-mcpu=}@var{cpu_type} are used for
4722 @samp{-mtune=}@*@var{cpu_type}, though the only useful values are those that
4723 select a particular cpu implementation: @samp{cypress}, @samp{supersparc},
4724 @samp{hypersparc}, @samp{f930}, @samp{f934}, @samp{sparclite86x},
4725 @samp{tsc701}, @samp{ultrasparc}.
4727 @end table
4729 These @samp{-m} switches are supported in addition to the above
4730 on the SPARCLET processor.
4732 @table @gcctabopt
4733 @item -mlittle-endian
4734 Generate code for a processor running in little-endian mode.
4736 @item -mlive-g0
4737 Treat register @code{%g0} as a normal register.
4738 GCC will continue to clobber it as necessary but will not assume
4739 it always reads as 0.
4741 @item -mbroken-saverestore
4742 Generate code that does not use non-trivial forms of the @code{save} and
4743 @code{restore} instructions.  Early versions of the SPARCLET processor do
4744 not correctly handle @code{save} and @code{restore} instructions used with
4745 arguments.  They correctly handle them used without arguments.  A @code{save}
4746 instruction used without arguments increments the current window pointer
4747 but does not allocate a new stack frame.  It is assumed that the window
4748 overflow trap handler will properly handle this case as will interrupt
4749 handlers.
4750 @end table
4752 These @samp{-m} switches are supported in addition to the above
4753 on SPARC V9 processors in 64 bit environments.
4755 @table @gcctabopt
4756 @item -mlittle-endian
4757 Generate code for a processor running in little-endian mode.
4759 @item -m32
4760 @itemx -m64
4761 Generate code for a 32 bit or 64 bit environment.
4762 The 32 bit environment sets int, long and pointer to 32 bits.
4763 The 64 bit environment sets int to 32 bits and long and pointer
4764 to 64 bits.
4766 @item -mcmodel=medlow
4767 Generate code for the Medium/Low code model: the program must be linked
4768 in the low 32 bits of the address space.  Pointers are 64 bits.
4769 Programs can be statically or dynamically linked.
4771 @item -mcmodel=medmid
4772 Generate code for the Medium/Middle code model: the program must be linked
4773 in the low 44 bits of the address space, the text segment must be less than
4774 2G bytes, and data segment must be within 2G of the text segment.
4775 Pointers are 64 bits.
4777 @item -mcmodel=medany
4778 Generate code for the Medium/Anywhere code model: the program may be linked
4779 anywhere in the address space, the text segment must be less than
4780 2G bytes, and data segment must be within 2G of the text segment.
4781 Pointers are 64 bits.
4783 @item -mcmodel=embmedany
4784 Generate code for the Medium/Anywhere code model for embedded systems:
4785 assume a 32 bit text and a 32 bit data segment, both starting anywhere
4786 (determined at link time).  Register %g4 points to the base of the
4787 data segment.  Pointers still 64 bits.
4788 Programs are statically linked, PIC is not supported.
4790 @item -mstack-bias
4791 @itemx -mno-stack-bias
4792 With @samp{-mstack-bias}, GCC assumes that the stack pointer, and
4793 frame pointer if present, are offset by -2047 which must be added back
4794 when making stack frame references.
4795 Otherwise, assume no such offset is present.
4796 @end table
4798 @node Convex Options
4799 @subsection Convex Options
4800 @cindex Convex options
4802 These @samp{-m} options are defined for Convex:
4804 @table @gcctabopt
4805 @item -mc1
4806 Generate output for C1.  The code will run on any Convex machine.
4807 The preprocessor symbol @code{__convex__c1__} is defined.
4809 @item -mc2
4810 Generate output for C2.  Uses instructions not available on C1.
4811 Scheduling and other optimizations are chosen for max performance on C2.
4812 The preprocessor symbol @code{__convex_c2__} is defined.
4814 @item -mc32
4815 Generate output for C32xx.  Uses instructions not available on C1.
4816 Scheduling and other optimizations are chosen for max performance on C32.
4817 The preprocessor symbol @code{__convex_c32__} is defined.
4819 @item -mc34
4820 Generate output for C34xx.  Uses instructions not available on C1.
4821 Scheduling and other optimizations are chosen for max performance on C34.
4822 The preprocessor symbol @code{__convex_c34__} is defined.
4824 @item -mc38
4825 Generate output for C38xx.  Uses instructions not available on C1.
4826 Scheduling and other optimizations are chosen for max performance on C38.
4827 The preprocessor symbol @code{__convex_c38__} is defined.
4829 @item -margcount
4830 Generate code which puts an argument count in the word preceding each
4831 argument list.  This is compatible with regular CC, and a few programs
4832 may need the argument count word.  GDB and other source-level debuggers
4833 do not need it; this info is in the symbol table.
4835 @item -mnoargcount
4836 Omit the argument count word.  This is the default.
4838 @item -mvolatile-cache
4839 Allow volatile references to be cached.  This is the default.
4841 @item -mvolatile-nocache
4842 Volatile references bypass the data cache, going all the way to memory.
4843 This is only needed for multi-processor code that does not use standard
4844 synchronization instructions.  Making non-volatile references to volatile
4845 locations will not necessarily work.
4847 @item -mlong32
4848 Type long is 32 bits, the same as type int.  This is the default.
4850 @item -mlong64
4851 Type long is 64 bits, the same as type long long.  This option is useless,
4852 because no library support exists for it.
4853 @end table
4855 @node AMD29K Options
4856 @subsection AMD29K Options
4857 @cindex AMD29K options
4859 These @samp{-m} options are defined for the AMD Am29000:
4861 @table @gcctabopt
4862 @item -mdw
4863 @kindex -mdw
4864 @cindex DW bit (29k)
4865 Generate code that assumes the @code{DW} bit is set, i.e., that byte and
4866 halfword operations are directly supported by the hardware.  This is the
4867 default.
4869 @item -mndw
4870 @kindex -mndw
4871 Generate code that assumes the @code{DW} bit is not set.
4873 @item -mbw
4874 @kindex -mbw
4875 @cindex byte writes (29k)
4876 Generate code that assumes the system supports byte and halfword write
4877 operations.  This is the default.
4879 @item -mnbw
4880 @kindex -mnbw
4881 Generate code that assumes the systems does not support byte and
4882 halfword write operations.  @samp{-mnbw} implies @samp{-mndw}.
4884 @item -msmall
4885 @kindex -msmall
4886 @cindex memory model (29k)
4887 Use a small memory model that assumes that all function addresses are
4888 either within a single 256 KB segment or at an absolute address of less
4889 than 256k.  This allows the @code{call} instruction to be used instead
4890 of a @code{const}, @code{consth}, @code{calli} sequence.
4892 @item -mnormal
4893 @kindex -mnormal
4894 Use the normal memory model: Generate @code{call} instructions only when
4895 calling functions in the same file and @code{calli} instructions
4896 otherwise.  This works if each file occupies less than 256 KB but allows
4897 the entire executable to be larger than 256 KB.  This is the default.
4899 @item -mlarge
4900 Always use @code{calli} instructions.  Specify this option if you expect
4901 a single file to compile into more than 256 KB of code.
4903 @item -m29050
4904 @kindex -m29050
4905 @cindex processor selection (29k)
4906 Generate code for the Am29050.
4908 @item -m29000
4909 @kindex -m29000
4910 Generate code for the Am29000.  This is the default.
4912 @item -mkernel-registers
4913 @kindex -mkernel-registers
4914 @cindex kernel and user registers (29k)
4915 Generate references to registers @code{gr64-gr95} instead of to
4916 registers @code{gr96-gr127}.  This option can be used when compiling
4917 kernel code that wants a set of global registers disjoint from that used
4918 by user-mode code.
4920 Note that when this option is used, register names in @samp{-f} flags
4921 must use the normal, user-mode, names.
4923 @item -muser-registers
4924 @kindex -muser-registers
4925 Use the normal set of global registers, @code{gr96-gr127}.  This is the
4926 default.
4928 @item -mstack-check
4929 @itemx -mno-stack-check
4930 @kindex -mstack-check
4931 @cindex stack checks (29k)
4932 Insert (or do not insert) a call to @code{__msp_check} after each stack
4933 adjustment.  This is often used for kernel code.
4935 @item -mstorem-bug
4936 @itemx -mno-storem-bug
4937 @kindex -mstorem-bug
4938 @cindex storem bug (29k)
4939 @samp{-mstorem-bug} handles 29k processors which cannot handle the
4940 separation of a mtsrim insn and a storem instruction (most 29000 chips
4941 to date, but not the 29050).
4943 @item -mno-reuse-arg-regs
4944 @itemx -mreuse-arg-regs
4945 @kindex -mreuse-arg-regs
4946 @samp{-mno-reuse-arg-regs} tells the compiler to only use incoming argument
4947 registers for copying out arguments.  This helps detect calling a function
4948 with fewer arguments than it was declared with.
4950 @item -mno-impure-text
4951 @itemx -mimpure-text
4952 @kindex -mimpure-text
4953 @samp{-mimpure-text}, used in addition to @samp{-shared}, tells the compiler to
4954 not pass @samp{-assert pure-text} to the linker when linking a shared object.
4956 @item -msoft-float
4957 @kindex -msoft-float
4958 Generate output containing library calls for floating point.
4959 @strong{Warning:} the requisite libraries are not part of GCC.
4960 Normally the facilities of the machine's usual C compiler are used, but
4961 this can't be done directly in cross-compilation.  You must make your
4962 own arrangements to provide suitable library functions for
4963 cross-compilation.
4965 @item -mno-multm
4966 @kindex -mno-multm
4967 Do not generate multm or multmu instructions.  This is useful for some embedded
4968 systems which do not have trap handlers for these instructions.
4969 @end table
4971 @node ARM Options
4972 @subsection ARM Options
4973 @cindex ARM options
4975 These @samp{-m} options are defined for Advanced RISC Machines (ARM)
4976 architectures:
4978 @table @gcctabopt
4979 @item -mapcs-frame
4980 @kindex -mapcs-frame
4981 Generate a stack frame that is compliant with the ARM Procedure Call
4982 Standard for all functions, even if this is not strictly necessary for
4983 correct execution of the code.  Specifying @samp{-fomit-frame-pointer}
4984 with this option will cause the stack frames not to be generated for
4985 leaf functions.  The default is @samp{-mno-apcs-frame}.
4987 @item -mapcs
4988 @kindex -mapcs
4989 This is a synonym for @samp{-mapcs-frame}.
4991 @item -mapcs-26
4992 @kindex -mapcs-26
4993 Generate code for a processor running with a 26-bit program counter,
4994 and conforming to the function calling standards for the APCS 26-bit
4995 option.  This option replaces the @samp{-m2} and @samp{-m3} options
4996 of previous releases of the compiler.
4998 @item -mapcs-32
4999 @kindex -mapcs-32
5000 Generate code for a processor running with a 32-bit program counter,
5001 and conforming to the function calling standards for the APCS 32-bit
5002 option.  This option replaces the @samp{-m6} option of previous releases
5003 of the compiler.
5005 @item -mapcs-stack-check
5006 @kindex -mapcs-stack-check
5007 @kindex -mno-apcs-stack-check
5008 Generate code to check the amount of stack space available upon entry to
5009 every function (that actually uses some stack space).  If there is
5010 insufficient space available then either the function
5011 @samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
5012 called, depending upon the amount of stack space required.  The run time
5013 system is required to provide these functions.  The default is
5014 @samp{-mno-apcs-stack-check}, since this produces smaller code.
5016 @item -mapcs-float
5017 @kindex -mapcs-float
5018 @kindex -mno-apcs-float
5019 Pass floating point arguments using the float point registers.  This is
5020 one of the variants of the APCS.  This option is recommended if the
5021 target hardware has a floating point unit or if a lot of floating point
5022 arithmetic is going to be performed by the code.  The default is
5023 @samp{-mno-apcs-float}, since integer only code is slightly increased in
5024 size if @samp{-mapcs-float} is used.
5026 @item -mapcs-reentrant
5027 @kindex -mapcs-reentrant
5028 @kindex -mno-apcs-reentrant
5029 Generate reentrant, position independent code.  This is the equivalent
5030 to specifying the @samp{-fpic} option.  The default is
5031 @samp{-mno-apcs-reentrant}.
5033 @item -mthumb-interwork
5034 @kindex -mthumb-interwork
5035 @kindex -mno-thumb-interwork
5036 Generate code which supports calling between the ARM and THUMB
5037 instruction sets.  Without this option the two instruction sets cannot
5038 be reliably used inside one program.  The default is
5039 @samp{-mno-thumb-interwork}, since slightly larger code is generated
5040 when @samp{-mthumb-interwork} is specified.
5042 @item -mno-sched-prolog
5043 @kindex -mno-sched-prolog
5044 @kindex -msched-prolog
5045 Prevent the reordering of instructions in the function prolog, or the
5046 merging of those instruction with the instructions in the function's
5047 body.  This means that all functions will start with a recognizable set
5048 of instructions (or in fact one of a choice from a small set of
5049 different function prologues), and this information can be used to
5050 locate the start if functions inside an executable piece of code.  The
5051 default is @samp{-msched-prolog}.
5053 @item -mhard-float
5054 Generate output containing floating point instructions.  This is the
5055 default.
5057 @item -msoft-float
5058 Generate output containing library calls for floating point.
5059 @strong{Warning:} the requisite libraries are not available for all ARM
5060 targets.  Normally the facilities of the machine's usual C compiler are
5061 used, but this cannot be done directly in cross-compilation.  You must make
5062 your own arrangements to provide suitable library functions for
5063 cross-compilation.
5065 @samp{-msoft-float} changes the calling convention in the output file;
5066 therefore, it is only useful if you compile @emph{all} of a program with
5067 this option.  In particular, you need to compile @file{libgcc.a}, the
5068 library that comes with GCC, with @samp{-msoft-float} in order for
5069 this to work.
5071 @item -mlittle-endian
5072 Generate code for a processor running in little-endian mode.  This is
5073 the default for all standard configurations.
5075 @item -mbig-endian
5076 Generate code for a processor running in big-endian mode; the default is
5077 to compile code for a little-endian processor.
5079 @item -mwords-little-endian
5080 This option only applies when generating code for big-endian processors.
5081 Generate code for a little-endian word order but a big-endian byte
5082 order.  That is, a byte order of the form @samp{32107654}.  Note: this
5083 option should only be used if you require compatibility with code for
5084 big-endian ARM processors generated by versions of the compiler prior to
5085 2.8.
5087 @item -malignment-traps
5088 @kindex -malignment-traps
5089 Generate code that will not trap if the MMU has alignment traps enabled.
5090 On ARM architectures prior to ARMv4, there were no instructions to
5091 access half-word objects stored in memory.  However, when reading from
5092 memory a feature of the ARM architecture allows a word load to be used,
5093 even if the address is unaligned, and the processor core will rotate the
5094 data as it is being loaded.  This option tells the compiler that such
5095 misaligned accesses will cause a MMU trap and that it should instead
5096 synthesise the access as a series of byte accesses.  The compiler can
5097 still use word accesses to load half-word data if it knows that the
5098 address is aligned to a word boundary.
5100 This option is ignored when compiling for ARM architecture 4 or later,
5101 since these processors have instructions to directly access half-word
5102 objects in memory. 
5103         
5104 @item -mno-alignment-traps
5105 @kindex -mno-alignment-traps
5106 Generate code that assumes that the MMU will not trap unaligned
5107 accesses.  This produces better code when the target instruction set
5108 does not have half-word memory operations (implementations prior to
5109 ARMv4). 
5111 Note that you cannot use this option to access unaligned word objects,
5112 since the processor will only fetch one 32-bit aligned object from
5113 memory. 
5115 The default setting for most targets is -mno-alignment-traps, since
5116 this produces better code when there are no half-word memory
5117 instructions available. 
5119 @item -mshort-load-bytes
5120 @kindex -mshort-load-bytes
5121 This is a deprecated alias for @samp{-malignment-traps}.
5123 @item -mno-short-load-bytes
5124 @kindex -mno-short-load-bytes
5125 This is a deprecated alias for @samp{-mno-alignment-traps}.
5127 @item -mshort-load-words
5128 @kindex -mshort-load-words
5129 This is a deprecated alias for @samp{-mno-alignment-traps}.
5131 @item -mno-short-load-words
5132 @kindex -mno-short-load-words
5133 This is a deprecated alias for @samp{-malignment-traps}.
5135 @item -mbsd
5136 @kindex -mbsd
5137 This option only applies to RISC iX.  Emulate the native BSD-mode
5138 compiler.  This is the default if @samp{-ansi} is not specified.
5140 @item -mxopen
5141 @kindex -mxopen
5142 This option only applies to RISC iX.  Emulate the native X/Open-mode
5143 compiler.
5145 @item -mno-symrename
5146 @kindex -mno-symrename
5147 This option only applies to RISC iX.  Do not run the assembler
5148 post-processor, @samp{symrename}, after code has been assembled.
5149 Normally it is necessary to modify some of the standard symbols in
5150 preparation for linking with the RISC iX C library; this option
5151 suppresses this pass.  The post-processor is never run when the
5152 compiler is built for cross-compilation.
5154 @item -mcpu=<name>
5155 @kindex -mcpu=
5156 This specifies the name of the target ARM processor.  GCC uses this name
5157 to determine what kind of instructions it can use when generating
5158 assembly code.  Permissible names are: arm2, arm250, arm3, arm6, arm60,
5159 arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di, arm7dmi,
5160 arm70, arm700, arm700i, arm710, arm710c, arm7100, arm7500, arm7500fe,
5161 arm7tdmi, arm8, strongarm, strongarm110, strongarm1100, arm8, arm810,
5162 arm9, arm920, arm920t, arm9tdmi.
5164 @itemx -mtune=<name>
5165 @kindex -mtune=
5166 This option is very similar to the @samp{-mcpu=} option, except that
5167 instead of specifying the actual target processor type, and hence
5168 restricting which instructions can be used, it specifies that GCC should
5169 tune the performance of the code as if the target were of the type
5170 specified in this option, but still choosing the instructions that it
5171 will generate based on the cpu specified by a @samp{-mcpu=} option.
5172 For some arm implementations better performance can be obtained by using
5173 this option.
5175 @item -march=<name>
5176 @kindex -march=
5177 This specifies the name of the target ARM architecture.  GCC uses this
5178 name to determine what kind of instructions it can use when generating
5179 assembly code.  This option can be used in conjunction with or instead
5180 of the @samp{-mcpu=} option.  Permissible names are: armv2, armv2a,
5181 armv3, armv3m, armv4, armv4t, armv5.
5183 @item -mfpe=<number>
5184 @itemx -mfp=<number>
5185 @kindex -mfpe=
5186 @kindex -mfp=
5187 This specifies the version of the floating point emulation available on
5188 the target.  Permissible values are 2 and 3.  @samp{-mfp=} is a synonym
5189 for @samp{-mfpe=} to support older versions of GCC.
5191 @item -mstructure-size-boundary=<n>
5192 @kindex -mstructure-size-boundary
5193 The size of all structures and unions will be rounded up to a multiple
5194 of the number of bits set by this option.  Permissible values are 8 and
5195 32.  The default value varies for different toolchains.  For the COFF
5196 targeted toolchain the default value is 8.  Specifying the larger number
5197 can produce faster, more efficient code, but can also increase the size
5198 of the program.  The two values are potentially incompatible.  Code
5199 compiled with one value cannot necessarily expect to work with code or
5200 libraries compiled with the other value, if they exchange information
5201 using structures or unions.  Programmers are encouraged to use the 32
5202 value as future versions of the toolchain may default to this value.
5204 @item -mabort-on-noreturn
5205 @kindex -mabort-on-noreturn
5206 @kindex -mnoabort-on-noreturn
5207 Generate a call to the function abort at the end of a noreturn function.
5208 It will be executed if the function tries to return.
5210 @item -mlong-calls
5211 @itemx -mno-long-calls
5212 Tells the compiler to perform function calls by first loading the
5213 address of the function into a register and then performing a subroutine
5214 call on this register.  This switch is needed if the target function
5215 will lie outside of the 64 megabyte addressing range of the offset based
5216 version of subroutine call instruction. 
5218 Even if this switch is enabled, not all function calls will be turned
5219 into long calls.  The heuristic is that static functions, functions
5220 which have the @samp{short-call} attribute, functions that are inside
5221 the scope of a @samp{#pragma no_long_calls} directive and functions whose
5222 definitions have already been compiled within the current compilation
5223 unit, will not be turned into long calls.  The exception to this rule is
5224 that weak function definitions, functions with the @samp{long-call}
5225 attribute or the @samp{section} attribute, and functions that are within
5226 the scope of a @samp{#pragma long_calls} directive, will always be
5227 turned into long calls.
5229 This feature is not enabled by default.  Specifying
5230 @samp{--no-long-calls} will restore the default behaviour, as will
5231 placing the function calls within the scope of a @samp{#pragma
5232 long_calls_off} directive.  Note these switches have no effect on how
5233 the compiler generates code to handle function calls via function
5234 pointers.  
5236 @item -mnop-fun-dllimport
5237 @kindex -mnop-fun-dllimport
5238 Disable the support for the @emph{dllimport} attribute.
5240 @item -msingle-pic-base
5241 @kindex -msingle-pic-base
5242 Treat the register used for PIC addressing as read-only, rather than
5243 loading it in the prologue for each function.  The run-time system is
5244 responsible for initialising this register with an appropriate value
5245 before execution begins.
5247 @item -mpic-register=<reg>
5248 @kindex -mpic-register=
5249 Specify the register to be used for PIC addressing.  The default is R10
5250 unless stack-checking is enabled, when R9 is used.
5252 @end table
5254 @node Thumb Options
5255 @subsection Thumb Options
5256 @cindex Thumb Options
5258 @table @gcctabopt
5260 @item -mthumb-interwork
5261 @kindex -mthumb-interwork
5262 @kindex -mno-thumb-interwork
5263 Generate code which supports calling between the THUMB and ARM
5264 instruction sets.  Without this option the two instruction sets cannot
5265 be reliably used inside one program.  The default is
5266 @samp{-mno-thumb-interwork}, since slightly smaller code is generated
5267 with this option.
5269 @item -mtpcs-frame
5270 @kindex -mtpcs-frame
5271 @kindex -mno-tpcs-frame
5272 Generate a stack frame that is compliant with the Thumb Procedure Call
5273 Standard for all non-leaf functions.  (A leaf function is one that does
5274 not call any other functions).  The default is @samp{-mno-apcs-frame}. 
5276 @item -mtpcs-leaf-frame
5277 @kindex -mtpcs-leaf-frame
5278 @kindex -mno-tpcs-leaf-frame
5279 Generate a stack frame that is compliant with the Thumb Procedure Call
5280 Standard for all leaf functions.  (A leaf function is one that does
5281 not call any other functions).  The default is @samp{-mno-apcs-leaf-frame}. 
5283 @item -mlittle-endian
5284 @kindex -mlittle-endian
5285 Generate code for a processor running in little-endian mode.  This is
5286 the default for all standard configurations.
5288 @item -mbig-endian
5289 @kindex -mbig-endian
5290 Generate code for a processor running in big-endian mode.
5292 @item -mstructure-size-boundary=<n>
5293 @kindex -mstructure-size-boundary
5294 The size of all structures and unions will be rounded up to a multiple
5295 of the number of bits set by this option.  Permissible values are 8 and
5296 32.  The default value varies for different toolchains.  For the COFF
5297 targeted toolchain the default value is 8.  Specifying the larger number
5298 can produced faster, more efficient code, but can also increase the size
5299 of the program.  The two values are potentially incompatible.  Code
5300 compiled with one value cannot necessarily expect to work with code or
5301 libraries compiled with the other value, if they exchange information
5302 using structures or unions.  Programmers are encouraged to use the 32
5303 value as future versions of the toolchain may default to this value.
5305 @item -mnop-fun-dllimport
5306 @kindex -mnop-fun-dllimport
5307 Disable the support for the @emph{dllimport} attribute.
5309 @item -mcallee-super-interworking
5310 @kindex -mcallee-super-interworking
5311 Gives all externally visible functions in the file being compiled an ARM
5312 instruction set header which switches to Thumb mode before executing the
5313 rest of the function.  This allows these functions to be called from
5314 non-interworking code.
5316 @item -mcaller-super-interworking
5317 @kindex -mcaller-super-interworking
5318 Allows calls via function pointers (including virtual functions) to
5319 execute correctly regardless of whether the target code has been
5320 compiled for interworking or not.  There is a small overhead in the cost
5321 of executing a function pointer if this option is enabled.
5323 @item -msingle-pic-base
5324 @kindex -msingle-pic-base
5325 Treat the register used for PIC addressing as read-only, rather than
5326 loading it in the prologue for each function.  The run-time system is
5327 responsible for initialising this register with an appropriate value
5328 before execution begins.
5330 @item -mpic-register=<reg>
5331 @kindex -mpic-register=
5332 Specify the register to be used for PIC addressing.  The default is R10.
5334 @end table
5336 @node MN10200 Options
5337 @subsection MN10200 Options
5338 @cindex MN10200 options
5339 These @samp{-m} options are defined for Matsushita MN10200 architectures:
5340 @table @gcctabopt
5342 @item -mrelax
5343 Indicate to the linker that it should perform a relaxation optimization pass
5344 to shorten branches, calls and absolute memory addresses.  This option only
5345 has an effect when used on the command line for the final link step.
5347 This option makes symbolic debugging impossible. 
5348 @end table
5350 @node MN10300 Options
5351 @subsection MN10300 Options
5352 @cindex MN10300 options
5353 These @samp{-m} options are defined for Matsushita MN10300 architectures:
5355 @table @gcctabopt
5356 @item -mmult-bug
5357 Generate code to avoid bugs in the multiply instructions for the MN10300
5358 processors.  This is the default.
5360 @item -mno-mult-bug
5361 Do not generate code to avoid bugs in the multiply instructions for the
5362 MN10300 processors.
5364 @item -mam33
5365 Generate code which uses features specific to the AM33 processor.
5367 @item -mno-am33
5368 Do not generate code which uses features specific to the AM33 processor.  This
5369 is the default.
5371 @item -mrelax
5372 Indicate to the linker that it should perform a relaxation optimization pass
5373 to shorten branches, calls and absolute memory addresses.  This option only
5374 has an effect when used on the command line for the final link step.
5376 This option makes symbolic debugging impossible. 
5377 @end table
5380 @node M32R/D Options
5381 @subsection M32R/D Options
5382 @cindex M32R/D options
5384 These @samp{-m} options are defined for Mitsubishi M32R/D architectures:
5386 @table @gcctabopt
5387 @item -mcode-model=small
5388 Assume all objects live in the lower 16MB of memory (so that their addresses
5389 can be loaded with the @code{ld24} instruction), and assume all subroutines
5390 are reachable with the @code{bl} instruction.
5391 This is the default.
5393 The addressability of a particular object can be set with the
5394 @code{model} attribute.
5396 @item -mcode-model=medium
5397 Assume objects may be anywhere in the 32 bit address space (the compiler
5398 will generate @code{seth/add3} instructions to load their addresses), and
5399 assume all subroutines are reachable with the @code{bl} instruction.
5401 @item -mcode-model=large
5402 Assume objects may be anywhere in the 32 bit address space (the compiler
5403 will generate @code{seth/add3} instructions to load their addresses), and
5404 assume subroutines may not be reachable with the @code{bl} instruction
5405 (the compiler will generate the much slower @code{seth/add3/jl}
5406 instruction sequence).
5408 @item -msdata=none
5409 Disable use of the small data area.  Variables will be put into
5410 one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
5411 @code{section} attribute has been specified).
5412 This is the default.
5414 The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
5415 Objects may be explicitly put in the small data area with the
5416 @code{section} attribute using one of these sections.
5418 @item -msdata=sdata
5419 Put small global and static data in the small data area, but do not
5420 generate special code to reference them.
5422 @item -msdata=use
5423 Put small global and static data in the small data area, and generate
5424 special instructions to reference them.
5426 @item -G @var{num}
5427 @cindex smaller data references
5428 Put global and static objects less than or equal to @var{num} bytes
5429 into the small data or bss sections instead of the normal data or bss
5430 sections.  The default value of @var{num} is 8.
5431 The @samp{-msdata} option must be set to one of @samp{sdata} or @samp{use}
5432 for this option to have any effect.
5434 All modules should be compiled with the same @samp{-G @var{num}} value.
5435 Compiling with different values of @var{num} may or may not work; if it
5436 doesn't the linker will give an error message - incorrect code will not be
5437 generated.
5439 @end table
5441 @node M88K Options
5442 @subsection M88K Options
5443 @cindex M88k options
5445 These @samp{-m} options are defined for Motorola 88k architectures:
5447 @table @gcctabopt
5448 @item -m88000
5449 @kindex -m88000
5450 Generate code that works well on both the m88100 and the
5451 m88110.
5453 @item -m88100
5454 @kindex -m88100
5455 Generate code that works best for the m88100, but that also
5456 runs on the m88110.
5458 @item -m88110
5459 @kindex -m88110
5460 Generate code that works best for the m88110, and may not run
5461 on the m88100.
5463 @item -mbig-pic
5464 @kindex -mbig-pic
5465 Obsolete option to be removed from the next revision.
5466 Use @samp{-fPIC}.
5468 @item -midentify-revision
5469 @kindex -midentify-revision
5470 @kindex ident
5471 @cindex identifying source, compiler (88k)
5472 Include an @code{ident} directive in the assembler output recording the
5473 source file name, compiler name and version, timestamp, and compilation
5474 flags used.
5476 @item -mno-underscores
5477 @kindex -mno-underscores
5478 @cindex underscores, avoiding (88k)
5479 In assembler output, emit symbol names without adding an underscore
5480 character at the beginning of each name.  The default is to use an
5481 underscore as prefix on each name.
5483 @item -mocs-debug-info
5484 @itemx -mno-ocs-debug-info
5485 @kindex -mocs-debug-info
5486 @kindex -mno-ocs-debug-info
5487 @cindex OCS (88k)
5488 @cindex debugging, 88k OCS
5489 Include (or omit) additional debugging information (about registers used
5490 in each stack frame) as specified in the 88open Object Compatibility
5491 Standard, ``OCS''.  This extra information allows debugging of code that
5492 has had the frame pointer eliminated.  The default for DG/UX, SVr4, and
5493 Delta 88 SVr3.2 is to include this information; other 88k configurations
5494 omit this information by default.
5496 @item -mocs-frame-position
5497 @kindex -mocs-frame-position
5498 @cindex register positions in frame (88k)
5499 When emitting COFF debugging information for automatic variables and
5500 parameters stored on the stack, use the offset from the canonical frame
5501 address, which is the stack pointer (register 31) on entry to the
5502 function.  The DG/UX, SVr4, Delta88 SVr3.2, and BCS configurations use
5503 @samp{-mocs-frame-position}; other 88k configurations have the default
5504 @samp{-mno-ocs-frame-position}.
5506 @item -mno-ocs-frame-position
5507 @kindex -mno-ocs-frame-position
5508 @cindex register positions in frame (88k)
5509 When emitting COFF debugging information for automatic variables and
5510 parameters stored on the stack, use the offset from the frame pointer
5511 register (register 30).  When this option is in effect, the frame
5512 pointer is not eliminated when debugging information is selected by the
5513 -g switch.
5515 @item -moptimize-arg-area
5516 @itemx -mno-optimize-arg-area
5517 @kindex -moptimize-arg-area
5518 @kindex -mno-optimize-arg-area
5519 @cindex arguments in frame (88k)
5520 Control how function arguments are stored in stack frames.
5521 @samp{-moptimize-arg-area} saves space by optimizing them, but this
5522 conflicts with the 88open specifications.  The opposite alternative,
5523 @samp{-mno-optimize-arg-area}, agrees with 88open standards.  By default
5524 GCC does not optimize the argument area.
5526 @item -mshort-data-@var{num}
5527 @kindex -mshort-data-@var{num}
5528 @cindex smaller data references (88k)
5529 @cindex r0-relative references (88k)
5530 Generate smaller data references by making them relative to @code{r0},
5531 which allows loading a value using a single instruction (rather than the
5532 usual two).  You control which data references are affected by
5533 specifying @var{num} with this option.  For example, if you specify
5534 @samp{-mshort-data-512}, then the data references affected are those
5535 involving displacements of less than 512 bytes.
5536 @samp{-mshort-data-@var{num}} is not effective for @var{num} greater
5537 than 64k.
5539 @item -mserialize-volatile
5540 @kindex -mserialize-volatile
5541 @itemx -mno-serialize-volatile
5542 @kindex -mno-serialize-volatile
5543 @cindex sequential consistency on 88k
5544 Do, or don't, generate code to guarantee sequential consistency
5545 of volatile memory references.  By default, consistency is
5546 guaranteed.
5548 The order of memory references made by the MC88110 processor does
5549 not always match the order of the instructions requesting those
5550 references.  In particular, a load instruction may execute before
5551 a preceding store instruction.  Such reordering violates
5552 sequential consistency of volatile memory references, when there
5553 are multiple processors.   When consistency must be guaranteed,
5554 GNU C generates special instructions, as needed, to force
5555 execution in the proper order.
5557 The MC88100 processor does not reorder memory references and so
5558 always provides sequential consistency.  However, by default, GNU
5559 C generates the special instructions to guarantee consistency
5560 even when you use @samp{-m88100}, so that the code may be run on an
5561 MC88110 processor.  If you intend to run your code only on the
5562 MC88100 processor, you may use @samp{-mno-serialize-volatile}.
5564 The extra code generated to guarantee consistency may affect the
5565 performance of your application.  If you know that you can safely
5566 forgo this guarantee, you may use @samp{-mno-serialize-volatile}.
5568 @item -msvr4
5569 @itemx -msvr3
5570 @kindex -msvr4
5571 @kindex -msvr3
5572 @cindex assembler syntax, 88k
5573 @cindex SVr4
5574 Turn on (@samp{-msvr4}) or off (@samp{-msvr3}) compiler extensions
5575 related to System V release 4 (SVr4).  This controls the following:
5577 @enumerate
5578 @item
5579 Which variant of the assembler syntax to emit.
5580 @item
5581 @samp{-msvr4} makes the C preprocessor recognize @samp{#pragma weak}
5582 that is used on System V release 4.
5583 @item
5584 @samp{-msvr4} makes GCC issue additional declaration directives used in
5585 SVr4.
5586 @end enumerate
5588 @samp{-msvr4} is the default for the m88k-motorola-sysv4 and
5589 m88k-dg-dgux m88k configurations. @samp{-msvr3} is the default for all
5590 other m88k configurations.
5592 @item -mversion-03.00
5593 @kindex -mversion-03.00
5594 This option is obsolete, and is ignored.
5595 @c ??? which asm syntax better for GAS?  option there too?
5597 @item -mno-check-zero-division
5598 @itemx -mcheck-zero-division
5599 @kindex -mno-check-zero-division
5600 @kindex -mcheck-zero-division
5601 @cindex zero division on 88k
5602 Do, or don't, generate code to guarantee that integer division by
5603 zero will be detected.  By default, detection is guaranteed.
5605 Some models of the MC88100 processor fail to trap upon integer
5606 division by zero under certain conditions.  By default, when
5607 compiling code that might be run on such a processor, GNU C
5608 generates code that explicitly checks for zero-valued divisors
5609 and traps with exception number 503 when one is detected.  Use of
5610 mno-check-zero-division suppresses such checking for code
5611 generated to run on an MC88100 processor.
5613 GNU C assumes that the MC88110 processor correctly detects all
5614 instances of integer division by zero.  When @samp{-m88110} is
5615 specified, both @samp{-mcheck-zero-division} and
5616 @samp{-mno-check-zero-division} are ignored, and no explicit checks for
5617 zero-valued divisors are generated.
5619 @item -muse-div-instruction
5620 @kindex -muse-div-instruction
5621 @cindex divide instruction, 88k
5622 Use the div instruction for signed integer division on the
5623 MC88100 processor.  By default, the div instruction is not used.
5625 On the MC88100 processor the signed integer division instruction
5626 div) traps to the operating system on a negative operand.  The
5627 operating system transparently completes the operation, but at a
5628 large cost in execution time.  By default, when compiling code
5629 that might be run on an MC88100 processor, GNU C emulates signed
5630 integer division using the unsigned integer division instruction
5631 divu), thereby avoiding the large penalty of a trap to the
5632 operating system.  Such emulation has its own, smaller, execution
5633 cost in both time and space.  To the extent that your code's
5634 important signed integer division operations are performed on two
5635 nonnegative operands, it may be desirable to use the div
5636 instruction directly.
5638 On the MC88110 processor the div instruction (also known as the
5639 divs instruction) processes negative operands without trapping to
5640 the operating system.  When @samp{-m88110} is specified,
5641 @samp{-muse-div-instruction} is ignored, and the div instruction is used
5642 for signed integer division.
5644 Note that the result of dividing INT_MIN by -1 is undefined.  In
5645 particular, the behavior of such a division with and without
5646 @samp{-muse-div-instruction}  may differ.
5648 @item -mtrap-large-shift
5649 @itemx -mhandle-large-shift
5650 @kindex -mtrap-large-shift
5651 @kindex -mhandle-large-shift
5652 @cindex bit shift overflow (88k)
5653 @cindex large bit shifts (88k)
5654 Include code to detect bit-shifts of more than 31 bits; respectively,
5655 trap such shifts or emit code to handle them properly.  By default GCC
5656 makes no special provision for large bit shifts.
5658 @item -mwarn-passed-structs
5659 @kindex -mwarn-passed-structs
5660 @cindex structure passing (88k)
5661 Warn when a function passes a struct as an argument or result.
5662 Structure-passing conventions have changed during the evolution of the C
5663 language, and are often the source of portability problems.  By default,
5664 GCC issues no such warning.
5665 @end table
5667 @node RS/6000 and PowerPC Options
5668 @subsection IBM RS/6000 and PowerPC Options
5669 @cindex RS/6000 and PowerPC Options
5670 @cindex IBM RS/6000 and PowerPC Options
5672 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
5673 @table @gcctabopt
5674 @item -mpower
5675 @itemx -mno-power
5676 @itemx -mpower2
5677 @itemx -mno-power2
5678 @itemx -mpowerpc
5679 @itemx -mno-powerpc
5680 @itemx -mpowerpc-gpopt
5681 @itemx -mno-powerpc-gpopt
5682 @itemx -mpowerpc-gfxopt
5683 @itemx -mno-powerpc-gfxopt
5684 @itemx -mpowerpc64
5685 @itemx -mno-powerpc64
5686 @kindex -mpower
5687 @kindex -mpower2
5688 @kindex -mpowerpc
5689 @kindex -mpowerpc-gpopt
5690 @kindex -mpowerpc-gfxopt
5691 @kindex -mpowerpc64
5692 GCC supports two related instruction set architectures for the
5693 RS/6000 and PowerPC.  The @dfn{POWER} instruction set are those
5694 instructions supported by the @samp{rios} chip set used in the original
5695 RS/6000 systems and the @dfn{PowerPC} instruction set is the
5696 architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
5697 the IBM 4xx microprocessors.
5699 Neither architecture is a subset of the other.  However there is a
5700 large common subset of instructions supported by both.  An MQ
5701 register is included in processors supporting the POWER architecture.
5703 You use these options to specify which instructions are available on the
5704 processor you are using.  The default value of these options is
5705 determined when configuring GCC.  Specifying the
5706 @samp{-mcpu=@var{cpu_type}} overrides the specification of these
5707 options.  We recommend you use the @samp{-mcpu=@var{cpu_type}} option
5708 rather than the options listed above.
5710 The @samp{-mpower} option allows GCC to generate instructions that
5711 are found only in the POWER architecture and to use the MQ register.
5712 Specifying @samp{-mpower2} implies @samp{-power} and also allows GCC
5713 to generate instructions that are present in the POWER2 architecture but
5714 not the original POWER architecture.
5716 The @samp{-mpowerpc} option allows GCC to generate instructions that
5717 are found only in the 32-bit subset of the PowerPC architecture.
5718 Specifying @samp{-mpowerpc-gpopt} implies @samp{-mpowerpc} and also allows
5719 GCC to use the optional PowerPC architecture instructions in the
5720 General Purpose group, including floating-point square root.  Specifying
5721 @samp{-mpowerpc-gfxopt} implies @samp{-mpowerpc} and also allows GCC to
5722 use the optional PowerPC architecture instructions in the Graphics
5723 group, including floating-point select.
5725 The @samp{-mpowerpc64} option allows GCC to generate the additional
5726 64-bit instructions that are found in the full PowerPC64 architecture
5727 and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
5728 @samp{-mno-powerpc64}.
5730 If you specify both @samp{-mno-power} and @samp{-mno-powerpc}, GCC
5731 will use only the instructions in the common subset of both
5732 architectures plus some special AIX common-mode calls, and will not use
5733 the MQ register.  Specifying both @samp{-mpower} and @samp{-mpowerpc}
5734 permits GCC to use any instruction from either architecture and to
5735 allow use of the MQ register; specify this for the Motorola MPC601.
5737 @item -mnew-mnemonics
5738 @itemx -mold-mnemonics
5739 @kindex -mnew-mnemonics
5740 @kindex -mold-mnemonics
5741 Select which mnemonics to use in the generated assembler code.
5742 @samp{-mnew-mnemonics} requests output that uses the assembler mnemonics
5743 defined for the PowerPC architecture, while @samp{-mold-mnemonics}
5744 requests the assembler mnemonics defined for the POWER architecture.
5745 Instructions defined in only one architecture have only one mnemonic;
5746 GCC uses that mnemonic irrespective of which of these options is
5747 specified.
5749 GCC defaults to the mnemonics appropriate for the architecture in
5750 use.  Specifying @samp{-mcpu=@var{cpu_type}} sometimes overrides the
5751 value of these option.  Unless you are building a cross-compiler, you
5752 should normally not specify either @samp{-mnew-mnemonics} or
5753 @samp{-mold-mnemonics}, but should instead accept the default.
5755 @item -mcpu=@var{cpu_type}
5756 @kindex -mcpu
5757 Set architecture type, register usage, choice of mnemonics, and
5758 instruction scheduling parameters for machine type @var{cpu_type}.
5759 Supported values for @var{cpu_type} are @samp{rios}, @samp{rios1},
5760 @samp{rsc}, @samp{rios2}, @samp{rs64a}, @samp{601}, @samp{602},
5761 @samp{603}, @samp{603e}, @samp{604}, @samp{604e}, @samp{620},
5762 @samp{630}, @samp{740}, @samp{750}, @samp{power}, @samp{power2},
5763 @samp{powerpc}, @samp{403}, @samp{505}, @samp{801}, @samp{821},
5764 @samp{823}, and @samp{860} and @samp{common}.  @samp{-mcpu=power},
5765 @samp{-mcpu=power2}, @samp{-mcpu=powerpc}, and @samp{-mcpu=powerpc64}
5766 specify generic POWER, POWER2, pure 32-bit PowerPC (i.e., not MPC601),
5767 and 64-bit PowerPC architecture machine types, with an appropriate,
5768 generic processor model assumed for scheduling purposes.@refill
5770 Specifying any of the following options: 
5771 @samp{-mcpu=rios1}, @samp{-mcpu=rios2}, @samp{-mcpu=rsc},
5772 @samp{-mcpu=power}, or @samp{-mcpu=power2}  
5773 enables the @samp{-mpower} option and disables the @samp{-mpowerpc} option; 
5774 @samp{-mcpu=601} enables both the @samp{-mpower} and @samp{-mpowerpc} options.
5775 All of @samp{-mcpu=rs64a}, @samp{-mcpu=602}, @samp{-mcpu=603},
5776 @samp{-mcpu=603e}, @samp{-mcpu=604}, @samp{-mcpu=620}, @samp{-mcpu=630},
5777 @samp{-mcpu=740}, and @samp{-mcpu=750}
5778 enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.  
5779 Exactly similarly, all of @samp{-mcpu=403},
5780 @samp{-mcpu=505}, @samp{-mcpu=821}, @samp{-mcpu=860} and @samp{-mcpu=powerpc} 
5781 enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.
5782 @samp{-mcpu=common} disables both the 
5783 @samp{-mpower} and @samp{-mpowerpc} options.@refill
5785 AIX versions 4 or greater selects @samp{-mcpu=common} by default, so
5786 that code will operate on all members of the RS/6000 POWER and PowerPC
5787 families.  In that case, GCC will use only the instructions in the
5788 common subset of both architectures plus some special AIX common-mode
5789 calls, and will not use the MQ register.  GCC assumes a generic
5790 processor model for scheduling purposes.
5792 Specifying any of the options @samp{-mcpu=rios1}, @samp{-mcpu=rios2},
5793 @samp{-mcpu=rsc}, @samp{-mcpu=power}, or @samp{-mcpu=power2} also
5794 disables the @samp{new-mnemonics} option.  Specifying @samp{-mcpu=601},
5795 @samp{-mcpu=602}, @samp{-mcpu=603}, @samp{-mcpu=603e}, @samp{-mcpu=604},
5796 @samp{-mcpu=620}, @samp{-mcpu=630}, @samp{-mcpu=403}, @samp{-mcpu=505},
5797 @samp{-mcpu=821}, @samp{-mcpu=860} or @samp{-mcpu=powerpc} also enables
5798 the @samp{new-mnemonics} option.@refill
5800 Specifying @samp{-mcpu=403}, @samp{-mcpu=821}, or @samp{-mcpu=860} also
5801 enables the @samp{-msoft-float} option.
5803 @item -mtune=@var{cpu_type}
5804 Set the instruction scheduling parameters for machine type
5805 @var{cpu_type}, but do not set the architecture type, register usage,
5806 choice of mnemonics like @samp{-mcpu=}@var{cpu_type} would.  The same
5807 values for @var{cpu_type} are used for @samp{-mtune=}@var{cpu_type} as
5808 for @samp{-mcpu=}@var{cpu_type}.  The @samp{-mtune=}@var{cpu_type}
5809 option overrides the @samp{-mcpu=}@var{cpu_type} option in terms of
5810 instruction scheduling parameters.
5812 @item -mfull-toc
5813 @itemx -mno-fp-in-toc
5814 @itemx -mno-sum-in-toc
5815 @itemx -mminimal-toc
5816 @kindex -mminimal-toc
5817 Modify generation of the TOC (Table Of Contents), which is created for
5818 every executable file.  The @samp{-mfull-toc} option is selected by
5819 default.  In that case, GCC will allocate at least one TOC entry for
5820 each unique non-automatic variable reference in your program.  GCC
5821 will also place floating-point constants in the TOC.  However, only
5822 16,384 entries are available in the TOC.
5824 If you receive a linker error message that saying you have overflowed
5825 the available TOC space, you can reduce the amount of TOC space used
5826 with the @samp{-mno-fp-in-toc} and @samp{-mno-sum-in-toc} options.
5827 @samp{-mno-fp-in-toc} prevents GCC from putting floating-point
5828 constants in the TOC and @samp{-mno-sum-in-toc} forces GCC to
5829 generate code to calculate the sum of an address and a constant at
5830 run-time instead of putting that sum into the TOC.  You may specify one
5831 or both of these options.  Each causes GCC to produce very slightly
5832 slower and larger code at the expense of conserving TOC space.
5834 If you still run out of space in the TOC even when you specify both of
5835 these options, specify @samp{-mminimal-toc} instead.  This option causes
5836 GCC to make only one TOC entry for every file.  When you specify this
5837 option, GCC will produce code that is slower and larger but which
5838 uses extremely little TOC space.  You may wish to use this option
5839 only on files that contain less frequently executed code. @refill
5841 @item -maix64
5842 @itemx -maix32
5843 @kindex -maix64
5844 @kindex -maix32
5845 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
5846 @code{long} type, and the infrastructure needed to support them.
5847 Specifying @samp{-maix64} implies @samp{-mpowerpc64} and
5848 @samp{-mpowerpc}, while @samp{-maix32} disables the 64-bit ABI and
5849 implies @samp{-mno-powerpc64}.  GCC defaults to @samp{-maix32}.
5851 @item -mxl-call
5852 @itemx -mno-xl-call
5853 @kindex -mxl-call
5854 On AIX, pass floating-point arguments to prototyped functions beyond the
5855 register save area (RSA) on the stack in addition to argument FPRs.  The
5856 AIX calling convention was extended but not initially documented to
5857 handle an obscure K&R C case of calling a function that takes the
5858 address of its arguments with fewer arguments than declared.  AIX XL
5859 compilers access floating point arguments which do not fit in the
5860 RSA from the stack when a subroutine is compiled without
5861 optimization.  Because always storing floating-point arguments on the
5862 stack is inefficient and rarely needed, this option is not enabled by
5863 default and only is necessary when calling subroutines compiled by AIX
5864 XL compilers without optimization.
5866 @item -mthreads
5867 @kindex -mthreads
5868 Support @dfn{AIX Threads}.  Link an application written to use
5869 @dfn{pthreads} with special libraries and startup code to enable the
5870 application to run.
5872 @item -mpe
5873 @kindex -mpe
5874 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE).  Link an
5875 application written to use message passing with special startup code to
5876 enable the application to run.  The system must have PE installed in the
5877 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
5878 must be overridden with the @samp{-specs=} option to specify the
5879 appropriate directory location.  The Parallel Environment does not
5880 support threads, so the @samp{-mpe} option and the @samp{-mthreads}
5881 option are incompatible.
5883 @item -msoft-float
5884 @itemx -mhard-float
5885 @kindex -msoft-float
5886 Generate code that does not use (uses) the floating-point register set.
5887 Software floating point emulation is provided if you use the
5888 @samp{-msoft-float} option, and pass the option to GCC when linking.
5890 @item -mmultiple
5891 @itemx -mno-multiple
5892 Generate code that uses (does not use) the load multiple word
5893 instructions and the store multiple word instructions.  These
5894 instructions are generated by default on POWER systems, and not
5895 generated on PowerPC systems.  Do not use @samp{-mmultiple} on little
5896 endian PowerPC systems, since those instructions do not work when the
5897 processor is in little endian mode.  The exceptions are PPC740 and
5898 PPC750 which permit the instructions usage in little endian mode.
5900 @item -mstring
5901 @itemx -mno-string
5902 @kindex -mstring
5903 Generate code that uses (does not use) the load string instructions
5904 and the store string word instructions to save multiple registers and
5905 do small block moves.  These instructions are generated by default on
5906 POWER systems, and not generated on PowerPC systems.  Do not use
5907 @samp{-mstring} on little endian PowerPC systems, since those
5908 instructions do not work when the processor is in little endian mode.
5909 The exceptions are PPC740 and PPC750 which permit the instructions
5910 usage in little endian mode.
5912 @item -mupdate
5913 @itemx -mno-update
5914 @kindex -mupdate
5915 Generate code that uses (does not use) the load or store instructions
5916 that update the base register to the address of the calculated memory
5917 location.  These instructions are generated by default.  If you use
5918 @samp{-mno-update}, there is a small window between the time that the
5919 stack pointer is updated and the address of the previous frame is
5920 stored, which means code that walks the stack frame across interrupts or
5921 signals may get corrupted data.
5923 @item -mfused-madd
5924 @itemx -mno-fused-madd
5925 @kindex -mfused-madd
5926 Generate code that uses (does not use) the floating point multiply and
5927 accumulate instructions.  These instructions are generated by default if
5928 hardware floating is used.
5930 @item -mno-bit-align
5931 @itemx -mbit-align
5932 @kindex -mbit-align
5933 On System V.4 and embedded PowerPC systems do not (do) force structures
5934 and unions that contain bit fields to be aligned to the base type of the
5935 bit field.
5937 For example, by default a structure containing nothing but 8
5938 @code{unsigned} bitfields of length 1 would be aligned to a 4 byte
5939 boundary and have a size of 4 bytes.  By using @samp{-mno-bit-align},
5940 the structure would be aligned to a 1 byte boundary and be one byte in
5941 size.
5943 @item -mno-strict-align
5944 @itemx -mstrict-align
5945 @kindex -mstrict-align
5946 On System V.4 and embedded PowerPC systems do not (do) assume that
5947 unaligned memory references will be handled by the system.
5949 @item -mrelocatable
5950 @itemx -mno-relocatable
5951 @kindex -mrelocatable
5952 On embedded PowerPC systems generate code that allows (does not allow)
5953 the program to be relocated to a different address at runtime.  If you
5954 use @samp{-mrelocatable} on any module, all objects linked together must
5955 be compiled with @samp{-mrelocatable} or @samp{-mrelocatable-lib}.
5957 @item -mrelocatable-lib
5958 @itemx -mno-relocatable-lib
5959 On embedded PowerPC systems generate code that allows (does not allow)
5960 the program to be relocated to a different address at runtime.  Modules
5961 compiled with @samp{-mrelocatable-lib} can be linked with either modules
5962 compiled without @samp{-mrelocatable} and @samp{-mrelocatable-lib} or
5963 with modules compiled with the @samp{-mrelocatable} options.
5965 @item -mno-toc
5966 @itemx -mtoc
5967 On System V.4 and embedded PowerPC systems do not (do) assume that
5968 register 2 contains a pointer to a global area pointing to the addresses
5969 used in the program.
5971 @item -mlittle
5972 @itemx -mlittle-endian
5973 On System V.4 and embedded PowerPC systems compile code for the
5974 processor in little endian mode.  The @samp{-mlittle-endian} option is
5975 the same as @samp{-mlittle}.
5977 @item -mbig
5978 @itemx -mbig-endian
5979 On System V.4 and embedded PowerPC systems compile code for the
5980 processor in big endian mode.  The @samp{-mbig-endian} option is
5981 the same as @samp{-mbig}.
5983 @item -mcall-sysv
5984 On System V.4 and embedded PowerPC systems compile code using calling
5985 conventions that adheres to the March 1995 draft of the System V
5986 Application Binary Interface, PowerPC processor supplement.  This is the
5987 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
5989 @item -mcall-sysv-eabi
5990 Specify both @samp{-mcall-sysv} and @samp{-meabi} options.
5992 @item -mcall-sysv-noeabi
5993 Specify both @samp{-mcall-sysv} and @samp{-mno-eabi} options.
5995 @item -mcall-aix
5996 On System V.4 and embedded PowerPC systems compile code using calling
5997 conventions that are similar to those used on AIX.  This is the
5998 default if you configured GCC using @samp{powerpc-*-eabiaix}.
6000 @item -mcall-solaris
6001 On System V.4 and embedded PowerPC systems compile code for the Solaris
6002 operating system.
6004 @item -mcall-linux
6005 On System V.4 and embedded PowerPC systems compile code for the
6006 Linux-based GNU system.
6008 @item -mprototype
6009 @itemx -mno-prototype
6010 On System V.4 and embedded PowerPC systems assume that all calls to
6011 variable argument functions are properly prototyped.  Otherwise, the
6012 compiler must insert an instruction before every non prototyped call to
6013 set or clear bit 6 of the condition code register (@var{CR}) to
6014 indicate whether floating point values were passed in the floating point
6015 registers in case the function takes a variable arguments.  With
6016 @samp{-mprototype}, only calls to prototyped variable argument functions
6017 will set or clear the bit.
6019 @item -msim
6020 On embedded PowerPC systems, assume that the startup module is called
6021 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
6022 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}.
6023 configurations.
6025 @item -mmvme
6026 On embedded PowerPC systems, assume that the startup module is called
6027 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
6028 @file{libc.a}.
6030 @item -mads
6031 On embedded PowerPC systems, assume that the startup module is called
6032 @file{crt0.o} and the standard C libraries are @file{libads.a} and
6033 @file{libc.a}.
6035 @item -myellowknife
6036 On embedded PowerPC systems, assume that the startup module is called
6037 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
6038 @file{libc.a}.
6040 @item -mvxworks
6041 On System V.4 and embedded PowerPC systems, specify that you are
6042 compiling for a VxWorks system.
6044 @item -memb
6045 On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
6046 header to indicate that @samp{eabi} extended relocations are used.
6048 @item -meabi
6049 @itemx -mno-eabi
6050 On System V.4 and embedded PowerPC systems do (do not) adhere to the
6051 Embedded Applications Binary Interface (eabi) which is a set of
6052 modifications to the System V.4 specifications.  Selecting @option{-meabi}
6053 means that the stack is aligned to an 8 byte boundary, a function
6054 @code{__eabi} is called to from @code{main} to set up the eabi
6055 environment, and the @samp{-msdata} option can use both @code{r2} and
6056 @code{r13} to point to two separate small data areas.  Selecting
6057 @option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
6058 do not call an initialization function from @code{main}, and the
6059 @samp{-msdata} option will only use @code{r13} to point to a single
6060 small data area.  The @samp{-meabi} option is on by default if you
6061 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
6063 @item -msdata=eabi
6064 On System V.4 and embedded PowerPC systems, put small initialized
6065 @code{const} global and static data in the @samp{.sdata2} section, which
6066 is pointed to by register @code{r2}.  Put small initialized
6067 non-@code{const} global and static data in the @samp{.sdata} section,
6068 which is pointed to by register @code{r13}.  Put small uninitialized
6069 global and static data in the @samp{.sbss} section, which is adjacent to
6070 the @samp{.sdata} section.  The @samp{-msdata=eabi} option is
6071 incompatible with the @samp{-mrelocatable} option.  The
6072 @samp{-msdata=eabi} option also sets the @samp{-memb} option.
6074 @item -msdata=sysv
6075 On System V.4 and embedded PowerPC systems, put small global and static
6076 data in the @samp{.sdata} section, which is pointed to by register
6077 @code{r13}.  Put small uninitialized global and static data in the
6078 @samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
6079 The @samp{-msdata=sysv} option is incompatible with the
6080 @samp{-mrelocatable} option.
6082 @item -msdata=default
6083 @itemx -msdata
6084 On System V.4 and embedded PowerPC systems, if @samp{-meabi} is used,
6085 compile code the same as @samp{-msdata=eabi}, otherwise compile code the
6086 same as @samp{-msdata=sysv}.
6088 @item -msdata-data
6089 On System V.4 and embedded PowerPC systems, put small global and static
6090 data in the @samp{.sdata} section.  Put small uninitialized global and
6091 static data in the @samp{.sbss} section.  Do not use register @code{r13}
6092 to address small data however.  This is the default behavior unless
6093 other @samp{-msdata} options are used.
6095 @item -msdata=none
6096 @itemx -mno-sdata
6097 On embedded PowerPC systems, put all initialized global and static data
6098 in the @samp{.data} section, and all uninitialized data in the
6099 @samp{.bss} section.
6101 @item -G @var{num}
6102 @cindex smaller data references (PowerPC)
6103 @cindex .sdata/.sdata2 references (PowerPC)
6104 On embedded PowerPC systems, put global and static items less than or
6105 equal to @var{num} bytes into the small data or bss sections instead of
6106 the normal data or bss section.  By default, @var{num} is 8.  The
6107 @samp{-G @var{num}} switch is also passed to the linker.
6108 All modules should be compiled with the same @samp{-G @var{num}} value.
6110 @item -mregnames
6111 @itemx -mno-regnames
6112 On System V.4 and embedded PowerPC systems do (do not) emit register
6113 names in the assembly language output using symbolic forms.
6115 @end table
6117 @node RT Options
6118 @subsection IBM RT Options
6119 @cindex RT options
6120 @cindex IBM RT options
6122 These @samp{-m} options are defined for the IBM RT PC:
6124 @table @gcctabopt
6125 @item -min-line-mul
6126 Use an in-line code sequence for integer multiplies.  This is the
6127 default.
6129 @item -mcall-lib-mul
6130 Call @code{lmul$$} for integer multiples.
6132 @item -mfull-fp-blocks
6133 Generate full-size floating point data blocks, including the minimum
6134 amount of scratch space recommended by IBM.  This is the default.
6136 @item -mminimum-fp-blocks
6137 Do not include extra scratch space in floating point data blocks.  This
6138 results in smaller code, but slower execution, since scratch space must
6139 be allocated dynamically.
6141 @cindex @file{varargs.h} and RT PC
6142 @cindex @file{stdarg.h} and RT PC
6143 @item -mfp-arg-in-fpregs
6144 Use a calling sequence incompatible with the IBM calling convention in
6145 which floating point arguments are passed in floating point registers.
6146 Note that @code{varargs.h} and @code{stdargs.h} will not work with
6147 floating point operands if this option is specified.
6149 @item -mfp-arg-in-gregs
6150 Use the normal calling convention for floating point arguments.  This is
6151 the default.
6153 @item -mhc-struct-return
6154 Return structures of more than one word in memory, rather than in a
6155 register.  This provides compatibility with the MetaWare HighC (hc)
6156 compiler.  Use the option @samp{-fpcc-struct-return} for compatibility
6157 with the Portable C Compiler (pcc).
6159 @item -mnohc-struct-return
6160 Return some structures of more than one word in registers, when
6161 convenient.  This is the default.  For compatibility with the
6162 IBM-supplied compilers, use the option @samp{-fpcc-struct-return} or the
6163 option @samp{-mhc-struct-return}.
6164 @end table
6166 @node MIPS Options
6167 @subsection MIPS Options
6168 @cindex MIPS options
6170 These @samp{-m} options are defined for the MIPS family of computers:
6172 @table @gcctabopt
6173 @item -mcpu=@var{cpu type}
6174 Assume the defaults for the machine type @var{cpu type} when scheduling
6175 instructions.  The choices for @var{cpu type} are @samp{r2000}, @samp{r3000},
6176 @samp{r3900}, @samp{r4000}, @samp{r4100}, @samp{r4300}, @samp{r4400},
6177 @samp{r4600}, @samp{r4650}, @samp{r5000}, @samp{r6000}, @samp{r8000},
6178 and @samp{orion}.  Additionally, the @samp{r2000}, @samp{r3000},
6179 @samp{r4000}, @samp{r5000}, and @samp{r6000} can be abbreviated as
6180 @samp{r2k} (or @samp{r2K}), @samp{r3k}, etc.  While picking a specific
6181 @var{cpu type} will schedule things appropriately for that particular
6182 chip, the compiler will not generate any code that does not meet level 1
6183 of the MIPS ISA (instruction set architecture) without a @samp{-mipsX}
6184 or @samp{-mabi} switch being used.
6186 @item -mips1
6187 Issue instructions from level 1 of the MIPS ISA.  This is the default.
6188 @samp{r3000} is the default @var{cpu type} at this ISA level.
6190 @item -mips2
6191 Issue instructions from level 2 of the MIPS ISA (branch likely, square
6192 root instructions).  @samp{r6000} is the default @var{cpu type} at this
6193 ISA level.
6195 @item -mips3
6196 Issue instructions from level 3 of the MIPS ISA (64 bit instructions).
6197 @samp{r4000} is the default @var{cpu type} at this ISA level.
6199 @item -mips4
6200 Issue instructions from level 4 of the MIPS ISA (conditional move,
6201 prefetch, enhanced FPU instructions).  @samp{r8000} is the default
6202 @var{cpu type} at this ISA level.
6204 @item -mfp32
6205 Assume that 32 32-bit floating point registers are available.  This is
6206 the default.
6208 @item -mfp64
6209 Assume that 32 64-bit floating point registers are available.  This is
6210 the default when the @samp{-mips3} option is used.
6212 @item -mgp32
6213 Assume that 32 32-bit general purpose registers are available.  This is
6214 the default.
6216 @item -mgp64
6217 Assume that 32 64-bit general purpose registers are available.  This is
6218 the default when the @samp{-mips3} option is used.
6220 @item -mint64
6221 Force int and long types to be 64 bits wide.  See @samp{-mlong32} for an
6222 explanation of the default, and the width of pointers.
6224 @item -mlong64
6225 Force long types to be 64 bits wide.  See @samp{-mlong32} for an
6226 explanation of the default, and the width of pointers.
6228 @item -mlong32
6229 Force long, int, and pointer types to be 32 bits wide.
6231 If none of @samp{-mlong32}, @samp{-mlong64}, or @samp{-mint64} are set,
6232 the size of ints, longs, and pointers depends on the ABI and ISA chosen.
6233 For @samp{-mabi=32}, and @samp{-mabi=n32}, ints and longs are 32 bits
6234 wide.  For @samp{-mabi=64}, ints are 32 bits, and longs are 64 bits wide.
6235 For @samp{-mabi=eabi} and either @samp{-mips1} or @samp{-mips2}, ints
6236 and longs are 32 bits wide.  For @samp{-mabi=eabi} and higher ISAs, ints
6237 are 32 bits, and longs are 64 bits wide.  The width of pointer types is
6238 the smaller of the width of longs or the width of general purpose
6239 registers (which in turn depends on the ISA).
6241 @item -mabi=32
6242 @itemx -mabi=o64
6243 @itemx -mabi=n32
6244 @itemx -mabi=64
6245 @itemx -mabi=eabi
6246 Generate code for the indicated ABI.  The default instruction level is
6247 @samp{-mips1} for @samp{32}, @samp{-mips3} for @samp{n32}, and
6248 @samp{-mips4} otherwise.  Conversely, with @samp{-mips1} or
6249 @samp{-mips2}, the default ABI is @samp{32}; otherwise, the default ABI
6250 is @samp{64}.
6252 @item -mmips-as
6253 Generate code for the MIPS assembler, and invoke @file{mips-tfile} to
6254 add normal debug information.  This is the default for all
6255 platforms except for the OSF/1 reference platform, using the OSF/rose
6256 object format.  If the either of the @samp{-gstabs} or @samp{-gstabs+}
6257 switches are used, the @file{mips-tfile} program will encapsulate the
6258 stabs within MIPS ECOFF.
6260 @item -mgas
6261 Generate code for the GNU assembler.  This is the default on the OSF/1
6262 reference platform, using the OSF/rose object format.  Also, this is
6263 the default if the configure option @samp{--with-gnu-as} is used.
6265 @item -msplit-addresses
6266 @itemx -mno-split-addresses
6267 Generate code to load the high and low parts of address constants separately.
6268 This allows @code{gcc} to optimize away redundant loads of the high order
6269 bits of addresses.  This optimization requires GNU as and GNU ld.
6270 This optimization is enabled by default for some embedded targets where
6271 GNU as and GNU ld are standard.
6273 @item -mrnames
6274 @itemx -mno-rnames
6275 The @samp{-mrnames} switch says to output code using the MIPS software
6276 names for the registers, instead of the hardware names (ie, @var{a0}
6277 instead of @var{$4}).  The only known assembler that supports this option
6278 is the Algorithmics assembler.
6280 @item -mgpopt
6281 @itemx -mno-gpopt
6282 The @samp{-mgpopt} switch says to write all of the data declarations
6283 before the instructions in the text section, this allows the MIPS
6284 assembler to generate one word memory references instead of using two
6285 words for short global or static data items.  This is on by default if
6286 optimization is selected.
6288 @item -mstats
6289 @itemx -mno-stats
6290 For each non-inline function processed, the @samp{-mstats} switch
6291 causes the compiler to emit one line to the standard error file to
6292 print statistics about the program (number of registers saved, stack
6293 size, etc.).
6295 @item -mmemcpy
6296 @itemx -mno-memcpy
6297 The @samp{-mmemcpy} switch makes all block moves call the appropriate
6298 string function (@samp{memcpy} or @samp{bcopy}) instead of possibly
6299 generating inline code.
6301 @item -mmips-tfile
6302 @itemx -mno-mips-tfile
6303 The @samp{-mno-mips-tfile} switch causes the compiler not
6304 postprocess the object file with the @file{mips-tfile} program,
6305 after the MIPS assembler has generated it to add debug support.  If
6306 @file{mips-tfile} is not run, then no local variables will be
6307 available to the debugger.  In addition, @file{stage2} and
6308 @file{stage3} objects will have the temporary file names passed to the
6309 assembler embedded in the object file, which means the objects will
6310 not compare the same.  The @samp{-mno-mips-tfile} switch should only
6311 be used when there are bugs in the @file{mips-tfile} program that
6312 prevents compilation.
6314 @item -msoft-float
6315 Generate output containing library calls for floating point.
6316 @strong{Warning:} the requisite libraries are not part of GCC.
6317 Normally the facilities of the machine's usual C compiler are used, but
6318 this can't be done directly in cross-compilation.  You must make your
6319 own arrangements to provide suitable library functions for
6320 cross-compilation.
6322 @item -mhard-float
6323 Generate output containing floating point instructions.  This is the
6324 default if you use the unmodified sources.
6326 @item -mabicalls
6327 @itemx -mno-abicalls
6328 Emit (or do not emit) the pseudo operations @samp{.abicalls},
6329 @samp{.cpload}, and @samp{.cprestore} that some System V.4 ports use for
6330 position independent code.
6332 @item -mlong-calls
6333 @itemx -mno-long-calls
6334 Do all calls with the @samp{JALR} instruction, which requires
6335 loading up a function's address into a register before the call.
6336 You need to use this switch, if you call outside of the current
6337 512 megabyte segment to functions that are not through pointers.
6339 @item -mhalf-pic
6340 @itemx -mno-half-pic
6341 Put pointers to extern references into the data section and load them
6342 up, rather than put the references in the text section.
6344 @item -membedded-pic
6345 @itemx -mno-embedded-pic
6346 Generate PIC code suitable for some embedded systems.  All calls are
6347 made using PC relative address, and all data is addressed using the $gp
6348 register.  No more than 65536 bytes of global data may be used.  This
6349 requires GNU as and GNU ld which do most of the work.  This currently
6350 only works on targets which use ECOFF; it does not work with ELF.
6352 @item -membedded-data
6353 @itemx -mno-embedded-data
6354 Allocate variables to the read-only data section first if possible, then
6355 next in the small data section if possible, otherwise in data.  This gives
6356 slightly slower code than the default, but reduces the amount of RAM required
6357 when executing, and thus may be preferred for some embedded systems.
6359 @item -muninit-const-in-rodata
6360 @itemx -mno-uninit-const-in-rodata
6361 When used together with -membedded-data, it will always store uninitialized
6362 const variables in the read-only data section.
6363   
6364 @item -msingle-float
6365 @itemx -mdouble-float
6366 The @samp{-msingle-float} switch tells gcc to assume that the floating
6367 point coprocessor only supports single precision operations, as on the
6368 @samp{r4650} chip.  The @samp{-mdouble-float} switch permits gcc to use
6369 double precision operations.  This is the default.
6371 @item -mmad
6372 @itemx -mno-mad
6373 Permit use of the @samp{mad}, @samp{madu} and @samp{mul} instructions,
6374 as on the @samp{r4650} chip.
6376 @item -m4650
6377 Turns on @samp{-msingle-float}, @samp{-mmad}, and, at least for now,
6378 @samp{-mcpu=r4650}.
6380 @item -mips16
6381 @itemx -mno-mips16
6382 Enable 16-bit instructions.
6384 @item -mentry
6385 Use the entry and exit pseudo ops.  This option can only be used with
6386 @samp{-mips16}.
6388 @item -EL
6389 Compile code for the processor in little endian mode.
6390 The requisite libraries are assumed to exist.
6392 @item -EB
6393 Compile code for the processor in big endian mode.
6394 The requisite libraries are assumed to exist.
6396 @item -G @var{num}
6397 @cindex smaller data references (MIPS)
6398 @cindex gp-relative references (MIPS)
6399 Put global and static items less than or equal to @var{num} bytes into
6400 the small data or bss sections instead of the normal data or bss
6401 section.  This allows the assembler to emit one word memory reference
6402 instructions based on the global pointer (@var{gp} or @var{$28}),
6403 instead of the normal two words used.  By default, @var{num} is 8 when
6404 the MIPS assembler is used, and 0 when the GNU assembler is used.  The
6405 @samp{-G @var{num}} switch is also passed to the assembler and linker.
6406 All modules should be compiled with the same @samp{-G @var{num}}
6407 value.
6409 @item -nocpp
6410 Tell the MIPS assembler to not run its preprocessor over user
6411 assembler files (with a @samp{.s} suffix) when assembling them.
6413 @item -mfix7000
6414 Pass an option to gas which will cause nops to be inserted if
6415 the read of the destination register of an mfhi or mflo instruction
6416 occurs in the following two instructions.
6418 @item -no-crt0
6419 Do not include the default crt0.
6420 @end table
6422 @ifset INTERNALS
6423 These options are defined by the macro
6424 @code{TARGET_SWITCHES} in the machine description.  The default for the
6425 options is also defined by that macro, which enables you to change the
6426 defaults.
6427 @end ifset
6429 @node i386 Options
6430 @subsection Intel 386 Options
6431 @cindex i386 Options
6432 @cindex Intel 386 Options
6434 These @samp{-m} options are defined for the i386 family of computers:
6436 @table @gcctabopt
6437 @item -mcpu=@var{cpu type}
6438 Assume the defaults for the machine type @var{cpu type} when scheduling
6439 instructions.  The choices for @var{cpu type} are @samp{i386},
6440 @samp{i486}, @samp{i586}, @samp{i686}, @samp{pentium},
6441 @samp{pentiumpro}, @samp{k6}, and @samp{athlon}
6443 While picking a specific @var{cpu type} will schedule things appropriately
6444 for that particular chip, the compiler will not generate any code that
6445 does not run on the i386 without the @samp{-march=@var{cpu type}} option
6446 being used.  @samp{i586} is equivalent to @samp{pentium} and @samp{i686}
6447 is equivalent to @samp{pentiumpro}.  @samp{k6} is the AMD chip as
6448 opposed to the Intel ones.
6450 @item -march=@var{cpu type}
6451 Generate instructions for the machine type @var{cpu type}.  The choices
6452 for @var{cpu type} are the same as for @samp{-mcpu}.  Moreover, 
6453 specifying @samp{-march=@var{cpu type}} implies @samp{-mcpu=@var{cpu type}}.
6455 @item -m386
6456 @itemx -m486
6457 @itemx -mpentium
6458 @itemx -mpentiumpro
6459 Synonyms for -mcpu=i386, -mcpu=i486, -mcpu=pentium, and -mcpu=pentiumpro
6460 respectively.  These synonyms are deprecated.
6462 @item -mintel-syntax
6463 Emit assembly using Intel syntax opcodes instead of AT&T syntax.
6465 @item -mieee-fp
6466 @itemx -mno-ieee-fp
6467 Control whether or not the compiler uses IEEE floating point
6468 comparisons.  These handle correctly the case where the result of a
6469 comparison is unordered.
6471 @item -msoft-float
6472 Generate output containing library calls for floating point.
6473 @strong{Warning:} the requisite libraries are not part of GCC.
6474 Normally the facilities of the machine's usual C compiler are used, but
6475 this can't be done directly in cross-compilation.  You must make your
6476 own arrangements to provide suitable library functions for
6477 cross-compilation.
6479 On machines where a function returns floating point results in the 80387
6480 register stack, some floating point opcodes may be emitted even if
6481 @samp{-msoft-float} is used.
6483 @item -mno-fp-ret-in-387
6484 Do not use the FPU registers for return values of functions.
6486 The usual calling convention has functions return values of types
6487 @code{float} and @code{double} in an FPU register, even if there
6488 is no FPU.  The idea is that the operating system should emulate
6489 an FPU.
6491 The option @samp{-mno-fp-ret-in-387} causes such values to be returned
6492 in ordinary CPU registers instead.
6494 @item -mno-fancy-math-387
6495 Some 387 emulators do not support the @code{sin}, @code{cos} and
6496 @code{sqrt} instructions for the 387.  Specify this option to avoid
6497 generating those instructions. This option is the default on FreeBSD.
6498 As of revision 2.6.1, these instructions are not generated unless you
6499 also use the @samp{-ffast-math} switch.
6501 @item -malign-double
6502 @itemx -mno-align-double
6503 Control whether GCC aligns @code{double}, @code{long double}, and
6504 @code{long long} variables on a two word boundary or a one word
6505 boundary.  Aligning @code{double} variables on a two word boundary will
6506 produce code that runs somewhat faster on a @samp{Pentium} at the
6507 expense of more memory.
6509 @item -m128bit-long-double
6510 @itemx -m128bit-long-double
6511 Control the size of @code{long double} type. i386 application binary interface
6512 specify the size to be 12 bytes, while modern architectures (Pentium and newer)
6513 preffer @code{long double} aligned to 8 or 16 byte boundary.  This is
6514 impossible to reach with 12 byte long doubles in the array accesses.
6516 @strong{Warning:} if you use the @samp{-m128bit-long-double} switch, the
6517 structures and arrays containing @code{long double} will change their size as
6518 well as function calling convention for function taking @code{long double}
6519 will be modified. 
6521 @item -m96bit-long-double
6522 @itemx -m96bit-long-double
6523 Set the size of @code{long double} to 96 bits as required by the i386
6524 application binary interface.  This is the default.
6526 @item -msvr3-shlib
6527 @itemx -mno-svr3-shlib
6528 Control whether GCC places uninitialized locals into @code{bss} or
6529 @code{data}.  @samp{-msvr3-shlib} places these locals into @code{bss}.
6530 These options are meaningful only on System V Release 3.
6532 @item -mno-wide-multiply
6533 @itemx -mwide-multiply
6534 Control whether GCC uses the @code{mul} and @code{imul} that produce
6535 64 bit results in @code{eax:edx} from 32 bit operands to do @code{long
6536 long} multiplies and 32-bit division by constants.
6538 @item -mrtd
6539 Use a different function-calling convention, in which functions that
6540 take a fixed number of arguments return with the @code{ret} @var{num}
6541 instruction, which pops their arguments while returning.  This saves one
6542 instruction in the caller since there is no need to pop the arguments
6543 there.
6545 You can specify that an individual function is called with this calling
6546 sequence with the function attribute @samp{stdcall}.  You can also
6547 override the @samp{-mrtd} option by using the function attribute
6548 @samp{cdecl}.  @xref{Function Attributes}.
6550 @strong{Warning:} this calling convention is incompatible with the one
6551 normally used on Unix, so you cannot use it if you need to call
6552 libraries compiled with the Unix compiler.
6554 Also, you must provide function prototypes for all functions that
6555 take variable numbers of arguments (including @code{printf});
6556 otherwise incorrect code will be generated for calls to those
6557 functions.
6559 In addition, seriously incorrect code will result if you call a
6560 function with too many arguments.  (Normally, extra arguments are
6561 harmlessly ignored.)
6563 @item -mreg-alloc=@var{regs}
6564 Control the default allocation order of integer registers.  The
6565 string @var{regs} is a series of letters specifying a register.  The
6566 supported letters are: @code{a} allocate EAX; @code{b} allocate EBX;
6567 @code{c} allocate ECX; @code{d} allocate EDX; @code{S} allocate ESI;
6568 @code{D} allocate EDI; @code{B} allocate EBP.
6570 @item -mregparm=@var{num}
6571 Control how many registers are used to pass integer arguments.  By
6572 default, no registers are used to pass arguments, and at most 3
6573 registers can be used.  You can control this behavior for a specific
6574 function by using the function attribute @samp{regparm}.
6575 @xref{Function Attributes}.
6577 @strong{Warning:} if you use this switch, and
6578 @var{num} is nonzero, then you must build all modules with the same
6579 value, including any libraries.  This includes the system libraries and
6580 startup modules.
6582 @item -malign-loops=@var{num}
6583 Align loops to a 2 raised to a @var{num} byte boundary.  If
6584 @samp{-malign-loops} is not specified, the default is 2 unless
6585 gas 2.8 (or later) is being used in which case the default is
6586 to align the loop on a 16 byte boundary if it is less than 8
6587 bytes away.
6589 @item -malign-jumps=@var{num}
6590 Align instructions that are only jumped to to a 2 raised to a @var{num}
6591 byte boundary.  If @samp{-malign-jumps} is not specified, the default is
6592 2 if optimizing for a 386, and 4 if optimizing for a 486 unless
6593 gas 2.8 (or later) is being used in which case the default is
6594 to align the instruction on a 16 byte boundary if it is less
6595 than 8 bytes away.
6597 @item -malign-functions=@var{num}
6598 Align the start of functions to a 2 raised to @var{num} byte boundary.
6599 If @samp{-malign-functions} is not specified, the default is 2 if optimizing
6600 for a 386, and 4 if optimizing for a 486.
6602 @item -mpreferred-stack-boundary=@var{num}
6603 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
6604 byte boundary.  If @samp{-mpreferred-stack-boundary} is not specified,
6605 the default is 4 (16 bytes or 128 bits).
6607 The stack is required to be aligned on a 4 byte boundary.  On Pentium
6608 and PentiumPro, @code{double} and @code{long double} values should be
6609 aligned to an 8 byte boundary (see @samp{-malign-double}) or suffer
6610 significant run time performance penalties.  On Pentium III, the
6611 Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar
6612 penalties if it is not 16 byte aligned.
6614 To ensure proper alignment of this values on the stack, the stack boundary
6615 must be as aligned as that required by any value stored on the stack. 
6616 Further, every function must be generated such that it keeps the stack
6617 aligned.  Thus calling a function compiled with a higher preferred
6618 stack boundary from a function compiled with a lower preferred stack
6619 boundary will most likely misalign the stack.  It is recommended that
6620 libraries that use callbacks always use the default setting.
6622 This extra alignment does consume extra stack space.  Code that is sensitive
6623 to stack space usage, such as embedded systems and operating system kernels,
6624 may want to reduce the preferred alignment to
6625 @samp{-mpreferred-stack-boundary=2}.
6627 @item -mpush-args
6628 @kindex -mpush-args
6629 Use PUSH operations to store outgoing parameters. This method is shorter
6630 and usually equally fast as method using SUB/MOV operations and is enabled
6631 by default. In some cases disabling it may improve performance because of
6632 improved scheduling and reduced dependencies.
6634 @item -maccumulate-outgoing-args
6635 @kindex -maccumulate-outgoing-args
6636 If enabled, the maximum amount of space required for outgoing arguments will be
6637 computed in the function prologue. This in faster on most modern CPUs
6638 because of reduced dependencies, improved scheduling and reduced stack usage
6639 when preferred stack boundary is not equal to 2.  The drawback is a notable
6640 increase in code size. This switch implies -mno-push-args.
6642 @item -mthreads
6643 @kindex -mthreads
6644 Support thread-safe exception handling on @samp{Mingw32}. Code that relies 
6645 on thread-safe exception handling must compile and link all code with the 
6646 @samp{-mthreads} option. When compiling, @samp{-mthreads} defines 
6647 @samp{-D_MT}; when linking, it links in a special thread helper library 
6648 @samp{-lmingwthrd} which cleans up per thread exception handling data.
6650 @item -mno-align-stringops
6651 @kindex -mno-align-stringops
6652 Do not align destination of inlined string operations. This switch reduces
6653 code size and improves performance in case the destination is already aligned,
6654 but gcc don't know about it.
6656 @item -minline-all-stringops
6657 @kindex -minline-all-stringops
6658 By default GCC inlines string operations only when destination is known to be
6659 aligned at least to 4 byte boundary. This enables more inlining, increase code
6660 size, but may improve performance of code that depends on fast memcpy, strlen
6661 and memset for short lengths.
6662 @end table
6664 @node HPPA Options
6665 @subsection HPPA Options
6666 @cindex HPPA Options
6668 These @samp{-m} options are defined for the HPPA family of computers:
6670 @table @gcctabopt
6671 @item -march=@var{architecture type}
6672 Generate code for the specified architecture.  The choices for
6673 @var{architecture type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
6674 1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
6675 @file{/usr/lib/sched.models} on an HP-UX system to determine the proper
6676 architecture option for your machine.  Code compiled for lower numbered
6677 architectures will run on higher numbered architectures, but not the
6678 other way around.
6680 PA 2.0 support currently requires gas snapshot 19990413 or later.  The
6681 next release of binutils (current is 2.9.1) will probably contain PA 2.0
6682 support.  
6684 @item -mpa-risc-1-0
6685 @itemx -mpa-risc-1-1
6686 @itemx -mpa-risc-2-0
6687 Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
6689 @item -mbig-switch
6690 Generate code suitable for big switch tables.  Use this option only if
6691 the assembler/linker complain about out of range branches within a switch
6692 table.
6694 @item -mjump-in-delay
6695 Fill delay slots of function calls with unconditional jump instructions
6696 by modifying the return pointer for the function call to be the target
6697 of the conditional jump.
6699 @item -mdisable-fpregs
6700 Prevent floating point registers from being used in any manner.  This is
6701 necessary for compiling kernels which perform lazy context switching of
6702 floating point registers.  If you use this option and attempt to perform
6703 floating point operations, the compiler will abort.
6705 @item -mdisable-indexing
6706 Prevent the compiler from using indexing address modes.  This avoids some
6707 rather obscure problems when compiling MIG generated code under MACH.
6709 @item -mno-space-regs
6710 Generate code that assumes the target has no space registers.  This allows
6711 GCC to generate faster indirect calls and use unscaled index address modes.
6713 Such code is suitable for level 0 PA systems and kernels.
6715 @item -mfast-indirect-calls
6716 Generate code that assumes calls never cross space boundaries.  This
6717 allows GCC to emit code which performs faster indirect calls.
6719 This option will not work in the presence of shared libraries or nested
6720 functions.
6722 @item -mlong-load-store
6723 Generate 3-instruction load and store sequences as sometimes required by
6724 the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
6725 the HP compilers.
6727 @item -mportable-runtime
6728 Use the portable calling conventions proposed by HP for ELF systems.
6730 @item -mgas
6731 Enable the use of assembler directives only GAS understands.
6733 @item -mschedule=@var{cpu type}
6734 Schedule code according to the constraints for the machine type
6735 @var{cpu type}.  The choices for @var{cpu type} are @samp{700} 
6736 @samp{7100}, @samp{7100LC}, @samp{7200}, and @samp{8000}.  Refer to 
6737 @file{/usr/lib/sched.models} on an HP-UX system to determine the
6738 proper scheduling option for your machine.
6740 @item -mlinker-opt
6741 Enable the optimization pass in the HPUX linker.  Note this makes symbolic
6742 debugging impossible.  It also triggers a bug in the HPUX 8 and HPUX 9 linkers
6743 in which they give bogus error messages when linking some programs.
6745 @item -msoft-float
6746 Generate output containing library calls for floating point.
6747 @strong{Warning:} the requisite libraries are not available for all HPPA
6748 targets.  Normally the facilities of the machine's usual C compiler are
6749 used, but this cannot be done directly in cross-compilation.  You must make
6750 your own arrangements to provide suitable library functions for
6751 cross-compilation.  The embedded target @samp{hppa1.1-*-pro}
6752 does provide software floating point support.
6754 @samp{-msoft-float} changes the calling convention in the output file;
6755 therefore, it is only useful if you compile @emph{all} of a program with
6756 this option.  In particular, you need to compile @file{libgcc.a}, the
6757 library that comes with GCC, with @samp{-msoft-float} in order for
6758 this to work.
6759 @end table
6761 @node Intel 960 Options
6762 @subsection Intel 960 Options
6764 These @samp{-m} options are defined for the Intel 960 implementations:
6766 @table @gcctabopt
6767 @item -m@var{cpu type}
6768 Assume the defaults for the machine type @var{cpu type} for some of
6769 the other options, including instruction scheduling, floating point
6770 support, and addressing modes.  The choices for @var{cpu type} are
6771 @samp{ka}, @samp{kb}, @samp{mc}, @samp{ca}, @samp{cf},
6772 @samp{sa}, and @samp{sb}.
6773 The default is
6774 @samp{kb}.
6776 @item -mnumerics
6777 @itemx -msoft-float
6778 The @samp{-mnumerics} option indicates that the processor does support
6779 floating-point instructions.  The @samp{-msoft-float} option indicates
6780 that floating-point support should not be assumed.
6782 @item -mleaf-procedures
6783 @itemx -mno-leaf-procedures
6784 Do (or do not) attempt to alter leaf procedures to be callable with the
6785 @code{bal} instruction as well as @code{call}.  This will result in more
6786 efficient code for explicit calls when the @code{bal} instruction can be
6787 substituted by the assembler or linker, but less efficient code in other
6788 cases, such as calls via function pointers, or using a linker that doesn't
6789 support this optimization.
6791 @item -mtail-call
6792 @itemx -mno-tail-call
6793 Do (or do not) make additional attempts (beyond those of the
6794 machine-independent portions of the compiler) to optimize tail-recursive
6795 calls into branches.  You may not want to do this because the detection of
6796 cases where this is not valid is not totally complete.  The default is
6797 @samp{-mno-tail-call}.
6799 @item -mcomplex-addr
6800 @itemx -mno-complex-addr
6801 Assume (or do not assume) that the use of a complex addressing mode is a
6802 win on this implementation of the i960.  Complex addressing modes may not
6803 be worthwhile on the K-series, but they definitely are on the C-series.
6804 The default is currently @samp{-mcomplex-addr} for all processors except
6805 the CB and CC.
6807 @item -mcode-align
6808 @itemx -mno-code-align
6809 Align code to 8-byte boundaries for faster fetching (or don't bother).
6810 Currently turned on by default for C-series implementations only.
6812 @ignore
6813 @item -mclean-linkage
6814 @itemx -mno-clean-linkage
6815 These options are not fully implemented.
6816 @end ignore
6818 @item -mic-compat
6819 @itemx -mic2.0-compat
6820 @itemx -mic3.0-compat
6821 Enable compatibility with iC960 v2.0 or v3.0.
6823 @item -masm-compat
6824 @itemx -mintel-asm
6825 Enable compatibility with the iC960 assembler.
6827 @item -mstrict-align
6828 @itemx -mno-strict-align
6829 Do not permit (do permit) unaligned accesses.
6831 @item -mold-align
6832 Enable structure-alignment compatibility with Intel's gcc release version
6833 1.3 (based on gcc 1.37).  This option implies @samp{-mstrict-align}.
6835 @item -mlong-double-64
6836 Implement type @samp{long double} as 64-bit floating point numbers.
6837 Without the option @samp{long double} is implemented by 80-bit
6838 floating point numbers.  The only reason we have it because there is
6839 no 128-bit @samp{long double} support in @samp{fp-bit.c} yet.  So it
6840 is only useful for people using soft-float targets.  Otherwise, we
6841 should recommend against use of it.
6843 @end table
6845 @node DEC Alpha Options
6846 @subsection DEC Alpha Options
6848 These @samp{-m} options are defined for the DEC Alpha implementations:
6850 @table @gcctabopt
6851 @item -mno-soft-float
6852 @itemx -msoft-float
6853 Use (do not use) the hardware floating-point instructions for
6854 floating-point operations.  When @option{-msoft-float} is specified,
6855 functions in @file{libgcc1.c} will be used to perform floating-point
6856 operations.  Unless they are replaced by routines that emulate the
6857 floating-point operations, or compiled in such a way as to call such
6858 emulations routines, these routines will issue floating-point
6859 operations.   If you are compiling for an Alpha without floating-point
6860 operations, you must ensure that the library is built so as not to call
6861 them.
6863 Note that Alpha implementations without floating-point operations are
6864 required to have floating-point registers.
6866 @item -mfp-reg
6867 @itemx -mno-fp-regs
6868 Generate code that uses (does not use) the floating-point register set.
6869 @option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
6870 register set is not used, floating point operands are passed in integer
6871 registers as if they were integers and floating-point results are passed
6872 in $0 instead of $f0.  This is a non-standard calling sequence, so any
6873 function with a floating-point argument or return value called by code
6874 compiled with @option{-mno-fp-regs} must also be compiled with that
6875 option.
6877 A typical use of this option is building a kernel that does not use,
6878 and hence need not save and restore, any floating-point registers.
6880 @item -mieee
6881 The Alpha architecture implements floating-point hardware optimized for
6882 maximum performance.  It is mostly compliant with the IEEE floating
6883 point standard.  However, for full compliance, software assistance is
6884 required.  This option generates code fully IEEE compliant code
6885 @emph{except} that the @var{inexact flag} is not maintained (see below).
6886 If this option is turned on, the CPP macro @code{_IEEE_FP} is defined
6887 during compilation.  The option is a shorthand for: @samp{-D_IEEE_FP
6888 -mfp-trap-mode=su -mtrap-precision=i -mieee-conformant}.  The resulting
6889 code is less efficient but is able to correctly support denormalized
6890 numbers and exceptional IEEE values such as not-a-number and plus/minus
6891 infinity.  Other Alpha compilers call this option
6892 @option{-ieee_with_no_inexact}.
6894 @item -mieee-with-inexact
6895 @c overfull hbox here --bob 22 jul96
6896 @c original text between ignore ... end ignore
6897 @ignore
6898 This is like @samp{-mieee} except the generated code also maintains the
6899 IEEE @var{inexact flag}.  Turning on this option causes the generated
6900 code to implement fully-compliant IEEE math.  The option is a shorthand
6901 for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus @samp{-mieee-conformant},
6902 @samp{-mfp-trap-mode=sui}, and @samp{-mtrap-precision=i}.  On some Alpha
6903 implementations the resulting code may execute significantly slower than
6904 the code generated by default.  Since there is very little code that
6905 depends on the @var{inexact flag}, you should normally not specify this
6906 option.  Other Alpha compilers call this option
6907 @samp{-ieee_with_inexact}.
6908 @end ignore
6909 @c            changed paragraph
6910 This is like @samp{-mieee} except the generated code also maintains the
6911 IEEE @var{inexact flag}.  Turning on this option causes the generated
6912 code to implement fully-compliant IEEE math.  The option is a shorthand
6913 for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus the three following:
6914 @samp{-mieee-conformant},
6915 @samp{-mfp-trap-mode=sui}, 
6916 and @samp{-mtrap-precision=i}.  
6917 On some Alpha implementations the resulting code may execute
6918 significantly slower than the code generated by default.  Since there
6919 is very little code that depends on the @var{inexact flag}, you should
6920 normally not specify this option.  Other Alpha compilers call this
6921 option @samp{-ieee_with_inexact}.
6922 @c             end changes to prevent overfull hboxes
6924 @item -mfp-trap-mode=@var{trap mode}
6925 This option controls what floating-point related traps are enabled.
6926 Other Alpha compilers call this option @samp{-fptm }@var{trap mode}.
6927 The trap mode can be set to one of four values:
6929 @table @samp
6930 @item n
6931 This is the default (normal) setting.  The only traps that are enabled
6932 are the ones that cannot be disabled in software (e.g., division by zero
6933 trap).
6935 @item u
6936 In addition to the traps enabled by @samp{n}, underflow traps are enabled
6937 as well.
6939 @item su
6940 Like @samp{su}, but the instructions are marked to be safe for software
6941 completion (see Alpha architecture manual for details).
6943 @item sui
6944 Like @samp{su}, but inexact traps are enabled as well.
6945 @end table
6947 @item -mfp-rounding-mode=@var{rounding mode}
6948 Selects the IEEE rounding mode.  Other Alpha compilers call this option
6949 @samp{-fprm }@var{rounding mode}.  The @var{rounding mode} can be one
6952 @table @samp
6953 @item n
6954 Normal IEEE rounding mode.  Floating point numbers are rounded towards
6955 the nearest machine number or towards the even machine number in case
6956 of a tie.
6958 @item m
6959 Round towards minus infinity.
6961 @item c
6962 Chopped rounding mode.  Floating point numbers are rounded towards zero.
6964 @item d
6965 Dynamic rounding mode.  A field in the floating point control register
6966 (@var{fpcr}, see Alpha architecture reference manual) controls the
6967 rounding mode in effect.  The C library initializes this register for
6968 rounding towards plus infinity.  Thus, unless your program modifies the
6969 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.
6970 @end table
6972 @item -mtrap-precision=@var{trap precision}
6973 In the Alpha architecture, floating point traps are imprecise.  This
6974 means without software assistance it is impossible to recover from a
6975 floating trap and program execution normally needs to be terminated.
6976 GCC can generate code that can assist operating system trap handlers
6977 in determining the exact location that caused a floating point trap.
6978 Depending on the requirements of an application, different levels of
6979 precisions can be selected:
6981 @table @samp
6982 @item p
6983 Program precision.  This option is the default and means a trap handler
6984 can only identify which program caused a floating point exception.
6986 @item f
6987 Function precision.  The trap handler can determine the function that
6988 caused a floating point exception.
6990 @item i
6991 Instruction precision.  The trap handler can determine the exact
6992 instruction that caused a floating point exception.
6993 @end table
6995 Other Alpha compilers provide the equivalent options called
6996 @samp{-scope_safe} and @samp{-resumption_safe}.
6998 @item -mieee-conformant
6999 This option marks the generated code as IEEE conformant.  You must not
7000 use this option unless you also specify @samp{-mtrap-precision=i} and either
7001 @samp{-mfp-trap-mode=su} or @samp{-mfp-trap-mode=sui}.  Its only effect
7002 is to emit the line @samp{.eflag 48} in the function prologue of the
7003 generated assembly file.  Under DEC Unix, this has the effect that
7004 IEEE-conformant math library routines will be linked in.
7006 @item -mbuild-constants
7007 Normally GCC examines a 32- or 64-bit integer constant to
7008 see if it can construct it from smaller constants in two or three
7009 instructions.  If it cannot, it will output the constant as a literal and
7010 generate code to load it from the data segment at runtime.
7012 Use this option to require GCC to construct @emph{all} integer constants
7013 using code, even if it takes more instructions (the maximum is six).
7015 You would typically use this option to build a shared library dynamic
7016 loader.  Itself a shared library, it must relocate itself in memory
7017 before it can find the variables and constants in its own data segment.
7019 @item -malpha-as
7020 @itemx -mgas
7021 Select whether to generate code to be assembled by the vendor-supplied
7022 assembler (@samp{-malpha-as}) or by the GNU assembler @samp{-mgas}.
7024 @item -mbwx
7025 @itemx -mno-bwx
7026 @itemx -mcix
7027 @itemx -mno-cix
7028 @itemx -mmax
7029 @itemx -mno-max
7030 Indicate whether GCC should generate code to use the optional BWX,
7031 CIX, and MAX instruction sets.  The default is to use the instruction sets
7032 supported by the CPU type specified via @samp{-mcpu=} option or that
7033 of the CPU on which GCC was built if none was specified.
7035 @item -mcpu=@var{cpu_type}
7036 Set the instruction set, register set, and instruction scheduling
7037 parameters for machine type @var{cpu_type}.  You can specify either the
7038 @samp{EV} style name or the corresponding chip number.  GCC
7039 supports scheduling parameters for the EV4 and EV5 family of processors
7040 and will choose the default values for the instruction set from
7041 the processor you specify.  If you do not specify a processor type,
7042 GCC will default to the processor on which the compiler was built.
7044 Supported values for @var{cpu_type} are
7046 @table @samp
7047 @item ev4
7048 @itemx 21064
7049 Schedules as an EV4 and has no instruction set extensions.
7051 @item ev5
7052 @itemx 21164
7053 Schedules as an EV5 and has no instruction set extensions.
7055 @item ev56
7056 @itemx 21164a
7057 Schedules as an EV5 and supports the BWX extension.
7059 @item pca56
7060 @itemx 21164pc
7061 @itemx 21164PC
7062 Schedules as an EV5 and supports the BWX and MAX extensions.
7064 @item ev6
7065 @itemx 21264
7066 Schedules as an EV5 (until Digital releases the scheduling parameters
7067 for the EV6) and supports the BWX, CIX, and MAX extensions.
7068 @end table
7070 @item -mmemory-latency=@var{time}
7071 Sets the latency the scheduler should assume for typical memory
7072 references as seen by the application.  This number is highly
7073 dependent on the memory access patterns used by the application
7074 and the size of the external cache on the machine.
7076 Valid options for @var{time} are
7078 @table @samp
7079 @item @var{number}
7080 A decimal number representing clock cycles.
7082 @item L1
7083 @itemx L2
7084 @itemx L3
7085 @itemx main
7086 The compiler contains estimates of the number of clock cycles for
7087 ``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
7088 (also called Dcache, Scache, and Bcache), as well as to main memory.
7089 Note that L3 is only valid for EV5.
7091 @end table
7092 @end table
7094 @node Clipper Options
7095 @subsection Clipper Options
7097 These @samp{-m} options are defined for the Clipper implementations:
7099 @table @gcctabopt
7100 @item -mc300
7101 Produce code for a C300 Clipper processor. This is the default.
7103 @item -mc400
7104 Produce code for a C400 Clipper processor i.e. use floating point
7105 registers f8..f15.
7106 @end table
7108 @node H8/300 Options
7109 @subsection H8/300 Options
7111 These @samp{-m} options are defined for the H8/300 implementations:
7113 @table @gcctabopt
7114 @item -mrelax
7115 Shorten some address references at link time, when possible; uses the
7116 linker option @samp{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
7117 ld.info, Using ld}, for a fuller description.
7119 @item -mh
7120 Generate code for the H8/300H.
7122 @item -ms
7123 Generate code for the H8/S.
7125 @item -ms2600
7126 Generate code for the H8/S2600.  This switch must be used with -ms.
7128 @item -mint32
7129 Make @code{int} data 32 bits by default.
7131 @item -malign-300
7132 On the H8/300H and H8/S, use the same alignment rules as for the H8/300.
7133 The default for the H8/300H and H8/S is to align longs and floats on 4
7134 byte boundaries.
7135 @samp{-malign-300} causes them to be aligned on 2 byte boundaries.
7136 This option has no effect on the H8/300.
7137 @end table
7139 @node SH Options
7140 @subsection SH Options
7142 These @samp{-m} options are defined for the SH implementations:
7144 @table @gcctabopt
7145 @item -m1
7146 Generate code for the SH1.
7148 @item -m2
7149 Generate code for the SH2.
7151 @item -m3
7152 Generate code for the SH3.
7154 @item -m3e
7155 Generate code for the SH3e.
7157 @item -m4-nofpu
7158 Generate code for the SH4 without a floating-point unit.
7160 @item -m4-single-only
7161 Generate code for the SH4 with a floating-point unit that only
7162 supports single-precision arithmentic.
7164 @item -m4-single
7165 Generate code for the SH4 assuming the floating-point unit is in
7166 single-precision mode by default.
7168 @item -m4
7169 Generate code for the SH4.
7171 @item -mb
7172 Compile code for the processor in big endian mode.
7174 @item -ml
7175 Compile code for the processor in little endian mode.
7177 @item -mdalign
7178 Align doubles at 64 bit boundaries.  Note that this changes the calling
7179 conventions, and thus some functions from the standard C library will
7180 not work unless you recompile it first with -mdalign.
7182 @item -mrelax
7183 Shorten some address references at link time, when possible; uses the
7184 linker option @samp{-relax}.
7186 @item -mbigtable
7187 Use 32-bit offsets in @code{switch} tables.  The default is to use
7188 16-bit offsets.
7190 @item -mfmovd
7191 Enable the use of the instruction @code{fmovd}.
7193 @item -mhitachi
7194 Comply with the calling conventions defined by Hitachi.
7196 @item -mnomacsave
7197 Mark the @code{MAC} register as call-clobbered, even if
7198 @option{-mhitachi} is given.
7200 @item -misize
7201 Dump instruction size and location in the assembly code.
7203 @item -mpadstruct
7204 This option is deprecated.  It pads structures to multiple of 4 bytes,
7205 which is incompatible with the SH ABI.
7207 @item -mspace
7208 Optimize for space instead of speed.  Implied by @option{-Os}.
7210 @item -mprefergot
7211 When generating position-independent code, emit function calls using
7212 the Global Offset Table instead of the Procedure Linkage Table.
7214 @item -musermode
7215 Generate a library function call to invalidate instruction cache
7216 entries, after fixing up a trampoline.  This library function call
7217 doesn't assume it can write to the whole memory address space.  This
7218 is the default when the target is @code{sh-*-linux*}.
7219 @end table
7221 @node System V Options
7222 @subsection Options for System V
7224 These additional options are available on System V Release 4 for
7225 compatibility with other compilers on those systems:
7227 @table @gcctabopt
7228 @item -G
7229 Create a shared object.
7230 It is recommended that @samp{-symbolic} or @samp{-shared} be used instead.
7232 @item -Qy
7233 Identify the versions of each tool used by the compiler, in a
7234 @code{.ident} assembler directive in the output.
7236 @item -Qn
7237 Refrain from adding @code{.ident} directives to the output file (this is
7238 the default).
7240 @item -YP,@var{dirs}
7241 Search the directories @var{dirs}, and no others, for libraries
7242 specified with @samp{-l}.
7244 @item -Ym,@var{dir}
7245 Look in the directory @var{dir} to find the M4 preprocessor.
7246 The assembler uses this option.
7247 @c This is supposed to go with a -Yd for predefined M4 macro files, but
7248 @c the generic assembler that comes with Solaris takes just -Ym.
7249 @end table
7251 @node TMS320C3x/C4x Options
7252 @subsection TMS320C3x/C4x Options
7253 @cindex TMS320C3x/C4x Options
7255 These @samp{-m} options are defined for TMS320C3x/C4x implementations:
7257 @table @gcctabopt
7259 @item -mcpu=@var{cpu_type}
7260 Set the instruction set, register set, and instruction scheduling
7261 parameters for machine type @var{cpu_type}.  Supported values for
7262 @var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and
7263 @samp{c44}.  The default is @samp{c40} to generate code for the
7264 TMS320C40.
7266 @item -mbig-memory
7267 @item -mbig
7268 @itemx -msmall-memory
7269 @itemx -msmall
7270 Generates code for the big or small memory model.  The small memory
7271 model assumed that all data fits into one 64K word page.  At run-time
7272 the data page (DP) register must be set to point to the 64K page
7273 containing the .bss and .data program sections.  The big memory model is
7274 the default and requires reloading of the DP register for every direct
7275 memory access.
7277 @item -mbk
7278 @itemx -mno-bk
7279 Allow (disallow) allocation of general integer operands into the block
7280 count register BK. 
7282 @item -mdb
7283 @itemx -mno-db
7284 Enable (disable) generation of code using decrement and branch,
7285 DBcond(D), instructions.  This is enabled by default for the C4x.  To be
7286 on the safe side, this is disabled for the C3x, since the maximum
7287 iteration count on the C3x is 2^23 + 1 (but who iterates loops more than
7288 2^23 times on the C3x?).  Note that GCC will try to reverse a loop so
7289 that it can utilise the decrement and branch instruction, but will give
7290 up if there is more than one memory reference in the loop.  Thus a loop
7291 where the loop counter is decremented can generate slightly more
7292 efficient code, in cases where the RPTB instruction cannot be utilised.
7294 @item -mdp-isr-reload
7295 @itemx -mparanoid
7296 Force the DP register to be saved on entry to an interrupt service
7297 routine (ISR), reloaded to point to the data section, and restored on
7298 exit from the ISR.  This should not be required unless someone has
7299 violated the small memory model by modifying the DP register, say within
7300 an object library.
7302 @item -mmpyi
7303 @itemx -mno-mpyi
7304 For the C3x use the 24-bit MPYI instruction for integer multiplies
7305 instead of a library call to guarantee 32-bit results.  Note that if one
7306 of the operands is a constant, then the multiplication will be performed
7307 using shifts and adds.  If the -mmpyi option is not specified for the C3x,
7308 then squaring operations are performed inline instead of a library call.
7310 @item -mfast-fix
7311 @itemx -mno-fast-fix
7312 The C3x/C4x FIX instruction to convert a floating point value to an
7313 integer value chooses the nearest integer less than or equal to the
7314 floating point value rather than to the nearest integer.  Thus if the
7315 floating point number is negative, the result will be incorrectly
7316 truncated an additional code is necessary to detect and correct this
7317 case.  This option can be used to disable generation of the additional
7318 code required to correct the result.
7320 @item -mrptb
7321 @itemx -mno-rptb
7322 Enable (disable) generation of repeat block sequences using the RPTB
7323 instruction for zero overhead looping.  The RPTB construct is only used
7324 for innermost loops that do not call functions or jump across the loop
7325 boundaries.  There is no advantage having nested RPTB loops due to the
7326 overhead required to save and restore the RC, RS, and RE registers.
7327 This is enabled by default with -O2.
7329 @item -mrpts=@var{count}
7330 @itemx -mno-rpts
7331 Enable (disable) the use of the single instruction repeat instruction
7332 RPTS.  If a repeat block contains a single instruction, and the loop
7333 count can be guaranteed to be less than the value @var{count}, GCC will
7334 emit a RPTS instruction instead of a RPTB.  If no value is specified,
7335 then a RPTS will be emitted even if the loop count cannot be determined
7336 at compile time.  Note that the repeated instruction following RPTS does
7337 not have to be reloaded from memory each iteration, thus freeing up the
7338 CPU buses for operands.  However, since interrupts are blocked by this
7339 instruction, it is disabled by default.
7341 @item -mloop-unsigned
7342 @itemx -mno-loop-unsigned
7343 The maximum iteration count when using RPTS and RPTB (and DB on the C40)
7344 is 2^31 + 1 since these instructions test if the iteration count is
7345 negative to terminate the loop.  If the iteration count is unsigned
7346 there is a possibility than the 2^31 + 1 maximum iteration count may be
7347 exceeded.  This switch allows an unsigned iteration count.
7349 @item -mti
7350 Try to emit an assembler syntax that the TI assembler (asm30) is happy
7351 with.  This also enforces compatibility with the API employed by the TI
7352 C3x C compiler.  For example, long doubles are passed as structures
7353 rather than in floating point registers.
7355 @item -mregparm
7356 @itemx -mmemparm
7357 Generate code that uses registers (stack) for passing arguments to functions.
7358 By default, arguments are passed in registers where possible rather
7359 than by pushing arguments on to the stack.
7361 @item -mparallel-insns
7362 @itemx -mno-parallel-insns
7363 Allow the generation of parallel instructions.  This is enabled by
7364 default with -O2.
7366 @item -mparallel-mpy
7367 @itemx -mno-parallel-mpy
7368 Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
7369 provided -mparallel-insns is also specified.  These instructions have
7370 tight register constraints which can pessimize the code generation
7371 of large functions.
7373 @end table
7375 @node V850 Options
7376 @subsection V850 Options
7377 @cindex V850 Options
7379 These @samp{-m} options are defined for V850 implementations:
7381 @table @gcctabopt
7382 @item -mlong-calls
7383 @itemx -mno-long-calls
7384 Treat all calls as being far away (near).  If calls are assumed to be
7385 far away, the compiler will always load the functions address up into a
7386 register, and call indirect through the pointer.
7388 @item -mno-ep
7389 @itemx -mep
7390 Do not optimize (do optimize) basic blocks that use the same index
7391 pointer 4 or more times to copy pointer into the @code{ep} register, and
7392 use the shorter @code{sld} and @code{sst} instructions.  The @samp{-mep}
7393 option is on by default if you optimize.
7395 @item -mno-prolog-function
7396 @itemx -mprolog-function
7397 Do not use (do use) external functions to save and restore registers at
7398 the prolog and epilog of a function.  The external functions are slower,
7399 but use less code space if more than one function saves the same number
7400 of registers.  The @samp{-mprolog-function} option is on by default if
7401 you optimize.
7403 @item -mspace
7404 Try to make the code as small as possible.  At present, this just turns
7405 on the @samp{-mep} and @samp{-mprolog-function} options.
7407 @item -mtda=@var{n}
7408 Put static or global variables whose size is @var{n} bytes or less into
7409 the tiny data area that register @code{ep} points to.  The tiny data
7410 area can hold up to 256 bytes in total (128 bytes for byte references).
7412 @item -msda=@var{n}
7413 Put static or global variables whose size is @var{n} bytes or less into
7414 the small data area that register @code{gp} points to.  The small data
7415 area can hold up to 64 kilobytes.
7417 @item -mzda=@var{n}
7418 Put static or global variables whose size is @var{n} bytes or less into
7419 the first 32 kilobytes of memory.
7421 @item -mv850
7422 Specify that the target processor is the V850.
7424 @item -mbig-switch
7425 Generate code suitable for big switch tables.  Use this option only if
7426 the assembler/linker complain about out of range branches within a switch
7427 table.
7428 @end table
7430 @node ARC Options
7431 @subsection ARC Options
7432 @cindex ARC Options
7434 These options are defined for ARC implementations:
7436 @table @gcctabopt
7437 @item -EL
7438 Compile code for little endian mode.  This is the default.
7440 @item -EB
7441 Compile code for big endian mode.
7443 @item -mmangle-cpu
7444 Prepend the name of the cpu to all public symbol names.
7445 In multiple-processor systems, there are many ARC variants with different
7446 instruction and register set characteristics.  This flag prevents code
7447 compiled for one cpu to be linked with code compiled for another.
7448 No facility exists for handling variants that are "almost identical".
7449 This is an all or nothing option.
7451 @item -mcpu=@var{cpu}
7452 Compile code for ARC variant @var{cpu}.
7453 Which variants are supported depend on the configuration.
7454 All variants support @samp{-mcpu=base}, this is the default.
7456 @item -mtext=@var{text section}
7457 @itemx -mdata=@var{data section}
7458 @itemx -mrodata=@var{readonly data section}
7459 Put functions, data, and readonly data in @var{text section},
7460 @var{data section}, and @var{readonly data section} respectively
7461 by default.  This can be overridden with the @code{section} attribute.
7462 @xref{Variable Attributes}.
7464 @end table
7466 @node NS32K Options
7467 @subsection NS32K Options
7468 @cindex NS32K options
7470 These are the @samp{-m} options defined for the 32000 series.  The default
7471 values for these options depends on which style of 32000 was selected when
7472 the compiler was configured; the defaults for the most common choices are
7473 given below.
7475 @table @gcctabopt
7476 @item -m32032
7477 @itemx -m32032
7478 Generate output for a 32032.  This is the default
7479 when the compiler is configured for 32032 and 32016 based systems.
7481 @item -m32332
7482 @itemx -m32332
7483 Generate output for a 32332.  This is the default
7484 when the compiler is configured for 32332-based systems.
7486 @item -m32532
7487 @itemx -m32532
7488 Generate output for a 32532.  This is the default
7489 when the compiler is configured for 32532-based systems.
7491 @item -m32081
7492 Generate output containing 32081 instructions for floating point.
7493 This is the default for all systems.
7495 @item -m32381
7496 Generate output containing 32381 instructions for floating point.  This
7497 also implies @samp{-m32081}. The 32381 is only compatible with the 32332
7498 and 32532 cpus. This is the default for the pc532-netbsd configuration.
7500 @item -mmulti-add
7501 Try and generate multiply-add floating point instructions @code{polyF}
7502 and @code{dotF}. This option is only available if the @samp{-m32381}
7503 option is in effect. Using these instructions requires changes to to
7504 register allocation which generally has a negative impact on
7505 performance.  This option should only be enabled when compiling code
7506 particularly likely to make heavy use of multiply-add instructions.
7508 @item -mnomulti-add
7509 Do not try and generate multiply-add floating point instructions
7510 @code{polyF} and @code{dotF}. This is the default on all platforms.
7512 @item -msoft-float
7513 Generate output containing library calls for floating point.
7514 @strong{Warning:} the requisite libraries may not be available.
7516 @item -mnobitfield
7517 Do not use the bit-field instructions. On some machines it is faster to
7518 use shifting and masking operations. This is the default for the pc532.
7520 @item -mbitfield
7521 Do use the bit-field instructions. This is the default for all platforms
7522 except the pc532.
7524 @item -mrtd
7525 Use a different function-calling convention, in which functions
7526 that take a fixed number of arguments return pop their
7527 arguments on return with the @code{ret} instruction.
7529 This calling convention is incompatible with the one normally
7530 used on Unix, so you cannot use it if you need to call libraries
7531 compiled with the Unix compiler.
7533 Also, you must provide function prototypes for all functions that
7534 take variable numbers of arguments (including @code{printf});
7535 otherwise incorrect code will be generated for calls to those
7536 functions.
7538 In addition, seriously incorrect code will result if you call a
7539 function with too many arguments.  (Normally, extra arguments are
7540 harmlessly ignored.)
7542 This option takes its name from the 680x0 @code{rtd} instruction.
7545 @item -mregparam
7546 Use a different function-calling convention where the first two arguments
7547 are passed in registers.
7549 This calling convention is incompatible with the one normally
7550 used on Unix, so you cannot use it if you need to call libraries
7551 compiled with the Unix compiler.
7553 @item -mnoregparam
7554 Do not pass any arguments in registers. This is the default for all
7555 targets.
7557 @item -msb
7558 It is OK to use the sb as an index register which is always loaded with
7559 zero. This is the default for the pc532-netbsd target.
7561 @item -mnosb
7562 The sb register is not available for use or has not been initialized to
7563 zero by the run time system. This is the default for all targets except
7564 the pc532-netbsd. It is also implied whenever @samp{-mhimem} or
7565 @samp{-fpic} is set.
7567 @item -mhimem
7568 Many ns32000 series addressing modes use displacements of up to 512MB.
7569 If an address is above 512MB then displacements from zero can not be used.
7570 This option causes code to be generated which can be loaded above 512MB.
7571 This may be useful for operating systems or ROM code.
7573 @item -mnohimem
7574 Assume code will be loaded in the first 512MB of virtual address space.
7575 This is the default for all platforms.
7578 @end table
7580 @node AVR Options
7581 @subsection AVR Options
7582 @cindex AVR Options
7584 These options are defined for AVR implementations:
7586 @table @gcctabopt
7587 @item -mmcu=@var{mcu}
7588 Specify ATMEL AVR instruction set or MCU type.
7590 Instruction set avr1 is for the minimal AVR core, not supported by the C
7591 compiler, only for assembler programs (MCU types: at90s1200, attiny10,
7592 attiny11, attiny12, attiny15, attiny28).
7594 Instruction set avr2 (default) is for the classic AVR core with up to
7595 8K program memory space (MCU types: at90s2313, at90s2323, attiny22,
7596 at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
7597 at90c8534, at90s8535).
7599 Instruction set avr3 is for the classic AVR core with up to 128K program
7600 memory space (MCU types: atmega103, atmega603).
7602 Instruction set avr4 is for the enhanced AVR core with up to 8K program
7603 memory space (MCU types: atmega83, atmega85).
7605 Instruction set avr5 is for the enhanced AVR core with up to 128K program
7606 memory space (MCU types: atmega161, atmega163, atmega32, at94k).
7608 @item -msize
7609 Output instruction sizes to the asm file.
7611 @item -minit-stack=@var{N}
7612 Specify the initial stack address, which may be a symbol or numeric value,
7613 __stack is the default.
7615 @item -mno-interrupts
7616 Generated code is not compatible with hardware interrupts.
7617 Code size will be smaller.
7619 @item -mcall-prologues
7620 Functions prologues/epilogues expanded as call to appropriate
7621 subroutines. Code size will be smaller.
7623 @item -mno-tablejump
7624 Do not generate tablejump insns which sometimes increase code size.
7626 @item -mtiny-stack
7627 Change only the low 8 bits of the stack pointer.
7628 @end table
7630 @node MCore Options
7631 @subsection MCore Options
7632 @cindex MCore options
7634 These are the @samp{-m} options defined for the Motorola M*Core
7635 processors.  
7637 @table @gcctabopt
7639 @item -mhardlit
7640 @itemx -mhardlit
7641 @itemx -mno-hardlit
7642 Inline constants into the code stream if it can be done in two
7643 instructions or less.
7645 @item -mdiv
7646 @itemx -mdiv
7647 @itemx -mno-div
7648 Use the divide instruction.  (Enabled by default).
7650 @item -mrelax-immediate
7651 @itemx -mrelax-immediate
7652 @itemx -mno-relax-immediate
7653 Allow arbitrary sized immediates in bit operations.
7655 @item -mwide-bitfields
7656 @itemx -mwide-bitfields
7657 @itemx -mno-wide-bitfields
7658 Always treat bitfields as int-sized.
7660 @item -m4byte-functions
7661 @itemx -m4byte-functions
7662 @itemx -mno-4byte-functions
7663 Force all functions to be aligned to a four byte boundary.
7665 @item -mcallgraph-data
7666 @itemx -mcallgraph-data
7667 @itemx -mno-callgraph-data
7668 Emit callgraph information.
7670 @item -mslow-bytes
7671 @itemx -mslow-bytes
7672 @itemx -mno-slow-bytes
7673 Prefer word access when reading byte quantities.
7675 @item -mlittle-endian
7676 @itemx -mlittle-endian
7677 @itemx -mbig-endian
7678 Generate code for a little endian target.
7680 @item -m210
7681 @itemx -m210
7682 @itemx -m340
7683 Generate code for the 210 processor.
7684 @end table
7686 @node D30V Options
7687 @subsection D30V Options
7688 @cindex D30V Options
7690 These @samp{-m} options are defined for D30V implementations:
7692 @table @gcctabopt
7693 @item -mextmem
7694 Link the @samp{.text}, @samp{.data}, @samp{.bss}, @samp{.strings},
7695 @samp{.rodata}, @samp{.rodata1}, @samp{.data1} sections into external
7696 memory, which starts at location @code{0x80000000}.
7698 @item -mextmemory
7699 Same as the @samp{-mextmem} switch.
7701 @item -monchip
7702 Link the @samp{.text} section into onchip text memory, which starts at
7703 location @code{0x0}.  Also link @samp{.data}, @samp{.bss},
7704 @samp{.strings}, @samp{.rodata}, @samp{.rodata1}, @samp{.data1} sections
7705 into onchip data memory, which starts at location @code{0x20000000}.
7707 @item -mno-asm-optimize
7708 @itemx -masm-optimize
7709 Disable (enable) passing @samp{-O} to the assembler when optimizing.
7710 The assembler uses the @samp{-O} option to automatically parallelize
7711 adjacent short instructions where possible.
7713 @item -mbranch-cost=@var{n}
7714 Increase the internal costs of branches to @var{n}.  Higher costs means
7715 that the compiler will issue more instructions to avoid doing a branch.
7716 The default is 2.
7718 @item -mcond-exec=@var{n}
7719 Specify the maximum number of conditionally executed instructions that
7720 replace a branch.  The default is 4.
7721 @end table
7723 @node Code Gen Options
7724 @section Options for Code Generation Conventions
7725 @cindex code generation conventions
7726 @cindex options, code generation
7727 @cindex run-time options
7729 These machine-independent options control the interface conventions
7730 used in code generation.
7732 Most of them have both positive and negative forms; the negative form
7733 of @samp{-ffoo} would be @samp{-fno-foo}.  In the table below, only
7734 one of the forms is listed---the one which is not the default.  You
7735 can figure out the other form by either removing @samp{no-} or adding
7738 @table @gcctabopt
7739 @item -fexceptions
7740 Enable exception handling. Generates extra code needed to propagate
7741 exceptions.  For some targets, this implies GNU CC will generate frame
7742 unwind information for all functions, which can produce significant data
7743 size overhead, although it does not affect execution.  If you do not
7744 specify this option, GNU CC will enable it by default for languages like
7745 C++ which normally require exception handling, and disable itfor
7746 languages like C that do not normally require it.  However, you may need
7747 to enable this option when compiling C code that needs to interoperate
7748 properly with exception handlers written in C++.  You may also wish to
7749 disable this option if you are compiling older C++ programs that don't
7750 use exception handling.
7752 @item -funwind-tables
7753 Similar to @option{-fexceptions}, except that it will just generate any needed
7754 static data, but will not affect the generated code in any other way.
7755 You will normally not enable this option; instead, a language processor
7756 that needs this handling would enable it on your behalf.
7758 @item -fpcc-struct-return
7759 Return ``short'' @code{struct} and @code{union} values in memory like
7760 longer ones, rather than in registers.  This convention is less
7761 efficient, but it has the advantage of allowing intercallability between
7762 GCC-compiled files and files compiled with other compilers.
7764 The precise convention for returning structures in memory depends
7765 on the target configuration macros.
7767 Short structures and unions are those whose size and alignment match
7768 that of some integer type.
7770 @item -freg-struct-return
7771 Use the convention that @code{struct} and @code{union} values are
7772 returned in registers when possible.  This is more efficient for small
7773 structures than @samp{-fpcc-struct-return}.
7775 If you specify neither @samp{-fpcc-struct-return} nor its contrary
7776 @samp{-freg-struct-return}, GCC defaults to whichever convention is
7777 standard for the target.  If there is no standard convention, GCC
7778 defaults to @samp{-fpcc-struct-return}, except on targets where GCC
7779 is the principal compiler.  In those cases, we can choose the standard,
7780 and we chose the more efficient register return alternative.
7782 @item -fshort-enums
7783 Allocate to an @code{enum} type only as many bytes as it needs for the
7784 declared range of possible values.  Specifically, the @code{enum} type
7785 will be equivalent to the smallest integer type which has enough room.
7787 @item -fshort-double
7788 Use the same size for @code{double} as for @code{float}.
7790 @item -fshared-data
7791 Requests that the data and non-@code{const} variables of this
7792 compilation be shared data rather than private data.  The distinction
7793 makes sense only on certain operating systems, where shared data is
7794 shared between processes running the same program, while private data
7795 exists in one copy per process.
7797 @item -fno-common
7798 Allocate even uninitialized global variables in the data section of the
7799 object file, rather than generating them as common blocks.  This has the
7800 effect that if the same variable is declared (without @code{extern}) in
7801 two different compilations, you will get an error when you link them.
7802 The only reason this might be useful is if you wish to verify that the
7803 program will work on other systems which always work this way.
7805 @item -fno-ident
7806 Ignore the @samp{#ident} directive.
7808 @item -fno-gnu-linker
7809 Do not output global initializations (such as C++ constructors and
7810 destructors) in the form used by the GNU linker (on systems where the GNU
7811 linker is the standard method of handling them).  Use this option when
7812 you want to use a non-GNU linker, which also requires using the
7813 @command{collect2} program to make sure the system linker includes
7814 constructors and destructors.  (@command{collect2} is included in the GCC
7815 distribution.)  For systems which @emph{must} use @command{collect2}, the
7816 compiler driver @command{gcc} is configured to do this automatically.
7818 @item -finhibit-size-directive
7819 Don't output a @code{.size} assembler directive, or anything else that
7820 would cause trouble if the function is split in the middle, and the
7821 two halves are placed at locations far apart in memory.  This option is
7822 used when compiling @file{crtstuff.c}; you should not need to use it
7823 for anything else.
7825 @item -fverbose-asm
7826 Put extra commentary information in the generated assembly code to
7827 make it more readable.  This option is generally only of use to those
7828 who actually need to read the generated assembly code (perhaps while
7829 debugging the compiler itself).
7831 @samp{-fno-verbose-asm}, the default, causes the
7832 extra information to be omitted and is useful when comparing two assembler
7833 files.
7835 @item -fvolatile
7836 Consider all memory references through pointers to be volatile.
7838 @item -fvolatile-global
7839 Consider all memory references to extern and global data items to
7840 be volatile.  GCC does not consider static data items to be volatile
7841 because of this switch.
7843 @item -fvolatile-static
7844 Consider all memory references to static data to be volatile.
7846 @item -fpic
7847 @cindex global offset table
7848 @cindex PIC
7849 Generate position-independent code (PIC) suitable for use in a shared
7850 library, if supported for the target machine.  Such code accesses all
7851 constant addresses through a global offset table (GOT).  The dynamic
7852 loader resolves the GOT entries when the program starts (the dynamic
7853 loader is not part of GCC; it is part of the operating system).  If
7854 the GOT size for the linked executable exceeds a machine-specific
7855 maximum size, you get an error message from the linker indicating that
7856 @samp{-fpic} does not work; in that case, recompile with @samp{-fPIC}
7857 instead.  (These maximums are 16k on the m88k, 8k on the Sparc, and 32k
7858 on the m68k and RS/6000.  The 386 has no such limit.)
7860 Position-independent code requires special support, and therefore works
7861 only on certain machines.  For the 386, GCC supports PIC for System V
7862 but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
7863 position-independent.
7865 @item -fPIC
7866 If supported for the target machine, emit position-independent code,
7867 suitable for dynamic linking and avoiding any limit on the size of the
7868 global offset table.  This option makes a difference on the m68k, m88k,
7869 and the Sparc.
7871 Position-independent code requires special support, and therefore works
7872 only on certain machines.
7874 @item -ffixed-@var{reg}
7875 Treat the register named @var{reg} as a fixed register; generated code
7876 should never refer to it (except perhaps as a stack pointer, frame
7877 pointer or in some other fixed role).
7879 @var{reg} must be the name of a register.  The register names accepted
7880 are machine-specific and are defined in the @code{REGISTER_NAMES}
7881 macro in the machine description macro file.
7883 This flag does not have a negative form, because it specifies a
7884 three-way choice.
7886 @item -fcall-used-@var{reg}
7887 Treat the register named @var{reg} as an allocable register that is
7888 clobbered by function calls.  It may be allocated for temporaries or
7889 variables that do not live across a call.  Functions compiled this way
7890 will not save and restore the register @var{reg}.
7892 It is an error to used this flag with the frame pointer or stack pointer.
7893 Use of this flag for other registers that have fixed pervasive roles in
7894 the machine's execution model will produce disastrous results.
7896 This flag does not have a negative form, because it specifies a
7897 three-way choice.
7899 @item -fcall-saved-@var{reg}
7900 Treat the register named @var{reg} as an allocable register saved by
7901 functions.  It may be allocated even for temporaries or variables that
7902 live across a call.  Functions compiled this way will save and restore
7903 the register @var{reg} if they use it.
7905 It is an error to used this flag with the frame pointer or stack pointer.
7906 Use of this flag for other registers that have fixed pervasive roles in
7907 the machine's execution model will produce disastrous results.
7909 A different sort of disaster will result from the use of this flag for
7910 a register in which function values may be returned.
7912 This flag does not have a negative form, because it specifies a
7913 three-way choice.
7915 @item -fpack-struct
7916 Pack all structure members together without holes.  Usually you would
7917 not want to use this option, since it makes the code suboptimal, and
7918 the offsets of structure members won't agree with system libraries.
7920 @item -fcheck-memory-usage
7921 Generate extra code to check each memory access.  GCC will generate
7922 code that is suitable for a detector of bad memory accesses such as
7923 @file{Checker}.
7925 Normally, you should compile all, or none, of your code with this option.
7927 If you do mix code compiled with and without this option,
7928 you must ensure that all code that has side effects
7929 and that is called by code compiled with this option
7930 is, itself, compiled with this option.
7931 If you do not, you might get erroneous messages from the detector.
7933 If you use functions from a library that have side-effects (such as
7934 @code{read}), you might not be able to recompile the library and
7935 specify this option.  In that case, you can enable the
7936 @samp{-fprefix-function-name} option, which requests GCC to encapsulate
7937 your code and make other functions look as if they were compiled with
7938 @samp{-fcheck-memory-usage}.  This is done by calling ``stubs'',
7939 which are provided by the detector.  If you cannot find or build
7940 stubs for every function you call, you might have to specify
7941 @samp{-fcheck-memory-usage} without @samp{-fprefix-function-name}.
7943 If you specify this option, you can not use the @code{asm} or
7944 @code{__asm__} keywords in functions with memory checking enabled.  GNU
7945 CC cannot understand what the @code{asm} statement may do, and therefore
7946 cannot generate the appropriate code, so it will reject it.  However, if
7947 you specify the function attribute @code{no_check_memory_usage}
7948 (@pxref{Function Attributes}), GNU CC will disable memory checking within a
7949 function; you may use @code{asm} statements inside such functions.  You
7950 may have an inline expansion of a non-checked function within a checked
7951 function; in that case GNU CC will not generate checks for the inlined
7952 function's memory accesses.
7954 If you move your @code{asm} statements to non-checked inline functions
7955 and they do access memory, you can add calls to the support code in your
7956 inline function, to indicate any reads, writes, or copies being done.
7957 These calls would be similar to those done in the stubs described above.
7959 @item -fprefix-function-name
7960 Request GCC to add a prefix to the symbols generated for function names.
7961 GCC adds a prefix to the names of functions defined as well as
7962 functions called.  Code compiled with this option and code compiled
7963 without the option can't be linked together, unless stubs are used.
7965 If you compile the following code with @samp{-fprefix-function-name}
7966 @example
7967 extern void bar (int);
7968 void
7969 foo (int a)
7971   return bar (a + 5);
7973 @end example
7975 @noindent
7976 GCC will compile the code as if it was written:
7977 @example
7978 extern void prefix_bar (int);
7979 void
7980 prefix_foo (int a)
7982   return prefix_bar (a + 5);
7984 @end example
7985 This option is designed to be used with @samp{-fcheck-memory-usage}.
7987 @item -finstrument-functions
7988 Generate instrumentation calls for entry and exit to functions.  Just
7989 after function entry and just before function exit, the following
7990 profiling functions will be called with the address of the current
7991 function and its call site.  (On some platforms,
7992 @code{__builtin_return_address} does not work beyond the current
7993 function, so the call site information may not be available to the
7994 profiling functions otherwise.)
7996 @example
7997 void __cyg_profile_func_enter (void *this_fn, void *call_site);
7998 void __cyg_profile_func_exit  (void *this_fn, void *call_site);
7999 @end example
8001 The first argument is the address of the start of the current function,
8002 which may be looked up exactly in the symbol table.
8004 This instrumentation is also done for functions expanded inline in other
8005 functions.  The profiling calls will indicate where, conceptually, the
8006 inline function is entered and exited.  This means that addressable
8007 versions of such functions must be available.  If all your uses of a
8008 function are expanded inline, this may mean an additional expansion of
8009 code size.  If you use @samp{extern inline} in your C code, an
8010 addressable version of such functions must be provided.  (This is
8011 normally the case anyways, but if you get lucky and the optimizer always
8012 expands the functions inline, you might have gotten away without
8013 providing static copies.)
8015 A function may be given the attribute @code{no_instrument_function}, in
8016 which case this instrumentation will not be done.  This can be used, for
8017 example, for the profiling functions listed above, high-priority
8018 interrupt routines, and any functions from which the profiling functions
8019 cannot safely be called (perhaps signal handlers, if the profiling
8020 routines generate output or allocate memory).
8022 @item -fstack-check
8023 Generate code to verify that you do not go beyond the boundary of the
8024 stack.  You should specify this flag if you are running in an
8025 environment with multiple threads, but only rarely need to specify it in
8026 a single-threaded environment since stack overflow is automatically
8027 detected on nearly all systems if there is only one stack.
8029 Note that this switch does not actually cause checking to be done; the
8030 operating system must do that.  The switch causes generation of code
8031 to ensure that the operating system sees the stack being extended.
8033 @item -fstack-limit-register=@var{reg}
8034 @itemx -fstack-limit-symbol=@var{sym}
8035 @itemx -fno-stack-limit
8036 Generate code to ensure that the stack does not grow beyond a certain value,
8037 either the value of a register or the address of a symbol.  If the stack
8038 would grow beyond the value, a signal is raised.  For most targets,
8039 the signal is raised before the stack overruns the boundary, so
8040 it is possible to catch the signal without taking special precautions.
8042 For instance, if the stack starts at address @samp{0x80000000} and grows
8043 downwards you can use the flags
8044 @samp{-fstack-limit-symbol=__stack_limit}
8045 @samp{-Wl,--defsym,__stack_limit=0x7ffe0000} which will enforce a stack
8046 limit of 128K.
8048 @cindex aliasing of parameters
8049 @cindex parameters, aliased
8050 @item -fargument-alias
8051 @itemx -fargument-noalias
8052 @itemx -fargument-noalias-global
8053 Specify the possible relationships among parameters and between
8054 parameters and global data.
8056 @samp{-fargument-alias} specifies that arguments (parameters) may
8057 alias each other and may alias global storage.
8058 @samp{-fargument-noalias} specifies that arguments do not alias
8059 each other, but may alias global storage.
8060 @samp{-fargument-noalias-global} specifies that arguments do not
8061 alias each other and do not alias global storage.
8063 Each language will automatically use whatever option is required by
8064 the language standard.  You should not need to use these options yourself.
8066 @item -fleading-underscore
8067 This option and its counterpart, -fno-leading-underscore, forcibly
8068 change the way C symbols are represented in the object file.  One use
8069 is to help link with legacy assembly code.
8071 Be warned that you should know what you are doing when invoking this
8072 option, and that not all targets provide complete support for it.
8073 @end table
8075 @c man end
8077 @node Environment Variables
8078 @section Environment Variables Affecting GCC
8079 @cindex environment variables
8081 @c man begin ENVIRONMENT
8083 This section describes several environment variables that affect how GCC
8084 operates.  Some of them work by specifying directories or prefixes to use
8085 when searching for various kinds of files. Some are used to specify other
8086 aspects of the compilation environment.
8088 @ifclear INTERNALS
8089 Note that you can also specify places to search using options such as
8090 @samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}).  These
8091 take precedence over places specified using environment variables, which
8092 in turn take precedence over those specified by the configuration of GCC.
8094 @end ifclear
8095 @ifset INTERNALS
8096 Note that you can also specify places to search using options such as
8097 @samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}).  These
8098 take precedence over places specified using environment variables, which
8099 in turn take precedence over those specified by the configuration of GCC.
8100 @xref{Driver}.
8101 @end ifset
8103 @table @env
8104 @item LANG
8105 @itemx LC_CTYPE
8106 @c @itemx LC_COLLATE
8107 @itemx LC_MESSAGES
8108 @c @itemx LC_MONETARY
8109 @c @itemx LC_NUMERIC
8110 @c @itemx LC_TIME
8111 @itemx LC_ALL
8112 @findex LANG
8113 @findex LC_CTYPE
8114 @c @findex LC_COLLATE
8115 @findex LC_MESSAGES
8116 @c @findex LC_MONETARY
8117 @c @findex LC_NUMERIC
8118 @c @findex LC_TIME
8119 @findex LC_ALL
8120 @cindex locale
8121 These environment variables control the way that GCC uses
8122 localization information that allow GCC to work with different
8123 national conventions.  GCC inspects the locale categories
8124 @env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
8125 so.  These locale categories can be set to any value supported by your
8126 installation.  A typical value is @samp{en_UK} for English in the United
8127 Kingdom.
8129 The @env{LC_CTYPE} environment variable specifies character
8130 classification.  GCC uses it to determine the character boundaries in
8131 a string; this is needed for some multibyte encodings that contain quote
8132 and escape characters that would otherwise be interpreted as a string
8133 end or escape.
8135 The @env{LC_MESSAGES} environment variable specifies the language to
8136 use in diagnostic messages.
8138 If the @env{LC_ALL} environment variable is set, it overrides the value
8139 of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
8140 and @env{LC_MESSAGES} default to the value of the @env{LANG}
8141 environment variable.  If none of these variables are set, GCC
8142 defaults to traditional C English behavior.
8144 @item TMPDIR
8145 @findex TMPDIR
8146 If @env{TMPDIR} is set, it specifies the directory to use for temporary
8147 files.  GCC uses temporary files to hold the output of one stage of
8148 compilation which is to be used as input to the next stage: for example,
8149 the output of the preprocessor, which is the input to the compiler
8150 proper.
8152 @item GCC_EXEC_PREFIX
8153 @findex GCC_EXEC_PREFIX
8154 If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
8155 names of the subprograms executed by the compiler.  No slash is added
8156 when this prefix is combined with the name of a subprogram, but you can
8157 specify a prefix that ends with a slash if you wish.
8159 If @env{GCC_EXEC_PREFIX} is not set, GNU CC will attempt to figure out
8160 an appropriate prefix to use based on the pathname it was invoked with.
8162 If GCC cannot find the subprogram using the specified prefix, it
8163 tries looking in the usual places for the subprogram.
8165 The default value of @env{GCC_EXEC_PREFIX} is
8166 @file{@var{prefix}/lib/gcc-lib/} where @var{prefix} is the value
8167 of @code{prefix} when you ran the @file{configure} script.
8169 Other prefixes specified with @samp{-B} take precedence over this prefix.
8171 This prefix is also used for finding files such as @file{crt0.o} that are
8172 used for linking.
8174 In addition, the prefix is used in an unusual way in finding the
8175 directories to search for header files.  For each of the standard
8176 directories whose name normally begins with @samp{/usr/local/lib/gcc-lib}
8177 (more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
8178 replacing that beginning with the specified prefix to produce an
8179 alternate directory name.  Thus, with @samp{-Bfoo/}, GCC will search
8180 @file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
8181 These alternate directories are searched first; the standard directories
8182 come next.
8184 @item COMPILER_PATH
8185 @findex COMPILER_PATH
8186 The value of @env{COMPILER_PATH} is a colon-separated list of
8187 directories, much like @env{PATH}.  GCC tries the directories thus
8188 specified when searching for subprograms, if it can't find the
8189 subprograms using @env{GCC_EXEC_PREFIX}.
8191 @item LIBRARY_PATH
8192 @findex LIBRARY_PATH
8193 The value of @env{LIBRARY_PATH} is a colon-separated list of
8194 directories, much like @env{PATH}.  When configured as a native compiler,
8195 GCC tries the directories thus specified when searching for special
8196 linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
8197 using GCC also uses these directories when searching for ordinary
8198 libraries for the @samp{-l} option (but directories specified with
8199 @samp{-L} come first).
8201 @item C_INCLUDE_PATH
8202 @itemx CPLUS_INCLUDE_PATH
8203 @itemx OBJC_INCLUDE_PATH
8204 @findex C_INCLUDE_PATH
8205 @findex CPLUS_INCLUDE_PATH
8206 @findex OBJC_INCLUDE_PATH
8207 @c @itemx OBJCPLUS_INCLUDE_PATH
8208 These environment variables pertain to particular languages.  Each
8209 variable's value is a colon-separated list of directories, much like
8210 @env{PATH}.  When GCC searches for header files, it tries the
8211 directories listed in the variable for the language you are using, after
8212 the directories specified with @samp{-I} but before the standard header
8213 file directories.
8215 @item DEPENDENCIES_OUTPUT
8216 @findex DEPENDENCIES_OUTPUT
8217 @cindex dependencies for make as output
8218 If this variable is set, its value specifies how to output dependencies
8219 for Make based on the header files processed by the compiler.  This
8220 output looks much like the output from the @samp{-M} option
8221 (@pxref{Preprocessor Options}), but it goes to a separate file, and is
8222 in addition to the usual results of compilation.
8224 The value of @env{DEPENDENCIES_OUTPUT} can be just a file name, in
8225 which case the Make rules are written to that file, guessing the target
8226 name from the source file name.  Or the value can have the form
8227 @samp{@var{file} @var{target}}, in which case the rules are written to
8228 file @var{file} using @var{target} as the target name.
8230 @item LANG
8231 @findex LANG
8232 @cindex locale definition
8233 This variable is used to pass locale information to the compiler. One way in
8234 which this information is used is to determine the character set to be used
8235 when character literals, string literals and comments are parsed in C and C++.
8236 When the compiler is configured to allow multibyte characters,
8237 the following values for @env{LANG} are recognized:
8239 @table @samp
8240 @item C-JIS
8241 Recognize JIS characters.
8242 @item C-SJIS
8243 Recognize SJIS characters.
8244 @item C-EUCJP
8245 Recognize EUCJP characters.
8246 @end table
8248 If @env{LANG} is not defined, or if it has some other value, then the
8249 compiler will use mblen and mbtowc as defined by the default locale to
8250 recognize and translate multibyte characters.
8251 @end table
8253 @c man end
8255 @node Running Protoize
8256 @section Running Protoize
8258 The program @code{protoize} is an optional part of GNU C.  You can use
8259 it to add prototypes to a program, thus converting the program to ISO
8260 C in one respect.  The companion program @code{unprotoize} does the
8261 reverse: it removes argument types from any prototypes that are found.
8263 When you run these programs, you must specify a set of source files as
8264 command line arguments.  The conversion programs start out by compiling
8265 these files to see what functions they define.  The information gathered
8266 about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
8268 After scanning comes actual conversion.  The specified files are all
8269 eligible to be converted; any files they include (whether sources or
8270 just headers) are eligible as well.
8272 But not all the eligible files are converted.  By default,
8273 @code{protoize} and @code{unprotoize} convert only source and header
8274 files in the current directory.  You can specify additional directories
8275 whose files should be converted with the @samp{-d @var{directory}}
8276 option.  You can also specify particular files to exclude with the
8277 @samp{-x @var{file}} option.  A file is converted if it is eligible, its
8278 directory name matches one of the specified directory names, and its
8279 name within the directory has not been excluded.
8281 Basic conversion with @code{protoize} consists of rewriting most
8282 function definitions and function declarations to specify the types of
8283 the arguments.  The only ones not rewritten are those for varargs
8284 functions.
8286 @code{protoize} optionally inserts prototype declarations at the
8287 beginning of the source file, to make them available for any calls that
8288 precede the function's definition.  Or it can insert prototype
8289 declarations with block scope in the blocks where undeclared functions
8290 are called.
8292 Basic conversion with @code{unprotoize} consists of rewriting most
8293 function declarations to remove any argument types, and rewriting
8294 function definitions to the old-style pre-ISO form.
8296 Both conversion programs print a warning for any function declaration or
8297 definition that they can't convert.  You can suppress these warnings
8298 with @samp{-q}.
8300 The output from @code{protoize} or @code{unprotoize} replaces the
8301 original source file.  The original file is renamed to a name ending
8302 with @samp{.save} (for DOS, the saved filename ends in @samp{.sav} 
8303 without the original @samp{.c} suffix).  If the @samp{.save} (@samp{.sav}
8304 for DOS) file already exists, then the source file is simply discarded.
8306 @code{protoize} and @code{unprotoize} both depend on GCC itself to
8307 scan the program and collect information about the functions it uses.
8308 So neither of these programs will work until GCC is installed.
8310 Here is a table of the options you can use with @code{protoize} and
8311 @code{unprotoize}.  Each option works with both programs unless
8312 otherwise stated.
8314 @table @code
8315 @item -B @var{directory}
8316 Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
8317 usual directory (normally @file{/usr/local/lib}).  This file contains
8318 prototype information about standard system functions.  This option
8319 applies only to @code{protoize}.
8321 @item -c @var{compilation-options}
8322 Use  @var{compilation-options} as the options when running @code{gcc} to
8323 produce the @samp{.X} files.  The special option @samp{-aux-info} is
8324 always passed in addition, to tell @code{gcc} to write a @samp{.X} file.
8326 Note that the compilation options must be given as a single argument to
8327 @code{protoize} or @code{unprotoize}.  If you want to specify several
8328 @code{gcc} options, you must quote the entire set of compilation options
8329 to make them a single word in the shell.
8331 There are certain @code{gcc} arguments that you cannot use, because they
8332 would produce the wrong kind of output.  These include @samp{-g},
8333 @samp{-O}, @samp{-c}, @samp{-S}, and @samp{-o} If you include these in
8334 the @var{compilation-options}, they are ignored.
8336 @item -C
8337 Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file
8338 systems) instead of @samp{.c}.  This is convenient if you are converting 
8339 a C program to C++.  This option applies only to @code{protoize}.
8341 @item -g
8342 Add explicit global declarations.  This means inserting explicit
8343 declarations at the beginning of each source file for each function
8344 that is called in the file and was not declared.  These declarations
8345 precede the first function definition that contains a call to an
8346 undeclared function.  This option applies only to @code{protoize}.
8348 @item -i @var{string}
8349 Indent old-style parameter declarations with the string @var{string}.
8350 This option applies only to @code{protoize}.
8352 @code{unprotoize} converts prototyped function definitions to old-style
8353 function definitions, where the arguments are declared between the
8354 argument list and the initial @samp{@{}.  By default, @code{unprotoize}
8355 uses five spaces as the indentation.  If you want to indent with just
8356 one space instead, use @samp{-i " "}.
8358 @item -k
8359 Keep the @samp{.X} files.  Normally, they are deleted after conversion
8360 is finished.
8362 @item -l
8363 Add explicit local declarations.  @code{protoize} with @samp{-l} inserts
8364 a prototype declaration for each function in each block which calls the
8365 function without any declaration.  This option applies only to
8366 @code{protoize}.
8368 @item -n
8369 Make no real changes.  This mode just prints information about the conversions
8370 that would have been done without @samp{-n}.
8372 @item -N
8373 Make no @samp{.save} files.  The original files are simply deleted.
8374 Use this option with caution.
8376 @item -p @var{program}
8377 Use the program @var{program} as the compiler.  Normally, the name
8378 @file{gcc} is used.
8380 @item -q
8381 Work quietly.  Most warnings are suppressed.
8383 @item -v
8384 Print the version number, just like @samp{-v} for @code{gcc}.
8385 @end table
8387 If you need special compiler options to compile one of your program's
8388 source files, then you should generate that file's @samp{.X} file
8389 specially, by running @code{gcc} on that source file with the
8390 appropriate options and the option @samp{-aux-info}.  Then run
8391 @code{protoize} on the entire set of files.  @code{protoize} will use
8392 the existing @samp{.X} file because it is newer than the source file.
8393 For example:
8395 @example
8396 gcc -Dfoo=bar file1.c -aux-info
8397 protoize *.c
8398 @end example
8400 @noindent
8401 You need to include the special files along with the rest in the
8402 @code{protoize} command, even though their @samp{.X} files already
8403 exist, because otherwise they won't get converted.
8405 @xref{Protoize Caveats}, for more information on how to use
8406 @code{protoize} successfully.