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