OSDN Git Service

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