OSDN Git Service

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