* doc/invoke.texi (Overall Options): Document default for -o
[official-gcc.git] / gcc / doc / invoke.texi
blob73fed775f9201e90133d7796edbd5aafdf2ca73e
1 @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2 @c 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
3 @c This is part of the GCC manual.
4 @c For copying conditions, see the file gcc.texi.
6 @ignore
7 @c man begin COPYRIGHT
8 Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
9 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
11 Permission is granted to copy, distribute and/or modify this document
12 under the terms of the GNU Free Documentation License, Version 1.2 or
13 any later version published by the Free Software Foundation; with the
14 Invariant Sections being ``GNU General Public License'' and ``Funding
15 Free Software'', the Front-Cover texts being (a) (see below), and with
16 the Back-Cover Texts being (b) (see below).  A copy of the license is
17 included in the gfdl(7) man page.
19 (a) The FSF's Front-Cover Text is:
21      A GNU Manual
23 (b) The FSF's Back-Cover Text is:
25      You have freedom to copy and modify this GNU Manual, like GNU
26      software.  Copies published by the Free Software Foundation raise
27      funds for GNU development.
28 @c man end
29 @c Set file name and title for the man page.
30 @setfilename gcc
31 @settitle GNU project C and C++ compiler
32 @c man begin SYNOPSIS
33 gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
34     [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
35     [@option{-W}@var{warn}@dots{}] [@option{-pedantic}]
36     [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
37     [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
38     [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
39     [@option{-o} @var{outfile}] @var{infile}@dots{}
41 Only the most useful options are listed here; see below for the
42 remainder.  @samp{g++} accepts mostly the same options as @samp{gcc}.
43 @c man end
44 @c man begin SEEALSO
45 gpl(7), gfdl(7), fsf-funding(7),
46 cpp(1), gcov(1), g77(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
47 and the Info entries for @file{gcc}, @file{cpp}, @file{g77}, @file{as},
48 @file{ld}, @file{binutils} and @file{gdb}.
49 @c man end
50 @c man begin BUGS
51 For instructions on reporting bugs, see
52 @w{@uref{http://gcc.gnu.org/bugs.html}}.  Use of the @command{gccbug}
53 script to report bugs is recommended.
54 @c man end
55 @c man begin AUTHOR
56 See the Info entry for @command{gcc}, or
57 @w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
58 for contributors to GCC@.
59 @c man end
60 @end ignore
62 @node Invoking GCC
63 @chapter GCC Command Options
64 @cindex GCC command options
65 @cindex command options
66 @cindex options, GCC command
68 @c man begin DESCRIPTION
69 When you invoke GCC, it normally does preprocessing, compilation,
70 assembly and linking.  The ``overall options'' allow you to stop this
71 process at an intermediate stage.  For example, the @option{-c} option
72 says not to run the linker.  Then the output consists of object files
73 output by the assembler.
75 Other options are passed on to one stage of processing.  Some options
76 control the preprocessor and others the compiler itself.  Yet other
77 options control the assembler and linker; most of these are not
78 documented here, since you rarely need to use any of them.
80 @cindex C compilation options
81 Most of the command line options that you can use with GCC are useful
82 for C programs; when an option is only useful with another language
83 (usually C++), the explanation says so explicitly.  If the description
84 for a particular option does not mention a source language, you can use
85 that option with all supported languages.
87 @cindex C++ compilation options
88 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
89 options for compiling C++ programs.
91 @cindex grouping options
92 @cindex options, grouping
93 The @command{gcc} program accepts options and file names as operands.  Many
94 options have multi-letter names; therefore multiple single-letter options
95 may @emph{not} be grouped: @option{-dr} is very different from @w{@samp{-d
96 -r}}.
98 @cindex order of options
99 @cindex options, order
100 You can mix options and other arguments.  For the most part, the order
101 you use doesn't matter.  Order does matter when you use several options
102 of the same kind; for example, if you specify @option{-L} more than once,
103 the directories are searched in the order specified.
105 Many options have long names starting with @samp{-f} or with
106 @samp{-W}---for example, @option{-fforce-mem},
107 @option{-fstrength-reduce}, @option{-Wformat} and so on.  Most of
108 these have both positive and negative forms; the negative form of
109 @option{-ffoo} would be @option{-fno-foo}.  This manual documents
110 only one of these two forms, whichever one is not the default.
112 @c man end
114 @xref{Option Index}, for an index to GCC's options.
116 @menu
117 * Option Summary::      Brief list of all options, without explanations.
118 * Overall Options::     Controlling the kind of output:
119                         an executable, object files, assembler files,
120                         or preprocessed source.
121 * Invoking G++::        Compiling C++ programs.
122 * C Dialect Options::   Controlling the variant of C language compiled.
123 * C++ Dialect Options:: Variations on C++.
124 * Objective-C Dialect Options:: Variations on Objective-C.
125 * Language Independent Options:: Controlling how diagnostics should be
126                         formatted.
127 * Warning Options::     How picky should the compiler be?
128 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
129 * Optimize Options::    How much optimization?
130 * Preprocessor Options:: Controlling header files and macro definitions.
131                          Also, getting dependency information for Make.
132 * Assembler Options::   Passing options to the assembler.
133 * Link Options::        Specifying libraries and so on.
134 * Directory Options::   Where to find header files and libraries.
135                         Where to find the compiler executable files.
136 * Spec Files::          How to pass switches to sub-processes.
137 * Target Options::      Running a cross-compiler, or an old version of GCC.
138 * Submodel Options::    Specifying minor hardware or convention variations,
139                         such as 68010 vs 68020.
140 * Code Gen Options::    Specifying conventions for function calls, data layout
141                         and register usage.
142 * Environment Variables:: Env vars that affect GCC.
143 * Precompiled Headers:: Compiling a header once, and using it many times.
144 * Running Protoize::    Automatically adding or removing function prototypes.
145 @end menu
147 @c man begin OPTIONS
149 @node Option Summary
150 @section Option Summary
152 Here is a summary of all the options, grouped by type.  Explanations are
153 in the following sections.
155 @table @emph
156 @item Overall Options
157 @xref{Overall Options,,Options Controlling the Kind of Output}.
158 @gccoptlist{-c  -S  -E  -o @var{file}  -combine -pipe  -pass-exit-codes  @gol
159 -x @var{language}  -v  -###  --help  --target-help  --version}
161 @item C Language Options
162 @xref{C Dialect Options,,Options Controlling C Dialect}.
163 @gccoptlist{-ansi  -std=@var{standard}  -aux-info @var{filename} @gol
164 -fno-asm  -fno-builtin  -fno-builtin-@var{function} @gol
165 -fhosted  -ffreestanding  -fms-extensions @gol
166 -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp @gol
167 -fallow-single-precision  -fcond-mismatch @gol
168 -fsigned-bitfields  -fsigned-char @gol
169 -funsigned-bitfields  -funsigned-char}
171 @item C++ Language Options
172 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
173 @gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
174 -fconserve-space  -fno-const-strings @gol
175 -fno-elide-constructors @gol
176 -fno-enforce-eh-specs @gol
177 -ffor-scope  -fno-for-scope  -fno-gnu-keywords @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  -fno-weak  -nostdinc++ @gol
185 -fno-default-inline  -Wabi  -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}
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 @gol
197 -fno-nil-receivers @gol
198 -fobjc-exceptions @gol
199 -freplace-objc-classes @gol
200 -fzero-link @gol
201 -gen-decls @gol
202 -Wno-protocol  -Wselector -Wundeclared-selector}
204 @item Language Independent Options
205 @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
206 @gccoptlist{-fmessage-length=@var{n}  @gol
207 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}}
209 @item Warning Options
210 @xref{Warning Options,,Options to Request or Suppress Warnings}.
211 @gccoptlist{-fsyntax-only  -pedantic  -pedantic-errors @gol
212 -w  -Wextra  -Wall  -Waggregate-return @gol
213 -Wcast-align  -Wcast-qual  -Wchar-subscripts  -Wcomment @gol
214 -Wconversion  -Wno-deprecated-declarations @gol
215 -Wdisabled-optimization  -Wno-div-by-zero  -Wendif-labels @gol
216 -Werror  -Werror-implicit-function-declaration @gol
217 -Wfloat-equal  -Wformat  -Wformat=2 @gol
218 -Wno-format-extra-args -Wformat-nonliteral @gol
219 -Wformat-security  -Wformat-y2k @gol
220 -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int @gol
221 -Wimport  -Wno-import  -Winit-self  -Winline @gol
222 -Wno-invalid-offsetof  -Winvalid-pch @gol
223 -Wlarger-than-@var{len}  -Wlong-long @gol
224 -Wmain  -Wmissing-braces @gol
225 -Wmissing-format-attribute  -Wmissing-noreturn @gol
226 -Wno-multichar  -Wnonnull  -Wpacked  -Wpadded @gol
227 -Wparentheses  -Wpointer-arith  -Wredundant-decls @gol
228 -Wreturn-type  -Wsequence-point  -Wshadow @gol
229 -Wsign-compare  -Wstrict-aliasing -Wstrict-aliasing=2 @gol
230 -Wswitch  -Wswitch-default  -Wswitch-enum @gol
231 -Wsystem-headers  -Wtrigraphs  -Wundef  -Wuninitialized @gol
232 -Wunknown-pragmas  -Wunreachable-code @gol
233 -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter @gol
234 -Wunused-value  -Wunused-variable  -Wwrite-strings @gol
235 -Wvariadic-macros}
237 @item C-only Warning Options
238 @gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
239 -Wmissing-prototypes  -Wnested-externs  -Wold-style-definition @gol
240 -Wstrict-prototypes  -Wtraditional @gol
241 -Wdeclaration-after-statement}
243 @item Debugging Options
244 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
245 @gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
246 -fdump-unnumbered  -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
247 -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
248 -fdump-tree-original@r{[}-@var{n}@r{]}  @gol
249 -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
250 -fdump-tree-inlined@r{[}-@var{n}@r{]} @gol
251 -feliminate-dwarf2-dups -feliminate-unused-debug-types @gol
252 -feliminate-unused-debug-symbols -fmem-report -fprofile-arcs @gol
253 -frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
254 -ftest-coverage  -ftime-report -fvar-tracking @gol
255 -g  -g@var{level}  -gcoff -gdwarf-2 @gol
256 -ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+ @gol
257 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
258 -print-multi-directory  -print-multi-lib @gol
259 -print-prog-name=@var{program}  -print-search-dirs  -Q @gol
260 -save-temps  -time}
262 @item Optimization Options
263 @xref{Optimize Options,,Options that Control Optimization}.
264 @gccoptlist{-falign-functions=@var{n}  -falign-jumps=@var{n} @gol
265 -falign-labels=@var{n}  -falign-loops=@var{n}  @gol
266 -fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize @gol
267 -fbranch-target-load-optimize2 -fbtr-bb-exclusive @gol
268 -fcaller-saves  -fcprop-registers @gol
269 -fcse-follow-jumps  -fcse-skip-blocks  -fdata-sections @gol
270 -fdelayed-branch  -fdelete-null-pointer-checks @gol
271 -fexpensive-optimizations  -ffast-math  -ffloat-store @gol
272 -fforce-addr  -fforce-mem  -ffunction-sections @gol
273 -fgcse  -fgcse-lm  -fgcse-sm  -fgcse-las  -floop-optimize @gol
274 -fcrossjumping  -fif-conversion  -fif-conversion2 @gol
275 -finline-functions  -finline-limit=@var{n}  -fkeep-inline-functions @gol
276 -fkeep-static-consts  -fmerge-constants  -fmerge-all-constants @gol
277 -fmove-all-movables  -fnew-ra  -fno-branch-count-reg @gol
278 -fno-default-inline  -fno-defer-pop @gol
279 -fno-function-cse  -fno-guess-branch-probability @gol
280 -fno-inline  -fno-math-errno  -fno-peephole  -fno-peephole2 @gol
281 -funsafe-math-optimizations  -ffinite-math-only @gol
282 -fno-trapping-math  -fno-zero-initialized-in-bss @gol
283 -fomit-frame-pointer  -foptimize-register-move @gol
284 -foptimize-sibling-calls  -fprefetch-loop-arrays @gol
285 -fprofile-generate -fprofile-use @gol
286 -freduce-all-givs  -fregmove  -frename-registers @gol
287 -freorder-blocks  -freorder-blocks-and-partition -freorder-functions @gol
288 -frerun-cse-after-loop  -frerun-loop-opt @gol
289 -frounding-math -fschedule-insns  -fschedule-insns2 @gol
290 -fno-sched-interblock  -fno-sched-spec  -fsched-spec-load @gol
291 -fsched-spec-load-dangerous  @gol
292 -fsched-stalled-insns=@var{n} -sched-stalled-insns-dep=@var{n} @gol
293 -fsched2-use-superblocks @gol
294 -fsched2-use-traces  -fsignaling-nans @gol
295 -fsingle-precision-constant  @gol
296 -fstrength-reduce  -fstrict-aliasing  -ftracer  -fthread-jumps @gol
297 -funroll-all-loops  -funroll-loops  -fpeel-loops @gol
298 -funswitch-loops  -fold-unroll-loops  -fold-unroll-all-loops @gol
299 --param @var{name}=@var{value}
300 -O  -O0  -O1  -O2  -O3  -Os}
302 @item Preprocessor Options
303 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
304 @gccoptlist{-A@var{question}=@var{answer} @gol
305 -A-@var{question}@r{[}=@var{answer}@r{]} @gol
306 -C  -dD  -dI  -dM  -dN @gol
307 -D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
308 -idirafter @var{dir} @gol
309 -include @var{file}  -imacros @var{file} @gol
310 -iprefix @var{file}  -iwithprefix @var{dir} @gol
311 -iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
312 -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
313 -P  -fworking-directory  -remap @gol
314 -trigraphs  -undef  -U@var{macro}  -Wp,@var{option} @gol
315 -Xpreprocessor @var{option}}
317 @item Assembler Option
318 @xref{Assembler Options,,Passing Options to the Assembler}.
319 @gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}
321 @item Linker Options
322 @xref{Link Options,,Options for Linking}.
323 @gccoptlist{@var{object-file-name}  -l@var{library} @gol
324 -nostartfiles  -nodefaultlibs  -nostdlib -pie @gol
325 -s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic @gol
326 -Wl,@var{option}  -Xlinker @var{option} @gol
327 -u @var{symbol}}
329 @item Directory Options
330 @xref{Directory Options,,Options for Directory Search}.
331 @gccoptlist{-B@var{prefix}  -I@var{dir}  -I-  -L@var{dir}  -specs=@var{file}}
333 @item Target Options
334 @c I wrote this xref this way to avoid overfull hbox. -- rms
335 @xref{Target Options}.
336 @gccoptlist{-V @var{version}  -b @var{machine}}
338 @item Machine Dependent Options
339 @xref{Submodel Options,,Hardware Models and Configurations}.
341 @emph{M680x0 Options}
342 @gccoptlist{-m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
343 -m68060  -mcpu32  -m5200  -m68881  -mbitfield  -mc68000  -mc68020   @gol
344 -mnobitfield  -mrtd  -mshort  -msoft-float  -mpcrel @gol
345 -malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
346 -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library}
348 @emph{M68hc1x Options}
349 @gccoptlist{-m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12 @gol
350 -mauto-incdec  -minmax  -mlong-calls  -mshort @gol
351 -msoft-reg-count=@var{count}}
353 @emph{VAX Options}
354 @gccoptlist{-mg  -mgnu  -munix}
356 @emph{SPARC Options}
357 @gccoptlist{-mcpu=@var{cpu-type} @gol
358 -mtune=@var{cpu-type} @gol
359 -mcmodel=@var{code-model} @gol
360 -m32  -m64  -mapp-regs  -mno-app-regs @gol
361 -mfaster-structs  -mno-faster-structs @gol
362 -mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
363 -mhard-quad-float  -msoft-quad-float @gol
364 -mimpure-text  -mno-impure-text  -mlittle-endian @gol
365 -mstack-bias  -mno-stack-bias @gol
366 -munaligned-doubles  -mno-unaligned-doubles @gol
367 -mv8plus  -mno-v8plus  -mvis  -mno-vis}
369 @emph{ARM Options}
370 @gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
371 -mabi=@var{name} @gol
372 -mapcs-26  -mapcs-32 @gol
373 -mapcs-stack-check  -mno-apcs-stack-check @gol
374 -mapcs-float  -mno-apcs-float @gol
375 -mapcs-reentrant  -mno-apcs-reentrant @gol
376 -msched-prolog  -mno-sched-prolog @gol
377 -mlittle-endian  -mbig-endian  -mwords-little-endian @gol
378 -malignment-traps  -mno-alignment-traps @gol
379 -mfloat-abi=@var{name}  soft-float  -mhard-float  -mfpe @gol
380 -mthumb-interwork  -mno-thumb-interwork @gol
381 -mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
382 -mstructure-size-boundary=@var{n} @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 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol
389 -mpoke-function-name @gol
390 -mthumb  -marm @gol
391 -mtpcs-frame  -mtpcs-leaf-frame @gol
392 -mcaller-super-interworking  -mcallee-super-interworking}
394 @emph{MN10300 Options}
395 @gccoptlist{-mmult-bug  -mno-mult-bug @gol
396 -mam33  -mno-am33 @gol
397 -mam33-2  -mno-am33-2 @gol
398 -mno-crt0  -mrelax}
400 @emph{M32R/D Options}
401 @gccoptlist{-m32r2 -m32rx -m32r @gol
402 -mdebug @gol
403 -malign-loops -mno-align-loops @gol
404 -missue-rate=@var{number} @gol
405 -mbranch-cost=@var{number} @gol
406 -mmodel=@var{code-size-model-type} @gol
407 -msdata=@var{sdata-type} @gol
408 -mno-flush-func -mflush-func=@var{name} @gol
409 -mno-flush-trap -mflush-trap=@var{number} @gol
410 -G @var{num}}
412 @emph{RS/6000 and PowerPC Options}
413 @gccoptlist{-mcpu=@var{cpu-type} @gol
414 -mtune=@var{cpu-type} @gol
415 -mpower  -mno-power  -mpower2  -mno-power2 @gol
416 -mpowerpc  -mpowerpc64  -mno-powerpc @gol
417 -maltivec  -mno-altivec @gol
418 -mpowerpc-gpopt  -mno-powerpc-gpopt @gol
419 -mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
420 -mnew-mnemonics  -mold-mnemonics @gol
421 -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
422 -m64  -m32  -mxl-call  -mno-xl-call  -mpe @gol
423 -malign-power  -malign-natural @gol
424 -msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
425 -mstring  -mno-string  -mupdate  -mno-update @gol
426 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
427 -mstrict-align  -mno-strict-align  -mrelocatable @gol
428 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
429 -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
430 -mdynamic-no-pic @gol
431 -mprioritize-restricted-insns=@var{priority} @gol
432 -msched-costly-dep=@var{dependence_type} @gol
433 -minsert-sched-nops=@var{scheme} @gol
434 -mcall-sysv  -mcall-netbsd @gol
435 -maix-struct-return  -msvr4-struct-return @gol
436 -mabi=altivec  -mabi=no-altivec @gol
437 -mabi=spe  -mabi=no-spe @gol
438 -misel=yes  -misel=no @gol
439 -mspe=yes  -mspe=no @gol
440 -mfloat-gprs=yes  -mfloat-gprs=no @gol
441 -mprototype  -mno-prototype @gol
442 -msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
443 -msdata=@var{opt}  -mvxworks  -mwindiss  -G @var{num}  -pthread}
445 @emph{Darwin Options}
446 @gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
447 -arch_only  -bind_at_load  -bundle  -bundle_loader @gol
448 -client_name  -compatibility_version  -current_version @gol
449 -dependency-file  -dylib_file  -dylinker_install_name @gol
450 -dynamic  -dynamiclib  -exported_symbols_list @gol
451 -filelist  -flat_namespace  -force_cpusubtype_ALL @gol
452 -force_flat_namespace  -headerpad_max_install_names @gol
453 -image_base  -init  -install_name  -keep_private_externs @gol
454 -multi_module  -multiply_defined  -multiply_defined_unused @gol
455 -noall_load  -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit @gol
456 -pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
457 -private_bundle  -read_only_relocs  -sectalign @gol
458 -sectobjectsymbols  -whyload  -seg1addr @gol
459 -sectcreate  -sectobjectsymbols  -sectorder @gol
460 -seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
461 -segprot  -segs_read_only_addr  -segs_read_write_addr @gol
462 -single_module  -static  -sub_library  -sub_umbrella @gol
463 -twolevel_namespace  -umbrella  -undefined @gol
464 -unexported_symbols_list  -weak_reference_mismatches @gol
465 -whatsloaded}
467 @emph{MIPS Options}
468 @gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
469 -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips64 @gol
470 -mips16  -mno-mips16  -mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
471 -mxgot  -mno-xgot  -mgp32  -mgp64  -mfp32  -mfp64 @gol
472 -mhard-float  -msoft-float  -msingle-float  -mdouble-float @gol
473 -mint64  -mlong64  -mlong32 @gol
474 -G@var{num}  -membedded-data  -mno-embedded-data @gol
475 -muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
476 -msplit-addresses  -mno-split-addresses  @gol
477 -mexplicit-relocs  -mno-explicit-relocs  @gol
478 -mrnames  -mno-rnames @gol
479 -mcheck-zero-division  -mno-check-zero-division @gol
480 -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
481 -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp @gol
482 -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
483 -mfix-vr4120  -mno-fix-vr4120  -mfix-sb1  -mno-fix-sb1 @gol
484 -mflush-func=@var{func}  -mno-flush-func @gol
485 -mbranch-likely  -mno-branch-likely @gol
486 -mfp-exceptions -mno-fp-exceptions}
488 @emph{i386 and x86-64 Options}
489 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
490 -mfpmath=@var{unit} @gol
491 -masm=@var{dialect}  -mno-fancy-math-387 @gol
492 -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib @gol
493 -mno-wide-multiply  -mrtd  -malign-double @gol
494 -mpreferred-stack-boundary=@var{num} @gol
495 -mmmx  -msse  -msse2 -msse3 -m3dnow @gol
496 -mthreads  -mno-align-stringops  -minline-all-stringops @gol
497 -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
498 -m96bit-long-double  -mregparm=@var{num}  -momit-leaf-frame-pointer @gol
499 -mno-red-zone -mno-tls-direct-seg-refs @gol
500 -mcmodel=@var{code-model} @gol
501 -m32  -m64}
503 @emph{HPPA Options}
504 @gccoptlist{-march=@var{architecture-type} @gol
505 -mbig-switch  -mdisable-fpregs  -mdisable-indexing @gol
506 -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
507 -mjump-in-delay -mlinker-opt -mlong-calls @gol
508 -mlong-load-store  -mno-big-switch  -mno-disable-fpregs @gol
509 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
510 -mno-jump-in-delay  -mno-long-load-store @gol
511 -mno-portable-runtime  -mno-soft-float @gol
512 -mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
513 -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
514 -mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
515 -nolibdld  -static  -threads}
517 @emph{DEC Alpha Options}
518 @gccoptlist{-mno-fp-regs  -msoft-float  -malpha-as  -mgas @gol
519 -mieee  -mieee-with-inexact  -mieee-conformant @gol
520 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
521 -mtrap-precision=@var{mode}  -mbuild-constants @gol
522 -mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
523 -mbwx  -mmax  -mfix  -mcix @gol
524 -mfloat-vax  -mfloat-ieee @gol
525 -mexplicit-relocs  -msmall-data  -mlarge-data @gol
526 -msmall-text  -mlarge-text @gol
527 -mmemory-latency=@var{time}}
529 @emph{DEC Alpha/VMS Options}
530 @gccoptlist{-mvms-return-codes}
532 @emph{H8/300 Options}
533 @gccoptlist{-mrelax  -mh  -ms  -mn  -mint32  -malign-300}
535 @emph{SH Options}
536 @gccoptlist{-m1  -m2  -m2e  -m3  -m3e @gol
537 -m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
538 -m5-64media  -m5-64media-nofpu @gol
539 -m5-32media  -m5-32media-nofpu @gol
540 -m5-compact  -m5-compact-nofpu @gol
541 -mb  -ml  -mdalign  -mrelax @gol
542 -mbigtable  -mfmovd  -mhitachi  -mnomacsave @gol
543 -mieee  -misize  -mpadstruct  -mspace @gol
544 -mprefergot  -musermode}
546 @emph{System V Options}
547 @gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
549 @emph{ARC Options}
550 @gccoptlist{-EB  -EL @gol
551 -mmangle-cpu  -mcpu=@var{cpu}  -mtext=@var{text-section} @gol
552 -mdata=@var{data-section}  -mrodata=@var{readonly-data-section}}
554 @emph{TMS320C3x/C4x Options}
555 @gccoptlist{-mcpu=@var{cpu}  -mbig  -msmall  -mregparm  -mmemparm @gol
556 -mfast-fix  -mmpyi  -mbk  -mti  -mdp-isr-reload @gol
557 -mrpts=@var{count}  -mrptb  -mdb  -mloop-unsigned @gol
558 -mparallel-insns  -mparallel-mpy  -mpreserve-float}
560 @emph{V850 Options}
561 @gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
562 -mprolog-function  -mno-prolog-function  -mspace @gol
563 -mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
564 -mapp-regs  -mno-app-regs @gol
565 -mdisable-callt  -mno-disable-callt @gol
566 -mv850e1 @gol
567 -mv850e @gol
568 -mv850  -mbig-switch}
570 @emph{NS32K Options}
571 @gccoptlist{-m32032  -m32332  -m32532  -m32081  -m32381 @gol
572 -mmult-add  -mnomult-add  -msoft-float  -mrtd  -mnortd @gol
573 -mregparam  -mnoregparam  -msb  -mnosb @gol
574 -mbitfield  -mnobitfield  -mhimem  -mnohimem}
576 @emph{AVR Options}
577 @gccoptlist{-mmcu=@var{mcu}  -msize  -minit-stack=@var{n}  -mno-interrupts @gol
578 -mcall-prologues  -mno-tablejump  -mtiny-stack}
580 @emph{MCore Options}
581 @gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
582 -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
583 -m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
584 -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
585 -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
587 @emph{MMIX Options}
588 @gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
589 -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
590 -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
591 -mno-base-addresses  -msingle-exit  -mno-single-exit}
593 @emph{IA-64 Options}
594 @gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
595 -mvolatile-asm-stop  -mb-step  -mregister-names  -mno-sdata @gol
596 -mconstant-gp  -mauto-pic  -minline-float-divide-min-latency @gol
597 -minline-float-divide-max-throughput @gol
598 -minline-int-divide-min-latency @gol
599 -minline-int-divide-max-throughput  -mno-dwarf2-asm @gol
600 -mfixed-range=@var{register-range}}
602 @emph{S/390 and zSeries Options}
603 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
604 -mhard-float  -msoft-float  -mbackchain  -mno-backchain @gol
605 -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
606 -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch  -mfused-madd  -mno-fused-madd}
608 @emph{CRIS Options}
609 @gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
610 -mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
611 -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
612 -mstack-align  -mdata-align  -mconst-align @gol
613 -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
614 -melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
615 -mmul-bug-workaround  -mno-mul-bug-workaround}
617 @emph{PDP-11 Options}
618 @gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
619 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
620 -mint16  -mno-int32  -mfloat32  -mno-float64 @gol
621 -mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
622 -mbranch-expensive  -mbranch-cheap @gol
623 -msplit  -mno-split  -munix-asm  -mdec-asm}
625 @emph{Xstormy16 Options}
626 @gccoptlist{-msim}
628 @emph{Xtensa Options}
629 @gccoptlist{-mconst16 -mno-const16 @gol
630 -mfused-madd  -mno-fused-madd @gol
631 -mtext-section-literals  -mno-text-section-literals @gol
632 -mtarget-align  -mno-target-align @gol
633 -mlongcalls  -mno-longcalls}
635 @emph{FRV Options}
636 @gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
637 -mhard-float  -msoft-float @gol
638 -malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
639 -mdouble  -mno-double @gol
640 -mmedia  -mno-media  -mmuladd  -mno-muladd @gol
641 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic -mlinked-fp @gol
642 -mlibrary-pic  -macc-4 -macc-8 @gol
643 -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
644 -mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
645 -mvliw-branch  -mno-vliw-branch @gol
646 -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
647 -mno-nested-cond-exec  -mtomcat-stats @gol
648 -mcpu=@var{cpu}}
650 @item Code Generation Options
651 @xref{Code Gen Options,,Options for Code Generation Conventions}.
652 @gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
653 -ffixed-@var{reg}  -fexceptions @gol
654 -fnon-call-exceptions  -funwind-tables @gol
655 -fasynchronous-unwind-tables @gol
656 -finhibit-size-directive  -finstrument-functions @gol
657 -fno-common  -fno-ident @gol
658 -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE @gol
659 -freg-struct-return  -fshared-data  -fshort-enums @gol
660 -fshort-double  -fshort-wchar @gol
661 -fverbose-asm  -fpack-struct  -fstack-check @gol
662 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
663 -fargument-alias  -fargument-noalias @gol
664 -fargument-noalias-global  -fleading-underscore @gol
665 -ftls-model=@var{model} @gol
666 -ftrapv  -fwrapv  -fbounds-check}
667 @end table
669 @menu
670 * Overall Options::     Controlling the kind of output:
671                         an executable, object files, assembler files,
672                         or preprocessed source.
673 * C Dialect Options::   Controlling the variant of C language compiled.
674 * C++ Dialect Options:: Variations on C++.
675 * Objective-C Dialect Options:: Variations on Objective-C.
676 * Language Independent Options:: Controlling how diagnostics should be
677                         formatted.
678 * Warning Options::     How picky should the compiler be?
679 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
680 * Optimize Options::    How much optimization?
681 * Preprocessor Options:: Controlling header files and macro definitions.
682                          Also, getting dependency information for Make.
683 * Assembler Options::   Passing options to the assembler.
684 * Link Options::        Specifying libraries and so on.
685 * Directory Options::   Where to find header files and libraries.
686                         Where to find the compiler executable files.
687 * Spec Files::          How to pass switches to sub-processes.
688 * Target Options::      Running a cross-compiler, or an old version of GCC.
689 @end menu
691 @node Overall Options
692 @section Options Controlling the Kind of Output
694 Compilation can involve up to four stages: preprocessing, compilation
695 proper, assembly and linking, always in that order.  GCC is capable of
696 preprocessing and compiling several files either into several
697 assembler input files, or into one assembler input file; then each
698 assembler input file produces an object file, and linking combines all
699 the object files (those newly compiled, and those specified as input)
700 into an executable file.
702 @cindex file name suffix
703 For any given input file, the file name suffix determines what kind of
704 compilation is done:
706 @table @gcctabopt
707 @item @var{file}.c
708 C source code which must be preprocessed.
710 @item @var{file}.i
711 C source code which should not be preprocessed.
713 @item @var{file}.ii
714 C++ source code which should not be preprocessed.
716 @item @var{file}.m
717 Objective-C source code.  Note that you must link with the library
718 @file{libobjc.a} to make an Objective-C program work.
720 @item @var{file}.mi
721 Objective-C source code which should not be preprocessed.
723 @item @var{file}.h
724 C or C++ header file to be turned into a precompiled header.
726 @item @var{file}.cc
727 @itemx @var{file}.cp
728 @itemx @var{file}.cxx
729 @itemx @var{file}.cpp
730 @itemx @var{file}.CPP
731 @itemx @var{file}.c++
732 @itemx @var{file}.C
733 C++ source code which must be preprocessed.  Note that in @samp{.cxx},
734 the last two letters must both be literally @samp{x}.  Likewise,
735 @samp{.C} refers to a literal capital C@.
737 @item @var{file}.hh
738 @itemx @var{file}.H
739 C++ header file to be turned into a precompiled header.
741 @item @var{file}.f
742 @itemx @var{file}.for
743 @itemx @var{file}.FOR
744 Fortran source code which should not be preprocessed.
746 @item @var{file}.F
747 @itemx @var{file}.fpp
748 @itemx @var{file}.FPP
749 Fortran source code which must be preprocessed (with the traditional
750 preprocessor).
752 @item @var{file}.r
753 Fortran source code which must be preprocessed with a RATFOR
754 preprocessor (not included with GCC)@.
756 @xref{Overall Options,,Options Controlling the Kind of Output, g77,
757 Using and Porting GNU Fortran}, for more details of the handling of
758 Fortran input files.
760 @c FIXME: Descriptions of Java file types.
761 @c @var{file}.java
762 @c @var{file}.class
763 @c @var{file}.zip
764 @c @var{file}.jar
766 @item @var{file}.ads
767 Ada source code file which contains a library unit declaration (a
768 declaration of a package, subprogram, or generic, or a generic
769 instantiation), or a library unit renaming declaration (a package,
770 generic, or subprogram renaming declaration).  Such files are also
771 called @dfn{specs}.
773 @itemx @var{file}.adb
774 Ada source code file containing a library unit body (a subprogram or
775 package body).  Such files are also called @dfn{bodies}.
777 @c GCC also knows about some suffixes for languages not yet included:
778 @c Pascal:
779 @c @var{file}.p
780 @c @var{file}.pas
782 @item @var{file}.s
783 Assembler code.
785 @item @var{file}.S
786 Assembler code which must be preprocessed.
788 @item @var{other}
789 An object file to be fed straight into linking.
790 Any file name with no recognized suffix is treated this way.
791 @end table
793 @opindex x
794 You can specify the input language explicitly with the @option{-x} option:
796 @table @gcctabopt
797 @item -x @var{language}
798 Specify explicitly the @var{language} for the following input files
799 (rather than letting the compiler choose a default based on the file
800 name suffix).  This option applies to all following input files until
801 the next @option{-x} option.  Possible values for @var{language} are:
802 @smallexample
803 c  c-header  cpp-output
804 c++  c++-header  c++-cpp-output
805 objective-c  objective-c-header  objc-cpp-output
806 assembler  assembler-with-cpp
808 f77  f77-cpp-input  ratfor
809 java
810 treelang
811 @end smallexample
813 @item -x none
814 Turn off any specification of a language, so that subsequent files are
815 handled according to their file name suffixes (as they are if @option{-x}
816 has not been used at all).
818 @item -pass-exit-codes
819 @opindex pass-exit-codes
820 Normally the @command{gcc} program will exit with the code of 1 if any
821 phase of the compiler returns a non-success return code.  If you specify
822 @option{-pass-exit-codes}, the @command{gcc} program will instead return with
823 numerically highest error produced by any phase that returned an error
824 indication.
825 @end table
827 If you only want some of the stages of compilation, you can use
828 @option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
829 one of the options @option{-c}, @option{-S}, or @option{-E} to say where
830 @command{gcc} is to stop.  Note that some combinations (for example,
831 @samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
833 @table @gcctabopt
834 @item -c
835 @opindex c
836 Compile or assemble the source files, but do not link.  The linking
837 stage simply is not done.  The ultimate output is in the form of an
838 object file for each source file.
840 By default, the object file name for a source file is made by replacing
841 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
843 Unrecognized input files, not requiring compilation or assembly, are
844 ignored.
846 @item -S
847 @opindex S
848 Stop after the stage of compilation proper; do not assemble.  The output
849 is in the form of an assembler code file for each non-assembler input
850 file specified.
852 By default, the assembler file name for a source file is made by
853 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
855 Input files that don't require compilation are ignored.
857 @item -E
858 @opindex E
859 Stop after the preprocessing stage; do not run the compiler proper.  The
860 output is in the form of preprocessed source code, which is sent to the
861 standard output.
863 Input files which don't require preprocessing are ignored.
865 @cindex output file option
866 @item -o @var{file}
867 @opindex o
868 Place output in file @var{file}.  This applies regardless to whatever
869 sort of output is being produced, whether it be an executable file,
870 an object file, an assembler file or preprocessed C code.
872 If @option{-o} is not specified, the default is to put an executable
873 file in @file{a.out}, the object file for
874 @file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
875 assembler file in @file{@var{source}.s}, a precompiled header file in
876 @file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
877 standard output.
879 @item -v
880 @opindex v
881 Print (on standard error output) the commands executed to run the stages
882 of compilation.  Also print the version number of the compiler driver
883 program and of the preprocessor and the compiler proper.
885 @item -###
886 @opindex ###
887 Like @option{-v} except the commands are not executed and all command
888 arguments are quoted.  This is useful for shell scripts to capture the
889 driver-generated command lines.
891 @item -pipe
892 @opindex pipe
893 Use pipes rather than temporary files for communication between the
894 various stages of compilation.  This fails to work on some systems where
895 the assembler is unable to read from a pipe; but the GNU assembler has
896 no trouble.
898 @item -combine
899 @opindex combine
900 If you are compiling multiple source files, this option tells the driver
901 to pass all the source files to the compiler at once (for those 
902 languages for which the compiler can handle this).  This will allow
903 intermodule analysis (IMA) to be performed by the compiler.  Currently the only
904 language for which this is supported is C.  If you pass source files for
905 multiple languages to the driver, using this option, the driver will invoke
906 the compiler(s) that support IMA once each, passing each compiler all the
907 source files appropriate for it.  For those languages that do not support
908 IMA this option will be ignored, and the compiler will be invoked once for
909 each source file in that language.  If you use this option in conjunction
910 with -save-temps, the compiler will generate multiple pre-processed files
911 (one for each source file), but only one (combined) .o or .s file. 
913 @item --help
914 @opindex help
915 Print (on the standard output) a description of the command line options
916 understood by @command{gcc}.  If the @option{-v} option is also specified
917 then @option{--help} will also be passed on to the various processes
918 invoked by @command{gcc}, so that they can display the command line options
919 they accept.  If the @option{-Wextra} option is also specified then command
920 line options which have no documentation associated with them will also
921 be displayed.
923 @item --target-help
924 @opindex target-help
925 Print (on the standard output) a description of target specific command
926 line options for each tool.
928 @item --version
929 @opindex version
930 Display the version number and copyrights of the invoked GCC.
931 @end table
933 @node Invoking G++
934 @section Compiling C++ Programs
936 @cindex suffixes for C++ source
937 @cindex C++ source file suffixes
938 C++ source files conventionally use one of the suffixes @samp{.C},
939 @samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
940 @samp{.cxx}; C++ header files often use @samp{.hh} or @samp{.H}; and
941 preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
942 files with these names and compiles them as C++ programs even if you
943 call the compiler the same way as for compiling C programs (usually
944 with the name @command{gcc}).
946 @findex g++
947 @findex c++
948 However, C++ programs often require class libraries as well as a
949 compiler that understands the C++ language---and under some
950 circumstances, you might want to compile programs or header files from
951 standard input, or otherwise without a suffix that flags them as C++
952 programs.  You might also like to precompile a C header file with a
953 @samp{.h} extension to be used in C++ compilations.  @command{g++} is a
954 program that calls GCC with the default language set to C++, and
955 automatically specifies linking against the C++ library.  On many
956 systems, @command{g++} is also installed with the name @command{c++}.
958 @cindex invoking @command{g++}
959 When you compile C++ programs, you may specify many of the same
960 command-line options that you use for compiling programs in any
961 language; or command-line options meaningful for C and related
962 languages; or options that are meaningful only for C++ programs.
963 @xref{C Dialect Options,,Options Controlling C Dialect}, for
964 explanations of options for languages related to C@.
965 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
966 explanations of options that are meaningful only for C++ programs.
968 @node C Dialect Options
969 @section Options Controlling C Dialect
970 @cindex dialect options
971 @cindex language dialect options
972 @cindex options, dialect
974 The following options control the dialect of C (or languages derived
975 from C, such as C++ and Objective-C) that the compiler accepts:
977 @table @gcctabopt
978 @cindex ANSI support
979 @cindex ISO support
980 @item -ansi
981 @opindex ansi
982 In C mode, support all ISO C90 programs.  In C++ mode,
983 remove GNU extensions that conflict with ISO C++.
985 This turns off certain features of GCC that are incompatible with ISO
986 C90 (when compiling C code), or of standard C++ (when compiling C++ code),
987 such as the @code{asm} and @code{typeof} keywords, and
988 predefined macros such as @code{unix} and @code{vax} that identify the
989 type of system you are using.  It also enables the undesirable and
990 rarely used ISO trigraph feature.  For the C compiler,
991 it disables recognition of C++ style @samp{//} comments as well as
992 the @code{inline} keyword.
994 The alternate keywords @code{__asm__}, @code{__extension__},
995 @code{__inline__} and @code{__typeof__} continue to work despite
996 @option{-ansi}.  You would not want to use them in an ISO C program, of
997 course, but it is useful to put them in header files that might be included
998 in compilations done with @option{-ansi}.  Alternate predefined macros
999 such as @code{__unix__} and @code{__vax__} are also available, with or
1000 without @option{-ansi}.
1002 The @option{-ansi} option does not cause non-ISO programs to be
1003 rejected gratuitously.  For that, @option{-pedantic} is required in
1004 addition to @option{-ansi}.  @xref{Warning Options}.
1006 The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
1007 option is used.  Some header files may notice this macro and refrain
1008 from declaring certain functions or defining certain macros that the
1009 ISO standard doesn't call for; this is to avoid interfering with any
1010 programs that might use these names for other things.
1012 Functions which would normally be built in but do not have semantics
1013 defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
1014 functions with @option{-ansi} is used.  @xref{Other Builtins,,Other
1015 built-in functions provided by GCC}, for details of the functions
1016 affected.
1018 @item -std=
1019 @opindex std
1020 Determine the language standard.  This option is currently only
1021 supported when compiling C or C++.  A value for this option must be
1022 provided; possible values are
1024 @table @samp
1025 @item c89
1026 @itemx iso9899:1990
1027 ISO C90 (same as @option{-ansi}).
1029 @item iso9899:199409
1030 ISO C90 as modified in amendment 1.
1032 @item c99
1033 @itemx c9x
1034 @itemx iso9899:1999
1035 @itemx iso9899:199x
1036 ISO C99.  Note that this standard is not yet fully supported; see
1037 @w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
1038 names @samp{c9x} and @samp{iso9899:199x} are deprecated.
1040 @item gnu89
1041 Default, ISO C90 plus GNU extensions (including some C99 features).
1043 @item gnu99
1044 @itemx gnu9x
1045 ISO C99 plus GNU extensions.  When ISO C99 is fully implemented in GCC,
1046 this will become the default.  The name @samp{gnu9x} is deprecated.
1048 @item c++98
1049 The 1998 ISO C++ standard plus amendments.
1051 @item gnu++98
1052 The same as @option{-std=c++98} plus GNU extensions.  This is the
1053 default for C++ code.
1054 @end table
1056 Even when this option is not specified, you can still use some of the
1057 features of newer standards in so far as they do not conflict with
1058 previous C standards.  For example, you may use @code{__restrict__} even
1059 when @option{-std=c99} is not specified.
1061 The @option{-std} options specifying some version of ISO C have the same
1062 effects as @option{-ansi}, except that features that were not in ISO C90
1063 but are in the specified version (for example, @samp{//} comments and
1064 the @code{inline} keyword in ISO C99) are not disabled.
1066 @xref{Standards,,Language Standards Supported by GCC}, for details of
1067 these standard versions.
1069 @item -aux-info @var{filename}
1070 @opindex aux-info
1071 Output to the given filename prototyped declarations for all functions
1072 declared and/or defined in a translation unit, including those in header
1073 files.  This option is silently ignored in any language other than C@.
1075 Besides declarations, the file indicates, in comments, the origin of
1076 each declaration (source file and line), whether the declaration was
1077 implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1078 @samp{O} for old, respectively, in the first character after the line
1079 number and the colon), and whether it came from a declaration or a
1080 definition (@samp{C} or @samp{F}, respectively, in the following
1081 character).  In the case of function definitions, a K&R-style list of
1082 arguments followed by their declarations is also provided, inside
1083 comments, after the declaration.
1085 @item -fno-asm
1086 @opindex fno-asm
1087 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1088 keyword, so that code can use these words as identifiers.  You can use
1089 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
1090 instead.  @option{-ansi} implies @option{-fno-asm}.
1092 In C++, this switch only affects the @code{typeof} keyword, since
1093 @code{asm} and @code{inline} are standard keywords.  You may want to
1094 use the @option{-fno-gnu-keywords} flag instead, which has the same
1095 effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1096 switch only affects the @code{asm} and @code{typeof} keywords, since
1097 @code{inline} is a standard keyword in ISO C99.
1099 @item -fno-builtin
1100 @itemx -fno-builtin-@var{function}
1101 @opindex fno-builtin
1102 @cindex built-in functions
1103 Don't recognize built-in functions that do not begin with
1104 @samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
1105 functions provided by GCC}, for details of the functions affected,
1106 including those which are not built-in functions when @option{-ansi} or
1107 @option{-std} options for strict ISO C conformance are used because they
1108 do not have an ISO standard meaning.
1110 GCC normally generates special code to handle certain built-in functions
1111 more efficiently; for instance, calls to @code{alloca} may become single
1112 instructions that adjust the stack directly, and calls to @code{memcpy}
1113 may become inline copy loops.  The resulting code is often both smaller
1114 and faster, but since the function calls no longer appear as such, you
1115 cannot set a breakpoint on those calls, nor can you change the behavior
1116 of the functions by linking with a different library.
1118 With the @option{-fno-builtin-@var{function}} option
1119 only the built-in function @var{function} is
1120 disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
1121 function is named this is not built-in in this version of GCC, this
1122 option is ignored.  There is no corresponding
1123 @option{-fbuiltin-@var{function}} option; if you wish to enable
1124 built-in functions selectively when using @option{-fno-builtin} or
1125 @option{-ffreestanding}, you may define macros such as:
1127 @smallexample
1128 #define abs(n)          __builtin_abs ((n))
1129 #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1130 @end smallexample
1132 @item -fhosted
1133 @opindex fhosted
1134 @cindex hosted environment
1136 Assert that compilation takes place in a hosted environment.  This implies
1137 @option{-fbuiltin}.  A hosted environment is one in which the
1138 entire standard library is available, and in which @code{main} has a return
1139 type of @code{int}.  Examples are nearly everything except a kernel.
1140 This is equivalent to @option{-fno-freestanding}.
1142 @item -ffreestanding
1143 @opindex ffreestanding
1144 @cindex hosted environment
1146 Assert that compilation takes place in a freestanding environment.  This
1147 implies @option{-fno-builtin}.  A freestanding environment
1148 is one in which the standard library may not exist, and program startup may
1149 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
1150 This is equivalent to @option{-fno-hosted}.
1152 @xref{Standards,,Language Standards Supported by GCC}, for details of
1153 freestanding and hosted environments.
1155 @item -fms-extensions
1156 @opindex fms-extensions
1157 Accept some non-standard constructs used in Microsoft header files.
1159 @item -trigraphs
1160 @opindex trigraphs
1161 Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
1162 options for strict ISO C conformance) implies @option{-trigraphs}.
1164 @item -no-integrated-cpp
1165 @opindex no-integrated-cpp
1166 Performs a compilation in two passes: preprocessing and compiling.  This
1167 option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the
1168 @option{-B} option. The user supplied compilation step can then add in
1169 an additional preprocessing step after normal preprocessing but before
1170 compiling. The default is to use the integrated cpp (internal cpp)
1172 The semantics of this option will change if "cc1", "cc1plus", and
1173 "cc1obj" are merged.
1175 @cindex traditional C language
1176 @cindex C language, traditional
1177 @item -traditional
1178 @itemx -traditional-cpp
1179 @opindex traditional-cpp
1180 @opindex traditional
1181 Formerly, these options caused GCC to attempt to emulate a pre-standard
1182 C compiler.  They are now only supported with the @option{-E} switch.
1183 The preprocessor continues to support a pre-standard mode.  See the GNU
1184 CPP manual for details.
1186 @item -fcond-mismatch
1187 @opindex fcond-mismatch
1188 Allow conditional expressions with mismatched types in the second and
1189 third arguments.  The value of such an expression is void.  This option
1190 is not supported for C++.
1192 @item -funsigned-char
1193 @opindex funsigned-char
1194 Let the type @code{char} be unsigned, like @code{unsigned char}.
1196 Each kind of machine has a default for what @code{char} should
1197 be.  It is either like @code{unsigned char} by default or like
1198 @code{signed char} by default.
1200 Ideally, a portable program should always use @code{signed char} or
1201 @code{unsigned char} when it depends on the signedness of an object.
1202 But many programs have been written to use plain @code{char} and
1203 expect it to be signed, or expect it to be unsigned, depending on the
1204 machines they were written for.  This option, and its inverse, let you
1205 make such a program work with the opposite default.
1207 The type @code{char} is always a distinct type from each of
1208 @code{signed char} or @code{unsigned char}, even though its behavior
1209 is always just like one of those two.
1211 @item -fsigned-char
1212 @opindex fsigned-char
1213 Let the type @code{char} be signed, like @code{signed char}.
1215 Note that this is equivalent to @option{-fno-unsigned-char}, which is
1216 the negative form of @option{-funsigned-char}.  Likewise, the option
1217 @option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
1219 @item -fsigned-bitfields
1220 @itemx -funsigned-bitfields
1221 @itemx -fno-signed-bitfields
1222 @itemx -fno-unsigned-bitfields
1223 @opindex fsigned-bitfields
1224 @opindex funsigned-bitfields
1225 @opindex fno-signed-bitfields
1226 @opindex fno-unsigned-bitfields
1227 These options control whether a bit-field is signed or unsigned, when the
1228 declaration does not use either @code{signed} or @code{unsigned}.  By
1229 default, such a bit-field is signed, because this is consistent: the
1230 basic integer types such as @code{int} are signed types.
1231 @end table
1233 @node C++ Dialect Options
1234 @section Options Controlling C++ Dialect
1236 @cindex compiler options, C++
1237 @cindex C++ options, command line
1238 @cindex options, C++
1239 This section describes the command-line options that are only meaningful
1240 for C++ programs; but you can also use most of the GNU compiler options
1241 regardless of what language your program is in.  For example, you
1242 might compile a file @code{firstClass.C} like this:
1244 @smallexample
1245 g++ -g -frepo -O -c firstClass.C
1246 @end smallexample
1248 @noindent
1249 In this example, only @option{-frepo} is an option meant
1250 only for C++ programs; you can use the other options with any
1251 language supported by GCC@.
1253 Here is a list of options that are @emph{only} for compiling C++ programs:
1255 @table @gcctabopt
1257 @item -fabi-version=@var{n}
1258 @opindex fabi-version
1259 Use version @var{n} of the C++ ABI.  Version 2 is the version of the
1260 C++ ABI that first appeared in G++ 3.4.  Version 1 is the version of
1261 the C++ ABI that first appeared in G++ 3.2.  Version 0 will always be
1262 the version that conforms most closely to the C++ ABI specification.
1263 Therefore, the ABI obtained using version 0 will change as ABI bugs
1264 are fixed.
1266 The default is version 2.
1268 @item -fno-access-control
1269 @opindex fno-access-control
1270 Turn off all access checking.  This switch is mainly useful for working
1271 around bugs in the access control code.
1273 @item -fcheck-new
1274 @opindex fcheck-new
1275 Check that the pointer returned by @code{operator new} is non-null
1276 before attempting to modify the storage allocated.  This check is
1277 normally unnecessary because the C++ standard specifies that
1278 @code{operator new} will only return @code{0} if it is declared
1279 @samp{throw()}, in which case the compiler will always check the
1280 return value even without this option.  In all other cases, when
1281 @code{operator new} has a non-empty exception specification, memory
1282 exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
1283 @samp{new (nothrow)}.
1285 @item -fconserve-space
1286 @opindex fconserve-space
1287 Put uninitialized or runtime-initialized global variables into the
1288 common segment, as C does.  This saves space in the executable at the
1289 cost of not diagnosing duplicate definitions.  If you compile with this
1290 flag and your program mysteriously crashes after @code{main()} has
1291 completed, you may have an object that is being destroyed twice because
1292 two definitions were merged.
1294 This option is no longer useful on most targets, now that support has
1295 been added for putting variables into BSS without making them common.
1297 @item -fno-const-strings
1298 @opindex fno-const-strings
1299 Give string constants type @code{char *} instead of type @code{const
1300 char *}.  By default, G++ uses type @code{const char *} as required by
1301 the standard.  Even if you use @option{-fno-const-strings}, you cannot
1302 actually modify the value of a string constant.
1304 This option might be removed in a future release of G++.  For maximum
1305 portability, you should structure your code so that it works with
1306 string constants that have type @code{const char *}.
1308 @item -fno-elide-constructors
1309 @opindex fno-elide-constructors
1310 The C++ standard allows an implementation to omit creating a temporary
1311 which is only used to initialize another object of the same type.
1312 Specifying this option disables that optimization, and forces G++ to
1313 call the copy constructor in all cases.
1315 @item -fno-enforce-eh-specs
1316 @opindex fno-enforce-eh-specs
1317 Don't check for violation of exception specifications at runtime.  This
1318 option violates the C++ standard, but may be useful for reducing code
1319 size in production builds, much like defining @samp{NDEBUG}.  The compiler
1320 will still optimize based on the exception specifications.
1322 @item -ffor-scope
1323 @itemx -fno-for-scope
1324 @opindex ffor-scope
1325 @opindex fno-for-scope
1326 If @option{-ffor-scope} is specified, the scope of variables declared in
1327 a @i{for-init-statement} is limited to the @samp{for} loop itself,
1328 as specified by the C++ standard.
1329 If @option{-fno-for-scope} is specified, the scope of variables declared in
1330 a @i{for-init-statement} extends to the end of the enclosing scope,
1331 as was the case in old versions of G++, and other (traditional)
1332 implementations of C++.
1334 The default if neither flag is given to follow the standard,
1335 but to allow and give a warning for old-style code that would
1336 otherwise be invalid, or have different behavior.
1338 @item -fno-gnu-keywords
1339 @opindex fno-gnu-keywords
1340 Do not recognize @code{typeof} as a keyword, so that code can use this
1341 word as an identifier.  You can use the keyword @code{__typeof__} instead.
1342 @option{-ansi} implies @option{-fno-gnu-keywords}.
1344 @item -fno-implicit-templates
1345 @opindex fno-implicit-templates
1346 Never emit code for non-inline templates which are instantiated
1347 implicitly (i.e.@: by use); only emit code for explicit instantiations.
1348 @xref{Template Instantiation}, for more information.
1350 @item -fno-implicit-inline-templates
1351 @opindex fno-implicit-inline-templates
1352 Don't emit code for implicit instantiations of inline templates, either.
1353 The default is to handle inlines differently so that compiles with and
1354 without optimization will need the same set of explicit instantiations.
1356 @item -fno-implement-inlines
1357 @opindex fno-implement-inlines
1358 To save space, do not emit out-of-line copies of inline functions
1359 controlled by @samp{#pragma implementation}.  This will cause linker
1360 errors if these functions are not inlined everywhere they are called.
1362 @item -fms-extensions
1363 @opindex fms-extensions
1364 Disable pedantic warnings about constructs used in MFC, such as implicit
1365 int and getting a pointer to member function via non-standard syntax.
1367 @item -fno-nonansi-builtins
1368 @opindex fno-nonansi-builtins
1369 Disable built-in declarations of functions that are not mandated by
1370 ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
1371 @code{index}, @code{bzero}, @code{conjf}, and other related functions.
1373 @item -fno-operator-names
1374 @opindex fno-operator-names
1375 Do not treat the operator name keywords @code{and}, @code{bitand},
1376 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1377 synonyms as keywords.
1379 @item -fno-optional-diags
1380 @opindex fno-optional-diags
1381 Disable diagnostics that the standard says a compiler does not need to
1382 issue.  Currently, the only such diagnostic issued by G++ is the one for
1383 a name having multiple meanings within a class.
1385 @item -fpermissive
1386 @opindex fpermissive
1387 Downgrade some diagnostics about nonconformant code from errors to
1388 warnings.  Thus, using @option{-fpermissive} will allow some
1389 nonconforming code to compile.
1391 @item -frepo
1392 @opindex frepo
1393 Enable automatic template instantiation at link time.  This option also
1394 implies @option{-fno-implicit-templates}.  @xref{Template
1395 Instantiation}, for more information.
1397 @item -fno-rtti
1398 @opindex fno-rtti
1399 Disable generation of information about every class with virtual
1400 functions for use by the C++ runtime type identification features
1401 (@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
1402 of the language, you can save some space by using this flag.  Note that
1403 exception handling uses the same information, but it will generate it as
1404 needed.
1406 @item -fstats
1407 @opindex fstats
1408 Emit statistics about front-end processing at the end of the compilation.
1409 This information is generally only useful to the G++ development team.
1411 @item -ftemplate-depth-@var{n}
1412 @opindex ftemplate-depth
1413 Set the maximum instantiation depth for template classes to @var{n}.
1414 A limit on the template instantiation depth is needed to detect
1415 endless recursions during template class instantiation.  ANSI/ISO C++
1416 conforming programs must not rely on a maximum depth greater than 17.
1418 @item -fuse-cxa-atexit
1419 @opindex fuse-cxa-atexit
1420 Register destructors for objects with static storage duration with the
1421 @code{__cxa_atexit} function rather than the @code{atexit} function.
1422 This option is required for fully standards-compliant handling of static
1423 destructors, but will only work if your C library supports
1424 @code{__cxa_atexit}.
1426 @item -fno-weak
1427 @opindex fno-weak
1428 Do not use weak symbol support, even if it is provided by the linker.
1429 By default, G++ will use weak symbols if they are available.  This
1430 option exists only for testing, and should not be used by end-users;
1431 it will result in inferior code and has no benefits.  This option may
1432 be removed in a future release of G++.
1434 @item -nostdinc++
1435 @opindex nostdinc++
1436 Do not search for header files in the standard directories specific to
1437 C++, but do still search the other standard directories.  (This option
1438 is used when building the C++ library.)
1439 @end table
1441 In addition, these optimization, warning, and code generation options
1442 have meanings only for C++ programs:
1444 @table @gcctabopt
1445 @item -fno-default-inline
1446 @opindex fno-default-inline
1447 Do not assume @samp{inline} for functions defined inside a class scope.
1448 @xref{Optimize Options,,Options That Control Optimization}.  Note that these
1449 functions will have linkage like inline functions; they just won't be
1450 inlined by default.
1452 @item -Wabi @r{(C++ only)}
1453 @opindex Wabi
1454 Warn when G++ generates code that is probably not compatible with the
1455 vendor-neutral C++ ABI.  Although an effort has been made to warn about
1456 all such cases, there are probably some cases that are not warned about,
1457 even though G++ is generating incompatible code.  There may also be
1458 cases where warnings are emitted even though the code that is generated
1459 will be compatible.
1461 You should rewrite your code to avoid these warnings if you are
1462 concerned about the fact that code generated by G++ may not be binary
1463 compatible with code generated by other compilers.
1465 The known incompatibilities at this point include:
1467 @itemize @bullet
1469 @item
1470 Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
1471 pack data into the same byte as a base class.  For example:
1473 @smallexample
1474 struct A @{ virtual void f(); int f1 : 1; @};
1475 struct B : public A @{ int f2 : 1; @};
1476 @end smallexample
1478 @noindent
1479 In this case, G++ will place @code{B::f2} into the same byte
1480 as@code{A::f1}; other compilers will not.  You can avoid this problem
1481 by explicitly padding @code{A} so that its size is a multiple of the
1482 byte size on your platform; that will cause G++ and other compilers to
1483 layout @code{B} identically.
1485 @item
1486 Incorrect handling of tail-padding for virtual bases.  G++ does not use
1487 tail padding when laying out virtual bases.  For example:
1489 @smallexample
1490 struct A @{ virtual void f(); char c1; @};
1491 struct B @{ B(); char c2; @};
1492 struct C : public A, public virtual B @{@};
1493 @end smallexample
1495 @noindent
1496 In this case, G++ will not place @code{B} into the tail-padding for
1497 @code{A}; other compilers will.  You can avoid this problem by
1498 explicitly padding @code{A} so that its size is a multiple of its
1499 alignment (ignoring virtual base classes); that will cause G++ and other
1500 compilers to layout @code{C} identically.
1502 @item
1503 Incorrect handling of bit-fields with declared widths greater than that
1504 of their underlying types, when the bit-fields appear in a union.  For
1505 example:
1507 @smallexample
1508 union U @{ int i : 4096; @};
1509 @end smallexample
1511 @noindent
1512 Assuming that an @code{int} does not have 4096 bits, G++ will make the
1513 union too small by the number of bits in an @code{int}.
1515 @item
1516 Empty classes can be placed at incorrect offsets.  For example:
1518 @smallexample
1519 struct A @{@};
1521 struct B @{
1522   A a;
1523   virtual void f ();
1526 struct C : public B, public A @{@};
1527 @end smallexample
1529 @noindent
1530 G++ will place the @code{A} base class of @code{C} at a nonzero offset;
1531 it should be placed at offset zero.  G++ mistakenly believes that the
1532 @code{A} data member of @code{B} is already at offset zero.
1534 @item
1535 Names of template functions whose types involve @code{typename} or
1536 template template parameters can be mangled incorrectly.
1538 @smallexample
1539 template <typename Q>
1540 void f(typename Q::X) @{@}
1542 template <template <typename> class Q>
1543 void f(typename Q<int>::X) @{@}
1544 @end smallexample
1546 @noindent
1547 Instantiations of these templates may be mangled incorrectly.
1549 @end itemize
1551 @item -Wctor-dtor-privacy @r{(C++ only)}
1552 @opindex Wctor-dtor-privacy
1553 Warn when a class seems unusable because all the constructors or
1554 destructors in that class are private, and it has neither friends nor
1555 public static member functions.
1557 @item -Wnon-virtual-dtor @r{(C++ only)}
1558 @opindex Wnon-virtual-dtor
1559 Warn when a class appears to be polymorphic, thereby requiring a virtual
1560 destructor, yet it declares a non-virtual one.
1561 This warning is enabled by @option{-Wall}.
1563 @item -Wreorder @r{(C++ only)}
1564 @opindex Wreorder
1565 @cindex reordering, warning
1566 @cindex warning for reordering of member initializers
1567 Warn when the order of member initializers given in the code does not
1568 match the order in which they must be executed.  For instance:
1570 @smallexample
1571 struct A @{
1572   int i;
1573   int j;
1574   A(): j (0), i (1) @{ @}
1576 @end smallexample
1578 The compiler will rearrange the member initializers for @samp{i}
1579 and @samp{j} to match the declaration order of the members, emitting
1580 a warning to that effect.  This warning is enabled by @option{-Wall}.
1581 @end table
1583 The following @option{-W@dots{}} options are not affected by @option{-Wall}.
1585 @table @gcctabopt
1586 @item -Weffc++ @r{(C++ only)}
1587 @opindex Weffc++
1588 Warn about violations of the following style guidelines from Scott Meyers'
1589 @cite{Effective C++} book:
1591 @itemize @bullet
1592 @item
1593 Item 11:  Define a copy constructor and an assignment operator for classes
1594 with dynamically allocated memory.
1596 @item
1597 Item 12:  Prefer initialization to assignment in constructors.
1599 @item
1600 Item 14:  Make destructors virtual in base classes.
1602 @item
1603 Item 15:  Have @code{operator=} return a reference to @code{*this}.
1605 @item
1606 Item 23:  Don't try to return a reference when you must return an object.
1608 @end itemize
1610 Also warn about violations of the following style guidelines from
1611 Scott Meyers' @cite{More Effective C++} book:
1613 @itemize @bullet
1614 @item
1615 Item 6:  Distinguish between prefix and postfix forms of increment and
1616 decrement operators.
1618 @item
1619 Item 7:  Never overload @code{&&}, @code{||}, or @code{,}.
1621 @end itemize
1623 When selecting this option, be aware that the standard library
1624 headers do not obey all of these guidelines; use @samp{grep -v}
1625 to filter out those warnings.
1627 @item -Wno-deprecated @r{(C++ only)}
1628 @opindex Wno-deprecated
1629 Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
1631 @item -Wno-non-template-friend @r{(C++ only)}
1632 @opindex Wno-non-template-friend
1633 Disable warnings when non-templatized friend functions are declared
1634 within a template.  Since the advent of explicit template specification
1635 support in G++, if the name of the friend is an unqualified-id (i.e.,
1636 @samp{friend foo(int)}), the C++ language specification demands that the
1637 friend declare or define an ordinary, nontemplate function.  (Section
1638 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
1639 could be interpreted as a particular specialization of a templatized
1640 function.  Because this non-conforming behavior is no longer the default
1641 behavior for G++, @option{-Wnon-template-friend} allows the compiler to
1642 check existing code for potential trouble spots and is on by default.
1643 This new compiler behavior can be turned off with
1644 @option{-Wno-non-template-friend} which keeps the conformant compiler code
1645 but disables the helpful warning.
1647 @item -Wold-style-cast @r{(C++ only)}
1648 @opindex Wold-style-cast
1649 Warn if an old-style (C-style) cast to a non-void type is used within
1650 a C++ program.  The new-style casts (@samp{static_cast},
1651 @samp{reinterpret_cast}, and @samp{const_cast}) are less vulnerable to
1652 unintended effects and much easier to search for.
1654 @item -Woverloaded-virtual @r{(C++ only)}
1655 @opindex Woverloaded-virtual
1656 @cindex overloaded virtual fn, warning
1657 @cindex warning for overloaded virtual fn
1658 Warn when a function declaration hides virtual functions from a
1659 base class.  For example, in:
1661 @smallexample
1662 struct A @{
1663   virtual void f();
1666 struct B: public A @{
1667   void f(int);
1669 @end smallexample
1671 the @code{A} class version of @code{f} is hidden in @code{B}, and code
1672 like:
1674 @smallexample
1675 B* b;
1676 b->f();
1677 @end smallexample
1679 will fail to compile.
1681 @item -Wno-pmf-conversions @r{(C++ only)}
1682 @opindex Wno-pmf-conversions
1683 Disable the diagnostic for converting a bound pointer to member function
1684 to a plain pointer.
1686 @item -Wsign-promo @r{(C++ only)}
1687 @opindex Wsign-promo
1688 Warn when overload resolution chooses a promotion from unsigned or
1689 enumeral type to a signed type, over a conversion to an unsigned type of
1690 the same size.  Previous versions of G++ would try to preserve
1691 unsignedness, but the standard mandates the current behavior.
1693 @item -Wsynth @r{(C++ only)}
1694 @opindex Wsynth
1695 @cindex warning for synthesized methods
1696 @cindex synthesized methods, warning
1697 Warn when G++'s synthesis behavior does not match that of cfront.  For
1698 instance:
1700 @smallexample
1701 struct A @{
1702   operator int ();
1703   A& operator = (int);
1706 main ()
1708   A a,b;
1709   a = b;
1711 @end smallexample
1713 In this example, G++ will synthesize a default @samp{A& operator =
1714 (const A&);}, while cfront will use the user-defined @samp{operator =}.
1715 @end table
1717 @node Objective-C Dialect Options
1718 @section Options Controlling Objective-C Dialect
1720 @cindex compiler options, Objective-C
1721 @cindex Objective-C options, command line
1722 @cindex options, Objective-C
1723 (NOTE: This manual does not describe the Objective-C language itself.  See
1724 @w{@uref{http://gcc.gnu.org/readings.html}} for references.)
1726 This section describes the command-line options that are only meaningful
1727 for Objective-C programs, but you can also use most of the GNU compiler
1728 options regardless of what language your program is in.  For example,
1729 you might compile a file @code{some_class.m} like this:
1731 @smallexample
1732 gcc -g -fgnu-runtime -O -c some_class.m
1733 @end smallexample
1735 @noindent
1736 In this example, @option{-fgnu-runtime} is an option meant only for
1737 Objective-C programs; you can use the other options with any language
1738 supported by GCC@.
1740 Here is a list of options that are @emph{only} for compiling Objective-C
1741 programs:
1743 @table @gcctabopt
1744 @item -fconstant-string-class=@var{class-name}
1745 @opindex fconstant-string-class
1746 Use @var{class-name} as the name of the class to instantiate for each
1747 literal string specified with the syntax @code{@@"@dots{}"}.  The default
1748 class name is @code{NXConstantString} if the GNU runtime is being used, and
1749 @code{NSConstantString} if the NeXT runtime is being used (see below).  The
1750 @option{-fconstant-cfstrings} option, if also present, will override the
1751 @option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
1752 to be laid out as constant CoreFoundation strings.
1754 @item -fgnu-runtime
1755 @opindex fgnu-runtime
1756 Generate object code compatible with the standard GNU Objective-C
1757 runtime.  This is the default for most types of systems.
1759 @item -fnext-runtime
1760 @opindex fnext-runtime
1761 Generate output compatible with the NeXT runtime.  This is the default
1762 for NeXT-based systems, including Darwin and Mac OS X@.  The macro
1763 @code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
1764 used.
1766 @item -fno-nil-receivers
1767 @opindex -fno-nil-receivers
1768 Assume that all Objective-C message dispatches (e.g.,
1769 @code{[receiver message:arg]}) in this translation unit ensure that the receiver
1770 is not @code{nil}.  This allows for more efficient entry points in the runtime to be
1771 used.  Currently, this option is only available in conjunction with
1772 the NeXT runtime on Mac OS X 10.3 and later.
1774 @item -fobjc-exceptions
1775 @opindex -fobjc-exceptions
1776 Enable syntactic support for structured exception handling in Objective-C,
1777 similar to what is offered by C++ and Java.  Currently, this option is only
1778 available in conjunction with the NeXT runtime on Mac OS X 10.3 and later.
1780 @smallexample
1781   @@try @{
1782     @dots{}
1783        @@throw expr;
1784     @dots{}
1785   @}
1786   @@catch (AnObjCClass *exc) @{
1787     @dots{}
1788       @@throw expr;
1789     @dots{}
1790       @@throw;
1791     @dots{}
1792   @}
1793   @@catch (AnotherClass *exc) @{
1794     @dots{}
1795   @}
1796   @@catch (id allOthers) @{
1797     @dots{}
1798   @}
1799   @@finally @{
1800     @dots{}
1801       @@throw expr;
1802     @dots{}
1803   @}
1804 @end smallexample
1806 The @code{@@throw} statement may appear anywhere in an Objective-C or
1807 Objective-C++ program; when used inside of a @code{@@catch} block, the
1808 @code{@@throw} may appear without an argument (as shown above), in which case
1809 the object caught by the @code{@@catch} will be rethrown.
1811 Note that only (pointers to) Objective-C objects may be thrown and
1812 caught using this scheme.  When an object is thrown, it will be caught
1813 by the nearest @code{@@catch} clause capable of handling objects of that type,
1814 analogously to how @code{catch} blocks work in C++ and Java.  A
1815 @code{@@catch(id @dots{})} clause (as shown above) may also be provided to catch
1816 any and all Objective-C exceptions not caught by previous @code{@@catch}
1817 clauses (if any).
1819 The @code{@@finally} clause, if present, will be executed upon exit from the
1820 immediately preceding @code{@@try @dots{} @@catch} section.  This will happen
1821 regardless of whether any exceptions are thrown, caught or rethrown
1822 inside the @code{@@try @dots{} @@catch} section, analogously to the behavior
1823 of the @code{finally} clause in Java.
1825 There are several caveats to using the new exception mechanism:
1827 @itemize @bullet
1828 @item
1829 Although currently designed to be binary compatible with @code{NS_HANDLER}-style
1830 idioms provided by the @code{NSException} class, the new
1831 exceptions can only be used on Mac OS X 10.3 (Panther) and later
1832 systems, due to additional functionality needed in the (NeXT) Objective-C
1833 runtime.
1835 @item
1836 As mentioned above, the new exceptions do not support handling
1837 types other than Objective-C objects.   Furthermore, when used from
1838 Objective-C++, the Objective-C exception model does not interoperate with C++
1839 exceptions at this time.  This means you cannot @code{@@throw} an exception
1840 from Objective-C and @code{catch} it in C++, or vice versa
1841 (i.e., @code{throw @dots{} @@catch}).
1842 @end itemize
1844 The @option{-fobjc-exceptions} switch also enables the use of synchronization
1845 blocks for thread-safe execution:
1847 @smallexample
1848   @@synchronized (ObjCClass *guard) @{
1849     @dots{}
1850   @}
1851 @end smallexample
1853 Upon entering the @code{@@synchronized} block, a thread of execution shall
1854 first check whether a lock has been placed on the corresponding @code{guard}
1855 object by another thread.  If it has, the current thread shall wait until
1856 the other thread relinquishes its lock.  Once @code{guard} becomes available,
1857 the current thread will place its own lock on it, execute the code contained in
1858 the @code{@@synchronized} block, and finally relinquish the lock (thereby
1859 making @code{guard} available to other threads).
1861 Unlike Java, Objective-C does not allow for entire methods to be marked
1862 @code{@@synchronized}.  Note that throwing exceptions out of
1863 @code{@@synchronized} blocks is allowed, and will cause the guarding object
1864 to be unlocked properly.
1866 @item -freplace-objc-classes
1867 @opindex -freplace-objc-classes
1868 Emit a special marker instructing @command{ld(1)} not to statically link in
1869 the resulting object file, and allow @command{dyld(1)} to load it in at
1870 run time instead.  This is used in conjunction with the Fix-and-Continue
1871 debugging mode, where the object file in question may be recompiled and
1872 dynamically reloaded in the course of program execution, without the need
1873 to restart the program itself.  Currently, Fix-and-Continue functionality
1874 is only available in conjunction with the NeXT runtime on Mac OS X 10.3
1875 and later.
1877 @item -fzero-link
1878 @opindex -fzero-link
1879 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
1880 to @code{objc_getClass("@dots{}")} (when the name of the class is known at
1881 compile time) with static class references that get initialized at load time,
1882 which improves run-time performance.  Specifying the @option{-fzero-link} flag
1883 suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
1884 to be retained.  This is useful in Zero-Link debugging mode, since it allows
1885 for individual class implementations to be modified during program execution.
1887 @item -gen-decls
1888 @opindex gen-decls
1889 Dump interface declarations for all classes seen in the source file to a
1890 file named @file{@var{sourcename}.decl}.
1892 @item -Wno-protocol
1893 @opindex Wno-protocol
1894 If a class is declared to implement a protocol, a warning is issued for
1895 every method in the protocol that is not implemented by the class.  The
1896 default behavior is to issue a warning for every method not explicitly
1897 implemented in the class, even if a method implementation is inherited
1898 from the superclass.  If you use the @code{-Wno-protocol} option, then
1899 methods inherited from the superclass are considered to be implemented,
1900 and no warning is issued for them.
1902 @item -Wselector
1903 @opindex Wselector
1904 Warn if multiple methods of different types for the same selector are
1905 found during compilation.  The check is performed on the list of methods
1906 in the final stage of compilation.  Additionally, a check is performed
1907 for each selector appearing in a @code{@@selector(@dots{})}
1908 expression, and a corresponding method for that selector has been found
1909 during compilation.  Because these checks scan the method table only at
1910 the end of compilation, these warnings are not produced if the final
1911 stage of compilation is not reached, for example because an error is
1912 found during compilation, or because the @code{-fsyntax-only} option is
1913 being used.
1915 @item -Wundeclared-selector
1916 @opindex Wundeclared-selector
1917 Warn if a @code{@@selector(@dots{})} expression referring to an
1918 undeclared selector is found.  A selector is considered undeclared if no
1919 method with that name has been declared before the
1920 @code{@@selector(@dots{})} expression, either explicitly in an
1921 @code{@@interface} or @code{@@protocol} declaration, or implicitly in
1922 an @code{@@implementation} section.  This option always performs its
1923 checks as soon as a @code{@@selector(@dots{})} expression is found,
1924 while @code{-Wselector} only performs its checks in the final stage of
1925 compilation.  This also enforces the coding style convention
1926 that methods and selectors must be declared before being used.
1928 @item -print-objc-runtime-info
1929 @opindex -print-objc-runtime-info
1930 Generate C header describing the largest structure that is passed by
1931 value, if any.
1933 @end table
1935 @node Language Independent Options
1936 @section Options to Control Diagnostic Messages Formatting
1937 @cindex options to control diagnostics formatting
1938 @cindex diagnostic messages
1939 @cindex message formatting
1941 Traditionally, diagnostic messages have been formatted irrespective of
1942 the output device's aspect (e.g.@: its width, @dots{}).  The options described
1943 below can be used to control the diagnostic messages formatting
1944 algorithm, e.g.@: how many characters per line, how often source location
1945 information should be reported.  Right now, only the C++ front end can
1946 honor these options.  However it is expected, in the near future, that
1947 the remaining front ends would be able to digest them correctly.
1949 @table @gcctabopt
1950 @item -fmessage-length=@var{n}
1951 @opindex fmessage-length
1952 Try to format error messages so that they fit on lines of about @var{n}
1953 characters.  The default is 72 characters for @command{g++} and 0 for the rest of
1954 the front ends supported by GCC@.  If @var{n} is zero, then no
1955 line-wrapping will be done; each error message will appear on a single
1956 line.
1958 @opindex fdiagnostics-show-location
1959 @item -fdiagnostics-show-location=once
1960 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
1961 reporter to emit @emph{once} source location information; that is, in
1962 case the message is too long to fit on a single physical line and has to
1963 be wrapped, the source location won't be emitted (as prefix) again,
1964 over and over, in subsequent continuation lines.  This is the default
1965 behavior.
1967 @item -fdiagnostics-show-location=every-line
1968 Only meaningful in line-wrapping mode.  Instructs the diagnostic
1969 messages reporter to emit the same source location information (as
1970 prefix) for physical lines that result from the process of breaking
1971 a message which is too long to fit on a single line.
1973 @end table
1975 @node Warning Options
1976 @section Options to Request or Suppress Warnings
1977 @cindex options to control warnings
1978 @cindex warning messages
1979 @cindex messages, warning
1980 @cindex suppressing warnings
1982 Warnings are diagnostic messages that report constructions which
1983 are not inherently erroneous but which are risky or suggest there
1984 may have been an error.
1986 You can request many specific warnings with options beginning @samp{-W},
1987 for example @option{-Wimplicit} to request warnings on implicit
1988 declarations.  Each of these specific warning options also has a
1989 negative form beginning @samp{-Wno-} to turn off warnings;
1990 for example, @option{-Wno-implicit}.  This manual lists only one of the
1991 two forms, whichever is not the default.
1993 The following options control the amount and kinds of warnings produced
1994 by GCC; for further, language-specific options also refer to
1995 @ref{C++ Dialect Options} and @ref{Objective-C Dialect Options}.
1997 @table @gcctabopt
1998 @cindex syntax checking
1999 @item -fsyntax-only
2000 @opindex fsyntax-only
2001 Check the code for syntax errors, but don't do anything beyond that.
2003 @item -pedantic
2004 @opindex pedantic
2005 Issue all the warnings demanded by strict ISO C and ISO C++;
2006 reject all programs that use forbidden extensions, and some other
2007 programs that do not follow ISO C and ISO C++.  For ISO C, follows the
2008 version of the ISO C standard specified by any @option{-std} option used.
2010 Valid ISO C and ISO C++ programs should compile properly with or without
2011 this option (though a rare few will require @option{-ansi} or a
2012 @option{-std} option specifying the required version of ISO C)@.  However,
2013 without this option, certain GNU extensions and traditional C and C++
2014 features are supported as well.  With this option, they are rejected.
2016 @option{-pedantic} does not cause warning messages for use of the
2017 alternate keywords whose names begin and end with @samp{__}.  Pedantic
2018 warnings are also disabled in the expression that follows
2019 @code{__extension__}.  However, only system header files should use
2020 these escape routes; application programs should avoid them.
2021 @xref{Alternate Keywords}.
2023 Some users try to use @option{-pedantic} to check programs for strict ISO
2024 C conformance.  They soon find that it does not do quite what they want:
2025 it finds some non-ISO practices, but not all---only those for which
2026 ISO C @emph{requires} a diagnostic, and some others for which
2027 diagnostics have been added.
2029 A feature to report any failure to conform to ISO C might be useful in
2030 some instances, but would require considerable additional work and would
2031 be quite different from @option{-pedantic}.  We don't have plans to
2032 support such a feature in the near future.
2034 Where the standard specified with @option{-std} represents a GNU
2035 extended dialect of C, such as @samp{gnu89} or @samp{gnu99}, there is a
2036 corresponding @dfn{base standard}, the version of ISO C on which the GNU
2037 extended dialect is based.  Warnings from @option{-pedantic} are given
2038 where they are required by the base standard.  (It would not make sense
2039 for such warnings to be given only for features not in the specified GNU
2040 C dialect, since by definition the GNU dialects of C include all
2041 features the compiler supports with the given option, and there would be
2042 nothing to warn about.)
2044 @item -pedantic-errors
2045 @opindex pedantic-errors
2046 Like @option{-pedantic}, except that errors are produced rather than
2047 warnings.
2049 @item -w
2050 @opindex w
2051 Inhibit all warning messages.
2053 @item -Wno-import
2054 @opindex Wno-import
2055 Inhibit warning messages about the use of @samp{#import}.
2057 @item -Wchar-subscripts
2058 @opindex Wchar-subscripts
2059 Warn if an array subscript has type @code{char}.  This is a common cause
2060 of error, as programmers often forget that this type is signed on some
2061 machines.
2063 @item -Wcomment
2064 @opindex Wcomment
2065 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
2066 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
2068 @item -Wformat
2069 @opindex Wformat
2070 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
2071 the arguments supplied have types appropriate to the format string
2072 specified, and that the conversions specified in the format string make
2073 sense.  This includes standard functions, and others specified by format
2074 attributes (@pxref{Function Attributes}), in the @code{printf},
2075 @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
2076 not in the C standard) families.
2078 The formats are checked against the format features supported by GNU
2079 libc version 2.2.  These include all ISO C90 and C99 features, as well
2080 as features from the Single Unix Specification and some BSD and GNU
2081 extensions.  Other library implementations may not support all these
2082 features; GCC does not support warning about features that go beyond a
2083 particular library's limitations.  However, if @option{-pedantic} is used
2084 with @option{-Wformat}, warnings will be given about format features not
2085 in the selected standard version (but not for @code{strfmon} formats,
2086 since those are not in any version of the C standard).  @xref{C Dialect
2087 Options,,Options Controlling C Dialect}.
2089 Since @option{-Wformat} also checks for null format arguments for
2090 several functions, @option{-Wformat} also implies @option{-Wnonnull}.
2092 @option{-Wformat} is included in @option{-Wall}.  For more control over some
2093 aspects of format checking, the options @option{-Wformat-y2k},
2094 @option{-Wno-format-extra-args}, @option{-Wno-format-zero-length},
2095 @option{-Wformat-nonliteral}, @option{-Wformat-security}, and
2096 @option{-Wformat=2} are available, but are not included in @option{-Wall}.
2098 @item -Wformat-y2k
2099 @opindex Wformat-y2k
2100 If @option{-Wformat} is specified, also warn about @code{strftime}
2101 formats which may yield only a two-digit year.
2103 @item -Wno-format-extra-args
2104 @opindex Wno-format-extra-args
2105 If @option{-Wformat} is specified, do not warn about excess arguments to a
2106 @code{printf} or @code{scanf} format function.  The C standard specifies
2107 that such arguments are ignored.
2109 Where the unused arguments lie between used arguments that are
2110 specified with @samp{$} operand number specifications, normally
2111 warnings are still given, since the implementation could not know what
2112 type to pass to @code{va_arg} to skip the unused arguments.  However,
2113 in the case of @code{scanf} formats, this option will suppress the
2114 warning if the unused arguments are all pointers, since the Single
2115 Unix Specification says that such unused arguments are allowed.
2117 @item -Wno-format-zero-length
2118 @opindex Wno-format-zero-length
2119 If @option{-Wformat} is specified, do not warn about zero-length formats.
2120 The C standard specifies that zero-length formats are allowed.
2122 @item -Wformat-nonliteral
2123 @opindex Wformat-nonliteral
2124 If @option{-Wformat} is specified, also warn if the format string is not a
2125 string literal and so cannot be checked, unless the format function
2126 takes its format arguments as a @code{va_list}.
2128 @item -Wformat-security
2129 @opindex Wformat-security
2130 If @option{-Wformat} is specified, also warn about uses of format
2131 functions that represent possible security problems.  At present, this
2132 warns about calls to @code{printf} and @code{scanf} functions where the
2133 format string is not a string literal and there are no format arguments,
2134 as in @code{printf (foo);}.  This may be a security hole if the format
2135 string came from untrusted input and contains @samp{%n}.  (This is
2136 currently a subset of what @option{-Wformat-nonliteral} warns about, but
2137 in future warnings may be added to @option{-Wformat-security} that are not
2138 included in @option{-Wformat-nonliteral}.)
2140 @item -Wformat=2
2141 @opindex Wformat=2
2142 Enable @option{-Wformat} plus format checks not included in
2143 @option{-Wformat}.  Currently equivalent to @samp{-Wformat
2144 -Wformat-nonliteral -Wformat-security -Wformat-y2k}.
2146 @item -Wnonnull
2147 @opindex Wnonnull
2148 Warn about passing a null pointer for arguments marked as
2149 requiring a non-null value by the @code{nonnull} function attribute.
2151 @option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
2152 can be disabled with the @option{-Wno-nonnull} option.
2154 @item -Winit-self @r{(C, C++, and Objective-C only)}
2155 @opindex Winit-self
2156 Warn about uninitialized variables which are initialized with themselves.
2157 Note this option can only be used with the @option{-Wuninitialized} option,
2158 which in turn only works with @option{-O1} and above.
2160 For example, GCC will warn about @code{i} being uninitialized in the
2161 following snippet only when @option{-Winit-self} has been specified:
2162 @smallexample
2163 @group
2164 int f()
2166   int i = i;
2167   return i;
2169 @end group
2170 @end smallexample
2172 @item -Wimplicit-int
2173 @opindex Wimplicit-int
2174 Warn when a declaration does not specify a type.
2176 @item -Wimplicit-function-declaration
2177 @itemx -Werror-implicit-function-declaration
2178 @opindex Wimplicit-function-declaration
2179 @opindex Werror-implicit-function-declaration
2180 Give a warning (or error) whenever a function is used before being
2181 declared.
2183 @item -Wimplicit
2184 @opindex Wimplicit
2185 Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
2187 @item -Wmain
2188 @opindex Wmain
2189 Warn if the type of @samp{main} is suspicious.  @samp{main} should be a
2190 function with external linkage, returning int, taking either zero
2191 arguments, two, or three arguments of appropriate types.
2193 @item -Wmissing-braces
2194 @opindex Wmissing-braces
2195 Warn if an aggregate or union initializer is not fully bracketed.  In
2196 the following example, the initializer for @samp{a} is not fully
2197 bracketed, but that for @samp{b} is fully bracketed.
2199 @smallexample
2200 int a[2][2] = @{ 0, 1, 2, 3 @};
2201 int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
2202 @end smallexample
2204 @item -Wparentheses
2205 @opindex Wparentheses
2206 Warn if parentheses are omitted in certain contexts, such
2207 as when there is an assignment in a context where a truth value
2208 is expected, or when operators are nested whose precedence people
2209 often get confused about.
2211 Also warn about constructions where there may be confusion to which
2212 @code{if} statement an @code{else} branch belongs.  Here is an example of
2213 such a case:
2215 @smallexample
2216 @group
2218   if (a)
2219     if (b)
2220       foo ();
2221   else
2222     bar ();
2224 @end group
2225 @end smallexample
2227 In C, every @code{else} branch belongs to the innermost possible @code{if}
2228 statement, which in this example is @code{if (b)}.  This is often not
2229 what the programmer expected, as illustrated in the above example by
2230 indentation the programmer chose.  When there is the potential for this
2231 confusion, GCC will issue a warning when this flag is specified.
2232 To eliminate the warning, add explicit braces around the innermost
2233 @code{if} statement so there is no way the @code{else} could belong to
2234 the enclosing @code{if}.  The resulting code would look like this:
2236 @smallexample
2237 @group
2239   if (a)
2240     @{
2241       if (b)
2242         foo ();
2243       else
2244         bar ();
2245     @}
2247 @end group
2248 @end smallexample
2250 @item -Wsequence-point
2251 @opindex Wsequence-point
2252 Warn about code that may have undefined semantics because of violations
2253 of sequence point rules in the C standard.
2255 The C standard defines the order in which expressions in a C program are
2256 evaluated in terms of @dfn{sequence points}, which represent a partial
2257 ordering between the execution of parts of the program: those executed
2258 before the sequence point, and those executed after it.  These occur
2259 after the evaluation of a full expression (one which is not part of a
2260 larger expression), after the evaluation of the first operand of a
2261 @code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
2262 function is called (but after the evaluation of its arguments and the
2263 expression denoting the called function), and in certain other places.
2264 Other than as expressed by the sequence point rules, the order of
2265 evaluation of subexpressions of an expression is not specified.  All
2266 these rules describe only a partial order rather than a total order,
2267 since, for example, if two functions are called within one expression
2268 with no sequence point between them, the order in which the functions
2269 are called is not specified.  However, the standards committee have
2270 ruled that function calls do not overlap.
2272 It is not specified when between sequence points modifications to the
2273 values of objects take effect.  Programs whose behavior depends on this
2274 have undefined behavior; the C standard specifies that ``Between the
2275 previous and next sequence point an object shall have its stored value
2276 modified at most once by the evaluation of an expression.  Furthermore,
2277 the prior value shall be read only to determine the value to be
2278 stored.''.  If a program breaks these rules, the results on any
2279 particular implementation are entirely unpredictable.
2281 Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
2282 = b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
2283 diagnosed by this option, and it may give an occasional false positive
2284 result, but in general it has been found fairly effective at detecting
2285 this sort of problem in programs.
2287 The present implementation of this option only works for C programs.  A
2288 future implementation may also work for C++ programs.
2290 The C standard is worded confusingly, therefore there is some debate
2291 over the precise meaning of the sequence point rules in subtle cases.
2292 Links to discussions of the problem, including proposed formal
2293 definitions, may be found on our readings page, at
2294 @w{@uref{http://gcc.gnu.org/readings.html}}.
2296 @item -Wreturn-type
2297 @opindex Wreturn-type
2298 Warn whenever a function is defined with a return-type that defaults to
2299 @code{int}.  Also warn about any @code{return} statement with no
2300 return-value in a function whose return-type is not @code{void}.
2302 For C++, a function without return type always produces a diagnostic
2303 message, even when @option{-Wno-return-type} is specified.  The only
2304 exceptions are @samp{main} and functions defined in system headers.
2306 @item -Wswitch
2307 @opindex Wswitch
2308 Warn whenever a @code{switch} statement has an index of enumeral type
2309 and lacks a @code{case} for one or more of the named codes of that
2310 enumeration.  (The presence of a @code{default} label prevents this
2311 warning.)  @code{case} labels outside the enumeration range also
2312 provoke warnings when this option is used.
2314 @item -Wswitch-default
2315 @opindex Wswitch-switch
2316 Warn whenever a @code{switch} statement does not have a @code{default}
2317 case.
2319 @item -Wswitch-enum
2320 @opindex Wswitch-enum
2321 Warn whenever a @code{switch} statement has an index of enumeral type
2322 and lacks a @code{case} for one or more of the named codes of that
2323 enumeration.  @code{case} labels outside the enumeration range also
2324 provoke warnings when this option is used.
2326 @item -Wtrigraphs
2327 @opindex Wtrigraphs
2328 Warn if any trigraphs are encountered that might change the meaning of
2329 the program (trigraphs within comments are not warned about).
2331 @item -Wunused-function
2332 @opindex Wunused-function
2333 Warn whenever a static function is declared but not defined or a
2334 non\-inline static function is unused.
2336 @item -Wunused-label
2337 @opindex Wunused-label
2338 Warn whenever a label is declared but not used.
2340 To suppress this warning use the @samp{unused} attribute
2341 (@pxref{Variable Attributes}).
2343 @item -Wunused-parameter
2344 @opindex Wunused-parameter
2345 Warn whenever a function parameter is unused aside from its declaration.
2347 To suppress this warning use the @samp{unused} attribute
2348 (@pxref{Variable Attributes}).
2350 @item -Wunused-variable
2351 @opindex Wunused-variable
2352 Warn whenever a local variable or non-constant static variable is unused
2353 aside from its declaration
2355 To suppress this warning use the @samp{unused} attribute
2356 (@pxref{Variable Attributes}).
2358 @item -Wunused-value
2359 @opindex Wunused-value
2360 Warn whenever a statement computes a result that is explicitly not used.
2362 To suppress this warning cast the expression to @samp{void}.
2364 @item -Wunused
2365 @opindex Wunused
2366 All the above @option{-Wunused} options combined.
2368 In order to get a warning about an unused function parameter, you must
2369 either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies
2370 @samp{-Wunused}), or separately specify @option{-Wunused-parameter}.
2372 @item -Wuninitialized
2373 @opindex Wuninitialized
2374 Warn if an automatic variable is used without first being initialized or
2375 if a variable may be clobbered by a @code{setjmp} call.
2377 These warnings are possible only in optimizing compilation,
2378 because they require data flow information that is computed only
2379 when optimizing.  If you don't specify @option{-O}, you simply won't
2380 get these warnings.
2382 If you want to warn about code which uses the uninitialized value of the
2383 variable in its own initializer, use the @option{-Winit-self} option.
2385 These warnings occur only for variables that are candidates for
2386 register allocation.  Therefore, they do not occur for a variable that
2387 is declared @code{volatile}, or whose address is taken, or whose size
2388 is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
2389 structures, unions or arrays, even when they are in registers.
2391 Note that there may be no warning about a variable that is used only
2392 to compute a value that itself is never used, because such
2393 computations may be deleted by data flow analysis before the warnings
2394 are printed.
2396 These warnings are made optional because GCC is not smart
2397 enough to see all the reasons why the code might be correct
2398 despite appearing to have an error.  Here is one example of how
2399 this can happen:
2401 @smallexample
2402 @group
2404   int x;
2405   switch (y)
2406     @{
2407     case 1: x = 1;
2408       break;
2409     case 2: x = 4;
2410       break;
2411     case 3: x = 5;
2412     @}
2413   foo (x);
2415 @end group
2416 @end smallexample
2418 @noindent
2419 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
2420 always initialized, but GCC doesn't know this.  Here is
2421 another common case:
2423 @smallexample
2425   int save_y;
2426   if (change_y) save_y = y, y = new_y;
2427   @dots{}
2428   if (change_y) y = save_y;
2430 @end smallexample
2432 @noindent
2433 This has no bug because @code{save_y} is used only if it is set.
2435 @cindex @code{longjmp} warnings
2436 This option also warns when a non-volatile automatic variable might be
2437 changed by a call to @code{longjmp}.  These warnings as well are possible
2438 only in optimizing compilation.
2440 The compiler sees only the calls to @code{setjmp}.  It cannot know
2441 where @code{longjmp} will be called; in fact, a signal handler could
2442 call it at any point in the code.  As a result, you may get a warning
2443 even when there is in fact no problem because @code{longjmp} cannot
2444 in fact be called at the place which would cause a problem.
2446 Some spurious warnings can be avoided if you declare all the functions
2447 you use that never return as @code{noreturn}.  @xref{Function
2448 Attributes}.
2450 @item -Wunknown-pragmas
2451 @opindex Wunknown-pragmas
2452 @cindex warning for unknown pragmas
2453 @cindex unknown pragmas, warning
2454 @cindex pragmas, warning of unknown
2455 Warn when a #pragma directive is encountered which is not understood by
2456 GCC@.  If this command line option is used, warnings will even be issued
2457 for unknown pragmas in system header files.  This is not the case if
2458 the warnings were only enabled by the @option{-Wall} command line option.
2460 @item -Wstrict-aliasing
2461 @opindex Wstrict-aliasing
2462 This option is only active when @option{-fstrict-aliasing} is active.
2463 It warns about code which might break the strict aliasing rules that the
2464 compiler is using for optimization. The warning does not catch all
2465 cases, but does attempt to catch the more common pitfalls. It is
2466 included in @option{-Wall}.
2468 @item -Wstrict-aliasing=2
2469 @opindex Wstrict-aliasing=2
2470 This option is only active when @option{-fstrict-aliasing} is active.
2471 It warns about all code which might break the strict aliasing rules that the
2472 compiler is using for optimization.  This warning catches all cases, but
2473 it will also give a warning for some ambiguous cases that are safe.
2475 @item -Wall
2476 @opindex Wall
2477 All of the above @samp{-W} options combined.  This enables all the
2478 warnings about constructions that some users consider questionable, and
2479 that are easy to avoid (or modify to prevent the warning), even in
2480 conjunction with macros.  This also enables some language-specific
2481 warnings described in @ref{C++ Dialect Options} and
2482 @ref{Objective-C Dialect Options}.
2483 @end table
2485 The following @option{-W@dots{}} options are not implied by @option{-Wall}.
2486 Some of them warn about constructions that users generally do not
2487 consider questionable, but which occasionally you might wish to check
2488 for; others warn about constructions that are necessary or hard to avoid
2489 in some cases, and there is no simple way to modify the code to suppress
2490 the warning.
2492 @table @gcctabopt
2493 @item -Wextra
2494 @opindex W
2495 @opindex Wextra
2496 (This option used to be called @option{-W}.  The older name is still
2497 supported, but the newer name is more descriptive.)  Print extra warning
2498 messages for these events:
2500 @itemize @bullet
2501 @item
2502 A function can return either with or without a value.  (Falling
2503 off the end of the function body is considered returning without
2504 a value.)  For example, this function would evoke such a
2505 warning:
2507 @smallexample
2508 @group
2509 foo (a)
2511   if (a > 0)
2512     return a;
2514 @end group
2515 @end smallexample
2517 @item
2518 An expression-statement or the left-hand side of a comma expression
2519 contains no side effects.
2520 To suppress the warning, cast the unused expression to void.
2521 For example, an expression such as @samp{x[i,j]} will cause a warning,
2522 but @samp{x[(void)i,j]} will not.
2524 @item
2525 An unsigned value is compared against zero with @samp{<} or @samp{>=}.
2527 @item
2528 A comparison like @samp{x<=y<=z} appears; this is equivalent to
2529 @samp{(x<=y ? 1 : 0) <= z}, which is a different interpretation from
2530 that of ordinary mathematical notation.
2532 @item
2533 Storage-class specifiers like @code{static} are not the first things in
2534 a declaration.  According to the C Standard, this usage is obsolescent.
2536 @item
2537 The return type of a function has a type qualifier such as @code{const}.
2538 Such a type qualifier has no effect, since the value returned by a
2539 function is not an lvalue.  (But don't warn about the GNU extension of
2540 @code{volatile void} return types.  That extension will be warned about
2541 if @option{-pedantic} is specified.)
2543 @item
2544 If @option{-Wall} or @option{-Wunused} is also specified, warn about unused
2545 arguments.
2547 @item
2548 A comparison between signed and unsigned values could produce an
2549 incorrect result when the signed value is converted to unsigned.
2550 (But don't warn if @option{-Wno-sign-compare} is also specified.)
2552 @item
2553 An aggregate has an initializer which does not initialize all members.
2554 For example, the following code would cause such a warning, because
2555 @code{x.h} would be implicitly initialized to zero:
2557 @smallexample
2558 struct s @{ int f, g, h; @};
2559 struct s x = @{ 3, 4 @};
2560 @end smallexample
2562 @item
2563 A function parameter is declared without a type specifier in K&R-style
2564 functions:
2566 @smallexample
2567 void foo(bar) @{ @}
2568 @end smallexample
2570 @item
2571 An empty body occurs in an @samp{if} or @samp{else} statement.
2573 @item
2574 A pointer is compared against integer zero with @samp{<}, @samp{<=},
2575 @samp{>}, or @samp{>=}.
2577 @item
2578 A variable might be changed by @samp{longjmp} or @samp{vfork}.
2580 @item
2581 Any of several floating-point events that often indicate errors, such as
2582 overflow, underflow, loss of precision, etc.
2584 @item @r{(C++ only)}
2585 An enumerator and a non-enumerator both appear in a conditional expression.
2587 @item @r{(C++ only)}
2588 A non-static reference or non-static @samp{const} member appears in a
2589 class without constructors.
2591 @item @r{(C++ only)}
2592 Ambiguous virtual bases.
2594 @item @r{(C++ only)}
2595 Subscripting an array which has been declared @samp{register}.
2597 @item @r{(C++ only)}
2598 Taking the address of a variable which has been declared @samp{register}.
2600 @item @r{(C++ only)}
2601 A base class is not initialized in a derived class' copy constructor.
2602 @end itemize
2604 @item -Wno-div-by-zero
2605 @opindex Wno-div-by-zero
2606 @opindex Wdiv-by-zero
2607 Do not warn about compile-time integer division by zero.  Floating point
2608 division by zero is not warned about, as it can be a legitimate way of
2609 obtaining infinities and NaNs.
2611 @item -Wsystem-headers
2612 @opindex Wsystem-headers
2613 @cindex warnings from system headers
2614 @cindex system headers, warnings from
2615 Print warning messages for constructs found in system header files.
2616 Warnings from system headers are normally suppressed, on the assumption
2617 that they usually do not indicate real problems and would only make the
2618 compiler output harder to read.  Using this command line option tells
2619 GCC to emit warnings from system headers as if they occurred in user
2620 code.  However, note that using @option{-Wall} in conjunction with this
2621 option will @emph{not} warn about unknown pragmas in system
2622 headers---for that, @option{-Wunknown-pragmas} must also be used.
2624 @item -Wfloat-equal
2625 @opindex Wfloat-equal
2626 Warn if floating point values are used in equality comparisons.
2628 The idea behind this is that sometimes it is convenient (for the
2629 programmer) to consider floating-point values as approximations to
2630 infinitely precise real numbers.  If you are doing this, then you need
2631 to compute (by analyzing the code, or in some other way) the maximum or
2632 likely maximum error that the computation introduces, and allow for it
2633 when performing comparisons (and when producing output, but that's a
2634 different problem).  In particular, instead of testing for equality, you
2635 would check to see whether the two values have ranges that overlap; and
2636 this is done with the relational operators, so equality comparisons are
2637 probably mistaken.
2639 @item -Wtraditional @r{(C only)}
2640 @opindex Wtraditional
2641 Warn about certain constructs that behave differently in traditional and
2642 ISO C@.  Also warn about ISO C constructs that have no traditional C
2643 equivalent, and/or problematic constructs which should be avoided.
2645 @itemize @bullet
2646 @item
2647 Macro parameters that appear within string literals in the macro body.
2648 In traditional C macro replacement takes place within string literals,
2649 but does not in ISO C@.
2651 @item
2652 In traditional C, some preprocessor directives did not exist.
2653 Traditional preprocessors would only consider a line to be a directive
2654 if the @samp{#} appeared in column 1 on the line.  Therefore
2655 @option{-Wtraditional} warns about directives that traditional C
2656 understands but would ignore because the @samp{#} does not appear as the
2657 first character on the line.  It also suggests you hide directives like
2658 @samp{#pragma} not understood by traditional C by indenting them.  Some
2659 traditional implementations would not recognize @samp{#elif}, so it
2660 suggests avoiding it altogether.
2662 @item
2663 A function-like macro that appears without arguments.
2665 @item
2666 The unary plus operator.
2668 @item
2669 The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating point
2670 constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
2671 constants.)  Note, these suffixes appear in macros defined in the system
2672 headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
2673 Use of these macros in user code might normally lead to spurious
2674 warnings, however GCC's integrated preprocessor has enough context to
2675 avoid warning in these cases.
2677 @item
2678 A function declared external in one block and then used after the end of
2679 the block.
2681 @item
2682 A @code{switch} statement has an operand of type @code{long}.
2684 @item
2685 A non-@code{static} function declaration follows a @code{static} one.
2686 This construct is not accepted by some traditional C compilers.
2688 @item
2689 The ISO type of an integer constant has a different width or
2690 signedness from its traditional type.  This warning is only issued if
2691 the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
2692 typically represent bit patterns, are not warned about.
2694 @item
2695 Usage of ISO string concatenation is detected.
2697 @item
2698 Initialization of automatic aggregates.
2700 @item
2701 Identifier conflicts with labels.  Traditional C lacks a separate
2702 namespace for labels.
2704 @item
2705 Initialization of unions.  If the initializer is zero, the warning is
2706 omitted.  This is done under the assumption that the zero initializer in
2707 user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
2708 initializer warnings and relies on default initialization to zero in the
2709 traditional C case.
2711 @item
2712 Conversions by prototypes between fixed/floating point values and vice
2713 versa.  The absence of these prototypes when compiling with traditional
2714 C would cause serious problems.  This is a subset of the possible
2715 conversion warnings, for the full set use @option{-Wconversion}.
2717 @item
2718 Use of ISO C style function definitions.  This warning intentionally is
2719 @emph{not} issued for prototype declarations or variadic functions
2720 because these ISO C features will appear in your code when using
2721 libiberty's traditional C compatibility macros, @code{PARAMS} and
2722 @code{VPARAMS}.  This warning is also bypassed for nested functions
2723 because that feature is already a GCC extension and thus not relevant to
2724 traditional C compatibility.
2725 @end itemize
2727 @item -Wdeclaration-after-statement @r{(C only)}
2728 @opindex Wdeclaration-after-statement
2729 Warn when a declaration is found after a statement in a block.  This
2730 construct, known from C++, was introduced with ISO C99 and is by default
2731 allowed in GCC@.  It is not supported by ISO C90 and was not supported by
2732 GCC versions before GCC 3.0.  @xref{Mixed Declarations}.
2734 @item -Wundef
2735 @opindex Wundef
2736 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
2738 @item -Wendif-labels
2739 @opindex Wendif-labels
2740 Warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
2742 @item -Wshadow
2743 @opindex Wshadow
2744 Warn whenever a local variable shadows another local variable, parameter or
2745 global variable or whenever a built-in function is shadowed.
2747 @item -Wlarger-than-@var{len}
2748 @opindex Wlarger-than
2749 Warn whenever an object of larger than @var{len} bytes is defined.
2751 @item -Wpointer-arith
2752 @opindex Wpointer-arith
2753 Warn about anything that depends on the ``size of'' a function type or
2754 of @code{void}.  GNU C assigns these types a size of 1, for
2755 convenience in calculations with @code{void *} pointers and pointers
2756 to functions.
2758 @item -Wbad-function-cast @r{(C only)}
2759 @opindex Wbad-function-cast
2760 Warn whenever a function call is cast to a non-matching type.
2761 For example, warn if @code{int malloc()} is cast to @code{anything *}.
2763 @item -Wcast-qual
2764 @opindex Wcast-qual
2765 Warn whenever a pointer is cast so as to remove a type qualifier from
2766 the target type.  For example, warn if a @code{const char *} is cast
2767 to an ordinary @code{char *}.
2769 @item -Wcast-align
2770 @opindex Wcast-align
2771 Warn whenever a pointer is cast such that the required alignment of the
2772 target is increased.  For example, warn if a @code{char *} is cast to
2773 an @code{int *} on machines where integers can only be accessed at
2774 two- or four-byte boundaries.
2776 @item -Wwrite-strings
2777 @opindex Wwrite-strings
2778 When compiling C, give string constants the type @code{const
2779 char[@var{length}]} so that
2780 copying the address of one into a non-@code{const} @code{char *}
2781 pointer will get a warning; when compiling C++, warn about the
2782 deprecated conversion from string constants to @code{char *}.
2783 These warnings will help you find at
2784 compile time code that can try to write into a string constant, but
2785 only if you have been very careful about using @code{const} in
2786 declarations and prototypes.  Otherwise, it will just be a nuisance;
2787 this is why we did not make @option{-Wall} request these warnings.
2789 @item -Wconversion
2790 @opindex Wconversion
2791 Warn if a prototype causes a type conversion that is different from what
2792 would happen to the same argument in the absence of a prototype.  This
2793 includes conversions of fixed point to floating and vice versa, and
2794 conversions changing the width or signedness of a fixed point argument
2795 except when the same as the default promotion.
2797 Also, warn if a negative integer constant expression is implicitly
2798 converted to an unsigned type.  For example, warn about the assignment
2799 @code{x = -1} if @code{x} is unsigned.  But do not warn about explicit
2800 casts like @code{(unsigned) -1}.
2802 @item -Wsign-compare
2803 @opindex Wsign-compare
2804 @cindex warning for comparison of signed and unsigned values
2805 @cindex comparison of signed and unsigned values, warning
2806 @cindex signed and unsigned values, comparison warning
2807 Warn when a comparison between signed and unsigned values could produce
2808 an incorrect result when the signed value is converted to unsigned.
2809 This warning is also enabled by @option{-Wextra}; to get the other warnings
2810 of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}.
2812 @item -Waggregate-return
2813 @opindex Waggregate-return
2814 Warn if any functions that return structures or unions are defined or
2815 called.  (In languages where you can return an array, this also elicits
2816 a warning.)
2818 @item -Wstrict-prototypes @r{(C only)}
2819 @opindex Wstrict-prototypes
2820 Warn if a function is declared or defined without specifying the
2821 argument types.  (An old-style function definition is permitted without
2822 a warning if preceded by a declaration which specifies the argument
2823 types.)
2825 @item -Wold-style-definition @r{(C only)}
2826 @opindex Wold-style-definition
2827 Warn if an old-style function definition is used.  A warning is given
2828 even if there is a previous prototype.
2830 @item -Wmissing-prototypes @r{(C only)}
2831 @opindex Wmissing-prototypes
2832 Warn if a global function is defined without a previous prototype
2833 declaration.  This warning is issued even if the definition itself
2834 provides a prototype.  The aim is to detect global functions that fail
2835 to be declared in header files.
2837 @item -Wmissing-declarations @r{(C only)}
2838 @opindex Wmissing-declarations
2839 Warn if a global function is defined without a previous declaration.
2840 Do so even if the definition itself provides a prototype.
2841 Use this option to detect global functions that are not declared in
2842 header files.
2844 @item -Wmissing-noreturn
2845 @opindex Wmissing-noreturn
2846 Warn about functions which might be candidates for attribute @code{noreturn}.
2847 Note these are only possible candidates, not absolute ones.  Care should
2848 be taken to manually verify functions actually do not ever return before
2849 adding the @code{noreturn} attribute, otherwise subtle code generation
2850 bugs could be introduced.  You will not get a warning for @code{main} in
2851 hosted C environments.
2853 @item -Wmissing-format-attribute
2854 @opindex Wmissing-format-attribute
2855 @opindex Wformat
2856 If @option{-Wformat} is enabled, also warn about functions which might be
2857 candidates for @code{format} attributes.  Note these are only possible
2858 candidates, not absolute ones.  GCC will guess that @code{format}
2859 attributes might be appropriate for any function that calls a function
2860 like @code{vprintf} or @code{vscanf}, but this might not always be the
2861 case, and some functions for which @code{format} attributes are
2862 appropriate may not be detected.  This option has no effect unless
2863 @option{-Wformat} is enabled (possibly by @option{-Wall}).
2865 @item -Wno-multichar
2866 @opindex Wno-multichar
2867 @opindex Wmultichar
2868 Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
2869 Usually they indicate a typo in the user's code, as they have
2870 implementation-defined values, and should not be used in portable code.
2872 @item -Wno-deprecated-declarations
2873 @opindex Wno-deprecated-declarations
2874 Do not warn about uses of functions, variables, and types marked as
2875 deprecated by using the @code{deprecated} attribute.
2876 (@pxref{Function Attributes}, @pxref{Variable Attributes},
2877 @pxref{Type Attributes}.)
2879 @item -Wpacked
2880 @opindex Wpacked
2881 Warn if a structure is given the packed attribute, but the packed
2882 attribute has no effect on the layout or size of the structure.
2883 Such structures may be mis-aligned for little benefit.  For
2884 instance, in this code, the variable @code{f.x} in @code{struct bar}
2885 will be misaligned even though @code{struct bar} does not itself
2886 have the packed attribute:
2888 @smallexample
2889 @group
2890 struct foo @{
2891   int x;
2892   char a, b, c, d;
2893 @} __attribute__((packed));
2894 struct bar @{
2895   char z;
2896   struct foo f;
2898 @end group
2899 @end smallexample
2901 @item -Wpadded
2902 @opindex Wpadded
2903 Warn if padding is included in a structure, either to align an element
2904 of the structure or to align the whole structure.  Sometimes when this
2905 happens it is possible to rearrange the fields of the structure to
2906 reduce the padding and so make the structure smaller.
2908 @item -Wredundant-decls
2909 @opindex Wredundant-decls
2910 Warn if anything is declared more than once in the same scope, even in
2911 cases where multiple declaration is valid and changes nothing.
2913 @item -Wnested-externs @r{(C only)}
2914 @opindex Wnested-externs
2915 Warn if an @code{extern} declaration is encountered within a function.
2917 @item -Wunreachable-code
2918 @opindex Wunreachable-code
2919 Warn if the compiler detects that code will never be executed.
2921 This option is intended to warn when the compiler detects that at
2922 least a whole line of source code will never be executed, because
2923 some condition is never satisfied or because it is after a
2924 procedure that never returns.
2926 It is possible for this option to produce a warning even though there
2927 are circumstances under which part of the affected line can be executed,
2928 so care should be taken when removing apparently-unreachable code.
2930 For instance, when a function is inlined, a warning may mean that the
2931 line is unreachable in only one inlined copy of the function.
2933 This option is not made part of @option{-Wall} because in a debugging
2934 version of a program there is often substantial code which checks
2935 correct functioning of the program and is, hopefully, unreachable
2936 because the program does work.  Another common use of unreachable
2937 code is to provide behavior which is selectable at compile-time.
2939 @item -Winline
2940 @opindex Winline
2941 Warn if a function can not be inlined and it was declared as inline.
2942 Even with this option, the compiler will not warn about failures to
2943 inline functions declared in system headers.
2945 The compiler uses a variety of heuristics to determine whether or not
2946 to inline a function.  For example, the compiler takes into account
2947 the size of the function being inlined and the the amount of inlining
2948 that has already been done in the current function.  Therefore,
2949 seemingly insignificant changes in the source program can cause the
2950 warnings produced by @option{-Winline} to appear or disappear.
2952 @item -Wno-invalid-offsetof @r{(C++ only)}
2953 @opindex Wno-invalid-offsetof
2954 Suppress warnings from applying the @samp{offsetof} macro to a non-POD
2955 type.  According to the 1998 ISO C++ standard, applying @samp{offsetof}
2956 to a non-POD type is undefined.  In existing C++ implementations,
2957 however, @samp{offsetof} typically gives meaningful results even when
2958 applied to certain kinds of non-POD types. (Such as a simple
2959 @samp{struct} that fails to be a POD type only by virtue of having a
2960 constructor.)  This flag is for users who are aware that they are
2961 writing nonportable code and who have deliberately chosen to ignore the
2962 warning about it.
2964 The restrictions on @samp{offsetof} may be relaxed in a future version
2965 of the C++ standard.
2967 @item -Winvalid-pch
2968 @opindex Winvalid-pch
2969 Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
2970 the search path but can't be used.
2972 @item -Wlong-long
2973 @opindex Wlong-long
2974 @opindex Wno-long-long
2975 Warn if @samp{long long} type is used.  This is default.  To inhibit
2976 the warning messages, use @option{-Wno-long-long}.  Flags
2977 @option{-Wlong-long} and @option{-Wno-long-long} are taken into account
2978 only when @option{-pedantic} flag is used.
2980 @item -Wvariadic-macros
2981 @opindex Wvariadic-macros
2982 @opindex Wno-variadic-macros
2983 Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
2984 alternate syntax when in pedantic ISO C99 mode.  This is default.
2985 To inhibit the warning messages, use @option{-Wno-variadic-macros}.
2987 @item -Wdisabled-optimization
2988 @opindex Wdisabled-optimization
2989 Warn if a requested optimization pass is disabled.  This warning does
2990 not generally indicate that there is anything wrong with your code; it
2991 merely indicates that GCC's optimizers were unable to handle the code
2992 effectively.  Often, the problem is that your code is too big or too
2993 complex; GCC will refuse to optimize programs when the optimization
2994 itself is likely to take inordinate amounts of time.
2996 @item -Werror
2997 @opindex Werror
2998 Make all warnings into errors.
2999 @end table
3001 @node Debugging Options
3002 @section Options for Debugging Your Program or GCC
3003 @cindex options, debugging
3004 @cindex debugging information options
3006 GCC has various special options that are used for debugging
3007 either your program or GCC:
3009 @table @gcctabopt
3010 @item -g
3011 @opindex g
3012 Produce debugging information in the operating system's native format
3013 (stabs, COFF, XCOFF, or DWARF)@.  GDB can work with this debugging
3014 information.
3016 On most systems that use stabs format, @option{-g} enables use of extra
3017 debugging information that only GDB can use; this extra information
3018 makes debugging work better in GDB but will probably make other debuggers
3019 crash or
3020 refuse to read the program.  If you want to control for certain whether
3021 to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
3022 @option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).
3024 Unlike most other C compilers, GCC allows you to use @option{-g} with
3025 @option{-O}.  The shortcuts taken by optimized code may occasionally
3026 produce surprising results: some variables you declared may not exist
3027 at all; flow of control may briefly move where you did not expect it;
3028 some statements may not be executed because they compute constant
3029 results or their values were already at hand; some statements may
3030 execute in different places because they were moved out of loops.
3032 Nevertheless it proves possible to debug optimized output.  This makes
3033 it reasonable to use the optimizer for programs that might have bugs.
3035 The following options are useful when GCC is generated with the
3036 capability for more than one debugging format.
3038 @item -ggdb
3039 @opindex ggdb
3040 Produce debugging information for use by GDB@.  This means to use the
3041 most expressive format available (DWARF 2, stabs, or the native format
3042 if neither of those are supported), including GDB extensions if at all
3043 possible.
3045 @item -gstabs
3046 @opindex gstabs
3047 Produce debugging information in stabs format (if that is supported),
3048 without GDB extensions.  This is the format used by DBX on most BSD
3049 systems.  On MIPS, Alpha and System V Release 4 systems this option
3050 produces stabs debugging output which is not understood by DBX or SDB@.
3051 On System V Release 4 systems this option requires the GNU assembler.
3053 @item -feliminate-unused-debug-symbols
3054 @opindex feliminate-unused-debug-symbols
3055 Produce debugging information in stabs format (if that is supported),
3056 for only symbols that are actually used.
3058 @item -gstabs+
3059 @opindex gstabs+
3060 Produce debugging information in stabs format (if that is supported),
3061 using GNU extensions understood only by the GNU debugger (GDB)@.  The
3062 use of these extensions is likely to make other debuggers crash or
3063 refuse to read the program.
3065 @item -gcoff
3066 @opindex gcoff
3067 Produce debugging information in COFF format (if that is supported).
3068 This is the format used by SDB on most System V systems prior to
3069 System V Release 4.
3071 @item -gxcoff
3072 @opindex gxcoff
3073 Produce debugging information in XCOFF format (if that is supported).
3074 This is the format used by the DBX debugger on IBM RS/6000 systems.
3076 @item -gxcoff+
3077 @opindex gxcoff+
3078 Produce debugging information in XCOFF format (if that is supported),
3079 using GNU extensions understood only by the GNU debugger (GDB)@.  The
3080 use of these extensions is likely to make other debuggers crash or
3081 refuse to read the program, and may cause assemblers other than the GNU
3082 assembler (GAS) to fail with an error.
3084 @item -gdwarf-2
3085 @opindex gdwarf-2
3086 Produce debugging information in DWARF version 2 format (if that is
3087 supported).  This is the format used by DBX on IRIX 6.
3089 @item -gvms
3090 @opindex gvms
3091 Produce debugging information in VMS debug format (if that is
3092 supported).  This is the format used by DEBUG on VMS systems.
3094 @item -g@var{level}
3095 @itemx -ggdb@var{level}
3096 @itemx -gstabs@var{level}
3097 @itemx -gcoff@var{level}
3098 @itemx -gxcoff@var{level}
3099 @itemx -gvms@var{level}
3100 Request debugging information and also use @var{level} to specify how
3101 much information.  The default level is 2.
3103 Level 1 produces minimal information, enough for making backtraces in
3104 parts of the program that you don't plan to debug.  This includes
3105 descriptions of functions and external variables, but no information
3106 about local variables and no line numbers.
3108 Level 3 includes extra information, such as all the macro definitions
3109 present in the program.  Some debuggers support macro expansion when
3110 you use @option{-g3}.
3112 Note that in order to avoid confusion between DWARF1 debug level 2,
3113 and DWARF2 @option{-gdwarf-2} does not accept a concatenated debug
3114 level.  Instead use an additional @option{-g@var{level}} option to
3115 change the debug level for DWARF2.
3117 @item -feliminate-dwarf2-dups
3118 @opindex feliminate-dwarf2-dups
3119 Compress DWARF2 debugging information by eliminating duplicated
3120 information about each symbol.  This option only makes sense when
3121 generating DWARF2 debugging information with @option{-gdwarf-2}.
3123 @cindex @command{prof}
3124 @item -p
3125 @opindex p
3126 Generate extra code to write profile information suitable for the
3127 analysis program @command{prof}.  You must use this option when compiling
3128 the source files you want data about, and you must also use it when
3129 linking.
3131 @cindex @command{gprof}
3132 @item -pg
3133 @opindex pg
3134 Generate extra code to write profile information suitable for the
3135 analysis program @command{gprof}.  You must use this option when compiling
3136 the source files you want data about, and you must also use it when
3137 linking.
3139 @item -Q
3140 @opindex Q
3141 Makes the compiler print out each function name as it is compiled, and
3142 print some statistics about each pass when it finishes.
3144 @item -ftime-report
3145 @opindex ftime-report
3146 Makes the compiler print some statistics about the time consumed by each
3147 pass when it finishes.
3149 @item -fmem-report
3150 @opindex fmem-report
3151 Makes the compiler print some statistics about permanent memory
3152 allocation when it finishes.
3154 @item -fprofile-arcs
3155 @opindex fprofile-arcs
3156 Add code so that program flow @dfn{arcs} are instrumented.  During
3157 execution the program records how many times each branch and call is
3158 executed and how many times it is taken or returns.  When the compiled
3159 program exits it saves this data to a file called
3160 @file{@var{auxname}.gcda} for each source file. The data may be used for
3161 profile-directed optimizations (@option{-fbranch-probabilities}), or for
3162 test coverage analysis (@option{-ftest-coverage}). Each object file's
3163 @var{auxname} is generated from the name of the output file, if
3164 explicitly specified and it is not the final executable, otherwise it is
3165 the basename of the source file. In both cases any suffix is removed
3166 (e.g.  @file{foo.gcda} for input file @file{dir/foo.c}, or
3167 @file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
3169 @itemize
3171 @item
3172 Compile the source files with @option{-fprofile-arcs} plus optimization
3173 and code generation options. For test coverage analysis, use the
3174 additional @option{-ftest-coverage} option. You do not need to profile
3175 every source file in a program.
3177 @item
3178 Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
3179 (the latter implies the former).
3181 @item
3182 Run the program on a representative workload to generate the arc profile
3183 information. This may be repeated any number of times. You can run
3184 concurrent instances of your program, and provided that the file system
3185 supports locking, the data files will be correctly updated. Also
3186 @code{fork} calls are detected and correctly handled (double counting
3187 will not happen).
3189 @item
3190 For profile-directed optimizations, compile the source files again with
3191 the same optimization and code generation options plus
3192 @option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
3193 Control Optimization}).
3195 @item
3196 For test coverage analysis, use @command{gcov} to produce human readable
3197 information from the @file{.gcno} and @file{.gcda} files. Refer to the
3198 @command{gcov} documentation for further information.
3200 @end itemize
3202 With @option{-fprofile-arcs}, for each function of your program GCC
3203 creates a program flow graph, then finds a spanning tree for the graph.
3204 Only arcs that are not on the spanning tree have to be instrumented: the
3205 compiler adds code to count the number of times that these arcs are
3206 executed.  When an arc is the only exit or only entrance to a block, the
3207 instrumentation code can be added to the block; otherwise, a new basic
3208 block must be created to hold the instrumentation code.
3210 @need 2000
3211 @item -ftest-coverage
3212 @opindex ftest-coverage
3213 Produce a notes file that the @command{gcov} code-coverage utility
3214 (@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
3215 show program coverage. Each source file's note file is called
3216 @file{@var{auxname}.gcno}. Refer to the @option{-fprofile-arcs} option
3217 above for a description of @var{auxname} and instructions on how to
3218 generate test coverage data. Coverage data will match the source files
3219 more closely, if you do not optimize.
3221 @item -d@var{letters}
3222 @opindex d
3223 Says to make debugging dumps during compilation at times specified by
3224 @var{letters}.  This is used for debugging the compiler.  The file names
3225 for most of the dumps are made by appending a pass number and a word to
3226 the @var{dumpname}. @var{dumpname} is generated from the name of the
3227 output file, if explicitly specified and it is not an executable,
3228 otherwise it is the basename of the source file. In both cases any
3229 suffix is removed (e.g.  @file{foo.01.rtl} or @file{foo.02.sibling}).
3230 Here are the possible letters for use in @var{letters}, and their
3231 meanings:
3233 @table @samp
3234 @item A
3235 @opindex dA
3236 Annotate the assembler output with miscellaneous debugging information.
3237 @item b
3238 @opindex db
3239 Dump after computing branch probabilities, to @file{@var{file}.12.bp}.
3240 @item B
3241 @opindex dB
3242 Dump after block reordering, to @file{@var{file}.31.bbro}.
3243 @item c
3244 @opindex dc
3245 Dump after instruction combination, to the file @file{@var{file}.20.combine}.
3246 @item C
3247 @opindex dC
3248 Dump after the first if conversion, to the file @file{@var{file}.14.ce1}.
3249 Also dump after the second if conversion, to the file @file{@var{file}.21.ce2}.
3250 @item d
3251 @opindex dd
3252 Dump after branch target load optimization, to to @file{@var{file}.32.btl}.
3253 Also dump after delayed branch scheduling, to @file{@var{file}.36.dbr}.
3254 @item D
3255 @opindex dD
3256 Dump all macro definitions, at the end of preprocessing, in addition to
3257 normal output.
3258 @item E
3259 @opindex dE
3260 Dump after the third if conversion, to @file{@var{file}.30.ce3}.
3261 @item f
3262 @opindex df
3263 Dump after control and data flow analysis, to @file{@var{file}.11.cfg}.
3264 Also dump after life analysis, to @file{@var{file}.19.life}.
3265 @item F
3266 @opindex dF
3267 Dump after purging @code{ADDRESSOF} codes, to @file{@var{file}.07.addressof}.
3268 @item g
3269 @opindex dg
3270 Dump after global register allocation, to @file{@var{file}.25.greg}.
3271 @item G
3272 @opindex dG
3273 Dump after GCSE, to @file{@var{file}.08.gcse}.
3274 Also dump after jump bypassing and control flow optimizations, to
3275 @file{@var{file}.10.bypass}.
3276 @item h
3277 @opindex dh
3278 Dump after finalization of EH handling code, to @file{@var{file}.03.eh}.
3279 @item i
3280 @opindex di
3281 Dump after sibling call optimizations, to @file{@var{file}.02.sibling}.
3282 @item j
3283 @opindex dj
3284 Dump after the first jump optimization, to @file{@var{file}.04.jump}.
3285 @item k
3286 @opindex dk
3287 Dump after conversion from registers to stack, to @file{@var{file}.34.stack}.
3288 @item l
3289 @opindex dl
3290 Dump after local register allocation, to @file{@var{file}.24.lreg}.
3291 @item L
3292 @opindex dL
3293 Dump after loop optimization passes, to @file{@var{file}.09.loop} and
3294 @file{@var{file}.16.loop2}.
3295 @item M
3296 @opindex dM
3297 Dump after performing the machine dependent reorganization pass, to
3298 @file{@var{file}.35.mach}.
3299 @item n
3300 @opindex dn
3301 Dump after register renumbering, to @file{@var{file}.29.rnreg}.
3302 @item N
3303 @opindex dN
3304 Dump after the register move pass, to @file{@var{file}.22.regmove}.
3305 @item o
3306 @opindex do
3307 Dump after post-reload optimizations, to @file{@var{file}.26.postreload}.
3308 @item r
3309 @opindex dr
3310 Dump after RTL generation, to @file{@var{file}.01.rtl}.
3311 @item R
3312 @opindex dR
3313 Dump after the second scheduling pass, to @file{@var{file}.33.sched2}.
3314 @item s
3315 @opindex ds
3316 Dump after CSE (including the jump optimization that sometimes follows
3317 CSE), to @file{@var{file}.06.cse}.
3318 @item S
3319 @opindex dS
3320 Dump after the first scheduling pass, to @file{@var{file}.23.sched}.
3321 @item t
3322 @opindex dt
3323 Dump after the second CSE pass (including the jump optimization that
3324 sometimes follows CSE), to @file{@var{file}.18.cse2}.
3325 @item T
3326 @opindex dT
3327 Dump after running tracer, to @file{@var{file}.15.tracer}.
3328 @item u
3329 @opindex du
3330 Dump after null pointer elimination pass to @file{@var{file}.05.null}.
3331 @item U
3332 @opindex dU
3333 Dump callgraph and unit-at-a-time optimization @file{@var{file}.00.unit}.
3334 @item V
3335 @opindex dV
3336 Dump after the value profile transformations, to @file{@var{file}.13.vpt}.
3337 Also dump after variable tracking, to @file{@var{file}.35.vartrack}.
3338 @item w
3339 @opindex dw
3340 Dump after the second flow pass, to @file{@var{file}.27.flow2}.
3341 @item z
3342 @opindex dz
3343 Dump after the peephole pass, to @file{@var{file}.28.peephole2}.
3344 @item Z
3345 @opindex dZ
3346 Dump after constructing the web, to @file{@var{file}.17.web}.
3347 @item a
3348 @opindex da
3349 Produce all the dumps listed above.
3350 @item H
3351 @opindex dH
3352 Produce a core dump whenever an error occurs.
3353 @item m
3354 @opindex dm
3355 Print statistics on memory usage, at the end of the run, to
3356 standard error.
3357 @item p
3358 @opindex dp
3359 Annotate the assembler output with a comment indicating which
3360 pattern and alternative was used.  The length of each instruction is
3361 also printed.
3362 @item P
3363 @opindex dP
3364 Dump the RTL in the assembler output as a comment before each instruction.
3365 Also turns on @option{-dp} annotation.
3366 @item v
3367 @opindex dv
3368 For each of the other indicated dump files (except for
3369 @file{@var{file}.01.rtl}), dump a representation of the control flow graph
3370 suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.
3371 @item x
3372 @opindex dx
3373 Just generate RTL for a function instead of compiling it.  Usually used
3374 with @samp{r}.
3375 @item y
3376 @opindex dy
3377 Dump debugging information during parsing, to standard error.
3378 @end table
3380 @item -fdump-unnumbered
3381 @opindex fdump-unnumbered
3382 When doing debugging dumps (see @option{-d} option above), suppress instruction
3383 numbers and line number note output.  This makes it more feasible to
3384 use diff on debugging dumps for compiler invocations with different
3385 options, in particular with and without @option{-g}.
3387 @item -fdump-translation-unit @r{(C and C++ only)}
3388 @itemx -fdump-translation-unit-@var{options} @r{(C and C++ only)}
3389 @opindex fdump-translation-unit
3390 Dump a representation of the tree structure for the entire translation
3391 unit to a file.  The file name is made by appending @file{.tu} to the
3392 source file name.  If the @samp{-@var{options}} form is used, @var{options}
3393 controls the details of the dump as described for the
3394 @option{-fdump-tree} options.
3396 @item -fdump-class-hierarchy @r{(C++ only)}
3397 @itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
3398 @opindex fdump-class-hierarchy
3399 Dump a representation of each class's hierarchy and virtual function
3400 table layout to a file.  The file name is made by appending @file{.class}
3401 to the source file name.  If the @samp{-@var{options}} form is used,
3402 @var{options} controls the details of the dump as described for the
3403 @option{-fdump-tree} options.
3405 @item -fdump-tree-@var{switch} @r{(C++ only)}
3406 @itemx -fdump-tree-@var{switch}-@var{options} @r{(C++ only)}
3407 @opindex fdump-tree
3408 Control the dumping at various stages of processing the intermediate
3409 language tree to a file.  The file name is generated by appending a switch
3410 specific suffix to the source file name.  If the @samp{-@var{options}}
3411 form is used, @var{options} is a list of @samp{-} separated options that
3412 control the details of the dump. Not all options are applicable to all
3413 dumps, those which are not meaningful will be ignored. The following
3414 options are available
3416 @table @samp
3417 @item address
3418 Print the address of each node.  Usually this is not meaningful as it
3419 changes according to the environment and source file. Its primary use
3420 is for tying up a dump file with a debug environment.
3421 @item slim
3422 Inhibit dumping of members of a scope or body of a function merely
3423 because that scope has been reached. Only dump such items when they
3424 are directly reachable by some other path.
3425 @item all
3426 Turn on all options.
3427 @end table
3429 The following tree dumps are possible:
3430 @table @samp
3431 @item original
3432 Dump before any tree based optimization, to @file{@var{file}.original}.
3433 @item optimized
3434 Dump after all tree based optimization, to @file{@var{file}.optimized}.
3435 @item inlined
3436 Dump after function inlining, to @file{@var{file}.inlined}.
3437 @end table
3439 @item -frandom-seed=@var{string}
3440 @opindex frandom-string
3441 This option provides a seed that GCC uses when it would otherwise use
3442 random numbers.  It is used to generate certain symbol names
3443 that have to be different in every compiled file. It is also used to
3444 place unique stamps in coverage data files and the object files that
3445 produce them. You can use the @option{-frandom-seed} option to produce
3446 reproducibly identical object files.
3448 The @var{string} should be different for every file you compile.
3450 @item -fsched-verbose=@var{n}
3451 @opindex fsched-verbose
3452 On targets that use instruction scheduling, this option controls the
3453 amount of debugging output the scheduler prints.  This information is
3454 written to standard error, unless @option{-dS} or @option{-dR} is
3455 specified, in which case it is output to the usual dump
3456 listing file, @file{.sched} or @file{.sched2} respectively.  However
3457 for @var{n} greater than nine, the output is always printed to standard
3458 error.
3460 For @var{n} greater than zero, @option{-fsched-verbose} outputs the
3461 same information as @option{-dRS}.  For @var{n} greater than one, it
3462 also output basic block probabilities, detailed ready list information
3463 and unit/insn info.  For @var{n} greater than two, it includes RTL
3464 at abort point, control-flow and regions info.  And for @var{n} over
3465 four, @option{-fsched-verbose} also includes dependence info.
3467 @item -save-temps
3468 @opindex save-temps
3469 Store the usual ``temporary'' intermediate files permanently; place them
3470 in the current directory and name them based on the source file.  Thus,
3471 compiling @file{foo.c} with @samp{-c -save-temps} would produce files
3472 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
3473 preprocessed @file{foo.i} output file even though the compiler now
3474 normally uses an integrated preprocessor.
3476 @item -time
3477 @opindex time
3478 Report the CPU time taken by each subprocess in the compilation
3479 sequence.  For C source files, this is the compiler proper and assembler
3480 (plus the linker if linking is done).  The output looks like this:
3482 @smallexample
3483 # cc1 0.12 0.01
3484 # as 0.00 0.01
3485 @end smallexample
3487 The first number on each line is the ``user time,'' that is time spent
3488 executing the program itself.  The second number is ``system time,''
3489 time spent executing operating system routines on behalf of the program.
3490 Both numbers are in seconds.
3492 @item -fvar-tracking
3493 @opindex fvar-tracking
3494 Run variable tracking pass. It computes where variables are stored at each
3495 position in code. Better debugging information is then generated
3496 (if the debugging information format supports this information).
3498 It is enabled by default when compiling with optimization (@option{-Os},
3499 @option{-O}, @option{-O2}, ...), debugging information (@option{-g}) and
3500 the debug info format supports it.
3502 @item -print-file-name=@var{library}
3503 @opindex print-file-name
3504 Print the full absolute name of the library file @var{library} that
3505 would be used when linking---and don't do anything else.  With this
3506 option, GCC does not compile or link anything; it just prints the
3507 file name.
3509 @item -print-multi-directory
3510 @opindex print-multi-directory
3511 Print the directory name corresponding to the multilib selected by any
3512 other switches present in the command line.  This directory is supposed
3513 to exist in @env{GCC_EXEC_PREFIX}.
3515 @item -print-multi-lib
3516 @opindex print-multi-lib
3517 Print the mapping from multilib directory names to compiler switches
3518 that enable them.  The directory name is separated from the switches by
3519 @samp{;}, and each switch starts with an @samp{@@} instead of the
3520 @samp{-}, without spaces between multiple switches.  This is supposed to
3521 ease shell-processing.
3523 @item -print-prog-name=@var{program}
3524 @opindex print-prog-name
3525 Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.
3527 @item -print-libgcc-file-name
3528 @opindex print-libgcc-file-name
3529 Same as @option{-print-file-name=libgcc.a}.
3531 This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
3532 but you do want to link with @file{libgcc.a}.  You can do
3534 @smallexample
3535 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
3536 @end smallexample
3538 @item -print-search-dirs
3539 @opindex print-search-dirs
3540 Print the name of the configured installation directory and a list of
3541 program and library directories @command{gcc} will search---and don't do anything else.
3543 This is useful when @command{gcc} prints the error message
3544 @samp{installation problem, cannot exec cpp0: No such file or directory}.
3545 To resolve this you either need to put @file{cpp0} and the other compiler
3546 components where @command{gcc} expects to find them, or you can set the environment
3547 variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
3548 Don't forget the trailing '/'.
3549 @xref{Environment Variables}.
3551 @item -dumpmachine
3552 @opindex dumpmachine
3553 Print the compiler's target machine (for example,
3554 @samp{i686-pc-linux-gnu})---and don't do anything else.
3556 @item -dumpversion
3557 @opindex dumpversion
3558 Print the compiler version (for example, @samp{3.0})---and don't do
3559 anything else.
3561 @item -dumpspecs
3562 @opindex dumpspecs
3563 Print the compiler's built-in specs---and don't do anything else.  (This
3564 is used when GCC itself is being built.)  @xref{Spec Files}.
3566 @item -feliminate-unused-debug-types
3567 @opindex feliminate-unused-debug-types
3568 Normally, when producing DWARF2 output, GCC will emit debugging
3569 information for all types declared in a compilation
3570 unit, regardless of whether or not they are actually used
3571 in that compilation unit.  Sometimes this is useful, such as
3572 if, in the debugger, you want to cast a value to a type that is
3573 not actually used in your program (but is declared).  More often,
3574 however, this results in a significant amount of wasted space.
3575 With this option, GCC will avoid producing debug symbol output
3576 for types that are nowhere used in the source file being compiled.
3577 @end table
3579 @node Optimize Options
3580 @section Options That Control Optimization
3581 @cindex optimize options
3582 @cindex options, optimization
3584 These options control various sorts of optimizations.
3586 Without any optimization option, the compiler's goal is to reduce the
3587 cost of compilation and to make debugging produce the expected
3588 results.  Statements are independent: if you stop the program with a
3589 breakpoint between statements, you can then assign a new value to any
3590 variable or change the program counter to any other statement in the
3591 function and get exactly the results you would expect from the source
3592 code.
3594 Turning on optimization flags makes the compiler attempt to improve
3595 the performance and/or code size at the expense of compilation time
3596 and possibly the ability to debug the program.
3598 The compiler performs optimization based on the knowledge it has of
3599 the program.  Optimization levels @option{-O2} and above, in
3600 particular, enable @emph{unit-at-a-time} mode, which allows the
3601 compiler to consider information gained from later functions in
3602 the file when compiling a function.  Compiling multiple files at
3603 once to a single output file in @emph{unit-at-a-time} mode allows
3604 the compiler to use information gained from all of the files when
3605 compiling each of them.
3607 Not all optimizations are controlled directly by a flag.  Only
3608 optimizations that have a flag are listed.
3610 @table @gcctabopt
3611 @item -O
3612 @itemx -O1
3613 @opindex O
3614 @opindex O1
3615 Optimize.  Optimizing compilation takes somewhat more time, and a lot
3616 more memory for a large function.
3618 With @option{-O}, the compiler tries to reduce code size and execution
3619 time, without performing any optimizations that take a great deal of
3620 compilation time.
3622 @option{-O} turns on the following optimization flags:
3623 @gccoptlist{-fdefer-pop @gol
3624 -fmerge-constants @gol
3625 -fthread-jumps @gol
3626 -floop-optimize @gol
3627 -fif-conversion @gol
3628 -fif-conversion2 @gol
3629 -fdelayed-branch @gol
3630 -fguess-branch-probability @gol
3631 -fcprop-registers}
3633 @option{-O} also turns on @option{-fomit-frame-pointer} on machines
3634 where doing so does not interfere with debugging.
3636 @item -O2
3637 @opindex O2
3638 Optimize even more.  GCC performs nearly all supported optimizations
3639 that do not involve a space-speed tradeoff.  The compiler does not
3640 perform loop unrolling or function inlining when you specify @option{-O2}.
3641 As compared to @option{-O}, this option increases both compilation time
3642 and the performance of the generated code.
3644 @option{-O2} turns on all optimization flags specified by @option{-O}.  It
3645 also turns on the following optimization flags:
3646 @gccoptlist{-fforce-mem @gol
3647 -foptimize-sibling-calls @gol
3648 -fstrength-reduce @gol
3649 -fcse-follow-jumps  -fcse-skip-blocks @gol
3650 -frerun-cse-after-loop  -frerun-loop-opt @gol
3651 -fgcse  -fgcse-lm  -fgcse-sm  -fgcse-las @gol
3652 -fdelete-null-pointer-checks @gol
3653 -fexpensive-optimizations @gol
3654 -fregmove @gol
3655 -fschedule-insns  -fschedule-insns2 @gol
3656 -fsched-interblock  -fsched-spec @gol
3657 -fcaller-saves @gol
3658 -fpeephole2 @gol
3659 -freorder-blocks  -freorder-functions @gol
3660 -fstrict-aliasing @gol
3661 -funit-at-a-time @gol
3662 -falign-functions  -falign-jumps @gol
3663 -falign-loops  -falign-labels @gol
3664 -fcrossjumping}
3666 Please note the warning under @option{-fgcse} about
3667 invoking @option{-O2} on programs that use computed gotos.
3669 @item -O3
3670 @opindex O3
3671 Optimize yet more.  @option{-O3} turns on all optimizations specified by
3672 @option{-O2} and also turns on the @option{-finline-functions},
3673 @option{-fweb} and @option{-frename-registers} options.
3675 @item -O0
3676 @opindex O0
3677 Do not optimize.  This is the default.
3679 @item -Os
3680 @opindex Os
3681 Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
3682 do not typically increase code size.  It also performs further
3683 optimizations designed to reduce code size.
3685 @option{-Os} disables the following optimization flags:
3686 @gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
3687 -falign-labels  -freorder-blocks  -freorder-blocks-and-partition -fprefetch-loop-arrays}
3689 If you use multiple @option{-O} options, with or without level numbers,
3690 the last such option is the one that is effective.
3691 @end table
3693 Options of the form @option{-f@var{flag}} specify machine-independent
3694 flags.  Most flags have both positive and negative forms; the negative
3695 form of @option{-ffoo} would be @option{-fno-foo}.  In the table
3696 below, only one of the forms is listed---the one you typically will
3697 use.  You can figure out the other form by either removing @samp{no-}
3698 or adding it.
3700 The following options control specific optimizations.  They are either
3701 activated by @option{-O} options or are related to ones that are.  You
3702 can use the following flags in the rare cases when ``fine-tuning'' of
3703 optimizations to be performed is desired.
3705 @table @gcctabopt
3706 @item -fno-default-inline
3707 @opindex fno-default-inline
3708 Do not make member functions inline by default merely because they are
3709 defined inside the class scope (C++ only).  Otherwise, when you specify
3710 @w{@option{-O}}, member functions defined inside class scope are compiled
3711 inline by default; i.e., you don't need to add @samp{inline} in front of
3712 the member function name.
3714 @item -fno-defer-pop
3715 @opindex fno-defer-pop
3716 Always pop the arguments to each function call as soon as that function
3717 returns.  For machines which must pop arguments after a function call,
3718 the compiler normally lets arguments accumulate on the stack for several
3719 function calls and pops them all at once.
3721 Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3723 @item -fforce-mem
3724 @opindex fforce-mem
3725 Force memory operands to be copied into registers before doing
3726 arithmetic on them.  This produces better code by making all memory
3727 references potential common subexpressions.  When they are not common
3728 subexpressions, instruction combination should eliminate the separate
3729 register-load.
3731 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3733 @item -fforce-addr
3734 @opindex fforce-addr
3735 Force memory address constants to be copied into registers before
3736 doing arithmetic on them.  This may produce better code just as
3737 @option{-fforce-mem} may.
3739 @item -fomit-frame-pointer
3740 @opindex fomit-frame-pointer
3741 Don't keep the frame pointer in a register for functions that
3742 don't need one.  This avoids the instructions to save, set up and
3743 restore frame pointers; it also makes an extra register available
3744 in many functions.  @strong{It also makes debugging impossible on
3745 some machines.}
3747 On some machines, such as the VAX, this flag has no effect, because
3748 the standard calling sequence automatically handles the frame pointer
3749 and nothing is saved by pretending it doesn't exist.  The
3750 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
3751 whether a target machine supports this flag.  @xref{Registers,,Register
3752 Usage, gccint, GNU Compiler Collection (GCC) Internals}.
3754 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3756 @item -foptimize-sibling-calls
3757 @opindex foptimize-sibling-calls
3758 Optimize sibling and tail recursive calls.
3760 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3762 @item -fno-inline
3763 @opindex fno-inline
3764 Don't pay attention to the @code{inline} keyword.  Normally this option
3765 is used to keep the compiler from expanding any functions inline.
3766 Note that if you are not optimizing, no functions can be expanded inline.
3768 @item -finline-functions
3769 @opindex finline-functions
3770 Integrate all simple functions into their callers.  The compiler
3771 heuristically decides which functions are simple enough to be worth
3772 integrating in this way.
3774 If all calls to a given function are integrated, and the function is
3775 declared @code{static}, then the function is normally not output as
3776 assembler code in its own right.
3778 Enabled at level @option{-O3}.
3780 @item -finline-limit=@var{n}
3781 @opindex finline-limit
3782 By default, GCC limits the size of functions that can be inlined.  This flag
3783 allows the control of this limit for functions that are explicitly marked as
3784 inline (i.e., marked with the inline keyword or defined within the class
3785 definition in c++).  @var{n} is the size of functions that can be inlined in
3786 number of pseudo instructions (not counting parameter handling).  The default
3787 value of @var{n} is 600.
3788 Increasing this value can result in more inlined code at
3789 the cost of compilation time and memory consumption.  Decreasing usually makes
3790 the compilation faster and less code will be inlined (which presumably
3791 means slower programs).  This option is particularly useful for programs that
3792 use inlining heavily such as those based on recursive templates with C++.
3794 Inlining is actually controlled by a number of parameters, which may be
3795 specified individually by using @option{--param @var{name}=@var{value}}.
3796 The @option{-finline-limit=@var{n}} option sets some of these parameters
3797 as follows:
3799 @table @gcctabopt
3800  @item max-inline-insns-single
3801   is set to @var{n}/2.
3802  @item max-inline-insns-auto
3803   is set to @var{n}/2.
3804  @item min-inline-insns
3805   is set to 130 or @var{n}/4, whichever is smaller.
3806  @item max-inline-insns-rtl
3807   is set to @var{n}.
3808 @end table
3810 See below for a documentation of the individual
3811 parameters controlling inlining.
3813 @emph{Note:} pseudo instruction represents, in this particular context, an
3814 abstract measurement of function's size.  In no way, it represents a count
3815 of assembly instructions and as such its exact meaning might change from one
3816 release to an another.
3818 @item -fkeep-inline-functions
3819 @opindex fkeep-inline-functions
3820 Even if all calls to a given function are integrated, and the function
3821 is declared @code{static}, nevertheless output a separate run-time
3822 callable version of the function.  This switch does not affect
3823 @code{extern inline} functions.
3825 @item -fkeep-static-consts
3826 @opindex fkeep-static-consts
3827 Emit variables declared @code{static const} when optimization isn't turned
3828 on, even if the variables aren't referenced.
3830 GCC enables this option by default.  If you want to force the compiler to
3831 check if the variable was referenced, regardless of whether or not
3832 optimization is turned on, use the @option{-fno-keep-static-consts} option.
3834 @item -fmerge-constants
3835 Attempt to merge identical constants (string constants and floating point
3836 constants) across compilation units.
3838 This option is the default for optimized compilation if the assembler and
3839 linker support it.  Use @option{-fno-merge-constants} to inhibit this
3840 behavior.
3842 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3844 @item -fmerge-all-constants
3845 Attempt to merge identical constants and identical variables.
3847 This option implies @option{-fmerge-constants}.  In addition to
3848 @option{-fmerge-constants} this considers e.g. even constant initialized
3849 arrays or initialized constant variables with integral or floating point
3850 types.  Languages like C or C++ require each non-automatic variable to
3851 have distinct location, so using this option will result in non-conforming
3852 behavior.
3854 @item -fnew-ra
3855 @opindex fnew-ra
3856 Use a graph coloring register allocator.  Currently this option is meant
3857 only for testing.  Users should not specify this option, since it is not
3858 yet ready for production use.
3860 @item -fno-branch-count-reg
3861 @opindex fno-branch-count-reg
3862 Do not use ``decrement and branch'' instructions on a count register,
3863 but instead generate a sequence of instructions that decrement a
3864 register, compare it against zero, then branch based upon the result.
3865 This option is only meaningful on architectures that support such
3866 instructions, which include x86, PowerPC, IA-64 and S/390.
3868 The default is @option{-fbranch-count-reg}, enabled when
3869 @option{-fstrength-reduce} is enabled.
3871 @item -fno-function-cse
3872 @opindex fno-function-cse
3873 Do not put function addresses in registers; make each instruction that
3874 calls a constant function contain the function's address explicitly.
3876 This option results in less efficient code, but some strange hacks
3877 that alter the assembler output may be confused by the optimizations
3878 performed when this option is not used.
3880 The default is @option{-ffunction-cse}
3882 @item -fno-zero-initialized-in-bss
3883 @opindex fno-zero-initialized-in-bss
3884 If the target supports a BSS section, GCC by default puts variables that
3885 are initialized to zero into BSS@.  This can save space in the resulting
3886 code.
3888 This option turns off this behavior because some programs explicitly
3889 rely on variables going to the data section.  E.g., so that the
3890 resulting executable can find the beginning of that section and/or make
3891 assumptions based on that.
3893 The default is @option{-fzero-initialized-in-bss}.
3895 @item -fstrength-reduce
3896 @opindex fstrength-reduce
3897 Perform the optimizations of loop strength reduction and
3898 elimination of iteration variables.
3900 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3902 @item -fthread-jumps
3903 @opindex fthread-jumps
3904 Perform optimizations where we check to see if a jump branches to a
3905 location where another comparison subsumed by the first is found.  If
3906 so, the first branch is redirected to either the destination of the
3907 second branch or a point immediately following it, depending on whether
3908 the condition is known to be true or false.
3910 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3912 @item -fcse-follow-jumps
3913 @opindex fcse-follow-jumps
3914 In common subexpression elimination, scan through jump instructions
3915 when the target of the jump is not reached by any other path.  For
3916 example, when CSE encounters an @code{if} statement with an
3917 @code{else} clause, CSE will follow the jump when the condition
3918 tested is false.
3920 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3922 @item -fcse-skip-blocks
3923 @opindex fcse-skip-blocks
3924 This is similar to @option{-fcse-follow-jumps}, but causes CSE to
3925 follow jumps which conditionally skip over blocks.  When CSE
3926 encounters a simple @code{if} statement with no else clause,
3927 @option{-fcse-skip-blocks} causes CSE to follow the jump around the
3928 body of the @code{if}.
3930 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3932 @item -frerun-cse-after-loop
3933 @opindex frerun-cse-after-loop
3934 Re-run common subexpression elimination after loop optimizations has been
3935 performed.
3937 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3939 @item -frerun-loop-opt
3940 @opindex frerun-loop-opt
3941 Run the loop optimizer twice.
3943 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3945 @item -fgcse
3946 @opindex fgcse
3947 Perform a global common subexpression elimination pass.
3948 This pass also performs global constant and copy propagation.
3950 @emph{Note:} When compiling a program using computed gotos, a GCC
3951 extension, you may get better runtime performance if you disable
3952 the global common subexpression elimination pass by adding
3953 @option{-fno-gcse} to the command line.
3955 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3957 @item -fgcse-lm
3958 @opindex fgcse-lm
3959 When @option{-fgcse-lm} is enabled, global common subexpression elimination will
3960 attempt to move loads which are only killed by stores into themselves.  This
3961 allows a loop containing a load/store sequence to be changed to a load outside
3962 the loop, and a copy/store within the loop.
3964 Enabled by default when gcse is enabled.
3966 @item -fgcse-sm
3967 @opindex fgcse-sm
3968 When @option{-fgcse-sm} is enabled, a store motion pass is run after
3969 global common subexpression elimination.  This pass will attempt to move
3970 stores out of loops.  When used in conjunction with @option{-fgcse-lm},
3971 loops containing a load/store sequence can be changed to a load before
3972 the loop and a store after the loop.
3974 Enabled by default when gcse is enabled.
3976 @item -fgcse-las
3977 @opindex fgcse-las
3978 When @option{-fgcse-las} is enabled, the global common subexpression
3979 elimination pass eliminates redundant loads that come after stores to the
3980 same memory location (both partial and full redundancies).
3982 Enabled by default when gcse is enabled.
3984 @item -floop-optimize
3985 @opindex floop-optimize
3986 Perform loop optimizations: move constant expressions out of loops, simplify
3987 exit test conditions and optionally do strength-reduction and loop unrolling as
3988 well.
3990 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3992 @item -fcrossjumping
3993 @opindex crossjumping
3994 Perform cross-jumping transformation. This transformation unifies equivalent code and save code size. The
3995 resulting code may or may not perform better than without cross-jumping.
3997 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3999 @item -fif-conversion
4000 @opindex if-conversion
4001 Attempt to transform conditional jumps into branch-less equivalents.  This
4002 include use of conditional moves, min, max, set flags and abs instructions, and
4003 some tricks doable by standard arithmetics.  The use of conditional execution
4004 on chips where it is available is controlled by @code{if-conversion2}.
4006 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4008 @item -fif-conversion2
4009 @opindex if-conversion2
4010 Use conditional execution (where available) to transform conditional jumps into
4011 branch-less equivalents.
4013 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4015 @item -fdelete-null-pointer-checks
4016 @opindex fdelete-null-pointer-checks
4017 Use global dataflow analysis to identify and eliminate useless checks
4018 for null pointers.  The compiler assumes that dereferencing a null
4019 pointer would have halted the program.  If a pointer is checked after
4020 it has already been dereferenced, it cannot be null.
4022 In some environments, this assumption is not true, and programs can
4023 safely dereference null pointers.  Use
4024 @option{-fno-delete-null-pointer-checks} to disable this optimization
4025 for programs which depend on that behavior.
4027 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4029 @item -fexpensive-optimizations
4030 @opindex fexpensive-optimizations
4031 Perform a number of minor optimizations that are relatively expensive.
4033 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4035 @item -foptimize-register-move
4036 @itemx -fregmove
4037 @opindex foptimize-register-move
4038 @opindex fregmove
4039 Attempt to reassign register numbers in move instructions and as
4040 operands of other simple instructions in order to maximize the amount of
4041 register tying.  This is especially helpful on machines with two-operand
4042 instructions.
4044 Note @option{-fregmove} and @option{-foptimize-register-move} are the same
4045 optimization.
4047 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4049 @item -fdelayed-branch
4050 @opindex fdelayed-branch
4051 If supported for the target machine, attempt to reorder instructions
4052 to exploit instruction slots available after delayed branch
4053 instructions.
4055 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4057 @item -fschedule-insns
4058 @opindex fschedule-insns
4059 If supported for the target machine, attempt to reorder instructions to
4060 eliminate execution stalls due to required data being unavailable.  This
4061 helps machines that have slow floating point or memory load instructions
4062 by allowing other instructions to be issued until the result of the load
4063 or floating point instruction is required.
4065 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4067 @item -fschedule-insns2
4068 @opindex fschedule-insns2
4069 Similar to @option{-fschedule-insns}, but requests an additional pass of
4070 instruction scheduling after register allocation has been done.  This is
4071 especially useful on machines with a relatively small number of
4072 registers and where memory load instructions take more than one cycle.
4074 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4076 @item -fno-sched-interblock
4077 @opindex fno-sched-interblock
4078 Don't schedule instructions across basic blocks.  This is normally
4079 enabled by default when scheduling before register allocation, i.e.@:
4080 with @option{-fschedule-insns} or at @option{-O2} or higher.
4082 @item -fno-sched-spec
4083 @opindex fno-sched-spec
4084 Don't allow speculative motion of non-load instructions.  This is normally
4085 enabled by default when scheduling before register allocation, i.e.@:
4086 with @option{-fschedule-insns} or at @option{-O2} or higher.
4088 @item -fsched-spec-load
4089 @opindex fsched-spec-load
4090 Allow speculative motion of some load instructions.  This only makes
4091 sense when scheduling before register allocation, i.e.@: with
4092 @option{-fschedule-insns} or at @option{-O2} or higher.
4094 @item -fsched-spec-load-dangerous
4095 @opindex fsched-spec-load-dangerous
4096 Allow speculative motion of more load instructions.  This only makes
4097 sense when scheduling before register allocation, i.e.@: with
4098 @option{-fschedule-insns} or at @option{-O2} or higher.
4100 @item -fsched-stalled-insns=@var{n}
4101 @opindex fsched-stalled-insns
4102 Define how many insns (if any) can be moved prematurely from the queue
4103 of stalled insns into the ready list, during the second scheduling pass.
4105 @item -fsched-stalled-insns-dep=@var{n}
4106 @opindex fsched-stalled-insns-dep
4107 Define how many insn groups (cycles) will be examined for a dependency
4108 on a stalled insn that is candidate for premature removal from the queue
4109 of stalled insns.  Has an effect only during the second scheduling pass,
4110 and only if @option{-fsched-stalled-insns} is used and its value is not zero.
4112 @item -fsched2-use-superblocks
4113 @opindex fsched2-use-superblocks
4114 When scheduling after register allocation, do use superblock scheduling
4115 algorithm.  Superblock scheduling allows motion across basic block boundaries
4116 resulting on faster schedules.  This option is experimental, as not all machine
4117 descriptions used by GCC model the CPU closely enough to avoid unreliable
4118 results from the algorithm.
4120 This only makes sense when scheduling after register allocation, i.e.@: with
4121 @option{-fschedule-insns2} or at @option{-O2} or higher.
4123 @item -fsched2-use-traces
4124 @opindex fsched2-use-traces
4125 Use @option{-fsched2-use-superblocks} algorithm when scheduling after register
4126 allocation and additionally perform code duplication in order to increase the
4127 size of superblocks using tracer pass.  See @option{-ftracer} for details on
4128 trace formation.
4130 This mode should produce faster but significantly longer programs.  Also
4131 without @code{-fbranch-probabilities} the traces constructed may not match the
4132 reality and hurt the performance.  This only makes
4133 sense when scheduling after register allocation, i.e.@: with
4134 @option{-fschedule-insns2} or at @option{-O2} or higher.
4136 @item -fcaller-saves
4137 @opindex fcaller-saves
4138 Enable values to be allocated in registers that will be clobbered by
4139 function calls, by emitting extra instructions to save and restore the
4140 registers around such calls.  Such allocation is done only when it
4141 seems to result in better code than would otherwise be produced.
4143 This option is always enabled by default on certain machines, usually
4144 those which have no call-preserved registers to use instead.
4146 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4148 @item -fmove-all-movables
4149 @opindex fmove-all-movables
4150 Forces all invariant computations in loops to be moved
4151 outside the loop.
4153 @item -freduce-all-givs
4154 @opindex freduce-all-givs
4155 Forces all general-induction variables in loops to be
4156 strength-reduced.
4158 @emph{Note:} When compiling programs written in Fortran,
4159 @option{-fmove-all-movables} and @option{-freduce-all-givs} are enabled
4160 by default when you use the optimizer.
4162 These options may generate better or worse code; results are highly
4163 dependent on the structure of loops within the source code.
4165 These two options are intended to be removed someday, once
4166 they have helped determine the efficacy of various
4167 approaches to improving loop optimizations.
4169 Please let us (@w{@email{gcc@@gcc.gnu.org}} and @w{@email{fortran@@gnu.org}})
4170 know how use of these options affects
4171 the performance of your production code.
4172 We're very interested in code that runs @emph{slower}
4173 when these options are @emph{enabled}.
4175 @item -fno-peephole
4176 @itemx -fno-peephole2
4177 @opindex fno-peephole
4178 @opindex fno-peephole2
4179 Disable any machine-specific peephole optimizations.  The difference
4180 between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
4181 are implemented in the compiler; some targets use one, some use the
4182 other, a few use both.
4184 @option{-fpeephole} is enabled by default.
4185 @option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4187 @item -fno-guess-branch-probability
4188 @opindex fno-guess-branch-probability
4189 Do not guess branch probabilities using a randomized model.
4191 Sometimes GCC will opt to use a randomized model to guess branch
4192 probabilities, when none are available from either profiling feedback
4193 (@option{-fprofile-arcs}) or @samp{__builtin_expect}.  This means that
4194 different runs of the compiler on the same program may produce different
4195 object code.
4197 In a hard real-time system, people don't want different runs of the
4198 compiler to produce code that has different behavior; minimizing
4199 non-determinism is of paramount import.  This switch allows users to
4200 reduce non-determinism, possibly at the expense of inferior
4201 optimization.
4203 The default is @option{-fguess-branch-probability} at levels
4204 @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4206 @item -freorder-blocks
4207 @opindex freorder-blocks
4208 Reorder basic blocks in the compiled function in order to reduce number of
4209 taken branches and improve code locality.
4211 Enabled at levels @option{-O2}, @option{-O3}.
4213 @item -freorder-blocks-and-partition
4214 @opindex freorder-blocks-and-partition
4215 In addition to reordering basic blocks in the compiled function, in order
4216 to reduce number of taken branches, partitions hot and cold basic blocks
4217 into separate sections of the assembly and .o files, to improve
4218 paging and cache locality performance.
4220 @item -freorder-functions
4221 @opindex freorder-functions
4222 Reorder basic blocks in the compiled function in order to reduce number of
4223 taken branches and improve code locality. This is implemented by using special
4224 subsections @code{.text.hot} for most frequently executed functions and
4225 @code{.text.unlikely} for unlikely executed functions.  Reordering is done by
4226 the linker so object file format must support named sections and linker must
4227 place them in a reasonable way.
4229 Also profile feedback must be available in to make this option effective.  See
4230 @option{-fprofile-arcs} for details.
4232 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4234 @item -fstrict-aliasing
4235 @opindex fstrict-aliasing
4236 Allows the compiler to assume the strictest aliasing rules applicable to
4237 the language being compiled.  For C (and C++), this activates
4238 optimizations based on the type of expressions.  In particular, an
4239 object of one type is assumed never to reside at the same address as an
4240 object of a different type, unless the types are almost the same.  For
4241 example, an @code{unsigned int} can alias an @code{int}, but not a
4242 @code{void*} or a @code{double}.  A character type may alias any other
4243 type.
4245 Pay special attention to code like this:
4246 @smallexample
4247 union a_union @{
4248   int i;
4249   double d;
4252 int f() @{
4253   a_union t;
4254   t.d = 3.0;
4255   return t.i;
4257 @end smallexample
4258 The practice of reading from a different union member than the one most
4259 recently written to (called ``type-punning'') is common.  Even with
4260 @option{-fstrict-aliasing}, type-punning is allowed, provided the memory
4261 is accessed through the union type.  So, the code above will work as
4262 expected.  However, this code might not:
4263 @smallexample
4264 int f() @{
4265   a_union t;
4266   int* ip;
4267   t.d = 3.0;
4268   ip = &t.i;
4269   return *ip;
4271 @end smallexample
4273 Every language that wishes to perform language-specific alias analysis
4274 should define a function that computes, given an @code{tree}
4275 node, an alias set for the node.  Nodes in different alias sets are not
4276 allowed to alias.  For an example, see the C front-end function
4277 @code{c_get_alias_set}.
4279 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4281 @item -falign-functions
4282 @itemx -falign-functions=@var{n}
4283 @opindex falign-functions
4284 Align the start of functions to the next power-of-two greater than
4285 @var{n}, skipping up to @var{n} bytes.  For instance,
4286 @option{-falign-functions=32} aligns functions to the next 32-byte
4287 boundary, but @option{-falign-functions=24} would align to the next
4288 32-byte boundary only if this can be done by skipping 23 bytes or less.
4290 @option{-fno-align-functions} and @option{-falign-functions=1} are
4291 equivalent and mean that functions will not be aligned.
4293 Some assemblers only support this flag when @var{n} is a power of two;
4294 in that case, it is rounded up.
4296 If @var{n} is not specified or is zero, use a machine-dependent default.
4298 Enabled at levels @option{-O2}, @option{-O3}.
4300 @item -falign-labels
4301 @itemx -falign-labels=@var{n}
4302 @opindex falign-labels
4303 Align all branch targets to a power-of-two boundary, skipping up to
4304 @var{n} bytes like @option{-falign-functions}.  This option can easily
4305 make code slower, because it must insert dummy operations for when the
4306 branch target is reached in the usual flow of the code.
4308 @option{-fno-align-labels} and @option{-falign-labels=1} are
4309 equivalent and mean that labels will not be aligned.
4311 If @option{-falign-loops} or @option{-falign-jumps} are applicable and
4312 are greater than this value, then their values are used instead.
4314 If @var{n} is not specified or is zero, use a machine-dependent default
4315 which is very likely to be @samp{1}, meaning no alignment.
4317 Enabled at levels @option{-O2}, @option{-O3}.
4319 @item -falign-loops
4320 @itemx -falign-loops=@var{n}
4321 @opindex falign-loops
4322 Align loops to a power-of-two boundary, skipping up to @var{n} bytes
4323 like @option{-falign-functions}.  The hope is that the loop will be
4324 executed many times, which will make up for any execution of the dummy
4325 operations.
4327 @option{-fno-align-loops} and @option{-falign-loops=1} are
4328 equivalent and mean that loops will not be aligned.
4330 If @var{n} is not specified or is zero, use a machine-dependent default.
4332 Enabled at levels @option{-O2}, @option{-O3}.
4334 @item -falign-jumps
4335 @itemx -falign-jumps=@var{n}
4336 @opindex falign-jumps
4337 Align branch targets to a power-of-two boundary, for branch targets
4338 where the targets can only be reached by jumping, skipping up to @var{n}
4339 bytes like @option{-falign-functions}.  In this case, no dummy operations
4340 need be executed.
4342 @option{-fno-align-jumps} and @option{-falign-jumps=1} are
4343 equivalent and mean that loops will not be aligned.
4345 If @var{n} is not specified or is zero, use a machine-dependent default.
4347 Enabled at levels @option{-O2}, @option{-O3}.
4349 @item -funit-at-a-time
4350 @opindex funit-at-a-time
4351 Parse the whole compilation unit before starting to produce code.
4352 This allows some extra optimizations to take place but consumes
4353 more memory (in general).  There are some compatibility issues
4354 with @emph{unit-at-at-time} mode:
4355 @itemize @bullet
4356 @item
4357 enabling @emph{unit-at-a-time} mode may change the order
4358 in which functions, variables, and top-level @code{asm} statements
4359 are emitted, and will likely break code relying on some particular
4360 ordering.  The majority of such top-level @code{asm} statements,
4361 though, can be replaced by @code{section} attributes.
4363 @item
4364 @emph{unit-at-a-time} mode removes unreferenced static variables
4365 and functions are removed.  This may result in undefined references
4366 when an @code{asm} statement refers directly to variables or functions
4367 that are otherwise unused.  In that case either the variable/function
4368 shall be listed as an operand of the @code{asm} statement operand or,
4369 in the case of top-level @code{asm} statements the attribute @code{used}
4370 shall be used on the declaration.
4372 @item
4373 Static functions now can use non-standard passing conventions that
4374 may break @code{asm} statements calling functions directly. Again,
4375 attribute @code{used} will prevent this behavior.
4376 @end itemize
4378 As a temporary workaround, @option{-fno-unit-at-a-time} can be used,
4379 but this scheme may not be supported by future releases of GCC. 
4381 Enabled at levels @option{-O2}, @option{-O3}.
4383 @item -fweb
4384 @opindex fweb
4385 Constructs webs as commonly used for register allocation purposes and assign
4386 each web individual pseudo register.  This allows our register allocation pass
4387 to operate on pseudos directly, but also strengthens several other optimization
4388 passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
4389 however, make debugging impossible, since variables will no longer stay in a
4390 ``home register''.
4392 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os},
4393 on targets where the default format for debugging information supports
4394 variable tracking.
4396 @item -fno-cprop-registers
4397 @opindex fno-cprop-registers
4398 After register allocation and post-register allocation instruction splitting,
4399 we perform a copy-propagation pass to try to reduce scheduling dependencies
4400 and occasionally eliminate the copy.
4402 Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4404 @item -fprofile-generate
4405 @opindex fprofile-generate
4407 Enable options usually used for instrumenting application to produce
4408 profile useful for later recompilation with profile feedback based
4409 optimization.  You must use @code{-fprofile-generate} both when
4410 compiling and when linking your program.
4412 The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}.
4414 @item -fprofile-use
4415 @opindex fprofile-use
4416 Enable profile feedback directed optimizations, and optimizations
4417 generally profitable only with profile feedback available.
4419 The following options are enabled: @code{-fbranch-probabilities},
4420 @code{-fvpt}, @code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer}.
4422 @end table
4424 The following options control compiler behavior regarding floating
4425 point arithmetic.  These options trade off between speed and
4426 correctness.  All must be specifically enabled.
4428 @table @gcctabopt
4429 @item -ffloat-store
4430 @opindex ffloat-store
4431 Do not store floating point variables in registers, and inhibit other
4432 options that might change whether a floating point value is taken from a
4433 register or memory.
4435 @cindex floating point precision
4436 This option prevents undesirable excess precision on machines such as
4437 the 68000 where the floating registers (of the 68881) keep more
4438 precision than a @code{double} is supposed to have.  Similarly for the
4439 x86 architecture.  For most programs, the excess precision does only
4440 good, but a few programs rely on the precise definition of IEEE floating
4441 point.  Use @option{-ffloat-store} for such programs, after modifying
4442 them to store all pertinent intermediate computations into variables.
4444 @item -ffast-math
4445 @opindex ffast-math
4446 Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, @*
4447 @option{-fno-trapping-math}, @option{-ffinite-math-only},
4448 @option{-fno-rounding-math} and @option{-fno-signaling-nans}.
4450 This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
4452 This option should never be turned on by any @option{-O} option since
4453 it can result in incorrect output for programs which depend on
4454 an exact implementation of IEEE or ISO rules/specifications for
4455 math functions.
4457 @item -fno-math-errno
4458 @opindex fno-math-errno
4459 Do not set ERRNO after calling math functions that are executed
4460 with a single instruction, e.g., sqrt.  A program that relies on
4461 IEEE exceptions for math error handling may want to use this flag
4462 for speed while maintaining IEEE arithmetic compatibility.
4464 This option should never be turned on by any @option{-O} option since
4465 it can result in incorrect output for programs which depend on
4466 an exact implementation of IEEE or ISO rules/specifications for
4467 math functions.
4469 The default is @option{-fmath-errno}.
4471 @item -funsafe-math-optimizations
4472 @opindex funsafe-math-optimizations
4473 Allow optimizations for floating-point arithmetic that (a) assume
4474 that arguments and results are valid and (b) may violate IEEE or
4475 ANSI standards.  When used at link-time, it may include libraries
4476 or startup files that change the default FPU control word or other
4477 similar optimizations.
4479 This option should never be turned on by any @option{-O} option since
4480 it can result in incorrect output for programs which depend on
4481 an exact implementation of IEEE or ISO rules/specifications for
4482 math functions.
4484 The default is @option{-fno-unsafe-math-optimizations}.
4486 @item -ffinite-math-only
4487 @opindex ffinite-math-only
4488 Allow optimizations for floating-point arithmetic that assume
4489 that arguments and results are not NaNs or +-Infs.
4491 This option should never be turned on by any @option{-O} option since
4492 it can result in incorrect output for programs which depend on
4493 an exact implementation of IEEE or ISO rules/specifications.
4495 The default is @option{-fno-finite-math-only}.
4497 @item -fno-trapping-math
4498 @opindex fno-trapping-math
4499 Compile code assuming that floating-point operations cannot generate
4500 user-visible traps.  These traps include division by zero, overflow,
4501 underflow, inexact result and invalid operation.  This option implies
4502 @option{-fno-signaling-nans}.  Setting this option may allow faster
4503 code if one relies on ``non-stop'' IEEE arithmetic, for example.
4505 This option should never be turned on by any @option{-O} option since
4506 it can result in incorrect output for programs which depend on
4507 an exact implementation of IEEE or ISO rules/specifications for
4508 math functions.
4510 The default is @option{-ftrapping-math}.
4512 @item -frounding-math
4513 @opindex frounding-math
4514 Disable transformations and optimizations that assume default floating
4515 point rounding behavior.  This is round-to-zero for all floating point
4516 to integer conversions, and round-to-nearest for all other arithmetic
4517 truncations.  This option should be specified for programs that change
4518 the FP rounding mode dynamically, or that may be executed with a
4519 non-default rounding mode.  This option disables constant folding of
4520 floating point expressions at compile-time (which may be affected by
4521 rounding mode) and arithmetic transformations that are unsafe in the
4522 presence of sign-dependent rounding modes.
4524 The default is @option{-fno-rounding-math}.
4526 This option is experimental and does not currently guarantee to
4527 disable all GCC optimizations that are affected by rounding mode.
4528 Future versions of GCC may provide finer control of this setting
4529 using C99's @code{FENV_ACCESS} pragma.  This command line option
4530 will be used to specify the default state for @code{FENV_ACCESS}.
4532 @item -fsignaling-nans
4533 @opindex fsignaling-nans
4534 Compile code assuming that IEEE signaling NaNs may generate user-visible
4535 traps during floating-point operations.  Setting this option disables
4536 optimizations that may change the number of exceptions visible with
4537 signaling NaNs.  This option implies @option{-ftrapping-math}.
4539 This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
4540 be defined.
4542 The default is @option{-fno-signaling-nans}.
4544 This option is experimental and does not currently guarantee to
4545 disable all GCC optimizations that affect signaling NaN behavior.
4547 @item -fsingle-precision-constant
4548 @opindex fsingle-precision-constant
4549 Treat floating point constant as single precision constant instead of
4550 implicitly converting it to double precision constant.
4553 @end table
4555 The following options control optimizations that may improve
4556 performance, but are not enabled by any @option{-O} options.  This
4557 section includes experimental options that may produce broken code.
4559 @table @gcctabopt
4560 @item -fbranch-probabilities
4561 @opindex fbranch-probabilities
4562 After running a program compiled with @option{-fprofile-arcs}
4563 (@pxref{Debugging Options,, Options for Debugging Your Program or
4564 @command{gcc}}), you can compile it a second time using
4565 @option{-fbranch-probabilities}, to improve optimizations based on
4566 the number of times each branch was taken.  When the program
4567 compiled with @option{-fprofile-arcs} exits it saves arc execution
4568 counts to a file called @file{@var{sourcename}.gcda} for each source
4569 file  The information in this data file is very dependent on the
4570 structure of the generated code, so you must use the same source code
4571 and the same optimization options for both compilations.
4573 With @option{-fbranch-probabilities}, GCC puts a
4574 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
4575 These can be used to improve optimization.  Currently, they are only
4576 used in one place: in @file{reorg.c}, instead of guessing which path a
4577 branch is mostly to take, the @samp{REG_BR_PROB} values are used to
4578 exactly determine which path is taken more often.
4580 @item -fprofile-values
4581 @opindex fprofile-values
4582 If combined with @option{-fprofile-arcs}, it adds code so that some
4583 data about values of expressions in the program is gathered.
4585 With @option{-fbranch-probabilities}, it reads back the data gathered
4586 from profiling values of expressions and adds @samp{REG_VALUE_PROFILE}
4587 notes to instructions for their later usage in optimizations.
4589 Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
4591 @item -fvpt
4592 @opindex fvpt
4593 If combined with @option{-fprofile-arcs}, it instructs the compiler to add
4594 a code to gather information about values of expressions.
4596 With @option{-fbranch-probabilities}, it reads back the data gathered
4597 and actually performs the optimizations based on them.
4598 Currently the optimizations include specialization of division operation
4599 using the knowledge about the value of the denominator.
4601 Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
4603 @item -frename-registers
4604 @opindex frename-registers
4605 Attempt to avoid false dependencies in scheduled code by making use
4606 of registers left over after register allocation.  This optimization
4607 will most benefit processors with lots of registers.  Depending on the
4608 debug information format adopted by the target, however, it can
4609 make debugging impossible, since variables will no longer stay in
4610 a ``home register''.
4612 Not enabled by default at any level because it has known bugs.
4614 @item -fnew-ra
4615 @opindex fnew-ra
4616 Use a graph coloring register allocator.  Currently this option is meant
4617 for testing, so we are interested to hear about miscompilations with
4618 @option{-fnew-ra}.
4620 @item -ftracer
4621 @opindex ftracer
4622 Perform tail duplication to enlarge superblock size. This transformation
4623 simplifies the control flow of the function allowing other optimizations to do
4624 better job.
4626 Enabled with @option{-fprofile-use}.
4628 @item -funroll-loops
4629 @opindex funroll-loops
4630 Unroll loops whose number of iterations can be determined at compile time or
4631 upon entry to the loop.  @option{-funroll-loops} implies
4632 @option{-frerun-cse-after-loop}.  It also turns on complete loop peeling
4633 (i.e. complete removal of loops with small constant number of iterations).
4634 This option makes code larger, and may or may not make it run faster.
4636 Enabled with @option{-fprofile-use}.
4638 @item -funroll-all-loops
4639 @opindex funroll-all-loops
4640 Unroll all loops, even if their number of iterations is uncertain when
4641 the loop is entered.  This usually makes programs run more slowly.
4642 @option{-funroll-all-loops} implies the same options as
4643 @option{-funroll-loops}.
4645 @item -fpeel-loops
4646 @opindex fpeel-loops
4647 Peels the loops for that there is enough information that they do not
4648 roll much (from profile feedback).  It also turns on complete loop peeling
4649 (i.e. complete removal of loops with small constant number of iterations).
4651 Enabled with @option{-fprofile-use}.
4653 @item -funswitch-loops
4654 @opindex funswitch-loops
4655 Move branches with loop invariant conditions out of the loop, with duplicates
4656 of the loop on both branches (modified according to result of the condition).
4658 @item -fold-unroll-loops
4659 @opindex fold-unroll-loops
4660 Unroll loops whose number of iterations can be determined at compile
4661 time or upon entry to the loop, using the old loop unroller whose loop
4662 recognition is based on notes from frontend.  @option{-fold-unroll-loops} implies
4663 both @option{-fstrength-reduce} and @option{-frerun-cse-after-loop}.  This
4664 option makes code larger, and may or may not make it run faster.
4666 @item -fold-unroll-all-loops
4667 @opindex fold-unroll-all-loops
4668 Unroll all loops, even if their number of iterations is uncertain when
4669 the loop is entered. This is done using the old loop unroller whose loop
4670 recognition is based on notes from frontend.  This usually makes programs run more slowly.
4671 @option{-fold-unroll-all-loops} implies the same options as
4672 @option{-fold-unroll-loops}.
4674 @item -fprefetch-loop-arrays
4675 @opindex fprefetch-loop-arrays
4676 If supported by the target machine, generate instructions to prefetch
4677 memory to improve the performance of loops that access large arrays.
4679 Disabled at level @option{-Os}.
4681 @item -ffunction-sections
4682 @itemx -fdata-sections
4683 @opindex ffunction-sections
4684 @opindex fdata-sections
4685 Place each function or data item into its own section in the output
4686 file if the target supports arbitrary sections.  The name of the
4687 function or the name of the data item determines the section's name
4688 in the output file.
4690 Use these options on systems where the linker can perform optimizations
4691 to improve locality of reference in the instruction space.  Most systems
4692 using the ELF object format and SPARC processors running Solaris 2 have
4693 linkers with such optimizations.  AIX may have these optimizations in
4694 the future.
4696 Only use these options when there are significant benefits from doing
4697 so.  When you specify these options, the assembler and linker will
4698 create larger object and executable files and will also be slower.
4699 You will not be able to use @code{gprof} on all systems if you
4700 specify this option and you may have problems with debugging if
4701 you specify both this option and @option{-g}.
4703 @item -fbranch-target-load-optimize
4704 @opindex fbranch-target-load-optimize
4705 Perform branch target register load optimization before prologue / epilogue
4706 threading.
4707 The use of target registers can typically be exposed only during reload,
4708 thus hoisting loads out of loops and doing inter-block scheduling needs
4709 a separate optimization pass.
4711 @item -fbranch-target-load-optimize2
4712 @opindex fbranch-target-load-optimize2
4713 Perform branch target register load optimization after prologue / epilogue
4714 threading.
4716 @item -fbtr-bb-exclusive
4717 @opindex fbtr-bb-exclusive
4718 When performing branch target register load optimization, don't reuse
4719 branch target registers in within any basic block.
4721 @item --param @var{name}=@var{value}
4722 @opindex param
4723 In some places, GCC uses various constants to control the amount of
4724 optimization that is done.  For example, GCC will not inline functions
4725 that contain more that a certain number of instructions.  You can
4726 control some of these constants on the command-line using the
4727 @option{--param} option.
4729 The names of specific parameters, and the meaning of the values, are
4730 tied to the internals of the compiler, and are subject to change
4731 without notice in future releases.
4733 In each case, the @var{value} is an integer.  The allowable choices for
4734 @var{name} are given in the following table:
4736 @table @gcctabopt
4737 @item max-crossjump-edges
4738 The maximum number of incoming edges to consider for crossjumping.
4739 The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
4740 the number of edges incoming to each block.  Increasing values mean
4741 more aggressive optimization, making the compile time increase with
4742 probably small improvement in executable size.
4744 @item max-delay-slot-insn-search
4745 The maximum number of instructions to consider when looking for an
4746 instruction to fill a delay slot.  If more than this arbitrary number of
4747 instructions is searched, the time savings from filling the delay slot
4748 will be minimal so stop searching.  Increasing values mean more
4749 aggressive optimization, making the compile time increase with probably
4750 small improvement in executable run time.
4752 @item max-delay-slot-live-search
4753 When trying to fill delay slots, the maximum number of instructions to
4754 consider when searching for a block with valid live register
4755 information.  Increasing this arbitrarily chosen value means more
4756 aggressive optimization, increasing the compile time.  This parameter
4757 should be removed when the delay slot code is rewritten to maintain the
4758 control-flow graph.
4760 @item max-gcse-memory
4761 The approximate maximum amount of memory that will be allocated in
4762 order to perform the global common subexpression elimination
4763 optimization.  If more memory than specified is required, the
4764 optimization will not be done.
4766 @item max-gcse-passes
4767 The maximum number of passes of GCSE to run.  The default is 1.
4769 @item max-pending-list-length
4770 The maximum number of pending dependencies scheduling will allow
4771 before flushing the current state and starting over.  Large functions
4772 with few branches or calls can create excessively large lists which
4773 needlessly consume memory and resources.
4775 @item max-inline-insns-single
4776 Several parameters control the tree inliner used in gcc.
4777 This number sets the maximum number of instructions (counted in GCC's
4778 internal representation) in a single function that the tree inliner
4779 will consider for inlining.  This only affects functions declared
4780 inline and methods implemented in a class declaration (C++).
4781 The default value is 500.
4783 @item max-inline-insns-auto
4784 When you use @option{-finline-functions} (included in @option{-O3}),
4785 a lot of functions that would otherwise not be considered for inlining
4786 by the compiler will be investigated.  To those functions, a different
4787 (more restrictive) limit compared to functions declared inline can
4788 be applied.
4789 The default value is 120.
4791 @item large-function-insns
4792 The limit specifying really large functions.  For functions greater than this
4793 limit inlining is constrained by @option{--param large-function-growth}.
4794 This parameter is useful primarily to avoid extreme compilation time caused by non-linear
4795 algorithms used by the backend.
4796 This parameter is ignored when @option{-funit-at-a-time} is not used.
4797 The default value is 3000.
4799 @item large-function-growth
4800 Specifies maximal growth of large function caused by inlining in percents.
4801 This parameter is ignored when @option{-funit-at-a-time} is not used.
4802 The default value is 200.
4804 @item inline-unit-growth
4805 Specifies maximal overall growth of the compilation unit caused by inlining.
4806 This parameter is ignored when @option{-funit-at-a-time} is not used.
4807 The default value is 150.
4809 @item max-inline-insns-rtl
4810 For languages that use the RTL inliner (this happens at a later stage
4811 than tree inlining), you can set the maximum allowable size (counted
4812 in RTL instructions) for the RTL inliner with this parameter.
4813 The default value is 600.
4815 @item max-unrolled-insns
4816 The maximum number of instructions that a loop should have if that loop
4817 is unrolled, and if the loop is unrolled, it determines how many times
4818 the loop code is unrolled.
4820 @item max-average-unrolled-insns
4821 The maximum number of instructions biased by probabilities of their execution
4822 that a loop should have if that loop is unrolled, and if the loop is unrolled,
4823 it determines how many times the loop code is unrolled.
4825 @item max-unroll-times
4826 The maximum number of unrollings of a single loop.
4828 @item max-peeled-insns
4829 The maximum number of instructions that a loop should have if that loop
4830 is peeled, and if the loop is peeled, it determines how many times
4831 the loop code is peeled.
4833 @item max-peel-times
4834 The maximum number of peelings of a single loop.
4836 @item max-completely-peeled-insns
4837 The maximum number of insns of a completely peeled loop.
4839 @item max-completely-peel-times
4840 The maximum number of iterations of a loop to be suitable for complete peeling.
4842 @item max-unswitch-insns
4843 The maximum number of insns of an unswitched loop.
4845 @item max-unswitch-level
4846 The maximum number of branches unswitched in a single loop.
4848 @item hot-bb-count-fraction
4849 Select fraction of the maximal count of repetitions of basic block in program
4850 given basic block needs to have to be considered hot.
4852 @item hot-bb-frequency-fraction
4853 Select fraction of the maximal frequency of executions of basic block in
4854 function given basic block needs to have to be considered hot
4856 @item tracer-dynamic-coverage
4857 @itemx tracer-dynamic-coverage-feedback
4859 This value is used to limit superblock formation once the given percentage of
4860 executed instructions is covered.  This limits unnecessary code size
4861 expansion.
4863 The @option{tracer-dynamic-coverage-feedback} is used only when profile
4864 feedback is available.  The real profiles (as opposed to statically estimated
4865 ones) are much less balanced allowing the threshold to be larger value.
4867 @item tracer-max-code-growth
4868 Stop tail duplication once code growth has reached given percentage.  This is
4869 rather hokey argument, as most of the duplicates will be eliminated later in
4870 cross jumping, so it may be set to much higher values than is the desired code
4871 growth.
4873 @item tracer-min-branch-ratio
4875 Stop reverse growth when the reverse probability of best edge is less than this
4876 threshold (in percent).
4878 @item tracer-min-branch-ratio
4879 @itemx tracer-min-branch-ratio-feedback
4881 Stop forward growth if the best edge do have probability lower than this
4882 threshold.
4884 Similarly to @option{tracer-dynamic-coverage} two values are present, one for
4885 compilation for profile feedback and one for compilation without.  The value
4886 for compilation with profile feedback needs to be more conservative (higher) in
4887 order to make tracer effective.
4889 @item max-cse-path-length
4891 Maximum number of basic blocks on path that cse considers.  The default is 10.
4893 @item ggc-min-expand
4895 GCC uses a garbage collector to manage its own memory allocation.  This
4896 parameter specifies the minimum percentage by which the garbage
4897 collector's heap should be allowed to expand between collections.
4898 Tuning this may improve compilation speed; it has no effect on code
4899 generation.
4901 The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
4902 RAM >= 1GB.  If @code{getrlimit} is available, the notion of "RAM" is
4903 the smallest of actual RAM, RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS.  If
4904 GCC is not able to calculate RAM on a particular platform, the lower
4905 bound of 30% is used.  Setting this parameter and
4906 @option{ggc-min-heapsize} to zero causes a full collection to occur at
4907 every opportunity.  This is extremely slow, but can be useful for
4908 debugging.
4910 @item ggc-min-heapsize
4912 Minimum size of the garbage collector's heap before it begins bothering
4913 to collect garbage.  The first collection occurs after the heap expands
4914 by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
4915 tuning this may improve compilation speed, and has no effect on code
4916 generation.
4918 The default is RAM/8, with a lower bound of 4096 (four megabytes) and an
4919 upper bound of 131072 (128 megabytes).  If @code{getrlimit} is
4920 available, the notion of "RAM" is the smallest of actual RAM,
4921 RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS.  If GCC is not able to calculate
4922 RAM on a particular platform, the lower bound is used.  Setting this
4923 parameter very large effectively disables garbage collection.  Setting
4924 this parameter and @option{ggc-min-expand} to zero causes a full
4925 collection to occur at every opportunity.
4927 @item max-reload-search-insns
4928 The maximum number of instruction reload should look backward for equivalent
4929 register.  Increasing values mean more aggressive optimization, making the
4930 compile time increase with probably slightly better performance.  The default
4931 value is 100.
4933 @item max-cselib-memory-location
4934 The maximum number of memory locations cselib should take into acount.
4935 Increasing values mean more aggressive optimization, making the compile time
4936 increase with probably slightly better performance.  The default value is 500.
4938 @item reorder-blocks-duplicate
4939 @itemx reorder-blocks-duplicate-feedback
4941 Used by basic block reordering pass to decide whether to use unconditional
4942 branch or duplicate the code on its destination.  Code is duplicated when its
4943 estimated size is smaller than this value multiplied by the estimated size of
4944 unconditional jump in the hot spots of the program.
4946 The @option{reorder-block-duplicate-feedback} is used only when profile
4947 feedback is available and may be set to higher values than
4948 @option{reorder-block-duplicate} since information about the hot spots is more
4949 accurate.
4951 @item max-sched-region-blocks
4952 The maximum number of blocks in a region to be considered for
4953 interblock scheduling.  The default value is 10.
4955 @item max-sched-region-insns
4956 The maximum number of insns in a region to be considered for
4957 interblock scheduling.  The default value is 100.
4958 @end table
4959 @end table
4961 @node Preprocessor Options
4962 @section Options Controlling the Preprocessor
4963 @cindex preprocessor options
4964 @cindex options, preprocessor
4966 These options control the C preprocessor, which is run on each C source
4967 file before actual compilation.
4969 If you use the @option{-E} option, nothing is done except preprocessing.
4970 Some of these options make sense only together with @option{-E} because
4971 they cause the preprocessor output to be unsuitable for actual
4972 compilation.
4974 @table @gcctabopt
4975 @opindex Wp
4976 You can use @option{-Wp,@var{option}} to bypass the compiler driver
4977 and pass @var{option} directly through to the preprocessor.  If
4978 @var{option} contains commas, it is split into multiple options at the
4979 commas.  However, many options are modified, translated or interpreted
4980 by the compiler driver before being passed to the preprocessor, and
4981 @option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
4982 interface is undocumented and subject to change, so whenever possible
4983 you should avoid using @option{-Wp} and let the driver handle the
4984 options instead.
4986 @item -Xpreprocessor @var{option}
4987 @opindex preprocessor
4988 Pass @var{option} as an option to the preprocessor.  You can use this to
4989 supply system-specific preprocessor options which GCC does not know how to
4990 recognize.
4992 If you want to pass an option that takes an argument, you must use
4993 @option{-Xpreprocessor} twice, once for the option and once for the argument.
4994 @end table
4996 @include cppopts.texi
4998 @node Assembler Options
4999 @section Passing Options to the Assembler
5001 @c prevent bad page break with this line
5002 You can pass options to the assembler.
5004 @table @gcctabopt
5005 @item -Wa,@var{option}
5006 @opindex Wa
5007 Pass @var{option} as an option to the assembler.  If @var{option}
5008 contains commas, it is split into multiple options at the commas.
5010 @item -Xassembler @var{option}
5011 @opindex Xassembler
5012 Pass @var{option} as an option to the assembler.  You can use this to
5013 supply system-specific assembler options which GCC does not know how to
5014 recognize.
5016 If you want to pass an option that takes an argument, you must use
5017 @option{-Xassembler} twice, once for the option and once for the argument.
5019 @end table
5021 @node Link Options
5022 @section Options for Linking
5023 @cindex link options
5024 @cindex options, linking
5026 These options come into play when the compiler links object files into
5027 an executable output file.  They are meaningless if the compiler is
5028 not doing a link step.
5030 @table @gcctabopt
5031 @cindex file names
5032 @item @var{object-file-name}
5033 A file name that does not end in a special recognized suffix is
5034 considered to name an object file or library.  (Object files are
5035 distinguished from libraries by the linker according to the file
5036 contents.)  If linking is done, these object files are used as input
5037 to the linker.
5039 @item -c
5040 @itemx -S
5041 @itemx -E
5042 @opindex c
5043 @opindex S
5044 @opindex E
5045 If any of these options is used, then the linker is not run, and
5046 object file names should not be used as arguments.  @xref{Overall
5047 Options}.
5049 @cindex Libraries
5050 @item -l@var{library}
5051 @itemx -l @var{library}
5052 @opindex l
5053 Search the library named @var{library} when linking.  (The second
5054 alternative with the library as a separate argument is only for
5055 POSIX compliance and is not recommended.)
5057 It makes a difference where in the command you write this option; the
5058 linker searches and processes libraries and object files in the order they
5059 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
5060 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
5061 to functions in @samp{z}, those functions may not be loaded.
5063 The linker searches a standard list of directories for the library,
5064 which is actually a file named @file{lib@var{library}.a}.  The linker
5065 then uses this file as if it had been specified precisely by name.
5067 The directories searched include several standard system directories
5068 plus any that you specify with @option{-L}.
5070 Normally the files found this way are library files---archive files
5071 whose members are object files.  The linker handles an archive file by
5072 scanning through it for members which define symbols that have so far
5073 been referenced but not defined.  But if the file that is found is an
5074 ordinary object file, it is linked in the usual fashion.  The only
5075 difference between using an @option{-l} option and specifying a file name
5076 is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
5077 and searches several directories.
5079 @item -lobjc
5080 @opindex lobjc
5081 You need this special case of the @option{-l} option in order to
5082 link an Objective-C program.
5084 @item -nostartfiles
5085 @opindex nostartfiles
5086 Do not use the standard system startup files when linking.
5087 The standard system libraries are used normally, unless @option{-nostdlib}
5088 or @option{-nodefaultlibs} is used.
5090 @item -nodefaultlibs
5091 @opindex nodefaultlibs
5092 Do not use the standard system libraries when linking.
5093 Only the libraries you specify will be passed to the linker.
5094 The standard startup files are used normally, unless @option{-nostartfiles}
5095 is used.  The compiler may generate calls to memcmp, memset, and memcpy
5096 for System V (and ISO C) environments or to bcopy and bzero for
5097 BSD environments.  These entries are usually resolved by entries in
5098 libc.  These entry points should be supplied through some other
5099 mechanism when this option is specified.
5101 @item -nostdlib
5102 @opindex nostdlib
5103 Do not use the standard system startup files or libraries when linking.
5104 No startup files and only the libraries you specify will be passed to
5105 the linker.  The compiler may generate calls to memcmp, memset, and memcpy
5106 for System V (and ISO C) environments or to bcopy and bzero for
5107 BSD environments.  These entries are usually resolved by entries in
5108 libc.  These entry points should be supplied through some other
5109 mechanism when this option is specified.
5111 @cindex @option{-lgcc}, use with @option{-nostdlib}
5112 @cindex @option{-nostdlib} and unresolved references
5113 @cindex unresolved references and @option{-nostdlib}
5114 @cindex @option{-lgcc}, use with @option{-nodefaultlibs}
5115 @cindex @option{-nodefaultlibs} and unresolved references
5116 @cindex unresolved references and @option{-nodefaultlibs}
5117 One of the standard libraries bypassed by @option{-nostdlib} and
5118 @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
5119 that GCC uses to overcome shortcomings of particular machines, or special
5120 needs for some languages.
5121 (@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
5122 Collection (GCC) Internals},
5123 for more discussion of @file{libgcc.a}.)
5124 In most cases, you need @file{libgcc.a} even when you want to avoid
5125 other standard libraries.  In other words, when you specify @option{-nostdlib}
5126 or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
5127 This ensures that you have no unresolved references to internal GCC
5128 library subroutines.  (For example, @samp{__main}, used to ensure C++
5129 constructors will be called; @pxref{Collect2,,@code{collect2}, gccint,
5130 GNU Compiler Collection (GCC) Internals}.)
5132 @item -pie
5133 @opindex pie
5134 Produce a position independent executable on targets which support it.
5135 For predictable results, you must also specify the same set of options
5136 that were used to generate code (@option{-fpie}, @option{-fPIE},
5137 or model suboptions) when you specify this option.
5139 @item -s
5140 @opindex s
5141 Remove all symbol table and relocation information from the executable.
5143 @item -static
5144 @opindex static
5145 On systems that support dynamic linking, this prevents linking with the shared
5146 libraries.  On other systems, this option has no effect.
5148 @item -shared
5149 @opindex shared
5150 Produce a shared object which can then be linked with other objects to
5151 form an executable.  Not all systems support this option.  For predictable
5152 results, you must also specify the same set of options that were used to
5153 generate code (@option{-fpic}, @option{-fPIC}, or model suboptions)
5154 when you specify this option.@footnote{On some systems, @samp{gcc -shared}
5155 needs to build supplementary stub code for constructors to work.  On
5156 multi-libbed systems, @samp{gcc -shared} must select the correct support
5157 libraries to link against.  Failing to supply the correct flags may lead
5158 to subtle defects.  Supplying them in cases where they are not necessary
5159 is innocuous.}
5161 @item -shared-libgcc
5162 @itemx -static-libgcc
5163 @opindex shared-libgcc
5164 @opindex static-libgcc
5165 On systems that provide @file{libgcc} as a shared library, these options
5166 force the use of either the shared or static version respectively.
5167 If no shared version of @file{libgcc} was built when the compiler was
5168 configured, these options have no effect.
5170 There are several situations in which an application should use the
5171 shared @file{libgcc} instead of the static version.  The most common
5172 of these is when the application wishes to throw and catch exceptions
5173 across different shared libraries.  In that case, each of the libraries
5174 as well as the application itself should use the shared @file{libgcc}.
5176 Therefore, the G++ and GCJ drivers automatically add
5177 @option{-shared-libgcc} whenever you build a shared library or a main
5178 executable, because C++ and Java programs typically use exceptions, so
5179 this is the right thing to do.
5181 If, instead, you use the GCC driver to create shared libraries, you may
5182 find that they will not always be linked with the shared @file{libgcc}.
5183 If GCC finds, at its configuration time, that you have a GNU linker that
5184 does not support option @option{--eh-frame-hdr}, it will link the shared
5185 version of @file{libgcc} into shared libraries by default.  Otherwise,
5186 it will take advantage of the linker and optimize away the linking with
5187 the shared version of @file{libgcc}, linking with the static version of
5188 libgcc by default.  This allows exceptions to propagate through such
5189 shared libraries, without incurring relocation costs at library load
5190 time.
5192 However, if a library or main executable is supposed to throw or catch
5193 exceptions, you must link it using the G++ or GCJ driver, as appropriate
5194 for the languages used in the program, or using the option
5195 @option{-shared-libgcc}, such that it is linked with the shared
5196 @file{libgcc}.
5198 @item -symbolic
5199 @opindex symbolic
5200 Bind references to global symbols when building a shared object.  Warn
5201 about any unresolved references (unless overridden by the link editor
5202 option @samp{-Xlinker -z -Xlinker defs}).  Only a few systems support
5203 this option.
5205 @item -Xlinker @var{option}
5206 @opindex Xlinker
5207 Pass @var{option} as an option to the linker.  You can use this to
5208 supply system-specific linker options which GCC does not know how to
5209 recognize.
5211 If you want to pass an option that takes an argument, you must use
5212 @option{-Xlinker} twice, once for the option and once for the argument.
5213 For example, to pass @option{-assert definitions}, you must write
5214 @samp{-Xlinker -assert -Xlinker definitions}.  It does not work to write
5215 @option{-Xlinker "-assert definitions"}, because this passes the entire
5216 string as a single argument, which is not what the linker expects.
5218 @item -Wl,@var{option}
5219 @opindex Wl
5220 Pass @var{option} as an option to the linker.  If @var{option} contains
5221 commas, it is split into multiple options at the commas.
5223 @item -u @var{symbol}
5224 @opindex u
5225 Pretend the symbol @var{symbol} is undefined, to force linking of
5226 library modules to define it.  You can use @option{-u} multiple times with
5227 different symbols to force loading of additional library modules.
5228 @end table
5230 @node Directory Options
5231 @section Options for Directory Search
5232 @cindex directory options
5233 @cindex options, directory search
5234 @cindex search path
5236 These options specify directories to search for header files, for
5237 libraries and for parts of the compiler:
5239 @table @gcctabopt
5240 @item -I@var{dir}
5241 @opindex I
5242 Add the directory @var{dir} to the head of the list of directories to be
5243 searched for header files.  This can be used to override a system header
5244 file, substituting your own version, since these directories are
5245 searched before the system header file directories.  However, you should
5246 not use this option to add directories that contain vendor-supplied
5247 system header files (use @option{-isystem} for that).  If you use more than
5248 one @option{-I} option, the directories are scanned in left-to-right
5249 order; the standard system directories come after.
5251 If a standard system include directory, or a directory specified with
5252 @option{-isystem}, is also specified with @option{-I}, the @option{-I}
5253 option will be ignored.  The directory will still be searched but as a
5254 system directory at its normal position in the system include chain.
5255 This is to ensure that GCC's procedure to fix buggy system headers and
5256 the ordering for the include_next directive are not inadvertently changed.
5257 If you really need to change the search order for system directories,
5258 use the @option{-nostdinc} and/or @option{-isystem} options.
5260 @item -I-
5261 @opindex I-
5262 Any directories you specify with @option{-I} options before the @option{-I-}
5263 option are searched only for the case of @samp{#include "@var{file}"};
5264 they are not searched for @samp{#include <@var{file}>}.
5266 If additional directories are specified with @option{-I} options after
5267 the @option{-I-}, these directories are searched for all @samp{#include}
5268 directives.  (Ordinarily @emph{all} @option{-I} directories are used
5269 this way.)
5271 In addition, the @option{-I-} option inhibits the use of the current
5272 directory (where the current input file came from) as the first search
5273 directory for @samp{#include "@var{file}"}.  There is no way to
5274 override this effect of @option{-I-}.  With @option{-I.} you can specify
5275 searching the directory which was current when the compiler was
5276 invoked.  That is not exactly the same as what the preprocessor does
5277 by default, but it is often satisfactory.
5279 @option{-I-} does not inhibit the use of the standard system directories
5280 for header files.  Thus, @option{-I-} and @option{-nostdinc} are
5281 independent.
5283 @item -L@var{dir}
5284 @opindex L
5285 Add directory @var{dir} to the list of directories to be searched
5286 for @option{-l}.
5288 @item -B@var{prefix}
5289 @opindex B
5290 This option specifies where to find the executables, libraries,
5291 include files, and data files of the compiler itself.
5293 The compiler driver program runs one or more of the subprograms
5294 @file{cpp}, @file{cc1}, @file{as} and @file{ld}.  It tries
5295 @var{prefix} as a prefix for each program it tries to run, both with and
5296 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
5298 For each subprogram to be run, the compiler driver first tries the
5299 @option{-B} prefix, if any.  If that name is not found, or if @option{-B}
5300 was not specified, the driver tries two standard prefixes, which are
5301 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
5302 those results in a file name that is found, the unmodified program
5303 name is searched for using the directories specified in your
5304 @env{PATH} environment variable.
5306 The compiler will check to see if the path provided by the @option{-B}
5307 refers to a directory, and if necessary it will add a directory
5308 separator character at the end of the path.
5310 @option{-B} prefixes that effectively specify directory names also apply
5311 to libraries in the linker, because the compiler translates these
5312 options into @option{-L} options for the linker.  They also apply to
5313 includes files in the preprocessor, because the compiler translates these
5314 options into @option{-isystem} options for the preprocessor.  In this case,
5315 the compiler appends @samp{include} to the prefix.
5317 The run-time support file @file{libgcc.a} can also be searched for using
5318 the @option{-B} prefix, if needed.  If it is not found there, the two
5319 standard prefixes above are tried, and that is all.  The file is left
5320 out of the link if it is not found by those means.
5322 Another way to specify a prefix much like the @option{-B} prefix is to use
5323 the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
5324 Variables}.
5326 As a special kludge, if the path provided by @option{-B} is
5327 @file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
5328 9, then it will be replaced by @file{[dir/]include}.  This is to help
5329 with boot-strapping the compiler.
5331 @item -specs=@var{file}
5332 @opindex specs
5333 Process @var{file} after the compiler reads in the standard @file{specs}
5334 file, in order to override the defaults that the @file{gcc} driver
5335 program uses when determining what switches to pass to @file{cc1},
5336 @file{cc1plus}, @file{as}, @file{ld}, etc.  More than one
5337 @option{-specs=@var{file}} can be specified on the command line, and they
5338 are processed in order, from left to right.
5339 @end table
5341 @c man end
5343 @node Spec Files
5344 @section Specifying subprocesses and the switches to pass to them
5345 @cindex Spec Files
5347 @command{gcc} is a driver program.  It performs its job by invoking a
5348 sequence of other programs to do the work of compiling, assembling and
5349 linking.  GCC interprets its command-line parameters and uses these to
5350 deduce which programs it should invoke, and which command-line options
5351 it ought to place on their command lines.  This behavior is controlled
5352 by @dfn{spec strings}.  In most cases there is one spec string for each
5353 program that GCC can invoke, but a few programs have multiple spec
5354 strings to control their behavior.  The spec strings built into GCC can
5355 be overridden by using the @option{-specs=} command-line switch to specify
5356 a spec file.
5358 @dfn{Spec files} are plaintext files that are used to construct spec
5359 strings.  They consist of a sequence of directives separated by blank
5360 lines.  The type of directive is determined by the first non-whitespace
5361 character on the line and it can be one of the following:
5363 @table @code
5364 @item %@var{command}
5365 Issues a @var{command} to the spec file processor.  The commands that can
5366 appear here are:
5368 @table @code
5369 @item %include <@var{file}>
5370 @cindex %include
5371 Search for @var{file} and insert its text at the current point in the
5372 specs file.
5374 @item %include_noerr <@var{file}>
5375 @cindex %include_noerr
5376 Just like @samp{%include}, but do not generate an error message if the include
5377 file cannot be found.
5379 @item %rename @var{old_name} @var{new_name}
5380 @cindex %rename
5381 Rename the spec string @var{old_name} to @var{new_name}.
5383 @end table
5385 @item *[@var{spec_name}]:
5386 This tells the compiler to create, override or delete the named spec
5387 string.  All lines after this directive up to the next directive or
5388 blank line are considered to be the text for the spec string.  If this
5389 results in an empty string then the spec will be deleted.  (Or, if the
5390 spec did not exist, then nothing will happened.)  Otherwise, if the spec
5391 does not currently exist a new spec will be created.  If the spec does
5392 exist then its contents will be overridden by the text of this
5393 directive, unless the first character of that text is the @samp{+}
5394 character, in which case the text will be appended to the spec.
5396 @item [@var{suffix}]:
5397 Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
5398 and up to the next directive or blank line are considered to make up the
5399 spec string for the indicated suffix.  When the compiler encounters an
5400 input file with the named suffix, it will processes the spec string in
5401 order to work out how to compile that file.  For example:
5403 @smallexample
5404 .ZZ:
5405 z-compile -input %i
5406 @end smallexample
5408 This says that any input file whose name ends in @samp{.ZZ} should be
5409 passed to the program @samp{z-compile}, which should be invoked with the
5410 command-line switch @option{-input} and with the result of performing the
5411 @samp{%i} substitution.  (See below.)
5413 As an alternative to providing a spec string, the text that follows a
5414 suffix directive can be one of the following:
5416 @table @code
5417 @item @@@var{language}
5418 This says that the suffix is an alias for a known @var{language}.  This is
5419 similar to using the @option{-x} command-line switch to GCC to specify a
5420 language explicitly.  For example:
5422 @smallexample
5423 .ZZ:
5424 @@c++
5425 @end smallexample
5427 Says that .ZZ files are, in fact, C++ source files.
5429 @item #@var{name}
5430 This causes an error messages saying:
5432 @smallexample
5433 @var{name} compiler not installed on this system.
5434 @end smallexample
5435 @end table
5437 GCC already has an extensive list of suffixes built into it.
5438 This directive will add an entry to the end of the list of suffixes, but
5439 since the list is searched from the end backwards, it is effectively
5440 possible to override earlier entries using this technique.
5442 @end table
5444 GCC has the following spec strings built into it.  Spec files can
5445 override these strings or create their own.  Note that individual
5446 targets can also add their own spec strings to this list.
5448 @smallexample
5449 asm          Options to pass to the assembler
5450 asm_final    Options to pass to the assembler post-processor
5451 cpp          Options to pass to the C preprocessor
5452 cc1          Options to pass to the C compiler
5453 cc1plus      Options to pass to the C++ compiler
5454 endfile      Object files to include at the end of the link
5455 link         Options to pass to the linker
5456 lib          Libraries to include on the command line to the linker
5457 libgcc       Decides which GCC support library to pass to the linker
5458 linker       Sets the name of the linker
5459 predefines   Defines to be passed to the C preprocessor
5460 signed_char  Defines to pass to CPP to say whether @code{char} is signed
5461              by default
5462 startfile    Object files to include at the start of the link
5463 @end smallexample
5465 Here is a small example of a spec file:
5467 @smallexample
5468 %rename lib                 old_lib
5470 *lib:
5471 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
5472 @end smallexample
5474 This example renames the spec called @samp{lib} to @samp{old_lib} and
5475 then overrides the previous definition of @samp{lib} with a new one.
5476 The new definition adds in some extra command-line options before
5477 including the text of the old definition.
5479 @dfn{Spec strings} are a list of command-line options to be passed to their
5480 corresponding program.  In addition, the spec strings can contain
5481 @samp{%}-prefixed sequences to substitute variable text or to
5482 conditionally insert text into the command line.  Using these constructs
5483 it is possible to generate quite complex command lines.
5485 Here is a table of all defined @samp{%}-sequences for spec
5486 strings.  Note that spaces are not generated automatically around the
5487 results of expanding these sequences.  Therefore you can concatenate them
5488 together or combine them with constant text in a single argument.
5490 @table @code
5491 @item %%
5492 Substitute one @samp{%} into the program name or argument.
5494 @item %i
5495 Substitute the name of the input file being processed.
5497 @item %b
5498 Substitute the basename of the input file being processed.
5499 This is the substring up to (and not including) the last period
5500 and not including the directory.
5502 @item %B
5503 This is the same as @samp{%b}, but include the file suffix (text after
5504 the last period).
5506 @item %d
5507 Marks the argument containing or following the @samp{%d} as a
5508 temporary file name, so that that file will be deleted if GCC exits
5509 successfully.  Unlike @samp{%g}, this contributes no text to the
5510 argument.
5512 @item %g@var{suffix}
5513 Substitute a file name that has suffix @var{suffix} and is chosen
5514 once per compilation, and mark the argument in the same way as
5515 @samp{%d}.  To reduce exposure to denial-of-service attacks, the file
5516 name is now chosen in a way that is hard to predict even when previously
5517 chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
5518 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
5519 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
5520 treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
5521 was simply substituted with a file name chosen once per compilation,
5522 without regard to any appended suffix (which was therefore treated
5523 just like ordinary text), making such attacks more likely to succeed.
5525 @item %u@var{suffix}
5526 Like @samp{%g}, but generates a new temporary file name even if
5527 @samp{%u@var{suffix}} was already seen.
5529 @item %U@var{suffix}
5530 Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
5531 new one if there is no such last file name.  In the absence of any
5532 @samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
5533 the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
5534 would involve the generation of two distinct file names, one
5535 for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
5536 simply substituted with a file name chosen for the previous @samp{%u},
5537 without regard to any appended suffix.
5539 @item %j@var{suffix}
5540 Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
5541 writable, and if save-temps is off; otherwise, substitute the name
5542 of a temporary file, just like @samp{%u}.  This temporary file is not
5543 meant for communication between processes, but rather as a junk
5544 disposal mechanism.
5546 @item %|@var{suffix}
5547 @itemx %m@var{suffix}
5548 Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
5549 @samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
5550 all.  These are the two most common ways to instruct a program that it
5551 should read from standard input or write to standard output.  If you
5552 need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
5553 construct: see for example @file{f/lang-specs.h}.
5555 @item %.@var{SUFFIX}
5556 Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
5557 when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
5558 terminated by the next space or %.
5560 @item %w
5561 Marks the argument containing or following the @samp{%w} as the
5562 designated output file of this compilation.  This puts the argument
5563 into the sequence of arguments that @samp{%o} will substitute later.
5565 @item %o
5566 Substitutes the names of all the output files, with spaces
5567 automatically placed around them.  You should write spaces
5568 around the @samp{%o} as well or the results are undefined.
5569 @samp{%o} is for use in the specs for running the linker.
5570 Input files whose names have no recognized suffix are not compiled
5571 at all, but they are included among the output files, so they will
5572 be linked.
5574 @item %O
5575 Substitutes the suffix for object files.  Note that this is
5576 handled specially when it immediately follows @samp{%g, %u, or %U},
5577 because of the need for those to form complete file names.  The
5578 handling is such that @samp{%O} is treated exactly as if it had already
5579 been substituted, except that @samp{%g, %u, and %U} do not currently
5580 support additional @var{suffix} characters following @samp{%O} as they would
5581 following, for example, @samp{.o}.
5583 @item %p
5584 Substitutes the standard macro predefinitions for the
5585 current target machine.  Use this when running @code{cpp}.
5587 @item %P
5588 Like @samp{%p}, but puts @samp{__} before and after the name of each
5589 predefined macro, except for macros that start with @samp{__} or with
5590 @samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
5593 @item %I
5594 Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
5595 @option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}), and
5596 @option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
5597 as necessary.
5599 @item %s
5600 Current argument is the name of a library or startup file of some sort.
5601 Search for that file in a standard list of directories and substitute
5602 the full name found.
5604 @item %e@var{str}
5605 Print @var{str} as an error message.  @var{str} is terminated by a newline.
5606 Use this when inconsistent options are detected.
5608 @item %(@var{name})
5609 Substitute the contents of spec string @var{name} at this point.
5611 @item %[@var{name}]
5612 Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments.
5614 @item %x@{@var{option}@}
5615 Accumulate an option for @samp{%X}.
5617 @item %X
5618 Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
5619 spec string.
5621 @item %Y
5622 Output the accumulated assembler options specified by @option{-Wa}.
5624 @item %Z
5625 Output the accumulated preprocessor options specified by @option{-Wp}.
5627 @item %a
5628 Process the @code{asm} spec.  This is used to compute the
5629 switches to be passed to the assembler.
5631 @item %A
5632 Process the @code{asm_final} spec.  This is a spec string for
5633 passing switches to an assembler post-processor, if such a program is
5634 needed.
5636 @item %l
5637 Process the @code{link} spec.  This is the spec for computing the
5638 command line passed to the linker.  Typically it will make use of the
5639 @samp{%L %G %S %D and %E} sequences.
5641 @item %D
5642 Dump out a @option{-L} option for each directory that GCC believes might
5643 contain startup files.  If the target supports multilibs then the
5644 current multilib directory will be prepended to each of these paths.
5646 @item %M
5647 Output the multilib directory with directory separators replaced with
5648 @samp{_}.  If multilib directories are not set, or the multilib directory is
5649 @file{.} then this option emits nothing.
5651 @item %L
5652 Process the @code{lib} spec.  This is a spec string for deciding which
5653 libraries should be included on the command line to the linker.
5655 @item %G
5656 Process the @code{libgcc} spec.  This is a spec string for deciding
5657 which GCC support library should be included on the command line to the linker.
5659 @item %S
5660 Process the @code{startfile} spec.  This is a spec for deciding which
5661 object files should be the first ones passed to the linker.  Typically
5662 this might be a file named @file{crt0.o}.
5664 @item %E
5665 Process the @code{endfile} spec.  This is a spec string that specifies
5666 the last object files that will be passed to the linker.
5668 @item %C
5669 Process the @code{cpp} spec.  This is used to construct the arguments
5670 to be passed to the C preprocessor.
5672 @item %c
5673 Process the @code{signed_char} spec.  This is intended to be used
5674 to tell cpp whether a char is signed.  It typically has the definition:
5675 @smallexample
5676 %@{funsigned-char:-D__CHAR_UNSIGNED__@}
5677 @end smallexample
5679 @item %1
5680 Process the @code{cc1} spec.  This is used to construct the options to be
5681 passed to the actual C compiler (@samp{cc1}).
5683 @item %2
5684 Process the @code{cc1plus} spec.  This is used to construct the options to be
5685 passed to the actual C++ compiler (@samp{cc1plus}).
5687 @item %*
5688 Substitute the variable part of a matched option.  See below.
5689 Note that each comma in the substituted string is replaced by
5690 a single space.
5692 @item %<@code{S}
5693 Remove all occurrences of @code{-S} from the command line.  Note---this
5694 command is position dependent.  @samp{%} commands in the spec string
5695 before this one will see @code{-S}, @samp{%} commands in the spec string
5696 after this one will not.
5698 @item %:@var{function}(@var{args})
5699 Call the named function @var{function}, passing it @var{args}.
5700 @var{args} is first processed as a nested spec string, then split
5701 into an argument vector in the usual fashion.  The function returns
5702 a string which is processed as if it had appeared literally as part
5703 of the current spec.
5705 The following built-in spec functions are provided:
5707 @table @code
5708 @item @code{if-exists}
5709 The @code{if-exists} spec function takes one argument, an absolute
5710 pathname to a file.  If the file exists, @code{if-exists} returns the
5711 pathname.  Here is a small example of its usage:
5713 @smallexample
5714 *startfile:
5715 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
5716 @end smallexample
5718 @item @code{if-exists-else}
5719 The @code{if-exists-else} spec function is similar to the @code{if-exists}
5720 spec function, except that it takes two arguments.  The first argument is
5721 an absolute pathname to a file.  If the file exists, @code{if-exists-else}
5722 returns the pathname.  If it does not exist, it returns the second argument.
5723 This way, @code{if-exists-else} can be used to select one file or another,
5724 based on the existence of the first.  Here is a small example of its usage:
5726 @smallexample
5727 *startfile:
5728 crt0%O%s %:if-exists(crti%O%s) \
5729 %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
5730 @end smallexample
5731 @end table
5733 @item %@{@code{S}@}
5734 Substitutes the @code{-S} switch, if that switch was given to GCC@.
5735 If that switch was not specified, this substitutes nothing.  Note that
5736 the leading dash is omitted when specifying this option, and it is
5737 automatically inserted if the substitution is performed.  Thus the spec
5738 string @samp{%@{foo@}} would match the command-line option @option{-foo}
5739 and would output the command line option @option{-foo}.
5741 @item %W@{@code{S}@}
5742 Like %@{@code{S}@} but mark last argument supplied within as a file to be
5743 deleted on failure.
5745 @item %@{@code{S}*@}
5746 Substitutes all the switches specified to GCC whose names start
5747 with @code{-S}, but which also take an argument.  This is used for
5748 switches like @option{-o}, @option{-D}, @option{-I}, etc.
5749 GCC considers @option{-o foo} as being
5750 one switch whose names starts with @samp{o}.  %@{o*@} would substitute this
5751 text, including the space.  Thus two arguments would be generated.
5753 @item %@{@code{S}*&@code{T}*@}
5754 Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
5755 (the order of @code{S} and @code{T} in the spec is not significant).
5756 There can be any number of ampersand-separated variables; for each the
5757 wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.
5759 @item %@{@code{S}:@code{X}@}
5760 Substitutes @code{X}, if the @samp{-S} switch was given to GCC@.
5762 @item %@{!@code{S}:@code{X}@}
5763 Substitutes @code{X}, if the @samp{-S} switch was @emph{not} given to GCC@.
5765 @item %@{@code{S}*:@code{X}@}
5766 Substitutes @code{X} if one or more switches whose names start with
5767 @code{-S} are specified to GCC@.  Normally @code{X} is substituted only
5768 once, no matter how many such switches appeared.  However, if @code{%*}
5769 appears somewhere in @code{X}, then @code{X} will be substituted once
5770 for each matching switch, with the @code{%*} replaced by the part of
5771 that switch that matched the @code{*}.
5773 @item %@{.@code{S}:@code{X}@}
5774 Substitutes @code{X}, if processing a file with suffix @code{S}.
5776 @item %@{!.@code{S}:@code{X}@}
5777 Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
5779 @item %@{@code{S}|@code{P}:@code{X}@}
5780 Substitutes @code{X} if either @code{-S} or @code{-P} was given to GCC@.
5781 This may be combined with @samp{!}, @samp{.}, and @code{*} sequences as well,
5782 although they have a stronger binding than the @samp{|}.  If @code{%*}
5783 appears in @code{X}, all of the alternatives must be starred, and only
5784 the first matching alternative is substituted.
5786 For example, a spec string like this:
5788 @smallexample
5789 %@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
5790 @end smallexample
5792 will output the following command-line options from the following input
5793 command-line options:
5795 @smallexample
5796 fred.c        -foo -baz
5797 jim.d         -bar -boggle
5798 -d fred.c     -foo -baz -boggle
5799 -d jim.d      -bar -baz -boggle
5800 @end smallexample
5802 @item %@{S:X; T:Y; :D@}
5804 If @code{S} was given to GCC, substitutes @code{X}; else if @code{T} was
5805 given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
5806 be as many clauses as you need.  This may be combined with @code{.},
5807 @code{!}, @code{|}, and @code{*} as needed.
5810 @end table
5812 The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
5813 construct may contain other nested @samp{%} constructs or spaces, or
5814 even newlines.  They are processed as usual, as described above.
5815 Trailing white space in @code{X} is ignored.  White space may also
5816 appear anywhere on the left side of the colon in these constructs,
5817 except between @code{.} or @code{*} and the corresponding word.
5819 The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
5820 handled specifically in these constructs.  If another value of
5821 @option{-O} or the negated form of a @option{-f}, @option{-m}, or
5822 @option{-W} switch is found later in the command line, the earlier
5823 switch value is ignored, except with @{@code{S}*@} where @code{S} is
5824 just one letter, which passes all matching options.
5826 The character @samp{|} at the beginning of the predicate text is used to
5827 indicate that a command should be piped to the following command, but
5828 only if @option{-pipe} is specified.
5830 It is built into GCC which switches take arguments and which do not.
5831 (You might think it would be useful to generalize this to allow each
5832 compiler's spec to say which switches take arguments.  But this cannot
5833 be done in a consistent fashion.  GCC cannot even decide which input
5834 files have been specified without knowing which switches take arguments,
5835 and it must know which input files to compile in order to tell which
5836 compilers to run).
5838 GCC also knows implicitly that arguments starting in @option{-l} are to be
5839 treated as compiler output files, and passed to the linker in their
5840 proper position among the other output files.
5842 @c man begin OPTIONS
5844 @node Target Options
5845 @section Specifying Target Machine and Compiler Version
5846 @cindex target options
5847 @cindex cross compiling
5848 @cindex specifying machine version
5849 @cindex specifying compiler version and target machine
5850 @cindex compiler version, specifying
5851 @cindex target machine, specifying
5853 The usual way to run GCC is to run the executable called @file{gcc}, or
5854 @file{<machine>-gcc} when cross-compiling, or
5855 @file{<machine>-gcc-<version>} to run a version other than the one that
5856 was installed last.  Sometimes this is inconvenient, so GCC provides
5857 options that will switch to another cross-compiler or version.
5859 @table @gcctabopt
5860 @item -b @var{machine}
5861 @opindex b
5862 The argument @var{machine} specifies the target machine for compilation.
5864 The value to use for @var{machine} is the same as was specified as the
5865 machine type when configuring GCC as a cross-compiler.  For
5866 example, if a cross-compiler was configured with @samp{configure
5867 i386v}, meaning to compile for an 80386 running System V, then you
5868 would specify @option{-b i386v} to run that cross compiler.
5870 @item -V @var{version}
5871 @opindex V
5872 The argument @var{version} specifies which version of GCC to run.
5873 This is useful when multiple versions are installed.  For example,
5874 @var{version} might be @samp{2.0}, meaning to run GCC version 2.0.
5875 @end table
5877 The @option{-V} and @option{-b} options work by running the
5878 @file{<machine>-gcc-<version>} executable, so there's no real reason to
5879 use them if you can just run that directly.
5881 @node Submodel Options
5882 @section Hardware Models and Configurations
5883 @cindex submodel options
5884 @cindex specifying hardware config
5885 @cindex hardware models and configurations, specifying
5886 @cindex machine dependent options
5888 Earlier we discussed the standard option @option{-b} which chooses among
5889 different installed compilers for completely different target
5890 machines, such as VAX vs.@: 68000 vs.@: 80386.
5892 In addition, each of these target machine types can have its own
5893 special options, starting with @samp{-m}, to choose among various
5894 hardware models or configurations---for example, 68010 vs 68020,
5895 floating coprocessor or none.  A single installed version of the
5896 compiler can compile for any model or configuration, according to the
5897 options specified.
5899 Some configurations of the compiler also support additional special
5900 options, usually for compatibility with other compilers on the same
5901 platform.
5903 These options are defined by the macro @code{TARGET_SWITCHES} in the
5904 machine description.  The default for the options is also defined by
5905 that macro, which enables you to change the defaults.
5907 @menu
5908 * M680x0 Options::
5909 * M68hc1x Options::
5910 * VAX Options::
5911 * SPARC Options::
5912 * ARM Options::
5913 * MN10300 Options::
5914 * M32R/D Options::
5915 * RS/6000 and PowerPC Options::
5916 * Darwin Options::
5917 * MIPS Options::
5918 * i386 and x86-64 Options::
5919 * HPPA Options::
5920 * DEC Alpha Options::
5921 * DEC Alpha/VMS Options::
5922 * H8/300 Options::
5923 * SH Options::
5924 * System V Options::
5925 * TMS320C3x/C4x Options::
5926 * V850 Options::
5927 * ARC Options::
5928 * NS32K Options::
5929 * AVR Options::
5930 * MCore Options::
5931 * IA-64 Options::
5932 * S/390 and zSeries Options::
5933 * CRIS Options::
5934 * MMIX Options::
5935 * PDP-11 Options::
5936 * Xstormy16 Options::
5937 * Xtensa Options::
5938 * FRV Options::
5939 @end menu
5941 @node M680x0 Options
5942 @subsection M680x0 Options
5943 @cindex M680x0 options
5945 These are the @samp{-m} options defined for the 68000 series.  The default
5946 values for these options depends on which style of 68000 was selected when
5947 the compiler was configured; the defaults for the most common choices are
5948 given below.
5950 @table @gcctabopt
5951 @item -m68000
5952 @itemx -mc68000
5953 @opindex m68000
5954 @opindex mc68000
5955 Generate output for a 68000.  This is the default
5956 when the compiler is configured for 68000-based systems.
5958 Use this option for microcontrollers with a 68000 or EC000 core,
5959 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
5961 @item -m68020
5962 @itemx -mc68020
5963 @opindex m68020
5964 @opindex mc68020
5965 Generate output for a 68020.  This is the default
5966 when the compiler is configured for 68020-based systems.
5968 @item -m68881
5969 @opindex m68881
5970 Generate output containing 68881 instructions for floating point.
5971 This is the default for most 68020 systems unless @option{--nfp} was
5972 specified when the compiler was configured.
5974 @item -m68030
5975 @opindex m68030
5976 Generate output for a 68030.  This is the default when the compiler is
5977 configured for 68030-based systems.
5979 @item -m68040
5980 @opindex m68040
5981 Generate output for a 68040.  This is the default when the compiler is
5982 configured for 68040-based systems.
5984 This option inhibits the use of 68881/68882 instructions that have to be
5985 emulated by software on the 68040.  Use this option if your 68040 does not
5986 have code to emulate those instructions.
5988 @item -m68060
5989 @opindex m68060
5990 Generate output for a 68060.  This is the default when the compiler is
5991 configured for 68060-based systems.
5993 This option inhibits the use of 68020 and 68881/68882 instructions that
5994 have to be emulated by software on the 68060.  Use this option if your 68060
5995 does not have code to emulate those instructions.
5997 @item -mcpu32
5998 @opindex mcpu32
5999 Generate output for a CPU32.  This is the default
6000 when the compiler is configured for CPU32-based systems.
6002 Use this option for microcontrollers with a
6003 CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
6004 68336, 68340, 68341, 68349 and 68360.
6006 @item -m5200
6007 @opindex m5200
6008 Generate output for a 520X ``coldfire'' family cpu.  This is the default
6009 when the compiler is configured for 520X-based systems.
6011 Use this option for microcontroller with a 5200 core, including
6012 the MCF5202, MCF5203, MCF5204 and MCF5202.
6015 @item -m68020-40
6016 @opindex m68020-40
6017 Generate output for a 68040, without using any of the new instructions.
6018 This results in code which can run relatively efficiently on either a
6019 68020/68881 or a 68030 or a 68040.  The generated code does use the
6020 68881 instructions that are emulated on the 68040.
6022 @item -m68020-60
6023 @opindex m68020-60
6024 Generate output for a 68060, without using any of the new instructions.
6025 This results in code which can run relatively efficiently on either a
6026 68020/68881 or a 68030 or a 68040.  The generated code does use the
6027 68881 instructions that are emulated on the 68060.
6029 @item -msoft-float
6030 @opindex msoft-float
6031 Generate output containing library calls for floating point.
6032 @strong{Warning:} the requisite libraries are not available for all m68k
6033 targets.  Normally the facilities of the machine's usual C compiler are
6034 used, but this can't be done directly in cross-compilation.  You must
6035 make your own arrangements to provide suitable library functions for
6036 cross-compilation.  The embedded targets @samp{m68k-*-aout} and
6037 @samp{m68k-*-coff} do provide software floating point support.
6039 @item -mshort
6040 @opindex mshort
6041 Consider type @code{int} to be 16 bits wide, like @code{short int}.
6043 @item -mnobitfield
6044 @opindex mnobitfield
6045 Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
6046 and @option{-m5200} options imply @w{@option{-mnobitfield}}.
6048 @item -mbitfield
6049 @opindex mbitfield
6050 Do use the bit-field instructions.  The @option{-m68020} option implies
6051 @option{-mbitfield}.  This is the default if you use a configuration
6052 designed for a 68020.
6054 @item -mrtd
6055 @opindex mrtd
6056 Use a different function-calling convention, in which functions
6057 that take a fixed number of arguments return with the @code{rtd}
6058 instruction, which pops their arguments while returning.  This
6059 saves one instruction in the caller since there is no need to pop
6060 the arguments there.
6062 This calling convention is incompatible with the one normally
6063 used on Unix, so you cannot use it if you need to call libraries
6064 compiled with the Unix compiler.
6066 Also, you must provide function prototypes for all functions that
6067 take variable numbers of arguments (including @code{printf});
6068 otherwise incorrect code will be generated for calls to those
6069 functions.
6071 In addition, seriously incorrect code will result if you call a
6072 function with too many arguments.  (Normally, extra arguments are
6073 harmlessly ignored.)
6075 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
6076 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
6078 @item -malign-int
6079 @itemx -mno-align-int
6080 @opindex malign-int
6081 @opindex mno-align-int
6082 Control whether GCC aligns @code{int}, @code{long}, @code{long long},
6083 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
6084 boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
6085 Aligning variables on 32-bit boundaries produces code that runs somewhat
6086 faster on processors with 32-bit busses at the expense of more memory.
6088 @strong{Warning:} if you use the @option{-malign-int} switch, GCC will
6089 align structures containing the above types  differently than
6090 most published application binary interface specifications for the m68k.
6092 @item -mpcrel
6093 @opindex mpcrel
6094 Use the pc-relative addressing mode of the 68000 directly, instead of
6095 using a global offset table.  At present, this option implies @option{-fpic},
6096 allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
6097 not presently supported with @option{-mpcrel}, though this could be supported for
6098 68020 and higher processors.
6100 @item -mno-strict-align
6101 @itemx -mstrict-align
6102 @opindex mno-strict-align
6103 @opindex mstrict-align
6104 Do not (do) assume that unaligned memory references will be handled by
6105 the system.
6107 @item -msep-data
6108 Generate code that allows the data segment to be located in a different
6109 area of memory from the text segment.  This allows for execute in place in
6110 an environment without virtual memory management.  This option implies -fPIC.
6112 @item -mno-sep-data
6113 Generate code that assumes that the data segment follows the text segment.
6114 This is the default.
6116 @item -mid-shared-library
6117 Generate code that supports shared libraries via the library ID method.
6118 This allows for execute in place and shared libraries in an environment
6119 without virtual memory management.  This option implies -fPIC.
6121 @item -mno-id-shared-library
6122 Generate code that doesn't assume ID based shared libraries are being used.
6123 This is the default.
6125 @item -mshared-library-id=n
6126 Specified the identification number of the ID based shared library being
6127 compiled.  Specifying a value of 0 will generate more compact code, specifying
6128 other values will force the allocation of that number to the current
6129 library but is no more space or time efficient than omitting this option.
6131 @end table
6133 @node M68hc1x Options
6134 @subsection M68hc1x Options
6135 @cindex M68hc1x options
6137 These are the @samp{-m} options defined for the 68hc11 and 68hc12
6138 microcontrollers.  The default values for these options depends on
6139 which style of microcontroller was selected when the compiler was configured;
6140 the defaults for the most common choices are given below.
6142 @table @gcctabopt
6143 @item -m6811
6144 @itemx -m68hc11
6145 @opindex m6811
6146 @opindex m68hc11
6147 Generate output for a 68HC11.  This is the default
6148 when the compiler is configured for 68HC11-based systems.
6150 @item -m6812
6151 @itemx -m68hc12
6152 @opindex m6812
6153 @opindex m68hc12
6154 Generate output for a 68HC12.  This is the default
6155 when the compiler is configured for 68HC12-based systems.
6157 @item -m68S12
6158 @itemx -m68hcs12
6159 @opindex m68S12
6160 @opindex m68hcs12
6161 Generate output for a 68HCS12.
6163 @item -mauto-incdec
6164 @opindex mauto-incdec
6165 Enable the use of 68HC12 pre and post auto-increment and auto-decrement
6166 addressing modes.
6168 @item -minmax
6169 @itemx -nominmax
6170 @opindex minmax
6171 @opindex mnominmax
6172 Enable the use of 68HC12 min and max instructions.
6174 @item -mlong-calls
6175 @itemx -mno-long-calls
6176 @opindex mlong-calls
6177 @opindex mno-long-calls
6178 Treat all calls as being far away (near).  If calls are assumed to be
6179 far away, the compiler will use the @code{call} instruction to
6180 call a function and the @code{rtc} instruction for returning.
6182 @item -mshort
6183 @opindex mshort
6184 Consider type @code{int} to be 16 bits wide, like @code{short int}.
6186 @item -msoft-reg-count=@var{count}
6187 @opindex msoft-reg-count
6188 Specify the number of pseudo-soft registers which are used for the
6189 code generation.  The maximum number is 32.  Using more pseudo-soft
6190 register may or may not result in better code depending on the program.
6191 The default is 4 for 68HC11 and 2 for 68HC12.
6193 @end table
6195 @node VAX Options
6196 @subsection VAX Options
6197 @cindex VAX options
6199 These @samp{-m} options are defined for the VAX:
6201 @table @gcctabopt
6202 @item -munix
6203 @opindex munix
6204 Do not output certain jump instructions (@code{aobleq} and so on)
6205 that the Unix assembler for the VAX cannot handle across long
6206 ranges.
6208 @item -mgnu
6209 @opindex mgnu
6210 Do output those jump instructions, on the assumption that you
6211 will assemble with the GNU assembler.
6213 @item -mg
6214 @opindex mg
6215 Output code for g-format floating point numbers instead of d-format.
6216 @end table
6218 @node SPARC Options
6219 @subsection SPARC Options
6220 @cindex SPARC options
6222 These @samp{-m} options are supported on the SPARC:
6224 @table @gcctabopt
6225 @item -mno-app-regs
6226 @itemx -mapp-regs
6227 @opindex mno-app-regs
6228 @opindex mapp-regs
6229 Specify @option{-mapp-regs} to generate output using the global registers
6230 2 through 4, which the SPARC SVR4 ABI reserves for applications.  This
6231 is the default.
6233 To be fully SVR4 ABI compliant at the cost of some performance loss,
6234 specify @option{-mno-app-regs}.  You should compile libraries and system
6235 software with this option.
6237 @item -mfpu
6238 @itemx -mhard-float
6239 @opindex mfpu
6240 @opindex mhard-float
6241 Generate output containing floating point instructions.  This is the
6242 default.
6244 @item -mno-fpu
6245 @itemx -msoft-float
6246 @opindex mno-fpu
6247 @opindex msoft-float
6248 Generate output containing library calls for floating point.
6249 @strong{Warning:} the requisite libraries are not available for all SPARC
6250 targets.  Normally the facilities of the machine's usual C compiler are
6251 used, but this cannot be done directly in cross-compilation.  You must make
6252 your own arrangements to provide suitable library functions for
6253 cross-compilation.  The embedded targets @samp{sparc-*-aout} and
6254 @samp{sparclite-*-*} do provide software floating point support.
6256 @option{-msoft-float} changes the calling convention in the output file;
6257 therefore, it is only useful if you compile @emph{all} of a program with
6258 this option.  In particular, you need to compile @file{libgcc.a}, the
6259 library that comes with GCC, with @option{-msoft-float} in order for
6260 this to work.
6262 @item -mhard-quad-float
6263 @opindex mhard-quad-float
6264 Generate output containing quad-word (long double) floating point
6265 instructions.
6267 @item -msoft-quad-float
6268 @opindex msoft-quad-float
6269 Generate output containing library calls for quad-word (long double)
6270 floating point instructions.  The functions called are those specified
6271 in the SPARC ABI@.  This is the default.
6273 As of this writing, there are no SPARC implementations that have hardware
6274 support for the quad-word floating point instructions.  They all invoke
6275 a trap handler for one of these instructions, and then the trap handler
6276 emulates the effect of the instruction.  Because of the trap handler overhead,
6277 this is much slower than calling the ABI library routines.  Thus the
6278 @option{-msoft-quad-float} option is the default.
6280 @item -mno-unaligned-doubles
6281 @itemx -munaligned-doubles
6282 @opindex mno-unaligned-doubles
6283 @opindex munaligned-doubles
6284 Assume that doubles have 8 byte alignment.  This is the default.
6286 With @option{-munaligned-doubles}, GCC assumes that doubles have 8 byte
6287 alignment only if they are contained in another type, or if they have an
6288 absolute address.  Otherwise, it assumes they have 4 byte alignment.
6289 Specifying this option avoids some rare compatibility problems with code
6290 generated by other compilers.  It is not the default because it results
6291 in a performance loss, especially for floating point code.
6293 @item -mno-faster-structs
6294 @itemx -mfaster-structs
6295 @opindex mno-faster-structs
6296 @opindex mfaster-structs
6297 With @option{-mfaster-structs}, the compiler assumes that structures
6298 should have 8 byte alignment.  This enables the use of pairs of
6299 @code{ldd} and @code{std} instructions for copies in structure
6300 assignment, in place of twice as many @code{ld} and @code{st} pairs.
6301 However, the use of this changed alignment directly violates the SPARC
6302 ABI@.  Thus, it's intended only for use on targets where the developer
6303 acknowledges that their resulting code will not be directly in line with
6304 the rules of the ABI@.
6306 @item -mimpure-text
6307 @opindex mimpure-text
6308 @option{-mimpure-text}, used in addition to @option{-shared}, tells
6309 the compiler to not pass @option{-z text} to the linker when linking a
6310 shared object.  Using this option, you can link position-dependent
6311 code into a shared object.
6313 @option{-mimpure-text} suppresses the ``relocations remain against
6314 allocatable but non-writable sections'' linker error message.
6315 However, the necessary relocations will trigger copy-on-write, and the
6316 shared object is not actually shared across processes.  Instead of
6317 using @option{-mimpure-text}, you should compile all source code with
6318 @option{-fpic} or @option{-fPIC}.
6320 This option is only available on SunOS and Solaris.
6322 @item -mcpu=@var{cpu_type}
6323 @opindex mcpu
6324 Set the instruction set, register set, and instruction scheduling parameters
6325 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
6326 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
6327 @samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x},
6328 @samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc}, and
6329 @samp{ultrasparc3}.
6331 Default instruction scheduling parameters are used for values that select
6332 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
6333 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
6335 Here is a list of each supported architecture and their supported
6336 implementations.
6338 @smallexample
6339     v7:             cypress
6340     v8:             supersparc, hypersparc
6341     sparclite:      f930, f934, sparclite86x
6342     sparclet:       tsc701
6343     v9:             ultrasparc, ultrasparc3
6344 @end smallexample
6346 By default (unless configured otherwise), GCC generates code for the V7
6347 variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
6348 additionally optimizes it for the Cypress CY7C602 chip, as used in the
6349 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
6350 SPARCStation 1, 2, IPX etc.
6352 With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
6353 architecture.  The only difference from V7 code is that the compiler emits
6354 the integer multiply and integer divide instructions which exist in SPARC-V8
6355 but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
6356 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
6357 2000 series.
6359 With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
6360 the SPARC architecture.  This adds the integer multiply, integer divide step
6361 and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
6362 With @option{-mcpu=f930}, the compiler additionally optimizes it for the
6363 Fujitsu MB86930 chip, which is the original SPARClite, with no FPU.  With
6364 @option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
6365 MB86934 chip, which is the more recent SPARClite with FPU.
6367 With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
6368 the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
6369 integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
6370 but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
6371 optimizes it for the TEMIC SPARClet chip.
6373 With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
6374 architecture.  This adds 64-bit integer and floating-point move instructions,
6375 3 additional floating-point condition code registers and conditional move
6376 instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
6377 optimizes it for the Sun UltraSPARC I/II chips.  With
6378 @option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
6379 Sun UltraSPARC III chip.
6381 @item -mtune=@var{cpu_type}
6382 @opindex mtune
6383 Set the instruction scheduling parameters for machine type
6384 @var{cpu_type}, but do not set the instruction set or register set that the
6385 option @option{-mcpu=@var{cpu_type}} would.
6387 The same values for @option{-mcpu=@var{cpu_type}} can be used for
6388 @option{-mtune=@var{cpu_type}}, but the only useful values are those
6389 that select a particular cpu implementation.  Those are @samp{cypress},
6390 @samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
6391 @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, and
6392 @samp{ultrasparc3}.
6394 @item -mv8plus
6395 @itemx -mno-v8plus
6396 @opindex -mv8plus
6397 @opindex -mno-v8plus
6398 With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI.  The
6399 difference from the V8 ABI is that the global and out registers are
6400 considered 64-bit wide.  This is enabled by default on Solaris in 32-bit
6401 mode for all SPARC-V9 processors.
6403 @item -mvis
6404 @itemx -mno-vis
6405 @opindex -mvis
6406 @opindex -mno-vis
6407 With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
6408 Visual Instruction Set extensions.  The default is @option{-mno-vis}.
6409 @end table
6411 These @samp{-m} options are supported in addition to the above
6412 on SPARC-V9 processors in 64-bit environments:
6414 @table @gcctabopt
6415 @item -mlittle-endian
6416 @opindex mlittle-endian
6417 Generate code for a processor running in little-endian mode. It is only
6418 available for a few configurations and most notably not on Solaris.
6420 @item -m32
6421 @itemx -m64
6422 @opindex m32
6423 @opindex m64
6424 Generate code for a 32-bit or 64-bit environment.
6425 The 32-bit environment sets int, long and pointer to 32 bits.
6426 The 64-bit environment sets int to 32 bits and long and pointer
6427 to 64 bits.
6429 @item -mcmodel=medlow
6430 @opindex mcmodel=medlow
6431 Generate code for the Medium/Low code model: 64-bit addresses, programs
6432 must be linked in the low 32 bits of memory.  Programs can be statically
6433 or dynamically linked.
6435 @item -mcmodel=medmid
6436 @opindex mcmodel=medmid
6437 Generate code for the Medium/Middle code model: 64-bit addresses, programs
6438 must be linked in the low 44 bits of memory, the text and data segments must
6439 be less than 2GB in size and the data segment must be located within 2GB of
6440 the text segment.
6442 @item -mcmodel=medany
6443 @opindex mcmodel=medany
6444 Generate code for the Medium/Anywhere code model: 64-bit addresses, programs
6445 may be linked anywhere in memory, the text and data segments must be less
6446 than 2GB in size and the data segment must be located within 2GB of the
6447 text segment.
6449 @item -mcmodel=embmedany
6450 @opindex mcmodel=embmedany
6451 Generate code for the Medium/Anywhere code model for embedded systems:
6452 64-bit addresses, the text and data segments must be less than 2GB in
6453 size, both starting anywhere in memory (determined at link time).  The
6454 global register %g4 points to the base of the data segment.  Programs
6455 are statically linked and PIC is not supported.
6457 @item -mstack-bias
6458 @itemx -mno-stack-bias
6459 @opindex mstack-bias
6460 @opindex mno-stack-bias
6461 With @option{-mstack-bias}, GCC assumes that the stack pointer, and
6462 frame pointer if present, are offset by @minus{}2047 which must be added back
6463 when making stack frame references.  This is the default in 64-bit mode.
6464 Otherwise, assume no such offset is present.
6465 @end table
6467 @node ARM Options
6468 @subsection ARM Options
6469 @cindex ARM options
6471 These @samp{-m} options are defined for Advanced RISC Machines (ARM)
6472 architectures:
6474 @table @gcctabopt
6475 @item -mabi=@var{name}
6476 @opindex mabi
6477 Generate code for the specified ABI.  Permissible values are: @samp{apcs-gnu},
6478 @samp{atpcs}, @samp{aapcs} and @samp{iwmmxt}.
6480 @item -mapcs-frame
6481 @opindex mapcs-frame
6482 Generate a stack frame that is compliant with the ARM Procedure Call
6483 Standard for all functions, even if this is not strictly necessary for
6484 correct execution of the code.  Specifying @option{-fomit-frame-pointer}
6485 with this option will cause the stack frames not to be generated for
6486 leaf functions.  The default is @option{-mno-apcs-frame}.
6488 @item -mapcs
6489 @opindex mapcs
6490 This is a synonym for @option{-mapcs-frame}.
6492 @item -mapcs-26
6493 @opindex mapcs-26
6494 Generate code for a processor running with a 26-bit program counter,
6495 and conforming to the function calling standards for the APCS 26-bit
6496 option.  This option replaces the @option{-m2} and @option{-m3} options
6497 of previous releases of the compiler.
6499 @item -mapcs-32
6500 @opindex mapcs-32
6501 Generate code for a processor running with a 32-bit program counter,
6502 and conforming to the function calling standards for the APCS 32-bit
6503 option.  This option replaces the @option{-m6} option of previous releases
6504 of the compiler.
6506 @ignore
6507 @c not currently implemented
6508 @item -mapcs-stack-check
6509 @opindex mapcs-stack-check
6510 Generate code to check the amount of stack space available upon entry to
6511 every function (that actually uses some stack space).  If there is
6512 insufficient space available then either the function
6513 @samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
6514 called, depending upon the amount of stack space required.  The run time
6515 system is required to provide these functions.  The default is
6516 @option{-mno-apcs-stack-check}, since this produces smaller code.
6518 @c not currently implemented
6519 @item -mapcs-float
6520 @opindex mapcs-float
6521 Pass floating point arguments using the float point registers.  This is
6522 one of the variants of the APCS@.  This option is recommended if the
6523 target hardware has a floating point unit or if a lot of floating point
6524 arithmetic is going to be performed by the code.  The default is
6525 @option{-mno-apcs-float}, since integer only code is slightly increased in
6526 size if @option{-mapcs-float} is used.
6528 @c not currently implemented
6529 @item -mapcs-reentrant
6530 @opindex mapcs-reentrant
6531 Generate reentrant, position independent code.  The default is
6532 @option{-mno-apcs-reentrant}.
6533 @end ignore
6535 @item -mthumb-interwork
6536 @opindex mthumb-interwork
6537 Generate code which supports calling between the ARM and Thumb
6538 instruction sets.  Without this option the two instruction sets cannot
6539 be reliably used inside one program.  The default is
6540 @option{-mno-thumb-interwork}, since slightly larger code is generated
6541 when @option{-mthumb-interwork} is specified.
6543 @item -mno-sched-prolog
6544 @opindex mno-sched-prolog
6545 Prevent the reordering of instructions in the function prolog, or the
6546 merging of those instruction with the instructions in the function's
6547 body.  This means that all functions will start with a recognizable set
6548 of instructions (or in fact one of a choice from a small set of
6549 different function prologues), and this information can be used to
6550 locate the start if functions inside an executable piece of code.  The
6551 default is @option{-msched-prolog}.
6553 @item -mhard-float
6554 @opindex mhard-float
6555 Generate output containing floating point instructions.  This is the
6556 default.
6558 @item -msoft-float
6559 @opindex msoft-float
6560 Generate output containing library calls for floating point.
6561 @strong{Warning:} the requisite libraries are not available for all ARM
6562 targets.  Normally the facilities of the machine's usual C compiler are
6563 used, but this cannot be done directly in cross-compilation.  You must make
6564 your own arrangements to provide suitable library functions for
6565 cross-compilation.
6567 @option{-msoft-float} changes the calling convention in the output file;
6568 therefore, it is only useful if you compile @emph{all} of a program with
6569 this option.  In particular, you need to compile @file{libgcc.a}, the
6570 library that comes with GCC, with @option{-msoft-float} in order for
6571 this to work.
6573 @item -mfloat-abi=@var{name}
6574 @opindex mfloat-abi
6575 Specifies which ABI to use for floating point values.  Permissible values
6576 are: @samp{soft}, @samp{softfp} and @samp{hard}.
6578 @samp{soft} and @samp{hard} are equivalent to @option{-msoft-float}
6579 and @option{-mhard-float} respectively.  @samp{softfp} allows the generation
6580 of floating point instructions, but still uses the soft-float calling
6581 conventions.
6583 @item -mlittle-endian
6584 @opindex mlittle-endian
6585 Generate code for a processor running in little-endian mode.  This is
6586 the default for all standard configurations.
6588 @item -mbig-endian
6589 @opindex mbig-endian
6590 Generate code for a processor running in big-endian mode; the default is
6591 to compile code for a little-endian processor.
6593 @item -mwords-little-endian
6594 @opindex mwords-little-endian
6595 This option only applies when generating code for big-endian processors.
6596 Generate code for a little-endian word order but a big-endian byte
6597 order.  That is, a byte order of the form @samp{32107654}.  Note: this
6598 option should only be used if you require compatibility with code for
6599 big-endian ARM processors generated by versions of the compiler prior to
6600 2.8.
6602 @item -malignment-traps
6603 @opindex malignment-traps
6604 Generate code that will not trap if the MMU has alignment traps enabled.
6605 On ARM architectures prior to ARMv4, there were no instructions to
6606 access half-word objects stored in memory.  However, when reading from
6607 memory a feature of the ARM architecture allows a word load to be used,
6608 even if the address is unaligned, and the processor core will rotate the
6609 data as it is being loaded.  This option tells the compiler that such
6610 misaligned accesses will cause a MMU trap and that it should instead
6611 synthesize the access as a series of byte accesses.  The compiler can
6612 still use word accesses to load half-word data if it knows that the
6613 address is aligned to a word boundary.
6615 This option is ignored when compiling for ARM architecture 4 or later,
6616 since these processors have instructions to directly access half-word
6617 objects in memory.
6619 @item -mno-alignment-traps
6620 @opindex mno-alignment-traps
6621 Generate code that assumes that the MMU will not trap unaligned
6622 accesses.  This produces better code when the target instruction set
6623 does not have half-word memory operations (i.e.@: implementations prior to
6624 ARMv4).
6626 Note that you cannot use this option to access unaligned word objects,
6627 since the processor will only fetch one 32-bit aligned object from
6628 memory.
6630 The default setting for most targets is @option{-mno-alignment-traps}, since
6631 this produces better code when there are no half-word memory
6632 instructions available.
6634 @item -mshort-load-bytes
6635 @itemx -mno-short-load-words
6636 @opindex mshort-load-bytes
6637 @opindex mno-short-load-words
6638 These are deprecated aliases for @option{-malignment-traps}.
6640 @item -mno-short-load-bytes
6641 @itemx -mshort-load-words
6642 @opindex mno-short-load-bytes
6643 @opindex mshort-load-words
6644 This are deprecated aliases for @option{-mno-alignment-traps}.
6646 @item -mcpu=@var{name}
6647 @opindex mcpu
6648 This specifies the name of the target ARM processor.  GCC uses this name
6649 to determine what kind of instructions it can emit when generating
6650 assembly code.  Permissible names are: @samp{arm2}, @samp{arm250},
6651 @samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
6652 @samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
6653 @samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
6654 @samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
6655 @samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm8},
6656 @samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
6657 @samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
6658 @samp{arm920t}, @samp{arm926ejs}, @samp{arm940t}, @samp{arm9tdmi},
6659 @samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ejs},
6660 @samp{arm1136js}, @samp{arm1136jfs} ,@samp{xscale}, @samp{iwmmxt},
6661 @samp{ep9312}.
6663 @itemx -mtune=@var{name}
6664 @opindex mtune
6665 This option is very similar to the @option{-mcpu=} option, except that
6666 instead of specifying the actual target processor type, and hence
6667 restricting which instructions can be used, it specifies that GCC should
6668 tune the performance of the code as if the target were of the type
6669 specified in this option, but still choosing the instructions that it
6670 will generate based on the cpu specified by a @option{-mcpu=} option.
6671 For some ARM implementations better performance can be obtained by using
6672 this option.
6674 @item -march=@var{name}
6675 @opindex march
6676 This specifies the name of the target ARM architecture.  GCC uses this
6677 name to determine what kind of instructions it can emit when generating
6678 assembly code.  This option can be used in conjunction with or instead
6679 of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
6680 @samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
6681 @samp{armv5}, @samp{armv5t}, @samp{armv5te}, @samp{armv6}, @samp{armv6j},
6682 @samp{iwmmxt}, @samp{ep9312}.
6684 @item -mfpu=@var{name}
6685 @itemx -mfpe=@var{number}
6686 @itemx -mfp=@var{number}
6687 @opindex mfpu
6688 @opindex mfpe
6689 @opindex mfp
6690 This specifies what floating point hardware (or hardware emulation) is
6691 available on the target.  Permissible names are: @samp{fpa}, @samp{fpe2},
6692 @samp{fpe3}, @samp{maverick}, @samp{vfp}.  @option{-mfp} and @option{-mfpe}
6693 are synonyms for @option{-mfpu}=@samp{fpe}@var{number}, for compatibility
6694 with older versions of GCC@.
6696 If @option{-msoft-float} is specified this specifies the format of
6697 floating point values.
6699 @item -mstructure-size-boundary=@var{n}
6700 @opindex mstructure-size-boundary
6701 The size of all structures and unions will be rounded up to a multiple
6702 of the number of bits set by this option.  Permissible values are 8, 32
6703 and 64.  The default value varies for different toolchains.  For the COFF
6704 targeted toolchain the default value is 8.  A value of 64 is only allowed
6705 if the underlying ABI supports it.
6707 Specifying the larger number can produce faster, more efficient code, but
6708 can also increase the size of the program.  Different values are potentially
6709 incompatible.  Code compiled with one value cannot necessarily expect to
6710 work with code or libraries compiled with another value, if they exchange
6711 information using structures or unions.
6713 @item -mabort-on-noreturn
6714 @opindex mabort-on-noreturn
6715 Generate a call to the function @code{abort} at the end of a
6716 @code{noreturn} function.  It will be executed if the function tries to
6717 return.
6719 @item -mlong-calls
6720 @itemx -mno-long-calls
6721 @opindex mlong-calls
6722 @opindex mno-long-calls
6723 Tells the compiler to perform function calls by first loading the
6724 address of the function into a register and then performing a subroutine
6725 call on this register.  This switch is needed if the target function
6726 will lie outside of the 64 megabyte addressing range of the offset based
6727 version of subroutine call instruction.
6729 Even if this switch is enabled, not all function calls will be turned
6730 into long calls.  The heuristic is that static functions, functions
6731 which have the @samp{short-call} attribute, functions that are inside
6732 the scope of a @samp{#pragma no_long_calls} directive and functions whose
6733 definitions have already been compiled within the current compilation
6734 unit, will not be turned into long calls.  The exception to this rule is
6735 that weak function definitions, functions with the @samp{long-call}
6736 attribute or the @samp{section} attribute, and functions that are within
6737 the scope of a @samp{#pragma long_calls} directive, will always be
6738 turned into long calls.
6740 This feature is not enabled by default.  Specifying
6741 @option{-mno-long-calls} will restore the default behavior, as will
6742 placing the function calls within the scope of a @samp{#pragma
6743 long_calls_off} directive.  Note these switches have no effect on how
6744 the compiler generates code to handle function calls via function
6745 pointers.
6747 @item -mnop-fun-dllimport
6748 @opindex mnop-fun-dllimport
6749 Disable support for the @code{dllimport} attribute.
6751 @item -msingle-pic-base
6752 @opindex msingle-pic-base
6753 Treat the register used for PIC addressing as read-only, rather than
6754 loading it in the prologue for each function.  The run-time system is
6755 responsible for initializing this register with an appropriate value
6756 before execution begins.
6758 @item -mpic-register=@var{reg}
6759 @opindex mpic-register
6760 Specify the register to be used for PIC addressing.  The default is R10
6761 unless stack-checking is enabled, when R9 is used.
6763 @item -mcirrus-fix-invalid-insns
6764 @opindex mcirrus-fix-invalid-insns
6765 @opindex mno-cirrus-fix-invalid-insns
6766 Insert NOPs into the instruction stream to in order to work around
6767 problems with invalid Maverick instruction combinations.  This option
6768 is only valid if the @option{-mcpu=ep9312} option has been used to
6769 enable generation of instructions for the Cirrus Maverick floating
6770 point co-processor.  This option is not enabled by default, since the
6771 problem is only present in older Maverick implementations.  The default
6772 can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns}
6773 switch.
6775 @item -mpoke-function-name
6776 @opindex mpoke-function-name
6777 Write the name of each function into the text section, directly
6778 preceding the function prologue.  The generated code is similar to this:
6780 @smallexample
6781      t0
6782          .ascii "arm_poke_function_name", 0
6783          .align
6784      t1
6785          .word 0xff000000 + (t1 - t0)
6786      arm_poke_function_name
6787          mov     ip, sp
6788          stmfd   sp!, @{fp, ip, lr, pc@}
6789          sub     fp, ip, #4
6790 @end smallexample
6792 When performing a stack backtrace, code can inspect the value of
6793 @code{pc} stored at @code{fp + 0}.  If the trace function then looks at
6794 location @code{pc - 12} and the top 8 bits are set, then we know that
6795 there is a function name embedded immediately preceding this location
6796 and has length @code{((pc[-3]) & 0xff000000)}.
6798 @item -mthumb
6799 @opindex mthumb
6800 Generate code for the 16-bit Thumb instruction set.  The default is to
6801 use the 32-bit ARM instruction set.
6803 @item -mtpcs-frame
6804 @opindex mtpcs-frame
6805 Generate a stack frame that is compliant with the Thumb Procedure Call
6806 Standard for all non-leaf functions.  (A leaf function is one that does
6807 not call any other functions.)  The default is @option{-mno-tpcs-frame}.
6809 @item -mtpcs-leaf-frame
6810 @opindex mtpcs-leaf-frame
6811 Generate a stack frame that is compliant with the Thumb Procedure Call
6812 Standard for all leaf functions.  (A leaf function is one that does
6813 not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.
6815 @item -mcallee-super-interworking
6816 @opindex mcallee-super-interworking
6817 Gives all externally visible functions in the file being compiled an ARM
6818 instruction set header which switches to Thumb mode before executing the
6819 rest of the function.  This allows these functions to be called from
6820 non-interworking code.
6822 @item -mcaller-super-interworking
6823 @opindex mcaller-super-interworking
6824 Allows calls via function pointers (including virtual functions) to
6825 execute correctly regardless of whether the target code has been
6826 compiled for interworking or not.  There is a small overhead in the cost
6827 of executing a function pointer if this option is enabled.
6829 @end table
6831 @node MN10300 Options
6832 @subsection MN10300 Options
6833 @cindex MN10300 options
6835 These @option{-m} options are defined for Matsushita MN10300 architectures:
6837 @table @gcctabopt
6838 @item -mmult-bug
6839 @opindex mmult-bug
6840 Generate code to avoid bugs in the multiply instructions for the MN10300
6841 processors.  This is the default.
6843 @item -mno-mult-bug
6844 @opindex mno-mult-bug
6845 Do not generate code to avoid bugs in the multiply instructions for the
6846 MN10300 processors.
6848 @item -mam33
6849 @opindex mam33
6850 Generate code which uses features specific to the AM33 processor.
6852 @item -mno-am33
6853 @opindex mno-am33
6854 Do not generate code which uses features specific to the AM33 processor.  This
6855 is the default.
6857 @item -mno-crt0
6858 @opindex mno-crt0
6859 Do not link in the C run-time initialization object file.
6861 @item -mrelax
6862 @opindex mrelax
6863 Indicate to the linker that it should perform a relaxation optimization pass
6864 to shorten branches, calls and absolute memory addresses.  This option only
6865 has an effect when used on the command line for the final link step.
6867 This option makes symbolic debugging impossible.
6868 @end table
6871 @node M32R/D Options
6872 @subsection M32R/D Options
6873 @cindex M32R/D options
6875 These @option{-m} options are defined for Renesas M32R/D architectures:
6877 @table @gcctabopt
6878 @item -m32r2
6879 @opindex m32r2
6880 Generate code for the M32R/2@.
6882 @item -m32rx
6883 @opindex m32rx
6884 Generate code for the M32R/X@.
6886 @item -m32r
6887 @opindex m32r
6888 Generate code for the M32R@.  This is the default.
6890 @item -mmodel=small
6891 @opindex mmodel=small
6892 Assume all objects live in the lower 16MB of memory (so that their addresses
6893 can be loaded with the @code{ld24} instruction), and assume all subroutines
6894 are reachable with the @code{bl} instruction.
6895 This is the default.
6897 The addressability of a particular object can be set with the
6898 @code{model} attribute.
6900 @item -mmodel=medium
6901 @opindex mmodel=medium
6902 Assume objects may be anywhere in the 32-bit address space (the compiler
6903 will generate @code{seth/add3} instructions to load their addresses), and
6904 assume all subroutines are reachable with the @code{bl} instruction.
6906 @item -mmodel=large
6907 @opindex mmodel=large
6908 Assume objects may be anywhere in the 32-bit address space (the compiler
6909 will generate @code{seth/add3} instructions to load their addresses), and
6910 assume subroutines may not be reachable with the @code{bl} instruction
6911 (the compiler will generate the much slower @code{seth/add3/jl}
6912 instruction sequence).
6914 @item -msdata=none
6915 @opindex msdata=none
6916 Disable use of the small data area.  Variables will be put into
6917 one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
6918 @code{section} attribute has been specified).
6919 This is the default.
6921 The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
6922 Objects may be explicitly put in the small data area with the
6923 @code{section} attribute using one of these sections.
6925 @item -msdata=sdata
6926 @opindex msdata=sdata
6927 Put small global and static data in the small data area, but do not
6928 generate special code to reference them.
6930 @item -msdata=use
6931 @opindex msdata=use
6932 Put small global and static data in the small data area, and generate
6933 special instructions to reference them.
6935 @item -G @var{num}
6936 @opindex G
6937 @cindex smaller data references
6938 Put global and static objects less than or equal to @var{num} bytes
6939 into the small data or bss sections instead of the normal data or bss
6940 sections.  The default value of @var{num} is 8.
6941 The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
6942 for this option to have any effect.
6944 All modules should be compiled with the same @option{-G @var{num}} value.
6945 Compiling with different values of @var{num} may or may not work; if it
6946 doesn't the linker will give an error message---incorrect code will not be
6947 generated.
6949 @item -mdebug
6950 @opindex -mdebug
6951 Makes the M32R specific code in the compiler display some statistics
6952 that might help in debugging programs.
6954 @item -malign-loops
6955 @opindex malign-loops
6956 Align all loops to a 32-byte boundary.
6958 @item -mno-align-loops
6959 @opindex mno-align-loops
6960 Do not enforce a 32-byte alignment for loops.  This is the default.
6962 @item -missue-rate=@var{number}
6963 @opindex missue-rate=@var{number}
6964 Issue @var{number} instructions per cycle.  @var{number} can only be 1
6965 or 2.
6967 @item -mbranch-cost=@var{number}
6968 @opindex mbranch-cost=@var{number}
6969 @var{number} can only be 1 or 2.  If it is 1 then branches will be
6970 preferred over conditional code, if it is 2, then the opposite will
6971 apply.
6973 @item -mflush-trap=@var{number}
6974 @opindex mflush-trap=@var{number}
6975 Specifies the trap number to use to flush the cache.  The default is
6976 12.  Valid numbers are between 0 and 15 inclusive.
6978 @item -mno-flush-trap
6979 @opindex mno-flush-trap
6980 Specifies that the cache cannot be flushed by using a trap.
6982 @item -mflush-func=@var{name}
6983 @opindex mflush-func=@var{name}
6984 Specifies the name of the operating system function to call to flush
6985 the cache.  The default is @emph{_flush_cache}, but a function call
6986 will only be used if a trap is not available.
6988 @item -mno-flush-func
6989 @opindex mno-flush-func
6990 Indicates that there is no OS function for flushing the cache.
6992 @end table
6994 @node RS/6000 and PowerPC Options
6995 @subsection IBM RS/6000 and PowerPC Options
6996 @cindex RS/6000 and PowerPC Options
6997 @cindex IBM RS/6000 and PowerPC Options
6999 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
7000 @table @gcctabopt
7001 @item -mpower
7002 @itemx -mno-power
7003 @itemx -mpower2
7004 @itemx -mno-power2
7005 @itemx -mpowerpc
7006 @itemx -mno-powerpc
7007 @itemx -mpowerpc-gpopt
7008 @itemx -mno-powerpc-gpopt
7009 @itemx -mpowerpc-gfxopt
7010 @itemx -mno-powerpc-gfxopt
7011 @itemx -mpowerpc64
7012 @itemx -mno-powerpc64
7013 @opindex mpower
7014 @opindex mno-power
7015 @opindex mpower2
7016 @opindex mno-power2
7017 @opindex mpowerpc
7018 @opindex mno-powerpc
7019 @opindex mpowerpc-gpopt
7020 @opindex mno-powerpc-gpopt
7021 @opindex mpowerpc-gfxopt
7022 @opindex mno-powerpc-gfxopt
7023 @opindex mpowerpc64
7024 @opindex mno-powerpc64
7025 GCC supports two related instruction set architectures for the
7026 RS/6000 and PowerPC@.  The @dfn{POWER} instruction set are those
7027 instructions supported by the @samp{rios} chip set used in the original
7028 RS/6000 systems and the @dfn{PowerPC} instruction set is the
7029 architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
7030 the IBM 4xx microprocessors.
7032 Neither architecture is a subset of the other.  However there is a
7033 large common subset of instructions supported by both.  An MQ
7034 register is included in processors supporting the POWER architecture.
7036 You use these options to specify which instructions are available on the
7037 processor you are using.  The default value of these options is
7038 determined when configuring GCC@.  Specifying the
7039 @option{-mcpu=@var{cpu_type}} overrides the specification of these
7040 options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
7041 rather than the options listed above.
7043 The @option{-mpower} option allows GCC to generate instructions that
7044 are found only in the POWER architecture and to use the MQ register.
7045 Specifying @option{-mpower2} implies @option{-power} and also allows GCC
7046 to generate instructions that are present in the POWER2 architecture but
7047 not the original POWER architecture.
7049 The @option{-mpowerpc} option allows GCC to generate instructions that
7050 are found only in the 32-bit subset of the PowerPC architecture.
7051 Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows
7052 GCC to use the optional PowerPC architecture instructions in the
7053 General Purpose group, including floating-point square root.  Specifying
7054 @option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to
7055 use the optional PowerPC architecture instructions in the Graphics
7056 group, including floating-point select.
7058 The @option{-mpowerpc64} option allows GCC to generate the additional
7059 64-bit instructions that are found in the full PowerPC64 architecture
7060 and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
7061 @option{-mno-powerpc64}.
7063 If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC
7064 will use only the instructions in the common subset of both
7065 architectures plus some special AIX common-mode calls, and will not use
7066 the MQ register.  Specifying both @option{-mpower} and @option{-mpowerpc}
7067 permits GCC to use any instruction from either architecture and to
7068 allow use of the MQ register; specify this for the Motorola MPC601.
7070 @item -mnew-mnemonics
7071 @itemx -mold-mnemonics
7072 @opindex mnew-mnemonics
7073 @opindex mold-mnemonics
7074 Select which mnemonics to use in the generated assembler code.  With
7075 @option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for
7076 the PowerPC architecture.  With @option{-mold-mnemonics} it uses the
7077 assembler mnemonics defined for the POWER architecture.  Instructions
7078 defined in only one architecture have only one mnemonic; GCC uses that
7079 mnemonic irrespective of which of these options is specified.
7081 GCC defaults to the mnemonics appropriate for the architecture in
7082 use.  Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the
7083 value of these option.  Unless you are building a cross-compiler, you
7084 should normally not specify either @option{-mnew-mnemonics} or
7085 @option{-mold-mnemonics}, but should instead accept the default.
7087 @item -mcpu=@var{cpu_type}
7088 @opindex mcpu
7089 Set architecture type, register usage, choice of mnemonics, and
7090 instruction scheduling parameters for machine type @var{cpu_type}.
7091 Supported values for @var{cpu_type} are @samp{401}, @samp{403},
7092 @samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{505},
7093 @samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604},
7094 @samp{604e}, @samp{620}, @samp{630}, @samp{740}, @samp{7400},
7095 @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
7096 @samp{860}, @samp{970}, @samp{common}, @samp{ec603e}, @samp{G3},
7097 @samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3},
7098 @samp{power4}, @samp{power5}, @samp{powerpc}, @samp{powerpc64},
7099 @samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64a}.
7101 @option{-mcpu=common} selects a completely generic processor.  Code
7102 generated under this option will run on any POWER or PowerPC processor.
7103 GCC will use only the instructions in the common subset of both
7104 architectures, and will not use the MQ register.  GCC assumes a generic
7105 processor model for scheduling purposes.
7107 @option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and
7108 @option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit
7109 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
7110 types, with an appropriate, generic processor model assumed for
7111 scheduling purposes.
7113 The other options specify a specific processor.  Code generated under
7114 those options will run best on that processor, and may not run at all on
7115 others.
7117 The @option{-mcpu} options automatically enable or disable the
7118 following options: @option{-maltivec}, @option{-mhard-float},
7119 @option{-mmfcrf}, @option{-mmultiple}, @option{-mnew-mnemonics},
7120 @option{-mpower}, @option{-mpower2}, @option{-mpowerpc64},
7121 @option{-mpowerpc-gpopt}, @option{-mpowerpc-gfxopt},
7122 @option{-mstring}.  The particular options set for any particular CPU
7123 will vary between compiler versions, depending on what setting seems
7124 to produce optimal code for that CPU; it doesn't necessarily reflect
7125 the actual hardware's capabilities.  If you wish to set an individual
7126 option to a particular value, you may specify it after the
7127 @option{-mcpu} option, like @samp{-mcpu=970 -mno-altivec}.
7129 On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
7130 not enabled or disabled by the @option{-mcpu} option at present, since
7131 AIX does not have full support for these options.  You may still
7132 enable or disable them individually if you're sure it'll work in your
7133 environment.
7135 @item -mtune=@var{cpu_type}
7136 @opindex mtune
7137 Set the instruction scheduling parameters for machine type
7138 @var{cpu_type}, but do not set the architecture type, register usage, or
7139 choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would.  The same
7140 values for @var{cpu_type} are used for @option{-mtune} as for
7141 @option{-mcpu}.  If both are specified, the code generated will use the
7142 architecture, registers, and mnemonics set by @option{-mcpu}, but the
7143 scheduling parameters set by @option{-mtune}.
7145 @item -maltivec
7146 @itemx -mno-altivec
7147 @opindex maltivec
7148 @opindex mno-altivec
7149 These switches enable or disable the use of built-in functions that
7150 allow access to the AltiVec instruction set.  You may also need to set
7151 @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
7152 enhancements.
7154 @item -mabi=spe
7155 @opindex mabi=spe
7156 Extend the current ABI with SPE ABI extensions.  This does not change
7157 the default ABI, instead it adds the SPE ABI extensions to the current
7158 ABI@.
7160 @item -mabi=no-spe
7161 @opindex mabi=no-spe
7162 Disable Booke SPE ABI extensions for the current ABI.
7164 @item -misel=@var{yes/no}
7165 @itemx -misel
7166 @opindex misel
7167 This switch enables or disables the generation of ISEL instructions.
7169 @item -mspe=@var{yes/no}
7170 @itemx -mspe
7171 @opindex mspe
7172 This switch enables or disables the generation of SPE simd
7173 instructions.
7175 @item -mfloat-gprs=@var{yes/no}
7176 @itemx -mfloat-gprs
7177 @opindex mfloat-gprs
7178 This switch enables or disables the generation of floating point
7179 operations on the general purpose registers for architectures that
7180 support it.  This option is currently only available on the MPC8540.
7182 @item -mfull-toc
7183 @itemx -mno-fp-in-toc
7184 @itemx -mno-sum-in-toc
7185 @itemx -mminimal-toc
7186 @opindex mfull-toc
7187 @opindex mno-fp-in-toc
7188 @opindex mno-sum-in-toc
7189 @opindex mminimal-toc
7190 Modify generation of the TOC (Table Of Contents), which is created for
7191 every executable file.  The @option{-mfull-toc} option is selected by
7192 default.  In that case, GCC will allocate at least one TOC entry for
7193 each unique non-automatic variable reference in your program.  GCC
7194 will also place floating-point constants in the TOC@.  However, only
7195 16,384 entries are available in the TOC@.
7197 If you receive a linker error message that saying you have overflowed
7198 the available TOC space, you can reduce the amount of TOC space used
7199 with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
7200 @option{-mno-fp-in-toc} prevents GCC from putting floating-point
7201 constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
7202 generate code to calculate the sum of an address and a constant at
7203 run-time instead of putting that sum into the TOC@.  You may specify one
7204 or both of these options.  Each causes GCC to produce very slightly
7205 slower and larger code at the expense of conserving TOC space.
7207 If you still run out of space in the TOC even when you specify both of
7208 these options, specify @option{-mminimal-toc} instead.  This option causes
7209 GCC to make only one TOC entry for every file.  When you specify this
7210 option, GCC will produce code that is slower and larger but which
7211 uses extremely little TOC space.  You may wish to use this option
7212 only on files that contain less frequently executed code.
7214 @item -maix64
7215 @itemx -maix32
7216 @opindex maix64
7217 @opindex maix32
7218 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
7219 @code{long} type, and the infrastructure needed to support them.
7220 Specifying @option{-maix64} implies @option{-mpowerpc64} and
7221 @option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and
7222 implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.
7224 @item -mxl-call
7225 @itemx -mno-xl-call
7226 @opindex mxl-call
7227 @opindex mno-xl-call
7228 On AIX, pass floating-point arguments to prototyped functions beyond the
7229 register save area (RSA) on the stack in addition to argument FPRs.  The
7230 AIX calling convention was extended but not initially documented to
7231 handle an obscure K&R C case of calling a function that takes the
7232 address of its arguments with fewer arguments than declared.  AIX XL
7233 compilers access floating point arguments which do not fit in the
7234 RSA from the stack when a subroutine is compiled without
7235 optimization.  Because always storing floating-point arguments on the
7236 stack is inefficient and rarely needed, this option is not enabled by
7237 default and only is necessary when calling subroutines compiled by AIX
7238 XL compilers without optimization.
7240 @item -mpe
7241 @opindex mpe
7242 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
7243 application written to use message passing with special startup code to
7244 enable the application to run.  The system must have PE installed in the
7245 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
7246 must be overridden with the @option{-specs=} option to specify the
7247 appropriate directory location.  The Parallel Environment does not
7248 support threads, so the @option{-mpe} option and the @option{-pthread}
7249 option are incompatible.
7251 @item -malign-natural
7252 @itemx -malign-power
7253 @opindex malign-natural
7254 @opindex malign-power
7255 On AIX, Darwin, and 64-bit PowerPC GNU/Linux, the option
7256 @option{-malign-natural} overrides the ABI-defined alignment of larger
7257 types, such as floating-point doubles, on their natural size-based boundary.
7258 The option @option{-malign-power} instructs GCC to follow the ABI-specified
7259 alignment rules.  GCC defaults to the standard alignment defined in the ABI.
7261 @item -msoft-float
7262 @itemx -mhard-float
7263 @opindex msoft-float
7264 @opindex mhard-float
7265 Generate code that does not use (uses) the floating-point register set.
7266 Software floating point emulation is provided if you use the
7267 @option{-msoft-float} option, and pass the option to GCC when linking.
7269 @item -mmultiple
7270 @itemx -mno-multiple
7271 @opindex mmultiple
7272 @opindex mno-multiple
7273 Generate code that uses (does not use) the load multiple word
7274 instructions and the store multiple word instructions.  These
7275 instructions are generated by default on POWER systems, and not
7276 generated on PowerPC systems.  Do not use @option{-mmultiple} on little
7277 endian PowerPC systems, since those instructions do not work when the
7278 processor is in little endian mode.  The exceptions are PPC740 and
7279 PPC750 which permit the instructions usage in little endian mode.
7281 @item -mstring
7282 @itemx -mno-string
7283 @opindex mstring
7284 @opindex mno-string
7285 Generate code that uses (does not use) the load string instructions
7286 and the store string word instructions to save multiple registers and
7287 do small block moves.  These instructions are generated by default on
7288 POWER systems, and not generated on PowerPC systems.  Do not use
7289 @option{-mstring} on little endian PowerPC systems, since those
7290 instructions do not work when the processor is in little endian mode.
7291 The exceptions are PPC740 and PPC750 which permit the instructions
7292 usage in little endian mode.
7294 @item -mupdate
7295 @itemx -mno-update
7296 @opindex mupdate
7297 @opindex mno-update
7298 Generate code that uses (does not use) the load or store instructions
7299 that update the base register to the address of the calculated memory
7300 location.  These instructions are generated by default.  If you use
7301 @option{-mno-update}, there is a small window between the time that the
7302 stack pointer is updated and the address of the previous frame is
7303 stored, which means code that walks the stack frame across interrupts or
7304 signals may get corrupted data.
7306 @item -mfused-madd
7307 @itemx -mno-fused-madd
7308 @opindex mfused-madd
7309 @opindex mno-fused-madd
7310 Generate code that uses (does not use) the floating point multiply and
7311 accumulate instructions.  These instructions are generated by default if
7312 hardware floating is used.
7314 @item -mno-bit-align
7315 @itemx -mbit-align
7316 @opindex mno-bit-align
7317 @opindex mbit-align
7318 On System V.4 and embedded PowerPC systems do not (do) force structures
7319 and unions that contain bit-fields to be aligned to the base type of the
7320 bit-field.
7322 For example, by default a structure containing nothing but 8
7323 @code{unsigned} bit-fields of length 1 would be aligned to a 4 byte
7324 boundary and have a size of 4 bytes.  By using @option{-mno-bit-align},
7325 the structure would be aligned to a 1 byte boundary and be one byte in
7326 size.
7328 @item -mno-strict-align
7329 @itemx -mstrict-align
7330 @opindex mno-strict-align
7331 @opindex mstrict-align
7332 On System V.4 and embedded PowerPC systems do not (do) assume that
7333 unaligned memory references will be handled by the system.
7335 @item -mrelocatable
7336 @itemx -mno-relocatable
7337 @opindex mrelocatable
7338 @opindex mno-relocatable
7339 On embedded PowerPC systems generate code that allows (does not allow)
7340 the program to be relocated to a different address at runtime.  If you
7341 use @option{-mrelocatable} on any module, all objects linked together must
7342 be compiled with @option{-mrelocatable} or @option{-mrelocatable-lib}.
7344 @item -mrelocatable-lib
7345 @itemx -mno-relocatable-lib
7346 @opindex mrelocatable-lib
7347 @opindex mno-relocatable-lib
7348 On embedded PowerPC systems generate code that allows (does not allow)
7349 the program to be relocated to a different address at runtime.  Modules
7350 compiled with @option{-mrelocatable-lib} can be linked with either modules
7351 compiled without @option{-mrelocatable} and @option{-mrelocatable-lib} or
7352 with modules compiled with the @option{-mrelocatable} options.
7354 @item -mno-toc
7355 @itemx -mtoc
7356 @opindex mno-toc
7357 @opindex mtoc
7358 On System V.4 and embedded PowerPC systems do not (do) assume that
7359 register 2 contains a pointer to a global area pointing to the addresses
7360 used in the program.
7362 @item -mlittle
7363 @itemx -mlittle-endian
7364 @opindex mlittle
7365 @opindex mlittle-endian
7366 On System V.4 and embedded PowerPC systems compile code for the
7367 processor in little endian mode.  The @option{-mlittle-endian} option is
7368 the same as @option{-mlittle}.
7370 @item -mbig
7371 @itemx -mbig-endian
7372 @opindex mbig
7373 @opindex mbig-endian
7374 On System V.4 and embedded PowerPC systems compile code for the
7375 processor in big endian mode.  The @option{-mbig-endian} option is
7376 the same as @option{-mbig}.
7378 @item -mdynamic-no-pic
7379 @opindex mdynamic-no-pic
7380 On Darwin and Mac OS X systems, compile code so that it is not
7381 relocatable, but that its external references are relocatable.  The
7382 resulting code is suitable for applications, but not shared
7383 libraries.
7385 @item -mprioritize-restricted-insns=@var{priority}
7386 @opindex mprioritize-restricted-insns
7387 This option controls the priority that is assigned to
7388 dispatch-slot restricted instructions during the second scheduling
7389 pass.  The argument @var{priority} takes the value @var{0/1/2} to assign
7390 @var{no/highest/second-highest} priority to dispatch slot restricted
7391 instructions.
7393 @item -msched-costly-dep=@var{dependence_type}
7394 @opindex msched-costly-dep
7395 This option controls which dependences are considered costly
7396 by the target during instruction scheduling.  The argument
7397 @var{dependence_type} takes one of the following values:
7398 @var{no}: no dependence is costly,
7399 @var{all}: all dependences are costly,
7400 @var{true_store_to_load}: a true dependence from store to load is costly,
7401 @var{store_to_load}: any dependence from store to load is costly,
7402 @var{number}: any dependence which latency >= @var{number} is costly.
7404 @item -minsert-sched-nops=@var{scheme}
7405 @opindex minsert-sched-nops
7406 This option controls which nop insertion scheme will be used during
7407 the second scheduling pass. The argument @var{scheme} takes one of the
7408 following values:
7409 @var{no}: Don't insert nops.
7410 @var{pad}: Pad with nops any dispatch group which has vacant issue slots,
7411 according to the scheduler's grouping.
7412 @var{regroup_exact}: Insert nops to force costly dependent insns into
7413 separate groups.  Insert exactly as many nops as needed to force an insn
7414 to a new group, according to the estimated processor grouping.
7415 @var{number}: Insert nops to force costly dependent insns into
7416 separate groups.  Insert @var{number} nops to force an insn to a new group.
7418 @item -mcall-sysv
7419 @opindex mcall-sysv
7420 On System V.4 and embedded PowerPC systems compile code using calling
7421 conventions that adheres to the March 1995 draft of the System V
7422 Application Binary Interface, PowerPC processor supplement.  This is the
7423 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
7425 @item -mcall-sysv-eabi
7426 @opindex mcall-sysv-eabi
7427 Specify both @option{-mcall-sysv} and @option{-meabi} options.
7429 @item -mcall-sysv-noeabi
7430 @opindex mcall-sysv-noeabi
7431 Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
7433 @item -mcall-solaris
7434 @opindex mcall-solaris
7435 On System V.4 and embedded PowerPC systems compile code for the Solaris
7436 operating system.
7438 @item -mcall-linux
7439 @opindex mcall-linux
7440 On System V.4 and embedded PowerPC systems compile code for the
7441 Linux-based GNU system.
7443 @item -mcall-gnu
7444 @opindex mcall-gnu
7445 On System V.4 and embedded PowerPC systems compile code for the
7446 Hurd-based GNU system.
7448 @item -mcall-netbsd
7449 @opindex mcall-netbsd
7450 On System V.4 and embedded PowerPC systems compile code for the
7451 NetBSD operating system.
7453 @item -maix-struct-return
7454 @opindex maix-struct-return
7455 Return all structures in memory (as specified by the AIX ABI)@.
7457 @item -msvr4-struct-return
7458 @opindex msvr4-struct-return
7459 Return structures smaller than 8 bytes in registers (as specified by the
7460 SVR4 ABI)@.
7462 @item -mabi=altivec
7463 @opindex mabi=altivec
7464 Extend the current ABI with AltiVec ABI extensions.  This does not
7465 change the default ABI, instead it adds the AltiVec ABI extensions to
7466 the current ABI@.
7468 @item -mabi=no-altivec
7469 @opindex mabi=no-altivec
7470 Disable AltiVec ABI extensions for the current ABI.
7472 @item -mprototype
7473 @itemx -mno-prototype
7474 @opindex mprototype
7475 @opindex mno-prototype
7476 On System V.4 and embedded PowerPC systems assume that all calls to
7477 variable argument functions are properly prototyped.  Otherwise, the
7478 compiler must insert an instruction before every non prototyped call to
7479 set or clear bit 6 of the condition code register (@var{CR}) to
7480 indicate whether floating point values were passed in the floating point
7481 registers in case the function takes a variable arguments.  With
7482 @option{-mprototype}, only calls to prototyped variable argument functions
7483 will set or clear the bit.
7485 @item -msim
7486 @opindex msim
7487 On embedded PowerPC systems, assume that the startup module is called
7488 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
7489 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}.
7490 configurations.
7492 @item -mmvme
7493 @opindex mmvme
7494 On embedded PowerPC systems, assume that the startup module is called
7495 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
7496 @file{libc.a}.
7498 @item -mads
7499 @opindex mads
7500 On embedded PowerPC systems, assume that the startup module is called
7501 @file{crt0.o} and the standard C libraries are @file{libads.a} and
7502 @file{libc.a}.
7504 @item -myellowknife
7505 @opindex myellowknife
7506 On embedded PowerPC systems, assume that the startup module is called
7507 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
7508 @file{libc.a}.
7510 @item -mvxworks
7511 @opindex mvxworks
7512 On System V.4 and embedded PowerPC systems, specify that you are
7513 compiling for a VxWorks system.
7515 @item -mwindiss
7516 @opindex mwindiss
7517 Specify that you are compiling for the WindISS simulation environment.
7519 @item -memb
7520 @opindex memb
7521 On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
7522 header to indicate that @samp{eabi} extended relocations are used.
7524 @item -meabi
7525 @itemx -mno-eabi
7526 @opindex meabi
7527 @opindex mno-eabi
7528 On System V.4 and embedded PowerPC systems do (do not) adhere to the
7529 Embedded Applications Binary Interface (eabi) which is a set of
7530 modifications to the System V.4 specifications.  Selecting @option{-meabi}
7531 means that the stack is aligned to an 8 byte boundary, a function
7532 @code{__eabi} is called to from @code{main} to set up the eabi
7533 environment, and the @option{-msdata} option can use both @code{r2} and
7534 @code{r13} to point to two separate small data areas.  Selecting
7535 @option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
7536 do not call an initialization function from @code{main}, and the
7537 @option{-msdata} option will only use @code{r13} to point to a single
7538 small data area.  The @option{-meabi} option is on by default if you
7539 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
7541 @item -msdata=eabi
7542 @opindex msdata=eabi
7543 On System V.4 and embedded PowerPC systems, put small initialized
7544 @code{const} global and static data in the @samp{.sdata2} section, which
7545 is pointed to by register @code{r2}.  Put small initialized
7546 non-@code{const} global and static data in the @samp{.sdata} section,
7547 which is pointed to by register @code{r13}.  Put small uninitialized
7548 global and static data in the @samp{.sbss} section, which is adjacent to
7549 the @samp{.sdata} section.  The @option{-msdata=eabi} option is
7550 incompatible with the @option{-mrelocatable} option.  The
7551 @option{-msdata=eabi} option also sets the @option{-memb} option.
7553 @item -msdata=sysv
7554 @opindex msdata=sysv
7555 On System V.4 and embedded PowerPC systems, put small global and static
7556 data in the @samp{.sdata} section, which is pointed to by register
7557 @code{r13}.  Put small uninitialized global and static data in the
7558 @samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
7559 The @option{-msdata=sysv} option is incompatible with the
7560 @option{-mrelocatable} option.
7562 @item -msdata=default
7563 @itemx -msdata
7564 @opindex msdata=default
7565 @opindex msdata
7566 On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
7567 compile code the same as @option{-msdata=eabi}, otherwise compile code the
7568 same as @option{-msdata=sysv}.
7570 @item -msdata-data
7571 @opindex msdata-data
7572 On System V.4 and embedded PowerPC systems, put small global and static
7573 data in the @samp{.sdata} section.  Put small uninitialized global and
7574 static data in the @samp{.sbss} section.  Do not use register @code{r13}
7575 to address small data however.  This is the default behavior unless
7576 other @option{-msdata} options are used.
7578 @item -msdata=none
7579 @itemx -mno-sdata
7580 @opindex msdata=none
7581 @opindex mno-sdata
7582 On embedded PowerPC systems, put all initialized global and static data
7583 in the @samp{.data} section, and all uninitialized data in the
7584 @samp{.bss} section.
7586 @item -G @var{num}
7587 @opindex G
7588 @cindex smaller data references (PowerPC)
7589 @cindex .sdata/.sdata2 references (PowerPC)
7590 On embedded PowerPC systems, put global and static items less than or
7591 equal to @var{num} bytes into the small data or bss sections instead of
7592 the normal data or bss section.  By default, @var{num} is 8.  The
7593 @option{-G @var{num}} switch is also passed to the linker.
7594 All modules should be compiled with the same @option{-G @var{num}} value.
7596 @item -mregnames
7597 @itemx -mno-regnames
7598 @opindex mregnames
7599 @opindex mno-regnames
7600 On System V.4 and embedded PowerPC systems do (do not) emit register
7601 names in the assembly language output using symbolic forms.
7603 @item -mlongcall
7604 @itemx -mno-longcall
7605 @opindex mlongcall
7606 @opindex mno-longcall
7607 Default to making all function calls indirectly, using a register, so
7608 that functions which reside further than 32 megabytes (33,554,432
7609 bytes) from the current location can be called.  This setting can be
7610 overridden by the @code{shortcall} function attribute, or by
7611 @code{#pragma longcall(0)}.
7613 Some linkers are capable of detecting out-of-range calls and generating
7614 glue code on the fly.  On these systems, long calls are unnecessary and
7615 generate slower code.  As of this writing, the AIX linker can do this,
7616 as can the GNU linker for PowerPC/64.  It is planned to add this feature
7617 to the GNU linker for 32-bit PowerPC systems as well.
7619 On Darwin/PPC systems, @code{#pragma longcall} will generate ``jbsr
7620 callee, L42'', plus a ``branch island'' (glue code).  The two target
7621 addresses represent the callee and the ``branch island.'' The
7622 Darwin/PPC linker will prefer the first address and generate a ``bl
7623 callee'' if the PPC ``bl'' instruction will reach the callee directly;
7624 otherwise, the linker will generate ``bl L42'' to call the ``branch
7625 island.''  The ``branch island'' is appended to the body of the
7626 calling function; it computes the full 32-bit address of the callee
7627 and jumps to it.
7629 On Mach-O (Darwin) systems, this option directs the compiler emit to
7630 the glue for every direct call, and the Darwin linker decides whether
7631 to use or discard it.
7633 In the future, we may cause GCC to ignore all longcall specifications
7634 when the linker is known to generate glue.
7636 @item -pthread
7637 @opindex pthread
7638 Adds support for multithreading with the @dfn{pthreads} library.
7639 This option sets flags for both the preprocessor and linker.
7641 @end table
7643 @node Darwin Options
7644 @subsection Darwin Options
7645 @cindex Darwin options
7647 These options are defined for all architectures running the Darwin operating
7648 system.  They are useful for compatibility with other Mac OS compilers.
7650 @table @gcctabopt
7651 @item -all_load
7652 @opindex all_load
7653 Loads all members of static archive libraries.
7654 See man ld(1) for more information.
7656 @item -arch_errors_fatal
7657 @opindex arch_errors_fatal
7658 Cause the errors having to do with files that have the wrong architecture
7659 to be fatal.
7661 @item -bind_at_load
7662 @opindex bind_at_load
7663 Causes the output file to be marked such that the dynamic linker will
7664 bind all undefined references when the file is loaded or launched.
7666 @item -bundle
7667 @opindex bundle
7668 Produce a Mach-o bundle format file.
7669 See man ld(1) for more information.
7671 @item -bundle_loader @var{executable}
7672 @opindex bundle_loader
7673 This specifies the @var{executable} that will be loading the build
7674 output file being linked. See man ld(1) for more information.
7676 @item -allowable_client  @var{client_name}
7677 @itemx -arch_only
7679 @itemx -client_name
7680 @itemx -compatibility_version
7681 @itemx -current_version
7682 @itemx -dependency-file
7683 @itemx -dylib_file
7684 @itemx -dylinker_install_name
7685 @itemx -dynamic
7686 @itemx -dynamiclib
7687 @itemx -exported_symbols_list
7688 @itemx -filelist
7689 @itemx -flat_namespace
7690 @itemx -force_cpusubtype_ALL
7691 @itemx -force_flat_namespace
7692 @itemx -headerpad_max_install_names
7693 @itemx -image_base
7694 @itemx -init
7695 @itemx -install_name
7696 @itemx -keep_private_externs
7697 @itemx -multi_module
7698 @itemx -multiply_defined
7699 @itemx -multiply_defined_unused
7700 @itemx -noall_load
7701 @itemx -nofixprebinding
7702 @itemx -nomultidefs
7703 @itemx -noprebind
7704 @itemx -noseglinkedit
7705 @itemx -pagezero_size
7706 @itemx -prebind
7707 @itemx -prebind_all_twolevel_modules
7708 @itemx -private_bundle
7709 @itemx -read_only_relocs
7710 @itemx -sectalign
7711 @itemx -sectobjectsymbols
7712 @itemx -whyload
7713 @itemx -seg1addr
7714 @itemx -sectcreate
7715 @itemx -sectobjectsymbols
7716 @itemx -sectorder
7717 @itemx -seg_addr_table
7718 @itemx -seg_addr_table_filename
7719 @itemx -seglinkedit
7720 @itemx -segprot
7721 @itemx -segs_read_only_addr
7722 @itemx -segs_read_write_addr
7723 @itemx -single_module
7724 @itemx -static
7725 @itemx -sub_library
7726 @itemx -sub_umbrella
7727 @itemx -twolevel_namespace
7728 @itemx -umbrella
7729 @itemx -undefined
7730 @itemx -unexported_symbols_list
7731 @itemx -weak_reference_mismatches
7732 @itemx -whatsloaded
7734 @opindex allowable_client
7735 @opindex arch_only
7736 @opindex client_name
7737 @opindex compatibility_version
7738 @opindex current_version
7739 @opindex dependency-file
7740 @opindex dylib_file
7741 @opindex dylinker_install_name
7742 @opindex dynamic
7743 @opindex dynamiclib
7744 @opindex exported_symbols_list
7745 @opindex filelist
7746 @opindex flat_namespace
7747 @opindex force_cpusubtype_ALL
7748 @opindex force_flat_namespace
7749 @opindex headerpad_max_install_names
7750 @opindex image_base
7751 @opindex init
7752 @opindex install_name
7753 @opindex keep_private_externs
7754 @opindex multi_module
7755 @opindex multiply_defined
7756 @opindex multiply_defined_unused
7757 @opindex noall_load
7758 @opindex nofixprebinding
7759 @opindex nomultidefs
7760 @opindex noprebind
7761 @opindex noseglinkedit
7762 @opindex pagezero_size
7763 @opindex prebind
7764 @opindex prebind_all_twolevel_modules
7765 @opindex private_bundle
7766 @opindex read_only_relocs
7767 @opindex sectalign
7768 @opindex sectobjectsymbols
7769 @opindex whyload
7770 @opindex seg1addr
7771 @opindex sectcreate
7772 @opindex sectobjectsymbols
7773 @opindex sectorder
7774 @opindex seg_addr_table
7775 @opindex seg_addr_table_filename
7776 @opindex seglinkedit
7777 @opindex segprot
7778 @opindex segs_read_only_addr
7779 @opindex segs_read_write_addr
7780 @opindex single_module
7781 @opindex static
7782 @opindex sub_library
7783 @opindex sub_umbrella
7784 @opindex twolevel_namespace
7785 @opindex umbrella
7786 @opindex undefined
7787 @opindex unexported_symbols_list
7788 @opindex weak_reference_mismatches
7789 @opindex whatsloaded
7791 These options are available for Darwin linker. Darwin linker man page
7792 describes them in detail.
7793 @end table
7796 @node MIPS Options
7797 @subsection MIPS Options
7798 @cindex MIPS options
7800 @table @gcctabopt
7802 @item -EB
7803 @opindex EB
7804 Generate big-endian code.
7806 @item -EL
7807 @opindex EL
7808 Generate little-endian code.  This is the default for @samp{mips*el-*-*}
7809 configurations.
7811 @item -march=@var{arch}
7812 @opindex march
7813 Generate code that will run on @var{arch}, which can be the name of a
7814 generic MIPS ISA, or the name of a particular processor.
7815 The ISA names are:
7816 @samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
7817 @samp{mips32}, @samp{mips32r2}, and @samp{mips64}.
7818 The processor names are:
7819 @samp{4kc}, @samp{4kp}, @samp{5kc}, @samp{20kc},
7820 @samp{m4k},
7821 @samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
7822 @samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000}, @samp{rm7000},
7823 @samp{rm9000},
7824 @samp{orion},
7825 @samp{sb1},
7826 @samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
7827 @samp{vr5000}, @samp{vr5400} and @samp{vr5500}.
7828 The special value @samp{from-abi} selects the
7829 most compatible architecture for the selected ABI (that is,
7830 @samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.
7832 In processor names, a final @samp{000} can be abbreviated as @samp{k}
7833 (for example, @samp{-march=r2k}).  Prefixes are optional, and
7834 @samp{vr} may be written @samp{r}.
7836 GCC defines two macros based on the value of this option.  The first
7837 is @samp{_MIPS_ARCH}, which gives the name of target architecture, as
7838 a string.  The second has the form @samp{_MIPS_ARCH_@var{foo}},
7839 where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@.
7840 For example, @samp{-march=r2000} will set @samp{_MIPS_ARCH}
7841 to @samp{"r2000"} and define the macro @samp{_MIPS_ARCH_R2000}.
7843 Note that the @samp{_MIPS_ARCH} macro uses the processor names given
7844 above.  In other words, it will have the full prefix and will not
7845 abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
7846 the macro names the resolved architecture (either @samp{"mips1"} or
7847 @samp{"mips3"}).  It names the default architecture when no
7848 @option{-march} option is given.
7850 @item -mtune=@var{arch}
7851 @opindex mtune
7852 Optimize for @var{arch}.  Among other things, this option controls
7853 the way instructions are scheduled, and the perceived cost of arithmetic
7854 operations.  The list of @var{arch} values is the same as for
7855 @option{-march}.
7857 When this option is not used, GCC will optimize for the processor
7858 specified by @option{-march}.  By using @option{-march} and
7859 @option{-mtune} together, it is possible to generate code that will
7860 run on a family of processors, but optimize the code for one
7861 particular member of that family.
7863 @samp{-mtune} defines the macros @samp{_MIPS_TUNE} and
7864 @samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the
7865 @samp{-march} ones described above.
7867 @item -mips1
7868 @opindex mips1
7869 Equivalent to @samp{-march=mips1}.
7871 @item -mips2
7872 @opindex mips2
7873 Equivalent to @samp{-march=mips2}.
7875 @item -mips3
7876 @opindex mips3
7877 Equivalent to @samp{-march=mips3}.
7879 @item -mips4
7880 @opindex mips4
7881 Equivalent to @samp{-march=mips4}.
7883 @item -mips32
7884 @opindex mips32
7885 Equivalent to @samp{-march=mips32}.
7887 @item -mips32r2
7888 @opindex mips32r2
7889 Equivalent to @samp{-march=mips32r2}.
7891 @item -mips64
7892 @opindex mips64
7893 Equivalent to @samp{-march=mips64}.
7895 @item -mips16
7896 @itemx -mno-mips16
7897 @opindex mips16
7898 @opindex mno-mips16
7899 Use (do not use) the MIPS16 ISA.
7901 @item -mabi=32
7902 @itemx -mabi=o64
7903 @itemx -mabi=n32
7904 @itemx -mabi=64
7905 @itemx -mabi=eabi
7906 @opindex mabi=32
7907 @opindex mabi=o64
7908 @opindex mabi=n32
7909 @opindex mabi=64
7910 @opindex mabi=eabi
7911 Generate code for the given ABI@.
7913 Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
7914 generates 64-bit code when you select a 64-bit architecture, but you
7915 can use @option{-mgp32} to get 32-bit code instead.
7917 For information about the O64 ABI, see
7918 @w{@uref{http://gcc.gnu.org/projects/mipso64-abi.html}}.
7920 @item -mabicalls
7921 @itemx -mno-abicalls
7922 @opindex mabicalls
7923 @opindex mno-abicalls
7924 Generate (do not generate) SVR4-style position-independent code.
7925 @option{-mabicalls} is the default for SVR4-based systems.
7927 @item -mxgot
7928 @itemx -mno-xgot
7929 @opindex mxgot
7930 @opindex mno-xgot
7931 Lift (do not lift) the usual restrictions on the size of the global
7932 offset table.
7934 GCC normally uses a single instruction to load values from the GOT.
7935 While this is relatively efficient, it will only work if the GOT
7936 is smaller than about 64k.  Anything larger will cause the linker
7937 to report an error such as:
7939 @cindex relocation truncated to fit (MIPS)
7940 @smallexample
7941 relocation truncated to fit: R_MIPS_GOT16 foobar
7942 @end smallexample
7944 If this happens, you should recompile your code with @option{-mxgot}.
7945 It should then work with very large GOTs, although it will also be
7946 less efficient, since it will take three instructions to fetch the
7947 value of a global symbol.
7949 Note that some linkers can create multiple GOTs.  If you have such a
7950 linker, you should only need to use @option{-mxgot} when a single object
7951 file accesses more than 64k's worth of GOT entries.  Very few do.
7953 These options have no effect unless GCC is generating position
7954 independent code.
7956 @item -mgp32
7957 @opindex mgp32
7958 Assume that general-purpose registers are 32 bits wide.
7960 @item -mgp64
7961 @opindex mgp64
7962 Assume that general-purpose registers are 64 bits wide.
7964 @item -mfp32
7965 @opindex mfp32
7966 Assume that floating-point registers are 32 bits wide.
7968 @item -mfp64
7969 @opindex mfp64
7970 Assume that floating-point registers are 64 bits wide.
7972 @item -mhard-float
7973 @opindex mhard-float
7974 Use floating-point coprocessor instructions.
7976 @item -msoft-float
7977 @opindex msoft-float
7978 Do not use floating-point coprocessor instructions.  Implement
7979 floating-point calculations using library calls instead.
7981 @item -msingle-float
7982 @opindex msingle-float
7983 Assume that the floating-point coprocessor only supports single-precision
7984 operations.
7986 @itemx -mdouble-float
7987 @opindex mdouble-float
7988 Assume that the floating-point coprocessor supports double-precision
7989 operations.  This is the default.
7991 @item -mint64
7992 @opindex mint64
7993 Force @code{int} and @code{long} types to be 64 bits wide.  See
7994 @option{-mlong32} for an explanation of the default and the way
7995 that the pointer size is determined.
7997 @item -mlong64
7998 @opindex mlong64
7999 Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
8000 an explanation of the default and the way that the pointer size is
8001 determined.
8003 @item -mlong32
8004 @opindex mlong32
8005 Force @code{long}, @code{int}, and pointer types to be 32 bits wide.
8007 The default size of @code{int}s, @code{long}s and pointers depends on
8008 the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
8009 uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
8010 32-bit @code{long}s.  Pointers are the same size as @code{long}s,
8011 or the same size as integer registers, whichever is smaller.
8013 @item -G @var{num}
8014 @opindex G
8015 @cindex smaller data references (MIPS)
8016 @cindex gp-relative references (MIPS)
8017 Put global and static items less than or equal to @var{num} bytes into
8018 the small data or bss section instead of the normal data or bss section.
8019 This allows the data to be accessed using a single instruction.
8021 All modules should be compiled with the same @option{-G @var{num}}
8022 value.
8024 @item -membedded-data
8025 @itemx -mno-embedded-data
8026 @opindex membedded-data
8027 @opindex mno-embedded-data
8028 Allocate variables to the read-only data section first if possible, then
8029 next in the small data section if possible, otherwise in data.  This gives
8030 slightly slower code than the default, but reduces the amount of RAM required
8031 when executing, and thus may be preferred for some embedded systems.
8033 @item -muninit-const-in-rodata
8034 @itemx -mno-uninit-const-in-rodata
8035 @opindex muninit-const-in-rodata
8036 @opindex mno-uninit-const-in-rodata
8037 Put uninitialized @code{const} variables in the read-only data section.
8038 This option is only meaningful in conjunction with @option{-membedded-data}.
8040 @item -msplit-addresses
8041 @itemx -mno-split-addresses
8042 @opindex msplit-addresses
8043 @opindex mno-split-addresses
8044 Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
8045 relocation operators.  This option has been superceded by
8046 @option{-mexplicit-relocs} but is retained for backwards compatibility.
8048 @item -mexplicit-relocs
8049 @itemx -mno-explicit-relocs
8050 @opindex mexplicit-relocs
8051 @opindex mno-explicit-relocs
8052 Use (do not use) assembler relocation operators when dealing with symbolic
8053 addresses.  The alternative, selected by @option{-mno-explicit-relocs},
8054 is to use assembler macros instead.
8056 @option{-mexplicit-relocs} is usually the default if GCC was configured
8057 to use an assembler that supports relocation operators.  However, the
8058 combination of @option{-mabicalls} and @option{-fno-unit-at-a-time}
8059 implies @option{-mno-explicit-relocs} unless explicitly overridden.
8060 This is because, when generating abicalls, the choice of relocation
8061 depends on whether a symbol is local or global.  In some rare cases,
8062 GCC will not be able to decide this until the whole compilation unit
8063 has been read.
8065 @item -mrnames
8066 @itemx -mno-rnames
8067 @opindex mrnames
8068 @opindex mno-rnames
8069 Generate (do not generate) code that refers to registers using their
8070 software names.  The default is @option{-mno-rnames}, which tells GCC
8071 to use hardware names like @samp{$4} instead of software names like
8072 @samp{a0}.  The only assembler known to support @option{-rnames} is
8073 the Algorithmics assembler.
8075 @item -mcheck-zero-division
8076 @itemx -mno-check-zero-division
8077 @opindex mcheck-zero-division
8078 @opindex mno-check-zero-division
8079 Trap (do not trap) on integer division by zero.  The default is
8080 @option{-mcheck-zero-division}.
8082 @item -mmemcpy
8083 @itemx -mno-memcpy
8084 @opindex mmemcpy
8085 @opindex mno-memcpy
8086 Force (do not force) the use of @code{memcpy()} for non-trivial block
8087 moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
8088 most constant-sized copies.
8090 @item -mlong-calls
8091 @itemx -mno-long-calls
8092 @opindex mlong-calls
8093 @opindex mno-long-calls
8094 Disable (do not disable) use of the @code{jal} instruction.  Calling
8095 functions using @code{jal} is more efficient but requires the caller
8096 and callee to be in the same 256 megabyte segment.
8098 This option has no effect on abicalls code.  The default is
8099 @option{-mno-long-calls}.
8101 @item -mmad
8102 @itemx -mno-mad
8103 @opindex mmad
8104 @opindex mno-mad
8105 Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
8106 instructions, as provided by the R4650 ISA.
8108 @item -mfused-madd
8109 @itemx -mno-fused-madd
8110 @opindex mfused-madd
8111 @opindex mno-fused-madd
8112 Enable (disable) use of the floating point multiply-accumulate
8113 instructions, when they are available.  The default is
8114 @option{-mfused-madd}.
8116 When multiply-accumulate instructions are used, the intermediate
8117 product is calculated to infinite precision and is not subject to
8118 the FCSR Flush to Zero bit.  This may be undesirable in some
8119 circumstances.
8121 @item -nocpp
8122 @opindex nocpp
8123 Tell the MIPS assembler to not run its preprocessor over user
8124 assembler files (with a @samp{.s} suffix) when assembling them.
8126 @item -mfix-r4000
8127 @itemx -mno-fix-r4000
8128 @opindex mfix-r4000
8129 @opindex mno-fix-r4000
8130 Work around certain R4000 CPU errata:
8131 @itemize @minus
8132 @item
8133 A double-word or a variable shift may give an incorrect result if executed
8134 immediately after starting an integer division.
8135 @item
8136 A double-word or a variable shift may give an incorrect result if executed
8137 while an integer multiplication is in progress.
8138 @item
8139 An integer division may give an incorrect result if started in a delay slot
8140 of a taken branch or a jump.
8141 @end itemize
8143 @item -mfix-r4400
8144 @itemx -mno-fix-r4400
8145 @opindex mfix-r4400
8146 @opindex mno-fix-r4400
8147 Work around certain R4400 CPU errata:
8148 @itemize @minus
8149 @item
8150 A double-word or a variable shift may give an incorrect result if executed
8151 immediately after starting an integer division.
8152 @end itemize
8154 @item -mfix-vr4120
8155 @itemx -mno-fix-vr4120
8156 @opindex mfix-vr4120
8157 Work around certain VR4120 errata:
8158 @itemize @minus
8159 @item
8160 @code{dmultu} does not always produce the correct result.
8161 @item
8162 @code{div} and @code{ddiv} do not always produce the correct result if one
8163 of the operands is negative.
8164 @end itemize
8165 The workarounds for the division errata rely on special functions in
8166 @file{libgcc.a}.  At present, these functions are only provided by
8167 the @code{mips64vr*-elf} configurations.
8169 Other VR4120 errata require a nop to be inserted between certain pairs of
8170 instructions.  These errata are handled by the assembler, not by GCC itself.
8172 @item -mfix-sb1
8173 @itemx -mno-fix-sb1
8174 @opindex mfix-sb1
8175 Work around certain SB-1 CPU core errata.
8176 (This flag currently works around the SB-1 revision 2
8177 ``F1'' and ``F2'' floating point errata.)
8179 @item -mflush-func=@var{func}
8180 @itemx -mno-flush-func
8181 @opindex mflush-func
8182 Specifies the function to call to flush the I and D caches, or to not
8183 call any such function.  If called, the function must take the same
8184 arguments as the common @code{_flush_func()}, that is, the address of the
8185 memory range for which the cache is being flushed, the size of the
8186 memory range, and the number 3 (to flush both caches).  The default
8187 depends on the target GCC was configured for, but commonly is either
8188 @samp{_flush_func} or @samp{__cpu_flush}.
8190 @item -mbranch-likely
8191 @itemx -mno-branch-likely
8192 @opindex mbranch-likely
8193 @opindex mno-branch-likely
8194 Enable or disable use of Branch Likely instructions, regardless of the
8195 default for the selected architecture.  By default, Branch Likely
8196 instructions may be generated if they are supported by the selected
8197 architecture.  An exception is for the MIPS32 and MIPS64 architectures
8198 and processors which implement those architectures; for those, Branch
8199 Likely instructions will not be generated by default because the MIPS32
8200 and MIPS64 architectures specifically deprecate their use.
8202 @item -mfp-exceptions
8203 @itemx -mno-fp-exceptions
8204 @opindex mfp-exceptions
8205 Specifies whether FP exceptions are enabled.  This affects how we schedule
8206 FP instructions for some processors.  The default is that FP exceptions are
8207 enabled.
8209 For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
8210 64-bit code, then we can use both FP pipes.  Otherwise, we can only use one
8211 FP pipe.
8212 @end table
8214 @node i386 and x86-64 Options
8215 @subsection Intel 386 and AMD x86-64 Options
8216 @cindex i386 Options
8217 @cindex x86-64 Options
8218 @cindex Intel 386 Options
8219 @cindex AMD x86-64 Options
8221 These @samp{-m} options are defined for the i386 and x86-64 family of
8222 computers:
8224 @table @gcctabopt
8225 @item -mtune=@var{cpu-type}
8226 @opindex mtune
8227 Tune to @var{cpu-type} everything applicable about the generated code, except
8228 for the ABI and the set of available instructions.  The choices for
8229 @var{cpu-type} are:
8230 @table @emph
8231 @item i386
8232 Original Intel's i386 CPU.
8233 @item i486
8234 Intel's i486 CPU.  (No scheduling is implemented for this chip.)
8235 @item i586, pentium
8236 Intel Pentium CPU with no MMX support.
8237 @item pentium-mmx
8238 Intel PentiumMMX CPU based on Pentium core with MMX instruction set support.
8239 @item i686, pentiumpro
8240 Intel PentiumPro CPU.
8241 @item pentium2
8242 Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support.
8243 @item pentium3, pentium3m
8244 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set
8245 support.
8246 @item pentium-m
8247 Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set
8248 support.  Used by Centrino notebooks.
8249 @item pentium4, pentium4m
8250 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support.
8251 @item prescott
8252 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction
8253 set support.
8254 @item nocona
8255 Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE,
8256 SSE2 and SSE3 instruction set support.
8257 @item k6
8258 AMD K6 CPU with MMX instruction set support.
8259 @item k6-2, k6-3
8260 Improved versions of AMD K6 CPU with MMX and 3dNOW! instruction set support.
8261 @item athlon, athlon-tbird
8262 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE prefetch instructions
8263 support.
8264 @item athlon-4, athlon-xp, athlon-mp
8265 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and full SSE
8266 instruction set support.
8267 @item k8, opteron, athlon64, athlon-fx
8268 AMD K8 core based CPUs with x86-64 instruction set support.  (This supersets
8269 MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set extensions.)
8270 @item winchip-c6
8271 IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction
8272 set support.
8273 @item winchip2
8274 IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3dNOW!
8275 instruction set support.
8276 @item c3
8277 Via C3 CPU with MMX and 3dNOW!  instruction set support.  (No scheduling is
8278 implemented for this chip.)
8279 @item c3-2
8280 Via C3-2 CPU with MMX and SSE instruction set support.  (No scheduling is
8281 implemented for this chip.)
8282 @end table
8284 While picking a specific @var{cpu-type} will schedule things appropriately
8285 for that particular chip, the compiler will not generate any code that
8286 does not run on the i386 without the @option{-march=@var{cpu-type}} option
8287 being used.
8289 @item -march=@var{cpu-type}
8290 @opindex march
8291 Generate instructions for the machine type @var{cpu-type}.  The choices
8292 for @var{cpu-type} are the same as for @option{-mtune}.  Moreover,
8293 specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}.
8295 @item -mcpu=@var{cpu-type}
8296 @opindex mcpu
8297 A deprecated synonym for @option{-mtune}.
8299 @item -m386
8300 @itemx -m486
8301 @itemx -mpentium
8302 @itemx -mpentiumpro
8303 @opindex m386
8304 @opindex m486
8305 @opindex mpentium
8306 @opindex mpentiumpro
8307 These options are synonyms for @option{-mtune=i386}, @option{-mtune=i486},
8308 @option{-mtune=pentium}, and @option{-mtune=pentiumpro} respectively.
8309 These synonyms are deprecated.
8311 @item -mfpmath=@var{unit}
8312 @opindex march
8313 Generate floating point arithmetics for selected unit @var{unit}.  The choices
8314 for @var{unit} are:
8316 @table @samp
8317 @item 387
8318 Use the standard 387 floating point coprocessor present majority of chips and
8319 emulated otherwise.  Code compiled with this option will run almost everywhere.
8320 The temporary results are computed in 80bit precision instead of precision
8321 specified by the type resulting in slightly different results compared to most
8322 of other chips. See @option{-ffloat-store} for more detailed description.
8324 This is the default choice for i386 compiler.
8326 @item sse
8327 Use scalar floating point instructions present in the SSE instruction set.
8328 This instruction set is supported by Pentium3 and newer chips, in the AMD line
8329 by Athlon-4, Athlon-xp and Athlon-mp chips.  The earlier version of SSE
8330 instruction set supports only single precision arithmetics, thus the double and
8331 extended precision arithmetics is still done using 387.  Later version, present
8332 only in Pentium4 and the future AMD x86-64 chips supports double precision
8333 arithmetics too.
8335 For i387 you need to use @option{-march=@var{cpu-type}}, @option{-msse} or
8336 @option{-msse2} switches to enable SSE extensions and make this option
8337 effective.  For x86-64 compiler, these extensions are enabled by default.
8339 The resulting code should be considerably faster in the majority of cases and avoid
8340 the numerical instability problems of 387 code, but may break some existing
8341 code that expects temporaries to be 80bit.
8343 This is the default choice for the x86-64 compiler.
8345 @item sse,387
8346 Attempt to utilize both instruction sets at once.  This effectively double the
8347 amount of available registers and on chips with separate execution units for
8348 387 and SSE the execution resources too.  Use this option with care, as it is
8349 still experimental, because the GCC register allocator does not model separate
8350 functional units well resulting in instable performance.
8351 @end table
8353 @item -masm=@var{dialect}
8354 @opindex masm=@var{dialect}
8355 Output asm instructions using selected @var{dialect}. Supported choices are
8356 @samp{intel} or @samp{att} (the default one).
8358 @item -mieee-fp
8359 @itemx -mno-ieee-fp
8360 @opindex mieee-fp
8361 @opindex mno-ieee-fp
8362 Control whether or not the compiler uses IEEE floating point
8363 comparisons.  These handle correctly the case where the result of a
8364 comparison is unordered.
8366 @item -msoft-float
8367 @opindex msoft-float
8368 Generate output containing library calls for floating point.
8369 @strong{Warning:} the requisite libraries are not part of GCC@.
8370 Normally the facilities of the machine's usual C compiler are used, but
8371 this can't be done directly in cross-compilation.  You must make your
8372 own arrangements to provide suitable library functions for
8373 cross-compilation.
8375 On machines where a function returns floating point results in the 80387
8376 register stack, some floating point opcodes may be emitted even if
8377 @option{-msoft-float} is used.
8379 @item -mno-fp-ret-in-387
8380 @opindex mno-fp-ret-in-387
8381 Do not use the FPU registers for return values of functions.
8383 The usual calling convention has functions return values of types
8384 @code{float} and @code{double} in an FPU register, even if there
8385 is no FPU@.  The idea is that the operating system should emulate
8386 an FPU@.
8388 The option @option{-mno-fp-ret-in-387} causes such values to be returned
8389 in ordinary CPU registers instead.
8391 @item -mno-fancy-math-387
8392 @opindex mno-fancy-math-387
8393 Some 387 emulators do not support the @code{sin}, @code{cos} and
8394 @code{sqrt} instructions for the 387.  Specify this option to avoid
8395 generating those instructions.  This option is the default on FreeBSD,
8396 OpenBSD and NetBSD@.  This option is overridden when @option{-march}
8397 indicates that the target cpu will always have an FPU and so the
8398 instruction will not need emulation.  As of revision 2.6.1, these
8399 instructions are not generated unless you also use the
8400 @option{-funsafe-math-optimizations} switch.
8402 @item -malign-double
8403 @itemx -mno-align-double
8404 @opindex malign-double
8405 @opindex mno-align-double
8406 Control whether GCC aligns @code{double}, @code{long double}, and
8407 @code{long long} variables on a two word boundary or a one word
8408 boundary.  Aligning @code{double} variables on a two word boundary will
8409 produce code that runs somewhat faster on a @samp{Pentium} at the
8410 expense of more memory.
8412 @strong{Warning:} if you use the @option{-malign-double} switch,
8413 structures containing the above types will be aligned differently than
8414 the published application binary interface specifications for the 386
8415 and will not be binary compatible with structures in code compiled
8416 without that switch.
8418 @item -m96bit-long-double
8419 @itemx -m128bit-long-double
8420 @opindex m96bit-long-double
8421 @opindex m128bit-long-double
8422 These switches control the size of @code{long double} type. The i386
8423 application binary interface specifies the size to be 96 bits,
8424 so @option{-m96bit-long-double} is the default in 32 bit mode.
8426 Modern architectures (Pentium and newer) would prefer @code{long double}
8427 to be aligned to an 8 or 16 byte boundary.  In arrays or structures
8428 conforming to the ABI, this would not be possible.  So specifying a
8429 @option{-m128bit-long-double} will align @code{long double}
8430 to a 16 byte boundary by padding the @code{long double} with an additional
8431 32 bit zero.
8433 In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
8434 its ABI specifies that @code{long double} is to be aligned on 16 byte boundary.
8436 Notice that neither of these options enable any extra precision over the x87
8437 standard of 80 bits for a @code{long double}.
8439 @strong{Warning:} if you override the default value for your target ABI, the
8440 structures and arrays containing @code{long double} variables will change
8441 their size as well as function calling convention for function taking
8442 @code{long double} will be modified.  Hence they will not be binary
8443 compatible with arrays or structures in code compiled without that switch.
8446 @item -msvr3-shlib
8447 @itemx -mno-svr3-shlib
8448 @opindex msvr3-shlib
8449 @opindex mno-svr3-shlib
8450 Control whether GCC places uninitialized local variables into the
8451 @code{bss} or @code{data} segments.  @option{-msvr3-shlib} places them
8452 into @code{bss}.  These options are meaningful only on System V Release 3.
8454 @item -mrtd
8455 @opindex mrtd
8456 Use a different function-calling convention, in which functions that
8457 take a fixed number of arguments return with the @code{ret} @var{num}
8458 instruction, which pops their arguments while returning.  This saves one
8459 instruction in the caller since there is no need to pop the arguments
8460 there.
8462 You can specify that an individual function is called with this calling
8463 sequence with the function attribute @samp{stdcall}.  You can also
8464 override the @option{-mrtd} option by using the function attribute
8465 @samp{cdecl}.  @xref{Function Attributes}.
8467 @strong{Warning:} this calling convention is incompatible with the one
8468 normally used on Unix, so you cannot use it if you need to call
8469 libraries compiled with the Unix compiler.
8471 Also, you must provide function prototypes for all functions that
8472 take variable numbers of arguments (including @code{printf});
8473 otherwise incorrect code will be generated for calls to those
8474 functions.
8476 In addition, seriously incorrect code will result if you call a
8477 function with too many arguments.  (Normally, extra arguments are
8478 harmlessly ignored.)
8480 @item -mregparm=@var{num}
8481 @opindex mregparm
8482 Control how many registers are used to pass integer arguments.  By
8483 default, no registers are used to pass arguments, and at most 3
8484 registers can be used.  You can control this behavior for a specific
8485 function by using the function attribute @samp{regparm}.
8486 @xref{Function Attributes}.
8488 @strong{Warning:} if you use this switch, and
8489 @var{num} is nonzero, then you must build all modules with the same
8490 value, including any libraries.  This includes the system libraries and
8491 startup modules.
8493 @item -mpreferred-stack-boundary=@var{num}
8494 @opindex mpreferred-stack-boundary
8495 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
8496 byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
8497 the default is 4 (16 bytes or 128 bits), except when optimizing for code
8498 size (@option{-Os}), in which case the default is the minimum correct
8499 alignment (4 bytes for x86, and 8 bytes for x86-64).
8501 On Pentium and PentiumPro, @code{double} and @code{long double} values
8502 should be aligned to an 8 byte boundary (see @option{-malign-double}) or
8503 suffer significant run time performance penalties.  On Pentium III, the
8504 Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar
8505 penalties if it is not 16 byte aligned.
8507 To ensure proper alignment of this values on the stack, the stack boundary
8508 must be as aligned as that required by any value stored on the stack.
8509 Further, every function must be generated such that it keeps the stack
8510 aligned.  Thus calling a function compiled with a higher preferred
8511 stack boundary from a function compiled with a lower preferred stack
8512 boundary will most likely misalign the stack.  It is recommended that
8513 libraries that use callbacks always use the default setting.
8515 This extra alignment does consume extra stack space, and generally
8516 increases code size.  Code that is sensitive to stack space usage, such
8517 as embedded systems and operating system kernels, may want to reduce the
8518 preferred alignment to @option{-mpreferred-stack-boundary=2}.
8520 @item -mmmx
8521 @itemx -mno-mmx
8522 @item -msse
8523 @itemx -mno-sse
8524 @item -msse2
8525 @itemx -mno-sse2
8526 @item -msse3
8527 @itemx -mno-sse3
8528 @item -m3dnow
8529 @itemx -mno-3dnow
8530 @opindex mmmx
8531 @opindex mno-mmx
8532 @opindex msse
8533 @opindex mno-sse
8534 @opindex m3dnow
8535 @opindex mno-3dnow
8536 These switches enable or disable the use of built-in functions that allow
8537 direct access to the MMX, SSE, SSE2, SSE3 and 3Dnow extensions of the
8538 instruction set.
8540 @xref{X86 Built-in Functions}, for details of the functions enabled
8541 and disabled by these switches.
8543 To have SSE/SSE2 instructions generated automatically from floating-point
8544 code, see @option{-mfpmath=sse}.
8546 @item -mpush-args
8547 @itemx -mno-push-args
8548 @opindex mpush-args
8549 @opindex mno-push-args
8550 Use PUSH operations to store outgoing parameters.  This method is shorter
8551 and usually equally fast as method using SUB/MOV operations and is enabled
8552 by default.  In some cases disabling it may improve performance because of
8553 improved scheduling and reduced dependencies.
8555 @item -maccumulate-outgoing-args
8556 @opindex maccumulate-outgoing-args
8557 If enabled, the maximum amount of space required for outgoing arguments will be
8558 computed in the function prologue.  This is faster on most modern CPUs
8559 because of reduced dependencies, improved scheduling and reduced stack usage
8560 when preferred stack boundary is not equal to 2.  The drawback is a notable
8561 increase in code size.  This switch implies @option{-mno-push-args}.
8563 @item -mthreads
8564 @opindex mthreads
8565 Support thread-safe exception handling on @samp{Mingw32}.  Code that relies
8566 on thread-safe exception handling must compile and link all code with the
8567 @option{-mthreads} option.  When compiling, @option{-mthreads} defines
8568 @option{-D_MT}; when linking, it links in a special thread helper library
8569 @option{-lmingwthrd} which cleans up per thread exception handling data.
8571 @item -mno-align-stringops
8572 @opindex mno-align-stringops
8573 Do not align destination of inlined string operations.  This switch reduces
8574 code size and improves performance in case the destination is already aligned,
8575 but GCC doesn't know about it.
8577 @item -minline-all-stringops
8578 @opindex minline-all-stringops
8579 By default GCC inlines string operations only when destination is known to be
8580 aligned at least to 4 byte boundary.  This enables more inlining, increase code
8581 size, but may improve performance of code that depends on fast memcpy, strlen
8582 and memset for short lengths.
8584 @item -momit-leaf-frame-pointer
8585 @opindex momit-leaf-frame-pointer
8586 Don't keep the frame pointer in a register for leaf functions.  This
8587 avoids the instructions to save, set up and restore frame pointers and
8588 makes an extra register available in leaf functions.  The option
8589 @option{-fomit-frame-pointer} removes the frame pointer for all functions
8590 which might make debugging harder.
8592 @item -mtls-direct-seg-refs
8593 @itemx -mno-tls-direct-seg-refs
8594 @opindex mtls-direct-seg-refs
8595 Controls whether TLS variables may be accessed with offsets from the
8596 TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
8597 or whether the thread base pointer must be added.  Whether or not this
8598 is legal depends on the operating system, and whether it maps the
8599 segment to cover the entire TLS area.
8601 For systems that use GNU libc, the default is on.
8602 @end table
8604 These @samp{-m} switches are supported in addition to the above
8605 on AMD x86-64 processors in 64-bit environments.
8607 @table @gcctabopt
8608 @item -m32
8609 @itemx -m64
8610 @opindex m32
8611 @opindex m64
8612 Generate code for a 32-bit or 64-bit environment.
8613 The 32-bit environment sets int, long and pointer to 32 bits and
8614 generates code that runs on any i386 system.
8615 The 64-bit environment sets int to 32 bits and long and pointer
8616 to 64 bits and generates code for AMD's x86-64 architecture.
8618 @item -mno-red-zone
8619 @opindex no-red-zone
8620 Do not use a so called red zone for x86-64 code.  The red zone is mandated
8621 by the x86-64 ABI, it is a 128-byte area beyond the location of the
8622 stack pointer that will not be modified by signal or interrupt handlers
8623 and therefore can be used for temporary data without adjusting the stack
8624 pointer.  The flag @option{-mno-red-zone} disables this red zone.
8626 @item -mcmodel=small
8627 @opindex mcmodel=small
8628 Generate code for the small code model: the program and its symbols must
8629 be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
8630 Programs can be statically or dynamically linked.  This is the default
8631 code model.
8633 @item -mcmodel=kernel
8634 @opindex mcmodel=kernel
8635 Generate code for the kernel code model.  The kernel runs in the
8636 negative 2 GB of the address space.
8637 This model has to be used for Linux kernel code.
8639 @item -mcmodel=medium
8640 @opindex mcmodel=medium
8641 Generate code for the medium model: The program is linked in the lower 2
8642 GB of the address space but symbols can be located anywhere in the
8643 address space.  Programs can be statically or dynamically linked, but
8644 building of shared libraries are not supported with the medium model.
8646 @item -mcmodel=large
8647 @opindex mcmodel=large
8648 Generate code for the large model: This model makes no assumptions
8649 about addresses and sizes of sections.  Currently GCC does not implement
8650 this model.
8651 @end table
8653 @node HPPA Options
8654 @subsection HPPA Options
8655 @cindex HPPA Options
8657 These @samp{-m} options are defined for the HPPA family of computers:
8659 @table @gcctabopt
8660 @item -march=@var{architecture-type}
8661 @opindex march
8662 Generate code for the specified architecture.  The choices for
8663 @var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
8664 1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
8665 @file{/usr/lib/sched.models} on an HP-UX system to determine the proper
8666 architecture option for your machine.  Code compiled for lower numbered
8667 architectures will run on higher numbered architectures, but not the
8668 other way around.
8670 PA 2.0 support currently requires gas snapshot 19990413 or later.  The
8671 next release of binutils (current is 2.9.1) will probably contain PA 2.0
8672 support.
8674 @item -mpa-risc-1-0
8675 @itemx -mpa-risc-1-1
8676 @itemx -mpa-risc-2-0
8677 @opindex mpa-risc-1-0
8678 @opindex mpa-risc-1-1
8679 @opindex mpa-risc-2-0
8680 Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
8682 @item -mbig-switch
8683 @opindex mbig-switch
8684 Generate code suitable for big switch tables.  Use this option only if
8685 the assembler/linker complain about out of range branches within a switch
8686 table.
8688 @item -mjump-in-delay
8689 @opindex mjump-in-delay
8690 Fill delay slots of function calls with unconditional jump instructions
8691 by modifying the return pointer for the function call to be the target
8692 of the conditional jump.
8694 @item -mdisable-fpregs
8695 @opindex mdisable-fpregs
8696 Prevent floating point registers from being used in any manner.  This is
8697 necessary for compiling kernels which perform lazy context switching of
8698 floating point registers.  If you use this option and attempt to perform
8699 floating point operations, the compiler will abort.
8701 @item -mdisable-indexing
8702 @opindex mdisable-indexing
8703 Prevent the compiler from using indexing address modes.  This avoids some
8704 rather obscure problems when compiling MIG generated code under MACH@.
8706 @item -mno-space-regs
8707 @opindex mno-space-regs
8708 Generate code that assumes the target has no space registers.  This allows
8709 GCC to generate faster indirect calls and use unscaled index address modes.
8711 Such code is suitable for level 0 PA systems and kernels.
8713 @item -mfast-indirect-calls
8714 @opindex mfast-indirect-calls
8715 Generate code that assumes calls never cross space boundaries.  This
8716 allows GCC to emit code which performs faster indirect calls.
8718 This option will not work in the presence of shared libraries or nested
8719 functions.
8721 @item -mlong-load-store
8722 @opindex mlong-load-store
8723 Generate 3-instruction load and store sequences as sometimes required by
8724 the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
8725 the HP compilers.
8727 @item -mportable-runtime
8728 @opindex mportable-runtime
8729 Use the portable calling conventions proposed by HP for ELF systems.
8731 @item -mgas
8732 @opindex mgas
8733 Enable the use of assembler directives only GAS understands.
8735 @item -mschedule=@var{cpu-type}
8736 @opindex mschedule
8737 Schedule code according to the constraints for the machine type
8738 @var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
8739 @samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
8740 to @file{/usr/lib/sched.models} on an HP-UX system to determine the
8741 proper scheduling option for your machine.  The default scheduling is
8742 @samp{8000}.
8744 @item -mlinker-opt
8745 @opindex mlinker-opt
8746 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
8747 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
8748 linkers in which they give bogus error messages when linking some programs.
8750 @item -msoft-float
8751 @opindex msoft-float
8752 Generate output containing library calls for floating point.
8753 @strong{Warning:} the requisite libraries are not available for all HPPA
8754 targets.  Normally the facilities of the machine's usual C compiler are
8755 used, but this cannot be done directly in cross-compilation.  You must make
8756 your own arrangements to provide suitable library functions for
8757 cross-compilation.  The embedded target @samp{hppa1.1-*-pro}
8758 does provide software floating point support.
8760 @option{-msoft-float} changes the calling convention in the output file;
8761 therefore, it is only useful if you compile @emph{all} of a program with
8762 this option.  In particular, you need to compile @file{libgcc.a}, the
8763 library that comes with GCC, with @option{-msoft-float} in order for
8764 this to work.
8766 @item -msio
8767 @opindex msio
8768 Generate the predefine, @code{_SIO}, for server IO.  The default is
8769 @option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
8770 @code{__hp9000s700__} and @code{_WSIO}, for workstation IO.  These
8771 options are available under HP-UX and HI-UX.
8773 @item -mgnu-ld
8774 @opindex gnu-ld
8775 Use GNU ld specific options.  This passes @option{-shared} to ld when
8776 building a shared library.  It is the default when GCC is configured,
8777 explicitly or implicitly, with the GNU linker.  This option does not
8778 have any affect on which ld is called, it only changes what parameters
8779 are passed to that ld.  The ld that is called is determined by the
8780 @option{--with-ld} configure option, GCC's program search path, and
8781 finally by the user's @env{PATH}.  The linker used by GCC can be printed
8782 using @samp{which `gcc -print-prog-name=ld`}.
8784 @item -mhp-ld
8785 @opindex hp-ld
8786 Use HP ld specific options.  This passes @option{-b} to ld when building
8787 a shared library and passes @option{+Accept TypeMismatch} to ld on all
8788 links.  It is the default when GCC is configured, explicitly or
8789 implicitly, with the HP linker.  This option does not have any affect on
8790 which ld is called, it only changes what parameters are passed to that
8791 ld.  The ld that is called is determined by the @option{--with-ld}
8792 configure option, GCC's program search path, and finally by the user's
8793 @env{PATH}.  The linker used by GCC can be printed using @samp{which
8794 `gcc -print-prog-name=ld`}.
8796 @item -mfdpic
8797 @opindex mfdpic
8799 Select the FDPIC ABI, that uses function descriptors to represent
8800 pointers to functions.  Without any PIC/PIE-related options, it
8801 implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
8802 assumes GOT entries and small data are within a 12-bit range from the
8803 GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
8804 are computed with 32 bits.
8806 @item -minline-plt
8807 @opindex minline-plt
8809 Enable inlining of PLT entries in function calls to functions that are
8810 not known to bind locally.  It has no effect without @option{-mfdpic}.
8811 It's enabled by default if optimizing for speed and compiling for
8812 shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
8813 optimization option such as @option{-O3} or above is present in the
8814 command line.
8816 @item -mgprel-ro
8817 @opindex mgprel-ro
8819 Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
8820 that is known to be in read-only sections.  It's enabled by default,
8821 except for @option{-fpic} or @option{-fpie}: even though it may help
8822 make the global offset table smaller, it trades 1 instruction for 4.
8823 With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
8824 one of which may be shared by multiple symbols, and it avoids the need
8825 for a GOT entry for the referenced symbol, so it's more likely to be a
8826 win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.
8828 @item -multilib-library-pic
8829 @opindex multilib-library-pic
8831 Link with the (library, not FD) pic libraries.  It's implied by
8832 @option{-mlibrary-pic}, as well as by @option{-fPIC} and
8833 @option{-fpic} without @option{-mfdpic}.  You should never have to use
8834 it explicitly.
8836 @item -mlinked-fp
8837 @opindex mlinked-fp
8839 Follow the EABI requirement of always creating a frame pointer whenever
8840 a stack frame is allocated.  This option is enabled by default and can
8841 be disabled with @option{-mno-linked-fp}.
8843 @item -mlong-calls
8844 @opindex mno-long-calls
8845 Generate code that uses long call sequences.  This ensures that a call
8846 is always able to reach linker generated stubs.  The default is to generate
8847 long calls only when the distance from the call site to the beginning
8848 of the function or translation unit, as the case may be, exceeds a
8849 predefined limit set by the branch type being used.  The limits for
8850 normal calls are 7,600,000 and 240,000 bytes, respectively for the
8851 PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
8852 240,000 bytes.
8854 Distances are measured from the beginning of functions when using the
8855 @option{-ffunction-sections} option, or when using the @option{-mgas}
8856 and @option{-mno-portable-runtime} options together under HP-UX with
8857 the SOM linker.
8859 It is normally not desirable to use this option as it will degrade
8860 performance.  However, it may be useful in large applications,
8861 particularly when partial linking is used to build the application.
8863 The types of long calls used depends on the capabilities of the
8864 assembler and linker, and the type of code being generated.  The
8865 impact on systems that support long absolute calls, and long pic
8866 symbol-difference or pc-relative calls should be relatively small.
8867 However, an indirect call is used on 32-bit ELF systems in pic code
8868 and it is quite long.
8870 @item -nolibdld
8871 @opindex nolibdld
8872 Suppress the generation of link options to search libdld.sl when the
8873 @option{-static} option is specified on HP-UX 10 and later.
8875 @item -static
8876 @opindex static
8877 The HP-UX implementation of setlocale in libc has a dependency on
8878 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
8879 when the @option{-static} option is specified, special link options
8880 are needed to resolve this dependency.
8882 On HP-UX 10 and later, the GCC driver adds the necessary options to
8883 link with libdld.sl when the @option{-static} option is specified.
8884 This causes the resulting binary to be dynamic.  On the 64-bit port,
8885 the linkers generate dynamic binaries by default in any case.  The
8886 @option{-nolibdld} option can be used to prevent the GCC driver from
8887 adding these link options.
8889 @item -threads
8890 @opindex threads
8891 Add support for multithreading with the @dfn{dce thread} library
8892 under HP-UX.  This option sets flags for both the preprocessor and
8893 linker.
8894 @end table
8896 @node DEC Alpha Options
8897 @subsection DEC Alpha Options
8899 These @samp{-m} options are defined for the DEC Alpha implementations:
8901 @table @gcctabopt
8902 @item -mno-soft-float
8903 @itemx -msoft-float
8904 @opindex mno-soft-float
8905 @opindex msoft-float
8906 Use (do not use) the hardware floating-point instructions for
8907 floating-point operations.  When @option{-msoft-float} is specified,
8908 functions in @file{libgcc.a} will be used to perform floating-point
8909 operations.  Unless they are replaced by routines that emulate the
8910 floating-point operations, or compiled in such a way as to call such
8911 emulations routines, these routines will issue floating-point
8912 operations.   If you are compiling for an Alpha without floating-point
8913 operations, you must ensure that the library is built so as not to call
8914 them.
8916 Note that Alpha implementations without floating-point operations are
8917 required to have floating-point registers.
8919 @item -mfp-reg
8920 @itemx -mno-fp-regs
8921 @opindex mfp-reg
8922 @opindex mno-fp-regs
8923 Generate code that uses (does not use) the floating-point register set.
8924 @option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
8925 register set is not used, floating point operands are passed in integer
8926 registers as if they were integers and floating-point results are passed
8927 in @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
8928 so any function with a floating-point argument or return value called by code
8929 compiled with @option{-mno-fp-regs} must also be compiled with that
8930 option.
8932 A typical use of this option is building a kernel that does not use,
8933 and hence need not save and restore, any floating-point registers.
8935 @item -mieee
8936 @opindex mieee
8937 The Alpha architecture implements floating-point hardware optimized for
8938 maximum performance.  It is mostly compliant with the IEEE floating
8939 point standard.  However, for full compliance, software assistance is
8940 required.  This option generates code fully IEEE compliant code
8941 @emph{except} that the @var{inexact-flag} is not maintained (see below).
8942 If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
8943 defined during compilation.  The resulting code is less efficient but is
8944 able to correctly support denormalized numbers and exceptional IEEE
8945 values such as not-a-number and plus/minus infinity.  Other Alpha
8946 compilers call this option @option{-ieee_with_no_inexact}.
8948 @item -mieee-with-inexact
8949 @opindex mieee-with-inexact
8950 This is like @option{-mieee} except the generated code also maintains
8951 the IEEE @var{inexact-flag}.  Turning on this option causes the
8952 generated code to implement fully-compliant IEEE math.  In addition to
8953 @code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
8954 macro.  On some Alpha implementations the resulting code may execute
8955 significantly slower than the code generated by default.  Since there is
8956 very little code that depends on the @var{inexact-flag}, you should
8957 normally not specify this option.  Other Alpha compilers call this
8958 option @option{-ieee_with_inexact}.
8960 @item -mfp-trap-mode=@var{trap-mode}
8961 @opindex mfp-trap-mode
8962 This option controls what floating-point related traps are enabled.
8963 Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
8964 The trap mode can be set to one of four values:
8966 @table @samp
8967 @item n
8968 This is the default (normal) setting.  The only traps that are enabled
8969 are the ones that cannot be disabled in software (e.g., division by zero
8970 trap).
8972 @item u
8973 In addition to the traps enabled by @samp{n}, underflow traps are enabled
8974 as well.
8976 @item su
8977 Like @samp{su}, but the instructions are marked to be safe for software
8978 completion (see Alpha architecture manual for details).
8980 @item sui
8981 Like @samp{su}, but inexact traps are enabled as well.
8982 @end table
8984 @item -mfp-rounding-mode=@var{rounding-mode}
8985 @opindex mfp-rounding-mode
8986 Selects the IEEE rounding mode.  Other Alpha compilers call this option
8987 @option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
8990 @table @samp
8991 @item n
8992 Normal IEEE rounding mode.  Floating point numbers are rounded towards
8993 the nearest machine number or towards the even machine number in case
8994 of a tie.
8996 @item m
8997 Round towards minus infinity.
8999 @item c
9000 Chopped rounding mode.  Floating point numbers are rounded towards zero.
9002 @item d
9003 Dynamic rounding mode.  A field in the floating point control register
9004 (@var{fpcr}, see Alpha architecture reference manual) controls the
9005 rounding mode in effect.  The C library initializes this register for
9006 rounding towards plus infinity.  Thus, unless your program modifies the
9007 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.
9008 @end table
9010 @item -mtrap-precision=@var{trap-precision}
9011 @opindex mtrap-precision
9012 In the Alpha architecture, floating point traps are imprecise.  This
9013 means without software assistance it is impossible to recover from a
9014 floating trap and program execution normally needs to be terminated.
9015 GCC can generate code that can assist operating system trap handlers
9016 in determining the exact location that caused a floating point trap.
9017 Depending on the requirements of an application, different levels of
9018 precisions can be selected:
9020 @table @samp
9021 @item p
9022 Program precision.  This option is the default and means a trap handler
9023 can only identify which program caused a floating point exception.
9025 @item f
9026 Function precision.  The trap handler can determine the function that
9027 caused a floating point exception.
9029 @item i
9030 Instruction precision.  The trap handler can determine the exact
9031 instruction that caused a floating point exception.
9032 @end table
9034 Other Alpha compilers provide the equivalent options called
9035 @option{-scope_safe} and @option{-resumption_safe}.
9037 @item -mieee-conformant
9038 @opindex mieee-conformant
9039 This option marks the generated code as IEEE conformant.  You must not
9040 use this option unless you also specify @option{-mtrap-precision=i} and either
9041 @option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
9042 is to emit the line @samp{.eflag 48} in the function prologue of the
9043 generated assembly file.  Under DEC Unix, this has the effect that
9044 IEEE-conformant math library routines will be linked in.
9046 @item -mbuild-constants
9047 @opindex mbuild-constants
9048 Normally GCC examines a 32- or 64-bit integer constant to
9049 see if it can construct it from smaller constants in two or three
9050 instructions.  If it cannot, it will output the constant as a literal and
9051 generate code to load it from the data segment at runtime.
9053 Use this option to require GCC to construct @emph{all} integer constants
9054 using code, even if it takes more instructions (the maximum is six).
9056 You would typically use this option to build a shared library dynamic
9057 loader.  Itself a shared library, it must relocate itself in memory
9058 before it can find the variables and constants in its own data segment.
9060 @item -malpha-as
9061 @itemx -mgas
9062 @opindex malpha-as
9063 @opindex mgas
9064 Select whether to generate code to be assembled by the vendor-supplied
9065 assembler (@option{-malpha-as}) or by the GNU assembler @option{-mgas}.
9067 @item -mbwx
9068 @itemx -mno-bwx
9069 @itemx -mcix
9070 @itemx -mno-cix
9071 @itemx -mfix
9072 @itemx -mno-fix
9073 @itemx -mmax
9074 @itemx -mno-max
9075 @opindex mbwx
9076 @opindex mno-bwx
9077 @opindex mcix
9078 @opindex mno-cix
9079 @opindex mfix
9080 @opindex mno-fix
9081 @opindex mmax
9082 @opindex mno-max
9083 Indicate whether GCC should generate code to use the optional BWX,
9084 CIX, FIX and MAX instruction sets.  The default is to use the instruction
9085 sets supported by the CPU type specified via @option{-mcpu=} option or that
9086 of the CPU on which GCC was built if none was specified.
9088 @item -mfloat-vax
9089 @itemx -mfloat-ieee
9090 @opindex mfloat-vax
9091 @opindex mfloat-ieee
9092 Generate code that uses (does not use) VAX F and G floating point
9093 arithmetic instead of IEEE single and double precision.
9095 @item -mexplicit-relocs
9096 @itemx -mno-explicit-relocs
9097 @opindex mexplicit-relocs
9098 @opindex mno-explicit-relocs
9099 Older Alpha assemblers provided no way to generate symbol relocations
9100 except via assembler macros.  Use of these macros does not allow
9101 optimal instruction scheduling.  GNU binutils as of version 2.12
9102 supports a new syntax that allows the compiler to explicitly mark
9103 which relocations should apply to which instructions.  This option
9104 is mostly useful for debugging, as GCC detects the capabilities of
9105 the assembler when it is built and sets the default accordingly.
9107 @item -msmall-data
9108 @itemx -mlarge-data
9109 @opindex msmall-data
9110 @opindex mlarge-data
9111 When @option{-mexplicit-relocs} is in effect, static data is
9112 accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
9113 is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
9114 (the @code{.sdata} and @code{.sbss} sections) and are accessed via
9115 16-bit relocations off of the @code{$gp} register.  This limits the
9116 size of the small data area to 64KB, but allows the variables to be
9117 directly accessed via a single instruction.
9119 The default is @option{-mlarge-data}.  With this option the data area
9120 is limited to just below 2GB.  Programs that require more than 2GB of
9121 data must use @code{malloc} or @code{mmap} to allocate the data in the
9122 heap instead of in the program's data segment.
9124 When generating code for shared libraries, @option{-fpic} implies
9125 @option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.
9127 @item -msmall-text
9128 @itemx -mlarge-text
9129 @opindex msmall-text
9130 @opindex mlarge-text
9131 When @option{-msmall-text} is used, the compiler assumes that the
9132 code of the entire program (or shared library) fits in 4MB, and is
9133 thus reachable with a branch instruction.  When @option{-msmall-data}
9134 is used, the compiler can assume that all local symbols share the
9135 same @code{$gp} value, and thus reduce the number of instructions
9136 required for a function call from 4 to 1.
9138 The default is @option{-mlarge-text}.
9140 @item -mcpu=@var{cpu_type}
9141 @opindex mcpu
9142 Set the instruction set and instruction scheduling parameters for
9143 machine type @var{cpu_type}.  You can specify either the @samp{EV}
9144 style name or the corresponding chip number.  GCC supports scheduling
9145 parameters for the EV4, EV5 and EV6 family of processors and will
9146 choose the default values for the instruction set from the processor
9147 you specify.  If you do not specify a processor type, GCC will default
9148 to the processor on which the compiler was built.
9150 Supported values for @var{cpu_type} are
9152 @table @samp
9153 @item ev4
9154 @itemx ev45
9155 @itemx 21064
9156 Schedules as an EV4 and has no instruction set extensions.
9158 @item ev5
9159 @itemx 21164
9160 Schedules as an EV5 and has no instruction set extensions.
9162 @item ev56
9163 @itemx 21164a
9164 Schedules as an EV5 and supports the BWX extension.
9166 @item pca56
9167 @itemx 21164pc
9168 @itemx 21164PC
9169 Schedules as an EV5 and supports the BWX and MAX extensions.
9171 @item ev6
9172 @itemx 21264
9173 Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
9175 @item ev67
9176 @itemx 21264a
9177 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
9178 @end table
9180 @item -mtune=@var{cpu_type}
9181 @opindex mtune
9182 Set only the instruction scheduling parameters for machine type
9183 @var{cpu_type}.  The instruction set is not changed.
9185 @item -mmemory-latency=@var{time}
9186 @opindex mmemory-latency
9187 Sets the latency the scheduler should assume for typical memory
9188 references as seen by the application.  This number is highly
9189 dependent on the memory access patterns used by the application
9190 and the size of the external cache on the machine.
9192 Valid options for @var{time} are
9194 @table @samp
9195 @item @var{number}
9196 A decimal number representing clock cycles.
9198 @item L1
9199 @itemx L2
9200 @itemx L3
9201 @itemx main
9202 The compiler contains estimates of the number of clock cycles for
9203 ``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
9204 (also called Dcache, Scache, and Bcache), as well as to main memory.
9205 Note that L3 is only valid for EV5.
9207 @end table
9208 @end table
9210 @node DEC Alpha/VMS Options
9211 @subsection DEC Alpha/VMS Options
9213 These @samp{-m} options are defined for the DEC Alpha/VMS implementations:
9215 @table @gcctabopt
9216 @item -mvms-return-codes
9217 @opindex mvms-return-codes
9218 Return VMS condition codes from main.  The default is to return POSIX
9219 style condition (e.g.@ error) codes.
9220 @end table
9222 @node H8/300 Options
9223 @subsection H8/300 Options
9225 These @samp{-m} options are defined for the H8/300 implementations:
9227 @table @gcctabopt
9228 @item -mrelax
9229 @opindex mrelax
9230 Shorten some address references at link time, when possible; uses the
9231 linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
9232 ld, Using ld}, for a fuller description.
9234 @item -mh
9235 @opindex mh
9236 Generate code for the H8/300H@.
9238 @item -ms
9239 @opindex ms
9240 Generate code for the H8S@.
9242 @item -mn
9243 @opindex mn
9244 Generate code for the H8S and H8/300H in the normal mode.  This switch
9245 must be used either with -mh or -ms.
9247 @item -ms2600
9248 @opindex ms2600
9249 Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
9251 @item -mint32
9252 @opindex mint32
9253 Make @code{int} data 32 bits by default.
9255 @item -malign-300
9256 @opindex malign-300
9257 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
9258 The default for the H8/300H and H8S is to align longs and floats on 4
9259 byte boundaries.
9260 @option{-malign-300} causes them to be aligned on 2 byte boundaries.
9261 This option has no effect on the H8/300.
9262 @end table
9264 @node SH Options
9265 @subsection SH Options
9267 These @samp{-m} options are defined for the SH implementations:
9269 @table @gcctabopt
9270 @item -m1
9271 @opindex m1
9272 Generate code for the SH1.
9274 @item -m2
9275 @opindex m2
9276 Generate code for the SH2.
9278 @item -m2e
9279 Generate code for the SH2e.
9281 @item -m3
9282 @opindex m3
9283 Generate code for the SH3.
9285 @item -m3e
9286 @opindex m3e
9287 Generate code for the SH3e.
9289 @item -m4-nofpu
9290 @opindex m4-nofpu
9291 Generate code for the SH4 without a floating-point unit.
9293 @item -m4-single-only
9294 @opindex m4-single-only
9295 Generate code for the SH4 with a floating-point unit that only
9296 supports single-precision arithmetic.
9298 @item -m4-single
9299 @opindex m4-single
9300 Generate code for the SH4 assuming the floating-point unit is in
9301 single-precision mode by default.
9303 @item -m4
9304 @opindex m4
9305 Generate code for the SH4.
9307 @item -mb
9308 @opindex mb
9309 Compile code for the processor in big endian mode.
9311 @item -ml
9312 @opindex ml
9313 Compile code for the processor in little endian mode.
9315 @item -mdalign
9316 @opindex mdalign
9317 Align doubles at 64-bit boundaries.  Note that this changes the calling
9318 conventions, and thus some functions from the standard C library will
9319 not work unless you recompile it first with @option{-mdalign}.
9321 @item -mrelax
9322 @opindex mrelax
9323 Shorten some address references at link time, when possible; uses the
9324 linker option @option{-relax}.
9326 @item -mbigtable
9327 @opindex mbigtable
9328 Use 32-bit offsets in @code{switch} tables.  The default is to use
9329 16-bit offsets.
9331 @item -mfmovd
9332 @opindex mfmovd
9333 Enable the use of the instruction @code{fmovd}.
9335 @item -mhitachi
9336 @opindex mhitachi
9337 Comply with the calling conventions defined by Renesas.
9339 @item -mnomacsave
9340 @opindex mnomacsave
9341 Mark the @code{MAC} register as call-clobbered, even if
9342 @option{-mhitachi} is given.
9344 @item -mieee
9345 @opindex mieee
9346 Increase IEEE-compliance of floating-point code.
9348 @item -misize
9349 @opindex misize
9350 Dump instruction size and location in the assembly code.
9352 @item -mpadstruct
9353 @opindex mpadstruct
9354 This option is deprecated.  It pads structures to multiple of 4 bytes,
9355 which is incompatible with the SH ABI@.
9357 @item -mspace
9358 @opindex mspace
9359 Optimize for space instead of speed.  Implied by @option{-Os}.
9361 @item -mprefergot
9362 @opindex mprefergot
9363 When generating position-independent code, emit function calls using
9364 the Global Offset Table instead of the Procedure Linkage Table.
9366 @item -musermode
9367 @opindex musermode
9368 Generate a library function call to invalidate instruction cache
9369 entries, after fixing up a trampoline.  This library function call
9370 doesn't assume it can write to the whole memory address space.  This
9371 is the default when the target is @code{sh-*-linux*}.
9372 @end table
9374 @node System V Options
9375 @subsection Options for System V
9377 These additional options are available on System V Release 4 for
9378 compatibility with other compilers on those systems:
9380 @table @gcctabopt
9381 @item -G
9382 @opindex G
9383 Create a shared object.
9384 It is recommended that @option{-symbolic} or @option{-shared} be used instead.
9386 @item -Qy
9387 @opindex Qy
9388 Identify the versions of each tool used by the compiler, in a
9389 @code{.ident} assembler directive in the output.
9391 @item -Qn
9392 @opindex Qn
9393 Refrain from adding @code{.ident} directives to the output file (this is
9394 the default).
9396 @item -YP,@var{dirs}
9397 @opindex YP
9398 Search the directories @var{dirs}, and no others, for libraries
9399 specified with @option{-l}.
9401 @item -Ym,@var{dir}
9402 @opindex Ym
9403 Look in the directory @var{dir} to find the M4 preprocessor.
9404 The assembler uses this option.
9405 @c This is supposed to go with a -Yd for predefined M4 macro files, but
9406 @c the generic assembler that comes with Solaris takes just -Ym.
9407 @end table
9409 @node TMS320C3x/C4x Options
9410 @subsection TMS320C3x/C4x Options
9411 @cindex TMS320C3x/C4x Options
9413 These @samp{-m} options are defined for TMS320C3x/C4x implementations:
9415 @table @gcctabopt
9417 @item -mcpu=@var{cpu_type}
9418 @opindex mcpu
9419 Set the instruction set, register set, and instruction scheduling
9420 parameters for machine type @var{cpu_type}.  Supported values for
9421 @var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and
9422 @samp{c44}.  The default is @samp{c40} to generate code for the
9423 TMS320C40.
9425 @item -mbig-memory
9426 @itemx -mbig
9427 @itemx -msmall-memory
9428 @itemx -msmall
9429 @opindex mbig-memory
9430 @opindex mbig
9431 @opindex msmall-memory
9432 @opindex msmall
9433 Generates code for the big or small memory model.  The small memory
9434 model assumed that all data fits into one 64K word page.  At run-time
9435 the data page (DP) register must be set to point to the 64K page
9436 containing the .bss and .data program sections.  The big memory model is
9437 the default and requires reloading of the DP register for every direct
9438 memory access.
9440 @item -mbk
9441 @itemx -mno-bk
9442 @opindex mbk
9443 @opindex mno-bk
9444 Allow (disallow) allocation of general integer operands into the block
9445 count register BK@.
9447 @item -mdb
9448 @itemx -mno-db
9449 @opindex mdb
9450 @opindex mno-db
9451 Enable (disable) generation of code using decrement and branch,
9452 DBcond(D), instructions.  This is enabled by default for the C4x.  To be
9453 on the safe side, this is disabled for the C3x, since the maximum
9454 iteration count on the C3x is @math{2^{23} + 1} (but who iterates loops more than
9455 @math{2^{23}} times on the C3x?).  Note that GCC will try to reverse a loop so
9456 that it can utilize the decrement and branch instruction, but will give
9457 up if there is more than one memory reference in the loop.  Thus a loop
9458 where the loop counter is decremented can generate slightly more
9459 efficient code, in cases where the RPTB instruction cannot be utilized.
9461 @item -mdp-isr-reload
9462 @itemx -mparanoid
9463 @opindex mdp-isr-reload
9464 @opindex mparanoid
9465 Force the DP register to be saved on entry to an interrupt service
9466 routine (ISR), reloaded to point to the data section, and restored on
9467 exit from the ISR@.  This should not be required unless someone has
9468 violated the small memory model by modifying the DP register, say within
9469 an object library.
9471 @item -mmpyi
9472 @itemx -mno-mpyi
9473 @opindex mmpyi
9474 @opindex mno-mpyi
9475 For the C3x use the 24-bit MPYI instruction for integer multiplies
9476 instead of a library call to guarantee 32-bit results.  Note that if one
9477 of the operands is a constant, then the multiplication will be performed
9478 using shifts and adds.  If the @option{-mmpyi} option is not specified for the C3x,
9479 then squaring operations are performed inline instead of a library call.
9481 @item -mfast-fix
9482 @itemx -mno-fast-fix
9483 @opindex mfast-fix
9484 @opindex mno-fast-fix
9485 The C3x/C4x FIX instruction to convert a floating point value to an
9486 integer value chooses the nearest integer less than or equal to the
9487 floating point value rather than to the nearest integer.  Thus if the
9488 floating point number is negative, the result will be incorrectly
9489 truncated an additional code is necessary to detect and correct this
9490 case.  This option can be used to disable generation of the additional
9491 code required to correct the result.
9493 @item -mrptb
9494 @itemx -mno-rptb
9495 @opindex mrptb
9496 @opindex mno-rptb
9497 Enable (disable) generation of repeat block sequences using the RPTB
9498 instruction for zero overhead looping.  The RPTB construct is only used
9499 for innermost loops that do not call functions or jump across the loop
9500 boundaries.  There is no advantage having nested RPTB loops due to the
9501 overhead required to save and restore the RC, RS, and RE registers.
9502 This is enabled by default with @option{-O2}.
9504 @item -mrpts=@var{count}
9505 @itemx -mno-rpts
9506 @opindex mrpts
9507 @opindex mno-rpts
9508 Enable (disable) the use of the single instruction repeat instruction
9509 RPTS@.  If a repeat block contains a single instruction, and the loop
9510 count can be guaranteed to be less than the value @var{count}, GCC will
9511 emit a RPTS instruction instead of a RPTB@.  If no value is specified,
9512 then a RPTS will be emitted even if the loop count cannot be determined
9513 at compile time.  Note that the repeated instruction following RPTS does
9514 not have to be reloaded from memory each iteration, thus freeing up the
9515 CPU buses for operands.  However, since interrupts are blocked by this
9516 instruction, it is disabled by default.
9518 @item -mloop-unsigned
9519 @itemx -mno-loop-unsigned
9520 @opindex mloop-unsigned
9521 @opindex mno-loop-unsigned
9522 The maximum iteration count when using RPTS and RPTB (and DB on the C40)
9523 is @math{2^{31} + 1} since these instructions test if the iteration count is
9524 negative to terminate the loop.  If the iteration count is unsigned
9525 there is a possibility than the @math{2^{31} + 1} maximum iteration count may be
9526 exceeded.  This switch allows an unsigned iteration count.
9528 @item -mti
9529 @opindex mti
9530 Try to emit an assembler syntax that the TI assembler (asm30) is happy
9531 with.  This also enforces compatibility with the API employed by the TI
9532 C3x C compiler.  For example, long doubles are passed as structures
9533 rather than in floating point registers.
9535 @item -mregparm
9536 @itemx -mmemparm
9537 @opindex mregparm
9538 @opindex mmemparm
9539 Generate code that uses registers (stack) for passing arguments to functions.
9540 By default, arguments are passed in registers where possible rather
9541 than by pushing arguments on to the stack.
9543 @item -mparallel-insns
9544 @itemx -mno-parallel-insns
9545 @opindex mparallel-insns
9546 @opindex mno-parallel-insns
9547 Allow the generation of parallel instructions.  This is enabled by
9548 default with @option{-O2}.
9550 @item -mparallel-mpy
9551 @itemx -mno-parallel-mpy
9552 @opindex mparallel-mpy
9553 @opindex mno-parallel-mpy
9554 Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
9555 provided @option{-mparallel-insns} is also specified.  These instructions have
9556 tight register constraints which can pessimize the code generation
9557 of large functions.
9559 @end table
9561 @node V850 Options
9562 @subsection V850 Options
9563 @cindex V850 Options
9565 These @samp{-m} options are defined for V850 implementations:
9567 @table @gcctabopt
9568 @item -mlong-calls
9569 @itemx -mno-long-calls
9570 @opindex mlong-calls
9571 @opindex mno-long-calls
9572 Treat all calls as being far away (near).  If calls are assumed to be
9573 far away, the compiler will always load the functions address up into a
9574 register, and call indirect through the pointer.
9576 @item -mno-ep
9577 @itemx -mep
9578 @opindex mno-ep
9579 @opindex mep
9580 Do not optimize (do optimize) basic blocks that use the same index
9581 pointer 4 or more times to copy pointer into the @code{ep} register, and
9582 use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
9583 option is on by default if you optimize.
9585 @item -mno-prolog-function
9586 @itemx -mprolog-function
9587 @opindex mno-prolog-function
9588 @opindex mprolog-function
9589 Do not use (do use) external functions to save and restore registers
9590 at the prologue and epilogue of a function.  The external functions
9591 are slower, but use less code space if more than one function saves
9592 the same number of registers.  The @option{-mprolog-function} option
9593 is on by default if you optimize.
9595 @item -mspace
9596 @opindex mspace
9597 Try to make the code as small as possible.  At present, this just turns
9598 on the @option{-mep} and @option{-mprolog-function} options.
9600 @item -mtda=@var{n}
9601 @opindex mtda
9602 Put static or global variables whose size is @var{n} bytes or less into
9603 the tiny data area that register @code{ep} points to.  The tiny data
9604 area can hold up to 256 bytes in total (128 bytes for byte references).
9606 @item -msda=@var{n}
9607 @opindex msda
9608 Put static or global variables whose size is @var{n} bytes or less into
9609 the small data area that register @code{gp} points to.  The small data
9610 area can hold up to 64 kilobytes.
9612 @item -mzda=@var{n}
9613 @opindex mzda
9614 Put static or global variables whose size is @var{n} bytes or less into
9615 the first 32 kilobytes of memory.
9617 @item -mv850
9618 @opindex mv850
9619 Specify that the target processor is the V850.
9621 @item -mbig-switch
9622 @opindex mbig-switch
9623 Generate code suitable for big switch tables.  Use this option only if
9624 the assembler/linker complain about out of range branches within a switch
9625 table.
9627 @item -mapp-regs
9628 @opindex mapp-regs
9629 This option will cause r2 and r5 to be used in the code generated by
9630 the compiler.  This setting is the default.
9632 @item -mno-app-regs
9633 @opindex mno-app-regs
9634 This option will cause r2 and r5 to be treated as fixed registers.
9636 @item -mv850e1
9637 @opindex mv850e1
9638 Specify that the target processor is the V850E1.  The preprocessor
9639 constants @samp{__v850e1__} and @samp{__v850e__} will be defined if
9640 this option is used.
9642 @item -mv850e
9643 @opindex mv850e
9644 Specify that the target processor is the V850E.  The preprocessor
9645 constant @samp{__v850e__} will be defined if this option is used.
9647 If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
9648 are defined then a default target processor will be chosen and the
9649 relevant @samp{__v850*__} preprocessor constant will be defined.
9651 The preprocessor constants @samp{__v850} and @samp{__v851__} are always
9652 defined, regardless of which processor variant is the target.
9654 @item -mdisable-callt
9655 @opindex mdisable-callt
9656 This option will suppress generation of the CALLT instruction for the
9657 v850e and v850e1 flavors of the v850 architecture.  The default is
9658 @option{-mno-disable-callt} which allows the CALLT instruction to be used.
9660 @end table
9662 @node ARC Options
9663 @subsection ARC Options
9664 @cindex ARC Options
9666 These options are defined for ARC implementations:
9668 @table @gcctabopt
9669 @item -EL
9670 @opindex EL
9671 Compile code for little endian mode.  This is the default.
9673 @item -EB
9674 @opindex EB
9675 Compile code for big endian mode.
9677 @item -mmangle-cpu
9678 @opindex mmangle-cpu
9679 Prepend the name of the cpu to all public symbol names.
9680 In multiple-processor systems, there are many ARC variants with different
9681 instruction and register set characteristics.  This flag prevents code
9682 compiled for one cpu to be linked with code compiled for another.
9683 No facility exists for handling variants that are ``almost identical''.
9684 This is an all or nothing option.
9686 @item -mcpu=@var{cpu}
9687 @opindex mcpu
9688 Compile code for ARC variant @var{cpu}.
9689 Which variants are supported depend on the configuration.
9690 All variants support @option{-mcpu=base}, this is the default.
9692 @item -mtext=@var{text-section}
9693 @itemx -mdata=@var{data-section}
9694 @itemx -mrodata=@var{readonly-data-section}
9695 @opindex mtext
9696 @opindex mdata
9697 @opindex mrodata
9698 Put functions, data, and readonly data in @var{text-section},
9699 @var{data-section}, and @var{readonly-data-section} respectively
9700 by default.  This can be overridden with the @code{section} attribute.
9701 @xref{Variable Attributes}.
9703 @end table
9705 @node NS32K Options
9706 @subsection NS32K Options
9707 @cindex NS32K options
9709 These are the @samp{-m} options defined for the 32000 series.  The default
9710 values for these options depends on which style of 32000 was selected when
9711 the compiler was configured; the defaults for the most common choices are
9712 given below.
9714 @table @gcctabopt
9715 @item -m32032
9716 @itemx -m32032
9717 @opindex m32032
9718 @opindex m32032
9719 Generate output for a 32032.  This is the default
9720 when the compiler is configured for 32032 and 32016 based systems.
9722 @item -m32332
9723 @itemx -m32332
9724 @opindex m32332
9725 @opindex m32332
9726 Generate output for a 32332.  This is the default
9727 when the compiler is configured for 32332-based systems.
9729 @item -m32532
9730 @itemx -m32532
9731 @opindex m32532
9732 @opindex m32532
9733 Generate output for a 32532.  This is the default
9734 when the compiler is configured for 32532-based systems.
9736 @item -m32081
9737 @opindex m32081
9738 Generate output containing 32081 instructions for floating point.
9739 This is the default for all systems.
9741 @item -m32381
9742 @opindex m32381
9743 Generate output containing 32381 instructions for floating point.  This
9744 also implies @option{-m32081}.  The 32381 is only compatible with the 32332
9745 and 32532 cpus.  This is the default for the pc532-netbsd configuration.
9747 @item -mmulti-add
9748 @opindex mmulti-add
9749 Try and generate multiply-add floating point instructions @code{polyF}
9750 and @code{dotF}.  This option is only available if the @option{-m32381}
9751 option is in effect.  Using these instructions requires changes to
9752 register allocation which generally has a negative impact on
9753 performance.  This option should only be enabled when compiling code
9754 particularly likely to make heavy use of multiply-add instructions.
9756 @item -mnomulti-add
9757 @opindex mnomulti-add
9758 Do not try and generate multiply-add floating point instructions
9759 @code{polyF} and @code{dotF}.  This is the default on all platforms.
9761 @item -msoft-float
9762 @opindex msoft-float
9763 Generate output containing library calls for floating point.
9764 @strong{Warning:} the requisite libraries may not be available.
9766 @item -mieee-compare
9767 @itemx -mno-ieee-compare
9768 @opindex mieee-compare
9769 @opindex mno-ieee-compare
9770 Control whether or not the compiler uses IEEE floating point
9771 comparisons.  These handle correctly the case where the result of a
9772 comparison is unordered.
9773 @strong{Warning:} the requisite kernel support may not be available.
9775 @item -mnobitfield
9776 @opindex mnobitfield
9777 Do not use the bit-field instructions.  On some machines it is faster to
9778 use shifting and masking operations.  This is the default for the pc532.
9780 @item -mbitfield
9781 @opindex mbitfield
9782 Do use the bit-field instructions.  This is the default for all platforms
9783 except the pc532.
9785 @item -mrtd
9786 @opindex mrtd
9787 Use a different function-calling convention, in which functions
9788 that take a fixed number of arguments return pop their
9789 arguments on return with the @code{ret} instruction.
9791 This calling convention is incompatible with the one normally
9792 used on Unix, so you cannot use it if you need to call libraries
9793 compiled with the Unix compiler.
9795 Also, you must provide function prototypes for all functions that
9796 take variable numbers of arguments (including @code{printf});
9797 otherwise incorrect code will be generated for calls to those
9798 functions.
9800 In addition, seriously incorrect code will result if you call a
9801 function with too many arguments.  (Normally, extra arguments are
9802 harmlessly ignored.)
9804 This option takes its name from the 680x0 @code{rtd} instruction.
9807 @item -mregparam
9808 @opindex mregparam
9809 Use a different function-calling convention where the first two arguments
9810 are passed in registers.
9812 This calling convention is incompatible with the one normally
9813 used on Unix, so you cannot use it if you need to call libraries
9814 compiled with the Unix compiler.
9816 @item -mnoregparam
9817 @opindex mnoregparam
9818 Do not pass any arguments in registers.  This is the default for all
9819 targets.
9821 @item -msb
9822 @opindex msb
9823 It is OK to use the sb as an index register which is always loaded with
9824 zero.  This is the default for the pc532-netbsd target.
9826 @item -mnosb
9827 @opindex mnosb
9828 The sb register is not available for use or has not been initialized to
9829 zero by the run time system.  This is the default for all targets except
9830 the pc532-netbsd.  It is also implied whenever @option{-mhimem} or
9831 @option{-fpic} is set.
9833 @item -mhimem
9834 @opindex mhimem
9835 Many ns32000 series addressing modes use displacements of up to 512MB@.
9836 If an address is above 512MB then displacements from zero can not be used.
9837 This option causes code to be generated which can be loaded above 512MB@.
9838 This may be useful for operating systems or ROM code.
9840 @item -mnohimem
9841 @opindex mnohimem
9842 Assume code will be loaded in the first 512MB of virtual address space.
9843 This is the default for all platforms.
9846 @end table
9848 @node AVR Options
9849 @subsection AVR Options
9850 @cindex AVR Options
9852 These options are defined for AVR implementations:
9854 @table @gcctabopt
9855 @item -mmcu=@var{mcu}
9856 @opindex mmcu
9857 Specify ATMEL AVR instruction set or MCU type.
9859 Instruction set avr1 is for the minimal AVR core, not supported by the C
9860 compiler, only for assembler programs (MCU types: at90s1200, attiny10,
9861 attiny11, attiny12, attiny15, attiny28).
9863 Instruction set avr2 (default) is for the classic AVR core with up to
9864 8K program memory space (MCU types: at90s2313, at90s2323, attiny22,
9865 at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
9866 at90c8534, at90s8535).
9868 Instruction set avr3 is for the classic AVR core with up to 128K program
9869 memory space (MCU types: atmega103, atmega603, at43usb320, at76c711).
9871 Instruction set avr4 is for the enhanced AVR core with up to 8K program
9872 memory space (MCU types: atmega8, atmega83, atmega85).
9874 Instruction set avr5 is for the enhanced AVR core with up to 128K program
9875 memory space (MCU types: atmega16, atmega161, atmega163, atmega32, atmega323,
9876 atmega64, atmega128, at43usb355, at94k).
9878 @item -msize
9879 @opindex msize
9880 Output instruction sizes to the asm file.
9882 @item -minit-stack=@var{N}
9883 @opindex minit-stack
9884 Specify the initial stack address, which may be a symbol or numeric value,
9885 @samp{__stack} is the default.
9887 @item -mno-interrupts
9888 @opindex mno-interrupts
9889 Generated code is not compatible with hardware interrupts.
9890 Code size will be smaller.
9892 @item -mcall-prologues
9893 @opindex mcall-prologues
9894 Functions prologues/epilogues expanded as call to appropriate
9895 subroutines.  Code size will be smaller.
9897 @item -mno-tablejump
9898 @opindex mno-tablejump
9899 Do not generate tablejump insns which sometimes increase code size.
9901 @item -mtiny-stack
9902 @opindex mtiny-stack
9903 Change only the low 8 bits of the stack pointer.
9904 @end table
9906 @node MCore Options
9907 @subsection MCore Options
9908 @cindex MCore options
9910 These are the @samp{-m} options defined for the Motorola M*Core
9911 processors.
9913 @table @gcctabopt
9915 @item -mhardlit
9916 @itemx -mno-hardlit
9917 @opindex mhardlit
9918 @opindex mno-hardlit
9919 Inline constants into the code stream if it can be done in two
9920 instructions or less.
9922 @item -mdiv
9923 @itemx -mno-div
9924 @opindex mdiv
9925 @opindex mno-div
9926 Use the divide instruction.  (Enabled by default).
9928 @item -mrelax-immediate
9929 @itemx -mno-relax-immediate
9930 @opindex mrelax-immediate
9931 @opindex mno-relax-immediate
9932 Allow arbitrary sized immediates in bit operations.
9934 @item -mwide-bitfields
9935 @itemx -mno-wide-bitfields
9936 @opindex mwide-bitfields
9937 @opindex mno-wide-bitfields
9938 Always treat bit-fields as int-sized.
9940 @item -m4byte-functions
9941 @itemx -mno-4byte-functions
9942 @opindex m4byte-functions
9943 @opindex mno-4byte-functions
9944 Force all functions to be aligned to a four byte boundary.
9946 @item -mcallgraph-data
9947 @itemx -mno-callgraph-data
9948 @opindex mcallgraph-data
9949 @opindex mno-callgraph-data
9950 Emit callgraph information.
9952 @item -mslow-bytes
9953 @itemx -mno-slow-bytes
9954 @opindex mslow-bytes
9955 @opindex mno-slow-bytes
9956 Prefer word access when reading byte quantities.
9958 @item -mlittle-endian
9959 @itemx -mbig-endian
9960 @opindex mlittle-endian
9961 @opindex mbig-endian
9962 Generate code for a little endian target.
9964 @item -m210
9965 @itemx -m340
9966 @opindex m210
9967 @opindex m340
9968 Generate code for the 210 processor.
9969 @end table
9971 @node IA-64 Options
9972 @subsection IA-64 Options
9973 @cindex IA-64 Options
9975 These are the @samp{-m} options defined for the Intel IA-64 architecture.
9977 @table @gcctabopt
9978 @item -mbig-endian
9979 @opindex mbig-endian
9980 Generate code for a big endian target.  This is the default for HP-UX@.
9982 @item -mlittle-endian
9983 @opindex mlittle-endian
9984 Generate code for a little endian target.  This is the default for AIX5
9985 and GNU/Linux.
9987 @item -mgnu-as
9988 @itemx -mno-gnu-as
9989 @opindex mgnu-as
9990 @opindex mno-gnu-as
9991 Generate (or don't) code for the GNU assembler.  This is the default.
9992 @c Also, this is the default if the configure option @option{--with-gnu-as}
9993 @c is used.
9995 @item -mgnu-ld
9996 @itemx -mno-gnu-ld
9997 @opindex mgnu-ld
9998 @opindex mno-gnu-ld
9999 Generate (or don't) code for the GNU linker.  This is the default.
10000 @c Also, this is the default if the configure option @option{--with-gnu-ld}
10001 @c is used.
10003 @item -mno-pic
10004 @opindex mno-pic
10005 Generate code that does not use a global pointer register.  The result
10006 is not position independent code, and violates the IA-64 ABI@.
10008 @item -mvolatile-asm-stop
10009 @itemx -mno-volatile-asm-stop
10010 @opindex mvolatile-asm-stop
10011 @opindex mno-volatile-asm-stop
10012 Generate (or don't) a stop bit immediately before and after volatile asm
10013 statements.
10015 @item -mb-step
10016 @opindex mb-step
10017 Generate code that works around Itanium B step errata.
10019 @item -mregister-names
10020 @itemx -mno-register-names
10021 @opindex mregister-names
10022 @opindex mno-register-names
10023 Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
10024 the stacked registers.  This may make assembler output more readable.
10026 @item -mno-sdata
10027 @itemx -msdata
10028 @opindex mno-sdata
10029 @opindex msdata
10030 Disable (or enable) optimizations that use the small data section.  This may
10031 be useful for working around optimizer bugs.
10033 @item -mconstant-gp
10034 @opindex mconstant-gp
10035 Generate code that uses a single constant global pointer value.  This is
10036 useful when compiling kernel code.
10038 @item -mauto-pic
10039 @opindex mauto-pic
10040 Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
10041 This is useful when compiling firmware code.
10043 @item -minline-float-divide-min-latency
10044 @opindex minline-float-divide-min-latency
10045 Generate code for inline divides of floating point values
10046 using the minimum latency algorithm.
10048 @item -minline-float-divide-max-throughput
10049 @opindex minline-float-divide-max-throughput
10050 Generate code for inline divides of floating point values
10051 using the maximum throughput algorithm.
10053 @item -minline-int-divide-min-latency
10054 @opindex minline-int-divide-min-latency
10055 Generate code for inline divides of integer values
10056 using the minimum latency algorithm.
10058 @item -minline-int-divide-max-throughput
10059 @opindex minline-int-divide-max-throughput
10060 Generate code for inline divides of integer values
10061 using the maximum throughput algorithm.
10063 @item -mno-dwarf2-asm
10064 @itemx -mdwarf2-asm
10065 @opindex mno-dwarf2-asm
10066 @opindex mdwarf2-asm
10067 Don't (or do) generate assembler code for the DWARF2 line number debugging
10068 info.  This may be useful when not using the GNU assembler.
10070 @item -mfixed-range=@var{register-range}
10071 @opindex mfixed-range
10072 Generate code treating the given register range as fixed registers.
10073 A fixed register is one that the register allocator can not use.  This is
10074 useful when compiling kernel code.  A register range is specified as
10075 two registers separated by a dash.  Multiple register ranges can be
10076 specified separated by a comma.
10078 @item -mearly-stop-bits
10079 @itemx -mno-early-stop-bits
10080 @opindex mearly-stop-bits
10081 @opindex mno-early-stop-bits
10082 Allow stop bits to be placed earlier than immediately preceding the
10083 instruction that triggered the stop bit.  This can improve instruction
10084 scheduling, but does not always do so.
10085 @end table
10087 @node S/390 and zSeries Options
10088 @subsection S/390 and zSeries Options
10089 @cindex S/390 and zSeries Options
10091 These are the @samp{-m} options defined for the S/390 and zSeries architecture.
10093 @table @gcctabopt
10094 @item -mhard-float
10095 @itemx -msoft-float
10096 @opindex mhard-float
10097 @opindex msoft-float
10098 Use (do not use) the hardware floating-point instructions and registers
10099 for floating-point operations.  When @option{-msoft-float} is specified,
10100 functions in @file{libgcc.a} will be used to perform floating-point
10101 operations.  When @option{-mhard-float} is specified, the compiler
10102 generates IEEE floating-point instructions.  This is the default.
10104 @item -mbackchain
10105 @itemx -mno-backchain
10106 @opindex mbackchain
10107 @opindex mno-backchain
10108 Generate (or do not generate) code which maintains an explicit
10109 backchain within the stack frame that points to the caller's frame.
10110 This may be needed to allow debugging using tools that do not understand
10111 DWARF-2 call frame information.  The default is not to generate the
10112 backchain.
10114 @item -msmall-exec
10115 @itemx -mno-small-exec
10116 @opindex msmall-exec
10117 @opindex mno-small-exec
10118 Generate (or do not generate) code using the @code{bras} instruction
10119 to do subroutine calls.
10120 This only works reliably if the total executable size does not
10121 exceed 64k.  The default is to use the @code{basr} instruction instead,
10122 which does not have this limitation.
10124 @item -m64
10125 @itemx -m31
10126 @opindex m64
10127 @opindex m31
10128 When @option{-m31} is specified, generate code compliant to the
10129 GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
10130 code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
10131 particular to generate 64-bit instructions.  For the @samp{s390}
10132 targets, the default is @option{-m31}, while the @samp{s390x}
10133 targets default to @option{-m64}.
10135 @item -mzarch
10136 @itemx -mesa
10137 @opindex mzarch
10138 @opindex mesa
10139 When @option{-mzarch} is specified, generate code using the
10140 instructions available on z/Architecture.
10141 When @option{-mesa} is specified, generate code using the
10142 instructions available on ESA/390. Note that @option{-mesa} is
10143 not possible with @option{-m64}.
10144 When generating code compliant to the GNU/Linux for S/390 ABI,
10145 the default is @option{-mesa}.  When generating code compliant
10146 to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
10148 @item -mmvcle
10149 @itemx -mno-mvcle
10150 @opindex mmvcle
10151 @opindex mno-mvcle
10152 Generate (or do not generate) code using the @code{mvcle} instruction
10153 to perform block moves.  When @option{-mno-mvcle} is specified,
10154 use a @code{mvc} loop instead.  This is the default.
10156 @item -mdebug
10157 @itemx -mno-debug
10158 @opindex mdebug
10159 @opindex mno-debug
10160 Print (or do not print) additional debug information when compiling.
10161 The default is to not print debug information.
10163 @item -march=@var{cpu-type}
10164 @opindex march
10165 Generate code that will run on @var{cpu-type}, which is the name of a system
10166 representing a certain processor type. Possible values for
10167 @var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, and @samp{z990}.
10168 When generating code using the instructions available on z/Architecture,
10169 the default is @option{-march=z900}.  Otherwise, the default is
10170 @option{-march=g5}.
10172 @item -mtune=@var{cpu-type}
10173 @opindex mtune
10174 Tune to @var{cpu-type} everything applicable about the generated code,
10175 except for the ABI and the set of available instructions.
10176 The list of @var{cpu-type} values is the same as for @option{-march}.
10177 The default is the value used for @option{-march}.
10179 @item -mfused-madd
10180 @itemx -mno-fused-madd
10181 @opindex mfused-madd
10182 @opindex mno-fused-madd
10183 Generate code that uses (does not use) the floating point multiply and
10184 accumulate instructions.  These instructions are generated by default if
10185 hardware floating point is used.
10186 @end table
10188 @node CRIS Options
10189 @subsection CRIS Options
10190 @cindex CRIS Options
10192 These options are defined specifically for the CRIS ports.
10194 @table @gcctabopt
10195 @item -march=@var{architecture-type}
10196 @itemx -mcpu=@var{architecture-type}
10197 @opindex march
10198 @opindex mcpu
10199 Generate code for the specified architecture.  The choices for
10200 @var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
10201 respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX.
10202 Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
10203 @samp{v10}.
10205 @item -mtune=@var{architecture-type}
10206 @opindex mtune
10207 Tune to @var{architecture-type} everything applicable about the generated
10208 code, except for the ABI and the set of available instructions.  The
10209 choices for @var{architecture-type} are the same as for
10210 @option{-march=@var{architecture-type}}.
10212 @item -mmax-stack-frame=@var{n}
10213 @opindex mmax-stack-frame
10214 Warn when the stack frame of a function exceeds @var{n} bytes.
10216 @item -melinux-stacksize=@var{n}
10217 @opindex melinux-stacksize
10218 Only available with the @samp{cris-axis-aout} target.  Arranges for
10219 indications in the program to the kernel loader that the stack of the
10220 program should be set to @var{n} bytes.
10222 @item -metrax4
10223 @itemx -metrax100
10224 @opindex metrax4
10225 @opindex metrax100
10226 The options @option{-metrax4} and @option{-metrax100} are synonyms for
10227 @option{-march=v3} and @option{-march=v8} respectively.
10229 @item -mmul-bug-workaround
10230 @itemx -mno-mul-bug-workaround
10231 @opindex mmul-bug-workaround
10232 @opindex mno-mul-bug-workaround
10233 Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
10234 models where it applies.  This option is active by default.
10236 @item -mpdebug
10237 @opindex mpdebug
10238 Enable CRIS-specific verbose debug-related information in the assembly
10239 code.  This option also has the effect to turn off the @samp{#NO_APP}
10240 formatted-code indicator to the assembler at the beginning of the
10241 assembly file.
10243 @item -mcc-init
10244 @opindex mcc-init
10245 Do not use condition-code results from previous instruction; always emit
10246 compare and test instructions before use of condition codes.
10248 @item -mno-side-effects
10249 @opindex mno-side-effects
10250 Do not emit instructions with side-effects in addressing modes other than
10251 post-increment.
10253 @item -mstack-align
10254 @itemx -mno-stack-align
10255 @itemx -mdata-align
10256 @itemx -mno-data-align
10257 @itemx -mconst-align
10258 @itemx -mno-const-align
10259 @opindex mstack-align
10260 @opindex mno-stack-align
10261 @opindex mdata-align
10262 @opindex mno-data-align
10263 @opindex mconst-align
10264 @opindex mno-const-align
10265 These options (no-options) arranges (eliminate arrangements) for the
10266 stack-frame, individual data and constants to be aligned for the maximum
10267 single data access size for the chosen CPU model.  The default is to
10268 arrange for 32-bit alignment.  ABI details such as structure layout are
10269 not affected by these options.
10271 @item -m32-bit
10272 @itemx -m16-bit
10273 @itemx -m8-bit
10274 @opindex m32-bit
10275 @opindex m16-bit
10276 @opindex m8-bit
10277 Similar to the stack- data- and const-align options above, these options
10278 arrange for stack-frame, writable data and constants to all be 32-bit,
10279 16-bit or 8-bit aligned.  The default is 32-bit alignment.
10281 @item -mno-prologue-epilogue
10282 @itemx -mprologue-epilogue
10283 @opindex mno-prologue-epilogue
10284 @opindex mprologue-epilogue
10285 With @option{-mno-prologue-epilogue}, the normal function prologue and
10286 epilogue that sets up the stack-frame are omitted and no return
10287 instructions or return sequences are generated in the code.  Use this
10288 option only together with visual inspection of the compiled code: no
10289 warnings or errors are generated when call-saved registers must be saved,
10290 or storage for local variable needs to be allocated.
10292 @item -mno-gotplt
10293 @itemx -mgotplt
10294 @opindex mno-gotplt
10295 @opindex mgotplt
10296 With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
10297 instruction sequences that load addresses for functions from the PLT part
10298 of the GOT rather than (traditional on other architectures) calls to the
10299 PLT.  The default is @option{-mgotplt}.
10301 @item -maout
10302 @opindex maout
10303 Legacy no-op option only recognized with the cris-axis-aout target.
10305 @item -melf
10306 @opindex melf
10307 Legacy no-op option only recognized with the cris-axis-elf and
10308 cris-axis-linux-gnu targets.
10310 @item -melinux
10311 @opindex melinux
10312 Only recognized with the cris-axis-aout target, where it selects a
10313 GNU/linux-like multilib, include files and instruction set for
10314 @option{-march=v8}.
10316 @item -mlinux
10317 @opindex mlinux
10318 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
10320 @item -sim
10321 @opindex sim
10322 This option, recognized for the cris-axis-aout and cris-axis-elf arranges
10323 to link with input-output functions from a simulator library.  Code,
10324 initialized data and zero-initialized data are allocated consecutively.
10326 @item -sim2
10327 @opindex sim2
10328 Like @option{-sim}, but pass linker options to locate initialized data at
10329 0x40000000 and zero-initialized data at 0x80000000.
10330 @end table
10332 @node MMIX Options
10333 @subsection MMIX Options
10334 @cindex MMIX Options
10336 These options are defined for the MMIX:
10338 @table @gcctabopt
10339 @item -mlibfuncs
10340 @itemx -mno-libfuncs
10341 @opindex mlibfuncs
10342 @opindex mno-libfuncs
10343 Specify that intrinsic library functions are being compiled, passing all
10344 values in registers, no matter the size.
10346 @item -mepsilon
10347 @itemx -mno-epsilon
10348 @opindex mepsilon
10349 @opindex mno-epsilon
10350 Generate floating-point comparison instructions that compare with respect
10351 to the @code{rE} epsilon register.
10353 @item -mabi=mmixware
10354 @itemx -mabi=gnu
10355 @opindex mabi-mmixware
10356 @opindex mabi=gnu
10357 Generate code that passes function parameters and return values that (in
10358 the called function) are seen as registers @code{$0} and up, as opposed to
10359 the GNU ABI which uses global registers @code{$231} and up.
10361 @item -mzero-extend
10362 @itemx -mno-zero-extend
10363 @opindex mzero-extend
10364 @opindex mno-zero-extend
10365 When reading data from memory in sizes shorter than 64 bits, use (do not
10366 use) zero-extending load instructions by default, rather than
10367 sign-extending ones.
10369 @item -mknuthdiv
10370 @itemx -mno-knuthdiv
10371 @opindex mknuthdiv
10372 @opindex mno-knuthdiv
10373 Make the result of a division yielding a remainder have the same sign as
10374 the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
10375 remainder follows the sign of the dividend.  Both methods are
10376 arithmetically valid, the latter being almost exclusively used.
10378 @item -mtoplevel-symbols
10379 @itemx -mno-toplevel-symbols
10380 @opindex mtoplevel-symbols
10381 @opindex mno-toplevel-symbols
10382 Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
10383 code can be used with the @code{PREFIX} assembly directive.
10385 @item -melf
10386 @opindex melf
10387 Generate an executable in the ELF format, rather than the default
10388 @samp{mmo} format used by the @command{mmix} simulator.
10390 @item -mbranch-predict
10391 @itemx -mno-branch-predict
10392 @opindex mbranch-predict
10393 @opindex mno-branch-predict
10394 Use (do not use) the probable-branch instructions, when static branch
10395 prediction indicates a probable branch.
10397 @item -mbase-addresses
10398 @itemx -mno-base-addresses
10399 @opindex mbase-addresses
10400 @opindex mno-base-addresses
10401 Generate (do not generate) code that uses @emph{base addresses}.  Using a
10402 base address automatically generates a request (handled by the assembler
10403 and the linker) for a constant to be set up in a global register.  The
10404 register is used for one or more base address requests within the range 0
10405 to 255 from the value held in the register.  The generally leads to short
10406 and fast code, but the number of different data items that can be
10407 addressed is limited.  This means that a program that uses lots of static
10408 data may require @option{-mno-base-addresses}.
10410 @item -msingle-exit
10411 @itemx -mno-single-exit
10412 @opindex msingle-exit
10413 @opindex mno-single-exit
10414 Force (do not force) generated code to have a single exit point in each
10415 function.
10416 @end table
10418 @node PDP-11 Options
10419 @subsection PDP-11 Options
10420 @cindex PDP-11 Options
10422 These options are defined for the PDP-11:
10424 @table @gcctabopt
10425 @item -mfpu
10426 @opindex mfpu
10427 Use hardware FPP floating point.  This is the default.  (FIS floating
10428 point on the PDP-11/40 is not supported.)
10430 @item -msoft-float
10431 @opindex msoft-float
10432 Do not use hardware floating point.
10434 @item -mac0
10435 @opindex mac0
10436 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
10438 @item -mno-ac0
10439 @opindex mno-ac0
10440 Return floating-point results in memory.  This is the default.
10442 @item -m40
10443 @opindex m40
10444 Generate code for a PDP-11/40.
10446 @item -m45
10447 @opindex m45
10448 Generate code for a PDP-11/45.  This is the default.
10450 @item -m10
10451 @opindex m10
10452 Generate code for a PDP-11/10.
10454 @item -mbcopy-builtin
10455 @opindex bcopy-builtin
10456 Use inline @code{movstrhi} patterns for copying memory.  This is the
10457 default.
10459 @item -mbcopy
10460 @opindex mbcopy
10461 Do not use inline @code{movstrhi} patterns for copying memory.
10463 @item -mint16
10464 @itemx -mno-int32
10465 @opindex mint16
10466 @opindex mno-int32
10467 Use 16-bit @code{int}.  This is the default.
10469 @item -mint32
10470 @itemx -mno-int16
10471 @opindex mint32
10472 @opindex mno-int16
10473 Use 32-bit @code{int}.
10475 @item -mfloat64
10476 @itemx -mno-float32
10477 @opindex mfloat64
10478 @opindex mno-float32
10479 Use 64-bit @code{float}.  This is the default.
10481 @item -mfloat32
10482 @itemx -mno-float64
10483 @opindex mfloat32
10484 @opindex mno-float64
10485 Use 32-bit @code{float}.
10487 @item -mabshi
10488 @opindex mabshi
10489 Use @code{abshi2} pattern.  This is the default.
10491 @item -mno-abshi
10492 @opindex mno-abshi
10493 Do not use @code{abshi2} pattern.
10495 @item -mbranch-expensive
10496 @opindex mbranch-expensive
10497 Pretend that branches are expensive.  This is for experimenting with
10498 code generation only.
10500 @item -mbranch-cheap
10501 @opindex mbranch-cheap
10502 Do not pretend that branches are expensive.  This is the default.
10504 @item -msplit
10505 @opindex msplit
10506 Generate code for a system with split I&D.
10508 @item -mno-split
10509 @opindex mno-split
10510 Generate code for a system without split I&D.  This is the default.
10512 @item -munix-asm
10513 @opindex munix-asm
10514 Use Unix assembler syntax.  This is the default when configured for
10515 @samp{pdp11-*-bsd}.
10517 @item -mdec-asm
10518 @opindex mdec-asm
10519 Use DEC assembler syntax.  This is the default when configured for any
10520 PDP-11 target other than @samp{pdp11-*-bsd}.
10521 @end table
10523 @node Xstormy16 Options
10524 @subsection Xstormy16 Options
10525 @cindex Xstormy16 Options
10527 These options are defined for Xstormy16:
10529 @table @gcctabopt
10530 @item -msim
10531 @opindex msim
10532 Choose startup files and linker script suitable for the simulator.
10533 @end table
10535 @node FRV Options
10536 @subsection FRV Options
10537 @cindex FRV Options
10539 @table @gcctabopt
10540 @item -mgpr-32
10541 @opindex mgpr-32
10543 Only use the first 32 general purpose registers.
10545 @item -mgpr-64
10546 @opindex mgpr-64
10548 Use all 64 general purpose registers.
10550 @item -mfpr-32
10551 @opindex mfpr-32
10553 Use only the first 32 floating point registers.
10555 @item -mfpr-64
10556 @opindex mfpr-64
10558 Use all 64 floating point registers
10560 @item -mhard-float
10561 @opindex mhard-float
10563 Use hardware instructions for floating point operations.
10565 @item -msoft-float
10566 @opindex msoft-float
10568 Use library routines for floating point operations.
10570 @item -malloc-cc
10571 @opindex malloc-cc
10573 Dynamically allocate condition code registers.
10575 @item -mfixed-cc
10576 @opindex mfixed-cc
10578 Do not try to dynamically allocate condition code registers, only
10579 use @code{icc0} and @code{fcc0}.
10581 @item -mdword
10582 @opindex mdword
10584 Change ABI to use double word insns.
10586 @item -mno-dword
10587 @opindex mno-dword
10589 Do not use double word instructions.
10591 @item -mdouble
10592 @opindex mdouble
10594 Use floating point double instructions.
10596 @item -mno-double
10597 @opindex mno-double
10599 Do not use floating point double instructions.
10601 @item -mmedia
10602 @opindex mmedia
10604 Use media instructions.
10606 @item -mno-media
10607 @opindex mno-media
10609 Do not use media instructions.
10611 @item -mmuladd
10612 @opindex mmuladd
10614 Use multiply and add/subtract instructions.
10616 @item -mno-muladd
10617 @opindex mno-muladd
10619 Do not use multiply and add/subtract instructions.
10621 @item -mlibrary-pic
10622 @opindex mlibrary-pic
10624 Generate position-independent EABI code.
10626 @item -macc-4
10627 @opindex macc-4
10629 Use only the first four media accumulator registers.
10631 @item -macc-8
10632 @opindex macc-8
10634 Use all eight media accumulator registers.
10636 @item -mpack
10637 @opindex mpack
10639 Pack VLIW instructions.
10641 @item -mno-pack
10642 @opindex mno-pack
10644 Do not pack VLIW instructions.
10646 @item -mno-eflags
10647 @opindex mno-eflags
10649 Do not mark ABI switches in e_flags.
10651 @item -mcond-move
10652 @opindex mcond-move
10654 Enable the use of conditional-move instructions (default).
10656 This switch is mainly for debugging the compiler and will likely be removed
10657 in a future version.
10659 @item -mno-cond-move
10660 @opindex mno-cond-move
10662 Disable the use of conditional-move instructions.
10664 This switch is mainly for debugging the compiler and will likely be removed
10665 in a future version.
10667 @item -mscc
10668 @opindex mscc
10670 Enable the use of conditional set instructions (default).
10672 This switch is mainly for debugging the compiler and will likely be removed
10673 in a future version.
10675 @item -mno-scc
10676 @opindex mno-scc
10678 Disable the use of conditional set instructions.
10680 This switch is mainly for debugging the compiler and will likely be removed
10681 in a future version.
10683 @item -mcond-exec
10684 @opindex mcond-exec
10686 Enable the use of conditional execution (default).
10688 This switch is mainly for debugging the compiler and will likely be removed
10689 in a future version.
10691 @item -mno-cond-exec
10692 @opindex mno-cond-exec
10694 Disable the use of conditional execution.
10696 This switch is mainly for debugging the compiler and will likely be removed
10697 in a future version.
10699 @item -mvliw-branch
10700 @opindex mvliw-branch
10702 Run a pass to pack branches into VLIW instructions (default).
10704 This switch is mainly for debugging the compiler and will likely be removed
10705 in a future version.
10707 @item -mno-vliw-branch
10708 @opindex mno-vliw-branch
10710 Do not run a pass to pack branches into VLIW instructions.
10712 This switch is mainly for debugging the compiler and will likely be removed
10713 in a future version.
10715 @item -mmulti-cond-exec
10716 @opindex mmulti-cond-exec
10718 Enable optimization of @code{&&} and @code{||} in conditional execution
10719 (default).
10721 This switch is mainly for debugging the compiler and will likely be removed
10722 in a future version.
10724 @item -mno-multi-cond-exec
10725 @opindex mno-multi-cond-exec
10727 Disable optimization of @code{&&} and @code{||} in conditional execution.
10729 This switch is mainly for debugging the compiler and will likely be removed
10730 in a future version.
10732 @item -mnested-cond-exec
10733 @opindex mnested-cond-exec
10735 Enable nested conditional execution optimizations (default).
10737 This switch is mainly for debugging the compiler and will likely be removed
10738 in a future version.
10740 @item -mno-nested-cond-exec
10741 @opindex mno-nested-cond-exec
10743 Disable nested conditional execution optimizations.
10745 This switch is mainly for debugging the compiler and will likely be removed
10746 in a future version.
10748 @item -mtomcat-stats
10749 @opindex mtomcat-stats
10751 Cause gas to print out tomcat statistics.
10753 @item -mcpu=@var{cpu}
10754 @opindex mcpu
10756 Select the processor type for which to generate code.  Possible values are
10757 @samp{simple}, @samp{tomcat}, @samp{fr500}, @samp{fr400}, @samp{fr300},
10758 @samp{frv}.
10760 @end table
10762 @node Xtensa Options
10763 @subsection Xtensa Options
10764 @cindex Xtensa Options
10766 These options are supported for Xtensa targets:
10768 @table @gcctabopt
10769 @item -mconst16
10770 @itemx -mno-const16
10771 @opindex mconst16
10772 @opindex mno-const16
10773 Enable or disable use of @code{CONST16} instructions for loading
10774 constant values.  The @code{CONST16} instruction is currently not a
10775 standard option from Tensilica.  When enabled, @code{CONST16}
10776 instructions are always used in place of the standard @code{L32R}
10777 instructions.  The use of @code{CONST16} is enabled by default only if
10778 the @code{L32R} instruction is not available.
10780 @item -mfused-madd
10781 @itemx -mno-fused-madd
10782 @opindex mfused-madd
10783 @opindex mno-fused-madd
10784 Enable or disable use of fused multiply/add and multiply/subtract
10785 instructions in the floating-point option.  This has no effect if the
10786 floating-point option is not also enabled.  Disabling fused multiply/add
10787 and multiply/subtract instructions forces the compiler to use separate
10788 instructions for the multiply and add/subtract operations.  This may be
10789 desirable in some cases where strict IEEE 754-compliant results are
10790 required: the fused multiply add/subtract instructions do not round the
10791 intermediate result, thereby producing results with @emph{more} bits of
10792 precision than specified by the IEEE standard.  Disabling fused multiply
10793 add/subtract instructions also ensures that the program output is not
10794 sensitive to the compiler's ability to combine multiply and add/subtract
10795 operations.
10797 @item -mtext-section-literals
10798 @itemx -mno-text-section-literals
10799 @opindex mtext-section-literals
10800 @opindex mno-text-section-literals
10801 Control the treatment of literal pools.  The default is
10802 @option{-mno-text-section-literals}, which places literals in a separate
10803 section in the output file.  This allows the literal pool to be placed
10804 in a data RAM/ROM, and it also allows the linker to combine literal
10805 pools from separate object files to remove redundant literals and
10806 improve code size.  With @option{-mtext-section-literals}, the literals
10807 are interspersed in the text section in order to keep them as close as
10808 possible to their references.  This may be necessary for large assembly
10809 files.
10811 @item -mtarget-align
10812 @itemx -mno-target-align
10813 @opindex mtarget-align
10814 @opindex mno-target-align
10815 When this option is enabled, GCC instructs the assembler to
10816 automatically align instructions to reduce branch penalties at the
10817 expense of some code density.  The assembler attempts to widen density
10818 instructions to align branch targets and the instructions following call
10819 instructions.  If there are not enough preceding safe density
10820 instructions to align a target, no widening will be performed.  The
10821 default is @option{-mtarget-align}.  These options do not affect the
10822 treatment of auto-aligned instructions like @code{LOOP}, which the
10823 assembler will always align, either by widening density instructions or
10824 by inserting no-op instructions.
10826 @item -mlongcalls
10827 @itemx -mno-longcalls
10828 @opindex mlongcalls
10829 @opindex mno-longcalls
10830 When this option is enabled, GCC instructs the assembler to translate
10831 direct calls to indirect calls unless it can determine that the target
10832 of a direct call is in the range allowed by the call instruction.  This
10833 translation typically occurs for calls to functions in other source
10834 files.  Specifically, the assembler translates a direct @code{CALL}
10835 instruction into an @code{L32R} followed by a @code{CALLX} instruction.
10836 The default is @option{-mno-longcalls}.  This option should be used in
10837 programs where the call target can potentially be out of range.  This
10838 option is implemented in the assembler, not the compiler, so the
10839 assembly code generated by GCC will still show direct call
10840 instructions---look at the disassembled object code to see the actual
10841 instructions.  Note that the assembler will use an indirect call for
10842 every cross-file call, not just those that really will be out of range.
10843 @end table
10845 @node Code Gen Options
10846 @section Options for Code Generation Conventions
10847 @cindex code generation conventions
10848 @cindex options, code generation
10849 @cindex run-time options
10851 These machine-independent options control the interface conventions
10852 used in code generation.
10854 Most of them have both positive and negative forms; the negative form
10855 of @option{-ffoo} would be @option{-fno-foo}.  In the table below, only
10856 one of the forms is listed---the one which is not the default.  You
10857 can figure out the other form by either removing @samp{no-} or adding
10860 @table @gcctabopt
10861 @item -fbounds-check
10862 @opindex fbounds-check
10863 For front-ends that support it, generate additional code to check that
10864 indices used to access arrays are within the declared range.  This is
10865 currently only supported by the Java and Fortran 77 front-ends, where
10866 this option defaults to true and false respectively.
10868 @item -ftrapv
10869 @opindex ftrapv
10870 This option generates traps for signed overflow on addition, subtraction,
10871 multiplication operations.
10873 @item -fwrapv
10874 @opindex fwrapv
10875 This option instructs the compiler to assume that signed arithmetic
10876 overflow of addition, subtraction and multiplication wraps around
10877 using twos-complement representation.  This flag enables some optimizations
10878 and disables other.  This option is enabled by default for the Java
10879 front-end, as required by the Java language specification.
10881 @item -fexceptions
10882 @opindex fexceptions
10883 Enable exception handling.  Generates extra code needed to propagate
10884 exceptions.  For some targets, this implies GCC will generate frame
10885 unwind information for all functions, which can produce significant data
10886 size overhead, although it does not affect execution.  If you do not
10887 specify this option, GCC will enable it by default for languages like
10888 C++ which normally require exception handling, and disable it for
10889 languages like C that do not normally require it.  However, you may need
10890 to enable this option when compiling C code that needs to interoperate
10891 properly with exception handlers written in C++.  You may also wish to
10892 disable this option if you are compiling older C++ programs that don't
10893 use exception handling.
10895 @item -fnon-call-exceptions
10896 @opindex fnon-call-exceptions
10897 Generate code that allows trapping instructions to throw exceptions.
10898 Note that this requires platform-specific runtime support that does
10899 not exist everywhere.  Moreover, it only allows @emph{trapping}
10900 instructions to throw exceptions, i.e.@: memory references or floating
10901 point instructions.  It does not allow exceptions to be thrown from
10902 arbitrary signal handlers such as @code{SIGALRM}.
10904 @item -funwind-tables
10905 @opindex funwind-tables
10906 Similar to @option{-fexceptions}, except that it will just generate any needed
10907 static data, but will not affect the generated code in any other way.
10908 You will normally not enable this option; instead, a language processor
10909 that needs this handling would enable it on your behalf.
10911 @item -fasynchronous-unwind-tables
10912 @opindex funwind-tables
10913 Generate unwind table in dwarf2 format, if supported by target machine.  The
10914 table is exact at each instruction boundary, so it can be used for stack
10915 unwinding from asynchronous events (such as debugger or garbage collector).
10917 @item -fpcc-struct-return
10918 @opindex fpcc-struct-return
10919 Return ``short'' @code{struct} and @code{union} values in memory like
10920 longer ones, rather than in registers.  This convention is less
10921 efficient, but it has the advantage of allowing intercallability between
10922 GCC-compiled files and files compiled with other compilers, particularly
10923 the Portable C Compiler (pcc).
10925 The precise convention for returning structures in memory depends
10926 on the target configuration macros.
10928 Short structures and unions are those whose size and alignment match
10929 that of some integer type.
10931 @strong{Warning:} code compiled with the @option{-fpcc-struct-return}
10932 switch is not binary compatible with code compiled with the
10933 @option{-freg-struct-return} switch.
10934 Use it to conform to a non-default application binary interface.
10936 @item -freg-struct-return
10937 @opindex freg-struct-return
10938 Return @code{struct} and @code{union} values in registers when possible.
10939 This is more efficient for small structures than
10940 @option{-fpcc-struct-return}.
10942 If you specify neither @option{-fpcc-struct-return} nor
10943 @option{-freg-struct-return}, GCC defaults to whichever convention is
10944 standard for the target.  If there is no standard convention, GCC
10945 defaults to @option{-fpcc-struct-return}, except on targets where GCC is
10946 the principal compiler.  In those cases, we can choose the standard, and
10947 we chose the more efficient register return alternative.
10949 @strong{Warning:} code compiled with the @option{-freg-struct-return}
10950 switch is not binary compatible with code compiled with the
10951 @option{-fpcc-struct-return} switch.
10952 Use it to conform to a non-default application binary interface.
10954 @item -fshort-enums
10955 @opindex fshort-enums
10956 Allocate to an @code{enum} type only as many bytes as it needs for the
10957 declared range of possible values.  Specifically, the @code{enum} type
10958 will be equivalent to the smallest integer type which has enough room.
10960 @strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
10961 code that is not binary compatible with code generated without that switch.
10962 Use it to conform to a non-default application binary interface.
10964 @item -fshort-double
10965 @opindex fshort-double
10966 Use the same size for @code{double} as for @code{float}.
10968 @strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
10969 code that is not binary compatible with code generated without that switch.
10970 Use it to conform to a non-default application binary interface.
10972 @item -fshort-wchar
10973 @opindex fshort-wchar
10974 Override the underlying type for @samp{wchar_t} to be @samp{short
10975 unsigned int} instead of the default for the target.  This option is
10976 useful for building programs to run under WINE@.
10978 @strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
10979 code that is not binary compatible with code generated without that switch.
10980 Use it to conform to a non-default application binary interface.
10982 @item -fshared-data
10983 @opindex fshared-data
10984 Requests that the data and non-@code{const} variables of this
10985 compilation be shared data rather than private data.  The distinction
10986 makes sense only on certain operating systems, where shared data is
10987 shared between processes running the same program, while private data
10988 exists in one copy per process.
10990 @item -fno-common
10991 @opindex fno-common
10992 In C, allocate even uninitialized global variables in the data section of the
10993 object file, rather than generating them as common blocks.  This has the
10994 effect that if the same variable is declared (without @code{extern}) in
10995 two different compilations, you will get an error when you link them.
10996 The only reason this might be useful is if you wish to verify that the
10997 program will work on other systems which always work this way.
10999 @item -fno-ident
11000 @opindex fno-ident
11001 Ignore the @samp{#ident} directive.
11003 @item -finhibit-size-directive
11004 @opindex finhibit-size-directive
11005 Don't output a @code{.size} assembler directive, or anything else that
11006 would cause trouble if the function is split in the middle, and the
11007 two halves are placed at locations far apart in memory.  This option is
11008 used when compiling @file{crtstuff.c}; you should not need to use it
11009 for anything else.
11011 @item -fverbose-asm
11012 @opindex fverbose-asm
11013 Put extra commentary information in the generated assembly code to
11014 make it more readable.  This option is generally only of use to those
11015 who actually need to read the generated assembly code (perhaps while
11016 debugging the compiler itself).
11018 @option{-fno-verbose-asm}, the default, causes the
11019 extra information to be omitted and is useful when comparing two assembler
11020 files.
11022 @item -fpic
11023 @opindex fpic
11024 @cindex global offset table
11025 @cindex PIC
11026 Generate position-independent code (PIC) suitable for use in a shared
11027 library, if supported for the target machine.  Such code accesses all
11028 constant addresses through a global offset table (GOT)@.  The dynamic
11029 loader resolves the GOT entries when the program starts (the dynamic
11030 loader is not part of GCC; it is part of the operating system).  If
11031 the GOT size for the linked executable exceeds a machine-specific
11032 maximum size, you get an error message from the linker indicating that
11033 @option{-fpic} does not work; in that case, recompile with @option{-fPIC}
11034 instead.  (These maximums are 8k on the SPARC and 32k
11035 on the m68k and RS/6000.  The 386 has no such limit.)
11037 Position-independent code requires special support, and therefore works
11038 only on certain machines.  For the 386, GCC supports PIC for System V
11039 but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
11040 position-independent.
11042 @item -fPIC
11043 @opindex fPIC
11044 If supported for the target machine, emit position-independent code,
11045 suitable for dynamic linking and avoiding any limit on the size of the
11046 global offset table.  This option makes a difference on the m68k
11047 and the SPARC.
11049 Position-independent code requires special support, and therefore works
11050 only on certain machines.
11052 @item -fpie
11053 @itemx -fPIE
11054 @opindex fpie
11055 @opindex fPIE
11056 These options are similar to @option{-fpic} and @option{-fPIC}, but
11057 generated position independent code can be only linked into executables.
11058 Usually these options are used when @option{-pie} GCC option will be
11059 used during linking.
11061 @item -ffixed-@var{reg}
11062 @opindex ffixed
11063 Treat the register named @var{reg} as a fixed register; generated code
11064 should never refer to it (except perhaps as a stack pointer, frame
11065 pointer or in some other fixed role).
11067 @var{reg} must be the name of a register.  The register names accepted
11068 are machine-specific and are defined in the @code{REGISTER_NAMES}
11069 macro in the machine description macro file.
11071 This flag does not have a negative form, because it specifies a
11072 three-way choice.
11074 @item -fcall-used-@var{reg}
11075 @opindex fcall-used
11076 Treat the register named @var{reg} as an allocable register that is
11077 clobbered by function calls.  It may be allocated for temporaries or
11078 variables that do not live across a call.  Functions compiled this way
11079 will not save and restore the register @var{reg}.
11081 It is an error to used this flag with the frame pointer or stack pointer.
11082 Use of this flag for other registers that have fixed pervasive roles in
11083 the machine's execution model will produce disastrous results.
11085 This flag does not have a negative form, because it specifies a
11086 three-way choice.
11088 @item -fcall-saved-@var{reg}
11089 @opindex fcall-saved
11090 Treat the register named @var{reg} as an allocable register saved by
11091 functions.  It may be allocated even for temporaries or variables that
11092 live across a call.  Functions compiled this way will save and restore
11093 the register @var{reg} if they use it.
11095 It is an error to used this flag with the frame pointer or stack pointer.
11096 Use of this flag for other registers that have fixed pervasive roles in
11097 the machine's execution model will produce disastrous results.
11099 A different sort of disaster will result from the use of this flag for
11100 a register in which function values may be returned.
11102 This flag does not have a negative form, because it specifies a
11103 three-way choice.
11105 @item -fpack-struct
11106 @opindex fpack-struct
11107 Pack all structure members together without holes.
11109 @strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
11110 code that is not binary compatible with code generated without that switch.
11111 Additionally, it makes the code suboptimal.
11112 Use it to conform to a non-default application binary interface.
11114 @item -finstrument-functions
11115 @opindex finstrument-functions
11116 Generate instrumentation calls for entry and exit to functions.  Just
11117 after function entry and just before function exit, the following
11118 profiling functions will be called with the address of the current
11119 function and its call site.  (On some platforms,
11120 @code{__builtin_return_address} does not work beyond the current
11121 function, so the call site information may not be available to the
11122 profiling functions otherwise.)
11124 @smallexample
11125 void __cyg_profile_func_enter (void *this_fn,
11126                                void *call_site);
11127 void __cyg_profile_func_exit  (void *this_fn,
11128                                void *call_site);
11129 @end smallexample
11131 The first argument is the address of the start of the current function,
11132 which may be looked up exactly in the symbol table.
11134 This instrumentation is also done for functions expanded inline in other
11135 functions.  The profiling calls will indicate where, conceptually, the
11136 inline function is entered and exited.  This means that addressable
11137 versions of such functions must be available.  If all your uses of a
11138 function are expanded inline, this may mean an additional expansion of
11139 code size.  If you use @samp{extern inline} in your C code, an
11140 addressable version of such functions must be provided.  (This is
11141 normally the case anyways, but if you get lucky and the optimizer always
11142 expands the functions inline, you might have gotten away without
11143 providing static copies.)
11145 A function may be given the attribute @code{no_instrument_function}, in
11146 which case this instrumentation will not be done.  This can be used, for
11147 example, for the profiling functions listed above, high-priority
11148 interrupt routines, and any functions from which the profiling functions
11149 cannot safely be called (perhaps signal handlers, if the profiling
11150 routines generate output or allocate memory).
11152 @item -fstack-check
11153 @opindex fstack-check
11154 Generate code to verify that you do not go beyond the boundary of the
11155 stack.  You should specify this flag if you are running in an
11156 environment with multiple threads, but only rarely need to specify it in
11157 a single-threaded environment since stack overflow is automatically
11158 detected on nearly all systems if there is only one stack.
11160 Note that this switch does not actually cause checking to be done; the
11161 operating system must do that.  The switch causes generation of code
11162 to ensure that the operating system sees the stack being extended.
11164 @item -fstack-limit-register=@var{reg}
11165 @itemx -fstack-limit-symbol=@var{sym}
11166 @itemx -fno-stack-limit
11167 @opindex fstack-limit-register
11168 @opindex fstack-limit-symbol
11169 @opindex fno-stack-limit
11170 Generate code to ensure that the stack does not grow beyond a certain value,
11171 either the value of a register or the address of a symbol.  If the stack
11172 would grow beyond the value, a signal is raised.  For most targets,
11173 the signal is raised before the stack overruns the boundary, so
11174 it is possible to catch the signal without taking special precautions.
11176 For instance, if the stack starts at absolute address @samp{0x80000000}
11177 and grows downwards, you can use the flags
11178 @option{-fstack-limit-symbol=__stack_limit} and
11179 @option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
11180 of 128KB@.  Note that this may only work with the GNU linker.
11182 @cindex aliasing of parameters
11183 @cindex parameters, aliased
11184 @item -fargument-alias
11185 @itemx -fargument-noalias
11186 @itemx -fargument-noalias-global
11187 @opindex fargument-alias
11188 @opindex fargument-noalias
11189 @opindex fargument-noalias-global
11190 Specify the possible relationships among parameters and between
11191 parameters and global data.
11193 @option{-fargument-alias} specifies that arguments (parameters) may
11194 alias each other and may alias global storage.@*
11195 @option{-fargument-noalias} specifies that arguments do not alias
11196 each other, but may alias global storage.@*
11197 @option{-fargument-noalias-global} specifies that arguments do not
11198 alias each other and do not alias global storage.
11200 Each language will automatically use whatever option is required by
11201 the language standard.  You should not need to use these options yourself.
11203 @item -fleading-underscore
11204 @opindex fleading-underscore
11205 This option and its counterpart, @option{-fno-leading-underscore}, forcibly
11206 change the way C symbols are represented in the object file.  One use
11207 is to help link with legacy assembly code.
11209 @strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
11210 generate code that is not binary compatible with code generated without that
11211 switch.  Use it to conform to a non-default application binary interface.
11212 Not all targets provide complete support for this switch.
11214 @item -ftls-model=@var{model}
11215 Alter the thread-local storage model to be used (@pxref{Thread-Local}).
11216 The @var{model} argument should be one of @code{global-dynamic},
11217 @code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
11219 The default without @option{-fpic} is @code{initial-exec}; with
11220 @option{-fpic} the default is @code{global-dynamic}.
11221 @end table
11223 @c man end
11225 @node Environment Variables
11226 @section Environment Variables Affecting GCC
11227 @cindex environment variables
11229 @c man begin ENVIRONMENT
11230 This section describes several environment variables that affect how GCC
11231 operates.  Some of them work by specifying directories or prefixes to use
11232 when searching for various kinds of files.  Some are used to specify other
11233 aspects of the compilation environment.
11235 Note that you can also specify places to search using options such as
11236 @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
11237 take precedence over places specified using environment variables, which
11238 in turn take precedence over those specified by the configuration of GCC@.
11239 @xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
11240 GNU Compiler Collection (GCC) Internals}.
11242 @table @env
11243 @item LANG
11244 @itemx LC_CTYPE
11245 @c @itemx LC_COLLATE
11246 @itemx LC_MESSAGES
11247 @c @itemx LC_MONETARY
11248 @c @itemx LC_NUMERIC
11249 @c @itemx LC_TIME
11250 @itemx LC_ALL
11251 @findex LANG
11252 @findex LC_CTYPE
11253 @c @findex LC_COLLATE
11254 @findex LC_MESSAGES
11255 @c @findex LC_MONETARY
11256 @c @findex LC_NUMERIC
11257 @c @findex LC_TIME
11258 @findex LC_ALL
11259 @cindex locale
11260 These environment variables control the way that GCC uses
11261 localization information that allow GCC to work with different
11262 national conventions.  GCC inspects the locale categories
11263 @env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
11264 so.  These locale categories can be set to any value supported by your
11265 installation.  A typical value is @samp{en_UK} for English in the United
11266 Kingdom.
11268 The @env{LC_CTYPE} environment variable specifies character
11269 classification.  GCC uses it to determine the character boundaries in
11270 a string; this is needed for some multibyte encodings that contain quote
11271 and escape characters that would otherwise be interpreted as a string
11272 end or escape.
11274 The @env{LC_MESSAGES} environment variable specifies the language to
11275 use in diagnostic messages.
11277 If the @env{LC_ALL} environment variable is set, it overrides the value
11278 of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
11279 and @env{LC_MESSAGES} default to the value of the @env{LANG}
11280 environment variable.  If none of these variables are set, GCC
11281 defaults to traditional C English behavior.
11283 @item TMPDIR
11284 @findex TMPDIR
11285 If @env{TMPDIR} is set, it specifies the directory to use for temporary
11286 files.  GCC uses temporary files to hold the output of one stage of
11287 compilation which is to be used as input to the next stage: for example,
11288 the output of the preprocessor, which is the input to the compiler
11289 proper.
11291 @item GCC_EXEC_PREFIX
11292 @findex GCC_EXEC_PREFIX
11293 If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
11294 names of the subprograms executed by the compiler.  No slash is added
11295 when this prefix is combined with the name of a subprogram, but you can
11296 specify a prefix that ends with a slash if you wish.
11298 If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out
11299 an appropriate prefix to use based on the pathname it was invoked with.
11301 If GCC cannot find the subprogram using the specified prefix, it
11302 tries looking in the usual places for the subprogram.
11304 The default value of @env{GCC_EXEC_PREFIX} is
11305 @file{@var{prefix}/lib/gcc/} where @var{prefix} is the value
11306 of @code{prefix} when you ran the @file{configure} script.
11308 Other prefixes specified with @option{-B} take precedence over this prefix.
11310 This prefix is also used for finding files such as @file{crt0.o} that are
11311 used for linking.
11313 In addition, the prefix is used in an unusual way in finding the
11314 directories to search for header files.  For each of the standard
11315 directories whose name normally begins with @samp{/usr/local/lib/gcc}
11316 (more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
11317 replacing that beginning with the specified prefix to produce an
11318 alternate directory name.  Thus, with @option{-Bfoo/}, GCC will search
11319 @file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
11320 These alternate directories are searched first; the standard directories
11321 come next.
11323 @item COMPILER_PATH
11324 @findex COMPILER_PATH
11325 The value of @env{COMPILER_PATH} is a colon-separated list of
11326 directories, much like @env{PATH}.  GCC tries the directories thus
11327 specified when searching for subprograms, if it can't find the
11328 subprograms using @env{GCC_EXEC_PREFIX}.
11330 @item LIBRARY_PATH
11331 @findex LIBRARY_PATH
11332 The value of @env{LIBRARY_PATH} is a colon-separated list of
11333 directories, much like @env{PATH}.  When configured as a native compiler,
11334 GCC tries the directories thus specified when searching for special
11335 linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
11336 using GCC also uses these directories when searching for ordinary
11337 libraries for the @option{-l} option (but directories specified with
11338 @option{-L} come first).
11340 @item LANG
11341 @findex LANG
11342 @cindex locale definition
11343 This variable is used to pass locale information to the compiler.  One way in
11344 which this information is used is to determine the character set to be used
11345 when character literals, string literals and comments are parsed in C and C++.
11346 When the compiler is configured to allow multibyte characters,
11347 the following values for @env{LANG} are recognized:
11349 @table @samp
11350 @item C-JIS
11351 Recognize JIS characters.
11352 @item C-SJIS
11353 Recognize SJIS characters.
11354 @item C-EUCJP
11355 Recognize EUCJP characters.
11356 @end table
11358 If @env{LANG} is not defined, or if it has some other value, then the
11359 compiler will use mblen and mbtowc as defined by the default locale to
11360 recognize and translate multibyte characters.
11361 @end table
11363 @noindent
11364 Some additional environments variables affect the behavior of the
11365 preprocessor.
11367 @include cppenv.texi
11369 @c man end
11371 @node Precompiled Headers
11372 @section Using Precompiled Headers
11373 @cindex precompiled headers
11374 @cindex speed of compilation
11376 Often large projects have many header files that are included in every
11377 source file.  The time the compiler takes to process these header files
11378 over and over again can account for nearly all of the time required to
11379 build the project.  To make builds faster, GCC allows users to
11380 `precompile' a header file; then, if builds can use the precompiled
11381 header file they will be much faster.
11383 @strong{Caution:} There are a few known situations where GCC will
11384 crash when trying to use a precompiled header.  If you have trouble
11385 with a precompiled header, you should remove the precompiled header
11386 and compile without it.  In addition, please use GCC's on-line
11387 defect-tracking system to report any problems you encounter with
11388 precompiled headers.  @xref{Bugs}.
11390 To create a precompiled header file, simply compile it as you would any
11391 other file, if necessary using the @option{-x} option to make the driver
11392 treat it as a C or C++ header file.  You will probably want to use a
11393 tool like @command{make} to keep the precompiled header up-to-date when
11394 the headers it contains change.
11396 A precompiled header file will be searched for when @code{#include} is
11397 seen in the compilation.  As it searches for the included file
11398 (@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
11399 compiler looks for a precompiled header in each directory just before it
11400 looks for the include file in that directory.  The name searched for is
11401 the name specified in the @code{#include} with @samp{.gch} appended.  If
11402 the precompiled header file can't be used, it is ignored.
11404 For instance, if you have @code{#include "all.h"}, and you have
11405 @file{all.h.gch} in the same directory as @file{all.h}, then the
11406 precompiled header file will be used if possible, and the original
11407 header will be used otherwise.
11409 Alternatively, you might decide to put the precompiled header file in a
11410 directory and use @option{-I} to ensure that directory is searched
11411 before (or instead of) the directory containing the original header.
11412 Then, if you want to check that the precompiled header file is always
11413 used, you can put a file of the same name as the original header in this
11414 directory containing an @code{#error} command.
11416 This also works with @option{-include}.  So yet another way to use
11417 precompiled headers, good for projects not designed with precompiled
11418 header files in mind, is to simply take most of the header files used by
11419 a project, include them from another header file, precompile that header
11420 file, and @option{-include} the precompiled header.  If the header files
11421 have guards against multiple inclusion, they will be skipped because
11422 they've already been included (in the precompiled header).
11424 If you need to precompile the same header file for different
11425 languages, targets, or compiler options, you can instead make a
11426 @emph{directory} named like @file{all.h.gch}, and put each precompiled
11427 header in the directory, perhaps using @option{-o}.  It doesn't matter
11428 what you call the files in the directory, every precompiled header in
11429 the directory will be considered.  The first precompiled header
11430 encountered in the directory that is valid for this compilation will
11431 be used; they're searched in no particular order.
11433 There are many other possibilities, limited only by your imagination,
11434 good sense, and the constraints of your build system.
11436 A precompiled header file can be used only when these conditions apply:
11438 @itemize
11439 @item
11440 Only one precompiled header can be used in a particular compilation.
11442 @item
11443 A precompiled header can't be used once the first C token is seen.  You
11444 can have preprocessor directives before a precompiled header; you can
11445 even include a precompiled header from inside another header, so long as
11446 there are no C tokens before the @code{#include}.
11448 @item
11449 The precompiled header file must be produced for the same language as
11450 the current compilation.  You can't use a C precompiled header for a C++
11451 compilation.
11453 @item
11454 The precompiled header file must be produced by the same compiler
11455 version and configuration as the current compilation is using.
11456 The easiest way to guarantee this is to use the same compiler binary
11457 for creating and using precompiled headers.
11459 @item
11460 Any macros defined before the precompiled header is included must
11461 either be defined in the same way as when the precompiled header was
11462 generated, or must not affect the precompiled header, which usually
11463 means that the they don't appear in the precompiled header at all.
11465 The @option{-D} option is one way to define a macro before a
11466 precompiled header is included; using a @code{#define} can also do it.
11467 There are also some options that define macros implicitly, like
11468 @option{-O} and @option{-Wdeprecated}; the same rule applies to macros
11469 defined this way.
11471 @item If debugging information is output when using the precompiled
11472 header, using @option{-g} or similar, the same kind of debugging information
11473 must have been output when building the precompiled header.  However,
11474 a precompiled header built using @option{-g} can be used in a compilation
11475 when no debugging information is being output.
11477 @item The same @option{-m} options must generally be used when building
11478 and using the precompiled header.  @xref{Submodel Options},
11479 for any cases where this rule is relaxed.
11481 @item Each of the following options must be the same when building and using
11482 the precompiled header:
11484 @gccoptlist{-fexceptions -funit-at-a-time}
11486 @item
11487 Some other command-line options starting with @option{-f},
11488 @option{-p}, or @option{-O} must be defined in the same way as when
11489 the precompiled header was generated.  At present, it's not clear
11490 which options are safe to change and which are not; the safest choice
11491 is to use exactly the same options when generating and using the
11492 precompiled header.  The following are known to be safe:
11494 @gccoptlist{-pedantic-errors}
11496 @end itemize
11498 For all of these except the last, the compiler will automatically
11499 ignore the precompiled header if the conditions aren't met.  If you
11500 find an option combination that doesn't work and doesn't cause the
11501 precompiled header to be ignored, please consider filing a bug report,
11502 see @ref{Bugs}.
11504 @node Running Protoize
11505 @section Running Protoize
11507 The program @code{protoize} is an optional part of GCC@.  You can use
11508 it to add prototypes to a program, thus converting the program to ISO
11509 C in one respect.  The companion program @code{unprotoize} does the
11510 reverse: it removes argument types from any prototypes that are found.
11512 When you run these programs, you must specify a set of source files as
11513 command line arguments.  The conversion programs start out by compiling
11514 these files to see what functions they define.  The information gathered
11515 about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
11517 After scanning comes actual conversion.  The specified files are all
11518 eligible to be converted; any files they include (whether sources or
11519 just headers) are eligible as well.
11521 But not all the eligible files are converted.  By default,
11522 @code{protoize} and @code{unprotoize} convert only source and header
11523 files in the current directory.  You can specify additional directories
11524 whose files should be converted with the @option{-d @var{directory}}
11525 option.  You can also specify particular files to exclude with the
11526 @option{-x @var{file}} option.  A file is converted if it is eligible, its
11527 directory name matches one of the specified directory names, and its
11528 name within the directory has not been excluded.
11530 Basic conversion with @code{protoize} consists of rewriting most
11531 function definitions and function declarations to specify the types of
11532 the arguments.  The only ones not rewritten are those for varargs
11533 functions.
11535 @code{protoize} optionally inserts prototype declarations at the
11536 beginning of the source file, to make them available for any calls that
11537 precede the function's definition.  Or it can insert prototype
11538 declarations with block scope in the blocks where undeclared functions
11539 are called.
11541 Basic conversion with @code{unprotoize} consists of rewriting most
11542 function declarations to remove any argument types, and rewriting
11543 function definitions to the old-style pre-ISO form.
11545 Both conversion programs print a warning for any function declaration or
11546 definition that they can't convert.  You can suppress these warnings
11547 with @option{-q}.
11549 The output from @code{protoize} or @code{unprotoize} replaces the
11550 original source file.  The original file is renamed to a name ending
11551 with @samp{.save} (for DOS, the saved filename ends in @samp{.sav}
11552 without the original @samp{.c} suffix).  If the @samp{.save} (@samp{.sav}
11553 for DOS) file already exists, then the source file is simply discarded.
11555 @code{protoize} and @code{unprotoize} both depend on GCC itself to
11556 scan the program and collect information about the functions it uses.
11557 So neither of these programs will work until GCC is installed.
11559 Here is a table of the options you can use with @code{protoize} and
11560 @code{unprotoize}.  Each option works with both programs unless
11561 otherwise stated.
11563 @table @code
11564 @item -B @var{directory}
11565 Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
11566 usual directory (normally @file{/usr/local/lib}).  This file contains
11567 prototype information about standard system functions.  This option
11568 applies only to @code{protoize}.
11570 @item -c @var{compilation-options}
11571 Use @var{compilation-options} as the options when running @command{gcc} to
11572 produce the @samp{.X} files.  The special option @option{-aux-info} is
11573 always passed in addition, to tell @command{gcc} to write a @samp{.X} file.
11575 Note that the compilation options must be given as a single argument to
11576 @code{protoize} or @code{unprotoize}.  If you want to specify several
11577 @command{gcc} options, you must quote the entire set of compilation options
11578 to make them a single word in the shell.
11580 There are certain @command{gcc} arguments that you cannot use, because they
11581 would produce the wrong kind of output.  These include @option{-g},
11582 @option{-O}, @option{-c}, @option{-S}, and @option{-o} If you include these in
11583 the @var{compilation-options}, they are ignored.
11585 @item -C
11586 Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file
11587 systems) instead of @samp{.c}.  This is convenient if you are converting
11588 a C program to C++.  This option applies only to @code{protoize}.
11590 @item -g
11591 Add explicit global declarations.  This means inserting explicit
11592 declarations at the beginning of each source file for each function
11593 that is called in the file and was not declared.  These declarations
11594 precede the first function definition that contains a call to an
11595 undeclared function.  This option applies only to @code{protoize}.
11597 @item -i @var{string}
11598 Indent old-style parameter declarations with the string @var{string}.
11599 This option applies only to @code{protoize}.
11601 @code{unprotoize} converts prototyped function definitions to old-style
11602 function definitions, where the arguments are declared between the
11603 argument list and the initial @samp{@{}.  By default, @code{unprotoize}
11604 uses five spaces as the indentation.  If you want to indent with just
11605 one space instead, use @option{-i " "}.
11607 @item -k
11608 Keep the @samp{.X} files.  Normally, they are deleted after conversion
11609 is finished.
11611 @item -l
11612 Add explicit local declarations.  @code{protoize} with @option{-l} inserts
11613 a prototype declaration for each function in each block which calls the
11614 function without any declaration.  This option applies only to
11615 @code{protoize}.
11617 @item -n
11618 Make no real changes.  This mode just prints information about the conversions
11619 that would have been done without @option{-n}.
11621 @item -N
11622 Make no @samp{.save} files.  The original files are simply deleted.
11623 Use this option with caution.
11625 @item -p @var{program}
11626 Use the program @var{program} as the compiler.  Normally, the name
11627 @file{gcc} is used.
11629 @item -q
11630 Work quietly.  Most warnings are suppressed.
11632 @item -v
11633 Print the version number, just like @option{-v} for @command{gcc}.
11634 @end table
11636 If you need special compiler options to compile one of your program's
11637 source files, then you should generate that file's @samp{.X} file
11638 specially, by running @command{gcc} on that source file with the
11639 appropriate options and the option @option{-aux-info}.  Then run
11640 @code{protoize} on the entire set of files.  @code{protoize} will use
11641 the existing @samp{.X} file because it is newer than the source file.
11642 For example:
11644 @smallexample
11645 gcc -Dfoo=bar file1.c -aux-info file1.X
11646 protoize *.c
11647 @end smallexample
11649 @noindent
11650 You need to include the special files along with the rest in the
11651 @code{protoize} command, even though their @samp{.X} files already
11652 exist, because otherwise they won't get converted.
11654 @xref{Protoize Caveats}, for more information on how to use
11655 @code{protoize} successfully.