OSDN Git Service

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