OSDN Git Service

PR c/18624
[pf3gnuchains/gcc-fork.git] / gcc / doc / invoke.texi
1 @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2 @c 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
3 @c Free Software Foundation, Inc.
4 @c This is part of the GCC manual.
5 @c For copying conditions, see the file gcc.texi.
6
7 @ignore
8 @c man begin INCLUDE
9 @include gcc-vers.texi
10 @c man end
11
12 @c man begin COPYRIGHT
13 Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
14 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
15 Free Software Foundation, Inc.
16
17 Permission is granted to copy, distribute and/or modify this document
18 under the terms of the GNU Free Documentation License, Version 1.2 or
19 any later version published by the Free Software Foundation; with the
20 Invariant Sections being ``GNU General Public License'' and ``Funding
21 Free Software'', the Front-Cover texts being (a) (see below), and with
22 the Back-Cover Texts being (b) (see below).  A copy of the license is
23 included in the gfdl(7) man page.
24
25 (a) The FSF's Front-Cover Text is:
26
27      A GNU Manual
28
29 (b) The FSF's Back-Cover Text is:
30
31      You have freedom to copy and modify this GNU Manual, like GNU
32      software.  Copies published by the Free Software Foundation raise
33      funds for GNU development.
34 @c man end
35 @c Set file name and title for the man page.
36 @setfilename gcc
37 @settitle GNU project C and C++ compiler
38 @c man begin SYNOPSIS
39 gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
40     [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
41     [@option{-W}@var{warn}@dots{}] [@option{-pedantic}]
42     [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
43     [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
44     [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
45     [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{}
46
47 Only the most useful options are listed here; see below for the
48 remainder.  @samp{g++} accepts mostly the same options as @samp{gcc}.
49 @c man end
50 @c man begin SEEALSO
51 gpl(7), gfdl(7), fsf-funding(7),
52 cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
53 and the Info entries for @file{gcc}, @file{cpp}, @file{as},
54 @file{ld}, @file{binutils} and @file{gdb}.
55 @c man end
56 @c man begin BUGS
57 For instructions on reporting bugs, see
58 @w{@value{BUGURL}}.
59 @c man end
60 @c man begin AUTHOR
61 See the Info entry for @command{gcc}, or
62 @w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
63 for contributors to GCC@.
64 @c man end
65 @end ignore
66
67 @node Invoking GCC
68 @chapter GCC Command Options
69 @cindex GCC command options
70 @cindex command options
71 @cindex options, GCC command
72
73 @c man begin DESCRIPTION
74 When you invoke GCC, it normally does preprocessing, compilation,
75 assembly and linking.  The ``overall options'' allow you to stop this
76 process at an intermediate stage.  For example, the @option{-c} option
77 says not to run the linker.  Then the output consists of object files
78 output by the assembler.
79
80 Other options are passed on to one stage of processing.  Some options
81 control the preprocessor and others the compiler itself.  Yet other
82 options control the assembler and linker; most of these are not
83 documented here, since you rarely need to use any of them.
84
85 @cindex C compilation options
86 Most of the command line options that you can use with GCC are useful
87 for C programs; when an option is only useful with another language
88 (usually C++), the explanation says so explicitly.  If the description
89 for a particular option does not mention a source language, you can use
90 that option with all supported languages.
91
92 @cindex C++ compilation options
93 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
94 options for compiling C++ programs.
95
96 @cindex grouping options
97 @cindex options, grouping
98 The @command{gcc} program accepts options and file names as operands.  Many
99 options have multi-letter names; therefore multiple single-letter options
100 may @emph{not} be grouped: @option{-dv} is very different from @w{@samp{-d
101 -v}}.
102
103 @cindex order of options
104 @cindex options, order
105 You can mix options and other arguments.  For the most part, the order
106 you use doesn't matter.  Order does matter when you use several
107 options of the same kind; for example, if you specify @option{-L} more
108 than once, the directories are searched in the order specified.  Also,
109 the placement of the @option{-l} option is significant.
110
111 Many options have long names starting with @samp{-f} or with
112 @samp{-W}---for example,
113 @option{-fmove-loop-invariants}, @option{-Wformat} and so on.  Most of
114 these have both positive and negative forms; the negative form of
115 @option{-ffoo} would be @option{-fno-foo}.  This manual documents
116 only one of these two forms, whichever one is not the default.
117
118 @c man end
119
120 @xref{Option Index}, for an index to GCC's options.
121
122 @menu
123 * Option Summary::      Brief list of all options, without explanations.
124 * Overall Options::     Controlling the kind of output:
125                         an executable, object files, assembler files,
126                         or preprocessed source.
127 * Invoking G++::        Compiling C++ programs.
128 * C Dialect Options::   Controlling the variant of C language compiled.
129 * C++ Dialect Options:: Variations on C++.
130 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
131                         and Objective-C++.
132 * Language Independent Options:: Controlling how diagnostics should be
133                         formatted.
134 * Warning Options::     How picky should the compiler be?
135 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
136 * Optimize Options::    How much optimization?
137 * Preprocessor Options:: Controlling header files and macro definitions.
138                          Also, getting dependency information for Make.
139 * Assembler Options::   Passing options to the assembler.
140 * Link Options::        Specifying libraries and so on.
141 * Directory Options::   Where to find header files and libraries.
142                         Where to find the compiler executable files.
143 * Spec Files::          How to pass switches to sub-processes.
144 * Target Options::      Running a cross-compiler, or an old version of GCC.
145 * Submodel Options::    Specifying minor hardware or convention variations,
146                         such as 68010 vs 68020.
147 * Code Gen Options::    Specifying conventions for function calls, data layout
148                         and register usage.
149 * Environment Variables:: Env vars that affect GCC.
150 * Precompiled Headers:: Compiling a header once, and using it many times.
151 @end menu
152
153 @c man begin OPTIONS
154
155 @node Option Summary
156 @section Option Summary
157
158 Here is a summary of all the options, grouped by type.  Explanations are
159 in the following sections.
160
161 @table @emph
162 @item Overall Options
163 @xref{Overall Options,,Options Controlling the Kind of Output}.
164 @gccoptlist{-c  -S  -E  -o @var{file}  -combine  -no-canonical-prefixes  @gol
165 -pipe  -pass-exit-codes  @gol
166 -x @var{language}  -v  -###  --help@r{[}=@var{class}@r{[},@dots{}@r{]]}  --target-help  @gol
167 --version -wrapper@@@var{file} -fplugin=@var{file} -fplugin-arg-@var{name}=@var{arg}}
168
169 @item C Language Options
170 @xref{C Dialect Options,,Options Controlling C Dialect}.
171 @gccoptlist{-ansi  -std=@var{standard}  -fgnu89-inline @gol
172 -aux-info @var{filename} @gol
173 -fno-asm  -fno-builtin  -fno-builtin-@var{function} @gol
174 -fhosted  -ffreestanding -fopenmp -fms-extensions @gol
175 -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp @gol
176 -fallow-single-precision  -fcond-mismatch -flax-vector-conversions @gol
177 -fsigned-bitfields  -fsigned-char @gol
178 -funsigned-bitfields  -funsigned-char}
179
180 @item C++ Language Options
181 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
182 @gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
183 -fconserve-space  -ffriend-injection @gol
184 -fno-elide-constructors @gol
185 -fno-enforce-eh-specs @gol
186 -ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
187 -fno-implicit-templates @gol
188 -fno-implicit-inline-templates @gol
189 -fno-implement-inlines  -fms-extensions @gol
190 -fno-nonansi-builtins  -fno-operator-names @gol
191 -fno-optional-diags  -fpermissive @gol
192 -fno-pretty-templates @gol
193 -frepo  -fno-rtti  -fstats  -ftemplate-depth=@var{n} @gol
194 -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++ @gol
195 -fno-default-inline  -fvisibility-inlines-hidden @gol
196 -fvisibility-ms-compat @gol
197 -Wabi  -Wconversion-null  -Wctor-dtor-privacy @gol
198 -Wnon-virtual-dtor  -Wreorder @gol
199 -Weffc++  -Wstrict-null-sentinel @gol
200 -Wno-non-template-friend  -Wold-style-cast @gol
201 -Woverloaded-virtual  -Wno-pmf-conversions @gol
202 -Wsign-promo}
203
204 @item Objective-C and Objective-C++ Language Options
205 @xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
206 Objective-C and Objective-C++ Dialects}.
207 @gccoptlist{-fconstant-string-class=@var{class-name} @gol
208 -fgnu-runtime  -fnext-runtime @gol
209 -fno-nil-receivers @gol
210 -fobjc-call-cxx-cdtors @gol
211 -fobjc-direct-dispatch @gol
212 -fobjc-exceptions @gol
213 -fobjc-gc @gol
214 -freplace-objc-classes @gol
215 -fzero-link @gol
216 -gen-decls @gol
217 -Wassign-intercept @gol
218 -Wno-protocol  -Wselector @gol
219 -Wstrict-selector-match @gol
220 -Wundeclared-selector}
221
222 @item Language Independent Options
223 @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
224 @gccoptlist{-fmessage-length=@var{n}  @gol
225 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
226 -fdiagnostics-show-option}
227
228 @item Warning Options
229 @xref{Warning Options,,Options to Request or Suppress Warnings}.
230 @gccoptlist{-fsyntax-only  -pedantic  -pedantic-errors @gol
231 -w  -Wextra  -Wall  -Waddress  -Waggregate-return  -Warray-bounds @gol
232 -Wno-attributes -Wno-builtin-macro-redefined @gol
233 -Wc++-compat -Wc++0x-compat -Wcast-align  -Wcast-qual  @gol
234 -Wchar-subscripts -Wclobbered  -Wcomment @gol
235 -Wconversion  -Wcoverage-mismatch  -Wcpp  -Wno-deprecated  @gol
236 -Wno-deprecated-declarations -Wdisabled-optimization  @gol
237 -Wno-div-by-zero -Wempty-body  -Wenum-compare -Wno-endif-labels @gol
238 -Werror  -Werror=* @gol
239 -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2 @gol
240 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
241 -Wformat-security  -Wformat-y2k @gol
242 -Wframe-larger-than=@var{len} -Wjump-misses-init -Wignored-qualifiers @gol
243 -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int @gol
244 -Winit-self  -Winline @gol
245 -Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol
246 -Winvalid-pch -Wlarger-than=@var{len}  -Wunsafe-loop-optimizations @gol
247 -Wlogical-op -Wlong-long @gol
248 -Wmain  -Wmissing-braces  -Wmissing-field-initializers @gol
249 -Wmissing-format-attribute  -Wmissing-include-dirs @gol
250 -Wmissing-noreturn  -Wno-mudflap @gol
251 -Wno-multichar  -Wnonnull  -Wno-overflow @gol
252 -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded @gol
253 -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format @gol
254 -Wpointer-arith  -Wno-pointer-to-int-cast @gol
255 -Wredundant-decls @gol
256 -Wreturn-type  -Wsequence-point  -Wshadow @gol
257 -Wsign-compare  -Wsign-conversion  -Wstack-protector @gol
258 -Wstrict-aliasing -Wstrict-aliasing=n @gol
259 -Wstrict-overflow -Wstrict-overflow=@var{n} @gol
260 -Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand @gol
261 -Wsystem-headers  -Wtrigraphs  -Wtype-limits  -Wundef  -Wuninitialized @gol
262 -Wunknown-pragmas  -Wno-pragmas @gol
263 -Wunsuffixed-float-constants  -Wunused  -Wunused-function @gol
264 -Wunused-label  -Wunused-parameter -Wno-unused-result -Wunused-value  -Wunused-variable @gol
265 -Wunused-but-set-parameter -Wunused-but-set-variable -Wvariadic-macros -Wvla @gol
266 -Wvolatile-register-var  -Wwrite-strings}
267
268 @item C and Objective-C-only Warning Options
269 @gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
270 -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs @gol
271 -Wold-style-declaration  -Wold-style-definition @gol
272 -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion @gol
273 -Wdeclaration-after-statement -Wpointer-sign}
274
275 @item Debugging Options
276 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
277 @gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
278 -fdbg-cnt-list -fdbg-cnt=@var{counter-value-list} @gol
279 -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links @gol
280 -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
281 -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
282 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol
283 -fdump-statistics @gol
284 -fdump-tree-all @gol
285 -fdump-tree-original@r{[}-@var{n}@r{]}  @gol
286 -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
287 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol
288 -fdump-tree-ch @gol
289 -fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol
290 -fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
291 -fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol
292 -fdump-tree-dom@r{[}-@var{n}@r{]} @gol
293 -fdump-tree-dse@r{[}-@var{n}@r{]} @gol
294 -fdump-tree-phiprop@r{[}-@var{n}@r{]} @gol
295 -fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol
296 -fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
297 -fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol
298 -fdump-tree-nrv -fdump-tree-vect @gol
299 -fdump-tree-sink @gol
300 -fdump-tree-sra@r{[}-@var{n}@r{]} @gol
301 -fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
302 -fdump-tree-fre@r{[}-@var{n}@r{]} @gol
303 -fdump-tree-vrp@r{[}-@var{n}@r{]} @gol
304 -ftree-vectorizer-verbose=@var{n} @gol
305 -fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol
306 -fdump-final-insns=@var{file} @gol
307 -fcompare-debug@r{[}=@var{opts}@r{]}  -fcompare-debug-second @gol
308 -feliminate-dwarf2-dups -feliminate-unused-debug-types @gol
309 -feliminate-unused-debug-symbols -femit-class-debug-always @gol
310 -fenable-icf-debug @gol
311 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs @gol
312 -frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
313 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose @gol
314 -ftest-coverage  -ftime-report -fvar-tracking @gol
315 -fvar-tracking-assignments  -fvar-tracking-assignments-toggle @gol
316 -g  -g@var{level}  -gtoggle  -gcoff  -gdwarf-@var{version} @gol
317 -ggdb  -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf @gol
318 -gvms  -gxcoff  -gxcoff+ @gol
319 -fno-merge-debug-strings -fno-dwarf2-cfi-asm @gol
320 -fdebug-prefix-map=@var{old}=@var{new} @gol
321 -femit-struct-debug-baseonly -femit-struct-debug-reduced @gol
322 -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol
323 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
324 -print-multi-directory  -print-multi-lib  -print-multi-os-directory @gol
325 -print-prog-name=@var{program}  -print-search-dirs  -Q @gol
326 -print-sysroot -print-sysroot-headers-suffix @gol
327 -save-temps -save-temps=cwd -save-temps=obj -time@r{[}=@var{file}@r{]}}
328
329 @item Optimization Options
330 @xref{Optimize Options,,Options that Control Optimization}.
331 @gccoptlist{
332 -falign-functions[=@var{n}] -falign-jumps[=@var{n}] @gol
333 -falign-labels[=@var{n}] -falign-loops[=@var{n}] -fassociative-math @gol
334 -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize @gol
335 -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves @gol
336 -fcheck-data-deps -fconserve-stack -fcprop-registers -fcrossjumping @gol
337 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range @gol
338 -fdata-sections -fdce -fdce @gol
339 -fdelayed-branch -fdelete-null-pointer-checks -fdse -fdse @gol
340 -fearly-inlining -fipa-sra -fexpensive-optimizations -ffast-math @gol
341 -ffinite-math-only -ffloat-store -fexcess-precision=@var{style} @gol
342 -fforward-propagate -ffunction-sections @gol
343 -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm @gol
344 -fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining @gol
345 -finline-functions -finline-functions-called-once -finline-limit=@var{n} @gol
346 -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg -fipa-pta @gol
347 -fipa-pure-const -fipa-reference -fipa-struct-reorg @gol
348 -fipa-type-escape -fira-algorithm=@var{algorithm} @gol
349 -fira-region=@var{region} -fira-coalesce @gol
350 -fira-loop-pressure -fno-ira-share-save-slots @gol
351 -fno-ira-share-spill-slots -fira-verbose=@var{n} @gol
352 -fivopts -fkeep-inline-functions -fkeep-static-consts @gol
353 -floop-block -floop-interchange -floop-strip-mine -fgraphite-identity @gol
354 -floop-parallelize-all -flto -flto-compression-level -flto-report -fltrans @gol
355 -fltrans-output-list -fmerge-all-constants -fmerge-constants -fmodulo-sched @gol
356 -fmodulo-sched-allow-regmoves -fmove-loop-invariants -fmudflap @gol
357 -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline @gol
358 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability @gol
359 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol
360 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros @gol
361 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol
362 -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls @gol
363 -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays @gol
364 -fprofile-correction -fprofile-dir=@var{path} -fprofile-generate @gol
365 -fprofile-generate=@var{path} @gol
366 -fprofile-use -fprofile-use=@var{path} -fprofile-values @gol
367 -freciprocal-math -fregmove -frename-registers -freorder-blocks @gol
368 -freorder-blocks-and-partition -freorder-functions @gol
369 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops @gol
370 -frounding-math -fsched2-use-superblocks -fsched-pressure @gol
371 -fsched-spec-load -fsched-spec-load-dangerous @gol
372 -fsched-stalled-insns-dep[=@var{n}] -fsched-stalled-insns[=@var{n}] @gol
373 -fsched-group-heuristic -fsched-critical-path-heuristic @gol
374 -fsched-spec-insn-heuristic -fsched-rank-heuristic @gol
375 -fsched-last-insn-heuristic -fsched-dep-count-heuristic @gol
376 -fschedule-insns -fschedule-insns2 -fsection-anchors @gol
377 -fselective-scheduling -fselective-scheduling2 @gol
378 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops @gol
379 -fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller @gol
380 -fsplit-wide-types -fstack-protector -fstack-protector-all @gol
381 -fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer @gol
382 -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop @gol
383 -ftree-copyrename -ftree-dce @gol
384 -ftree-dominator-opts -ftree-dse -ftree-forwprop -ftree-fre -ftree-loop-im @gol
385 -ftree-phiprop -ftree-loop-distribution @gol
386 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol
387 -ftree-parallelize-loops=@var{n} -ftree-pre -ftree-pta -ftree-reassoc @gol
388 -ftree-sink -ftree-sra -ftree-switch-conversion @gol
389 -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp @gol
390 -funit-at-a-time -funroll-all-loops -funroll-loops @gol
391 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol
392 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb @gol
393 -fwhole-program -fwhopr -fwpa -fuse-linker-plugin @gol
394 --param @var{name}=@var{value}
395 -O  -O0  -O1  -O2  -O3  -Os}
396
397 @item Preprocessor Options
398 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
399 @gccoptlist{-A@var{question}=@var{answer} @gol
400 -A-@var{question}@r{[}=@var{answer}@r{]} @gol
401 -C  -dD  -dI  -dM  -dN @gol
402 -D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
403 -idirafter @var{dir} @gol
404 -include @var{file}  -imacros @var{file} @gol
405 -iprefix @var{file}  -iwithprefix @var{dir} @gol
406 -iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
407 -imultilib @var{dir} -isysroot @var{dir} @gol
408 -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
409 -P  -fworking-directory  -remap @gol
410 -trigraphs  -undef  -U@var{macro}  -Wp,@var{option} @gol
411 -Xpreprocessor @var{option}}
412
413 @item Assembler Option
414 @xref{Assembler Options,,Passing Options to the Assembler}.
415 @gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}
416
417 @item Linker Options
418 @xref{Link Options,,Options for Linking}.
419 @gccoptlist{@var{object-file-name}  -l@var{library} @gol
420 -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic @gol
421 -s  -static  -static-libgcc  -static-libstdc++ -shared  @gol
422 -shared-libgcc  -symbolic @gol
423 -T @var{script}  -Wl,@var{option}  -Xlinker @var{option} @gol
424 -u @var{symbol}}
425
426 @item Directory Options
427 @xref{Directory Options,,Options for Directory Search}.
428 @gccoptlist{-B@var{prefix}  -I@var{dir}  -iquote@var{dir}  -L@var{dir}
429 -specs=@var{file}  -I- --sysroot=@var{dir}}
430
431 @item Target Options
432 @c I wrote this xref this way to avoid overfull hbox. -- rms
433 @xref{Target Options}.
434 @gccoptlist{-V @var{version}  -b @var{machine}}
435
436 @item Machine Dependent Options
437 @xref{Submodel Options,,Hardware Models and Configurations}.
438 @c This list is ordered alphanumerically by subsection name.
439 @c Try and put the significant identifier (CPU or system) first,
440 @c so users have a clue at guessing where the ones they want will be.
441
442 @emph{ARC Options}
443 @gccoptlist{-EB  -EL @gol
444 -mmangle-cpu  -mcpu=@var{cpu}  -mtext=@var{text-section} @gol
445 -mdata=@var{data-section}  -mrodata=@var{readonly-data-section}}
446
447 @emph{ARM Options}
448 @gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
449 -mabi=@var{name} @gol
450 -mapcs-stack-check  -mno-apcs-stack-check @gol
451 -mapcs-float  -mno-apcs-float @gol
452 -mapcs-reentrant  -mno-apcs-reentrant @gol
453 -msched-prolog  -mno-sched-prolog @gol
454 -mlittle-endian  -mbig-endian  -mwords-little-endian @gol
455 -mfloat-abi=@var{name}  -msoft-float  -mhard-float  -mfpe @gol
456 -mfp16-format=@var{name}
457 -mthumb-interwork  -mno-thumb-interwork @gol
458 -mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
459 -mstructure-size-boundary=@var{n} @gol
460 -mabort-on-noreturn @gol
461 -mlong-calls  -mno-long-calls @gol
462 -msingle-pic-base  -mno-single-pic-base @gol
463 -mpic-register=@var{reg} @gol
464 -mnop-fun-dllimport @gol
465 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol
466 -mpoke-function-name @gol
467 -mthumb  -marm @gol
468 -mtpcs-frame  -mtpcs-leaf-frame @gol
469 -mcaller-super-interworking  -mcallee-super-interworking @gol
470 -mtp=@var{name} @gol
471 -mword-relocations @gol
472 -mfix-cortex-m3-ldrd}
473
474 @emph{AVR Options}
475 @gccoptlist{-mmcu=@var{mcu}  -mno-interrupts @gol
476 -mcall-prologues  -mtiny-stack  -mint8}
477
478 @emph{Blackfin Options}
479 @gccoptlist{-mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} @gol
480 -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
481 -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly @gol
482 -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library @gol
483 -mno-id-shared-library  -mshared-library-id=@var{n} @gol
484 -mleaf-id-shared-library  -mno-leaf-id-shared-library @gol
485 -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls @gol
486 -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram @gol
487 -micplb}
488
489 @emph{CRIS Options}
490 @gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
491 -mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
492 -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
493 -mstack-align  -mdata-align  -mconst-align @gol
494 -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
495 -melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
496 -mmul-bug-workaround  -mno-mul-bug-workaround}
497
498 @emph{CRX Options}
499 @gccoptlist{-mmac -mpush-args}
500
501 @emph{Darwin Options}
502 @gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
503 -arch_only  -bind_at_load  -bundle  -bundle_loader @gol
504 -client_name  -compatibility_version  -current_version @gol
505 -dead_strip @gol
506 -dependency-file  -dylib_file  -dylinker_install_name @gol
507 -dynamic  -dynamiclib  -exported_symbols_list @gol
508 -filelist  -flat_namespace  -force_cpusubtype_ALL @gol
509 -force_flat_namespace  -headerpad_max_install_names @gol
510 -iframework @gol
511 -image_base  -init  -install_name  -keep_private_externs @gol
512 -multi_module  -multiply_defined  -multiply_defined_unused @gol
513 -noall_load   -no_dead_strip_inits_and_terms @gol
514 -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit @gol
515 -pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
516 -private_bundle  -read_only_relocs  -sectalign @gol
517 -sectobjectsymbols  -whyload  -seg1addr @gol
518 -sectcreate  -sectobjectsymbols  -sectorder @gol
519 -segaddr -segs_read_only_addr -segs_read_write_addr @gol
520 -seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
521 -segprot  -segs_read_only_addr  -segs_read_write_addr @gol
522 -single_module  -static  -sub_library  -sub_umbrella @gol
523 -twolevel_namespace  -umbrella  -undefined @gol
524 -unexported_symbols_list  -weak_reference_mismatches @gol
525 -whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol
526 -mkernel -mone-byte-bool}
527
528 @emph{DEC Alpha Options}
529 @gccoptlist{-mno-fp-regs  -msoft-float  -malpha-as  -mgas @gol
530 -mieee  -mieee-with-inexact  -mieee-conformant @gol
531 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
532 -mtrap-precision=@var{mode}  -mbuild-constants @gol
533 -mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
534 -mbwx  -mmax  -mfix  -mcix @gol
535 -mfloat-vax  -mfloat-ieee @gol
536 -mexplicit-relocs  -msmall-data  -mlarge-data @gol
537 -msmall-text  -mlarge-text @gol
538 -mmemory-latency=@var{time}}
539
540 @emph{DEC Alpha/VMS Options}
541 @gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix} -mmalloc64}
542
543 @emph{FR30 Options}
544 @gccoptlist{-msmall-model -mno-lsim}
545
546 @emph{FRV Options}
547 @gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
548 -mhard-float  -msoft-float @gol
549 -malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
550 -mdouble  -mno-double @gol
551 -mmedia  -mno-media  -mmuladd  -mno-muladd @gol
552 -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic @gol
553 -mlinked-fp  -mlong-calls  -malign-labels @gol
554 -mlibrary-pic  -macc-4  -macc-8 @gol
555 -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
556 -moptimize-membar -mno-optimize-membar @gol
557 -mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
558 -mvliw-branch  -mno-vliw-branch @gol
559 -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
560 -mno-nested-cond-exec  -mtomcat-stats @gol
561 -mTLS -mtls @gol
562 -mcpu=@var{cpu}}
563
564 @emph{GNU/Linux Options}
565 @gccoptlist{-muclibc}
566
567 @emph{H8/300 Options}
568 @gccoptlist{-mrelax  -mh  -ms  -mn  -mint32  -malign-300}
569
570 @emph{HPPA Options}
571 @gccoptlist{-march=@var{architecture-type} @gol
572 -mbig-switch  -mdisable-fpregs  -mdisable-indexing @gol
573 -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
574 -mfixed-range=@var{register-range} @gol
575 -mjump-in-delay -mlinker-opt -mlong-calls @gol
576 -mlong-load-store  -mno-big-switch  -mno-disable-fpregs @gol
577 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
578 -mno-jump-in-delay  -mno-long-load-store @gol
579 -mno-portable-runtime  -mno-soft-float @gol
580 -mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
581 -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
582 -mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
583 -munix=@var{unix-std}  -nolibdld  -static  -threads}
584
585 @emph{i386 and x86-64 Options}
586 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
587 -mfpmath=@var{unit} @gol
588 -masm=@var{dialect}  -mno-fancy-math-387 @gol
589 -mno-fp-ret-in-387  -msoft-float @gol
590 -mno-wide-multiply  -mrtd  -malign-double @gol
591 -mpreferred-stack-boundary=@var{num}
592 -mincoming-stack-boundary=@var{num}
593 -mcld -mcx16 -msahf -mmovbe -mcrc32 -mrecip @gol
594 -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx @gol
595 -maes -mpclmul -mfused-madd @gol
596 -msse4a -m3dnow -mpopcnt -mabm -mfma4 -mxop -mlwp @gol
597 -mthreads  -mno-align-stringops  -minline-all-stringops @gol
598 -minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol
599 -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
600 -m96bit-long-double  -mregparm=@var{num}  -msseregparm @gol
601 -mveclibabi=@var{type} -mpc32 -mpc64 -mpc80 -mstackrealign @gol
602 -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs @gol
603 -mcmodel=@var{code-model} -mabi=@var{name} @gol
604 -m32  -m64 -mlarge-data-threshold=@var{num} @gol
605 -msse2avx}
606
607 @emph{IA-64 Options}
608 @gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
609 -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata @gol
610 -mconstant-gp  -mauto-pic  -mfused-madd @gol
611 -minline-float-divide-min-latency @gol
612 -minline-float-divide-max-throughput @gol
613 -mno-inline-float-divide @gol
614 -minline-int-divide-min-latency @gol
615 -minline-int-divide-max-throughput  @gol
616 -mno-inline-int-divide @gol
617 -minline-sqrt-min-latency -minline-sqrt-max-throughput @gol
618 -mno-inline-sqrt @gol
619 -mdwarf2-asm -mearly-stop-bits @gol
620 -mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol
621 -mtune=@var{cpu-type} -milp32 -mlp64 @gol
622 -msched-br-data-spec -msched-ar-data-spec -msched-control-spec @gol
623 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol
624 -msched-spec-ldc -msched-spec-control-ldc @gol
625 -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns @gol
626 -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path @gol
627 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost @gol
628 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=@var{max-insns}}
629
630 @emph{IA-64/VMS Options}
631 @gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix} -mmalloc64}
632
633 @emph{LM32 Options}
634 @gccoptlist{-mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled @gol
635 -msign-extend-enabled -muser-enabled}
636
637 @emph{M32R/D Options}
638 @gccoptlist{-m32r2 -m32rx -m32r @gol
639 -mdebug @gol
640 -malign-loops -mno-align-loops @gol
641 -missue-rate=@var{number} @gol
642 -mbranch-cost=@var{number} @gol
643 -mmodel=@var{code-size-model-type} @gol
644 -msdata=@var{sdata-type} @gol
645 -mno-flush-func -mflush-func=@var{name} @gol
646 -mno-flush-trap -mflush-trap=@var{number} @gol
647 -G @var{num}}
648
649 @emph{M32C Options}
650 @gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}}
651
652 @emph{M680x0 Options}
653 @gccoptlist{-march=@var{arch}  -mcpu=@var{cpu}  -mtune=@var{tune}
654 -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
655 -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407 @gol
656 -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020 @gol
657 -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort @gol
658 -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel @gol
659 -malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
660 -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library @gol
661 -mxgot -mno-xgot}
662
663 @emph{M68hc1x Options}
664 @gccoptlist{-m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12 @gol
665 -mauto-incdec  -minmax  -mlong-calls  -mshort @gol
666 -msoft-reg-count=@var{count}}
667
668 @emph{MCore Options}
669 @gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
670 -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
671 -m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
672 -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
673 -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
674
675 @emph{MeP Options}
676 @gccoptlist{-mabsdiff -mall-opts -maverage -mbased=@var{n} -mbitops @gol
677 -mc=@var{n} -mclip -mconfig=@var{name} -mcop -mcop32 -mcop64 -mivc2 @gol
678 -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax @gol
679 -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf @gol
680 -mtiny=@var{n}}
681
682 @emph{MIPS Options}
683 @gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
684 -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2 @gol
685 -mips64  -mips64r2 @gol
686 -mips16  -mno-mips16  -mflip-mips16 @gol
687 -minterlink-mips16  -mno-interlink-mips16 @gol
688 -mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
689 -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot @gol
690 -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float @gol
691 -msingle-float  -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2 @gol
692 -mfpu=@var{fpu-type} @gol
693 -msmartmips  -mno-smartmips @gol
694 -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx @gol
695 -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc @gol
696 -mlong64  -mlong32  -msym32  -mno-sym32 @gol
697 -G@var{num}  -mlocal-sdata  -mno-local-sdata @gol
698 -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt @gol
699 -membedded-data  -mno-embedded-data @gol
700 -muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
701 -mcode-readable=@var{setting} @gol
702 -msplit-addresses  -mno-split-addresses @gol
703 -mexplicit-relocs  -mno-explicit-relocs @gol
704 -mcheck-zero-division  -mno-check-zero-division @gol
705 -mdivide-traps  -mdivide-breaks @gol
706 -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
707 -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp @gol
708 -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
709 -mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120 @gol
710 -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1 @gol
711 -mflush-func=@var{func}  -mno-flush-func @gol
712 -mbranch-cost=@var{num}  -mbranch-likely  -mno-branch-likely @gol
713 -mfp-exceptions -mno-fp-exceptions @gol
714 -mvr4130-align -mno-vr4130-align -msynci -mno-synci @gol
715 -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address}
716
717 @emph{MMIX Options}
718 @gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
719 -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
720 -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
721 -mno-base-addresses  -msingle-exit  -mno-single-exit}
722
723 @emph{MN10300 Options}
724 @gccoptlist{-mmult-bug  -mno-mult-bug @gol
725 -mam33  -mno-am33 @gol
726 -mam33-2  -mno-am33-2 @gol
727 -mreturn-pointer-on-d0 @gol
728 -mno-crt0  -mrelax}
729
730 @emph{PDP-11 Options}
731 @gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
732 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
733 -mint16  -mno-int32  -mfloat32  -mno-float64 @gol
734 -mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
735 -mbranch-expensive  -mbranch-cheap @gol
736 -msplit  -mno-split  -munix-asm  -mdec-asm}
737
738 @emph{picoChip Options}
739 @gccoptlist{-mae=@var{ae_type} -mvliw-lookahead=@var{N}
740 -msymbol-as-address -mno-inefficient-warnings}
741
742 @emph{PowerPC Options}
743 See RS/6000 and PowerPC Options.
744
745 @emph{RS/6000 and PowerPC Options}
746 @gccoptlist{-mcpu=@var{cpu-type} @gol
747 -mtune=@var{cpu-type} @gol
748 -mpower  -mno-power  -mpower2  -mno-power2 @gol
749 -mpowerpc  -mpowerpc64  -mno-powerpc @gol
750 -maltivec  -mno-altivec @gol
751 -mpowerpc-gpopt  -mno-powerpc-gpopt @gol
752 -mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
753 -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd @gol
754 -mfprnd  -mno-fprnd @gol
755 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp @gol
756 -mnew-mnemonics  -mold-mnemonics @gol
757 -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
758 -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
759 -malign-power  -malign-natural @gol
760 -msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
761 -msingle-float -mdouble-float -msimple-fpu @gol
762 -mstring  -mno-string  -mupdate  -mno-update @gol
763 -mavoid-indexed-addresses  -mno-avoid-indexed-addresses @gol
764 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
765 -mstrict-align  -mno-strict-align  -mrelocatable @gol
766 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
767 -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
768 -mdynamic-no-pic  -maltivec -mswdiv @gol
769 -mprioritize-restricted-insns=@var{priority} @gol
770 -msched-costly-dep=@var{dependence_type} @gol
771 -minsert-sched-nops=@var{scheme} @gol
772 -mcall-sysv  -mcall-netbsd @gol
773 -maix-struct-return  -msvr4-struct-return @gol
774 -mabi=@var{abi-type} -msecure-plt -mbss-plt @gol
775 -misel -mno-isel @gol
776 -misel=yes  -misel=no @gol
777 -mspe -mno-spe @gol
778 -mspe=yes  -mspe=no @gol
779 -mpaired @gol
780 -mgen-cell-microcode -mwarn-cell-microcode @gol
781 -mvrsave -mno-vrsave @gol
782 -mmulhw -mno-mulhw @gol
783 -mdlmzb -mno-dlmzb @gol
784 -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol
785 -mprototype  -mno-prototype @gol
786 -msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
787 -msdata=@var{opt}  -mvxworks  -G @var{num}  -pthread}
788
789 @emph{RX Options}
790 @gccoptlist{-m64bit-doubles  -m32bit-doubles  -fpu  -nofpu@gol
791 -mcpu= -patch=@gol
792 -mbig-endian-data -mlittle-endian-data @gol
793 -msmall-data @gol
794 -msim  -mno-sim@gol
795 -mas100-syntax -mno-as100-syntax@gol
796 -mrelax@gol
797 -mmax-constant-size=@gol
798 -mint-register=@gol
799 -msave-acc-in-interrupts}
800
801 @emph{S/390 and zSeries Options}
802 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
803 -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp @gol
804 -mlong-double-64 -mlong-double-128 @gol
805 -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack @gol
806 -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
807 -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
808 -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
809 -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard}
810
811 @emph{Score Options}
812 @gccoptlist{-meb -mel @gol
813 -mnhwloop @gol
814 -muls @gol
815 -mmac @gol
816 -mscore5 -mscore5u -mscore7 -mscore7d}
817
818 @emph{SH Options}
819 @gccoptlist{-m1  -m2  -m2e @gol
820 -m2a-nofpu -m2a-single-only -m2a-single -m2a @gol
821 -m3  -m3e @gol
822 -m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
823 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol
824 -m5-64media  -m5-64media-nofpu @gol
825 -m5-32media  -m5-32media-nofpu @gol
826 -m5-compact  -m5-compact-nofpu @gol
827 -mb  -ml  -mdalign  -mrelax @gol
828 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
829 -mieee  -mbitops  -misize  -minline-ic_invalidate -mpadstruct  -mspace @gol
830 -mprefergot  -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
831 -mdivsi3_libfunc=@var{name} -mfixed-range=@var{register-range} @gol
832 -madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
833 -minvalid-symbols}
834
835 @emph{SPARC Options}
836 @gccoptlist{-mcpu=@var{cpu-type} @gol
837 -mtune=@var{cpu-type} @gol
838 -mcmodel=@var{code-model} @gol
839 -m32  -m64  -mapp-regs  -mno-app-regs @gol
840 -mfaster-structs  -mno-faster-structs @gol
841 -mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
842 -mhard-quad-float  -msoft-quad-float @gol
843 -mimpure-text  -mno-impure-text  -mlittle-endian @gol
844 -mstack-bias  -mno-stack-bias @gol
845 -munaligned-doubles  -mno-unaligned-doubles @gol
846 -mv8plus  -mno-v8plus  -mvis  -mno-vis
847 -threads -pthreads -pthread}
848
849 @emph{SPU Options}
850 @gccoptlist{-mwarn-reloc -merror-reloc @gol
851 -msafe-dma -munsafe-dma @gol
852 -mbranch-hints @gol
853 -msmall-mem -mlarge-mem -mstdmain @gol
854 -mfixed-range=@var{register-range} @gol
855 -mea32 -mea64 @gol
856 -maddress-space-conversion -mno-address-space-conversion @gol
857 -mcache-size=@var{cache-size} @gol
858 -matomic-updates -mno-atomic-updates}
859
860 @emph{System V Options}
861 @gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
862
863 @emph{V850 Options}
864 @gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
865 -mprolog-function  -mno-prolog-function  -mspace @gol
866 -mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
867 -mapp-regs  -mno-app-regs @gol
868 -mdisable-callt  -mno-disable-callt @gol
869 -mv850e1 @gol
870 -mv850e @gol
871 -mv850  -mbig-switch}
872
873 @emph{VAX Options}
874 @gccoptlist{-mg  -mgnu  -munix}
875
876 @emph{VxWorks Options}
877 @gccoptlist{-mrtp  -non-static  -Bstatic  -Bdynamic @gol
878 -Xbind-lazy  -Xbind-now}
879
880 @emph{x86-64 Options}
881 See i386 and x86-64 Options.
882
883 @emph{i386 and x86-64 Windows Options}
884 @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll
885 -mnop-fun-dllimport -mthread -municode -mwin32 -mwindows
886 -fno-set-stack-executable}
887
888 @emph{Xstormy16 Options}
889 @gccoptlist{-msim}
890
891 @emph{Xtensa Options}
892 @gccoptlist{-mconst16 -mno-const16 @gol
893 -mfused-madd  -mno-fused-madd @gol
894 -mserialize-volatile  -mno-serialize-volatile @gol
895 -mtext-section-literals  -mno-text-section-literals @gol
896 -mtarget-align  -mno-target-align @gol
897 -mlongcalls  -mno-longcalls}
898
899 @emph{zSeries Options}
900 See S/390 and zSeries Options.
901
902 @item Code Generation Options
903 @xref{Code Gen Options,,Options for Code Generation Conventions}.
904 @gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
905 -ffixed-@var{reg}  -fexceptions @gol
906 -fnon-call-exceptions  -funwind-tables @gol
907 -fasynchronous-unwind-tables @gol
908 -finhibit-size-directive  -finstrument-functions @gol
909 -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol
910 -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} @gol
911 -fno-common  -fno-ident @gol
912 -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE @gol
913 -fno-jump-tables @gol
914 -frecord-gcc-switches @gol
915 -freg-struct-return  -fshort-enums @gol
916 -fshort-double  -fshort-wchar @gol
917 -fverbose-asm  -fpack-struct[=@var{n}]  -fstack-check @gol
918 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
919 -fno-stack-limit @gol
920 -fleading-underscore  -ftls-model=@var{model} @gol
921 -ftrapv  -fwrapv  -fbounds-check @gol
922 -fvisibility}
923 @end table
924
925 @menu
926 * Overall Options::     Controlling the kind of output:
927                         an executable, object files, assembler files,
928                         or preprocessed source.
929 * C Dialect Options::   Controlling the variant of C language compiled.
930 * C++ Dialect Options:: Variations on C++.
931 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
932                         and Objective-C++.
933 * Language Independent Options:: Controlling how diagnostics should be
934                         formatted.
935 * Warning Options::     How picky should the compiler be?
936 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
937 * Optimize Options::    How much optimization?
938 * Preprocessor Options:: Controlling header files and macro definitions.
939                          Also, getting dependency information for Make.
940 * Assembler Options::   Passing options to the assembler.
941 * Link Options::        Specifying libraries and so on.
942 * Directory Options::   Where to find header files and libraries.
943                         Where to find the compiler executable files.
944 * Spec Files::          How to pass switches to sub-processes.
945 * Target Options::      Running a cross-compiler, or an old version of GCC.
946 @end menu
947
948 @node Overall Options
949 @section Options Controlling the Kind of Output
950
951 Compilation can involve up to four stages: preprocessing, compilation
952 proper, assembly and linking, always in that order.  GCC is capable of
953 preprocessing and compiling several files either into several
954 assembler input files, or into one assembler input file; then each
955 assembler input file produces an object file, and linking combines all
956 the object files (those newly compiled, and those specified as input)
957 into an executable file.
958
959 @cindex file name suffix
960 For any given input file, the file name suffix determines what kind of
961 compilation is done:
962
963 @table @gcctabopt
964 @item @var{file}.c
965 C source code which must be preprocessed.
966
967 @item @var{file}.i
968 C source code which should not be preprocessed.
969
970 @item @var{file}.ii
971 C++ source code which should not be preprocessed.
972
973 @item @var{file}.m
974 Objective-C source code.  Note that you must link with the @file{libobjc}
975 library to make an Objective-C program work.
976
977 @item @var{file}.mi
978 Objective-C source code which should not be preprocessed.
979
980 @item @var{file}.mm
981 @itemx @var{file}.M
982 Objective-C++ source code.  Note that you must link with the @file{libobjc}
983 library to make an Objective-C++ program work.  Note that @samp{.M} refers
984 to a literal capital M@.
985
986 @item @var{file}.mii
987 Objective-C++ source code which should not be preprocessed.
988
989 @item @var{file}.h
990 C, C++, Objective-C or Objective-C++ header file to be turned into a
991 precompiled header.
992
993 @item @var{file}.cc
994 @itemx @var{file}.cp
995 @itemx @var{file}.cxx
996 @itemx @var{file}.cpp
997 @itemx @var{file}.CPP
998 @itemx @var{file}.c++
999 @itemx @var{file}.C
1000 C++ source code which must be preprocessed.  Note that in @samp{.cxx},
1001 the last two letters must both be literally @samp{x}.  Likewise,
1002 @samp{.C} refers to a literal capital C@.
1003
1004 @item @var{file}.mm
1005 @itemx @var{file}.M
1006 Objective-C++ source code which must be preprocessed.
1007
1008 @item @var{file}.mii
1009 Objective-C++ source code which should not be preprocessed.
1010
1011 @item @var{file}.hh
1012 @itemx @var{file}.H
1013 @itemx @var{file}.hp
1014 @itemx @var{file}.hxx
1015 @itemx @var{file}.hpp
1016 @itemx @var{file}.HPP
1017 @itemx @var{file}.h++
1018 @itemx @var{file}.tcc
1019 C++ header file to be turned into a precompiled header.
1020
1021 @item @var{file}.f
1022 @itemx @var{file}.for
1023 @itemx @var{file}.ftn
1024 Fixed form Fortran source code which should not be preprocessed.
1025
1026 @item @var{file}.F
1027 @itemx @var{file}.FOR
1028 @itemx @var{file}.fpp
1029 @itemx @var{file}.FPP
1030 @itemx @var{file}.FTN
1031 Fixed form Fortran source code which must be preprocessed (with the traditional
1032 preprocessor).
1033
1034 @item @var{file}.f90
1035 @itemx @var{file}.f95
1036 @itemx @var{file}.f03
1037 @itemx @var{file}.f08
1038 Free form Fortran source code which should not be preprocessed.
1039
1040 @item @var{file}.F90
1041 @itemx @var{file}.F95
1042 @itemx @var{file}.F03
1043 @itemx @var{file}.F08
1044 Free form Fortran source code which must be preprocessed (with the
1045 traditional preprocessor).
1046
1047 @c FIXME: Descriptions of Java file types.
1048 @c @var{file}.java
1049 @c @var{file}.class
1050 @c @var{file}.zip
1051 @c @var{file}.jar
1052
1053 @item @var{file}.ads
1054 Ada source code file which contains a library unit declaration (a
1055 declaration of a package, subprogram, or generic, or a generic
1056 instantiation), or a library unit renaming declaration (a package,
1057 generic, or subprogram renaming declaration).  Such files are also
1058 called @dfn{specs}.
1059
1060 @item @var{file}.adb
1061 Ada source code file containing a library unit body (a subprogram or
1062 package body).  Such files are also called @dfn{bodies}.
1063
1064 @c GCC also knows about some suffixes for languages not yet included:
1065 @c Pascal:
1066 @c @var{file}.p
1067 @c @var{file}.pas
1068 @c Ratfor:
1069 @c @var{file}.r
1070
1071 @item @var{file}.s
1072 Assembler code.
1073
1074 @item @var{file}.S
1075 @itemx @var{file}.sx
1076 Assembler code which must be preprocessed.
1077
1078 @item @var{other}
1079 An object file to be fed straight into linking.
1080 Any file name with no recognized suffix is treated this way.
1081 @end table
1082
1083 @opindex x
1084 You can specify the input language explicitly with the @option{-x} option:
1085
1086 @table @gcctabopt
1087 @item -x @var{language}
1088 Specify explicitly the @var{language} for the following input files
1089 (rather than letting the compiler choose a default based on the file
1090 name suffix).  This option applies to all following input files until
1091 the next @option{-x} option.  Possible values for @var{language} are:
1092 @smallexample
1093 c  c-header  c-cpp-output
1094 c++  c++-header  c++-cpp-output
1095 objective-c  objective-c-header  objective-c-cpp-output
1096 objective-c++ objective-c++-header objective-c++-cpp-output
1097 assembler  assembler-with-cpp
1098 ada
1099 f77  f77-cpp-input f95  f95-cpp-input
1100 java
1101 @end smallexample
1102
1103 @item -x none
1104 Turn off any specification of a language, so that subsequent files are
1105 handled according to their file name suffixes (as they are if @option{-x}
1106 has not been used at all).
1107
1108 @item -pass-exit-codes
1109 @opindex pass-exit-codes
1110 Normally the @command{gcc} program will exit with the code of 1 if any
1111 phase of the compiler returns a non-success return code.  If you specify
1112 @option{-pass-exit-codes}, the @command{gcc} program will instead return with
1113 numerically highest error produced by any phase that returned an error
1114 indication.  The C, C++, and Fortran frontends return 4, if an internal
1115 compiler error is encountered.
1116 @end table
1117
1118 If you only want some of the stages of compilation, you can use
1119 @option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
1120 one of the options @option{-c}, @option{-S}, or @option{-E} to say where
1121 @command{gcc} is to stop.  Note that some combinations (for example,
1122 @samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
1123
1124 @table @gcctabopt
1125 @item -c
1126 @opindex c
1127 Compile or assemble the source files, but do not link.  The linking
1128 stage simply is not done.  The ultimate output is in the form of an
1129 object file for each source file.
1130
1131 By default, the object file name for a source file is made by replacing
1132 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
1133
1134 Unrecognized input files, not requiring compilation or assembly, are
1135 ignored.
1136
1137 @item -S
1138 @opindex S
1139 Stop after the stage of compilation proper; do not assemble.  The output
1140 is in the form of an assembler code file for each non-assembler input
1141 file specified.
1142
1143 By default, the assembler file name for a source file is made by
1144 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
1145
1146 Input files that don't require compilation are ignored.
1147
1148 @item -E
1149 @opindex E
1150 Stop after the preprocessing stage; do not run the compiler proper.  The
1151 output is in the form of preprocessed source code, which is sent to the
1152 standard output.
1153
1154 Input files which don't require preprocessing are ignored.
1155
1156 @cindex output file option
1157 @item -o @var{file}
1158 @opindex o
1159 Place output in file @var{file}.  This applies regardless to whatever
1160 sort of output is being produced, whether it be an executable file,
1161 an object file, an assembler file or preprocessed C code.
1162
1163 If @option{-o} is not specified, the default is to put an executable
1164 file in @file{a.out}, the object file for
1165 @file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
1166 assembler file in @file{@var{source}.s}, a precompiled header file in
1167 @file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
1168 standard output.
1169
1170 @item -v
1171 @opindex v
1172 Print (on standard error output) the commands executed to run the stages
1173 of compilation.  Also print the version number of the compiler driver
1174 program and of the preprocessor and the compiler proper.
1175
1176 @item -###
1177 @opindex ###
1178 Like @option{-v} except the commands are not executed and all command
1179 arguments are quoted.  This is useful for shell scripts to capture the
1180 driver-generated command lines.
1181
1182 @item -pipe
1183 @opindex pipe
1184 Use pipes rather than temporary files for communication between the
1185 various stages of compilation.  This fails to work on some systems where
1186 the assembler is unable to read from a pipe; but the GNU assembler has
1187 no trouble.
1188
1189 @item -combine
1190 @opindex combine
1191 If you are compiling multiple source files, this option tells the driver
1192 to pass all the source files to the compiler at once (for those
1193 languages for which the compiler can handle this).  This will allow
1194 intermodule analysis (IMA) to be performed by the compiler.  Currently the only
1195 language for which this is supported is C@.  If you pass source files for
1196 multiple languages to the driver, using this option, the driver will invoke
1197 the compiler(s) that support IMA once each, passing each compiler all the
1198 source files appropriate for it.  For those languages that do not support
1199 IMA this option will be ignored, and the compiler will be invoked once for
1200 each source file in that language.  If you use this option in conjunction
1201 with @option{-save-temps}, the compiler will generate multiple
1202 pre-processed files
1203 (one for each source file), but only one (combined) @file{.o} or
1204 @file{.s} file.
1205
1206 @item --help
1207 @opindex help
1208 Print (on the standard output) a description of the command line options
1209 understood by @command{gcc}.  If the @option{-v} option is also specified
1210 then @option{--help} will also be passed on to the various processes
1211 invoked by @command{gcc}, so that they can display the command line options
1212 they accept.  If the @option{-Wextra} option has also been specified
1213 (prior to the @option{--help} option), then command line options which
1214 have no documentation associated with them will also be displayed.
1215
1216 @item --target-help
1217 @opindex target-help
1218 Print (on the standard output) a description of target-specific command
1219 line options for each tool.  For some targets extra target-specific
1220 information may also be printed.
1221
1222 @item --help=@{@var{class}@r{|[}^@r{]}@var{qualifier}@}@r{[},@dots{}@r{]}
1223 Print (on the standard output) a description of the command line
1224 options understood by the compiler that fit into all specified classes
1225 and qualifiers.  These are the supported classes:
1226
1227 @table @asis
1228 @item @samp{optimizers}
1229 This will display all of the optimization options supported by the
1230 compiler.
1231
1232 @item @samp{warnings}
1233 This will display all of the options controlling warning messages
1234 produced by the compiler.
1235
1236 @item @samp{target}
1237 This will display target-specific options.  Unlike the
1238 @option{--target-help} option however, target-specific options of the
1239 linker and assembler will not be displayed.  This is because those
1240 tools do not currently support the extended @option{--help=} syntax.
1241
1242 @item @samp{params}
1243 This will display the values recognized by the @option{--param}
1244 option.
1245
1246 @item @var{language}
1247 This will display the options supported for @var{language}, where
1248 @var{language} is the name of one of the languages supported in this
1249 version of GCC.
1250
1251 @item @samp{common}
1252 This will display the options that are common to all languages.
1253 @end table
1254
1255 These are the supported qualifiers:
1256
1257 @table @asis
1258 @item @samp{undocumented}
1259 Display only those options which are undocumented.
1260
1261 @item @samp{joined}
1262 Display options which take an argument that appears after an equal
1263 sign in the same continuous piece of text, such as:
1264 @samp{--help=target}.
1265
1266 @item @samp{separate}
1267 Display options which take an argument that appears as a separate word
1268 following the original option, such as: @samp{-o output-file}.
1269 @end table
1270
1271 Thus for example to display all the undocumented target-specific
1272 switches supported by the compiler the following can be used:
1273
1274 @smallexample
1275 --help=target,undocumented
1276 @end smallexample
1277
1278 The sense of a qualifier can be inverted by prefixing it with the
1279 @samp{^} character, so for example to display all binary warning
1280 options (i.e., ones that are either on or off and that do not take an
1281 argument), which have a description the following can be used:
1282
1283 @smallexample
1284 --help=warnings,^joined,^undocumented
1285 @end smallexample
1286
1287 The argument to @option{--help=} should not consist solely of inverted
1288 qualifiers.
1289
1290 Combining several classes is possible, although this usually
1291 restricts the output by so much that there is nothing to display.  One
1292 case where it does work however is when one of the classes is
1293 @var{target}.  So for example to display all the target-specific
1294 optimization options the following can be used:
1295
1296 @smallexample
1297 --help=target,optimizers
1298 @end smallexample
1299
1300 The @option{--help=} option can be repeated on the command line.  Each
1301 successive use will display its requested class of options, skipping
1302 those that have already been displayed.
1303
1304 If the @option{-Q} option appears on the command line before the
1305 @option{--help=} option, then the descriptive text displayed by
1306 @option{--help=} is changed.  Instead of describing the displayed
1307 options, an indication is given as to whether the option is enabled,
1308 disabled or set to a specific value (assuming that the compiler
1309 knows this at the point where the @option{--help=} option is used).
1310
1311 Here is a truncated example from the ARM port of @command{gcc}:
1312
1313 @smallexample
1314   % gcc -Q -mabi=2 --help=target -c
1315   The following options are target specific:
1316   -mabi=                                2
1317   -mabort-on-noreturn                   [disabled]
1318   -mapcs                                [disabled]
1319 @end smallexample
1320
1321 The output is sensitive to the effects of previous command line
1322 options, so for example it is possible to find out which optimizations
1323 are enabled at @option{-O2} by using:
1324
1325 @smallexample
1326 -Q -O2 --help=optimizers
1327 @end smallexample
1328
1329 Alternatively you can discover which binary optimizations are enabled
1330 by @option{-O3} by using:
1331
1332 @smallexample
1333 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1334 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1335 diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1336 @end smallexample
1337
1338 @item -no-canonical-prefixes
1339 @opindex no-canonical-prefixes
1340 Do not expand any symbolic links, resolve references to @samp{/../}
1341 or @samp{/./}, or make the path absolute when generating a relative
1342 prefix.
1343
1344 @item --version
1345 @opindex version
1346 Display the version number and copyrights of the invoked GCC@.
1347
1348 @item -wrapper
1349 @opindex wrapper
1350 Invoke all subcommands under a wrapper program. It takes a single
1351 comma separated list as an argument, which will be used to invoke
1352 the wrapper:
1353
1354 @smallexample
1355 gcc -c t.c -wrapper gdb,--args
1356 @end smallexample
1357
1358 This will invoke all subprograms of gcc under "gdb --args",
1359 thus cc1 invocation will be "gdb --args cc1 ...".
1360
1361 @item -fplugin=@var{name}.so
1362 Load the plugin code in file @var{name}.so, assumed to be a
1363 shared object to be dlopen'd by the compiler.  The base name of
1364 the shared object file is used to identify the plugin for the
1365 purposes of argument parsing (See
1366 @option{-fplugin-arg-@var{name}-@var{key}=@var{value}} below).
1367 Each plugin should define the callback functions specified in the
1368 Plugins API.
1369
1370 @item -fplugin-arg-@var{name}-@var{key}=@var{value}
1371 Define an argument called @var{key} with a value of @var{value}
1372 for the plugin called @var{name}.
1373
1374 @include @value{srcdir}/../libiberty/at-file.texi
1375 @end table
1376
1377 @node Invoking G++
1378 @section Compiling C++ Programs
1379
1380 @cindex suffixes for C++ source
1381 @cindex C++ source file suffixes
1382 C++ source files conventionally use one of the suffixes @samp{.C},
1383 @samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
1384 @samp{.cxx}; C++ header files often use @samp{.hh}, @samp{.hpp},
1385 @samp{.H}, or (for shared template code) @samp{.tcc}; and
1386 preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
1387 files with these names and compiles them as C++ programs even if you
1388 call the compiler the same way as for compiling C programs (usually
1389 with the name @command{gcc}).
1390
1391 @findex g++
1392 @findex c++
1393 However, the use of @command{gcc} does not add the C++ library.
1394 @command{g++} is a program that calls GCC and treats @samp{.c},
1395 @samp{.h} and @samp{.i} files as C++ source files instead of C source
1396 files unless @option{-x} is used, and automatically specifies linking
1397 against the C++ library.  This program is also useful when
1398 precompiling a C header file with a @samp{.h} extension for use in C++
1399 compilations.  On many systems, @command{g++} is also installed with
1400 the name @command{c++}.
1401
1402 @cindex invoking @command{g++}
1403 When you compile C++ programs, you may specify many of the same
1404 command-line options that you use for compiling programs in any
1405 language; or command-line options meaningful for C and related
1406 languages; or options that are meaningful only for C++ programs.
1407 @xref{C Dialect Options,,Options Controlling C Dialect}, for
1408 explanations of options for languages related to C@.
1409 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
1410 explanations of options that are meaningful only for C++ programs.
1411
1412 @node C Dialect Options
1413 @section Options Controlling C Dialect
1414 @cindex dialect options
1415 @cindex language dialect options
1416 @cindex options, dialect
1417
1418 The following options control the dialect of C (or languages derived
1419 from C, such as C++, Objective-C and Objective-C++) that the compiler
1420 accepts:
1421
1422 @table @gcctabopt
1423 @cindex ANSI support
1424 @cindex ISO support
1425 @item -ansi
1426 @opindex ansi
1427 In C mode, this is equivalent to @samp{-std=c90}. In C++ mode, it is
1428 equivalent to @samp{-std=c++98}.
1429
1430 This turns off certain features of GCC that are incompatible with ISO
1431 C90 (when compiling C code), or of standard C++ (when compiling C++ code),
1432 such as the @code{asm} and @code{typeof} keywords, and
1433 predefined macros such as @code{unix} and @code{vax} that identify the
1434 type of system you are using.  It also enables the undesirable and
1435 rarely used ISO trigraph feature.  For the C compiler,
1436 it disables recognition of C++ style @samp{//} comments as well as
1437 the @code{inline} keyword.
1438
1439 The alternate keywords @code{__asm__}, @code{__extension__},
1440 @code{__inline__} and @code{__typeof__} continue to work despite
1441 @option{-ansi}.  You would not want to use them in an ISO C program, of
1442 course, but it is useful to put them in header files that might be included
1443 in compilations done with @option{-ansi}.  Alternate predefined macros
1444 such as @code{__unix__} and @code{__vax__} are also available, with or
1445 without @option{-ansi}.
1446
1447 The @option{-ansi} option does not cause non-ISO programs to be
1448 rejected gratuitously.  For that, @option{-pedantic} is required in
1449 addition to @option{-ansi}.  @xref{Warning Options}.
1450
1451 The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
1452 option is used.  Some header files may notice this macro and refrain
1453 from declaring certain functions or defining certain macros that the
1454 ISO standard doesn't call for; this is to avoid interfering with any
1455 programs that might use these names for other things.
1456
1457 Functions that would normally be built in but do not have semantics
1458 defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
1459 functions when @option{-ansi} is used.  @xref{Other Builtins,,Other
1460 built-in functions provided by GCC}, for details of the functions
1461 affected.
1462
1463 @item -std=
1464 @opindex std
1465 Determine the language standard. @xref{Standards,,Language Standards
1466 Supported by GCC}, for details of these standard versions.  This option
1467 is currently only supported when compiling C or C++.
1468
1469 The compiler can accept several base standards, such as @samp{c90} or
1470 @samp{c++98}, and GNU dialects of those standards, such as
1471 @samp{gnu90} or @samp{gnu++98}.  By specifying a base standard, the
1472 compiler will accept all programs following that standard and those
1473 using GNU extensions that do not contradict it.  For example,
1474 @samp{-std=c90} turns off certain features of GCC that are
1475 incompatible with ISO C90, such as the @code{asm} and @code{typeof}
1476 keywords, but not other GNU extensions that do not have a meaning in
1477 ISO C90, such as omitting the middle term of a @code{?:}
1478 expression. On the other hand, by specifying a GNU dialect of a
1479 standard, all features the compiler support are enabled, even when
1480 those features change the meaning of the base standard and some
1481 strict-conforming programs may be rejected.  The particular standard
1482 is used by @option{-pedantic} to identify which features are GNU
1483 extensions given that version of the standard. For example
1484 @samp{-std=gnu90 -pedantic} would warn about C++ style @samp{//}
1485 comments, while @samp{-std=gnu99 -pedantic} would not.
1486
1487 A value for this option must be provided; possible values are
1488
1489 @table @samp
1490 @item c90
1491 @itemx c89
1492 @itemx iso9899:1990
1493 Support all ISO C90 programs (certain GNU extensions that conflict
1494 with ISO C90 are disabled). Same as @option{-ansi} for C code.
1495
1496 @item iso9899:199409
1497 ISO C90 as modified in amendment 1.
1498
1499 @item c99
1500 @itemx c9x
1501 @itemx iso9899:1999
1502 @itemx iso9899:199x
1503 ISO C99.  Note that this standard is not yet fully supported; see
1504 @w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
1505 names @samp{c9x} and @samp{iso9899:199x} are deprecated.
1506
1507 @item gnu90
1508 @itemx gnu89
1509 GNU dialect of ISO C90 (including some C99 features). This
1510 is the default for C code.
1511
1512 @item gnu99
1513 @itemx gnu9x
1514 GNU dialect of ISO C99.  When ISO C99 is fully implemented in GCC,
1515 this will become the default.  The name @samp{gnu9x} is deprecated.
1516
1517 @item c++98
1518 The 1998 ISO C++ standard plus amendments. Same as @option{-ansi} for
1519 C++ code.
1520
1521 @item gnu++98
1522 GNU dialect of @option{-std=c++98}.  This is the default for
1523 C++ code.
1524
1525 @item c++0x
1526 The working draft of the upcoming ISO C++0x standard. This option
1527 enables experimental features that are likely to be included in
1528 C++0x. The working draft is constantly changing, and any feature that is
1529 enabled by this flag may be removed from future versions of GCC if it is
1530 not part of the C++0x standard.
1531
1532 @item gnu++0x
1533 GNU dialect of @option{-std=c++0x}. This option enables
1534 experimental features that may be removed in future versions of GCC.
1535 @end table
1536
1537 @item -fgnu89-inline
1538 @opindex fgnu89-inline
1539 The option @option{-fgnu89-inline} tells GCC to use the traditional
1540 GNU semantics for @code{inline} functions when in C99 mode.
1541 @xref{Inline,,An Inline Function is As Fast As a Macro}.  This option
1542 is accepted and ignored by GCC versions 4.1.3 up to but not including
1543 4.3.  In GCC versions 4.3 and later it changes the behavior of GCC in
1544 C99 mode.  Using this option is roughly equivalent to adding the
1545 @code{gnu_inline} function attribute to all inline functions
1546 (@pxref{Function Attributes}).
1547
1548 The option @option{-fno-gnu89-inline} explicitly tells GCC to use the
1549 C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it
1550 specifies the default behavior).  This option was first supported in
1551 GCC 4.3.  This option is not supported in @option{-std=c90} or
1552 @option{-std=gnu90} mode.
1553
1554 The preprocessor macros @code{__GNUC_GNU_INLINE__} and
1555 @code{__GNUC_STDC_INLINE__} may be used to check which semantics are
1556 in effect for @code{inline} functions.  @xref{Common Predefined
1557 Macros,,,cpp,The C Preprocessor}.
1558
1559 @item -aux-info @var{filename}
1560 @opindex aux-info
1561 Output to the given filename prototyped declarations for all functions
1562 declared and/or defined in a translation unit, including those in header
1563 files.  This option is silently ignored in any language other than C@.
1564
1565 Besides declarations, the file indicates, in comments, the origin of
1566 each declaration (source file and line), whether the declaration was
1567 implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1568 @samp{O} for old, respectively, in the first character after the line
1569 number and the colon), and whether it came from a declaration or a
1570 definition (@samp{C} or @samp{F}, respectively, in the following
1571 character).  In the case of function definitions, a K&R-style list of
1572 arguments followed by their declarations is also provided, inside
1573 comments, after the declaration.
1574
1575 @item -fno-asm
1576 @opindex fno-asm
1577 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1578 keyword, so that code can use these words as identifiers.  You can use
1579 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
1580 instead.  @option{-ansi} implies @option{-fno-asm}.
1581
1582 In C++, this switch only affects the @code{typeof} keyword, since
1583 @code{asm} and @code{inline} are standard keywords.  You may want to
1584 use the @option{-fno-gnu-keywords} flag instead, which has the same
1585 effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1586 switch only affects the @code{asm} and @code{typeof} keywords, since
1587 @code{inline} is a standard keyword in ISO C99.
1588
1589 @item -fno-builtin
1590 @itemx -fno-builtin-@var{function}
1591 @opindex fno-builtin
1592 @cindex built-in functions
1593 Don't recognize built-in functions that do not begin with
1594 @samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
1595 functions provided by GCC}, for details of the functions affected,
1596 including those which are not built-in functions when @option{-ansi} or
1597 @option{-std} options for strict ISO C conformance are used because they
1598 do not have an ISO standard meaning.
1599
1600 GCC normally generates special code to handle certain built-in functions
1601 more efficiently; for instance, calls to @code{alloca} may become single
1602 instructions that adjust the stack directly, and calls to @code{memcpy}
1603 may become inline copy loops.  The resulting code is often both smaller
1604 and faster, but since the function calls no longer appear as such, you
1605 cannot set a breakpoint on those calls, nor can you change the behavior
1606 of the functions by linking with a different library.  In addition,
1607 when a function is recognized as a built-in function, GCC may use
1608 information about that function to warn about problems with calls to
1609 that function, or to generate more efficient code, even if the
1610 resulting code still contains calls to that function.  For example,
1611 warnings are given with @option{-Wformat} for bad calls to
1612 @code{printf}, when @code{printf} is built in, and @code{strlen} is
1613 known not to modify global memory.
1614
1615 With the @option{-fno-builtin-@var{function}} option
1616 only the built-in function @var{function} is
1617 disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
1618 function is named that is not built-in in this version of GCC, this
1619 option is ignored.  There is no corresponding
1620 @option{-fbuiltin-@var{function}} option; if you wish to enable
1621 built-in functions selectively when using @option{-fno-builtin} or
1622 @option{-ffreestanding}, you may define macros such as:
1623
1624 @smallexample
1625 #define abs(n)          __builtin_abs ((n))
1626 #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1627 @end smallexample
1628
1629 @item -fhosted
1630 @opindex fhosted
1631 @cindex hosted environment
1632
1633 Assert that compilation takes place in a hosted environment.  This implies
1634 @option{-fbuiltin}.  A hosted environment is one in which the
1635 entire standard library is available, and in which @code{main} has a return
1636 type of @code{int}.  Examples are nearly everything except a kernel.
1637 This is equivalent to @option{-fno-freestanding}.
1638
1639 @item -ffreestanding
1640 @opindex ffreestanding
1641 @cindex hosted environment
1642
1643 Assert that compilation takes place in a freestanding environment.  This
1644 implies @option{-fno-builtin}.  A freestanding environment
1645 is one in which the standard library may not exist, and program startup may
1646 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
1647 This is equivalent to @option{-fno-hosted}.
1648
1649 @xref{Standards,,Language Standards Supported by GCC}, for details of
1650 freestanding and hosted environments.
1651
1652 @item -fopenmp
1653 @opindex fopenmp
1654 @cindex openmp parallel
1655 Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
1656 @code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
1657 compiler generates parallel code according to the OpenMP Application
1658 Program Interface v3.0 @w{@uref{http://www.openmp.org/}}.  This option
1659 implies @option{-pthread}, and thus is only supported on targets that
1660 have support for @option{-pthread}.
1661
1662 @item -fms-extensions
1663 @opindex fms-extensions
1664 Accept some non-standard constructs used in Microsoft header files.
1665
1666 Some cases of unnamed fields in structures and unions are only
1667 accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
1668 fields within structs/unions}, for details.
1669
1670 @item -trigraphs
1671 @opindex trigraphs
1672 Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
1673 options for strict ISO C conformance) implies @option{-trigraphs}.
1674
1675 @item -no-integrated-cpp
1676 @opindex no-integrated-cpp
1677 Performs a compilation in two passes: preprocessing and compiling.  This
1678 option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the
1679 @option{-B} option.  The user supplied compilation step can then add in
1680 an additional preprocessing step after normal preprocessing but before
1681 compiling.  The default is to use the integrated cpp (internal cpp)
1682
1683 The semantics of this option will change if "cc1", "cc1plus", and
1684 "cc1obj" are merged.
1685
1686 @cindex traditional C language
1687 @cindex C language, traditional
1688 @item -traditional
1689 @itemx -traditional-cpp
1690 @opindex traditional-cpp
1691 @opindex traditional
1692 Formerly, these options caused GCC to attempt to emulate a pre-standard
1693 C compiler.  They are now only supported with the @option{-E} switch.
1694 The preprocessor continues to support a pre-standard mode.  See the GNU
1695 CPP manual for details.
1696
1697 @item -fcond-mismatch
1698 @opindex fcond-mismatch
1699 Allow conditional expressions with mismatched types in the second and
1700 third arguments.  The value of such an expression is void.  This option
1701 is not supported for C++.
1702
1703 @item -flax-vector-conversions
1704 @opindex flax-vector-conversions
1705 Allow implicit conversions between vectors with differing numbers of
1706 elements and/or incompatible element types.  This option should not be
1707 used for new code.
1708
1709 @item -funsigned-char
1710 @opindex funsigned-char
1711 Let the type @code{char} be unsigned, like @code{unsigned char}.
1712
1713 Each kind of machine has a default for what @code{char} should
1714 be.  It is either like @code{unsigned char} by default or like
1715 @code{signed char} by default.
1716
1717 Ideally, a portable program should always use @code{signed char} or
1718 @code{unsigned char} when it depends on the signedness of an object.
1719 But many programs have been written to use plain @code{char} and
1720 expect it to be signed, or expect it to be unsigned, depending on the
1721 machines they were written for.  This option, and its inverse, let you
1722 make such a program work with the opposite default.
1723
1724 The type @code{char} is always a distinct type from each of
1725 @code{signed char} or @code{unsigned char}, even though its behavior
1726 is always just like one of those two.
1727
1728 @item -fsigned-char
1729 @opindex fsigned-char
1730 Let the type @code{char} be signed, like @code{signed char}.
1731
1732 Note that this is equivalent to @option{-fno-unsigned-char}, which is
1733 the negative form of @option{-funsigned-char}.  Likewise, the option
1734 @option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
1735
1736 @item -fsigned-bitfields
1737 @itemx -funsigned-bitfields
1738 @itemx -fno-signed-bitfields
1739 @itemx -fno-unsigned-bitfields
1740 @opindex fsigned-bitfields
1741 @opindex funsigned-bitfields
1742 @opindex fno-signed-bitfields
1743 @opindex fno-unsigned-bitfields
1744 These options control whether a bit-field is signed or unsigned, when the
1745 declaration does not use either @code{signed} or @code{unsigned}.  By
1746 default, such a bit-field is signed, because this is consistent: the
1747 basic integer types such as @code{int} are signed types.
1748 @end table
1749
1750 @node C++ Dialect Options
1751 @section Options Controlling C++ Dialect
1752
1753 @cindex compiler options, C++
1754 @cindex C++ options, command line
1755 @cindex options, C++
1756 This section describes the command-line options that are only meaningful
1757 for C++ programs; but you can also use most of the GNU compiler options
1758 regardless of what language your program is in.  For example, you
1759 might compile a file @code{firstClass.C} like this:
1760
1761 @smallexample
1762 g++ -g -frepo -O -c firstClass.C
1763 @end smallexample
1764
1765 @noindent
1766 In this example, only @option{-frepo} is an option meant
1767 only for C++ programs; you can use the other options with any
1768 language supported by GCC@.
1769
1770 Here is a list of options that are @emph{only} for compiling C++ programs:
1771
1772 @table @gcctabopt
1773
1774 @item -fabi-version=@var{n}
1775 @opindex fabi-version
1776 Use version @var{n} of the C++ ABI@.  Version 2 is the version of the
1777 C++ ABI that first appeared in G++ 3.4.  Version 1 is the version of
1778 the C++ ABI that first appeared in G++ 3.2.  Version 0 will always be
1779 the version that conforms most closely to the C++ ABI specification.
1780 Therefore, the ABI obtained using version 0 will change as ABI bugs
1781 are fixed.
1782
1783 The default is version 2.
1784
1785 Version 3 corrects an error in mangling a constant address as a
1786 template argument.
1787
1788 Version 4 implements a standard mangling for vector types.
1789
1790 See also @option{-Wabi}.
1791
1792 @item -fno-access-control
1793 @opindex fno-access-control
1794 Turn off all access checking.  This switch is mainly useful for working
1795 around bugs in the access control code.
1796
1797 @item -fcheck-new
1798 @opindex fcheck-new
1799 Check that the pointer returned by @code{operator new} is non-null
1800 before attempting to modify the storage allocated.  This check is
1801 normally unnecessary because the C++ standard specifies that
1802 @code{operator new} will only return @code{0} if it is declared
1803 @samp{throw()}, in which case the compiler will always check the
1804 return value even without this option.  In all other cases, when
1805 @code{operator new} has a non-empty exception specification, memory
1806 exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
1807 @samp{new (nothrow)}.
1808
1809 @item -fconserve-space
1810 @opindex fconserve-space
1811 Put uninitialized or runtime-initialized global variables into the
1812 common segment, as C does.  This saves space in the executable at the
1813 cost of not diagnosing duplicate definitions.  If you compile with this
1814 flag and your program mysteriously crashes after @code{main()} has
1815 completed, you may have an object that is being destroyed twice because
1816 two definitions were merged.
1817
1818 This option is no longer useful on most targets, now that support has
1819 been added for putting variables into BSS without making them common.
1820
1821 @item -fno-deduce-init-list
1822 @opindex fno-deduce-init-list
1823 Disable deduction of a template type parameter as
1824 std::initializer_list from a brace-enclosed initializer list, i.e.
1825
1826 @smallexample
1827 template <class T> auto forward(T t) -> decltype (realfn (t))
1828 @{
1829   return realfn (t);
1830 @}
1831
1832 void f()
1833 @{
1834   forward(@{1,2@}); // call forward<std::initializer_list<int>>
1835 @}
1836 @end smallexample
1837
1838 This option is present because this deduction is an extension to the
1839 current specification in the C++0x working draft, and there was
1840 some concern about potential overload resolution problems.
1841
1842 @item -ffriend-injection
1843 @opindex ffriend-injection
1844 Inject friend functions into the enclosing namespace, so that they are
1845 visible outside the scope of the class in which they are declared.
1846 Friend functions were documented to work this way in the old Annotated
1847 C++ Reference Manual, and versions of G++ before 4.1 always worked
1848 that way.  However, in ISO C++ a friend function which is not declared
1849 in an enclosing scope can only be found using argument dependent
1850 lookup.  This option causes friends to be injected as they were in
1851 earlier releases.
1852
1853 This option is for compatibility, and may be removed in a future
1854 release of G++.
1855
1856 @item -fno-elide-constructors
1857 @opindex fno-elide-constructors
1858 The C++ standard allows an implementation to omit creating a temporary
1859 which is only used to initialize another object of the same type.
1860 Specifying this option disables that optimization, and forces G++ to
1861 call the copy constructor in all cases.
1862
1863 @item -fno-enforce-eh-specs
1864 @opindex fno-enforce-eh-specs
1865 Don't generate code to check for violation of exception specifications
1866 at runtime.  This option violates the C++ standard, but may be useful
1867 for reducing code size in production builds, much like defining
1868 @samp{NDEBUG}.  This does not give user code permission to throw
1869 exceptions in violation of the exception specifications; the compiler
1870 will still optimize based on the specifications, so throwing an
1871 unexpected exception will result in undefined behavior.
1872
1873 @item -ffor-scope
1874 @itemx -fno-for-scope
1875 @opindex ffor-scope
1876 @opindex fno-for-scope
1877 If @option{-ffor-scope} is specified, the scope of variables declared in
1878 a @i{for-init-statement} is limited to the @samp{for} loop itself,
1879 as specified by the C++ standard.
1880 If @option{-fno-for-scope} is specified, the scope of variables declared in
1881 a @i{for-init-statement} extends to the end of the enclosing scope,
1882 as was the case in old versions of G++, and other (traditional)
1883 implementations of C++.
1884
1885 The default if neither flag is given to follow the standard,
1886 but to allow and give a warning for old-style code that would
1887 otherwise be invalid, or have different behavior.
1888
1889 @item -fno-gnu-keywords
1890 @opindex fno-gnu-keywords
1891 Do not recognize @code{typeof} as a keyword, so that code can use this
1892 word as an identifier.  You can use the keyword @code{__typeof__} instead.
1893 @option{-ansi} implies @option{-fno-gnu-keywords}.
1894
1895 @item -fno-implicit-templates
1896 @opindex fno-implicit-templates
1897 Never emit code for non-inline templates which are instantiated
1898 implicitly (i.e.@: by use); only emit code for explicit instantiations.
1899 @xref{Template Instantiation}, for more information.
1900
1901 @item -fno-implicit-inline-templates
1902 @opindex fno-implicit-inline-templates
1903 Don't emit code for implicit instantiations of inline templates, either.
1904 The default is to handle inlines differently so that compiles with and
1905 without optimization will need the same set of explicit instantiations.
1906
1907 @item -fno-implement-inlines
1908 @opindex fno-implement-inlines
1909 To save space, do not emit out-of-line copies of inline functions
1910 controlled by @samp{#pragma implementation}.  This will cause linker
1911 errors if these functions are not inlined everywhere they are called.
1912
1913 @item -fms-extensions
1914 @opindex fms-extensions
1915 Disable pedantic warnings about constructs used in MFC, such as implicit
1916 int and getting a pointer to member function via non-standard syntax.
1917
1918 @item -fno-nonansi-builtins
1919 @opindex fno-nonansi-builtins
1920 Disable built-in declarations of functions that are not mandated by
1921 ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
1922 @code{index}, @code{bzero}, @code{conjf}, and other related functions.
1923
1924 @item -fno-operator-names
1925 @opindex fno-operator-names
1926 Do not treat the operator name keywords @code{and}, @code{bitand},
1927 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1928 synonyms as keywords.
1929
1930 @item -fno-optional-diags
1931 @opindex fno-optional-diags
1932 Disable diagnostics that the standard says a compiler does not need to
1933 issue.  Currently, the only such diagnostic issued by G++ is the one for
1934 a name having multiple meanings within a class.
1935
1936 @item -fpermissive
1937 @opindex fpermissive
1938 Downgrade some diagnostics about nonconformant code from errors to
1939 warnings.  Thus, using @option{-fpermissive} will allow some
1940 nonconforming code to compile.
1941
1942 @item -fno-pretty-templates
1943 @opindex fno-pretty-templates
1944 When an error message refers to a specialization of a function
1945 template, the compiler will normally print the signature of the
1946 template followed by the template arguments and any typedefs or
1947 typenames in the signature (e.g. @code{void f(T) [with T = int]}
1948 rather than @code{void f(int)}) so that it's clear which template is
1949 involved.  When an error message refers to a specialization of a class
1950 template, the compiler will omit any template arguments which match
1951 the default template arguments for that template.  If either of these
1952 behaviors make it harder to understand the error message rather than
1953 easier, using @option{-fno-pretty-templates} will disable them.
1954
1955 @item -frepo
1956 @opindex frepo
1957 Enable automatic template instantiation at link time.  This option also
1958 implies @option{-fno-implicit-templates}.  @xref{Template
1959 Instantiation}, for more information.
1960
1961 @item -fno-rtti
1962 @opindex fno-rtti
1963 Disable generation of information about every class with virtual
1964 functions for use by the C++ runtime type identification features
1965 (@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
1966 of the language, you can save some space by using this flag.  Note that
1967 exception handling uses the same information, but it will generate it as
1968 needed. The @samp{dynamic_cast} operator can still be used for casts that
1969 do not require runtime type information, i.e.@: casts to @code{void *} or to
1970 unambiguous base classes.
1971
1972 @item -fstats
1973 @opindex fstats
1974 Emit statistics about front-end processing at the end of the compilation.
1975 This information is generally only useful to the G++ development team.
1976
1977 @item -ftemplate-depth=@var{n}
1978 @opindex ftemplate-depth
1979 Set the maximum instantiation depth for template classes to @var{n}.
1980 A limit on the template instantiation depth is needed to detect
1981 endless recursions during template class instantiation.  ANSI/ISO C++
1982 conforming programs must not rely on a maximum depth greater than 17
1983 (changed to 1024 in C++0x).
1984
1985 @item -fno-threadsafe-statics
1986 @opindex fno-threadsafe-statics
1987 Do not emit the extra code to use the routines specified in the C++
1988 ABI for thread-safe initialization of local statics.  You can use this
1989 option to reduce code size slightly in code that doesn't need to be
1990 thread-safe.
1991
1992 @item -fuse-cxa-atexit
1993 @opindex fuse-cxa-atexit
1994 Register destructors for objects with static storage duration with the
1995 @code{__cxa_atexit} function rather than the @code{atexit} function.
1996 This option is required for fully standards-compliant handling of static
1997 destructors, but will only work if your C library supports
1998 @code{__cxa_atexit}.
1999
2000 @item -fno-use-cxa-get-exception-ptr
2001 @opindex fno-use-cxa-get-exception-ptr
2002 Don't use the @code{__cxa_get_exception_ptr} runtime routine.  This
2003 will cause @code{std::uncaught_exception} to be incorrect, but is necessary
2004 if the runtime routine is not available.
2005
2006 @item -fvisibility-inlines-hidden
2007 @opindex fvisibility-inlines-hidden
2008 This switch declares that the user does not attempt to compare
2009 pointers to inline methods where the addresses of the two functions
2010 were taken in different shared objects.
2011
2012 The effect of this is that GCC may, effectively, mark inline methods with
2013 @code{__attribute__ ((visibility ("hidden")))} so that they do not
2014 appear in the export table of a DSO and do not require a PLT indirection
2015 when used within the DSO@.  Enabling this option can have a dramatic effect
2016 on load and link times of a DSO as it massively reduces the size of the
2017 dynamic export table when the library makes heavy use of templates.
2018
2019 The behavior of this switch is not quite the same as marking the
2020 methods as hidden directly, because it does not affect static variables
2021 local to the function or cause the compiler to deduce that
2022 the function is defined in only one shared object.
2023
2024 You may mark a method as having a visibility explicitly to negate the
2025 effect of the switch for that method.  For example, if you do want to
2026 compare pointers to a particular inline method, you might mark it as
2027 having default visibility.  Marking the enclosing class with explicit
2028 visibility will have no effect.
2029
2030 Explicitly instantiated inline methods are unaffected by this option
2031 as their linkage might otherwise cross a shared library boundary.
2032 @xref{Template Instantiation}.
2033
2034 @item -fvisibility-ms-compat
2035 @opindex fvisibility-ms-compat
2036 This flag attempts to use visibility settings to make GCC's C++
2037 linkage model compatible with that of Microsoft Visual Studio.
2038
2039 The flag makes these changes to GCC's linkage model:
2040
2041 @enumerate
2042 @item
2043 It sets the default visibility to @code{hidden}, like
2044 @option{-fvisibility=hidden}.
2045
2046 @item
2047 Types, but not their members, are not hidden by default.
2048
2049 @item
2050 The One Definition Rule is relaxed for types without explicit
2051 visibility specifications which are defined in more than one different
2052 shared object: those declarations are permitted if they would have
2053 been permitted when this option was not used.
2054 @end enumerate
2055
2056 In new code it is better to use @option{-fvisibility=hidden} and
2057 export those classes which are intended to be externally visible.
2058 Unfortunately it is possible for code to rely, perhaps accidentally,
2059 on the Visual Studio behavior.
2060
2061 Among the consequences of these changes are that static data members
2062 of the same type with the same name but defined in different shared
2063 objects will be different, so changing one will not change the other;
2064 and that pointers to function members defined in different shared
2065 objects may not compare equal.  When this flag is given, it is a
2066 violation of the ODR to define types with the same name differently.
2067
2068 @item -fno-weak
2069 @opindex fno-weak
2070 Do not use weak symbol support, even if it is provided by the linker.
2071 By default, G++ will use weak symbols if they are available.  This
2072 option exists only for testing, and should not be used by end-users;
2073 it will result in inferior code and has no benefits.  This option may
2074 be removed in a future release of G++.
2075
2076 @item -nostdinc++
2077 @opindex nostdinc++
2078 Do not search for header files in the standard directories specific to
2079 C++, but do still search the other standard directories.  (This option
2080 is used when building the C++ library.)
2081 @end table
2082
2083 In addition, these optimization, warning, and code generation options
2084 have meanings only for C++ programs:
2085
2086 @table @gcctabopt
2087 @item -fno-default-inline
2088 @opindex fno-default-inline
2089 Do not assume @samp{inline} for functions defined inside a class scope.
2090 @xref{Optimize Options,,Options That Control Optimization}.  Note that these
2091 functions will have linkage like inline functions; they just won't be
2092 inlined by default.
2093
2094 @item -Wabi @r{(C, Objective-C, C++ and Objective-C++ only)}
2095 @opindex Wabi
2096 @opindex Wno-abi
2097 Warn when G++ generates code that is probably not compatible with the
2098 vendor-neutral C++ ABI@.  Although an effort has been made to warn about
2099 all such cases, there are probably some cases that are not warned about,
2100 even though G++ is generating incompatible code.  There may also be
2101 cases where warnings are emitted even though the code that is generated
2102 will be compatible.
2103
2104 You should rewrite your code to avoid these warnings if you are
2105 concerned about the fact that code generated by G++ may not be binary
2106 compatible with code generated by other compilers.
2107
2108 The known incompatibilities in @option{-fabi-version=2} (the default) include:
2109
2110 @itemize @bullet
2111
2112 @item
2113 A template with a non-type template parameter of reference type is
2114 mangled incorrectly:
2115 @smallexample
2116 extern int N;
2117 template <int &> struct S @{@};
2118 void n (S<N>) @{2@}
2119 @end smallexample
2120
2121 This is fixed in @option{-fabi-version=3}.
2122
2123 @item
2124 SIMD vector types declared using @code{__attribute ((vector_size))} are
2125 mangled in a non-standard way that does not allow for overloading of
2126 functions taking vectors of different sizes.
2127
2128 The mangling is changed in @option{-fabi-version=4}.
2129 @end itemize
2130
2131 The known incompatibilities in @option{-fabi-version=1} include:
2132
2133 @itemize @bullet
2134
2135 @item
2136 Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
2137 pack data into the same byte as a base class.  For example:
2138
2139 @smallexample
2140 struct A @{ virtual void f(); int f1 : 1; @};
2141 struct B : public A @{ int f2 : 1; @};
2142 @end smallexample
2143
2144 @noindent
2145 In this case, G++ will place @code{B::f2} into the same byte
2146 as@code{A::f1}; other compilers will not.  You can avoid this problem
2147 by explicitly padding @code{A} so that its size is a multiple of the
2148 byte size on your platform; that will cause G++ and other compilers to
2149 layout @code{B} identically.
2150
2151 @item
2152 Incorrect handling of tail-padding for virtual bases.  G++ does not use
2153 tail padding when laying out virtual bases.  For example:
2154
2155 @smallexample
2156 struct A @{ virtual void f(); char c1; @};
2157 struct B @{ B(); char c2; @};
2158 struct C : public A, public virtual B @{@};
2159 @end smallexample
2160
2161 @noindent
2162 In this case, G++ will not place @code{B} into the tail-padding for
2163 @code{A}; other compilers will.  You can avoid this problem by
2164 explicitly padding @code{A} so that its size is a multiple of its
2165 alignment (ignoring virtual base classes); that will cause G++ and other
2166 compilers to layout @code{C} identically.
2167
2168 @item
2169 Incorrect handling of bit-fields with declared widths greater than that
2170 of their underlying types, when the bit-fields appear in a union.  For
2171 example:
2172
2173 @smallexample
2174 union U @{ int i : 4096; @};
2175 @end smallexample
2176
2177 @noindent
2178 Assuming that an @code{int} does not have 4096 bits, G++ will make the
2179 union too small by the number of bits in an @code{int}.
2180
2181 @item
2182 Empty classes can be placed at incorrect offsets.  For example:
2183
2184 @smallexample
2185 struct A @{@};
2186
2187 struct B @{
2188   A a;
2189   virtual void f ();
2190 @};
2191
2192 struct C : public B, public A @{@};
2193 @end smallexample
2194
2195 @noindent
2196 G++ will place the @code{A} base class of @code{C} at a nonzero offset;
2197 it should be placed at offset zero.  G++ mistakenly believes that the
2198 @code{A} data member of @code{B} is already at offset zero.
2199
2200 @item
2201 Names of template functions whose types involve @code{typename} or
2202 template template parameters can be mangled incorrectly.
2203
2204 @smallexample
2205 template <typename Q>
2206 void f(typename Q::X) @{@}
2207
2208 template <template <typename> class Q>
2209 void f(typename Q<int>::X) @{@}
2210 @end smallexample
2211
2212 @noindent
2213 Instantiations of these templates may be mangled incorrectly.
2214
2215 @end itemize
2216
2217 It also warns psABI related changes.  The known psABI changes at this
2218 point include:
2219
2220 @itemize @bullet
2221
2222 @item
2223 For SYSV/x86-64, when passing union with long double, it is changed to
2224 pass in memory as specified in psABI.  For example:
2225
2226 @smallexample
2227 union U @{
2228   long double ld;
2229   int i;
2230 @};
2231 @end smallexample
2232
2233 @noindent
2234 @code{union U} will always be passed in memory.
2235
2236 @end itemize
2237
2238 @item -Wctor-dtor-privacy @r{(C++ and Objective-C++ only)}
2239 @opindex Wctor-dtor-privacy
2240 @opindex Wno-ctor-dtor-privacy
2241 Warn when a class seems unusable because all the constructors or
2242 destructors in that class are private, and it has neither friends nor
2243 public static member functions.
2244
2245 @item -Wnon-virtual-dtor @r{(C++ and Objective-C++ only)}
2246 @opindex Wnon-virtual-dtor
2247 @opindex Wno-non-virtual-dtor
2248 Warn when a class has virtual functions and accessible non-virtual
2249 destructor, in which case it would be possible but unsafe to delete
2250 an instance of a derived class through a pointer to the base class.
2251 This warning is also enabled if -Weffc++ is specified.
2252
2253 @item -Wreorder @r{(C++ and Objective-C++ only)}
2254 @opindex Wreorder
2255 @opindex Wno-reorder
2256 @cindex reordering, warning
2257 @cindex warning for reordering of member initializers
2258 Warn when the order of member initializers given in the code does not
2259 match the order in which they must be executed.  For instance:
2260
2261 @smallexample
2262 struct A @{
2263   int i;
2264   int j;
2265   A(): j (0), i (1) @{ @}
2266 @};
2267 @end smallexample
2268
2269 The compiler will rearrange the member initializers for @samp{i}
2270 and @samp{j} to match the declaration order of the members, emitting
2271 a warning to that effect.  This warning is enabled by @option{-Wall}.
2272 @end table
2273
2274 The following @option{-W@dots{}} options are not affected by @option{-Wall}.
2275
2276 @table @gcctabopt
2277 @item -Weffc++ @r{(C++ and Objective-C++ only)}
2278 @opindex Weffc++
2279 @opindex Wno-effc++
2280 Warn about violations of the following style guidelines from Scott Meyers'
2281 @cite{Effective C++} book:
2282
2283 @itemize @bullet
2284 @item
2285 Item 11:  Define a copy constructor and an assignment operator for classes
2286 with dynamically allocated memory.
2287
2288 @item
2289 Item 12:  Prefer initialization to assignment in constructors.
2290
2291 @item
2292 Item 14:  Make destructors virtual in base classes.
2293
2294 @item
2295 Item 15:  Have @code{operator=} return a reference to @code{*this}.
2296
2297 @item
2298 Item 23:  Don't try to return a reference when you must return an object.
2299
2300 @end itemize
2301
2302 Also warn about violations of the following style guidelines from
2303 Scott Meyers' @cite{More Effective C++} book:
2304
2305 @itemize @bullet
2306 @item
2307 Item 6:  Distinguish between prefix and postfix forms of increment and
2308 decrement operators.
2309
2310 @item
2311 Item 7:  Never overload @code{&&}, @code{||}, or @code{,}.
2312
2313 @end itemize
2314
2315 When selecting this option, be aware that the standard library
2316 headers do not obey all of these guidelines; use @samp{grep -v}
2317 to filter out those warnings.
2318
2319 @item -Wstrict-null-sentinel @r{(C++ and Objective-C++ only)}
2320 @opindex Wstrict-null-sentinel
2321 @opindex Wno-strict-null-sentinel
2322 Warn also about the use of an uncasted @code{NULL} as sentinel.  When
2323 compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
2324 to @code{__null}.  Although it is a null pointer constant not a null pointer,
2325 it is guaranteed to be of the same size as a pointer.  But this use is
2326 not portable across different compilers.
2327
2328 @item -Wno-non-template-friend @r{(C++ and Objective-C++ only)}
2329 @opindex Wno-non-template-friend
2330 @opindex Wnon-template-friend
2331 Disable warnings when non-templatized friend functions are declared
2332 within a template.  Since the advent of explicit template specification
2333 support in G++, if the name of the friend is an unqualified-id (i.e.,
2334 @samp{friend foo(int)}), the C++ language specification demands that the
2335 friend declare or define an ordinary, nontemplate function.  (Section
2336 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2337 could be interpreted as a particular specialization of a templatized
2338 function.  Because this non-conforming behavior is no longer the default
2339 behavior for G++, @option{-Wnon-template-friend} allows the compiler to
2340 check existing code for potential trouble spots and is on by default.
2341 This new compiler behavior can be turned off with
2342 @option{-Wno-non-template-friend} which keeps the conformant compiler code
2343 but disables the helpful warning.
2344
2345 @item -Wold-style-cast @r{(C++ and Objective-C++ only)}
2346 @opindex Wold-style-cast
2347 @opindex Wno-old-style-cast
2348 Warn if an old-style (C-style) cast to a non-void type is used within
2349 a C++ program.  The new-style casts (@samp{dynamic_cast},
2350 @samp{static_cast}, @samp{reinterpret_cast}, and @samp{const_cast}) are
2351 less vulnerable to unintended effects and much easier to search for.
2352
2353 @item -Woverloaded-virtual @r{(C++ and Objective-C++ only)}
2354 @opindex Woverloaded-virtual
2355 @opindex Wno-overloaded-virtual
2356 @cindex overloaded virtual fn, warning
2357 @cindex warning for overloaded virtual fn
2358 Warn when a function declaration hides virtual functions from a
2359 base class.  For example, in:
2360
2361 @smallexample
2362 struct A @{
2363   virtual void f();
2364 @};
2365
2366 struct B: public A @{
2367   void f(int);
2368 @};
2369 @end smallexample
2370
2371 the @code{A} class version of @code{f} is hidden in @code{B}, and code
2372 like:
2373
2374 @smallexample
2375 B* b;
2376 b->f();
2377 @end smallexample
2378
2379 will fail to compile.
2380
2381 @item -Wno-pmf-conversions @r{(C++ and Objective-C++ only)}
2382 @opindex Wno-pmf-conversions
2383 @opindex Wpmf-conversions
2384 Disable the diagnostic for converting a bound pointer to member function
2385 to a plain pointer.
2386
2387 @item -Wsign-promo @r{(C++ and Objective-C++ only)}
2388 @opindex Wsign-promo
2389 @opindex Wno-sign-promo
2390 Warn when overload resolution chooses a promotion from unsigned or
2391 enumerated type to a signed type, over a conversion to an unsigned type of
2392 the same size.  Previous versions of G++ would try to preserve
2393 unsignedness, but the standard mandates the current behavior.
2394
2395 @smallexample
2396 struct A @{
2397   operator int ();
2398   A& operator = (int);
2399 @};
2400
2401 main ()
2402 @{
2403   A a,b;
2404   a = b;
2405 @}
2406 @end smallexample
2407
2408 In this example, G++ will synthesize a default @samp{A& operator =
2409 (const A&);}, while cfront will use the user-defined @samp{operator =}.
2410 @end table
2411
2412 @node Objective-C and Objective-C++ Dialect Options
2413 @section Options Controlling Objective-C and Objective-C++ Dialects
2414
2415 @cindex compiler options, Objective-C and Objective-C++
2416 @cindex Objective-C and Objective-C++ options, command line
2417 @cindex options, Objective-C and Objective-C++
2418 (NOTE: This manual does not describe the Objective-C and Objective-C++
2419 languages themselves.  See @xref{Standards,,Language Standards
2420 Supported by GCC}, for references.)
2421
2422 This section describes the command-line options that are only meaningful
2423 for Objective-C and Objective-C++ programs, but you can also use most of
2424 the language-independent GNU compiler options.
2425 For example, you might compile a file @code{some_class.m} like this:
2426
2427 @smallexample
2428 gcc -g -fgnu-runtime -O -c some_class.m
2429 @end smallexample
2430
2431 @noindent
2432 In this example, @option{-fgnu-runtime} is an option meant only for
2433 Objective-C and Objective-C++ programs; you can use the other options with
2434 any language supported by GCC@.
2435
2436 Note that since Objective-C is an extension of the C language, Objective-C
2437 compilations may also use options specific to the C front-end (e.g.,
2438 @option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
2439 C++-specific options (e.g., @option{-Wabi}).
2440
2441 Here is a list of options that are @emph{only} for compiling Objective-C
2442 and Objective-C++ programs:
2443
2444 @table @gcctabopt
2445 @item -fconstant-string-class=@var{class-name}
2446 @opindex fconstant-string-class
2447 Use @var{class-name} as the name of the class to instantiate for each
2448 literal string specified with the syntax @code{@@"@dots{}"}.  The default
2449 class name is @code{NXConstantString} if the GNU runtime is being used, and
2450 @code{NSConstantString} if the NeXT runtime is being used (see below).  The
2451 @option{-fconstant-cfstrings} option, if also present, will override the
2452 @option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
2453 to be laid out as constant CoreFoundation strings.
2454
2455 @item -fgnu-runtime
2456 @opindex fgnu-runtime
2457 Generate object code compatible with the standard GNU Objective-C
2458 runtime.  This is the default for most types of systems.
2459
2460 @item -fnext-runtime
2461 @opindex fnext-runtime
2462 Generate output compatible with the NeXT runtime.  This is the default
2463 for NeXT-based systems, including Darwin and Mac OS X@.  The macro
2464 @code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
2465 used.
2466
2467 @item -fno-nil-receivers
2468 @opindex fno-nil-receivers
2469 Assume that all Objective-C message dispatches (e.g.,
2470 @code{[receiver message:arg]}) in this translation unit ensure that the receiver
2471 is not @code{nil}.  This allows for more efficient entry points in the runtime
2472 to be used.  Currently, this option is only available in conjunction with
2473 the NeXT runtime on Mac OS X 10.3 and later.
2474
2475 @item -fobjc-call-cxx-cdtors
2476 @opindex fobjc-call-cxx-cdtors
2477 For each Objective-C class, check if any of its instance variables is a
2478 C++ object with a non-trivial default constructor.  If so, synthesize a
2479 special @code{- (id) .cxx_construct} instance method that will run
2480 non-trivial default constructors on any such instance variables, in order,
2481 and then return @code{self}.  Similarly, check if any instance variable
2482 is a C++ object with a non-trivial destructor, and if so, synthesize a
2483 special @code{- (void) .cxx_destruct} method that will run
2484 all such default destructors, in reverse order.
2485
2486 The @code{- (id) .cxx_construct} and/or @code{- (void) .cxx_destruct} methods
2487 thusly generated will only operate on instance variables declared in the
2488 current Objective-C class, and not those inherited from superclasses.  It
2489 is the responsibility of the Objective-C runtime to invoke all such methods
2490 in an object's inheritance hierarchy.  The @code{- (id) .cxx_construct} methods
2491 will be invoked by the runtime immediately after a new object
2492 instance is allocated; the @code{- (void) .cxx_destruct} methods will
2493 be invoked immediately before the runtime deallocates an object instance.
2494
2495 As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
2496 support for invoking the @code{- (id) .cxx_construct} and
2497 @code{- (void) .cxx_destruct} methods.
2498
2499 @item -fobjc-direct-dispatch
2500 @opindex fobjc-direct-dispatch
2501 Allow fast jumps to the message dispatcher.  On Darwin this is
2502 accomplished via the comm page.
2503
2504 @item -fobjc-exceptions
2505 @opindex fobjc-exceptions
2506 Enable syntactic support for structured exception handling in Objective-C,
2507 similar to what is offered by C++ and Java.  This option is
2508 unavailable in conjunction with the NeXT runtime on Mac OS X 10.2 and
2509 earlier.
2510
2511 @smallexample
2512   @@try @{
2513     @dots{}
2514        @@throw expr;
2515     @dots{}
2516   @}
2517   @@catch (AnObjCClass *exc) @{
2518     @dots{}
2519       @@throw expr;
2520     @dots{}
2521       @@throw;
2522     @dots{}
2523   @}
2524   @@catch (AnotherClass *exc) @{
2525     @dots{}
2526   @}
2527   @@catch (id allOthers) @{
2528     @dots{}
2529   @}
2530   @@finally @{
2531     @dots{}
2532       @@throw expr;
2533     @dots{}
2534   @}
2535 @end smallexample
2536
2537 The @code{@@throw} statement may appear anywhere in an Objective-C or
2538 Objective-C++ program; when used inside of a @code{@@catch} block, the
2539 @code{@@throw} may appear without an argument (as shown above), in which case
2540 the object caught by the @code{@@catch} will be rethrown.
2541
2542 Note that only (pointers to) Objective-C objects may be thrown and
2543 caught using this scheme.  When an object is thrown, it will be caught
2544 by the nearest @code{@@catch} clause capable of handling objects of that type,
2545 analogously to how @code{catch} blocks work in C++ and Java.  A
2546 @code{@@catch(id @dots{})} clause (as shown above) may also be provided to catch
2547 any and all Objective-C exceptions not caught by previous @code{@@catch}
2548 clauses (if any).
2549
2550 The @code{@@finally} clause, if present, will be executed upon exit from the
2551 immediately preceding @code{@@try @dots{} @@catch} section.  This will happen
2552 regardless of whether any exceptions are thrown, caught or rethrown
2553 inside the @code{@@try @dots{} @@catch} section, analogously to the behavior
2554 of the @code{finally} clause in Java.
2555
2556 There are several caveats to using the new exception mechanism:
2557
2558 @itemize @bullet
2559 @item
2560 Although currently designed to be binary compatible with @code{NS_HANDLER}-style
2561 idioms provided by the @code{NSException} class, the new
2562 exceptions can only be used on Mac OS X 10.3 (Panther) and later
2563 systems, due to additional functionality needed in the (NeXT) Objective-C
2564 runtime.
2565
2566 @item
2567 As mentioned above, the new exceptions do not support handling
2568 types other than Objective-C objects.   Furthermore, when used from
2569 Objective-C++, the Objective-C exception model does not interoperate with C++
2570 exceptions at this time.  This means you cannot @code{@@throw} an exception
2571 from Objective-C and @code{catch} it in C++, or vice versa
2572 (i.e., @code{throw @dots{} @@catch}).
2573 @end itemize
2574
2575 The @option{-fobjc-exceptions} switch also enables the use of synchronization
2576 blocks for thread-safe execution:
2577
2578 @smallexample
2579   @@synchronized (ObjCClass *guard) @{
2580     @dots{}
2581   @}
2582 @end smallexample
2583
2584 Upon entering the @code{@@synchronized} block, a thread of execution shall
2585 first check whether a lock has been placed on the corresponding @code{guard}
2586 object by another thread.  If it has, the current thread shall wait until
2587 the other thread relinquishes its lock.  Once @code{guard} becomes available,
2588 the current thread will place its own lock on it, execute the code contained in
2589 the @code{@@synchronized} block, and finally relinquish the lock (thereby
2590 making @code{guard} available to other threads).
2591
2592 Unlike Java, Objective-C does not allow for entire methods to be marked
2593 @code{@@synchronized}.  Note that throwing exceptions out of
2594 @code{@@synchronized} blocks is allowed, and will cause the guarding object
2595 to be unlocked properly.
2596
2597 @item -fobjc-gc
2598 @opindex fobjc-gc
2599 Enable garbage collection (GC) in Objective-C and Objective-C++ programs.
2600
2601 @item -freplace-objc-classes
2602 @opindex freplace-objc-classes
2603 Emit a special marker instructing @command{ld(1)} not to statically link in
2604 the resulting object file, and allow @command{dyld(1)} to load it in at
2605 run time instead.  This is used in conjunction with the Fix-and-Continue
2606 debugging mode, where the object file in question may be recompiled and
2607 dynamically reloaded in the course of program execution, without the need
2608 to restart the program itself.  Currently, Fix-and-Continue functionality
2609 is only available in conjunction with the NeXT runtime on Mac OS X 10.3
2610 and later.
2611
2612 @item -fzero-link
2613 @opindex fzero-link
2614 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2615 to @code{objc_getClass("@dots{}")} (when the name of the class is known at
2616 compile time) with static class references that get initialized at load time,
2617 which improves run-time performance.  Specifying the @option{-fzero-link} flag
2618 suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
2619 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2620 for individual class implementations to be modified during program execution.
2621
2622 @item -gen-decls
2623 @opindex gen-decls
2624 Dump interface declarations for all classes seen in the source file to a
2625 file named @file{@var{sourcename}.decl}.
2626
2627 @item -Wassign-intercept @r{(Objective-C and Objective-C++ only)}
2628 @opindex Wassign-intercept
2629 @opindex Wno-assign-intercept
2630 Warn whenever an Objective-C assignment is being intercepted by the
2631 garbage collector.
2632
2633 @item -Wno-protocol @r{(Objective-C and Objective-C++ only)}
2634 @opindex Wno-protocol
2635 @opindex Wprotocol
2636 If a class is declared to implement a protocol, a warning is issued for
2637 every method in the protocol that is not implemented by the class.  The
2638 default behavior is to issue a warning for every method not explicitly
2639 implemented in the class, even if a method implementation is inherited
2640 from the superclass.  If you use the @option{-Wno-protocol} option, then
2641 methods inherited from the superclass are considered to be implemented,
2642 and no warning is issued for them.
2643
2644 @item -Wselector @r{(Objective-C and Objective-C++ only)}
2645 @opindex Wselector
2646 @opindex Wno-selector
2647 Warn if multiple methods of different types for the same selector are
2648 found during compilation.  The check is performed on the list of methods
2649 in the final stage of compilation.  Additionally, a check is performed
2650 for each selector appearing in a @code{@@selector(@dots{})}
2651 expression, and a corresponding method for that selector has been found
2652 during compilation.  Because these checks scan the method table only at
2653 the end of compilation, these warnings are not produced if the final
2654 stage of compilation is not reached, for example because an error is
2655 found during compilation, or because the @option{-fsyntax-only} option is
2656 being used.
2657
2658 @item -Wstrict-selector-match @r{(Objective-C and Objective-C++ only)}
2659 @opindex Wstrict-selector-match
2660 @opindex Wno-strict-selector-match
2661 Warn if multiple methods with differing argument and/or return types are
2662 found for a given selector when attempting to send a message using this
2663 selector to a receiver of type @code{id} or @code{Class}.  When this flag
2664 is off (which is the default behavior), the compiler will omit such warnings
2665 if any differences found are confined to types which share the same size
2666 and alignment.
2667
2668 @item -Wundeclared-selector @r{(Objective-C and Objective-C++ only)}
2669 @opindex Wundeclared-selector
2670 @opindex Wno-undeclared-selector
2671 Warn if a @code{@@selector(@dots{})} expression referring to an
2672 undeclared selector is found.  A selector is considered undeclared if no
2673 method with that name has been declared before the
2674 @code{@@selector(@dots{})} expression, either explicitly in an
2675 @code{@@interface} or @code{@@protocol} declaration, or implicitly in
2676 an @code{@@implementation} section.  This option always performs its
2677 checks as soon as a @code{@@selector(@dots{})} expression is found,
2678 while @option{-Wselector} only performs its checks in the final stage of
2679 compilation.  This also enforces the coding style convention
2680 that methods and selectors must be declared before being used.
2681
2682 @item -print-objc-runtime-info
2683 @opindex print-objc-runtime-info
2684 Generate C header describing the largest structure that is passed by
2685 value, if any.
2686
2687 @end table
2688
2689 @node Language Independent Options
2690 @section Options to Control Diagnostic Messages Formatting
2691 @cindex options to control diagnostics formatting
2692 @cindex diagnostic messages
2693 @cindex message formatting
2694
2695 Traditionally, diagnostic messages have been formatted irrespective of
2696 the output device's aspect (e.g.@: its width, @dots{}).  The options described
2697 below can be used to control the diagnostic messages formatting
2698 algorithm, e.g.@: how many characters per line, how often source location
2699 information should be reported.  Right now, only the C++ front end can
2700 honor these options.  However it is expected, in the near future, that
2701 the remaining front ends would be able to digest them correctly.
2702
2703 @table @gcctabopt
2704 @item -fmessage-length=@var{n}
2705 @opindex fmessage-length
2706 Try to format error messages so that they fit on lines of about @var{n}
2707 characters.  The default is 72 characters for @command{g++} and 0 for the rest of
2708 the front ends supported by GCC@.  If @var{n} is zero, then no
2709 line-wrapping will be done; each error message will appear on a single
2710 line.
2711
2712 @opindex fdiagnostics-show-location
2713 @item -fdiagnostics-show-location=once
2714 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2715 reporter to emit @emph{once} source location information; that is, in
2716 case the message is too long to fit on a single physical line and has to
2717 be wrapped, the source location won't be emitted (as prefix) again,
2718 over and over, in subsequent continuation lines.  This is the default
2719 behavior.
2720
2721 @item -fdiagnostics-show-location=every-line
2722 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2723 messages reporter to emit the same source location information (as
2724 prefix) for physical lines that result from the process of breaking
2725 a message which is too long to fit on a single line.
2726
2727 @item -fdiagnostics-show-option
2728 @opindex fdiagnostics-show-option
2729 This option instructs the diagnostic machinery to add text to each
2730 diagnostic emitted, which indicates which command line option directly
2731 controls that diagnostic, when such an option is known to the
2732 diagnostic machinery.
2733
2734 @item -Wcoverage-mismatch
2735 @opindex Wcoverage-mismatch
2736 Warn if feedback profiles do not match when using the
2737 @option{-fprofile-use} option.
2738 If a source file was changed between @option{-fprofile-gen} and
2739 @option{-fprofile-use}, the files with the profile feedback can fail
2740 to match the source file and GCC can not use the profile feedback
2741 information.  By default, GCC emits an error message in this case.
2742 The option @option{-Wcoverage-mismatch} emits a warning instead of an
2743 error.  GCC does not use appropriate feedback profiles, so using this
2744 option can result in poorly optimized code.  This option is useful
2745 only in the case of very minor changes such as bug fixes to an
2746 existing code-base.
2747
2748 @end table
2749
2750 @node Warning Options
2751 @section Options to Request or Suppress Warnings
2752 @cindex options to control warnings
2753 @cindex warning messages
2754 @cindex messages, warning
2755 @cindex suppressing warnings
2756
2757 Warnings are diagnostic messages that report constructions which
2758 are not inherently erroneous but which are risky or suggest there
2759 may have been an error.
2760
2761 The following language-independent options do not enable specific
2762 warnings but control the kinds of diagnostics produced by GCC.
2763
2764 @table @gcctabopt
2765 @cindex syntax checking
2766 @item -fsyntax-only
2767 @opindex fsyntax-only
2768 Check the code for syntax errors, but don't do anything beyond that.
2769
2770 @item -w
2771 @opindex w
2772 Inhibit all warning messages.
2773
2774 @item -Werror
2775 @opindex Werror
2776 @opindex Wno-error
2777 Make all warnings into errors.
2778
2779 @item -Werror=
2780 @opindex Werror=
2781 @opindex Wno-error=
2782 Make the specified warning into an error.  The specifier for a warning
2783 is appended, for example @option{-Werror=switch} turns the warnings
2784 controlled by @option{-Wswitch} into errors.  This switch takes a
2785 negative form, to be used to negate @option{-Werror} for specific
2786 warnings, for example @option{-Wno-error=switch} makes
2787 @option{-Wswitch} warnings not be errors, even when @option{-Werror}
2788 is in effect.  You can use the @option{-fdiagnostics-show-option}
2789 option to have each controllable warning amended with the option which
2790 controls it, to determine what to use with this option.
2791
2792 Note that specifying @option{-Werror=}@var{foo} automatically implies
2793 @option{-W}@var{foo}.  However, @option{-Wno-error=}@var{foo} does not
2794 imply anything.
2795
2796 @item -Wfatal-errors
2797 @opindex Wfatal-errors
2798 @opindex Wno-fatal-errors
2799 This option causes the compiler to abort compilation on the first error
2800 occurred rather than trying to keep going and printing further error
2801 messages.
2802
2803 @end table
2804
2805 You can request many specific warnings with options beginning
2806 @samp{-W}, for example @option{-Wimplicit} to request warnings on
2807 implicit declarations.  Each of these specific warning options also
2808 has a negative form beginning @samp{-Wno-} to turn off warnings; for
2809 example, @option{-Wno-implicit}.  This manual lists only one of the
2810 two forms, whichever is not the default.  For further,
2811 language-specific options also refer to @ref{C++ Dialect Options} and
2812 @ref{Objective-C and Objective-C++ Dialect Options}.
2813
2814 @table @gcctabopt
2815 @item -pedantic
2816 @opindex pedantic
2817 Issue all the warnings demanded by strict ISO C and ISO C++;
2818 reject all programs that use forbidden extensions, and some other
2819 programs that do not follow ISO C and ISO C++.  For ISO C, follows the
2820 version of the ISO C standard specified by any @option{-std} option used.
2821
2822 Valid ISO C and ISO C++ programs should compile properly with or without
2823 this option (though a rare few will require @option{-ansi} or a
2824 @option{-std} option specifying the required version of ISO C)@.  However,
2825 without this option, certain GNU extensions and traditional C and C++
2826 features are supported as well.  With this option, they are rejected.
2827
2828 @option{-pedantic} does not cause warning messages for use of the
2829 alternate keywords whose names begin and end with @samp{__}.  Pedantic
2830 warnings are also disabled in the expression that follows
2831 @code{__extension__}.  However, only system header files should use
2832 these escape routes; application programs should avoid them.
2833 @xref{Alternate Keywords}.
2834
2835 Some users try to use @option{-pedantic} to check programs for strict ISO
2836 C conformance.  They soon find that it does not do quite what they want:
2837 it finds some non-ISO practices, but not all---only those for which
2838 ISO C @emph{requires} a diagnostic, and some others for which
2839 diagnostics have been added.
2840
2841 A feature to report any failure to conform to ISO C might be useful in
2842 some instances, but would require considerable additional work and would
2843 be quite different from @option{-pedantic}.  We don't have plans to
2844 support such a feature in the near future.
2845
2846 Where the standard specified with @option{-std} represents a GNU
2847 extended dialect of C, such as @samp{gnu90} or @samp{gnu99}, there is a
2848 corresponding @dfn{base standard}, the version of ISO C on which the GNU
2849 extended dialect is based.  Warnings from @option{-pedantic} are given
2850 where they are required by the base standard.  (It would not make sense
2851 for such warnings to be given only for features not in the specified GNU
2852 C dialect, since by definition the GNU dialects of C include all
2853 features the compiler supports with the given option, and there would be
2854 nothing to warn about.)
2855
2856 @item -pedantic-errors
2857 @opindex pedantic-errors
2858 Like @option{-pedantic}, except that errors are produced rather than
2859 warnings.
2860
2861 @item -Wall
2862 @opindex Wall
2863 @opindex Wno-all
2864 This enables all the warnings about constructions that some users
2865 consider questionable, and that are easy to avoid (or modify to
2866 prevent the warning), even in conjunction with macros.  This also
2867 enables some language-specific warnings described in @ref{C++ Dialect
2868 Options} and @ref{Objective-C and Objective-C++ Dialect Options}.
2869
2870 @option{-Wall} turns on the following warning flags:
2871
2872 @gccoptlist{-Waddress   @gol
2873 -Warray-bounds @r{(only with} @option{-O2}@r{)}  @gol
2874 -Wc++0x-compat  @gol
2875 -Wchar-subscripts  @gol
2876 -Wenum-compare @r{(in C/Objc; this is on by default in C++)} @gol
2877 -Wimplicit-int  @gol
2878 -Wimplicit-function-declaration  @gol
2879 -Wcomment  @gol
2880 -Wformat   @gol
2881 -Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)}  @gol
2882 -Wmissing-braces  @gol
2883 -Wnonnull  @gol
2884 -Wparentheses  @gol
2885 -Wpointer-sign  @gol
2886 -Wreorder   @gol
2887 -Wreturn-type  @gol
2888 -Wsequence-point  @gol
2889 -Wsign-compare @r{(only in C++)}  @gol
2890 -Wstrict-aliasing  @gol
2891 -Wstrict-overflow=1  @gol
2892 -Wswitch  @gol
2893 -Wtrigraphs  @gol
2894 -Wuninitialized  @gol
2895 -Wunknown-pragmas  @gol
2896 -Wunused-function  @gol
2897 -Wunused-label     @gol
2898 -Wunused-value     @gol
2899 -Wunused-variable  @gol
2900 -Wvolatile-register-var @gol
2901 }
2902
2903 Note that some warning flags are not implied by @option{-Wall}.  Some of
2904 them warn about constructions that users generally do not consider
2905 questionable, but which occasionally you might wish to check for;
2906 others warn about constructions that are necessary or hard to avoid in
2907 some cases, and there is no simple way to modify the code to suppress
2908 the warning. Some of them are enabled by @option{-Wextra} but many of
2909 them must be enabled individually.
2910
2911 @item -Wextra
2912 @opindex W
2913 @opindex Wextra
2914 @opindex Wno-extra
2915 This enables some extra warning flags that are not enabled by
2916 @option{-Wall}. (This option used to be called @option{-W}.  The older
2917 name is still supported, but the newer name is more descriptive.)
2918
2919 @gccoptlist{-Wclobbered  @gol
2920 -Wempty-body  @gol
2921 -Wignored-qualifiers @gol
2922 -Wmissing-field-initializers  @gol
2923 -Wmissing-parameter-type @r{(C only)}  @gol
2924 -Wold-style-declaration @r{(C only)}  @gol
2925 -Woverride-init  @gol
2926 -Wsign-compare  @gol
2927 -Wtype-limits  @gol
2928 -Wuninitialized  @gol
2929 -Wunused-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)} @gol
2930 -Wunused-but-set-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)}  @gol
2931 }
2932
2933 The option @option{-Wextra} also prints warning messages for the
2934 following cases:
2935
2936 @itemize @bullet
2937
2938 @item
2939 A pointer is compared against integer zero with @samp{<}, @samp{<=},
2940 @samp{>}, or @samp{>=}.
2941
2942 @item
2943 (C++ only) An enumerator and a non-enumerator both appear in a
2944 conditional expression.
2945
2946 @item
2947 (C++ only) Ambiguous virtual bases.
2948
2949 @item
2950 (C++ only) Subscripting an array which has been declared @samp{register}.
2951
2952 @item
2953 (C++ only) Taking the address of a variable which has been declared
2954 @samp{register}.
2955
2956 @item
2957 (C++ only) A base class is not initialized in a derived class' copy
2958 constructor.
2959
2960 @end itemize
2961
2962 @item -Wchar-subscripts
2963 @opindex Wchar-subscripts
2964 @opindex Wno-char-subscripts
2965 Warn if an array subscript has type @code{char}.  This is a common cause
2966 of error, as programmers often forget that this type is signed on some
2967 machines.
2968 This warning is enabled by @option{-Wall}.
2969
2970 @item -Wcomment
2971 @opindex Wcomment
2972 @opindex Wno-comment
2973 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
2974 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
2975 This warning is enabled by @option{-Wall}.
2976
2977 @item -Wno-cpp \
2978 @r{(C, Objective-C, C++, Objective-C++ and Fortran only)}
2979
2980 Suppress warning messages emitted by @code{#warning} directives.
2981
2982 @item -Wformat
2983 @opindex Wformat
2984 @opindex Wno-format
2985 @opindex ffreestanding
2986 @opindex fno-builtin
2987 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
2988 the arguments supplied have types appropriate to the format string
2989 specified, and that the conversions specified in the format string make
2990 sense.  This includes standard functions, and others specified by format
2991 attributes (@pxref{Function Attributes}), in the @code{printf},
2992 @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
2993 not in the C standard) families (or other target-specific families).
2994 Which functions are checked without format attributes having been
2995 specified depends on the standard version selected, and such checks of
2996 functions without the attribute specified are disabled by
2997 @option{-ffreestanding} or @option{-fno-builtin}.
2998
2999 The formats are checked against the format features supported by GNU
3000 libc version 2.2.  These include all ISO C90 and C99 features, as well
3001 as features from the Single Unix Specification and some BSD and GNU
3002 extensions.  Other library implementations may not support all these
3003 features; GCC does not support warning about features that go beyond a
3004 particular library's limitations.  However, if @option{-pedantic} is used
3005 with @option{-Wformat}, warnings will be given about format features not
3006 in the selected standard version (but not for @code{strfmon} formats,
3007 since those are not in any version of the C standard).  @xref{C Dialect
3008 Options,,Options Controlling C Dialect}.
3009
3010 Since @option{-Wformat} also checks for null format arguments for
3011 several functions, @option{-Wformat} also implies @option{-Wnonnull}.
3012
3013 @option{-Wformat} is included in @option{-Wall}.  For more control over some
3014 aspects of format checking, the options @option{-Wformat-y2k},
3015 @option{-Wno-format-extra-args}, @option{-Wno-format-zero-length},
3016 @option{-Wformat-nonliteral}, @option{-Wformat-security}, and
3017 @option{-Wformat=2} are available, but are not included in @option{-Wall}.
3018
3019 @item -Wformat-y2k
3020 @opindex Wformat-y2k
3021 @opindex Wno-format-y2k
3022 If @option{-Wformat} is specified, also warn about @code{strftime}
3023 formats which may yield only a two-digit year.
3024
3025 @item -Wno-format-contains-nul
3026 @opindex Wno-format-contains-nul
3027 @opindex Wformat-contains-nul
3028 If @option{-Wformat} is specified, do not warn about format strings that
3029 contain NUL bytes.
3030
3031 @item -Wno-format-extra-args
3032 @opindex Wno-format-extra-args
3033 @opindex Wformat-extra-args
3034 If @option{-Wformat} is specified, do not warn about excess arguments to a
3035 @code{printf} or @code{scanf} format function.  The C standard specifies
3036 that such arguments are ignored.
3037
3038 Where the unused arguments lie between used arguments that are
3039 specified with @samp{$} operand number specifications, normally
3040 warnings are still given, since the implementation could not know what
3041 type to pass to @code{va_arg} to skip the unused arguments.  However,
3042 in the case of @code{scanf} formats, this option will suppress the
3043 warning if the unused arguments are all pointers, since the Single
3044 Unix Specification says that such unused arguments are allowed.
3045
3046 @item -Wno-format-zero-length @r{(C and Objective-C only)}
3047 @opindex Wno-format-zero-length
3048 @opindex Wformat-zero-length
3049 If @option{-Wformat} is specified, do not warn about zero-length formats.
3050 The C standard specifies that zero-length formats are allowed.
3051
3052 @item -Wformat-nonliteral
3053 @opindex Wformat-nonliteral
3054 @opindex Wno-format-nonliteral
3055 If @option{-Wformat} is specified, also warn if the format string is not a
3056 string literal and so cannot be checked, unless the format function
3057 takes its format arguments as a @code{va_list}.
3058
3059 @item -Wformat-security
3060 @opindex Wformat-security
3061 @opindex Wno-format-security
3062 If @option{-Wformat} is specified, also warn about uses of format
3063 functions that represent possible security problems.  At present, this
3064 warns about calls to @code{printf} and @code{scanf} functions where the
3065 format string is not a string literal and there are no format arguments,
3066 as in @code{printf (foo);}.  This may be a security hole if the format
3067 string came from untrusted input and contains @samp{%n}.  (This is
3068 currently a subset of what @option{-Wformat-nonliteral} warns about, but
3069 in future warnings may be added to @option{-Wformat-security} that are not
3070 included in @option{-Wformat-nonliteral}.)
3071
3072 @item -Wformat=2
3073 @opindex Wformat=2
3074 @opindex Wno-format=2
3075 Enable @option{-Wformat} plus format checks not included in
3076 @option{-Wformat}.  Currently equivalent to @samp{-Wformat
3077 -Wformat-nonliteral -Wformat-security -Wformat-y2k}.
3078
3079 @item -Wnonnull @r{(C and Objective-C only)}
3080 @opindex Wnonnull
3081 @opindex Wno-nonnull
3082 Warn about passing a null pointer for arguments marked as
3083 requiring a non-null value by the @code{nonnull} function attribute.
3084
3085 @option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
3086 can be disabled with the @option{-Wno-nonnull} option.
3087
3088 @item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
3089 @opindex Winit-self
3090 @opindex Wno-init-self
3091 Warn about uninitialized variables which are initialized with themselves.
3092 Note this option can only be used with the @option{-Wuninitialized} option.
3093
3094 For example, GCC will warn about @code{i} being uninitialized in the
3095 following snippet only when @option{-Winit-self} has been specified:
3096 @smallexample
3097 @group
3098 int f()
3099 @{
3100   int i = i;
3101   return i;
3102 @}
3103 @end group
3104 @end smallexample
3105
3106 @item -Wimplicit-int @r{(C and Objective-C only)}
3107 @opindex Wimplicit-int
3108 @opindex Wno-implicit-int
3109 Warn when a declaration does not specify a type.
3110 This warning is enabled by @option{-Wall}.
3111
3112 @item -Wimplicit-function-declaration @r{(C and Objective-C only)}
3113 @opindex Wimplicit-function-declaration
3114 @opindex Wno-implicit-function-declaration
3115 Give a warning whenever a function is used before being declared. In
3116 C99 mode (@option{-std=c99} or @option{-std=gnu99}), this warning is
3117 enabled by default and it is made into an error by
3118 @option{-pedantic-errors}. This warning is also enabled by
3119 @option{-Wall}.
3120
3121 @item -Wimplicit
3122 @opindex Wimplicit
3123 @opindex Wno-implicit
3124 Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
3125 This warning is enabled by @option{-Wall}.
3126
3127 @item -Wignored-qualifiers @r{(C and C++ only)}
3128 @opindex Wignored-qualifiers
3129 @opindex Wno-ignored-qualifiers
3130 Warn if the return type of a function has a type qualifier
3131 such as @code{const}.  For ISO C such a type qualifier has no effect,
3132 since the value returned by a function is not an lvalue.
3133 For C++, the warning is only emitted for scalar types or @code{void}.
3134 ISO C prohibits qualified @code{void} return types on function
3135 definitions, so such return types always receive a warning
3136 even without this option.
3137
3138 This warning is also enabled by @option{-Wextra}.
3139
3140 @item -Wmain
3141 @opindex Wmain
3142 @opindex Wno-main
3143 Warn if the type of @samp{main} is suspicious.  @samp{main} should be
3144 a function with external linkage, returning int, taking either zero
3145 arguments, two, or three arguments of appropriate types.  This warning
3146 is enabled by default in C++ and is enabled by either @option{-Wall}
3147 or @option{-pedantic}.
3148
3149 @item -Wmissing-braces
3150 @opindex Wmissing-braces
3151 @opindex Wno-missing-braces
3152 Warn if an aggregate or union initializer is not fully bracketed.  In
3153 the following example, the initializer for @samp{a} is not fully
3154 bracketed, but that for @samp{b} is fully bracketed.
3155
3156 @smallexample
3157 int a[2][2] = @{ 0, 1, 2, 3 @};
3158 int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
3159 @end smallexample
3160
3161 This warning is enabled by @option{-Wall}.
3162
3163 @item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
3164 @opindex Wmissing-include-dirs
3165 @opindex Wno-missing-include-dirs
3166 Warn if a user-supplied include directory does not exist.
3167
3168 @item -Wparentheses
3169 @opindex Wparentheses
3170 @opindex Wno-parentheses
3171 Warn if parentheses are omitted in certain contexts, such
3172 as when there is an assignment in a context where a truth value
3173 is expected, or when operators are nested whose precedence people
3174 often get confused about.
3175
3176 Also warn if a comparison like @samp{x<=y<=z} appears; this is
3177 equivalent to @samp{(x<=y ? 1 : 0) <= z}, which is a different
3178 interpretation from that of ordinary mathematical notation.
3179
3180 Also warn about constructions where there may be confusion to which
3181 @code{if} statement an @code{else} branch belongs.  Here is an example of
3182 such a case:
3183
3184 @smallexample
3185 @group
3186 @{
3187   if (a)
3188     if (b)
3189       foo ();
3190   else
3191     bar ();
3192 @}
3193 @end group
3194 @end smallexample
3195
3196 In C/C++, every @code{else} branch belongs to the innermost possible
3197 @code{if} statement, which in this example is @code{if (b)}.  This is
3198 often not what the programmer expected, as illustrated in the above
3199 example by indentation the programmer chose.  When there is the
3200 potential for this confusion, GCC will issue a warning when this flag
3201 is specified.  To eliminate the warning, add explicit braces around
3202 the innermost @code{if} statement so there is no way the @code{else}
3203 could belong to the enclosing @code{if}.  The resulting code would
3204 look like this:
3205
3206 @smallexample
3207 @group
3208 @{
3209   if (a)
3210     @{
3211       if (b)
3212         foo ();
3213       else
3214         bar ();
3215     @}
3216 @}
3217 @end group
3218 @end smallexample
3219
3220 This warning is enabled by @option{-Wall}.
3221
3222 @item -Wsequence-point
3223 @opindex Wsequence-point
3224 @opindex Wno-sequence-point
3225 Warn about code that may have undefined semantics because of violations
3226 of sequence point rules in the C and C++ standards.
3227
3228 The C and C++ standards defines the order in which expressions in a C/C++
3229 program are evaluated in terms of @dfn{sequence points}, which represent
3230 a partial ordering between the execution of parts of the program: those
3231 executed before the sequence point, and those executed after it.  These
3232 occur after the evaluation of a full expression (one which is not part
3233 of a larger expression), after the evaluation of the first operand of a
3234 @code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
3235 function is called (but after the evaluation of its arguments and the
3236 expression denoting the called function), and in certain other places.
3237 Other than as expressed by the sequence point rules, the order of
3238 evaluation of subexpressions of an expression is not specified.  All
3239 these rules describe only a partial order rather than a total order,
3240 since, for example, if two functions are called within one expression
3241 with no sequence point between them, the order in which the functions
3242 are called is not specified.  However, the standards committee have
3243 ruled that function calls do not overlap.
3244
3245 It is not specified when between sequence points modifications to the
3246 values of objects take effect.  Programs whose behavior depends on this
3247 have undefined behavior; the C and C++ standards specify that ``Between
3248 the previous and next sequence point an object shall have its stored
3249 value modified at most once by the evaluation of an expression.
3250 Furthermore, the prior value shall be read only to determine the value
3251 to be stored.''.  If a program breaks these rules, the results on any
3252 particular implementation are entirely unpredictable.
3253
3254 Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
3255 = b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
3256 diagnosed by this option, and it may give an occasional false positive
3257 result, but in general it has been found fairly effective at detecting
3258 this sort of problem in programs.
3259
3260 The standard is worded confusingly, therefore there is some debate
3261 over the precise meaning of the sequence point rules in subtle cases.
3262 Links to discussions of the problem, including proposed formal
3263 definitions, may be found on the GCC readings page, at
3264 @w{@uref{http://gcc.gnu.org/readings.html}}.
3265
3266 This warning is enabled by @option{-Wall} for C and C++.
3267
3268 @item -Wreturn-type
3269 @opindex Wreturn-type
3270 @opindex Wno-return-type
3271 Warn whenever a function is defined with a return-type that defaults
3272 to @code{int}.  Also warn about any @code{return} statement with no
3273 return-value in a function whose return-type is not @code{void}
3274 (falling off the end of the function body is considered returning
3275 without a value), and about a @code{return} statement with an
3276 expression in a function whose return-type is @code{void}.
3277
3278 For C++, a function without return type always produces a diagnostic
3279 message, even when @option{-Wno-return-type} is specified.  The only
3280 exceptions are @samp{main} and functions defined in system headers.
3281
3282 This warning is enabled by @option{-Wall}.
3283
3284 @item -Wswitch
3285 @opindex Wswitch
3286 @opindex Wno-switch
3287 Warn whenever a @code{switch} statement has an index of enumerated type
3288 and lacks a @code{case} for one or more of the named codes of that
3289 enumeration.  (The presence of a @code{default} label prevents this
3290 warning.)  @code{case} labels outside the enumeration range also
3291 provoke warnings when this option is used (even if there is a
3292 @code{default} label).
3293 This warning is enabled by @option{-Wall}.
3294
3295 @item -Wswitch-default
3296 @opindex Wswitch-default
3297 @opindex Wno-switch-default
3298 Warn whenever a @code{switch} statement does not have a @code{default}
3299 case.
3300
3301 @item -Wswitch-enum
3302 @opindex Wswitch-enum
3303 @opindex Wno-switch-enum
3304 Warn whenever a @code{switch} statement has an index of enumerated type
3305 and lacks a @code{case} for one or more of the named codes of that
3306 enumeration.  @code{case} labels outside the enumeration range also
3307 provoke warnings when this option is used.  The only difference
3308 between @option{-Wswitch} and this option is that this option gives a
3309 warning about an omitted enumeration code even if there is a
3310 @code{default} label.
3311
3312 @item -Wsync-nand @r{(C and C++ only)}
3313 @opindex Wsync-nand
3314 @opindex Wno-sync-nand
3315 Warn when @code{__sync_fetch_and_nand} and @code{__sync_nand_and_fetch}
3316 built-in functions are used.  These functions changed semantics in GCC 4.4.
3317
3318 @item -Wtrigraphs
3319 @opindex Wtrigraphs
3320 @opindex Wno-trigraphs
3321 Warn if any trigraphs are encountered that might change the meaning of
3322 the program (trigraphs within comments are not warned about).
3323 This warning is enabled by @option{-Wall}.
3324
3325 @item -Wunused-but-set-parameter
3326 @opindex Wunused-but-set-parameter
3327 @opindex Wno-unused-but-set-parameter
3328 Warn whenever a function parameter is assigned to, but otherwise unused
3329 (aside from its declaration).
3330
3331 To suppress this warning use the @samp{unused} attribute
3332 (@pxref{Variable Attributes}).
3333
3334 This warning is also enabled by @option{-Wunused} together with
3335 @option{-Wextra}.
3336
3337 @item -Wunused-but-set-variable
3338 @opindex Wunused-but-set-variable
3339 @opindex Wno-unused-but-set-variable
3340 Warn whenever a local variable is assigned to, but otherwise unused
3341 (aside from its declaration).
3342 This warning is enabled by @option{-Wall}.
3343
3344 To suppress this warning use the @samp{unused} attribute
3345 (@pxref{Variable Attributes}).
3346
3347 This warning is also enabled by @option{-Wunused}, which is enabled
3348 by @option{-Wall}.
3349
3350 @item -Wunused-function
3351 @opindex Wunused-function
3352 @opindex Wno-unused-function
3353 Warn whenever a static function is declared but not defined or a
3354 non-inline static function is unused.
3355 This warning is enabled by @option{-Wall}.
3356
3357 @item -Wunused-label
3358 @opindex Wunused-label
3359 @opindex Wno-unused-label
3360 Warn whenever a label is declared but not used.
3361 This warning is enabled by @option{-Wall}.
3362
3363 To suppress this warning use the @samp{unused} attribute
3364 (@pxref{Variable Attributes}).
3365
3366 @item -Wunused-parameter
3367 @opindex Wunused-parameter
3368 @opindex Wno-unused-parameter
3369 Warn whenever a function parameter is unused aside from its declaration.
3370
3371 To suppress this warning use the @samp{unused} attribute
3372 (@pxref{Variable Attributes}).
3373
3374 @item -Wno-unused-result
3375 @opindex Wunused-result
3376 @opindex Wno-unused-result
3377 Do not warn if a caller of a function marked with attribute
3378 @code{warn_unused_result} (@pxref{Variable Attributes}) does not use
3379 its return value. The default is @option{-Wunused-result}.
3380
3381 @item -Wunused-variable
3382 @opindex Wunused-variable
3383 @opindex Wno-unused-variable
3384 Warn whenever a local variable or non-constant static variable is unused
3385 aside from its declaration.
3386 This warning is enabled by @option{-Wall}.
3387
3388 To suppress this warning use the @samp{unused} attribute
3389 (@pxref{Variable Attributes}).
3390
3391 @item -Wunused-value
3392 @opindex Wunused-value
3393 @opindex Wno-unused-value
3394 Warn whenever a statement computes a result that is explicitly not
3395 used. To suppress this warning cast the unused expression to
3396 @samp{void}. This includes an expression-statement or the left-hand
3397 side of a comma expression that contains no side effects. For example,
3398 an expression such as @samp{x[i,j]} will cause a warning, while
3399 @samp{x[(void)i,j]} will not.
3400
3401 This warning is enabled by @option{-Wall}.
3402
3403 @item -Wunused
3404 @opindex Wunused
3405 @opindex Wno-unused
3406 All the above @option{-Wunused} options combined.
3407
3408 In order to get a warning about an unused function parameter, you must
3409 either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies
3410 @samp{-Wunused}), or separately specify @option{-Wunused-parameter}.
3411
3412 @item -Wuninitialized
3413 @opindex Wuninitialized
3414 @opindex Wno-uninitialized
3415 Warn if an automatic variable is used without first being initialized
3416 or if a variable may be clobbered by a @code{setjmp} call. In C++,
3417 warn if a non-static reference or non-static @samp{const} member
3418 appears in a class without constructors.
3419
3420 If you want to warn about code which uses the uninitialized value of the
3421 variable in its own initializer, use the @option{-Winit-self} option.
3422
3423 These warnings occur for individual uninitialized or clobbered
3424 elements of structure, union or array variables as well as for
3425 variables which are uninitialized or clobbered as a whole.  They do
3426 not occur for variables or elements declared @code{volatile}.  Because
3427 these warnings depend on optimization, the exact variables or elements
3428 for which there are warnings will depend on the precise optimization
3429 options and version of GCC used.
3430
3431 Note that there may be no warning about a variable that is used only
3432 to compute a value that itself is never used, because such
3433 computations may be deleted by data flow analysis before the warnings
3434 are printed.
3435
3436 These warnings are made optional because GCC is not smart
3437 enough to see all the reasons why the code might be correct
3438 despite appearing to have an error.  Here is one example of how
3439 this can happen:
3440
3441 @smallexample
3442 @group
3443 @{
3444   int x;
3445   switch (y)
3446     @{
3447     case 1: x = 1;
3448       break;
3449     case 2: x = 4;
3450       break;
3451     case 3: x = 5;
3452     @}
3453   foo (x);
3454 @}
3455 @end group
3456 @end smallexample
3457
3458 @noindent
3459 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
3460 always initialized, but GCC doesn't know this.  Here is
3461 another common case:
3462
3463 @smallexample
3464 @{
3465   int save_y;
3466   if (change_y) save_y = y, y = new_y;
3467   @dots{}
3468   if (change_y) y = save_y;
3469 @}
3470 @end smallexample
3471
3472 @noindent
3473 This has no bug because @code{save_y} is used only if it is set.
3474
3475 @cindex @code{longjmp} warnings
3476 This option also warns when a non-volatile automatic variable might be
3477 changed by a call to @code{longjmp}.  These warnings as well are possible
3478 only in optimizing compilation.
3479
3480 The compiler sees only the calls to @code{setjmp}.  It cannot know
3481 where @code{longjmp} will be called; in fact, a signal handler could
3482 call it at any point in the code.  As a result, you may get a warning
3483 even when there is in fact no problem because @code{longjmp} cannot
3484 in fact be called at the place which would cause a problem.
3485
3486 Some spurious warnings can be avoided if you declare all the functions
3487 you use that never return as @code{noreturn}.  @xref{Function
3488 Attributes}.
3489
3490 This warning is enabled by @option{-Wall} or @option{-Wextra}.
3491
3492 @item -Wunknown-pragmas
3493 @opindex Wunknown-pragmas
3494 @opindex Wno-unknown-pragmas
3495 @cindex warning for unknown pragmas
3496 @cindex unknown pragmas, warning
3497 @cindex pragmas, warning of unknown
3498 Warn when a #pragma directive is encountered which is not understood by
3499 GCC@.  If this command line option is used, warnings will even be issued
3500 for unknown pragmas in system header files.  This is not the case if
3501 the warnings were only enabled by the @option{-Wall} command line option.
3502
3503 @item -Wno-pragmas
3504 @opindex Wno-pragmas
3505 @opindex Wpragmas
3506 Do not warn about misuses of pragmas, such as incorrect parameters,
3507 invalid syntax, or conflicts between pragmas.  See also
3508 @samp{-Wunknown-pragmas}.
3509
3510 @item -Wstrict-aliasing
3511 @opindex Wstrict-aliasing
3512 @opindex Wno-strict-aliasing
3513 This option is only active when @option{-fstrict-aliasing} is active.
3514 It warns about code which might break the strict aliasing rules that the
3515 compiler is using for optimization.  The warning does not catch all
3516 cases, but does attempt to catch the more common pitfalls.  It is
3517 included in @option{-Wall}.
3518 It is equivalent to @option{-Wstrict-aliasing=3}
3519
3520 @item -Wstrict-aliasing=n
3521 @opindex Wstrict-aliasing=n
3522 @opindex Wno-strict-aliasing=n
3523 This option is only active when @option{-fstrict-aliasing} is active.
3524 It warns about code which might break the strict aliasing rules that the
3525 compiler is using for optimization.
3526 Higher levels correspond to higher accuracy (fewer false positives).
3527 Higher levels also correspond to more effort, similar to the way -O works.
3528 @option{-Wstrict-aliasing} is equivalent to @option{-Wstrict-aliasing=n},
3529 with n=3.
3530
3531 Level 1: Most aggressive, quick, least accurate.
3532 Possibly useful when higher levels
3533 do not warn but -fstrict-aliasing still breaks the code, as it has very few
3534 false negatives.  However, it has many false positives.
3535 Warns for all pointer conversions between possibly incompatible types,
3536 even if never dereferenced.  Runs in the frontend only.
3537
3538 Level 2: Aggressive, quick, not too precise.
3539 May still have many false positives (not as many as level 1 though),
3540 and few false negatives (but possibly more than level 1).
3541 Unlike level 1, it only warns when an address is taken.  Warns about
3542 incomplete types.  Runs in the frontend only.
3543
3544 Level 3 (default for @option{-Wstrict-aliasing}):
3545 Should have very few false positives and few false
3546 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
3547 Takes care of the common pun+dereference pattern in the frontend:
3548 @code{*(int*)&some_float}.
3549 If optimization is enabled, it also runs in the backend, where it deals
3550 with multiple statement cases using flow-sensitive points-to information.
3551 Only warns when the converted pointer is dereferenced.
3552 Does not warn about incomplete types.
3553
3554 @item -Wstrict-overflow
3555 @itemx -Wstrict-overflow=@var{n}
3556 @opindex Wstrict-overflow
3557 @opindex Wno-strict-overflow
3558 This option is only active when @option{-fstrict-overflow} is active.
3559 It warns about cases where the compiler optimizes based on the
3560 assumption that signed overflow does not occur.  Note that it does not
3561 warn about all cases where the code might overflow: it only warns
3562 about cases where the compiler implements some optimization.  Thus
3563 this warning depends on the optimization level.
3564
3565 An optimization which assumes that signed overflow does not occur is
3566 perfectly safe if the values of the variables involved are such that
3567 overflow never does, in fact, occur.  Therefore this warning can
3568 easily give a false positive: a warning about code which is not
3569 actually a problem.  To help focus on important issues, several
3570 warning levels are defined.  No warnings are issued for the use of
3571 undefined signed overflow when estimating how many iterations a loop
3572 will require, in particular when determining whether a loop will be
3573 executed at all.
3574
3575 @table @gcctabopt
3576 @item -Wstrict-overflow=1
3577 Warn about cases which are both questionable and easy to avoid.  For
3578 example: @code{x + 1 > x}; with @option{-fstrict-overflow}, the
3579 compiler will simplify this to @code{1}.  This level of
3580 @option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels
3581 are not, and must be explicitly requested.
3582
3583 @item -Wstrict-overflow=2
3584 Also warn about other cases where a comparison is simplified to a
3585 constant.  For example: @code{abs (x) >= 0}.  This can only be
3586 simplified when @option{-fstrict-overflow} is in effect, because
3587 @code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than
3588 zero.  @option{-Wstrict-overflow} (with no level) is the same as
3589 @option{-Wstrict-overflow=2}.
3590
3591 @item -Wstrict-overflow=3
3592 Also warn about other cases where a comparison is simplified.  For
3593 example: @code{x + 1 > 1} will be simplified to @code{x > 0}.
3594
3595 @item -Wstrict-overflow=4
3596 Also warn about other simplifications not covered by the above cases.
3597 For example: @code{(x * 10) / 5} will be simplified to @code{x * 2}.
3598
3599 @item -Wstrict-overflow=5
3600 Also warn about cases where the compiler reduces the magnitude of a
3601 constant involved in a comparison.  For example: @code{x + 2 > y} will
3602 be simplified to @code{x + 1 >= y}.  This is reported only at the
3603 highest warning level because this simplification applies to many
3604 comparisons, so this warning level will give a very large number of
3605 false positives.
3606 @end table
3607
3608 @item -Warray-bounds
3609 @opindex Wno-array-bounds
3610 @opindex Warray-bounds
3611 This option is only active when @option{-ftree-vrp} is active
3612 (default for -O2 and above). It warns about subscripts to arrays
3613 that are always out of bounds. This warning is enabled by @option{-Wall}.
3614
3615 @item -Wno-div-by-zero
3616 @opindex Wno-div-by-zero
3617 @opindex Wdiv-by-zero
3618 Do not warn about compile-time integer division by zero.  Floating point
3619 division by zero is not warned about, as it can be a legitimate way of
3620 obtaining infinities and NaNs.
3621
3622 @item -Wsystem-headers
3623 @opindex Wsystem-headers
3624 @opindex Wno-system-headers
3625 @cindex warnings from system headers
3626 @cindex system headers, warnings from
3627 Print warning messages for constructs found in system header files.
3628 Warnings from system headers are normally suppressed, on the assumption
3629 that they usually do not indicate real problems and would only make the
3630 compiler output harder to read.  Using this command line option tells
3631 GCC to emit warnings from system headers as if they occurred in user
3632 code.  However, note that using @option{-Wall} in conjunction with this
3633 option will @emph{not} warn about unknown pragmas in system
3634 headers---for that, @option{-Wunknown-pragmas} must also be used.
3635
3636 @item -Wfloat-equal
3637 @opindex Wfloat-equal
3638 @opindex Wno-float-equal
3639 Warn if floating point values are used in equality comparisons.
3640
3641 The idea behind this is that sometimes it is convenient (for the
3642 programmer) to consider floating-point values as approximations to
3643 infinitely precise real numbers.  If you are doing this, then you need
3644 to compute (by analyzing the code, or in some other way) the maximum or
3645 likely maximum error that the computation introduces, and allow for it
3646 when performing comparisons (and when producing output, but that's a
3647 different problem).  In particular, instead of testing for equality, you
3648 would check to see whether the two values have ranges that overlap; and
3649 this is done with the relational operators, so equality comparisons are
3650 probably mistaken.
3651
3652 @item -Wtraditional @r{(C and Objective-C only)}
3653 @opindex Wtraditional
3654 @opindex Wno-traditional
3655 Warn about certain constructs that behave differently in traditional and
3656 ISO C@.  Also warn about ISO C constructs that have no traditional C
3657 equivalent, and/or problematic constructs which should be avoided.
3658
3659 @itemize @bullet
3660 @item
3661 Macro parameters that appear within string literals in the macro body.
3662 In traditional C macro replacement takes place within string literals,
3663 but does not in ISO C@.
3664
3665 @item
3666 In traditional C, some preprocessor directives did not exist.
3667 Traditional preprocessors would only consider a line to be a directive
3668 if the @samp{#} appeared in column 1 on the line.  Therefore
3669 @option{-Wtraditional} warns about directives that traditional C
3670 understands but would ignore because the @samp{#} does not appear as the
3671 first character on the line.  It also suggests you hide directives like
3672 @samp{#pragma} not understood by traditional C by indenting them.  Some
3673 traditional implementations would not recognize @samp{#elif}, so it
3674 suggests avoiding it altogether.
3675
3676 @item
3677 A function-like macro that appears without arguments.
3678
3679 @item
3680 The unary plus operator.
3681
3682 @item
3683 The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating point
3684 constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
3685 constants.)  Note, these suffixes appear in macros defined in the system
3686 headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
3687 Use of these macros in user code might normally lead to spurious
3688 warnings, however GCC's integrated preprocessor has enough context to
3689 avoid warning in these cases.
3690
3691 @item
3692 A function declared external in one block and then used after the end of
3693 the block.
3694
3695 @item
3696 A @code{switch} statement has an operand of type @code{long}.
3697
3698 @item
3699 A non-@code{static} function declaration follows a @code{static} one.
3700 This construct is not accepted by some traditional C compilers.
3701
3702 @item
3703 The ISO type of an integer constant has a different width or
3704 signedness from its traditional type.  This warning is only issued if
3705 the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
3706 typically represent bit patterns, are not warned about.
3707
3708 @item
3709 Usage of ISO string concatenation is detected.
3710
3711 @item
3712 Initialization of automatic aggregates.
3713
3714 @item
3715 Identifier conflicts with labels.  Traditional C lacks a separate
3716 namespace for labels.
3717
3718 @item
3719 Initialization of unions.  If the initializer is zero, the warning is
3720 omitted.  This is done under the assumption that the zero initializer in
3721 user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
3722 initializer warnings and relies on default initialization to zero in the
3723 traditional C case.
3724
3725 @item
3726 Conversions by prototypes between fixed/floating point values and vice
3727 versa.  The absence of these prototypes when compiling with traditional
3728 C would cause serious problems.  This is a subset of the possible
3729 conversion warnings, for the full set use @option{-Wtraditional-conversion}.
3730
3731 @item
3732 Use of ISO C style function definitions.  This warning intentionally is
3733 @emph{not} issued for prototype declarations or variadic functions
3734 because these ISO C features will appear in your code when using
3735 libiberty's traditional C compatibility macros, @code{PARAMS} and
3736 @code{VPARAMS}.  This warning is also bypassed for nested functions
3737 because that feature is already a GCC extension and thus not relevant to
3738 traditional C compatibility.
3739 @end itemize
3740
3741 @item -Wtraditional-conversion @r{(C and Objective-C only)}
3742 @opindex Wtraditional-conversion
3743 @opindex Wno-traditional-conversion
3744 Warn if a prototype causes a type conversion that is different from what
3745 would happen to the same argument in the absence of a prototype.  This
3746 includes conversions of fixed point to floating and vice versa, and
3747 conversions changing the width or signedness of a fixed point argument
3748 except when the same as the default promotion.
3749
3750 @item -Wdeclaration-after-statement @r{(C and Objective-C only)}
3751 @opindex Wdeclaration-after-statement
3752 @opindex Wno-declaration-after-statement
3753 Warn when a declaration is found after a statement in a block.  This
3754 construct, known from C++, was introduced with ISO C99 and is by default
3755 allowed in GCC@.  It is not supported by ISO C90 and was not supported by
3756 GCC versions before GCC 3.0.  @xref{Mixed Declarations}.
3757
3758 @item -Wundef
3759 @opindex Wundef
3760 @opindex Wno-undef
3761 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
3762
3763 @item -Wno-endif-labels
3764 @opindex Wno-endif-labels
3765 @opindex Wendif-labels
3766 Do not warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
3767
3768 @item -Wshadow
3769 @opindex Wshadow
3770 @opindex Wno-shadow
3771 Warn whenever a local variable shadows another local variable, parameter or
3772 global variable or whenever a built-in function is shadowed.
3773
3774 @item -Wlarger-than=@var{len}
3775 @opindex Wlarger-than=@var{len}
3776 @opindex Wlarger-than-@var{len}
3777 Warn whenever an object of larger than @var{len} bytes is defined.
3778
3779 @item -Wframe-larger-than=@var{len}
3780 @opindex Wframe-larger-than
3781 Warn if the size of a function frame is larger than @var{len} bytes.
3782 The computation done to determine the stack frame size is approximate
3783 and not conservative.
3784 The actual requirements may be somewhat greater than @var{len}
3785 even if you do not get a warning.  In addition, any space allocated
3786 via @code{alloca}, variable-length arrays, or related constructs
3787 is not included by the compiler when determining
3788 whether or not to issue a warning.
3789
3790 @item -Wunsafe-loop-optimizations
3791 @opindex Wunsafe-loop-optimizations
3792 @opindex Wno-unsafe-loop-optimizations
3793 Warn if the loop cannot be optimized because the compiler could not
3794 assume anything on the bounds of the loop indices.  With
3795 @option{-funsafe-loop-optimizations} warn if the compiler made
3796 such assumptions.
3797
3798 @item -Wno-pedantic-ms-format @r{(MinGW targets only)}
3799 @opindex Wno-pedantic-ms-format
3800 @opindex Wpedantic-ms-format
3801 Disables the warnings about non-ISO @code{printf} / @code{scanf} format
3802 width specifiers @code{I32}, @code{I64}, and @code{I} used on Windows targets
3803 depending on the MS runtime, when you are using the options @option{-Wformat}
3804 and @option{-pedantic} without gnu-extensions.
3805
3806 @item -Wpointer-arith
3807 @opindex Wpointer-arith
3808 @opindex Wno-pointer-arith
3809 Warn about anything that depends on the ``size of'' a function type or
3810 of @code{void}.  GNU C assigns these types a size of 1, for
3811 convenience in calculations with @code{void *} pointers and pointers
3812 to functions.  In C++, warn also when an arithmetic operation involves
3813 @code{NULL}.  This warning is also enabled by @option{-pedantic}.
3814
3815 @item -Wtype-limits
3816 @opindex Wtype-limits
3817 @opindex Wno-type-limits
3818 Warn if a comparison is always true or always false due to the limited
3819 range of the data type, but do not warn for constant expressions.  For
3820 example, warn if an unsigned variable is compared against zero with
3821 @samp{<} or @samp{>=}.  This warning is also enabled by
3822 @option{-Wextra}.
3823
3824 @item -Wbad-function-cast @r{(C and Objective-C only)}
3825 @opindex Wbad-function-cast
3826 @opindex Wno-bad-function-cast
3827 Warn whenever a function call is cast to a non-matching type.
3828 For example, warn if @code{int malloc()} is cast to @code{anything *}.
3829
3830 @item -Wc++-compat @r{(C and Objective-C only)}
3831 Warn about ISO C constructs that are outside of the common subset of
3832 ISO C and ISO C++, e.g.@: request for implicit conversion from
3833 @code{void *} to a pointer to non-@code{void} type.
3834
3835 @item -Wc++0x-compat @r{(C++ and Objective-C++ only)}
3836 Warn about C++ constructs whose meaning differs between ISO C++ 1998 and
3837 ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will become keywords
3838 in ISO C++ 200x.  This warning is enabled by @option{-Wall}.
3839
3840 @item -Wcast-qual
3841 @opindex Wcast-qual
3842 @opindex Wno-cast-qual
3843 Warn whenever a pointer is cast so as to remove a type qualifier from
3844 the target type.  For example, warn if a @code{const char *} is cast
3845 to an ordinary @code{char *}.
3846
3847 Also warn when making a cast which introduces a type qualifier in an
3848 unsafe way.  For example, casting @code{char **} to @code{const char **}
3849 is unsafe, as in this example:
3850
3851 @smallexample
3852   /* p is char ** value.  */
3853   const char **q = (const char **) p;
3854   /* Assignment of readonly string to const char * is OK.  */
3855   *q = "string";
3856   /* Now char** pointer points to read-only memory.  */
3857   **p = 'b';
3858 @end smallexample
3859
3860 @item -Wcast-align
3861 @opindex Wcast-align
3862 @opindex Wno-cast-align
3863 Warn whenever a pointer is cast such that the required alignment of the
3864 target is increased.  For example, warn if a @code{char *} is cast to
3865 an @code{int *} on machines where integers can only be accessed at
3866 two- or four-byte boundaries.
3867
3868 @item -Wwrite-strings
3869 @opindex Wwrite-strings
3870 @opindex Wno-write-strings
3871 When compiling C, give string constants the type @code{const
3872 char[@var{length}]} so that copying the address of one into a
3873 non-@code{const} @code{char *} pointer will get a warning.  These
3874 warnings will help you find at compile time code that can try to write
3875 into a string constant, but only if you have been very careful about
3876 using @code{const} in declarations and prototypes.  Otherwise, it will
3877 just be a nuisance. This is why we did not make @option{-Wall} request
3878 these warnings.
3879
3880 When compiling C++, warn about the deprecated conversion from string
3881 literals to @code{char *}.  This warning is enabled by default for C++
3882 programs.
3883
3884 @item -Wclobbered
3885 @opindex Wclobbered
3886 @opindex Wno-clobbered
3887 Warn for variables that might be changed by @samp{longjmp} or
3888 @samp{vfork}.  This warning is also enabled by @option{-Wextra}.
3889
3890 @item -Wconversion
3891 @opindex Wconversion
3892 @opindex Wno-conversion
3893 Warn for implicit conversions that may alter a value. This includes
3894 conversions between real and integer, like @code{abs (x)} when
3895 @code{x} is @code{double}; conversions between signed and unsigned,
3896 like @code{unsigned ui = -1}; and conversions to smaller types, like
3897 @code{sqrtf (M_PI)}. Do not warn for explicit casts like @code{abs
3898 ((int) x)} and @code{ui = (unsigned) -1}, or if the value is not
3899 changed by the conversion like in @code{abs (2.0)}.  Warnings about
3900 conversions between signed and unsigned integers can be disabled by
3901 using @option{-Wno-sign-conversion}.
3902
3903 For C++, also warn for confusing overload resolution for user-defined
3904 conversions; and conversions that will never use a type conversion
3905 operator: conversions to @code{void}, the same type, a base class or a
3906 reference to them. Warnings about conversions between signed and
3907 unsigned integers are disabled by default in C++ unless
3908 @option{-Wsign-conversion} is explicitly enabled.
3909
3910 @item -Wno-conversion-null @r{(C++ and Objective-C++ only)}
3911 @opindex Wconversion-null
3912 @opindex Wno-conversion-null
3913 Do not warn for conversions between @code{NULL} and non-pointer
3914 types. @option{-Wconversion-null} is enabled by default.
3915
3916 @item -Wempty-body
3917 @opindex Wempty-body
3918 @opindex Wno-empty-body
3919 Warn if an empty body occurs in an @samp{if}, @samp{else} or @samp{do
3920 while} statement.  This warning is also enabled by @option{-Wextra}.
3921
3922 @item -Wenum-compare
3923 @opindex Wenum-compare
3924 @opindex Wno-enum-compare
3925 Warn about a comparison between values of different enum types. In C++
3926 this warning is enabled by default.  In C this warning is enabled by
3927 @option{-Wall}.
3928
3929 @item -Wjump-misses-init @r{(C, Objective-C only)}
3930 @opindex Wjump-misses-init
3931 @opindex Wno-jump-misses-init
3932 Warn if a @code{goto} statement or a @code{switch} statement jumps
3933 forward across the initialization of a variable, or jumps backward to a
3934 label after the variable has been initialized.  This only warns about
3935 variables which are initialized when they are declared.  This warning is
3936 only supported for C and Objective C; in C++ this sort of branch is an
3937 error in any case.
3938
3939 @option{-Wjump-misses-init} is included in @option{-Wc++-compat}.  It
3940 can be disabled with the @option{-Wno-jump-misses-init} option.
3941
3942 @item -Wsign-compare
3943 @opindex Wsign-compare
3944 @opindex Wno-sign-compare
3945 @cindex warning for comparison of signed and unsigned values
3946 @cindex comparison of signed and unsigned values, warning
3947 @cindex signed and unsigned values, comparison warning
3948 Warn when a comparison between signed and unsigned values could produce
3949 an incorrect result when the signed value is converted to unsigned.
3950 This warning is also enabled by @option{-Wextra}; to get the other warnings
3951 of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}.
3952
3953 @item -Wsign-conversion
3954 @opindex Wsign-conversion
3955 @opindex Wno-sign-conversion
3956 Warn for implicit conversions that may change the sign of an integer
3957 value, like assigning a signed integer expression to an unsigned
3958 integer variable. An explicit cast silences the warning. In C, this
3959 option is enabled also by @option{-Wconversion}.
3960
3961 @item -Waddress
3962 @opindex Waddress
3963 @opindex Wno-address
3964 Warn about suspicious uses of memory addresses. These include using
3965 the address of a function in a conditional expression, such as
3966 @code{void func(void); if (func)}, and comparisons against the memory
3967 address of a string literal, such as @code{if (x == "abc")}.  Such
3968 uses typically indicate a programmer error: the address of a function
3969 always evaluates to true, so their use in a conditional usually
3970 indicate that the programmer forgot the parentheses in a function
3971 call; and comparisons against string literals result in unspecified
3972 behavior and are not portable in C, so they usually indicate that the
3973 programmer intended to use @code{strcmp}.  This warning is enabled by
3974 @option{-Wall}.
3975
3976 @item -Wlogical-op
3977 @opindex Wlogical-op
3978 @opindex Wno-logical-op
3979 Warn about suspicious uses of logical operators in expressions.
3980 This includes using logical operators in contexts where a
3981 bit-wise operator is likely to be expected.
3982
3983 @item -Waggregate-return
3984 @opindex Waggregate-return
3985 @opindex Wno-aggregate-return
3986 Warn if any functions that return structures or unions are defined or
3987 called.  (In languages where you can return an array, this also elicits
3988 a warning.)
3989
3990 @item -Wno-attributes
3991 @opindex Wno-attributes
3992 @opindex Wattributes
3993 Do not warn if an unexpected @code{__attribute__} is used, such as
3994 unrecognized attributes, function attributes applied to variables,
3995 etc.  This will not stop errors for incorrect use of supported
3996 attributes.
3997
3998 @item -Wno-builtin-macro-redefined
3999 @opindex Wno-builtin-macro-redefined
4000 @opindex Wbuiltin-macro-redefined
4001 Do not warn if certain built-in macros are redefined.  This suppresses
4002 warnings for redefinition of @code{__TIMESTAMP__}, @code{__TIME__},
4003 @code{__DATE__}, @code{__FILE__}, and @code{__BASE_FILE__}.
4004
4005 @item -Wstrict-prototypes @r{(C and Objective-C only)}
4006 @opindex Wstrict-prototypes
4007 @opindex Wno-strict-prototypes
4008 Warn if a function is declared or defined without specifying the
4009 argument types.  (An old-style function definition is permitted without
4010 a warning if preceded by a declaration which specifies the argument
4011 types.)
4012
4013 @item -Wold-style-declaration @r{(C and Objective-C only)}
4014 @opindex Wold-style-declaration
4015 @opindex Wno-old-style-declaration
4016 Warn for obsolescent usages, according to the C Standard, in a
4017 declaration. For example, warn if storage-class specifiers like
4018 @code{static} are not the first things in a declaration.  This warning
4019 is also enabled by @option{-Wextra}.
4020
4021 @item -Wold-style-definition @r{(C and Objective-C only)}
4022 @opindex Wold-style-definition
4023 @opindex Wno-old-style-definition
4024 Warn if an old-style function definition is used.  A warning is given
4025 even if there is a previous prototype.
4026
4027 @item -Wmissing-parameter-type @r{(C and Objective-C only)}
4028 @opindex Wmissing-parameter-type
4029 @opindex Wno-missing-parameter-type
4030 A function parameter is declared without a type specifier in K&R-style
4031 functions:
4032
4033 @smallexample
4034 void foo(bar) @{ @}
4035 @end smallexample
4036
4037 This warning is also enabled by @option{-Wextra}.
4038
4039 @item -Wmissing-prototypes @r{(C and Objective-C only)}
4040 @opindex Wmissing-prototypes
4041 @opindex Wno-missing-prototypes
4042 Warn if a global function is defined without a previous prototype
4043 declaration.  This warning is issued even if the definition itself
4044 provides a prototype.  The aim is to detect global functions that fail
4045 to be declared in header files.
4046
4047 @item -Wmissing-declarations
4048 @opindex Wmissing-declarations
4049 @opindex Wno-missing-declarations
4050 Warn if a global function is defined without a previous declaration.
4051 Do so even if the definition itself provides a prototype.
4052 Use this option to detect global functions that are not declared in
4053 header files.  In C++, no warnings are issued for function templates,
4054 or for inline functions, or for functions in anonymous namespaces.
4055
4056 @item -Wmissing-field-initializers
4057 @opindex Wmissing-field-initializers
4058 @opindex Wno-missing-field-initializers
4059 @opindex W
4060 @opindex Wextra
4061 @opindex Wno-extra
4062 Warn if a structure's initializer has some fields missing.  For
4063 example, the following code would cause such a warning, because
4064 @code{x.h} is implicitly zero:
4065
4066 @smallexample
4067 struct s @{ int f, g, h; @};
4068 struct s x = @{ 3, 4 @};
4069 @end smallexample
4070
4071 This option does not warn about designated initializers, so the following
4072 modification would not trigger a warning:
4073
4074 @smallexample
4075 struct s @{ int f, g, h; @};
4076 struct s x = @{ .f = 3, .g = 4 @};
4077 @end smallexample
4078
4079 This warning is included in @option{-Wextra}.  To get other @option{-Wextra}
4080 warnings without this one, use @samp{-Wextra -Wno-missing-field-initializers}.
4081
4082 @item -Wmissing-noreturn
4083 @opindex Wmissing-noreturn
4084 @opindex Wno-missing-noreturn
4085 Warn about functions which might be candidates for attribute @code{noreturn}.
4086 Note these are only possible candidates, not absolute ones.  Care should
4087 be taken to manually verify functions actually do not ever return before
4088 adding the @code{noreturn} attribute, otherwise subtle code generation
4089 bugs could be introduced.  You will not get a warning for @code{main} in
4090 hosted C environments.
4091
4092 @item -Wmissing-format-attribute
4093 @opindex Wmissing-format-attribute
4094 @opindex Wno-missing-format-attribute
4095 @opindex Wformat
4096 @opindex Wno-format
4097 Warn about function pointers which might be candidates for @code{format}
4098 attributes.  Note these are only possible candidates, not absolute ones.
4099 GCC will guess that function pointers with @code{format} attributes that
4100 are used in assignment, initialization, parameter passing or return
4101 statements should have a corresponding @code{format} attribute in the
4102 resulting type.  I.e.@: the left-hand side of the assignment or
4103 initialization, the type of the parameter variable, or the return type
4104 of the containing function respectively should also have a @code{format}
4105 attribute to avoid the warning.
4106
4107 GCC will also warn about function definitions which might be
4108 candidates for @code{format} attributes.  Again, these are only
4109 possible candidates.  GCC will guess that @code{format} attributes
4110 might be appropriate for any function that calls a function like
4111 @code{vprintf} or @code{vscanf}, but this might not always be the
4112 case, and some functions for which @code{format} attributes are
4113 appropriate may not be detected.
4114
4115 @item -Wno-multichar
4116 @opindex Wno-multichar
4117 @opindex Wmultichar
4118 Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
4119 Usually they indicate a typo in the user's code, as they have
4120 implementation-defined values, and should not be used in portable code.
4121
4122 @item -Wnormalized=<none|id|nfc|nfkc>
4123 @opindex Wnormalized=
4124 @cindex NFC
4125 @cindex NFKC
4126 @cindex character set, input normalization
4127 In ISO C and ISO C++, two identifiers are different if they are
4128 different sequences of characters.  However, sometimes when characters
4129 outside the basic ASCII character set are used, you can have two
4130 different character sequences that look the same.  To avoid confusion,
4131 the ISO 10646 standard sets out some @dfn{normalization rules} which
4132 when applied ensure that two sequences that look the same are turned into
4133 the same sequence.  GCC can warn you if you are using identifiers which
4134 have not been normalized; this option controls that warning.
4135
4136 There are four levels of warning that GCC supports.  The default is
4137 @option{-Wnormalized=nfc}, which warns about any identifier which is
4138 not in the ISO 10646 ``C'' normalized form, @dfn{NFC}.  NFC is the
4139 recommended form for most uses.
4140
4141 Unfortunately, there are some characters which ISO C and ISO C++ allow
4142 in identifiers that when turned into NFC aren't allowable as
4143 identifiers.  That is, there's no way to use these symbols in portable
4144 ISO C or C++ and have all your identifiers in NFC@.
4145 @option{-Wnormalized=id} suppresses the warning for these characters.
4146 It is hoped that future versions of the standards involved will correct
4147 this, which is why this option is not the default.
4148
4149 You can switch the warning off for all characters by writing
4150 @option{-Wnormalized=none}.  You would only want to do this if you
4151 were using some other normalization scheme (like ``D''), because
4152 otherwise you can easily create bugs that are literally impossible to see.
4153
4154 Some characters in ISO 10646 have distinct meanings but look identical
4155 in some fonts or display methodologies, especially once formatting has
4156 been applied.  For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL
4157 LETTER N'', will display just like a regular @code{n} which has been
4158 placed in a superscript.  ISO 10646 defines the @dfn{NFKC}
4159 normalization scheme to convert all these into a standard form as
4160 well, and GCC will warn if your code is not in NFKC if you use
4161 @option{-Wnormalized=nfkc}.  This warning is comparable to warning
4162 about every identifier that contains the letter O because it might be
4163 confused with the digit 0, and so is not the default, but may be
4164 useful as a local coding convention if the programming environment is
4165 unable to be fixed to display these characters distinctly.
4166
4167 @item -Wno-deprecated
4168 @opindex Wno-deprecated
4169 @opindex Wdeprecated
4170 Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
4171
4172 @item -Wno-deprecated-declarations
4173 @opindex Wno-deprecated-declarations
4174 @opindex Wdeprecated-declarations
4175 Do not warn about uses of functions (@pxref{Function Attributes}),
4176 variables (@pxref{Variable Attributes}), and types (@pxref{Type
4177 Attributes}) marked as deprecated by using the @code{deprecated}
4178 attribute.
4179
4180 @item -Wno-overflow
4181 @opindex Wno-overflow
4182 @opindex Woverflow
4183 Do not warn about compile-time overflow in constant expressions.
4184
4185 @item -Woverride-init @r{(C and Objective-C only)}
4186 @opindex Woverride-init
4187 @opindex Wno-override-init
4188 @opindex W
4189 @opindex Wextra
4190 @opindex Wno-extra
4191 Warn if an initialized field without side effects is overridden when
4192 using designated initializers (@pxref{Designated Inits, , Designated
4193 Initializers}).
4194
4195 This warning is included in @option{-Wextra}.  To get other
4196 @option{-Wextra} warnings without this one, use @samp{-Wextra
4197 -Wno-override-init}.
4198
4199 @item -Wpacked
4200 @opindex Wpacked
4201 @opindex Wno-packed
4202 Warn if a structure is given the packed attribute, but the packed
4203 attribute has no effect on the layout or size of the structure.
4204 Such structures may be mis-aligned for little benefit.  For
4205 instance, in this code, the variable @code{f.x} in @code{struct bar}
4206 will be misaligned even though @code{struct bar} does not itself
4207 have the packed attribute:
4208
4209 @smallexample
4210 @group
4211 struct foo @{
4212   int x;
4213   char a, b, c, d;
4214 @} __attribute__((packed));
4215 struct bar @{
4216   char z;
4217   struct foo f;
4218 @};
4219 @end group
4220 @end smallexample
4221
4222 @item -Wpacked-bitfield-compat
4223 @opindex Wpacked-bitfield-compat
4224 @opindex Wno-packed-bitfield-compat
4225 The 4.1, 4.2 and 4.3 series of GCC ignore the @code{packed} attribute
4226 on bit-fields of type @code{char}.  This has been fixed in GCC 4.4 but
4227 the change can lead to differences in the structure layout.  GCC
4228 informs you when the offset of such a field has changed in GCC 4.4.
4229 For example there is no longer a 4-bit padding between field @code{a}
4230 and @code{b} in this structure:
4231
4232 @smallexample
4233 struct foo
4234 @{
4235   char a:4;
4236   char b:8;
4237 @} __attribute__ ((packed));
4238 @end smallexample
4239
4240 This warning is enabled by default.  Use
4241 @option{-Wno-packed-bitfield-compat} to disable this warning.
4242
4243 @item -Wpadded
4244 @opindex Wpadded
4245 @opindex Wno-padded
4246 Warn if padding is included in a structure, either to align an element
4247 of the structure or to align the whole structure.  Sometimes when this
4248 happens it is possible to rearrange the fields of the structure to
4249 reduce the padding and so make the structure smaller.
4250
4251 @item -Wredundant-decls
4252 @opindex Wredundant-decls
4253 @opindex Wno-redundant-decls
4254 Warn if anything is declared more than once in the same scope, even in
4255 cases where multiple declaration is valid and changes nothing.
4256
4257 @item -Wnested-externs @r{(C and Objective-C only)}
4258 @opindex Wnested-externs
4259 @opindex Wno-nested-externs
4260 Warn if an @code{extern} declaration is encountered within a function.
4261
4262 @item -Winline
4263 @opindex Winline
4264 @opindex Wno-inline
4265 Warn if a function can not be inlined and it was declared as inline.
4266 Even with this option, the compiler will not warn about failures to
4267 inline functions declared in system headers.
4268
4269 The compiler uses a variety of heuristics to determine whether or not
4270 to inline a function.  For example, the compiler takes into account
4271 the size of the function being inlined and the amount of inlining
4272 that has already been done in the current function.  Therefore,
4273 seemingly insignificant changes in the source program can cause the
4274 warnings produced by @option{-Winline} to appear or disappear.
4275
4276 @item -Wno-invalid-offsetof @r{(C++ and Objective-C++ only)}
4277 @opindex Wno-invalid-offsetof
4278 @opindex Winvalid-offsetof
4279 Suppress warnings from applying the @samp{offsetof} macro to a non-POD
4280 type.  According to the 1998 ISO C++ standard, applying @samp{offsetof}
4281 to a non-POD type is undefined.  In existing C++ implementations,
4282 however, @samp{offsetof} typically gives meaningful results even when
4283 applied to certain kinds of non-POD types. (Such as a simple
4284 @samp{struct} that fails to be a POD type only by virtue of having a
4285 constructor.)  This flag is for users who are aware that they are
4286 writing nonportable code and who have deliberately chosen to ignore the
4287 warning about it.
4288
4289 The restrictions on @samp{offsetof} may be relaxed in a future version
4290 of the C++ standard.
4291
4292 @item -Wno-int-to-pointer-cast @r{(C and Objective-C only)}
4293 @opindex Wno-int-to-pointer-cast
4294 @opindex Wint-to-pointer-cast
4295 Suppress warnings from casts to pointer type of an integer of a
4296 different size.
4297
4298 @item -Wno-pointer-to-int-cast @r{(C and Objective-C only)}
4299 @opindex Wno-pointer-to-int-cast
4300 @opindex Wpointer-to-int-cast
4301 Suppress warnings from casts from a pointer to an integer type of a
4302 different size.
4303
4304 @item -Winvalid-pch
4305 @opindex Winvalid-pch
4306 @opindex Wno-invalid-pch
4307 Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
4308 the search path but can't be used.
4309
4310 @item -Wlong-long
4311 @opindex Wlong-long
4312 @opindex Wno-long-long
4313 Warn if @samp{long long} type is used.  This is enabled by either
4314 @option{-pedantic} or @option{-Wtraditional} in ISO C90 and C++98
4315 modes.  To inhibit the warning messages, use @option{-Wno-long-long}.
4316
4317 @item -Wvariadic-macros
4318 @opindex Wvariadic-macros
4319 @opindex Wno-variadic-macros
4320 Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
4321 alternate syntax when in pedantic ISO C99 mode.  This is default.
4322 To inhibit the warning messages, use @option{-Wno-variadic-macros}.
4323
4324 @item -Wvla
4325 @opindex Wvla
4326 @opindex Wno-vla
4327 Warn if variable length array is used in the code.
4328 @option{-Wno-vla} will prevent the @option{-pedantic} warning of
4329 the variable length array.
4330
4331 @item -Wvolatile-register-var
4332 @opindex Wvolatile-register-var
4333 @opindex Wno-volatile-register-var
4334 Warn if a register variable is declared volatile.  The volatile
4335 modifier does not inhibit all optimizations that may eliminate reads
4336 and/or writes to register variables.  This warning is enabled by
4337 @option{-Wall}.
4338
4339 @item -Wdisabled-optimization
4340 @opindex Wdisabled-optimization
4341 @opindex Wno-disabled-optimization
4342 Warn if a requested optimization pass is disabled.  This warning does
4343 not generally indicate that there is anything wrong with your code; it
4344 merely indicates that GCC's optimizers were unable to handle the code
4345 effectively.  Often, the problem is that your code is too big or too
4346 complex; GCC will refuse to optimize programs when the optimization
4347 itself is likely to take inordinate amounts of time.
4348
4349 @item -Wpointer-sign @r{(C and Objective-C only)}
4350 @opindex Wpointer-sign
4351 @opindex Wno-pointer-sign
4352 Warn for pointer argument passing or assignment with different signedness.
4353 This option is only supported for C and Objective-C@.  It is implied by
4354 @option{-Wall} and by @option{-pedantic}, which can be disabled with
4355 @option{-Wno-pointer-sign}.
4356
4357 @item -Wstack-protector
4358 @opindex Wstack-protector
4359 @opindex Wno-stack-protector
4360 This option is only active when @option{-fstack-protector} is active.  It
4361 warns about functions that will not be protected against stack smashing.
4362
4363 @item -Wno-mudflap
4364 @opindex Wno-mudflap
4365 Suppress warnings about constructs that cannot be instrumented by
4366 @option{-fmudflap}.
4367
4368 @item -Woverlength-strings
4369 @opindex Woverlength-strings
4370 @opindex Wno-overlength-strings
4371 Warn about string constants which are longer than the ``minimum
4372 maximum'' length specified in the C standard.  Modern compilers
4373 generally allow string constants which are much longer than the
4374 standard's minimum limit, but very portable programs should avoid
4375 using longer strings.
4376
4377 The limit applies @emph{after} string constant concatenation, and does
4378 not count the trailing NUL@.  In C90, the limit was 509 characters; in
4379 C99, it was raised to 4095.  C++98 does not specify a normative
4380 minimum maximum, so we do not diagnose overlength strings in C++@.
4381
4382 This option is implied by @option{-pedantic}, and can be disabled with
4383 @option{-Wno-overlength-strings}.
4384
4385 @item -Wunsuffixed-float-constants @r{(C and Objective-C only)}
4386 @opindex Wunsuffixed-float-constants
4387
4388 GCC will issue a warning for any floating constant that does not have
4389 a suffix.  When used together with @option{-Wsystem-headers} it will
4390 warn about such constants in system header files.  This can be useful
4391 when preparing code to use with the @code{FLOAT_CONST_DECIMAL64} pragma
4392 from the decimal floating-point extension to C99.
4393 @end table
4394
4395 @node Debugging Options
4396 @section Options for Debugging Your Program or GCC
4397 @cindex options, debugging
4398 @cindex debugging information options
4399
4400 GCC has various special options that are used for debugging
4401 either your program or GCC:
4402
4403 @table @gcctabopt
4404 @item -g
4405 @opindex g
4406 Produce debugging information in the operating system's native format
4407 (stabs, COFF, XCOFF, or DWARF 2)@.  GDB can work with this debugging
4408 information.
4409
4410 On most systems that use stabs format, @option{-g} enables use of extra
4411 debugging information that only GDB can use; this extra information
4412 makes debugging work better in GDB but will probably make other debuggers
4413 crash or
4414 refuse to read the program.  If you want to control for certain whether
4415 to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
4416 @option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).
4417
4418 GCC allows you to use @option{-g} with
4419 @option{-O}.  The shortcuts taken by optimized code may occasionally
4420 produce surprising results: some variables you declared may not exist
4421 at all; flow of control may briefly move where you did not expect it;
4422 some statements may not be executed because they compute constant
4423 results or their values were already at hand; some statements may
4424 execute in different places because they were moved out of loops.
4425
4426 Nevertheless it proves possible to debug optimized output.  This makes
4427 it reasonable to use the optimizer for programs that might have bugs.
4428
4429 The following options are useful when GCC is generated with the
4430 capability for more than one debugging format.
4431
4432 @item -ggdb
4433 @opindex ggdb
4434 Produce debugging information for use by GDB@.  This means to use the
4435 most expressive format available (DWARF 2, stabs, or the native format
4436 if neither of those are supported), including GDB extensions if at all
4437 possible.
4438
4439 @item -gstabs
4440 @opindex gstabs
4441 Produce debugging information in stabs format (if that is supported),
4442 without GDB extensions.  This is the format used by DBX on most BSD
4443 systems.  On MIPS, Alpha and System V Release 4 systems this option
4444 produces stabs debugging output which is not understood by DBX or SDB@.
4445 On System V Release 4 systems this option requires the GNU assembler.
4446
4447 @item -feliminate-unused-debug-symbols
4448 @opindex feliminate-unused-debug-symbols
4449 Produce debugging information in stabs format (if that is supported),
4450 for only symbols that are actually used.
4451
4452 @item -femit-class-debug-always
4453 Instead of emitting debugging information for a C++ class in only one
4454 object file, emit it in all object files using the class.  This option
4455 should be used only with debuggers that are unable to handle the way GCC
4456 normally emits debugging information for classes because using this
4457 option will increase the size of debugging information by as much as a
4458 factor of two.
4459
4460 @item -gstabs+
4461 @opindex gstabs+
4462 Produce debugging information in stabs format (if that is supported),
4463 using GNU extensions understood only by the GNU debugger (GDB)@.  The
4464 use of these extensions is likely to make other debuggers crash or
4465 refuse to read the program.
4466
4467 @item -gcoff
4468 @opindex gcoff
4469 Produce debugging information in COFF format (if that is supported).
4470 This is the format used by SDB on most System V systems prior to
4471 System V Release 4.
4472
4473 @item -gxcoff
4474 @opindex gxcoff
4475 Produce debugging information in XCOFF format (if that is supported).
4476 This is the format used by the DBX debugger on IBM RS/6000 systems.
4477
4478 @item -gxcoff+
4479 @opindex gxcoff+
4480 Produce debugging information in XCOFF format (if that is supported),
4481 using GNU extensions understood only by the GNU debugger (GDB)@.  The
4482 use of these extensions is likely to make other debuggers crash or
4483 refuse to read the program, and may cause assemblers other than the GNU
4484 assembler (GAS) to fail with an error.
4485
4486 @item -gdwarf-@var{version}
4487 @opindex gdwarf-@var{version}
4488 Produce debugging information in DWARF format (if that is
4489 supported).  This is the format used by DBX on IRIX 6.  The value
4490 of @var{version} may be either 2, 3 or 4; the default version is 2.
4491
4492 Note that with DWARF version 2 some ports require, and will always
4493 use, some non-conflicting DWARF 3 extensions in the unwind tables.
4494
4495 Version 4 may require GDB 7.0 and @option{-fvar-tracking-assignments}
4496 for maximum benefit.
4497
4498 @item -gstrict-dwarf
4499 @opindex gstrict-dwarf
4500 Disallow using extensions of later DWARF standard version than selected
4501 with @option{-gdwarf-@var{version}}.  On most targets using non-conflicting
4502 DWARF extensions from later standard versions is allowed.
4503
4504 @item -gno-strict-dwarf
4505 @opindex gno-strict-dwarf
4506 Allow using extensions of later DWARF standard version than selected with
4507 @option{-gdwarf-@var{version}}.
4508
4509 @item -gvms
4510 @opindex gvms
4511 Produce debugging information in VMS debug format (if that is
4512 supported).  This is the format used by DEBUG on VMS systems.
4513
4514 @item -g@var{level}
4515 @itemx -ggdb@var{level}
4516 @itemx -gstabs@var{level}
4517 @itemx -gcoff@var{level}
4518 @itemx -gxcoff@var{level}
4519 @itemx -gvms@var{level}
4520 Request debugging information and also use @var{level} to specify how
4521 much information.  The default level is 2.
4522
4523 Level 0 produces no debug information at all.  Thus, @option{-g0} negates
4524 @option{-g}.
4525
4526 Level 1 produces minimal information, enough for making backtraces in
4527 parts of the program that you don't plan to debug.  This includes
4528 descriptions of functions and external variables, but no information
4529 about local variables and no line numbers.
4530
4531 Level 3 includes extra information, such as all the macro definitions
4532 present in the program.  Some debuggers support macro expansion when
4533 you use @option{-g3}.
4534
4535 @option{-gdwarf-2} does not accept a concatenated debug level, because
4536 GCC used to support an option @option{-gdwarf} that meant to generate
4537 debug information in version 1 of the DWARF format (which is very
4538 different from version 2), and it would have been too confusing.  That
4539 debug format is long obsolete, but the option cannot be changed now.
4540 Instead use an additional @option{-g@var{level}} option to change the
4541 debug level for DWARF.
4542
4543 @item -gtoggle
4544 @opindex gtoggle
4545 Turn off generation of debug info, if leaving out this option would have
4546 generated it, or turn it on at level 2 otherwise.  The position of this
4547 argument in the command line does not matter, it takes effect after all
4548 other options are processed, and it does so only once, no matter how
4549 many times it is given.  This is mainly intended to be used with
4550 @option{-fcompare-debug}.
4551
4552 @item -fdump-final-insns@r{[}=@var{file}@r{]}
4553 @opindex fdump-final-insns
4554 Dump the final internal representation (RTL) to @var{file}.  If the
4555 optional argument is omitted (or if @var{file} is @code{.}), the name
4556 of the dump file will be determined by appending @code{.gkd} to the
4557 compilation output file name.
4558
4559 @item -fcompare-debug@r{[}=@var{opts}@r{]}
4560 @opindex fcompare-debug
4561 @opindex fno-compare-debug
4562 If no error occurs during compilation, run the compiler a second time,
4563 adding @var{opts} and @option{-fcompare-debug-second} to the arguments
4564 passed to the second compilation.  Dump the final internal
4565 representation in both compilations, and print an error if they differ.
4566
4567 If the equal sign is omitted, the default @option{-gtoggle} is used.
4568
4569 The environment variable @env{GCC_COMPARE_DEBUG}, if defined, non-empty
4570 and nonzero, implicitly enables @option{-fcompare-debug}.  If
4571 @env{GCC_COMPARE_DEBUG} is defined to a string starting with a dash,
4572 then it is used for @var{opts}, otherwise the default @option{-gtoggle}
4573 is used.
4574
4575 @option{-fcompare-debug=}, with the equal sign but without @var{opts},
4576 is equivalent to @option{-fno-compare-debug}, which disables the dumping
4577 of the final representation and the second compilation, preventing even
4578 @env{GCC_COMPARE_DEBUG} from taking effect.
4579
4580 To verify full coverage during @option{-fcompare-debug} testing, set
4581 @env{GCC_COMPARE_DEBUG} to say @samp{-fcompare-debug-not-overridden},
4582 which GCC will reject as an invalid option in any actual compilation
4583 (rather than preprocessing, assembly or linking).  To get just a
4584 warning, setting @env{GCC_COMPARE_DEBUG} to @samp{-w%n-fcompare-debug
4585 not overridden} will do.
4586
4587 @item -fcompare-debug-second
4588 @opindex fcompare-debug-second
4589 This option is implicitly passed to the compiler for the second
4590 compilation requested by @option{-fcompare-debug}, along with options to
4591 silence warnings, and omitting other options that would cause
4592 side-effect compiler outputs to files or to the standard output.  Dump
4593 files and preserved temporary files are renamed so as to contain the
4594 @code{.gk} additional extension during the second compilation, to avoid
4595 overwriting those generated by the first.
4596
4597 When this option is passed to the compiler driver, it causes the
4598 @emph{first} compilation to be skipped, which makes it useful for little
4599 other than debugging the compiler proper.
4600
4601 @item -feliminate-dwarf2-dups
4602 @opindex feliminate-dwarf2-dups
4603 Compress DWARF2 debugging information by eliminating duplicated
4604 information about each symbol.  This option only makes sense when
4605 generating DWARF2 debugging information with @option{-gdwarf-2}.
4606
4607 @item -femit-struct-debug-baseonly
4608 Emit debug information for struct-like types
4609 only when the base name of the compilation source file
4610 matches the base name of file in which the struct was defined.
4611
4612 This option substantially reduces the size of debugging information,
4613 but at significant potential loss in type information to the debugger.
4614 See @option{-femit-struct-debug-reduced} for a less aggressive option.
4615 See @option{-femit-struct-debug-detailed} for more detailed control.
4616
4617 This option works only with DWARF 2.
4618
4619 @item -femit-struct-debug-reduced
4620 Emit debug information for struct-like types
4621 only when the base name of the compilation source file
4622 matches the base name of file in which the type was defined,
4623 unless the struct is a template or defined in a system header.
4624
4625 This option significantly reduces the size of debugging information,
4626 with some potential loss in type information to the debugger.
4627 See @option{-femit-struct-debug-baseonly} for a more aggressive option.
4628 See @option{-femit-struct-debug-detailed} for more detailed control.
4629
4630 This option works only with DWARF 2.
4631
4632 @item -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]}
4633 Specify the struct-like types
4634 for which the compiler will generate debug information.
4635 The intent is to reduce duplicate struct debug information
4636 between different object files within the same program.
4637
4638 This option is a detailed version of
4639 @option{-femit-struct-debug-reduced} and @option{-femit-struct-debug-baseonly},
4640 which will serve for most needs.
4641
4642 A specification has the syntax
4643 [@samp{dir:}|@samp{ind:}][@samp{ord:}|@samp{gen:}](@samp{any}|@samp{sys}|@samp{base}|@samp{none})
4644
4645 The optional first word limits the specification to
4646 structs that are used directly (@samp{dir:}) or used indirectly (@samp{ind:}).
4647 A struct type is used directly when it is the type of a variable, member.
4648 Indirect uses arise through pointers to structs.
4649 That is, when use of an incomplete struct would be legal, the use is indirect.
4650 An example is
4651 @samp{struct one direct; struct two * indirect;}.
4652
4653 The optional second word limits the specification to
4654 ordinary structs (@samp{ord:}) or generic structs (@samp{gen:}).
4655 Generic structs are a bit complicated to explain.
4656 For C++, these are non-explicit specializations of template classes,
4657 or non-template classes within the above.
4658 Other programming languages have generics,
4659 but @samp{-femit-struct-debug-detailed} does not yet implement them.
4660
4661 The third word specifies the source files for those
4662 structs for which the compiler will emit debug information.
4663 The values @samp{none} and @samp{any} have the normal meaning.
4664 The value @samp{base} means that
4665 the base of name of the file in which the type declaration appears
4666 must match the base of the name of the main compilation file.
4667 In practice, this means that
4668 types declared in @file{foo.c} and @file{foo.h} will have debug information,
4669 but types declared in other header will not.
4670 The value @samp{sys} means those types satisfying @samp{base}
4671 or declared in system or compiler headers.
4672
4673 You may need to experiment to determine the best settings for your application.
4674
4675 The default is @samp{-femit-struct-debug-detailed=all}.
4676
4677 This option works only with DWARF 2.
4678
4679 @item -fenable-icf-debug
4680 @opindex fenable-icf-debug
4681 Generate additional debug information to support identical code folding (ICF).
4682 This option only works with DWARF version 2 or higher.
4683
4684 @item -fno-merge-debug-strings
4685 @opindex fmerge-debug-strings
4686 @opindex fno-merge-debug-strings
4687 Direct the linker to not merge together strings in the debugging
4688 information which are identical in different object files.  Merging is
4689 not supported by all assemblers or linkers.  Merging decreases the size
4690 of the debug information in the output file at the cost of increasing
4691 link processing time.  Merging is enabled by default.
4692
4693 @item -fdebug-prefix-map=@var{old}=@var{new}
4694 @opindex fdebug-prefix-map
4695 When compiling files in directory @file{@var{old}}, record debugging
4696 information describing them as in @file{@var{new}} instead.
4697
4698 @item -fno-dwarf2-cfi-asm
4699 @opindex fdwarf2-cfi-asm
4700 @opindex fno-dwarf2-cfi-asm
4701 Emit DWARF 2 unwind info as compiler generated @code{.eh_frame} section
4702 instead of using GAS @code{.cfi_*} directives.
4703
4704 @cindex @command{prof}
4705 @item -p
4706 @opindex p
4707 Generate extra code to write profile information suitable for the
4708 analysis program @command{prof}.  You must use this option when compiling
4709 the source files you want data about, and you must also use it when
4710 linking.
4711
4712 @cindex @command{gprof}
4713 @item -pg
4714 @opindex pg
4715 Generate extra code to write profile information suitable for the
4716 analysis program @command{gprof}.  You must use this option when compiling
4717 the source files you want data about, and you must also use it when
4718 linking.
4719
4720 @item -Q
4721 @opindex Q
4722 Makes the compiler print out each function name as it is compiled, and
4723 print some statistics about each pass when it finishes.
4724
4725 @item -ftime-report
4726 @opindex ftime-report
4727 Makes the compiler print some statistics about the time consumed by each
4728 pass when it finishes.
4729
4730 @item -fmem-report
4731 @opindex fmem-report
4732 Makes the compiler print some statistics about permanent memory
4733 allocation when it finishes.
4734
4735 @item -fpre-ipa-mem-report
4736 @opindex fpre-ipa-mem-report
4737 @item -fpost-ipa-mem-report
4738 @opindex fpost-ipa-mem-report
4739 Makes the compiler print some statistics about permanent memory
4740 allocation before or after interprocedural optimization.
4741
4742 @item -fprofile-arcs
4743 @opindex fprofile-arcs
4744 Add code so that program flow @dfn{arcs} are instrumented.  During
4745 execution the program records how many times each branch and call is
4746 executed and how many times it is taken or returns.  When the compiled
4747 program exits it saves this data to a file called
4748 @file{@var{auxname}.gcda} for each source file.  The data may be used for
4749 profile-directed optimizations (@option{-fbranch-probabilities}), or for
4750 test coverage analysis (@option{-ftest-coverage}).  Each object file's
4751 @var{auxname} is generated from the name of the output file, if
4752 explicitly specified and it is not the final executable, otherwise it is
4753 the basename of the source file.  In both cases any suffix is removed
4754 (e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or
4755 @file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
4756 @xref{Cross-profiling}.
4757
4758 @cindex @command{gcov}
4759 @item --coverage
4760 @opindex coverage
4761
4762 This option is used to compile and link code instrumented for coverage
4763 analysis.  The option is a synonym for @option{-fprofile-arcs}
4764 @option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
4765 linking).  See the documentation for those options for more details.
4766
4767 @itemize
4768
4769 @item
4770 Compile the source files with @option{-fprofile-arcs} plus optimization
4771 and code generation options.  For test coverage analysis, use the
4772 additional @option{-ftest-coverage} option.  You do not need to profile
4773 every source file in a program.
4774
4775 @item
4776 Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
4777 (the latter implies the former).
4778
4779 @item
4780 Run the program on a representative workload to generate the arc profile
4781 information.  This may be repeated any number of times.  You can run
4782 concurrent instances of your program, and provided that the file system
4783 supports locking, the data files will be correctly updated.  Also
4784 @code{fork} calls are detected and correctly handled (double counting
4785 will not happen).
4786
4787 @item
4788 For profile-directed optimizations, compile the source files again with
4789 the same optimization and code generation options plus
4790 @option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
4791 Control Optimization}).
4792
4793 @item
4794 For test coverage analysis, use @command{gcov} to produce human readable
4795 information from the @file{.gcno} and @file{.gcda} files.  Refer to the
4796 @command{gcov} documentation for further information.
4797
4798 @end itemize
4799
4800 With @option{-fprofile-arcs}, for each function of your program GCC
4801 creates a program flow graph, then finds a spanning tree for the graph.
4802 Only arcs that are not on the spanning tree have to be instrumented: the
4803 compiler adds code to count the number of times that these arcs are
4804 executed.  When an arc is the only exit or only entrance to a block, the
4805 instrumentation code can be added to the block; otherwise, a new basic
4806 block must be created to hold the instrumentation code.
4807
4808 @need 2000
4809 @item -ftest-coverage
4810 @opindex ftest-coverage
4811 Produce a notes file that the @command{gcov} code-coverage utility
4812 (@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
4813 show program coverage.  Each source file's note file is called
4814 @file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
4815 above for a description of @var{auxname} and instructions on how to
4816 generate test coverage data.  Coverage data will match the source files
4817 more closely, if you do not optimize.
4818
4819 @item -fdbg-cnt-list
4820 @opindex fdbg-cnt-list
4821 Print the name and the counter upperbound for all debug counters.
4822
4823 @item -fdbg-cnt=@var{counter-value-list}
4824 @opindex fdbg-cnt
4825 Set the internal debug counter upperbound. @var{counter-value-list}
4826 is a comma-separated list of @var{name}:@var{value} pairs
4827 which sets the upperbound of each debug counter @var{name} to @var{value}.
4828 All debug counters have the initial upperbound of @var{UINT_MAX},
4829 thus dbg_cnt() returns true always unless the upperbound is set by this option.
4830 e.g. With -fdbg-cnt=dce:10,tail_call:0
4831 dbg_cnt(dce) will return true only for first 10 invocations
4832 and dbg_cnt(tail_call) will return false always.
4833
4834 @item -d@var{letters}
4835 @itemx -fdump-rtl-@var{pass}
4836 @opindex d
4837 Says to make debugging dumps during compilation at times specified by
4838 @var{letters}.  This is used for debugging the RTL-based passes of the
4839 compiler.  The file names for most of the dumps are made by appending
4840 a pass number and a word to the @var{dumpname}, and the files are
4841 created in the directory of the output file.  @var{dumpname} is
4842 generated from the name of the output file, if explicitly specified
4843 and it is not an executable, otherwise it is the basename of the
4844 source file. These switches may have different effects when
4845 @option{-E} is used for preprocessing.
4846
4847 Debug dumps can be enabled with a @option{-fdump-rtl} switch or some
4848 @option{-d} option @var{letters}.  Here are the possible
4849 letters for use in @var{pass} and @var{letters}, and their meanings:
4850
4851 @table @gcctabopt
4852
4853 @item -fdump-rtl-alignments
4854 @opindex fdump-rtl-alignments
4855 Dump after branch alignments have been computed.
4856
4857 @item -fdump-rtl-asmcons
4858 @opindex fdump-rtl-asmcons
4859 Dump after fixing rtl statements that have unsatisfied in/out constraints.
4860
4861 @item -fdump-rtl-auto_inc_dec
4862 @opindex fdump-rtl-auto_inc_dec
4863 Dump after auto-inc-dec discovery.  This pass is only run on
4864 architectures that have auto inc or auto dec instructions.
4865
4866 @item -fdump-rtl-barriers
4867 @opindex fdump-rtl-barriers
4868 Dump after cleaning up the barrier instructions.
4869
4870 @item -fdump-rtl-bbpart
4871 @opindex fdump-rtl-bbpart
4872 Dump after partitioning hot and cold basic blocks.
4873
4874 @item -fdump-rtl-bbro
4875 @opindex fdump-rtl-bbro
4876 Dump after block reordering.
4877
4878 @item -fdump-rtl-btl1
4879 @itemx -fdump-rtl-btl2
4880 @opindex fdump-rtl-btl2
4881 @opindex fdump-rtl-btl2
4882 @option{-fdump-rtl-btl1} and @option{-fdump-rtl-btl2} enable dumping
4883 after the two branch
4884 target load optimization passes.
4885
4886 @item -fdump-rtl-bypass
4887 @opindex fdump-rtl-bypass
4888 Dump after jump bypassing and control flow optimizations.
4889
4890 @item -fdump-rtl-combine
4891 @opindex fdump-rtl-combine
4892 Dump after the RTL instruction combination pass.
4893
4894 @item -fdump-rtl-compgotos
4895 @opindex fdump-rtl-compgotos
4896 Dump after duplicating the computed gotos.
4897
4898 @item -fdump-rtl-ce1
4899 @itemx -fdump-rtl-ce2
4900 @itemx -fdump-rtl-ce3
4901 @opindex fdump-rtl-ce1
4902 @opindex fdump-rtl-ce2
4903 @opindex fdump-rtl-ce3
4904 @option{-fdump-rtl-ce1}, @option{-fdump-rtl-ce2}, and
4905 @option{-fdump-rtl-ce3} enable dumping after the three
4906 if conversion passes.
4907
4908 @itemx -fdump-rtl-cprop_hardreg
4909 @opindex fdump-rtl-cprop_hardreg
4910 Dump after hard register copy propagation.
4911
4912 @itemx -fdump-rtl-csa
4913 @opindex fdump-rtl-csa
4914 Dump after combining stack adjustments.
4915
4916 @item -fdump-rtl-cse1
4917 @itemx -fdump-rtl-cse2
4918 @opindex fdump-rtl-cse1
4919 @opindex fdump-rtl-cse2
4920 @option{-fdump-rtl-cse1} and @option{-fdump-rtl-cse2} enable dumping after
4921 the two common sub-expression elimination passes.
4922
4923 @itemx -fdump-rtl-dce
4924 @opindex fdump-rtl-dce
4925 Dump after the standalone dead code elimination passes.
4926
4927 @itemx -fdump-rtl-dbr
4928 @opindex fdump-rtl-dbr
4929 Dump after delayed branch scheduling.
4930
4931 @item -fdump-rtl-dce1
4932 @itemx -fdump-rtl-dce2
4933 @opindex fdump-rtl-dce1
4934 @opindex fdump-rtl-dce2
4935 @option{-fdump-rtl-dce1} and @option{-fdump-rtl-dce2} enable dumping after
4936 the two dead store elimination passes.
4937
4938 @item -fdump-rtl-eh
4939 @opindex fdump-rtl-eh
4940 Dump after finalization of EH handling code.
4941
4942 @item -fdump-rtl-eh_ranges
4943 @opindex fdump-rtl-eh_ranges
4944 Dump after conversion of EH handling range regions.
4945
4946 @item -fdump-rtl-expand
4947 @opindex fdump-rtl-expand
4948 Dump after RTL generation.
4949
4950 @item -fdump-rtl-fwprop1
4951 @itemx -fdump-rtl-fwprop2
4952 @opindex fdump-rtl-fwprop1
4953 @opindex fdump-rtl-fwprop2
4954 @option{-fdump-rtl-fwprop1} and @option{-fdump-rtl-fwprop2} enable
4955 dumping after the two forward propagation passes.
4956
4957 @item -fdump-rtl-gcse1
4958 @itemx -fdump-rtl-gcse2
4959 @opindex fdump-rtl-gcse1
4960 @opindex fdump-rtl-gcse2
4961 @option{-fdump-rtl-gcse1} and @option{-fdump-rtl-gcse2} enable dumping
4962 after global common subexpression elimination.
4963
4964 @item -fdump-rtl-init-regs
4965 @opindex fdump-rtl-init-regs
4966 Dump after the initialization of the registers.
4967
4968 @item -fdump-rtl-initvals
4969 @opindex fdump-rtl-initvals
4970 Dump after the computation of the initial value sets.
4971
4972 @itemx -fdump-rtl-into_cfglayout
4973 @opindex fdump-rtl-into_cfglayout
4974 Dump after converting to cfglayout mode.
4975
4976 @item -fdump-rtl-ira
4977 @opindex fdump-rtl-ira
4978 Dump after iterated register allocation.
4979
4980 @item -fdump-rtl-jump
4981 @opindex fdump-rtl-jump
4982 Dump after the second jump optimization.
4983
4984 @item -fdump-rtl-loop2
4985 @opindex fdump-rtl-loop2
4986 @option{-fdump-rtl-loop2} enables dumping after the rtl
4987 loop optimization passes.
4988
4989 @item -fdump-rtl-mach
4990 @opindex fdump-rtl-mach
4991 Dump after performing the machine dependent reorganization pass, if that
4992 pass exists.
4993
4994 @item -fdump-rtl-mode_sw
4995 @opindex fdump-rtl-mode_sw
4996 Dump after removing redundant mode switches.
4997
4998 @item -fdump-rtl-rnreg
4999 @opindex fdump-rtl-rnreg
5000 Dump after register renumbering.
5001
5002 @itemx -fdump-rtl-outof_cfglayout
5003 @opindex fdump-rtl-outof_cfglayout
5004 Dump after converting from cfglayout mode.
5005
5006 @item -fdump-rtl-peephole2
5007 @opindex fdump-rtl-peephole2
5008 Dump after the peephole pass.
5009
5010 @item -fdump-rtl-postreload
5011 @opindex fdump-rtl-postreload
5012 Dump after post-reload optimizations.
5013
5014 @itemx -fdump-rtl-pro_and_epilogue
5015 @opindex fdump-rtl-pro_and_epilogue
5016 Dump after generating the function pro and epilogues.
5017
5018 @item -fdump-rtl-regmove
5019 @opindex fdump-rtl-regmove
5020 Dump after the register move pass.
5021
5022 @item -fdump-rtl-sched1
5023 @itemx -fdump-rtl-sched2
5024 @opindex fdump-rtl-sched1
5025 @opindex fdump-rtl-sched2
5026 @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2} enable dumping
5027 after the basic block scheduling passes.
5028
5029 @item -fdump-rtl-see
5030 @opindex fdump-rtl-see
5031 Dump after sign extension elimination.
5032
5033 @item -fdump-rtl-seqabstr
5034 @opindex fdump-rtl-seqabstr
5035 Dump after common sequence discovery.
5036
5037 @item -fdump-rtl-shorten
5038 @opindex fdump-rtl-shorten
5039 Dump after shortening branches.
5040
5041 @item -fdump-rtl-sibling
5042 @opindex fdump-rtl-sibling
5043 Dump after sibling call optimizations.
5044
5045 @item -fdump-rtl-split1
5046 @itemx -fdump-rtl-split2
5047 @itemx -fdump-rtl-split3
5048 @itemx -fdump-rtl-split4
5049 @itemx -fdump-rtl-split5
5050 @opindex fdump-rtl-split1
5051 @opindex fdump-rtl-split2
5052 @opindex fdump-rtl-split3
5053 @opindex fdump-rtl-split4
5054 @opindex fdump-rtl-split5
5055 @option{-fdump-rtl-split1}, @option{-fdump-rtl-split2},
5056 @option{-fdump-rtl-split3}, @option{-fdump-rtl-split4} and
5057 @option{-fdump-rtl-split5} enable dumping after five rounds of
5058 instruction splitting.
5059
5060 @item -fdump-rtl-sms
5061 @opindex fdump-rtl-sms
5062 Dump after modulo scheduling.  This pass is only run on some
5063 architectures.
5064
5065 @item -fdump-rtl-stack
5066 @opindex fdump-rtl-stack
5067 Dump after conversion from GCC's "flat register file" registers to the
5068 x87's stack-like registers.  This pass is only run on x86 variants.
5069
5070 @item -fdump-rtl-subreg1
5071 @itemx -fdump-rtl-subreg2
5072 @opindex fdump-rtl-subreg1
5073 @opindex fdump-rtl-subreg2
5074 @option{-fdump-rtl-subreg1} and @option{-fdump-rtl-subreg2} enable dumping after
5075 the two subreg expansion passes.
5076
5077 @item -fdump-rtl-unshare
5078 @opindex fdump-rtl-unshare
5079 Dump after all rtl has been unshared.
5080
5081 @item -fdump-rtl-vartrack
5082 @opindex fdump-rtl-vartrack
5083 Dump after variable tracking.
5084
5085 @item -fdump-rtl-vregs
5086 @opindex fdump-rtl-vregs
5087 Dump after converting virtual registers to hard registers.
5088
5089 @item -fdump-rtl-web
5090 @opindex fdump-rtl-web
5091 Dump after live range splitting.
5092
5093 @item -fdump-rtl-regclass
5094 @itemx -fdump-rtl-subregs_of_mode_init
5095 @itemx -fdump-rtl-subregs_of_mode_finish
5096 @itemx -fdump-rtl-dfinit
5097 @itemx -fdump-rtl-dfinish
5098 @opindex fdump-rtl-regclass
5099 @opindex fdump-rtl-subregs_of_mode_init
5100 @opindex fdump-rtl-subregs_of_mode_finish
5101 @opindex fdump-rtl-dfinit
5102 @opindex fdump-rtl-dfinish
5103 These dumps are defined but always produce empty files.
5104
5105 @item -fdump-rtl-all
5106 @opindex fdump-rtl-all
5107 Produce all the dumps listed above.
5108
5109 @item -dA
5110 @opindex dA
5111 Annotate the assembler output with miscellaneous debugging information.
5112
5113 @item -dD
5114 @opindex dD
5115 Dump all macro definitions, at the end of preprocessing, in addition to
5116 normal output.
5117
5118 @item -dH
5119 @opindex dH
5120 Produce a core dump whenever an error occurs.
5121
5122 @item -dm
5123 @opindex dm
5124 Print statistics on memory usage, at the end of the run, to
5125 standard error.
5126
5127 @item -dp
5128 @opindex dp
5129 Annotate the assembler output with a comment indicating which
5130 pattern and alternative was used.  The length of each instruction is
5131 also printed.
5132
5133 @item -dP
5134 @opindex dP
5135 Dump the RTL in the assembler output as a comment before each instruction.
5136 Also turns on @option{-dp} annotation.
5137
5138 @item -dv
5139 @opindex dv
5140 For each of the other indicated dump files (@option{-fdump-rtl-@var{pass}}),
5141 dump a representation of the control flow graph suitable for viewing with VCG
5142 to @file{@var{file}.@var{pass}.vcg}.
5143
5144 @item -dx
5145 @opindex dx
5146 Just generate RTL for a function instead of compiling it.  Usually used
5147 with @option{-fdump-rtl-expand}.
5148
5149 @item -dy
5150 @opindex dy
5151 Dump debugging information during parsing, to standard error.
5152 @end table
5153
5154 @item -fdump-noaddr
5155 @opindex fdump-noaddr
5156 When doing debugging dumps, suppress address output.  This makes it more
5157 feasible to use diff on debugging dumps for compiler invocations with
5158 different compiler binaries and/or different
5159 text / bss / data / heap / stack / dso start locations.
5160
5161 @item -fdump-unnumbered
5162 @opindex fdump-unnumbered
5163 When doing debugging dumps, suppress instruction numbers and address output.
5164 This makes it more feasible to use diff on debugging dumps for compiler
5165 invocations with different options, in particular with and without
5166 @option{-g}.
5167
5168 @item -fdump-unnumbered-links
5169 @opindex fdump-unnumbered-links
5170 When doing debugging dumps (see @option{-d} option above), suppress
5171 instruction numbers for the links to the previous and next instructions
5172 in a sequence.
5173
5174 @item -fdump-translation-unit @r{(C++ only)}
5175 @itemx -fdump-translation-unit-@var{options} @r{(C++ only)}
5176 @opindex fdump-translation-unit
5177 Dump a representation of the tree structure for the entire translation
5178 unit to a file.  The file name is made by appending @file{.tu} to the
5179 source file name, and the file is created in the same directory as the
5180 output file.  If the @samp{-@var{options}} form is used, @var{options}
5181 controls the details of the dump as described for the
5182 @option{-fdump-tree} options.
5183
5184 @item -fdump-class-hierarchy @r{(C++ only)}
5185 @itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
5186 @opindex fdump-class-hierarchy
5187 Dump a representation of each class's hierarchy and virtual function
5188 table layout to a file.  The file name is made by appending
5189 @file{.class} to the source file name, and the file is created in the
5190 same directory as the output file.  If the @samp{-@var{options}} form
5191 is used, @var{options} controls the details of the dump as described
5192 for the @option{-fdump-tree} options.
5193
5194 @item -fdump-ipa-@var{switch}
5195 @opindex fdump-ipa
5196 Control the dumping at various stages of inter-procedural analysis
5197 language tree to a file.  The file name is generated by appending a
5198 switch specific suffix to the source file name, and the file is created
5199 in the same directory as the output file.  The following dumps are
5200 possible:
5201
5202 @table @samp
5203 @item all
5204 Enables all inter-procedural analysis dumps.
5205
5206 @item cgraph
5207 Dumps information about call-graph optimization, unused function removal,
5208 and inlining decisions.
5209
5210 @item inline
5211 Dump after function inlining.
5212
5213 @end table
5214
5215 @item -fdump-statistics-@var{option}
5216 @opindex fdump-statistics
5217 Enable and control dumping of pass statistics in a separate file.  The
5218 file name is generated by appending a suffix ending in
5219 @samp{.statistics} to the source file name, and the file is created in
5220 the same directory as the output file.  If the @samp{-@var{option}}
5221 form is used, @samp{-stats} will cause counters to be summed over the
5222 whole compilation unit while @samp{-details} will dump every event as
5223 the passes generate them.  The default with no option is to sum
5224 counters for each function compiled.
5225
5226 @item -fdump-tree-@var{switch}
5227 @itemx -fdump-tree-@var{switch}-@var{options}
5228 @opindex fdump-tree
5229 Control the dumping at various stages of processing the intermediate
5230 language tree to a file.  The file name is generated by appending a
5231 switch specific suffix to the source file name, and the file is
5232 created in the same directory as the output file.  If the
5233 @samp{-@var{options}} form is used, @var{options} is a list of
5234 @samp{-} separated options that control the details of the dump.  Not
5235 all options are applicable to all dumps, those which are not
5236 meaningful will be ignored.  The following options are available
5237
5238 @table @samp
5239 @item address
5240 Print the address of each node.  Usually this is not meaningful as it
5241 changes according to the environment and source file.  Its primary use
5242 is for tying up a dump file with a debug environment.
5243 @item asmname
5244 If @code{DECL_ASSEMBLER_NAME} has been set for a given decl, use that
5245 in the dump instead of @code{DECL_NAME}.  Its primary use is ease of
5246 use working backward from mangled names in the assembly file.
5247 @item slim
5248 Inhibit dumping of members of a scope or body of a function merely
5249 because that scope has been reached.  Only dump such items when they
5250 are directly reachable by some other path.  When dumping pretty-printed
5251 trees, this option inhibits dumping the bodies of control structures.
5252 @item raw
5253 Print a raw representation of the tree.  By default, trees are
5254 pretty-printed into a C-like representation.
5255 @item details
5256 Enable more detailed dumps (not honored by every dump option).
5257 @item stats
5258 Enable dumping various statistics about the pass (not honored by every dump
5259 option).
5260 @item blocks
5261 Enable showing basic block boundaries (disabled in raw dumps).
5262 @item vops
5263 Enable showing virtual operands for every statement.
5264 @item lineno
5265 Enable showing line numbers for statements.
5266 @item uid
5267 Enable showing the unique ID (@code{DECL_UID}) for each variable.
5268 @item verbose
5269 Enable showing the tree dump for each statement.
5270 @item eh
5271 Enable showing the EH region number holding each statement.
5272 @item all
5273 Turn on all options, except @option{raw}, @option{slim}, @option{verbose}
5274 and @option{lineno}.
5275 @end table
5276
5277 The following tree dumps are possible:
5278 @table @samp
5279
5280 @item original
5281 @opindex fdump-tree-original
5282 Dump before any tree based optimization, to @file{@var{file}.original}.
5283
5284 @item optimized
5285 @opindex fdump-tree-optimized
5286 Dump after all tree based optimization, to @file{@var{file}.optimized}.
5287
5288 @item gimple
5289 @opindex fdump-tree-gimple
5290 Dump each function before and after the gimplification pass to a file.  The
5291 file name is made by appending @file{.gimple} to the source file name.
5292
5293 @item cfg
5294 @opindex fdump-tree-cfg
5295 Dump the control flow graph of each function to a file.  The file name is
5296 made by appending @file{.cfg} to the source file name.
5297
5298 @item vcg
5299 @opindex fdump-tree-vcg
5300 Dump the control flow graph of each function to a file in VCG format.  The
5301 file name is made by appending @file{.vcg} to the source file name.  Note
5302 that if the file contains more than one function, the generated file cannot
5303 be used directly by VCG@.  You will need to cut and paste each function's
5304 graph into its own separate file first.
5305
5306 @item ch
5307 @opindex fdump-tree-ch
5308 Dump each function after copying loop headers.  The file name is made by
5309 appending @file{.ch} to the source file name.
5310
5311 @item ssa
5312 @opindex fdump-tree-ssa
5313 Dump SSA related information to a file.  The file name is made by appending
5314 @file{.ssa} to the source file name.
5315
5316 @item alias
5317 @opindex fdump-tree-alias
5318 Dump aliasing information for each function.  The file name is made by
5319 appending @file{.alias} to the source file name.
5320
5321 @item ccp
5322 @opindex fdump-tree-ccp
5323 Dump each function after CCP@.  The file name is made by appending
5324 @file{.ccp} to the source file name.
5325
5326 @item storeccp
5327 @opindex fdump-tree-storeccp
5328 Dump each function after STORE-CCP@.  The file name is made by appending
5329 @file{.storeccp} to the source file name.
5330
5331 @item pre
5332 @opindex fdump-tree-pre
5333 Dump trees after partial redundancy elimination.  The file name is made
5334 by appending @file{.pre} to the source file name.
5335
5336 @item fre
5337 @opindex fdump-tree-fre
5338 Dump trees after full redundancy elimination.  The file name is made
5339 by appending @file{.fre} to the source file name.
5340
5341 @item copyprop
5342 @opindex fdump-tree-copyprop
5343 Dump trees after copy propagation.  The file name is made
5344 by appending @file{.copyprop} to the source file name.
5345
5346 @item store_copyprop
5347 @opindex fdump-tree-store_copyprop
5348 Dump trees after store copy-propagation.  The file name is made
5349 by appending @file{.store_copyprop} to the source file name.
5350
5351 @item dce
5352 @opindex fdump-tree-dce
5353 Dump each function after dead code elimination.  The file name is made by
5354 appending @file{.dce} to the source file name.
5355
5356 @item mudflap
5357 @opindex fdump-tree-mudflap
5358 Dump each function after adding mudflap instrumentation.  The file name is
5359 made by appending @file{.mudflap} to the source file name.
5360
5361 @item sra
5362 @opindex fdump-tree-sra
5363 Dump each function after performing scalar replacement of aggregates.  The
5364 file name is made by appending @file{.sra} to the source file name.
5365
5366 @item sink
5367 @opindex fdump-tree-sink
5368 Dump each function after performing code sinking.  The file name is made
5369 by appending @file{.sink} to the source file name.
5370
5371 @item dom
5372 @opindex fdump-tree-dom
5373 Dump each function after applying dominator tree optimizations.  The file
5374 name is made by appending @file{.dom} to the source file name.
5375
5376 @item dse
5377 @opindex fdump-tree-dse
5378 Dump each function after applying dead store elimination.  The file
5379 name is made by appending @file{.dse} to the source file name.
5380
5381 @item phiopt
5382 @opindex fdump-tree-phiopt
5383 Dump each function after optimizing PHI nodes into straightline code.  The file
5384 name is made by appending @file{.phiopt} to the source file name.
5385
5386 @item forwprop
5387 @opindex fdump-tree-forwprop
5388 Dump each function after forward propagating single use variables.  The file
5389 name is made by appending @file{.forwprop} to the source file name.
5390
5391 @item copyrename
5392 @opindex fdump-tree-copyrename
5393 Dump each function after applying the copy rename optimization.  The file
5394 name is made by appending @file{.copyrename} to the source file name.
5395
5396 @item nrv
5397 @opindex fdump-tree-nrv
5398 Dump each function after applying the named return value optimization on
5399 generic trees.  The file name is made by appending @file{.nrv} to the source
5400 file name.
5401
5402 @item vect
5403 @opindex fdump-tree-vect
5404 Dump each function after applying vectorization of loops.  The file name is
5405 made by appending @file{.vect} to the source file name.
5406
5407 @item slp
5408 @opindex fdump-tree-slp
5409 Dump each function after applying vectorization of basic blocks.  The file name
5410 is made by appending @file{.slp} to the source file name.
5411
5412 @item vrp
5413 @opindex fdump-tree-vrp
5414 Dump each function after Value Range Propagation (VRP).  The file name
5415 is made by appending @file{.vrp} to the source file name.
5416
5417 @item all
5418 @opindex fdump-tree-all
5419 Enable all the available tree dumps with the flags provided in this option.
5420 @end table
5421
5422 @item -ftree-vectorizer-verbose=@var{n}
5423 @opindex ftree-vectorizer-verbose
5424 This option controls the amount of debugging output the vectorizer prints.
5425 This information is written to standard error, unless
5426 @option{-fdump-tree-all} or @option{-fdump-tree-vect} is specified,
5427 in which case it is output to the usual dump listing file, @file{.vect}.
5428 For @var{n}=0 no diagnostic information is reported.
5429 If @var{n}=1 the vectorizer reports each loop that got vectorized,
5430 and the total number of loops that got vectorized.
5431 If @var{n}=2 the vectorizer also reports non-vectorized loops that passed
5432 the first analysis phase (vect_analyze_loop_form) - i.e.@: countable,
5433 inner-most, single-bb, single-entry/exit loops.  This is the same verbosity
5434 level that @option{-fdump-tree-vect-stats} uses.
5435 Higher verbosity levels mean either more information dumped for each
5436 reported loop, or same amount of information reported for more loops:
5437 if @var{n}=3, vectorizer cost model information is reported.
5438 If @var{n}=4, alignment related information is added to the reports.
5439 If @var{n}=5, data-references related information (e.g.@: memory dependences,
5440 memory access-patterns) is added to the reports.
5441 If @var{n}=6, the vectorizer reports also non-vectorized inner-most loops
5442 that did not pass the first analysis phase (i.e., may not be countable, or
5443 may have complicated control-flow).
5444 If @var{n}=7, the vectorizer reports also non-vectorized nested loops.
5445 If @var{n}=8, SLP related information is added to the reports.
5446 For @var{n}=9, all the information the vectorizer generates during its
5447 analysis and transformation is reported.  This is the same verbosity level
5448 that @option{-fdump-tree-vect-details} uses.
5449
5450 @item -frandom-seed=@var{string}
5451 @opindex frandom-seed
5452 This option provides a seed that GCC uses when it would otherwise use
5453 random numbers.  It is used to generate certain symbol names
5454 that have to be different in every compiled file.  It is also used to
5455 place unique stamps in coverage data files and the object files that
5456 produce them.  You can use the @option{-frandom-seed} option to produce
5457 reproducibly identical object files.
5458
5459 The @var{string} should be different for every file you compile.
5460
5461 @item -fsched-verbose=@var{n}
5462 @opindex fsched-verbose
5463 On targets that use instruction scheduling, this option controls the
5464 amount of debugging output the scheduler prints.  This information is
5465 written to standard error, unless @option{-fdump-rtl-sched1} or
5466 @option{-fdump-rtl-sched2} is specified, in which case it is output
5467 to the usual dump listing file, @file{.sched1} or @file{.sched2}
5468 respectively.  However for @var{n} greater than nine, the output is
5469 always printed to standard error.
5470
5471 For @var{n} greater than zero, @option{-fsched-verbose} outputs the
5472 same information as @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2}.
5473 For @var{n} greater than one, it also output basic block probabilities,
5474 detailed ready list information and unit/insn info.  For @var{n} greater
5475 than two, it includes RTL at abort point, control-flow and regions info.
5476 And for @var{n} over four, @option{-fsched-verbose} also includes
5477 dependence info.
5478
5479 @item -save-temps
5480 @itemx -save-temps=cwd
5481 @opindex save-temps
5482 Store the usual ``temporary'' intermediate files permanently; place them
5483 in the current directory and name them based on the source file.  Thus,
5484 compiling @file{foo.c} with @samp{-c -save-temps} would produce files
5485 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
5486 preprocessed @file{foo.i} output file even though the compiler now
5487 normally uses an integrated preprocessor.
5488
5489 When used in combination with the @option{-x} command line option,
5490 @option{-save-temps} is sensible enough to avoid over writing an
5491 input source file with the same extension as an intermediate file.
5492 The corresponding intermediate file may be obtained by renaming the
5493 source file before using @option{-save-temps}.
5494
5495 If you invoke GCC in parallel, compiling several different source
5496 files that share a common base name in different subdirectories or the
5497 same source file compiled for multiple output destinations, it is
5498 likely that the different parallel compilers will interfere with each
5499 other, and overwrite the temporary files.  For instance:
5500
5501 @smallexample
5502 gcc -save-temps -o outdir1/foo.o indir1/foo.c&
5503 gcc -save-temps -o outdir2/foo.o indir2/foo.c&
5504 @end smallexample
5505
5506 may result in @file{foo.i} and @file{foo.o} being written to
5507 simultaneously by both compilers.
5508
5509 @item -save-temps=obj
5510 @opindex save-temps=obj
5511 Store the usual ``temporary'' intermediate files permanently.  If the
5512 @option{-o} option is used, the temporary files are based on the
5513 object file.  If the @option{-o} option is not used, the
5514 @option{-save-temps=obj} switch behaves like @option{-save-temps}.
5515
5516 For example:
5517
5518 @smallexample
5519 gcc -save-temps=obj -c foo.c
5520 gcc -save-temps=obj -c bar.c -o dir/xbar.o
5521 gcc -save-temps=obj foobar.c -o dir2/yfoobar
5522 @end smallexample
5523
5524 would create @file{foo.i}, @file{foo.s}, @file{dir/xbar.i},
5525 @file{dir/xbar.s}, @file{dir2/yfoobar.i}, @file{dir2/yfoobar.s}, and
5526 @file{dir2/yfoobar.o}.
5527
5528 @item -time@r{[}=@var{file}@r{]}
5529 @opindex time
5530 Report the CPU time taken by each subprocess in the compilation
5531 sequence.  For C source files, this is the compiler proper and assembler
5532 (plus the linker if linking is done).
5533
5534 Without the specification of an output file, the output looks like this:
5535
5536 @smallexample
5537 # cc1 0.12 0.01
5538 # as 0.00 0.01
5539 @end smallexample
5540
5541 The first number on each line is the ``user time'', that is time spent
5542 executing the program itself.  The second number is ``system time'',
5543 time spent executing operating system routines on behalf of the program.
5544 Both numbers are in seconds.
5545
5546 With the specification of an output file, the output is appended to the
5547 named file, and it looks like this:
5548
5549 @smallexample
5550 0.12 0.01 cc1 @var{options}
5551 0.00 0.01 as @var{options}
5552 @end smallexample
5553
5554 The ``user time'' and the ``system time'' are moved before the program
5555 name, and the options passed to the program are displayed, so that one
5556 can later tell what file was being compiled, and with which options.
5557
5558 @item -fvar-tracking
5559 @opindex fvar-tracking
5560 Run variable tracking pass.  It computes where variables are stored at each
5561 position in code.  Better debugging information is then generated
5562 (if the debugging information format supports this information).
5563
5564 It is enabled by default when compiling with optimization (@option{-Os},
5565 @option{-O}, @option{-O2}, @dots{}), debugging information (@option{-g}) and
5566 the debug info format supports it.
5567
5568 @item -fvar-tracking-assignments
5569 @opindex fvar-tracking-assignments
5570 @opindex fno-var-tracking-assignments
5571 Annotate assignments to user variables early in the compilation and
5572 attempt to carry the annotations over throughout the compilation all the
5573 way to the end, in an attempt to improve debug information while
5574 optimizing.  Use of @option{-gdwarf-4} is recommended along with it.
5575
5576 It can be enabled even if var-tracking is disabled, in which case
5577 annotations will be created and maintained, but discarded at the end.
5578
5579 @item -fvar-tracking-assignments-toggle
5580 @opindex fvar-tracking-assignments-toggle
5581 @opindex fno-var-tracking-assignments-toggle
5582 Toggle @option{-fvar-tracking-assignments}, in the same way that
5583 @option{-gtoggle} toggles @option{-g}.
5584
5585 @item -print-file-name=@var{library}
5586 @opindex print-file-name
5587 Print the full absolute name of the library file @var{library} that
5588 would be used when linking---and don't do anything else.  With this
5589 option, GCC does not compile or link anything; it just prints the
5590 file name.
5591
5592 @item -print-multi-directory
5593 @opindex print-multi-directory
5594 Print the directory name corresponding to the multilib selected by any
5595 other switches present in the command line.  This directory is supposed
5596 to exist in @env{GCC_EXEC_PREFIX}.
5597
5598 @item -print-multi-lib
5599 @opindex print-multi-lib
5600 Print the mapping from multilib directory names to compiler switches
5601 that enable them.  The directory name is separated from the switches by
5602 @samp{;}, and each switch starts with an @samp{@@} instead of the
5603 @samp{-}, without spaces between multiple switches.  This is supposed to
5604 ease shell-processing.
5605
5606 @item -print-multi-os-directory
5607 @opindex print-multi-os-directory
5608 Print the path to OS libraries for the selected
5609 multilib, relative to some @file{lib} subdirectory.  If OS libraries are
5610 present in the @file{lib} subdirectory and no multilibs are used, this is
5611 usually just @file{.}, if OS libraries are present in @file{lib@var{suffix}}
5612 sibling directories this prints e.g.@: @file{../lib64}, @file{../lib} or
5613 @file{../lib32}, or if OS libraries are present in @file{lib/@var{subdir}}
5614 subdirectories it prints e.g.@: @file{amd64}, @file{sparcv9} or @file{ev6}.
5615
5616 @item -print-prog-name=@var{program}
5617 @opindex print-prog-name
5618 Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.
5619
5620 @item -print-libgcc-file-name
5621 @opindex print-libgcc-file-name
5622 Same as @option{-print-file-name=libgcc.a}.
5623
5624 This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
5625 but you do want to link with @file{libgcc.a}.  You can do
5626
5627 @smallexample
5628 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
5629 @end smallexample
5630
5631 @item -print-search-dirs
5632 @opindex print-search-dirs
5633 Print the name of the configured installation directory and a list of
5634 program and library directories @command{gcc} will search---and don't do anything else.
5635
5636 This is useful when @command{gcc} prints the error message
5637 @samp{installation problem, cannot exec cpp0: No such file or directory}.
5638 To resolve this you either need to put @file{cpp0} and the other compiler
5639 components where @command{gcc} expects to find them, or you can set the environment
5640 variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
5641 Don't forget the trailing @samp{/}.
5642 @xref{Environment Variables}.
5643
5644 @item -print-sysroot
5645 @opindex print-sysroot
5646 Print the target sysroot directory that will be used during
5647 compilation.  This is the target sysroot specified either at configure
5648 time or using the @option{--sysroot} option, possibly with an extra
5649 suffix that depends on compilation options.  If no target sysroot is
5650 specified, the option prints nothing.
5651
5652 @item -print-sysroot-headers-suffix
5653 @opindex print-sysroot-headers-suffix
5654 Print the suffix added to the target sysroot when searching for
5655 headers, or give an error if the compiler is not configured with such
5656 a suffix---and don't do anything else.
5657
5658 @item -dumpmachine
5659 @opindex dumpmachine
5660 Print the compiler's target machine (for example,
5661 @samp{i686-pc-linux-gnu})---and don't do anything else.
5662
5663 @item -dumpversion
5664 @opindex dumpversion
5665 Print the compiler version (for example, @samp{3.0})---and don't do
5666 anything else.
5667
5668 @item -dumpspecs
5669 @opindex dumpspecs
5670 Print the compiler's built-in specs---and don't do anything else.  (This
5671 is used when GCC itself is being built.)  @xref{Spec Files}.
5672
5673 @item -feliminate-unused-debug-types
5674 @opindex feliminate-unused-debug-types
5675 Normally, when producing DWARF2 output, GCC will emit debugging
5676 information for all types declared in a compilation
5677 unit, regardless of whether or not they are actually used
5678 in that compilation unit.  Sometimes this is useful, such as
5679 if, in the debugger, you want to cast a value to a type that is
5680 not actually used in your program (but is declared).  More often,
5681 however, this results in a significant amount of wasted space.
5682 With this option, GCC will avoid producing debug symbol output
5683 for types that are nowhere used in the source file being compiled.
5684 @end table
5685
5686 @node Optimize Options
5687 @section Options That Control Optimization
5688 @cindex optimize options
5689 @cindex options, optimization
5690
5691 These options control various sorts of optimizations.
5692
5693 Without any optimization option, the compiler's goal is to reduce the
5694 cost of compilation and to make debugging produce the expected
5695 results.  Statements are independent: if you stop the program with a
5696 breakpoint between statements, you can then assign a new value to any
5697 variable or change the program counter to any other statement in the
5698 function and get exactly the results you would expect from the source
5699 code.
5700
5701 Turning on optimization flags makes the compiler attempt to improve
5702 the performance and/or code size at the expense of compilation time
5703 and possibly the ability to debug the program.
5704
5705 The compiler performs optimization based on the knowledge it has of the
5706 program.  Compiling multiple files at once to a single output file mode allows
5707 the compiler to use information gained from all of the files when compiling
5708 each of them.
5709
5710 Not all optimizations are controlled directly by a flag.  Only
5711 optimizations that have a flag are listed in this section.
5712
5713 Most optimizations are only enabled if an @option{-O} level is set on
5714 the command line.  Otherwise they are disabled, even if individual             
5715 optimization flags are specified.
5716
5717 Depending on the target and how GCC was configured, a slightly different
5718 set of optimizations may be enabled at each @option{-O} level than
5719 those listed here.  You can invoke GCC with @samp{-Q --help=optimizers}
5720 to find out the exact set of optimizations that are enabled at each level.
5721 @xref{Overall Options}, for examples.
5722
5723 @table @gcctabopt
5724 @item -O
5725 @itemx -O1
5726 @opindex O
5727 @opindex O1
5728 Optimize.  Optimizing compilation takes somewhat more time, and a lot
5729 more memory for a large function.
5730
5731 With @option{-O}, the compiler tries to reduce code size and execution
5732 time, without performing any optimizations that take a great deal of
5733 compilation time.
5734
5735 @option{-O} turns on the following optimization flags:
5736 @gccoptlist{
5737 -fauto-inc-dec @gol
5738 -fcprop-registers @gol
5739 -fdce @gol
5740 -fdefer-pop @gol
5741 -fdelayed-branch @gol
5742 -fdse @gol
5743 -fguess-branch-probability @gol
5744 -fif-conversion2 @gol
5745 -fif-conversion @gol
5746 -fipa-pure-const @gol
5747 -fipa-reference @gol
5748 -fmerge-constants
5749 -fsplit-wide-types @gol
5750 -ftree-builtin-call-dce @gol
5751 -ftree-ccp @gol
5752 -ftree-ch @gol
5753 -ftree-copyrename @gol
5754 -ftree-dce @gol
5755 -ftree-dominator-opts @gol
5756 -ftree-dse @gol
5757 -ftree-forwprop @gol
5758 -ftree-fre @gol
5759 -ftree-phiprop @gol
5760 -ftree-sra @gol
5761 -ftree-pta @gol
5762 -ftree-ter @gol
5763 -funit-at-a-time}
5764
5765 @option{-O} also turns on @option{-fomit-frame-pointer} on machines
5766 where doing so does not interfere with debugging.
5767
5768 @item -O2
5769 @opindex O2
5770 Optimize even more.  GCC performs nearly all supported optimizations
5771 that do not involve a space-speed tradeoff.
5772 As compared to @option{-O}, this option increases both compilation time
5773 and the performance of the generated code.
5774
5775 @option{-O2} turns on all optimization flags specified by @option{-O}.  It
5776 also turns on the following optimization flags:
5777 @gccoptlist{-fthread-jumps @gol
5778 -falign-functions  -falign-jumps @gol
5779 -falign-loops  -falign-labels @gol
5780 -fcaller-saves @gol
5781 -fcrossjumping @gol
5782 -fcse-follow-jumps  -fcse-skip-blocks @gol
5783 -fdelete-null-pointer-checks @gol
5784 -fexpensive-optimizations @gol
5785 -fgcse  -fgcse-lm  @gol
5786 -finline-small-functions @gol
5787 -findirect-inlining @gol
5788 -fipa-sra @gol
5789 -foptimize-sibling-calls @gol
5790 -fpeephole2 @gol
5791 -fregmove @gol
5792 -freorder-blocks  -freorder-functions @gol
5793 -frerun-cse-after-loop  @gol
5794 -fsched-interblock  -fsched-spec @gol
5795 -fschedule-insns  -fschedule-insns2 @gol
5796 -fstrict-aliasing -fstrict-overflow @gol
5797 -ftree-switch-conversion @gol
5798 -ftree-pre @gol
5799 -ftree-vrp}
5800
5801 Please note the warning under @option{-fgcse} about
5802 invoking @option{-O2} on programs that use computed gotos.
5803
5804 @item -O3
5805 @opindex O3
5806 Optimize yet more.  @option{-O3} turns on all optimizations specified
5807 by @option{-O2} and also turns on the @option{-finline-functions},
5808 @option{-funswitch-loops}, @option{-fpredictive-commoning},
5809 @option{-fgcse-after-reload} and @option{-ftree-vectorize} options.
5810
5811 @item -O0
5812 @opindex O0
5813 Reduce compilation time and make debugging produce the expected
5814 results.  This is the default.
5815
5816 @item -Os
5817 @opindex Os
5818 Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
5819 do not typically increase code size.  It also performs further
5820 optimizations designed to reduce code size.
5821
5822 @option{-Os} disables the following optimization flags:
5823 @gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
5824 -falign-labels  -freorder-blocks  -freorder-blocks-and-partition @gol
5825 -fprefetch-loop-arrays  -ftree-vect-loop-version}
5826
5827 If you use multiple @option{-O} options, with or without level numbers,
5828 the last such option is the one that is effective.
5829 @end table
5830
5831 Options of the form @option{-f@var{flag}} specify machine-independent
5832 flags.  Most flags have both positive and negative forms; the negative
5833 form of @option{-ffoo} would be @option{-fno-foo}.  In the table
5834 below, only one of the forms is listed---the one you typically will
5835 use.  You can figure out the other form by either removing @samp{no-}
5836 or adding it.
5837
5838 The following options control specific optimizations.  They are either
5839 activated by @option{-O} options or are related to ones that are.  You
5840 can use the following flags in the rare cases when ``fine-tuning'' of
5841 optimizations to be performed is desired.
5842
5843 @table @gcctabopt
5844 @item -fno-default-inline
5845 @opindex fno-default-inline
5846 Do not make member functions inline by default merely because they are
5847 defined inside the class scope (C++ only).  Otherwise, when you specify
5848 @w{@option{-O}}, member functions defined inside class scope are compiled
5849 inline by default; i.e., you don't need to add @samp{inline} in front of
5850 the member function name.
5851
5852 @item -fno-defer-pop
5853 @opindex fno-defer-pop
5854 Always pop the arguments to each function call as soon as that function
5855 returns.  For machines which must pop arguments after a function call,
5856 the compiler normally lets arguments accumulate on the stack for several
5857 function calls and pops them all at once.
5858
5859 Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5860
5861 @item -fforward-propagate
5862 @opindex fforward-propagate
5863 Perform a forward propagation pass on RTL@.  The pass tries to combine two
5864 instructions and checks if the result can be simplified.  If loop unrolling
5865 is active, two passes are performed and the second is scheduled after
5866 loop unrolling.
5867
5868 This option is enabled by default at optimization levels @option{-O},
5869 @option{-O2}, @option{-O3}, @option{-Os}.
5870
5871 @item -fomit-frame-pointer
5872 @opindex fomit-frame-pointer
5873 Don't keep the frame pointer in a register for functions that
5874 don't need one.  This avoids the instructions to save, set up and
5875 restore frame pointers; it also makes an extra register available
5876 in many functions.  @strong{It also makes debugging impossible on
5877 some machines.}
5878
5879 On some machines, such as the VAX, this flag has no effect, because
5880 the standard calling sequence automatically handles the frame pointer
5881 and nothing is saved by pretending it doesn't exist.  The
5882 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
5883 whether a target machine supports this flag.  @xref{Registers,,Register
5884 Usage, gccint, GNU Compiler Collection (GCC) Internals}.
5885
5886 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5887
5888 @item -foptimize-sibling-calls
5889 @opindex foptimize-sibling-calls
5890 Optimize sibling and tail recursive calls.
5891
5892 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5893
5894 @item -fno-inline
5895 @opindex fno-inline
5896 Don't pay attention to the @code{inline} keyword.  Normally this option
5897 is used to keep the compiler from expanding any functions inline.
5898 Note that if you are not optimizing, no functions can be expanded inline.
5899
5900 @item -finline-small-functions
5901 @opindex finline-small-functions
5902 Integrate functions into their callers when their body is smaller than expected
5903 function call code (so overall size of program gets smaller).  The compiler
5904 heuristically decides which functions are simple enough to be worth integrating
5905 in this way.
5906
5907 Enabled at level @option{-O2}.
5908
5909 @item -findirect-inlining
5910 @opindex findirect-inlining
5911 Inline also indirect calls that are discovered to be known at compile
5912 time thanks to previous inlining.  This option has any effect only
5913 when inlining itself is turned on by the @option{-finline-functions}
5914 or @option{-finline-small-functions} options.
5915
5916 Enabled at level @option{-O2}.
5917
5918 @item -finline-functions
5919 @opindex finline-functions
5920 Integrate all simple functions into their callers.  The compiler
5921 heuristically decides which functions are simple enough to be worth
5922 integrating in this way.
5923
5924 If all calls to a given function are integrated, and the function is
5925 declared @code{static}, then the function is normally not output as
5926 assembler code in its own right.
5927
5928 Enabled at level @option{-O3}.
5929
5930 @item -finline-functions-called-once
5931 @opindex finline-functions-called-once
5932 Consider all @code{static} functions called once for inlining into their
5933 caller even if they are not marked @code{inline}.  If a call to a given
5934 function is integrated, then the function is not output as assembler code
5935 in its own right.
5936
5937 Enabled at levels @option{-O1}, @option{-O2}, @option{-O3} and @option{-Os}.
5938
5939 @item -fearly-inlining
5940 @opindex fearly-inlining
5941 Inline functions marked by @code{always_inline} and functions whose body seems
5942 smaller than the function call overhead early before doing
5943 @option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
5944 makes profiling significantly cheaper and usually inlining faster on programs
5945 having large chains of nested wrapper functions.
5946
5947 Enabled by default.
5948
5949 @item -fipa-sra
5950 @opindex fipa-sra
5951 Perform interprocedural scalar replacement of aggregates, removal of
5952 unused parameters and replacement of parameters passed by reference
5953 by parameters passed by value.
5954
5955 Enabled at levels @option{-O2}, @option{-O3} and @option{-Os}.
5956
5957 @item -finline-limit=@var{n}
5958 @opindex finline-limit
5959 By default, GCC limits the size of functions that can be inlined.  This flag
5960 allows coarse control of this limit.  @var{n} is the size of functions that
5961 can be inlined in number of pseudo instructions.
5962
5963 Inlining is actually controlled by a number of parameters, which may be
5964 specified individually by using @option{--param @var{name}=@var{value}}.
5965 The @option{-finline-limit=@var{n}} option sets some of these parameters
5966 as follows:
5967
5968 @table @gcctabopt
5969 @item max-inline-insns-single
5970 is set to @var{n}/2.
5971 @item max-inline-insns-auto
5972 is set to @var{n}/2.
5973 @end table
5974
5975 See below for a documentation of the individual
5976 parameters controlling inlining and for the defaults of these parameters.
5977
5978 @emph{Note:} there may be no value to @option{-finline-limit} that results
5979 in default behavior.
5980
5981 @emph{Note:} pseudo instruction represents, in this particular context, an
5982 abstract measurement of function's size.  In no way does it represent a count
5983 of assembly instructions and as such its exact meaning might change from one
5984 release to an another.
5985
5986 @item -fkeep-inline-functions
5987 @opindex fkeep-inline-functions
5988 In C, emit @code{static} functions that are declared @code{inline}
5989 into the object file, even if the function has been inlined into all
5990 of its callers.  This switch does not affect functions using the
5991 @code{extern inline} extension in GNU C90@.  In C++, emit any and all
5992 inline functions into the object file.
5993
5994 @item -fkeep-static-consts
5995 @opindex fkeep-static-consts
5996 Emit variables declared @code{static const} when optimization isn't turned
5997 on, even if the variables aren't referenced.
5998
5999 GCC enables this option by default.  If you want to force the compiler to
6000 check if the variable was referenced, regardless of whether or not
6001 optimization is turned on, use the @option{-fno-keep-static-consts} option.
6002
6003 @item -fmerge-constants
6004 @opindex fmerge-constants
6005 Attempt to merge identical constants (string constants and floating point
6006 constants) across compilation units.
6007
6008 This option is the default for optimized compilation if the assembler and
6009 linker support it.  Use @option{-fno-merge-constants} to inhibit this
6010 behavior.
6011
6012 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6013
6014 @item -fmerge-all-constants
6015 @opindex fmerge-all-constants
6016 Attempt to merge identical constants and identical variables.
6017
6018 This option implies @option{-fmerge-constants}.  In addition to
6019 @option{-fmerge-constants} this considers e.g.@: even constant initialized
6020 arrays or initialized constant variables with integral or floating point
6021 types.  Languages like C or C++ require each variable, including multiple
6022 instances of the same variable in recursive calls, to have distinct locations,
6023 so using this option will result in non-conforming
6024 behavior.
6025
6026 @item -fmodulo-sched
6027 @opindex fmodulo-sched
6028 Perform swing modulo scheduling immediately before the first scheduling
6029 pass.  This pass looks at innermost loops and reorders their
6030 instructions by overlapping different iterations.
6031
6032 @item -fmodulo-sched-allow-regmoves
6033 @opindex fmodulo-sched-allow-regmoves
6034 Perform more aggressive SMS based modulo scheduling with register moves
6035 allowed.  By setting this flag certain anti-dependences edges will be
6036 deleted which will trigger the generation of reg-moves based on the
6037 life-range analysis.  This option is effective only with
6038 @option{-fmodulo-sched} enabled.
6039
6040 @item -fno-branch-count-reg
6041 @opindex fno-branch-count-reg
6042 Do not use ``decrement and branch'' instructions on a count register,
6043 but instead generate a sequence of instructions that decrement a
6044 register, compare it against zero, then branch based upon the result.
6045 This option is only meaningful on architectures that support such
6046 instructions, which include x86, PowerPC, IA-64 and S/390.
6047
6048 The default is @option{-fbranch-count-reg}.
6049
6050 @item -fno-function-cse
6051 @opindex fno-function-cse
6052 Do not put function addresses in registers; make each instruction that
6053 calls a constant function contain the function's address explicitly.
6054
6055 This option results in less efficient code, but some strange hacks
6056 that alter the assembler output may be confused by the optimizations
6057 performed when this option is not used.
6058
6059 The default is @option{-ffunction-cse}
6060
6061 @item -fno-zero-initialized-in-bss
6062 @opindex fno-zero-initialized-in-bss
6063 If the target supports a BSS section, GCC by default puts variables that
6064 are initialized to zero into BSS@.  This can save space in the resulting
6065 code.
6066
6067 This option turns off this behavior because some programs explicitly
6068 rely on variables going to the data section.  E.g., so that the
6069 resulting executable can find the beginning of that section and/or make
6070 assumptions based on that.
6071
6072 The default is @option{-fzero-initialized-in-bss}.
6073
6074 @item -fmudflap -fmudflapth -fmudflapir
6075 @opindex fmudflap
6076 @opindex fmudflapth
6077 @opindex fmudflapir
6078 @cindex bounds checking
6079 @cindex mudflap
6080 For front-ends that support it (C and C++), instrument all risky
6081 pointer/array dereferencing operations, some standard library
6082 string/heap functions, and some other associated constructs with
6083 range/validity tests.  Modules so instrumented should be immune to
6084 buffer overflows, invalid heap use, and some other classes of C/C++
6085 programming errors.  The instrumentation relies on a separate runtime
6086 library (@file{libmudflap}), which will be linked into a program if
6087 @option{-fmudflap} is given at link time.  Run-time behavior of the
6088 instrumented program is controlled by the @env{MUDFLAP_OPTIONS}
6089 environment variable.  See @code{env MUDFLAP_OPTIONS=-help a.out}
6090 for its options.
6091
6092 Use @option{-fmudflapth} instead of @option{-fmudflap} to compile and to
6093 link if your program is multi-threaded.  Use @option{-fmudflapir}, in
6094 addition to @option{-fmudflap} or @option{-fmudflapth}, if
6095 instrumentation should ignore pointer reads.  This produces less
6096 instrumentation (and therefore faster execution) and still provides
6097 some protection against outright memory corrupting writes, but allows
6098 erroneously read data to propagate within a program.
6099
6100 @item -fthread-jumps
6101 @opindex fthread-jumps
6102 Perform optimizations where we check to see if a jump branches to a
6103 location where another comparison subsumed by the first is found.  If
6104 so, the first branch is redirected to either the destination of the
6105 second branch or a point immediately following it, depending on whether
6106 the condition is known to be true or false.
6107
6108 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6109
6110 @item -fsplit-wide-types
6111 @opindex fsplit-wide-types
6112 When using a type that occupies multiple registers, such as @code{long
6113 long} on a 32-bit system, split the registers apart and allocate them
6114 independently.  This normally generates better code for those types,
6115 but may make debugging more difficult.
6116
6117 Enabled at levels @option{-O}, @option{-O2}, @option{-O3},
6118 @option{-Os}.
6119
6120 @item -fcse-follow-jumps
6121 @opindex fcse-follow-jumps
6122 In common subexpression elimination (CSE), scan through jump instructions
6123 when the target of the jump is not reached by any other path.  For
6124 example, when CSE encounters an @code{if} statement with an
6125 @code{else} clause, CSE will follow the jump when the condition
6126 tested is false.
6127
6128 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6129
6130 @item -fcse-skip-blocks
6131 @opindex fcse-skip-blocks
6132 This is similar to @option{-fcse-follow-jumps}, but causes CSE to
6133 follow jumps which conditionally skip over blocks.  When CSE
6134 encounters a simple @code{if} statement with no else clause,
6135 @option{-fcse-skip-blocks} causes CSE to follow the jump around the
6136 body of the @code{if}.
6137
6138 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6139
6140 @item -frerun-cse-after-loop
6141 @opindex frerun-cse-after-loop
6142 Re-run common subexpression elimination after loop optimizations has been
6143 performed.
6144
6145 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6146
6147 @item -fgcse
6148 @opindex fgcse
6149 Perform a global common subexpression elimination pass.
6150 This pass also performs global constant and copy propagation.
6151
6152 @emph{Note:} When compiling a program using computed gotos, a GCC
6153 extension, you may get better runtime performance if you disable
6154 the global common subexpression elimination pass by adding
6155 @option{-fno-gcse} to the command line.
6156
6157 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6158
6159 @item -fgcse-lm
6160 @opindex fgcse-lm
6161 When @option{-fgcse-lm} is enabled, global common subexpression elimination will
6162 attempt to move loads which are only killed by stores into themselves.  This
6163 allows a loop containing a load/store sequence to be changed to a load outside
6164 the loop, and a copy/store within the loop.
6165
6166 Enabled by default when gcse is enabled.
6167
6168 @item -fgcse-sm
6169 @opindex fgcse-sm
6170 When @option{-fgcse-sm} is enabled, a store motion pass is run after
6171 global common subexpression elimination.  This pass will attempt to move
6172 stores out of loops.  When used in conjunction with @option{-fgcse-lm},
6173 loops containing a load/store sequence can be changed to a load before
6174 the loop and a store after the loop.
6175
6176 Not enabled at any optimization level.
6177
6178 @item -fgcse-las
6179 @opindex fgcse-las
6180 When @option{-fgcse-las} is enabled, the global common subexpression
6181 elimination pass eliminates redundant loads that come after stores to the
6182 same memory location (both partial and full redundancies).
6183
6184 Not enabled at any optimization level.
6185
6186 @item -fgcse-after-reload
6187 @opindex fgcse-after-reload
6188 When @option{-fgcse-after-reload} is enabled, a redundant load elimination
6189 pass is performed after reload.  The purpose of this pass is to cleanup
6190 redundant spilling.
6191
6192 @item -funsafe-loop-optimizations
6193 @opindex funsafe-loop-optimizations
6194 If given, the loop optimizer will assume that loop indices do not
6195 overflow, and that the loops with nontrivial exit condition are not
6196 infinite.  This enables a wider range of loop optimizations even if
6197 the loop optimizer itself cannot prove that these assumptions are valid.
6198 Using @option{-Wunsafe-loop-optimizations}, the compiler will warn you
6199 if it finds this kind of loop.
6200
6201 @item -fcrossjumping
6202 @opindex fcrossjumping
6203 Perform cross-jumping transformation.  This transformation unifies equivalent code and save code size.  The
6204 resulting code may or may not perform better than without cross-jumping.
6205
6206 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6207
6208 @item -fauto-inc-dec
6209 @opindex fauto-inc-dec
6210 Combine increments or decrements of addresses with memory accesses.
6211 This pass is always skipped on architectures that do not have
6212 instructions to support this.  Enabled by default at @option{-O} and
6213 higher on architectures that support this.
6214
6215 @item -fdce
6216 @opindex fdce
6217 Perform dead code elimination (DCE) on RTL@.
6218 Enabled by default at @option{-O} and higher.
6219
6220 @item -fdse
6221 @opindex fdse
6222 Perform dead store elimination (DSE) on RTL@.
6223 Enabled by default at @option{-O} and higher.
6224
6225 @item -fif-conversion
6226 @opindex fif-conversion
6227 Attempt to transform conditional jumps into branch-less equivalents.  This
6228 include use of conditional moves, min, max, set flags and abs instructions, and
6229 some tricks doable by standard arithmetics.  The use of conditional execution
6230 on chips where it is available is controlled by @code{if-conversion2}.
6231
6232 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6233
6234 @item -fif-conversion2
6235 @opindex fif-conversion2
6236 Use conditional execution (where available) to transform conditional jumps into
6237 branch-less equivalents.
6238
6239 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6240
6241 @item -fdelete-null-pointer-checks
6242 @opindex fdelete-null-pointer-checks
6243 Assume that programs cannot safely dereference null pointers, and that
6244 no code or data element resides there.  This enables simple constant
6245 folding optimizations at all optimization levels.  In addition, other
6246 optimization passes in GCC use this flag to control global dataflow
6247 analyses that eliminate useless checks for null pointers; these assume
6248 that if a pointer is checked after it has already been dereferenced,
6249 it cannot be null.
6250
6251 Note however that in some environments this assumption is not true.
6252 Use @option{-fno-delete-null-pointer-checks} to disable this optimization
6253 for programs which depend on that behavior.
6254
6255 Some targets, especially embedded ones, disable this option at all levels.
6256 Otherwise it is enabled at all levels: @option{-O0}, @option{-O1},
6257 @option{-O2}, @option{-O3}, @option{-Os}.  Passes that use the information
6258 are enabled independently at different optimization levels.
6259
6260 @item -fexpensive-optimizations
6261 @opindex fexpensive-optimizations
6262 Perform a number of minor optimizations that are relatively expensive.
6263
6264 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6265
6266 @item -foptimize-register-move
6267 @itemx -fregmove
6268 @opindex foptimize-register-move
6269 @opindex fregmove
6270 Attempt to reassign register numbers in move instructions and as
6271 operands of other simple instructions in order to maximize the amount of
6272 register tying.  This is especially helpful on machines with two-operand
6273 instructions.
6274
6275 Note @option{-fregmove} and @option{-foptimize-register-move} are the same
6276 optimization.
6277
6278 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6279
6280 @item -fira-algorithm=@var{algorithm}
6281 Use specified coloring algorithm for the integrated register
6282 allocator.  The @var{algorithm} argument should be @code{priority} or
6283 @code{CB}.  The first algorithm specifies Chow's priority coloring,
6284 the second one specifies Chaitin-Briggs coloring.  The second
6285 algorithm can be unimplemented for some architectures.  If it is
6286 implemented, it is the default because Chaitin-Briggs coloring as a
6287 rule generates a better code.
6288
6289 @item -fira-region=@var{region}
6290 Use specified regions for the integrated register allocator.  The
6291 @var{region} argument should be one of @code{all}, @code{mixed}, or
6292 @code{one}.  The first value means using all loops as register
6293 allocation regions, the second value which is the default means using
6294 all loops except for loops with small register pressure as the
6295 regions, and third one means using all function as a single region.
6296 The first value can give best result for machines with small size and
6297 irregular register set, the third one results in faster and generates
6298 decent code and the smallest size code, and the default value usually
6299 give the best results in most cases and for most architectures.
6300
6301 @item -fira-coalesce
6302 @opindex fira-coalesce
6303 Do optimistic register coalescing.  This option might be profitable for
6304 architectures with big regular register files.
6305
6306 @item -fira-loop-pressure
6307 @opindex fira-loop-pressure
6308 Use IRA to evaluate register pressure in loops for decision to move
6309 loop invariants.  Usage of this option usually results in generation
6310 of faster and smaller code on machines with big register files (>= 32
6311 registers) but it can slow compiler down.
6312
6313 This option is enabled at level @option{-O3} for some targets.
6314
6315 @item -fno-ira-share-save-slots
6316 @opindex fno-ira-share-save-slots
6317 Switch off sharing stack slots used for saving call used hard
6318 registers living through a call.  Each hard register will get a
6319 separate stack slot and as a result function stack frame will be
6320 bigger.
6321
6322 @item -fno-ira-share-spill-slots
6323 @opindex fno-ira-share-spill-slots
6324 Switch off sharing stack slots allocated for pseudo-registers.  Each
6325 pseudo-register which did not get a hard register will get a separate
6326 stack slot and as a result function stack frame will be bigger.
6327
6328 @item -fira-verbose=@var{n}
6329 @opindex fira-verbose
6330 Set up how verbose dump file for the integrated register allocator
6331 will be.  Default value is 5.  If the value is greater or equal to 10,
6332 the dump file will be stderr as if the value were @var{n} minus 10.
6333
6334 @item -fdelayed-branch
6335 @opindex fdelayed-branch
6336 If supported for the target machine, attempt to reorder instructions
6337 to exploit instruction slots available after delayed branch
6338 instructions.
6339
6340 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6341
6342 @item -fschedule-insns
6343 @opindex fschedule-insns
6344 If supported for the target machine, attempt to reorder instructions to
6345 eliminate execution stalls due to required data being unavailable.  This
6346 helps machines that have slow floating point or memory load instructions
6347 by allowing other instructions to be issued until the result of the load
6348 or floating point instruction is required.
6349
6350 Enabled at levels @option{-O2}, @option{-O3}.
6351
6352 @item -fschedule-insns2
6353 @opindex fschedule-insns2
6354 Similar to @option{-fschedule-insns}, but requests an additional pass of
6355 instruction scheduling after register allocation has been done.  This is
6356 especially useful on machines with a relatively small number of
6357 registers and where memory load instructions take more than one cycle.
6358
6359 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6360
6361 @item -fno-sched-interblock
6362 @opindex fno-sched-interblock
6363 Don't schedule instructions across basic blocks.  This is normally
6364 enabled by default when scheduling before register allocation, i.e.@:
6365 with @option{-fschedule-insns} or at @option{-O2} or higher.
6366
6367 @item -fno-sched-spec
6368 @opindex fno-sched-spec
6369 Don't allow speculative motion of non-load instructions.  This is normally
6370 enabled by default when scheduling before register allocation, i.e.@:
6371 with @option{-fschedule-insns} or at @option{-O2} or higher.
6372
6373 @item -fsched-pressure
6374 @opindex fsched-pressure
6375 Enable register pressure sensitive insn scheduling before the register
6376 allocation.  This only makes sense when scheduling before register
6377 allocation is enabled, i.e.@: with @option{-fschedule-insns} or at
6378 @option{-O2} or higher.  Usage of this option can improve the
6379 generated code and decrease its size by preventing register pressure
6380 increase above the number of available hard registers and as a
6381 consequence register spills in the register allocation.
6382
6383 @item -fsched-spec-load
6384 @opindex fsched-spec-load
6385 Allow speculative motion of some load instructions.  This only makes
6386 sense when scheduling before register allocation, i.e.@: with
6387 @option{-fschedule-insns} or at @option{-O2} or higher.
6388
6389 @item -fsched-spec-load-dangerous
6390 @opindex fsched-spec-load-dangerous
6391 Allow speculative motion of more load instructions.  This only makes
6392 sense when scheduling before register allocation, i.e.@: with
6393 @option{-fschedule-insns} or at @option{-O2} or higher.
6394
6395 @item -fsched-stalled-insns
6396 @itemx -fsched-stalled-insns=@var{n}
6397 @opindex fsched-stalled-insns
6398 Define how many insns (if any) can be moved prematurely from the queue
6399 of stalled insns into the ready list, during the second scheduling pass.
6400 @option{-fno-sched-stalled-insns} means that no insns will be moved
6401 prematurely, @option{-fsched-stalled-insns=0} means there is no limit
6402 on how many queued insns can be moved prematurely.
6403 @option{-fsched-stalled-insns} without a value is equivalent to
6404 @option{-fsched-stalled-insns=1}.
6405
6406 @item -fsched-stalled-insns-dep
6407 @itemx -fsched-stalled-insns-dep=@var{n}
6408 @opindex fsched-stalled-insns-dep
6409 Define how many insn groups (cycles) will be examined for a dependency
6410 on a stalled insn that is candidate for premature removal from the queue
6411 of stalled insns.  This has an effect only during the second scheduling pass,
6412 and only if @option{-fsched-stalled-insns} is used.
6413 @option{-fno-sched-stalled-insns-dep} is equivalent to
6414 @option{-fsched-stalled-insns-dep=0}.
6415 @option{-fsched-stalled-insns-dep} without a value is equivalent to
6416 @option{-fsched-stalled-insns-dep=1}.
6417
6418 @item -fsched2-use-superblocks
6419 @opindex fsched2-use-superblocks
6420 When scheduling after register allocation, do use superblock scheduling
6421 algorithm.  Superblock scheduling allows motion across basic block boundaries
6422 resulting on faster schedules.  This option is experimental, as not all machine
6423 descriptions used by GCC model the CPU closely enough to avoid unreliable
6424 results from the algorithm.
6425
6426 This only makes sense when scheduling after register allocation, i.e.@: with
6427 @option{-fschedule-insns2} or at @option{-O2} or higher.
6428
6429 @item -fsched-group-heuristic
6430 @opindex fsched-group-heuristic
6431 Enable the group heuristic in the scheduler.  This heuristic favors 
6432 the instruction that belongs to a schedule group.  This is enabled 
6433 by default when scheduling is enabled, i.e.@: with @option{-fschedule-insns} 
6434 or @option{-fschedule-insns2} or at @option{-O2} or higher.
6435
6436 @item -fsched-critical-path-heuristic
6437 @opindex fsched-critical-path-heuristic
6438 Enable the critical-path heuristic in the scheduler.  This heuristic favors 
6439 instructions on the critical path.  This is enabled by default when 
6440 scheduling is enabled, i.e.@: with @option{-fschedule-insns} 
6441 or @option{-fschedule-insns2} or at @option{-O2} or higher.
6442
6443 @item -fsched-spec-insn-heuristic
6444 @opindex fsched-spec-insn-heuristic
6445 Enable the speculative instruction heuristic in the scheduler.  This 
6446 heuristic favors speculative instructions with greater dependency weakness.  
6447 This is enabled by default when scheduling is enabled, i.e.@: 
6448 with @option{-fschedule-insns} or @option{-fschedule-insns2} 
6449 or at @option{-O2} or higher.
6450
6451 @item -fsched-rank-heuristic
6452 @opindex fsched-rank-heuristic
6453 Enable the rank heuristic in the scheduler.  This heuristic favors 
6454 the instruction belonging to a basic block with greater size or frequency.  
6455 This is enabled by default when scheduling is enabled, i.e.@: 
6456 with @option{-fschedule-insns} or @option{-fschedule-insns2} or 
6457 at @option{-O2} or higher.
6458
6459 @item -fsched-last-insn-heuristic
6460 @opindex fsched-last-insn-heuristic
6461 Enable the last-instruction heuristic in the scheduler.  This heuristic 
6462 favors the instruction that is less dependent on the last instruction
6463 scheduled.  This is enabled by default when scheduling is enabled, 
6464 i.e.@: with @option{-fschedule-insns} or @option{-fschedule-insns2} or 
6465 at @option{-O2} or higher.
6466
6467 @item -fsched-dep-count-heuristic
6468 @opindex fsched-dep-count-heuristic
6469 Enable the dependent-count heuristic in the scheduler.  This heuristic 
6470 favors the instruction that has more instructions depending on it.  
6471 This is enabled by default when scheduling is enabled, i.e.@: 
6472 with @option{-fschedule-insns} or @option{-fschedule-insns2} or 
6473 at @option{-O2} or higher.
6474
6475 @item -freschedule-modulo-scheduled-loops
6476 @opindex freschedule-modulo-scheduled-loops
6477 The modulo scheduling comes before the traditional scheduling, if a loop
6478 was modulo scheduled we may want to prevent the later scheduling passes
6479 from changing its schedule, we use this option to control that.
6480
6481 @item -fselective-scheduling
6482 @opindex fselective-scheduling
6483 Schedule instructions using selective scheduling algorithm.  Selective
6484 scheduling runs instead of the first scheduler pass.
6485
6486 @item -fselective-scheduling2
6487 @opindex fselective-scheduling2
6488 Schedule instructions using selective scheduling algorithm.  Selective
6489 scheduling runs instead of the second scheduler pass.
6490
6491 @item -fsel-sched-pipelining
6492 @opindex fsel-sched-pipelining
6493 Enable software pipelining of innermost loops during selective scheduling.
6494 This option has no effect until one of @option{-fselective-scheduling} or
6495 @option{-fselective-scheduling2} is turned on.
6496
6497 @item -fsel-sched-pipelining-outer-loops
6498 @opindex fsel-sched-pipelining-outer-loops
6499 When pipelining loops during selective scheduling, also pipeline outer loops.
6500 This option has no effect until @option{-fsel-sched-pipelining} is turned on.
6501
6502 @item -fcaller-saves
6503 @opindex fcaller-saves
6504 Enable values to be allocated in registers that will be clobbered by
6505 function calls, by emitting extra instructions to save and restore the
6506 registers around such calls.  Such allocation is done only when it
6507 seems to result in better code than would otherwise be produced.
6508
6509 This option is always enabled by default on certain machines, usually
6510 those which have no call-preserved registers to use instead.
6511
6512 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6513
6514 @item -fconserve-stack
6515 @opindex fconserve-stack
6516 Attempt to minimize stack usage.  The compiler will attempt to use less
6517 stack space, even if that makes the program slower.  This option
6518 implies setting the @option{large-stack-frame} parameter to 100
6519 and the @option{large-stack-frame-growth} parameter to 400.
6520
6521 @item -ftree-reassoc
6522 @opindex ftree-reassoc
6523 Perform reassociation on trees.  This flag is enabled by default
6524 at @option{-O} and higher.
6525
6526 @item -ftree-pre
6527 @opindex ftree-pre
6528 Perform partial redundancy elimination (PRE) on trees.  This flag is
6529 enabled by default at @option{-O2} and @option{-O3}.
6530
6531 @item -ftree-forwprop
6532 @opindex ftree-forwprop
6533 Perform forward propagation on trees.  This flag is enabled by default
6534 at @option{-O} and higher.
6535
6536 @item -ftree-fre
6537 @opindex ftree-fre
6538 Perform full redundancy elimination (FRE) on trees.  The difference
6539 between FRE and PRE is that FRE only considers expressions
6540 that are computed on all paths leading to the redundant computation.
6541 This analysis is faster than PRE, though it exposes fewer redundancies.
6542 This flag is enabled by default at @option{-O} and higher.
6543
6544 @item -ftree-phiprop
6545 @opindex ftree-phiprop
6546 Perform hoisting of loads from conditional pointers on trees.  This
6547 pass is enabled by default at @option{-O} and higher.
6548
6549 @item -ftree-copy-prop
6550 @opindex ftree-copy-prop
6551 Perform copy propagation on trees.  This pass eliminates unnecessary
6552 copy operations.  This flag is enabled by default at @option{-O} and
6553 higher.
6554
6555 @item -fipa-pure-const
6556 @opindex fipa-pure-const
6557 Discover which functions are pure or constant.
6558 Enabled by default at @option{-O} and higher.
6559
6560 @item -fipa-reference
6561 @opindex fipa-reference
6562 Discover which static variables do not escape cannot escape the
6563 compilation unit.
6564 Enabled by default at @option{-O} and higher.
6565
6566 @item -fipa-struct-reorg
6567 @opindex fipa-struct-reorg
6568 Perform structure reorganization optimization, that change C-like structures
6569 layout in order to better utilize spatial locality.  This transformation is
6570 affective for programs containing arrays of structures.  Available in two
6571 compilation modes: profile-based (enabled with @option{-fprofile-generate})
6572 or static (which uses built-in heuristics).  Require @option{-fipa-type-escape}
6573 to provide the safety of this transformation.  It works only in whole program
6574 mode, so it requires @option{-fwhole-program} and @option{-combine} to be
6575 enabled.  Structures considered @samp{cold} by this transformation are not
6576 affected (see @option{--param struct-reorg-cold-struct-ratio=@var{value}}).
6577
6578 With this flag, the program debug info reflects a new structure layout.
6579
6580 @item -fipa-pta
6581 @opindex fipa-pta
6582 Perform interprocedural pointer analysis.  This option is experimental
6583 and does not affect generated code.
6584
6585 @item -fipa-cp
6586 @opindex fipa-cp
6587 Perform interprocedural constant propagation.
6588 This optimization analyzes the program to determine when values passed
6589 to functions are constants and then optimizes accordingly.
6590 This optimization can substantially increase performance
6591 if the application has constants passed to functions.
6592 This flag is enabled by default at @option{-O2}, @option{-Os} and @option{-O3}.
6593
6594 @item -fipa-cp-clone
6595 @opindex fipa-cp-clone
6596 Perform function cloning to make interprocedural constant propagation stronger.
6597 When enabled, interprocedural constant propagation will perform function cloning
6598 when externally visible function can be called with constant arguments.
6599 Because this optimization can create multiple copies of functions,
6600 it may significantly increase code size
6601 (see @option{--param ipcp-unit-growth=@var{value}}).
6602 This flag is enabled by default at @option{-O3}.
6603
6604 @item -fipa-matrix-reorg
6605 @opindex fipa-matrix-reorg
6606 Perform matrix flattening and transposing.
6607 Matrix flattening tries to replace an @math{m}-dimensional matrix
6608 with its equivalent @math{n}-dimensional matrix, where @math{n < m}.
6609 This reduces the level of indirection needed for accessing the elements
6610 of the matrix. The second optimization is matrix transposing that
6611 attempts to change the order of the matrix's dimensions in order to
6612 improve cache locality.
6613 Both optimizations need the @option{-fwhole-program} flag.
6614 Transposing is enabled only if profiling information is available.
6615
6616 @item -ftree-sink
6617 @opindex ftree-sink
6618 Perform forward store motion  on trees.  This flag is
6619 enabled by default at @option{-O} and higher.
6620
6621 @item -ftree-ccp
6622 @opindex ftree-ccp
6623 Perform sparse conditional constant propagation (CCP) on trees.  This
6624 pass only operates on local scalar variables and is enabled by default
6625 at @option{-O} and higher.
6626
6627 @item -ftree-switch-conversion
6628 Perform conversion of simple initializations in a switch to
6629 initializations from a scalar array.  This flag is enabled by default
6630 at @option{-O2} and higher.
6631
6632 @item -ftree-dce
6633 @opindex ftree-dce
6634 Perform dead code elimination (DCE) on trees.  This flag is enabled by
6635 default at @option{-O} and higher.
6636
6637 @item -ftree-builtin-call-dce
6638 @opindex ftree-builtin-call-dce
6639 Perform conditional dead code elimination (DCE) for calls to builtin functions
6640 that may set @code{errno} but are otherwise side-effect free.  This flag is
6641 enabled by default at @option{-O2} and higher if @option{-Os} is not also
6642 specified.
6643
6644 @item -ftree-dominator-opts
6645 @opindex ftree-dominator-opts
6646 Perform a variety of simple scalar cleanups (constant/copy
6647 propagation, redundancy elimination, range propagation and expression
6648 simplification) based on a dominator tree traversal.  This also
6649 performs jump threading (to reduce jumps to jumps). This flag is
6650 enabled by default at @option{-O} and higher.
6651
6652 @item -ftree-dse
6653 @opindex ftree-dse
6654 Perform dead store elimination (DSE) on trees.  A dead store is a store into
6655 a memory location which will later be overwritten by another store without
6656 any intervening loads.  In this case the earlier store can be deleted.  This
6657 flag is enabled by default at @option{-O} and higher.
6658
6659 @item -ftree-ch
6660 @opindex ftree-ch
6661 Perform loop header copying on trees.  This is beneficial since it increases
6662 effectiveness of code motion optimizations.  It also saves one jump.  This flag
6663 is enabled by default at @option{-O} and higher.  It is not enabled
6664 for @option{-Os}, since it usually increases code size.
6665
6666 @item -ftree-loop-optimize
6667 @opindex ftree-loop-optimize
6668 Perform loop optimizations on trees.  This flag is enabled by default
6669 at @option{-O} and higher.
6670
6671 @item -ftree-loop-linear
6672 @opindex ftree-loop-linear
6673 Perform linear loop transformations on tree.  This flag can improve cache
6674 performance and allow further loop optimizations to take place.
6675
6676 @item -floop-interchange
6677 Perform loop interchange transformations on loops.  Interchanging two
6678 nested loops switches the inner and outer loops.  For example, given a
6679 loop like:
6680 @smallexample
6681 DO J = 1, M
6682   DO I = 1, N
6683     A(J, I) = A(J, I) * C
6684   ENDDO
6685 ENDDO
6686 @end smallexample
6687 loop interchange will transform the loop as if the user had written:
6688 @smallexample
6689 DO I = 1, N
6690   DO J = 1, M
6691     A(J, I) = A(J, I) * C
6692   ENDDO
6693 ENDDO
6694 @end smallexample
6695 which can be beneficial when @code{N} is larger than the caches,
6696 because in Fortran, the elements of an array are stored in memory
6697 contiguously by column, and the original loop iterates over rows,
6698 potentially creating at each access a cache miss.  This optimization
6699 applies to all the languages supported by GCC and is not limited to
6700 Fortran.  To use this code transformation, GCC has to be configured
6701 with @option{--with-ppl} and @option{--with-cloog} to enable the
6702 Graphite loop transformation infrastructure.
6703
6704 @item -floop-strip-mine
6705 Perform loop strip mining transformations on loops.  Strip mining
6706 splits a loop into two nested loops.  The outer loop has strides
6707 equal to the strip size and the inner loop has strides of the
6708 original loop within a strip.  The strip length can be changed
6709 using the @option{loop-block-tile-size} parameter.  For example,
6710 given a loop like:
6711 @smallexample
6712 DO I = 1, N
6713   A(I) = A(I) + C
6714 ENDDO
6715 @end smallexample
6716 loop strip mining will transform the loop as if the user had written:
6717 @smallexample
6718 DO II = 1, N, 51
6719   DO I = II, min (II + 50, N)
6720     A(I) = A(I) + C
6721   ENDDO
6722 ENDDO
6723 @end smallexample
6724 This optimization applies to all the languages supported by GCC and is
6725 not limited to Fortran.  To use this code transformation, GCC has to
6726 be configured with @option{--with-ppl} and @option{--with-cloog} to
6727 enable the Graphite loop transformation infrastructure.
6728
6729 @item -floop-block
6730 Perform loop blocking transformations on loops.  Blocking strip mines
6731 each loop in the loop nest such that the memory accesses of the
6732 element loops fit inside caches.  The strip length can be changed
6733 using the @option{loop-block-tile-size} parameter.  For example, given
6734 a loop like:
6735 @smallexample
6736 DO I = 1, N
6737   DO J = 1, M
6738     A(J, I) = B(I) + C(J)
6739   ENDDO
6740 ENDDO
6741 @end smallexample
6742 loop blocking will transform the loop as if the user had written:
6743 @smallexample
6744 DO II = 1, N, 51
6745   DO JJ = 1, M, 51
6746     DO I = II, min (II + 50, N)
6747       DO J = JJ, min (JJ + 50, M)
6748         A(J, I) = B(I) + C(J)
6749       ENDDO
6750     ENDDO
6751   ENDDO
6752 ENDDO
6753 @end smallexample
6754 which can be beneficial when @code{M} is larger than the caches,
6755 because the innermost loop will iterate over a smaller amount of data
6756 that can be kept in the caches.  This optimization applies to all the
6757 languages supported by GCC and is not limited to Fortran.  To use this
6758 code transformation, GCC has to be configured with @option{--with-ppl}
6759 and @option{--with-cloog} to enable the Graphite loop transformation
6760 infrastructure.
6761
6762 @item -fgraphite-identity
6763 @opindex fgraphite-identity
6764 Enable the identity transformation for graphite.  For every SCoP we generate
6765 the polyhedral representation and transform it back to gimple.  Using
6766 @option{-fgraphite-identity} we can check the costs or benefits of the
6767 GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some minimal optimizations
6768 are also performed by the code generator CLooG, like index splitting and
6769 dead code elimination in loops.
6770
6771 @item -floop-parallelize-all
6772 Use the Graphite data dependence analysis to identify loops that can
6773 be parallelized.  Parallelize all the loops that can be analyzed to
6774 not contain loop carried dependences without checking that it is
6775 profitable to parallelize the loops.
6776
6777 @item -fcheck-data-deps
6778 @opindex fcheck-data-deps
6779 Compare the results of several data dependence analyzers.  This option
6780 is used for debugging the data dependence analyzers.
6781
6782 @item -ftree-loop-distribution
6783 Perform loop distribution.  This flag can improve cache performance on
6784 big loop bodies and allow further loop optimizations, like
6785 parallelization or vectorization, to take place.  For example, the loop
6786 @smallexample
6787 DO I = 1, N
6788   A(I) = B(I) + C
6789   D(I) = E(I) * F
6790 ENDDO
6791 @end smallexample
6792 is transformed to
6793 @smallexample
6794 DO I = 1, N
6795    A(I) = B(I) + C
6796 ENDDO
6797 DO I = 1, N
6798    D(I) = E(I) * F
6799 ENDDO
6800 @end smallexample
6801
6802 @item -ftree-loop-im
6803 @opindex ftree-loop-im
6804 Perform loop invariant motion on trees.  This pass moves only invariants that
6805 would be hard to handle at RTL level (function calls, operations that expand to
6806 nontrivial sequences of insns).  With @option{-funswitch-loops} it also moves
6807 operands of conditions that are invariant out of the loop, so that we can use
6808 just trivial invariantness analysis in loop unswitching.  The pass also includes
6809 store motion.
6810
6811 @item -ftree-loop-ivcanon
6812 @opindex ftree-loop-ivcanon
6813 Create a canonical counter for number of iterations in the loop for that
6814 determining number of iterations requires complicated analysis.  Later
6815 optimizations then may determine the number easily.  Useful especially
6816 in connection with unrolling.
6817
6818 @item -fivopts
6819 @opindex fivopts
6820 Perform induction variable optimizations (strength reduction, induction
6821 variable merging and induction variable elimination) on trees.
6822
6823 @item -ftree-parallelize-loops=n
6824 @opindex ftree-parallelize-loops
6825 Parallelize loops, i.e., split their iteration space to run in n threads.
6826 This is only possible for loops whose iterations are independent
6827 and can be arbitrarily reordered.  The optimization is only
6828 profitable on multiprocessor machines, for loops that are CPU-intensive,
6829 rather than constrained e.g.@: by memory bandwidth.  This option
6830 implies @option{-pthread}, and thus is only supported on targets
6831 that have support for @option{-pthread}.
6832
6833 @item -ftree-pta
6834 @opindex ftree-pta
6835 Perform function-local points-to analysis on trees.  This flag is
6836 enabled by default at @option{-O} and higher.
6837
6838 @item -ftree-sra
6839 @opindex ftree-sra
6840 Perform scalar replacement of aggregates.  This pass replaces structure
6841 references with scalars to prevent committing structures to memory too
6842 early.  This flag is enabled by default at @option{-O} and higher.
6843
6844 @item -ftree-copyrename
6845 @opindex ftree-copyrename
6846 Perform copy renaming on trees.  This pass attempts to rename compiler
6847 temporaries to other variables at copy locations, usually resulting in
6848 variable names which more closely resemble the original variables.  This flag
6849 is enabled by default at @option{-O} and higher.
6850
6851 @item -ftree-ter
6852 @opindex ftree-ter
6853 Perform temporary expression replacement during the SSA->normal phase.  Single
6854 use/single def temporaries are replaced at their use location with their
6855 defining expression.  This results in non-GIMPLE code, but gives the expanders
6856 much more complex trees to work on resulting in better RTL generation.  This is
6857 enabled by default at @option{-O} and higher.
6858
6859 @item -ftree-vectorize
6860 @opindex ftree-vectorize
6861 Perform loop vectorization on trees. This flag is enabled by default at
6862 @option{-O3}.
6863
6864 @item -ftree-slp-vectorize
6865 @opindex ftree-slp-vectorize
6866 Perform basic block vectorization on trees. This flag is enabled by default at
6867 @option{-O3} and when @option{-ftree-vectorize} is enabled.
6868
6869 @item -ftree-vect-loop-version
6870 @opindex ftree-vect-loop-version
6871 Perform loop versioning when doing loop vectorization on trees.  When a loop
6872 appears to be vectorizable except that data alignment or data dependence cannot
6873 be determined at compile time then vectorized and non-vectorized versions of
6874 the loop are generated along with runtime checks for alignment or dependence
6875 to control which version is executed.  This option is enabled by default
6876 except at level @option{-Os} where it is disabled.
6877
6878 @item -fvect-cost-model
6879 @opindex fvect-cost-model
6880 Enable cost model for vectorization.
6881
6882 @item -ftree-vrp
6883 @opindex ftree-vrp
6884 Perform Value Range Propagation on trees.  This is similar to the
6885 constant propagation pass, but instead of values, ranges of values are
6886 propagated.  This allows the optimizers to remove unnecessary range
6887 checks like array bound checks and null pointer checks.  This is
6888 enabled by default at @option{-O2} and higher.  Null pointer check
6889 elimination is only done if @option{-fdelete-null-pointer-checks} is
6890 enabled.
6891
6892 @item -ftracer
6893 @opindex ftracer
6894 Perform tail duplication to enlarge superblock size.  This transformation
6895 simplifies the control flow of the function allowing other optimizations to do
6896 better job.
6897
6898 @item -funroll-loops
6899 @opindex funroll-loops
6900 Unroll loops whose number of iterations can be determined at compile
6901 time or upon entry to the loop.  @option{-funroll-loops} implies
6902 @option{-frerun-cse-after-loop}.  This option makes code larger,
6903 and may or may not make it run faster.
6904
6905 @item -funroll-all-loops
6906 @opindex funroll-all-loops
6907 Unroll all loops, even if their number of iterations is uncertain when
6908 the loop is entered.  This usually makes programs run more slowly.
6909 @option{-funroll-all-loops} implies the same options as
6910 @option{-funroll-loops},
6911
6912 @item -fsplit-ivs-in-unroller
6913 @opindex fsplit-ivs-in-unroller
6914 Enables expressing of values of induction variables in later iterations
6915 of the unrolled loop using the value in the first iteration.  This breaks
6916 long dependency chains, thus improving efficiency of the scheduling passes.
6917
6918 Combination of @option{-fweb} and CSE is often sufficient to obtain the
6919 same effect.  However in cases the loop body is more complicated than
6920 a single basic block, this is not reliable.  It also does not work at all
6921 on some of the architectures due to restrictions in the CSE pass.
6922
6923 This optimization is enabled by default.
6924
6925 @item -fvariable-expansion-in-unroller
6926 @opindex fvariable-expansion-in-unroller
6927 With this option, the compiler will create multiple copies of some
6928 local variables when unrolling a loop which can result in superior code.
6929
6930 @item -fpredictive-commoning
6931 @opindex fpredictive-commoning
6932 Perform predictive commoning optimization, i.e., reusing computations
6933 (especially memory loads and stores) performed in previous
6934 iterations of loops.
6935
6936 This option is enabled at level @option{-O3}.
6937
6938 @item -fprefetch-loop-arrays
6939 @opindex fprefetch-loop-arrays
6940 If supported by the target machine, generate instructions to prefetch
6941 memory to improve the performance of loops that access large arrays.
6942
6943 This option may generate better or worse code; results are highly
6944 dependent on the structure of loops within the source code.
6945
6946 Disabled at level @option{-Os}.
6947
6948 @item -fno-peephole
6949 @itemx -fno-peephole2
6950 @opindex fno-peephole
6951 @opindex fno-peephole2
6952 Disable any machine-specific peephole optimizations.  The difference
6953 between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
6954 are implemented in the compiler; some targets use one, some use the
6955 other, a few use both.
6956
6957 @option{-fpeephole} is enabled by default.
6958 @option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6959
6960 @item -fno-guess-branch-probability
6961 @opindex fno-guess-branch-probability
6962 Do not guess branch probabilities using heuristics.
6963
6964 GCC will use heuristics to guess branch probabilities if they are
6965 not provided by profiling feedback (@option{-fprofile-arcs}).  These
6966 heuristics are based on the control flow graph.  If some branch probabilities
6967 are specified by @samp{__builtin_expect}, then the heuristics will be
6968 used to guess branch probabilities for the rest of the control flow graph,
6969 taking the @samp{__builtin_expect} info into account.  The interactions
6970 between the heuristics and @samp{__builtin_expect} can be complex, and in
6971 some cases, it may be useful to disable the heuristics so that the effects
6972 of @samp{__builtin_expect} are easier to understand.
6973
6974 The default is @option{-fguess-branch-probability} at levels
6975 @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6976
6977 @item -freorder-blocks
6978 @opindex freorder-blocks
6979 Reorder basic blocks in the compiled function in order to reduce number of
6980 taken branches and improve code locality.
6981
6982 Enabled at levels @option{-O2}, @option{-O3}.
6983
6984 @item -freorder-blocks-and-partition
6985 @opindex freorder-blocks-and-partition
6986 In addition to reordering basic blocks in the compiled function, in order
6987 to reduce number of taken branches, partitions hot and cold basic blocks
6988 into separate sections of the assembly and .o files, to improve
6989 paging and cache locality performance.
6990
6991 This optimization is automatically turned off in the presence of
6992 exception handling, for linkonce sections, for functions with a user-defined
6993 section attribute and on any architecture that does not support named
6994 sections.
6995
6996 @item -freorder-functions
6997 @opindex freorder-functions
6998 Reorder functions in the object file in order to
6999 improve code locality.  This is implemented by using special
7000 subsections @code{.text.hot} for most frequently executed functions and
7001 @code{.text.unlikely} for unlikely executed functions.  Reordering is done by
7002 the linker so object file format must support named sections and linker must
7003 place them in a reasonable way.
7004
7005 Also profile feedback must be available in to make this option effective.  See
7006 @option{-fprofile-arcs} for details.
7007
7008 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7009
7010 @item -fstrict-aliasing
7011 @opindex fstrict-aliasing
7012 Allow the compiler to assume the strictest aliasing rules applicable to
7013 the language being compiled.  For C (and C++), this activates
7014 optimizations based on the type of expressions.  In particular, an
7015 object of one type is assumed never to reside at the same address as an
7016 object of a different type, unless the types are almost the same.  For
7017 example, an @code{unsigned int} can alias an @code{int}, but not a
7018 @code{void*} or a @code{double}.  A character type may alias any other
7019 type.
7020
7021 @anchor{Type-punning}Pay special attention to code like this:
7022 @smallexample
7023 union a_union @{
7024   int i;
7025   double d;
7026 @};
7027
7028 int f() @{
7029   union a_union t;
7030   t.d = 3.0;
7031   return t.i;
7032 @}
7033 @end smallexample
7034 The practice of reading from a different union member than the one most
7035 recently written to (called ``type-punning'') is common.  Even with
7036 @option{-fstrict-aliasing}, type-punning is allowed, provided the memory
7037 is accessed through the union type.  So, the code above will work as
7038 expected.  @xref{Structures unions enumerations and bit-fields
7039 implementation}.  However, this code might not:
7040 @smallexample
7041 int f() @{
7042   union a_union t;
7043   int* ip;
7044   t.d = 3.0;
7045   ip = &t.i;
7046   return *ip;
7047 @}
7048 @end smallexample
7049
7050 Similarly, access by taking the address, casting the resulting pointer
7051 and dereferencing the result has undefined behavior, even if the cast
7052 uses a union type, e.g.:
7053 @smallexample
7054 int f() @{
7055   double d = 3.0;
7056   return ((union a_union *) &d)->i;
7057 @}
7058 @end smallexample
7059
7060 The @option{-fstrict-aliasing} option is enabled at levels
7061 @option{-O2}, @option{-O3}, @option{-Os}.
7062
7063 @item -fstrict-overflow
7064 @opindex fstrict-overflow
7065 Allow the compiler to assume strict signed overflow rules, depending
7066 on the language being compiled.  For C (and C++) this means that
7067 overflow when doing arithmetic with signed numbers is undefined, which
7068 means that the compiler may assume that it will not happen.  This
7069 permits various optimizations.  For example, the compiler will assume
7070 that an expression like @code{i + 10 > i} will always be true for
7071 signed @code{i}.  This assumption is only valid if signed overflow is
7072 undefined, as the expression is false if @code{i + 10} overflows when
7073 using twos complement arithmetic.  When this option is in effect any
7074 attempt to determine whether an operation on signed numbers will
7075 overflow must be written carefully to not actually involve overflow.
7076
7077 This option also allows the compiler to assume strict pointer
7078 semantics: given a pointer to an object, if adding an offset to that
7079 pointer does not produce a pointer to the same object, the addition is
7080 undefined.  This permits the compiler to conclude that @code{p + u >
7081 p} is always true for a pointer @code{p} and unsigned integer
7082 @code{u}.  This assumption is only valid because pointer wraparound is
7083 undefined, as the expression is false if @code{p + u} overflows using
7084 twos complement arithmetic.
7085
7086 See also the @option{-fwrapv} option.  Using @option{-fwrapv} means
7087 that integer signed overflow is fully defined: it wraps.  When
7088 @option{-fwrapv} is used, there is no difference between
7089 @option{-fstrict-overflow} and @option{-fno-strict-overflow} for
7090 integers.  With @option{-fwrapv} certain types of overflow are
7091 permitted.  For example, if the compiler gets an overflow when doing
7092 arithmetic on constants, the overflowed value can still be used with
7093 @option{-fwrapv}, but not otherwise.
7094
7095 The @option{-fstrict-overflow} option is enabled at levels
7096 @option{-O2}, @option{-O3}, @option{-Os}.
7097
7098 @item -falign-functions
7099 @itemx -falign-functions=@var{n}
7100 @opindex falign-functions
7101 Align the start of functions to the next power-of-two greater than
7102 @var{n}, skipping up to @var{n} bytes.  For instance,
7103 @option{-falign-functions=32} aligns functions to the next 32-byte
7104 boundary, but @option{-falign-functions=24} would align to the next
7105 32-byte boundary only if this can be done by skipping 23 bytes or less.
7106
7107 @option{-fno-align-functions} and @option{-falign-functions=1} are
7108 equivalent and mean that functions will not be aligned.
7109
7110 Some assemblers only support this flag when @var{n} is a power of two;
7111 in that case, it is rounded up.
7112
7113 If @var{n} is not specified or is zero, use a machine-dependent default.
7114
7115 Enabled at levels @option{-O2}, @option{-O3}.
7116
7117 @item -falign-labels
7118 @itemx -falign-labels=@var{n}
7119 @opindex falign-labels
7120 Align all branch targets to a power-of-two boundary, skipping up to
7121 @var{n} bytes like @option{-falign-functions}.  This option can easily
7122 make code slower, because it must insert dummy operations for when the
7123 branch target is reached in the usual flow of the code.
7124
7125 @option{-fno-align-labels} and @option{-falign-labels=1} are
7126 equivalent and mean that labels will not be aligned.
7127
7128 If @option{-falign-loops} or @option{-falign-jumps} are applicable and
7129 are greater than this value, then their values are used instead.
7130
7131 If @var{n} is not specified or is zero, use a machine-dependent default
7132 which is very likely to be @samp{1}, meaning no alignment.
7133
7134 Enabled at levels @option{-O2}, @option{-O3}.
7135
7136 @item -falign-loops
7137 @itemx -falign-loops=@var{n}
7138 @opindex falign-loops
7139 Align loops to a power-of-two boundary, skipping up to @var{n} bytes
7140 like @option{-falign-functions}.  The hope is that the loop will be
7141 executed many times, which will make up for any execution of the dummy
7142 operations.
7143
7144 @option{-fno-align-loops} and @option{-falign-loops=1} are
7145 equivalent and mean that loops will not be aligned.
7146
7147 If @var{n} is not specified or is zero, use a machine-dependent default.
7148
7149 Enabled at levels @option{-O2}, @option{-O3}.
7150
7151 @item -falign-jumps
7152 @itemx -falign-jumps=@var{n}
7153 @opindex falign-jumps
7154 Align branch targets to a power-of-two boundary, for branch targets
7155 where the targets can only be reached by jumping, skipping up to @var{n}
7156 bytes like @option{-falign-functions}.  In this case, no dummy operations
7157 need be executed.
7158
7159 @option{-fno-align-jumps} and @option{-falign-jumps=1} are
7160 equivalent and mean that loops will not be aligned.
7161
7162 If @var{n} is not specified or is zero, use a machine-dependent default.
7163
7164 Enabled at levels @option{-O2}, @option{-O3}.
7165
7166 @item -funit-at-a-time
7167 @opindex funit-at-a-time
7168 This option is left for compatibility reasons. @option{-funit-at-a-time}
7169 has no effect, while @option{-fno-unit-at-a-time} implies
7170 @option{-fno-toplevel-reorder} and @option{-fno-section-anchors}.
7171
7172 Enabled by default.
7173
7174 @item -fno-toplevel-reorder
7175 @opindex fno-toplevel-reorder
7176 Do not reorder top-level functions, variables, and @code{asm}
7177 statements.  Output them in the same order that they appear in the
7178 input file.  When this option is used, unreferenced static variables
7179 will not be removed.  This option is intended to support existing code
7180 which relies on a particular ordering.  For new code, it is better to
7181 use attributes.
7182
7183 Enabled at level @option{-O0}.  When disabled explicitly, it also imply
7184 @option{-fno-section-anchors} that is otherwise enabled at @option{-O0} on some
7185 targets.
7186
7187 @item -fweb
7188 @opindex fweb
7189 Constructs webs as commonly used for register allocation purposes and assign
7190 each web individual pseudo register.  This allows the register allocation pass
7191 to operate on pseudos directly, but also strengthens several other optimization
7192 passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
7193 however, make debugging impossible, since variables will no longer stay in a
7194 ``home register''.
7195
7196 Enabled by default with @option{-funroll-loops}.
7197
7198 @item -fwhole-program
7199 @opindex fwhole-program
7200 Assume that the current compilation unit represents the whole program being
7201 compiled.  All public functions and variables with the exception of @code{main}
7202 and those merged by attribute @code{externally_visible} become static functions
7203 and in effect are optimized more aggressively by interprocedural optimizers.
7204 While this option is equivalent to proper use of the @code{static} keyword for
7205 programs consisting of a single file, in combination with option
7206 @option{-combine}, @option{-flto} or @option{-fwhopr} this flag can be used to
7207 compile many smaller scale programs since the functions and variables become
7208 local for the whole combined compilation unit, not for the single source file
7209 itself.
7210
7211 This option implies @option{-fwhole-file} for Fortran programs.
7212
7213 @item -flto
7214 @opindex flto
7215 This option runs the standard link-time optimizer.  When invoked
7216 with source code, it generates GIMPLE (one of GCC's internal
7217 representations) and writes it to special ELF sections in the object
7218 file.  When the object files are linked together, all the function
7219 bodies are read from these ELF sections and instantiated as if they
7220 had been part of the same translation unit.
7221
7222 To use the link-timer optimizer, @option{-flto} needs to be specified at
7223 compile time and during the final link.  For example,
7224
7225 @smallexample
7226 gcc -c -O2 -flto foo.c
7227 gcc -c -O2 -flto bar.c
7228 gcc -o myprog -flto -O2 foo.o bar.o
7229 @end smallexample
7230
7231 The first two invocations to GCC will save a bytecode representation
7232 of GIMPLE into special ELF sections inside @file{foo.o} and
7233 @file{bar.o}.  The final invocation will read the GIMPLE bytecode from
7234 @file{foo.o} and @file{bar.o}, merge the two files into a single
7235 internal image, and compile the result as usual.  Since both
7236 @file{foo.o} and @file{bar.o} are merged into a single image, this
7237 causes all the inter-procedural analyses and optimizations in GCC to
7238 work across the two files as if they were a single one.  This means,
7239 for example, that the inliner will be able to inline functions in
7240 @file{bar.o} into functions in @file{foo.o} and vice-versa.
7241
7242 Another (simpler) way to enable link-time optimization is,
7243
7244 @smallexample
7245 gcc -o myprog -flto -O2 foo.c bar.c
7246 @end smallexample
7247
7248 The above will generate bytecode for @file{foo.c} and @file{bar.c},
7249 merge them together into a single GIMPLE representation and optimize
7250 them as usual to produce @file{myprog}.
7251
7252 The only important thing to keep in mind is that to enable link-time
7253 optimizations the @option{-flto} flag needs to be passed to both the
7254 compile and the link commands.
7255
7256 Note that when a file is compiled with @option{-flto}, the generated
7257 object file will be larger than a regular object file because it will
7258 contain GIMPLE bytecodes and the usual final code.  This means that
7259 object files with LTO information can be linked as a normal object
7260 file.  So, in the previous example, if the final link is done with
7261
7262 @smallexample
7263 gcc -o myprog foo.o bar.o
7264 @end smallexample
7265
7266 The only difference will be that no inter-procedural optimizations
7267 will be applied to produce @file{myprog}.  The two object files
7268 @file{foo.o} and @file{bar.o} will be simply sent to the regular
7269 linker.
7270
7271 Additionally, the optimization flags used to compile individual files
7272 are not necessarily related to those used at link-time.  For instance,
7273
7274 @smallexample
7275 gcc -c -O0 -flto foo.c
7276 gcc -c -O0 -flto bar.c
7277 gcc -o myprog -flto -O3 foo.o bar.o
7278 @end smallexample
7279
7280 This will produce individual object files with unoptimized assembler
7281 code, but the resulting binary @file{myprog} will be optimized at
7282 @option{-O3}.  Now, if the final binary is generated without
7283 @option{-flto}, then @file{myprog} will not be optimized.
7284
7285 When producing the final binary with @option{-flto}, GCC will only
7286 apply link-time optimizations to those files that contain bytecode.
7287 Therefore, you can mix and match object files and libraries with
7288 GIMPLE bytecodes and final object code.  GCC will automatically select
7289 which files to optimize in LTO mode and which files to link without
7290 further processing.
7291
7292 There are some code generation flags that GCC will preserve when
7293 generating bytecodes, as they need to be used during the final link
7294 stage.  Currently, the following options are saved into the GIMPLE
7295 bytecode files: @option{-fPIC}, @option{-fcommon} and all the
7296 @option{-m} target flags.
7297
7298 At link time, these options are read-in and reapplied.  Note that the
7299 current implementation makes no attempt at recognizing conflicting
7300 values for these options.  If two or more files have a conflicting
7301 value (e.g., one file is compiled with @option{-fPIC} and another
7302 isn't), the compiler will simply use the last value read from the
7303 bytecode files.  It is recommended, then, that all the files
7304 participating in the same link be compiled with the same options.
7305
7306 Another feature of LTO is that it is possible to apply interprocedural
7307 optimizations on files written in different languages.  This requires
7308 some support in the language front end.  Currently, the C, C++ and
7309 Fortran front ends are capable of emitting GIMPLE bytecodes, so
7310 something like this should work
7311
7312 @smallexample
7313 gcc -c -flto foo.c
7314 g++ -c -flto bar.cc
7315 gfortran -c -flto baz.f90
7316 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
7317 @end smallexample
7318
7319 Notice that the final link is done with @command{g++} to get the C++
7320 runtime libraries and @option{-lgfortran} is added to get the Fortran
7321 runtime libraries.  In general, when mixing languages in LTO mode, you
7322 should use the same link command used when mixing languages in a
7323 regular (non-LTO) compilation.  This means that if your build process
7324 was mixing languages before, all you need to add is @option{-flto} to
7325 all the compile and link commands.
7326
7327 If LTO encounters objects with C linkage declared with incompatible
7328 types in separate translation units to be linked together (undefined
7329 behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be
7330 issued.  The behavior is still undefined at runtime.
7331
7332 If object files containing GIMPLE bytecode are stored in a library
7333 archive, say @file{libfoo.a}, it is possible to extract and use them
7334 in an LTO link if you are using @command{gold} as the linker (which,
7335 in turn requires GCC to be configured with @option{--enable-gold}).
7336 To enable this feature, use the flag @option{-fuse-linker-plugin} at
7337 link-time:
7338
7339 @smallexample
7340 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
7341 @end smallexample
7342
7343 With the linker plugin enabled, @command{gold} will extract the needed
7344 GIMPLE files from @file{libfoo.a} and pass them on to the running GCC
7345 to make them part of the aggregated GIMPLE image to be optimized.
7346
7347 If you are not using @command{gold} and/or do not specify
7348 @option{-fuse-linker-plugin} then the objects inside @file{libfoo.a}
7349 will be extracted and linked as usual, but they will not participate
7350 in the LTO optimization process.
7351
7352 Link time optimizations do not require the presence of the whole
7353 program to operate.  If the program does not require any symbols to
7354 be exported, it is possible to combine @option{-flto} and
7355 @option{-fwhopr} with @option{-fwhole-program} to allow the
7356 interprocedural optimizers to use more aggressive assumptions which
7357 may lead to improved optimization opportunities.
7358
7359 Regarding portability: the current implementation of LTO makes no
7360 attempt at generating bytecode that can be ported between different
7361 types of hosts.  The bytecode files are versioned and there is a
7362 strict version check, so bytecode files generated in one version of
7363 GCC will not work with an older/newer version of GCC.
7364
7365 Link time optimization does not play well with generating debugging
7366 information.  Combining @option{-flto} or @option{-fwhopr} with
7367 @option{-g} is experimental.
7368
7369 This option is disabled by default.
7370
7371 @item -fwhopr
7372 @opindex fwhopr
7373 This option is identical in functionality to @option{-flto} but it
7374 differs in how the final link stage is executed.  Instead of loading
7375 all the function bodies in memory, the callgraph is analyzed and
7376 optimization decisions are made (whole program analysis or WPA). Once
7377 optimization decisions are made, the callgraph is partitioned and the
7378 different sections are compiled separately (local transformations or
7379 LTRANS)@.  This process allows optimizations on very large programs
7380 that otherwise would not fit in memory.  This option enables
7381 @option{-fwpa} and @option{-fltrans} automatically.
7382
7383 Disabled by default.
7384
7385 This option is experimental.
7386
7387 @item -fwpa
7388 @opindex fwpa
7389 This is an internal option used by GCC when compiling with
7390 @option{-fwhopr}.  You should never need to use it.
7391
7392 This option runs the link-time optimizer in the whole-program-analysis
7393 (WPA) mode, which reads in summary information from all inputs and
7394 performs a whole-program analysis based on summary information only.
7395 It generates object files for subsequent runs of the link-time
7396 optimizer where individual object files are optimized using both
7397 summary information from the WPA mode and the actual function bodies.
7398 It then drives the LTRANS phase.
7399
7400 Disabled by default.
7401
7402 @item -fltrans
7403 @opindex fltrans
7404 This is an internal option used by GCC when compiling with
7405 @option{-fwhopr}.  You should never need to use it.
7406
7407 This option runs the link-time optimizer in the local-transformation (LTRANS)
7408 mode, which reads in output from a previous run of the LTO in WPA mode.
7409 In the LTRANS mode, LTO optimizes an object and produces the final assembly.
7410
7411 Disabled by default.
7412
7413 @item -fltrans-output-list=@var{file}
7414 @opindex fltrans-output-list
7415 This is an internal option used by GCC when compiling with
7416 @option{-fwhopr}.  You should never need to use it.
7417
7418 This option specifies a file to which the names of LTRANS output files are
7419 written.  This option is only meaningful in conjunction with @option{-fwpa}.
7420
7421 Disabled by default.
7422
7423 @item -flto-compression-level=@var{n}
7424 This option specifies the level of compression used for intermediate
7425 language written to LTO object files, and is only meaningful in
7426 conjunction with LTO mode (@option{-fwhopr}, @option{-flto}).  Valid
7427 values are 0 (no compression) to 9 (maximum compression).  Values
7428 outside this range are clamped to either 0 or 9.  If the option is not
7429 given, a default balanced compression setting is used.
7430
7431 @item -flto-report
7432 Prints a report with internal details on the workings of the link-time
7433 optimizer.  The contents of this report vary from version to version,
7434 it is meant to be useful to GCC developers when processing object
7435 files in LTO mode (via @option{-fwhopr} or @option{-flto}).
7436
7437 Disabled by default.
7438
7439 @item -fuse-linker-plugin
7440 Enables the extraction of objects with GIMPLE bytecode information
7441 from library archives.  This option relies on features available only
7442 in @command{gold}, so to use this you must configure GCC with
7443 @option{--enable-gold}.  See @option{-flto} for a description on the
7444 effect of this flag and how to use it.
7445
7446 Disabled by default.
7447
7448 @item -fcprop-registers
7449 @opindex fcprop-registers
7450 After register allocation and post-register allocation instruction splitting,
7451 we perform a copy-propagation pass to try to reduce scheduling dependencies
7452 and occasionally eliminate the copy.
7453
7454 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7455
7456 @item -fprofile-correction
7457 @opindex fprofile-correction
7458 Profiles collected using an instrumented binary for multi-threaded programs may
7459 be inconsistent due to missed counter updates. When this option is specified,
7460 GCC will use heuristics to correct or smooth out such inconsistencies. By
7461 default, GCC will emit an error message when an inconsistent profile is detected.
7462
7463 @item -fprofile-dir=@var{path}
7464 @opindex fprofile-dir
7465
7466 Set the directory to search the profile data files in to @var{path}.
7467 This option affects only the profile data generated by
7468 @option{-fprofile-generate}, @option{-ftest-coverage}, @option{-fprofile-arcs}
7469 and used by @option{-fprofile-use} and @option{-fbranch-probabilities}
7470 and its related options.
7471 By default, GCC will use the current directory as @var{path}
7472 thus the profile data file will appear in the same directory as the object file.
7473
7474 @item -fprofile-generate
7475 @itemx -fprofile-generate=@var{path}
7476 @opindex fprofile-generate
7477
7478 Enable options usually used for instrumenting application to produce
7479 profile useful for later recompilation with profile feedback based
7480 optimization.  You must use @option{-fprofile-generate} both when
7481 compiling and when linking your program.
7482
7483 The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}.
7484
7485 If @var{path} is specified, GCC will look at the @var{path} to find
7486 the profile feedback data files. See @option{-fprofile-dir}.
7487
7488 @item -fprofile-use
7489 @itemx -fprofile-use=@var{path}
7490 @opindex fprofile-use
7491 Enable profile feedback directed optimizations, and optimizations
7492 generally profitable only with profile feedback available.
7493
7494 The following options are enabled: @code{-fbranch-probabilities}, @code{-fvpt},
7495 @code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer}
7496
7497 By default, GCC emits an error message if the feedback profiles do not
7498 match the source code.  This error can be turned into a warning by using
7499 @option{-Wcoverage-mismatch}.  Note this may result in poorly optimized
7500 code.
7501
7502 If @var{path} is specified, GCC will look at the @var{path} to find
7503 the profile feedback data files. See @option{-fprofile-dir}.
7504 @end table
7505
7506 The following options control compiler behavior regarding floating
7507 point arithmetic.  These options trade off between speed and
7508 correctness.  All must be specifically enabled.
7509
7510 @table @gcctabopt
7511 @item -ffloat-store
7512 @opindex ffloat-store
7513 Do not store floating point variables in registers, and inhibit other
7514 options that might change whether a floating point value is taken from a
7515 register or memory.
7516
7517 @cindex floating point precision
7518 This option prevents undesirable excess precision on machines such as
7519 the 68000 where the floating registers (of the 68881) keep more
7520 precision than a @code{double} is supposed to have.  Similarly for the
7521 x86 architecture.  For most programs, the excess precision does only
7522 good, but a few programs rely on the precise definition of IEEE floating
7523 point.  Use @option{-ffloat-store} for such programs, after modifying
7524 them to store all pertinent intermediate computations into variables.
7525
7526 @item -fexcess-precision=@var{style}
7527 @opindex fexcess-precision
7528 This option allows further control over excess precision on machines
7529 where floating-point registers have more precision than the IEEE
7530 @code{float} and @code{double} types and the processor does not
7531 support operations rounding to those types.  By default,
7532 @option{-fexcess-precision=fast} is in effect; this means that
7533 operations are carried out in the precision of the registers and that
7534 it is unpredictable when rounding to the types specified in the source
7535 code takes place.  When compiling C, if
7536 @option{-fexcess-precision=standard} is specified then excess
7537 precision will follow the rules specified in ISO C99; in particular,
7538 both casts and assignments cause values to be rounded to their
7539 semantic types (whereas @option{-ffloat-store} only affects
7540 assignments).  This option is enabled by default for C if a strict
7541 conformance option such as @option{-std=c99} is used.
7542
7543 @opindex mfpmath
7544 @option{-fexcess-precision=standard} is not implemented for languages
7545 other than C, and has no effect if
7546 @option{-funsafe-math-optimizations} or @option{-ffast-math} is
7547 specified.  On the x86, it also has no effect if @option{-mfpmath=sse}
7548 or @option{-mfpmath=sse+387} is specified; in the former case, IEEE
7549 semantics apply without excess precision, and in the latter, rounding
7550 is unpredictable.
7551
7552 @item -ffast-math
7553 @opindex ffast-math
7554 Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations},
7555 @option{-ffinite-math-only}, @option{-fno-rounding-math},
7556 @option{-fno-signaling-nans} and @option{-fcx-limited-range}.
7557
7558 This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
7559
7560 This option is not turned on by any @option{-O} option since
7561 it can result in incorrect output for programs which depend on
7562 an exact implementation of IEEE or ISO rules/specifications for
7563 math functions. It may, however, yield faster code for programs
7564 that do not require the guarantees of these specifications.
7565
7566 @item -fno-math-errno
7567 @opindex fno-math-errno
7568 Do not set ERRNO after calling math functions that are executed
7569 with a single instruction, e.g., sqrt.  A program that relies on
7570 IEEE exceptions for math error handling may want to use this flag
7571 for speed while maintaining IEEE arithmetic compatibility.
7572
7573 This option is not turned on by any @option{-O} option since
7574 it can result in incorrect output for programs which depend on
7575 an exact implementation of IEEE or ISO rules/specifications for
7576 math functions. It may, however, yield faster code for programs
7577 that do not require the guarantees of these specifications.
7578
7579 The default is @option{-fmath-errno}.
7580
7581 On Darwin systems, the math library never sets @code{errno}.  There is
7582 therefore no reason for the compiler to consider the possibility that
7583 it might, and @option{-fno-math-errno} is the default.
7584
7585 @item -funsafe-math-optimizations
7586 @opindex funsafe-math-optimizations
7587
7588 Allow optimizations for floating-point arithmetic that (a) assume
7589 that arguments and results are valid and (b) may violate IEEE or
7590 ANSI standards.  When used at link-time, it may include libraries
7591 or startup files that change the default FPU control word or other
7592 similar optimizations.
7593
7594 This option is not turned on by any @option{-O} option since
7595 it can result in incorrect output for programs which depend on
7596 an exact implementation of IEEE or ISO rules/specifications for
7597 math functions. It may, however, yield faster code for programs
7598 that do not require the guarantees of these specifications.
7599 Enables @option{-fno-signed-zeros}, @option{-fno-trapping-math},
7600 @option{-fassociative-math} and @option{-freciprocal-math}.
7601
7602 The default is @option{-fno-unsafe-math-optimizations}.
7603
7604 @item -fassociative-math
7605 @opindex fassociative-math
7606
7607 Allow re-association of operands in series of floating-point operations.
7608 This violates the ISO C and C++ language standard by possibly changing
7609 computation result.  NOTE: re-ordering may change the sign of zero as
7610 well as ignore NaNs and inhibit or create underflow or overflow (and
7611 thus cannot be used on a code which relies on rounding behavior like
7612 @code{(x + 2**52) - 2**52)}.  May also reorder floating-point comparisons
7613 and thus may not be used when ordered comparisons are required.
7614 This option requires that both @option{-fno-signed-zeros} and
7615 @option{-fno-trapping-math} be in effect.  Moreover, it doesn't make
7616 much sense with @option{-frounding-math}. For Fortran the option
7617 is automatically enabled when both @option{-fno-signed-zeros} and
7618 @option{-fno-trapping-math} are in effect.
7619
7620 The default is @option{-fno-associative-math}.
7621
7622 @item -freciprocal-math
7623 @opindex freciprocal-math
7624
7625 Allow the reciprocal of a value to be used instead of dividing by
7626 the value if this enables optimizations.  For example @code{x / y}
7627 can be replaced with @code{x * (1/y)} which is useful if @code{(1/y)}
7628 is subject to common subexpression elimination.  Note that this loses
7629 precision and increases the number of flops operating on the value.
7630
7631 The default is @option{-fno-reciprocal-math}.
7632
7633 @item -ffinite-math-only
7634 @opindex ffinite-math-only
7635 Allow optimizations for floating-point arithmetic that assume
7636 that arguments and results are not NaNs or +-Infs.
7637
7638 This option is not turned on by any @option{-O} option since
7639 it can result in incorrect output for programs which depend on
7640 an exact implementation of IEEE or ISO rules/specifications for
7641 math functions. It may, however, yield faster code for programs
7642 that do not require the guarantees of these specifications.
7643
7644 The default is @option{-fno-finite-math-only}.
7645
7646 @item -fno-signed-zeros
7647 @opindex fno-signed-zeros
7648 Allow optimizations for floating point arithmetic that ignore the
7649 signedness of zero.  IEEE arithmetic specifies the behavior of
7650 distinct +0.0 and @minus{}0.0 values, which then prohibits simplification
7651 of expressions such as x+0.0 or 0.0*x (even with @option{-ffinite-math-only}).
7652 This option implies that the sign of a zero result isn't significant.
7653
7654 The default is @option{-fsigned-zeros}.
7655
7656 @item -fno-trapping-math
7657 @opindex fno-trapping-math
7658 Compile code assuming that floating-point operations cannot generate
7659 user-visible traps.  These traps include division by zero, overflow,
7660 underflow, inexact result and invalid operation.  This option requires
7661 that @option{-fno-signaling-nans} be in effect.  Setting this option may
7662 allow faster code if one relies on ``non-stop'' IEEE arithmetic, for example.
7663
7664 This option should never be turned on by any @option{-O} option since
7665 it can result in incorrect output for programs which depend on
7666 an exact implementation of IEEE or ISO rules/specifications for
7667 math functions.
7668
7669 The default is @option{-ftrapping-math}.
7670
7671 @item -frounding-math
7672 @opindex frounding-math
7673 Disable transformations and optimizations that assume default floating
7674 point rounding behavior.  This is round-to-zero for all floating point
7675 to integer conversions, and round-to-nearest for all other arithmetic
7676 truncations.  This option should be specified for programs that change
7677 the FP rounding mode dynamically, or that may be executed with a
7678 non-default rounding mode.  This option disables constant folding of
7679 floating point expressions at compile-time (which may be affected by
7680 rounding mode) and arithmetic transformations that are unsafe in the
7681 presence of sign-dependent rounding modes.
7682
7683 The default is @option{-fno-rounding-math}.
7684
7685 This option is experimental and does not currently guarantee to
7686 disable all GCC optimizations that are affected by rounding mode.
7687 Future versions of GCC may provide finer control of this setting
7688 using C99's @code{FENV_ACCESS} pragma.  This command line option
7689 will be used to specify the default state for @code{FENV_ACCESS}.
7690
7691 @item -fsignaling-nans
7692 @opindex fsignaling-nans
7693 Compile code assuming that IEEE signaling NaNs may generate user-visible
7694 traps during floating-point operations.  Setting this option disables
7695 optimizations that may change the number of exceptions visible with
7696 signaling NaNs.  This option implies @option{-ftrapping-math}.
7697
7698 This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
7699 be defined.
7700
7701 The default is @option{-fno-signaling-nans}.
7702
7703 This option is experimental and does not currently guarantee to
7704 disable all GCC optimizations that affect signaling NaN behavior.
7705
7706 @item -fsingle-precision-constant
7707 @opindex fsingle-precision-constant
7708 Treat floating point constant as single precision constant instead of
7709 implicitly converting it to double precision constant.
7710
7711 @item -fcx-limited-range
7712 @opindex fcx-limited-range
7713 When enabled, this option states that a range reduction step is not
7714 needed when performing complex division.  Also, there is no checking
7715 whether the result of a complex multiplication or division is @code{NaN
7716 + I*NaN}, with an attempt to rescue the situation in that case.  The
7717 default is @option{-fno-cx-limited-range}, but is enabled by
7718 @option{-ffast-math}.
7719
7720 This option controls the default setting of the ISO C99
7721 @code{CX_LIMITED_RANGE} pragma.  Nevertheless, the option applies to
7722 all languages.
7723
7724 @item -fcx-fortran-rules
7725 @opindex fcx-fortran-rules
7726 Complex multiplication and division follow Fortran rules.  Range
7727 reduction is done as part of complex division, but there is no checking
7728 whether the result of a complex multiplication or division is @code{NaN
7729 + I*NaN}, with an attempt to rescue the situation in that case.
7730
7731 The default is @option{-fno-cx-fortran-rules}.
7732
7733 @end table
7734
7735 The following options control optimizations that may improve
7736 performance, but are not enabled by any @option{-O} options.  This
7737 section includes experimental options that may produce broken code.
7738
7739 @table @gcctabopt
7740 @item -fbranch-probabilities
7741 @opindex fbranch-probabilities
7742 After running a program compiled with @option{-fprofile-arcs}
7743 (@pxref{Debugging Options,, Options for Debugging Your Program or
7744 @command{gcc}}), you can compile it a second time using
7745 @option{-fbranch-probabilities}, to improve optimizations based on
7746 the number of times each branch was taken.  When the program
7747 compiled with @option{-fprofile-arcs} exits it saves arc execution
7748 counts to a file called @file{@var{sourcename}.gcda} for each source
7749 file.  The information in this data file is very dependent on the
7750 structure of the generated code, so you must use the same source code
7751 and the same optimization options for both compilations.
7752
7753 With @option{-fbranch-probabilities}, GCC puts a
7754 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
7755 These can be used to improve optimization.  Currently, they are only
7756 used in one place: in @file{reorg.c}, instead of guessing which path a
7757 branch is mostly to take, the @samp{REG_BR_PROB} values are used to
7758 exactly determine which path is taken more often.
7759
7760 @item -fprofile-values
7761 @opindex fprofile-values
7762 If combined with @option{-fprofile-arcs}, it adds code so that some
7763 data about values of expressions in the program is gathered.
7764
7765 With @option{-fbranch-probabilities}, it reads back the data gathered
7766 from profiling values of expressions and adds @samp{REG_VALUE_PROFILE}
7767 notes to instructions for their later usage in optimizations.
7768
7769 Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
7770
7771 @item -fvpt
7772 @opindex fvpt
7773 If combined with @option{-fprofile-arcs}, it instructs the compiler to add
7774 a code to gather information about values of expressions.
7775
7776 With @option{-fbranch-probabilities}, it reads back the data gathered
7777 and actually performs the optimizations based on them.
7778 Currently the optimizations include specialization of division operation
7779 using the knowledge about the value of the denominator.
7780
7781 @item -frename-registers
7782 @opindex frename-registers
7783 Attempt to avoid false dependencies in scheduled code by making use
7784 of registers left over after register allocation.  This optimization
7785 will most benefit processors with lots of registers.  Depending on the
7786 debug information format adopted by the target, however, it can
7787 make debugging impossible, since variables will no longer stay in
7788 a ``home register''.
7789
7790 Enabled by default with @option{-funroll-loops} and @option{-fpeel-loops}.
7791
7792 @item -ftracer
7793 @opindex ftracer
7794 Perform tail duplication to enlarge superblock size.  This transformation
7795 simplifies the control flow of the function allowing other optimizations to do
7796 better job.
7797
7798 Enabled with @option{-fprofile-use}.
7799
7800 @item -funroll-loops
7801 @opindex funroll-loops
7802 Unroll loops whose number of iterations can be determined at compile time or
7803 upon entry to the loop.  @option{-funroll-loops} implies
7804 @option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}.
7805 It also turns on complete loop peeling (i.e.@: complete removal of loops with
7806 small constant number of iterations).  This option makes code larger, and may
7807 or may not make it run faster.
7808
7809 Enabled with @option{-fprofile-use}.
7810
7811 @item -funroll-all-loops
7812 @opindex funroll-all-loops
7813 Unroll all loops, even if their number of iterations is uncertain when
7814 the loop is entered.  This usually makes programs run more slowly.
7815 @option{-funroll-all-loops} implies the same options as
7816 @option{-funroll-loops}.
7817
7818 @item -fpeel-loops
7819 @opindex fpeel-loops
7820 Peels the loops for that there is enough information that they do not
7821 roll much (from profile feedback).  It also turns on complete loop peeling
7822 (i.e.@: complete removal of loops with small constant number of iterations).
7823
7824 Enabled with @option{-fprofile-use}.
7825
7826 @item -fmove-loop-invariants
7827 @opindex fmove-loop-invariants
7828 Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
7829 at level @option{-O1}
7830
7831 @item -funswitch-loops
7832 @opindex funswitch-loops
7833 Move branches with loop invariant conditions out of the loop, with duplicates
7834 of the loop on both branches (modified according to result of the condition).
7835
7836 @item -ffunction-sections
7837 @itemx -fdata-sections
7838 @opindex ffunction-sections
7839 @opindex fdata-sections
7840 Place each function or data item into its own section in the output
7841 file if the target supports arbitrary sections.  The name of the
7842 function or the name of the data item determines the section's name
7843 in the output file.
7844
7845 Use these options on systems where the linker can perform optimizations
7846 to improve locality of reference in the instruction space.  Most systems
7847 using the ELF object format and SPARC processors running Solaris 2 have
7848 linkers with such optimizations.  AIX may have these optimizations in
7849 the future.
7850
7851 Only use these options when there are significant benefits from doing
7852 so.  When you specify these options, the assembler and linker will
7853 create larger object and executable files and will also be slower.
7854 You will not be able to use @code{gprof} on all systems if you
7855 specify this option and you may have problems with debugging if
7856 you specify both this option and @option{-g}.
7857
7858 @item -fbranch-target-load-optimize
7859 @opindex fbranch-target-load-optimize
7860 Perform branch target register load optimization before prologue / epilogue
7861 threading.
7862 The use of target registers can typically be exposed only during reload,
7863 thus hoisting loads out of loops and doing inter-block scheduling needs
7864 a separate optimization pass.
7865
7866 @item -fbranch-target-load-optimize2
7867 @opindex fbranch-target-load-optimize2
7868 Perform branch target register load optimization after prologue / epilogue
7869 threading.
7870
7871 @item -fbtr-bb-exclusive
7872 @opindex fbtr-bb-exclusive
7873 When performing branch target register load optimization, don't reuse
7874 branch target registers in within any basic block.
7875
7876 @item -fstack-protector
7877 @opindex fstack-protector
7878 Emit extra code to check for buffer overflows, such as stack smashing
7879 attacks.  This is done by adding a guard variable to functions with
7880 vulnerable objects.  This includes functions that call alloca, and
7881 functions with buffers larger than 8 bytes.  The guards are initialized
7882 when a function is entered and then checked when the function exits.
7883 If a guard check fails, an error message is printed and the program exits.
7884
7885 @item -fstack-protector-all
7886 @opindex fstack-protector-all
7887 Like @option{-fstack-protector} except that all functions are protected.
7888
7889 @item -fsection-anchors
7890 @opindex fsection-anchors
7891 Try to reduce the number of symbolic address calculations by using
7892 shared ``anchor'' symbols to address nearby objects.  This transformation
7893 can help to reduce the number of GOT entries and GOT accesses on some
7894 targets.
7895
7896 For example, the implementation of the following function @code{foo}:
7897
7898 @smallexample
7899 static int a, b, c;
7900 int foo (void) @{ return a + b + c; @}
7901 @end smallexample
7902
7903 would usually calculate the addresses of all three variables, but if you
7904 compile it with @option{-fsection-anchors}, it will access the variables
7905 from a common anchor point instead.  The effect is similar to the
7906 following pseudocode (which isn't valid C):
7907
7908 @smallexample
7909 int foo (void)
7910 @{
7911   register int *xr = &x;
7912   return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
7913 @}
7914 @end smallexample
7915
7916 Not all targets support this option.
7917
7918 @item --param @var{name}=@var{value}
7919 @opindex param
7920 In some places, GCC uses various constants to control the amount of
7921 optimization that is done.  For example, GCC will not inline functions
7922 that contain more that a certain number of instructions.  You can
7923 control some of these constants on the command-line using the
7924 @option{--param} option.
7925
7926 The names of specific parameters, and the meaning of the values, are
7927 tied to the internals of the compiler, and are subject to change
7928 without notice in future releases.
7929
7930 In each case, the @var{value} is an integer.  The allowable choices for
7931 @var{name} are given in the following table:
7932
7933 @table @gcctabopt
7934 @item struct-reorg-cold-struct-ratio
7935 The threshold ratio (as a percentage) between a structure frequency
7936 and the frequency of the hottest structure in the program.  This parameter
7937 is used by struct-reorg optimization enabled by @option{-fipa-struct-reorg}.
7938 We say that if the ratio of a structure frequency, calculated by profiling,
7939 to the hottest structure frequency in the program is less than this
7940 parameter, then structure reorganization is not applied to this structure.
7941 The default is 10.
7942
7943 @item predictable-branch-outcome
7944 When branch is predicted to be taken with probability lower than this threshold
7945 (in percent), then it is considered well predictable. The default is 10.
7946
7947 @item max-crossjump-edges
7948 The maximum number of incoming edges to consider for crossjumping.
7949 The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
7950 the number of edges incoming to each block.  Increasing values mean
7951 more aggressive optimization, making the compile time increase with
7952 probably small improvement in executable size.
7953
7954 @item min-crossjump-insns
7955 The minimum number of instructions which must be matched at the end
7956 of two blocks before crossjumping will be performed on them.  This
7957 value is ignored in the case where all instructions in the block being
7958 crossjumped from are matched.  The default value is 5.
7959
7960 @item max-grow-copy-bb-insns
7961 The maximum code size expansion factor when copying basic blocks
7962 instead of jumping.  The expansion is relative to a jump instruction.
7963 The default value is 8.
7964
7965 @item max-goto-duplication-insns
7966 The maximum number of instructions to duplicate to a block that jumps
7967 to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
7968 passes, GCC factors computed gotos early in the compilation process,
7969 and unfactors them as late as possible.  Only computed jumps at the
7970 end of a basic blocks with no more than max-goto-duplication-insns are
7971 unfactored.  The default value is 8.
7972
7973 @item max-delay-slot-insn-search
7974 The maximum number of instructions to consider when looking for an
7975 instruction to fill a delay slot.  If more than this arbitrary number of
7976 instructions is searched, the time savings from filling the delay slot
7977 will be minimal so stop searching.  Increasing values mean more
7978 aggressive optimization, making the compile time increase with probably
7979 small improvement in executable run time.
7980
7981 @item max-delay-slot-live-search
7982 When trying to fill delay slots, the maximum number of instructions to
7983 consider when searching for a block with valid live register
7984 information.  Increasing this arbitrarily chosen value means more
7985 aggressive optimization, increasing the compile time.  This parameter
7986 should be removed when the delay slot code is rewritten to maintain the
7987 control-flow graph.
7988
7989 @item max-gcse-memory
7990 The approximate maximum amount of memory that will be allocated in
7991 order to perform the global common subexpression elimination
7992 optimization.  If more memory than specified is required, the
7993 optimization will not be done.
7994
7995 @item max-pending-list-length
7996 The maximum number of pending dependencies scheduling will allow
7997 before flushing the current state and starting over.  Large functions
7998 with few branches or calls can create excessively large lists which
7999 needlessly consume memory and resources.
8000
8001 @item max-inline-insns-single
8002 Several parameters control the tree inliner used in gcc.
8003 This number sets the maximum number of instructions (counted in GCC's
8004 internal representation) in a single function that the tree inliner
8005 will consider for inlining.  This only affects functions declared
8006 inline and methods implemented in a class declaration (C++).
8007 The default value is 300.
8008
8009 @item max-inline-insns-auto
8010 When you use @option{-finline-functions} (included in @option{-O3}),
8011 a lot of functions that would otherwise not be considered for inlining
8012 by the compiler will be investigated.  To those functions, a different
8013 (more restrictive) limit compared to functions declared inline can
8014 be applied.
8015 The default value is 50.
8016
8017 @item large-function-insns
8018 The limit specifying really large functions.  For functions larger than this
8019 limit after inlining, inlining is constrained by
8020 @option{--param large-function-growth}.  This parameter is useful primarily
8021 to avoid extreme compilation time caused by non-linear algorithms used by the
8022 backend.
8023 The default value is 2700.
8024
8025 @item large-function-growth
8026 Specifies maximal growth of large function caused by inlining in percents.
8027 The default value is 100 which limits large function growth to 2.0 times
8028 the original size.
8029
8030 @item large-unit-insns
8031 The limit specifying large translation unit.  Growth caused by inlining of
8032 units larger than this limit is limited by @option{--param inline-unit-growth}.
8033 For small units this might be too tight (consider unit consisting of function A
8034 that is inline and B that just calls A three time.  If B is small relative to
8035 A, the growth of unit is 300\% and yet such inlining is very sane.  For very
8036 large units consisting of small inlineable functions however the overall unit
8037 growth limit is needed to avoid exponential explosion of code size.  Thus for
8038 smaller units, the size is increased to @option{--param large-unit-insns}
8039 before applying @option{--param inline-unit-growth}.  The default is 10000
8040
8041 @item inline-unit-growth
8042 Specifies maximal overall growth of the compilation unit caused by inlining.
8043 The default value is 30 which limits unit growth to 1.3 times the original
8044 size.
8045
8046 @item ipcp-unit-growth
8047 Specifies maximal overall growth of the compilation unit caused by
8048 interprocedural constant propagation.  The default value is 10 which limits
8049 unit growth to 1.1 times the original size.
8050
8051 @item large-stack-frame
8052 The limit specifying large stack frames.  While inlining the algorithm is trying
8053 to not grow past this limit too much.  Default value is 256 bytes.
8054
8055 @item large-stack-frame-growth
8056 Specifies maximal growth of large stack frames caused by inlining in percents.
8057 The default value is 1000 which limits large stack frame growth to 11 times
8058 the original size.
8059
8060 @item max-inline-insns-recursive
8061 @itemx max-inline-insns-recursive-auto
8062 Specifies maximum number of instructions out-of-line copy of self recursive inline
8063 function can grow into by performing recursive inlining.
8064
8065 For functions declared inline @option{--param max-inline-insns-recursive} is
8066 taken into account.  For function not declared inline, recursive inlining
8067 happens only when @option{-finline-functions} (included in @option{-O3}) is
8068 enabled and @option{--param max-inline-insns-recursive-auto} is used.  The
8069 default value is 450.
8070
8071 @item max-inline-recursive-depth
8072 @itemx max-inline-recursive-depth-auto
8073 Specifies maximum recursion depth used by the recursive inlining.
8074
8075 For functions declared inline @option{--param max-inline-recursive-depth} is
8076 taken into account.  For function not declared inline, recursive inlining
8077 happens only when @option{-finline-functions} (included in @option{-O3}) is
8078 enabled and @option{--param max-inline-recursive-depth-auto} is used.  The
8079 default value is 8.
8080
8081 @item min-inline-recursive-probability
8082 Recursive inlining is profitable only for function having deep recursion
8083 in average and can hurt for function having little recursion depth by
8084 increasing the prologue size or complexity of function body to other
8085 optimizers.
8086
8087 When profile feedback is available (see @option{-fprofile-generate}) the actual
8088 recursion depth can be guessed from probability that function will recurse via
8089 given call expression.  This parameter limits inlining only to call expression
8090 whose probability exceeds given threshold (in percents).  The default value is
8091 10.
8092
8093 @item early-inlining-insns
8094 Specify growth that early inliner can make.  In effect it increases amount of
8095 inlining for code having large abstraction penalty.  The default value is 8.
8096
8097 @item max-early-inliner-iterations
8098 @itemx max-early-inliner-iterations
8099 Limit of iterations of early inliner.  This basically bounds number of nested
8100 indirect calls early inliner can resolve.  Deeper chains are still handled by
8101 late inlining.
8102
8103 @item min-vect-loop-bound
8104 The minimum number of iterations under which a loop will not get vectorized
8105 when @option{-ftree-vectorize} is used.  The number of iterations after
8106 vectorization needs to be greater than the value specified by this option
8107 to allow vectorization.  The default value is 0.
8108
8109 @item max-unrolled-insns
8110 The maximum number of instructions that a loop should have if that loop
8111 is unrolled, and if the loop is unrolled, it determines how many times
8112 the loop code is unrolled.
8113
8114 @item max-average-unrolled-insns
8115 The maximum number of instructions biased by probabilities of their execution
8116 that a loop should have if that loop is unrolled, and if the loop is unrolled,
8117 it determines how many times the loop code is unrolled.
8118
8119 @item max-unroll-times
8120 The maximum number of unrollings of a single loop.
8121
8122 @item max-peeled-insns
8123 The maximum number of instructions that a loop should have if that loop
8124 is peeled, and if the loop is peeled, it determines how many times
8125 the loop code is peeled.
8126
8127 @item max-peel-times
8128 The maximum number of peelings of a single loop.
8129
8130 @item max-completely-peeled-insns
8131 The maximum number of insns of a completely peeled loop.
8132
8133 @item max-completely-peel-times
8134 The maximum number of iterations of a loop to be suitable for complete peeling.
8135
8136 @item max-completely-peel-loop-nest-depth
8137 The maximum depth of a loop nest suitable for complete peeling.
8138
8139 @item max-unswitch-insns
8140 The maximum number of insns of an unswitched loop.
8141
8142 @item max-unswitch-level
8143 The maximum number of branches unswitched in a single loop.
8144
8145 @item lim-expensive
8146 The minimum cost of an expensive expression in the loop invariant motion.
8147
8148 @item iv-consider-all-candidates-bound
8149 Bound on number of candidates for induction variables below that
8150 all candidates are considered for each use in induction variable
8151 optimizations.  Only the most relevant candidates are considered
8152 if there are more candidates, to avoid quadratic time complexity.
8153
8154 @item iv-max-considered-uses
8155 The induction variable optimizations give up on loops that contain more
8156 induction variable uses.
8157
8158 @item iv-always-prune-cand-set-bound
8159 If number of candidates in the set is smaller than this value,
8160 we always try to remove unnecessary ivs from the set during its
8161 optimization when a new iv is added to the set.
8162
8163 @item scev-max-expr-size
8164 Bound on size of expressions used in the scalar evolutions analyzer.
8165 Large expressions slow the analyzer.
8166
8167 @item omega-max-vars
8168 The maximum number of variables in an Omega constraint system.
8169 The default value is 128.
8170
8171 @item omega-max-geqs
8172 The maximum number of inequalities in an Omega constraint system.
8173 The default value is 256.
8174
8175 @item omega-max-eqs
8176 The maximum number of equalities in an Omega constraint system.
8177 The default value is 128.
8178
8179 @item omega-max-wild-cards
8180 The maximum number of wildcard variables that the Omega solver will
8181 be able to insert.  The default value is 18.
8182
8183 @item omega-hash-table-size
8184 The size of the hash table in the Omega solver.  The default value is
8185 550.
8186
8187 @item omega-max-keys
8188 The maximal number of keys used by the Omega solver.  The default
8189 value is 500.
8190
8191 @item omega-eliminate-redundant-constraints
8192 When set to 1, use expensive methods to eliminate all redundant
8193 constraints.  The default value is 0.
8194
8195 @item vect-max-version-for-alignment-checks
8196 The maximum number of runtime checks that can be performed when
8197 doing loop versioning for alignment in the vectorizer.  See option
8198 ftree-vect-loop-version for more information.
8199
8200 @item vect-max-version-for-alias-checks
8201 The maximum number of runtime checks that can be performed when
8202 doing loop versioning for alias in the vectorizer.  See option
8203 ftree-vect-loop-version for more information.
8204
8205 @item max-iterations-to-track
8206
8207 The maximum number of iterations of a loop the brute force algorithm
8208 for analysis of # of iterations of the loop tries to evaluate.
8209
8210 @item hot-bb-count-fraction
8211 Select fraction of the maximal count of repetitions of basic block in program
8212 given basic block needs to have to be considered hot.
8213
8214 @item hot-bb-frequency-fraction
8215 Select fraction of the maximal frequency of executions of basic block in
8216 function given basic block needs to have to be considered hot
8217
8218 @item max-predicted-iterations
8219 The maximum number of loop iterations we predict statically.  This is useful
8220 in cases where function contain single loop with known bound and other loop
8221 with unknown.  We predict the known number of iterations correctly, while
8222 the unknown number of iterations average to roughly 10.  This means that the
8223 loop without bounds would appear artificially cold relative to the other one.
8224
8225 @item align-threshold
8226
8227 Select fraction of the maximal frequency of executions of basic block in
8228 function given basic block will get aligned.
8229
8230 @item align-loop-iterations
8231
8232 A loop expected to iterate at lest the selected number of iterations will get
8233 aligned.
8234
8235 @item tracer-dynamic-coverage
8236 @itemx tracer-dynamic-coverage-feedback
8237
8238 This value is used to limit superblock formation once the given percentage of
8239 executed instructions is covered.  This limits unnecessary code size
8240 expansion.
8241
8242 The @option{tracer-dynamic-coverage-feedback} is used only when profile
8243 feedback is available.  The real profiles (as opposed to statically estimated
8244 ones) are much less balanced allowing the threshold to be larger value.
8245
8246 @item tracer-max-code-growth
8247 Stop tail duplication once code growth has reached given percentage.  This is
8248 rather hokey argument, as most of the duplicates will be eliminated later in
8249 cross jumping, so it may be set to much higher values than is the desired code
8250 growth.
8251
8252 @item tracer-min-branch-ratio
8253
8254 Stop reverse growth when the reverse probability of best edge is less than this
8255 threshold (in percent).
8256
8257 @item tracer-min-branch-ratio
8258 @itemx tracer-min-branch-ratio-feedback
8259
8260 Stop forward growth if the best edge do have probability lower than this
8261 threshold.
8262
8263 Similarly to @option{tracer-dynamic-coverage} two values are present, one for
8264 compilation for profile feedback and one for compilation without.  The value
8265 for compilation with profile feedback needs to be more conservative (higher) in
8266 order to make tracer effective.
8267
8268 @item max-cse-path-length
8269
8270 Maximum number of basic blocks on path that cse considers.  The default is 10.
8271
8272 @item max-cse-insns
8273 The maximum instructions CSE process before flushing. The default is 1000.
8274
8275 @item ggc-min-expand
8276
8277 GCC uses a garbage collector to manage its own memory allocation.  This
8278 parameter specifies the minimum percentage by which the garbage
8279 collector's heap should be allowed to expand between collections.
8280 Tuning this may improve compilation speed; it has no effect on code
8281 generation.
8282
8283 The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
8284 RAM >= 1GB@.  If @code{getrlimit} is available, the notion of "RAM" is
8285 the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
8286 GCC is not able to calculate RAM on a particular platform, the lower
8287 bound of 30% is used.  Setting this parameter and
8288 @option{ggc-min-heapsize} to zero causes a full collection to occur at
8289 every opportunity.  This is extremely slow, but can be useful for
8290 debugging.
8291
8292 @item ggc-min-heapsize
8293
8294 Minimum size of the garbage collector's heap before it begins bothering
8295 to collect garbage.  The first collection occurs after the heap expands
8296 by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
8297 tuning this may improve compilation speed, and has no effect on code
8298 generation.
8299
8300 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit which
8301 tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
8302 with a lower bound of 4096 (four megabytes) and an upper bound of
8303 131072 (128 megabytes).  If GCC is not able to calculate RAM on a
8304 particular platform, the lower bound is used.  Setting this parameter
8305 very large effectively disables garbage collection.  Setting this
8306 parameter and @option{ggc-min-expand} to zero causes a full collection
8307 to occur at every opportunity.
8308
8309 @item max-reload-search-insns
8310 The maximum number of instruction reload should look backward for equivalent
8311 register.  Increasing values mean more aggressive optimization, making the
8312 compile time increase with probably slightly better performance.  The default
8313 value is 100.
8314
8315 @item max-cselib-memory-locations
8316 The maximum number of memory locations cselib should take into account.
8317 Increasing values mean more aggressive optimization, making the compile time
8318 increase with probably slightly better performance.  The default value is 500.
8319
8320 @item reorder-blocks-duplicate
8321 @itemx reorder-blocks-duplicate-feedback
8322
8323 Used by basic block reordering pass to decide whether to use unconditional
8324 branch or duplicate the code on its destination.  Code is duplicated when its
8325 estimated size is smaller than this value multiplied by the estimated size of
8326 unconditional jump in the hot spots of the program.
8327
8328 The @option{reorder-block-duplicate-feedback} is used only when profile
8329 feedback is available and may be set to higher values than
8330 @option{reorder-block-duplicate} since information about the hot spots is more
8331 accurate.
8332
8333 @item max-sched-ready-insns
8334 The maximum number of instructions ready to be issued the scheduler should
8335 consider at any given time during the first scheduling pass.  Increasing
8336 values mean more thorough searches, making the compilation time increase
8337 with probably little benefit.  The default value is 100.
8338
8339 @item max-sched-region-blocks
8340 The maximum number of blocks in a region to be considered for
8341 interblock scheduling.  The default value is 10.
8342
8343 @item max-pipeline-region-blocks
8344 The maximum number of blocks in a region to be considered for
8345 pipelining in the selective scheduler.  The default value is 15.
8346
8347 @item max-sched-region-insns
8348 The maximum number of insns in a region to be considered for
8349 interblock scheduling.  The default value is 100.
8350
8351 @item max-pipeline-region-insns
8352 The maximum number of insns in a region to be considered for
8353 pipelining in the selective scheduler.  The default value is 200.
8354
8355 @item min-spec-prob
8356 The minimum probability (in percents) of reaching a source block
8357 for interblock speculative scheduling.  The default value is 40.
8358
8359 @item max-sched-extend-regions-iters
8360 The maximum number of iterations through CFG to extend regions.
8361 0 - disable region extension,
8362 N - do at most N iterations.
8363 The default value is 0.
8364
8365 @item max-sched-insn-conflict-delay
8366 The maximum conflict delay for an insn to be considered for speculative motion.
8367 The default value is 3.
8368
8369 @item sched-spec-prob-cutoff
8370 The minimal probability of speculation success (in percents), so that
8371 speculative insn will be scheduled.
8372 The default value is 40.
8373
8374 @item sched-mem-true-dep-cost
8375 Minimal distance (in CPU cycles) between store and load targeting same
8376 memory locations.  The default value is 1.
8377
8378 @item selsched-max-lookahead
8379 The maximum size of the lookahead window of selective scheduling.  It is a
8380 depth of search for available instructions.
8381 The default value is 50.
8382
8383 @item selsched-max-sched-times
8384 The maximum number of times that an instruction will be scheduled during
8385 selective scheduling.  This is the limit on the number of iterations
8386 through which the instruction may be pipelined.  The default value is 2.
8387
8388 @item selsched-max-insns-to-rename
8389 The maximum number of best instructions in the ready list that are considered
8390 for renaming in the selective scheduler.  The default value is 2.
8391
8392 @item max-last-value-rtl
8393 The maximum size measured as number of RTLs that can be recorded in an expression
8394 in combiner for a pseudo register as last known value of that register.  The default
8395 is 10000.
8396
8397 @item integer-share-limit
8398 Small integer constants can use a shared data structure, reducing the
8399 compiler's memory usage and increasing its speed.  This sets the maximum
8400 value of a shared integer constant.  The default value is 256.
8401
8402 @item min-virtual-mappings
8403 Specifies the minimum number of virtual mappings in the incremental
8404 SSA updater that should be registered to trigger the virtual mappings
8405 heuristic defined by virtual-mappings-ratio.  The default value is
8406 100.
8407
8408 @item virtual-mappings-ratio
8409 If the number of virtual mappings is virtual-mappings-ratio bigger
8410 than the number of virtual symbols to be updated, then the incremental
8411 SSA updater switches to a full update for those symbols.  The default
8412 ratio is 3.
8413
8414 @item ssp-buffer-size
8415 The minimum size of buffers (i.e.@: arrays) that will receive stack smashing
8416 protection when @option{-fstack-protection} is used.
8417
8418 @item max-jump-thread-duplication-stmts
8419 Maximum number of statements allowed in a block that needs to be
8420 duplicated when threading jumps.
8421
8422 @item max-fields-for-field-sensitive
8423 Maximum number of fields in a structure we will treat in
8424 a field sensitive manner during pointer analysis.  The default is zero
8425 for -O0, and -O1 and 100 for -Os, -O2, and -O3.
8426
8427 @item prefetch-latency
8428 Estimate on average number of instructions that are executed before
8429 prefetch finishes.  The distance we prefetch ahead is proportional
8430 to this constant.  Increasing this number may also lead to less
8431 streams being prefetched (see @option{simultaneous-prefetches}).
8432
8433 @item simultaneous-prefetches
8434 Maximum number of prefetches that can run at the same time.
8435
8436 @item l1-cache-line-size
8437 The size of cache line in L1 cache, in bytes.
8438
8439 @item l1-cache-size
8440 The size of L1 cache, in kilobytes.
8441
8442 @item l2-cache-size
8443 The size of L2 cache, in kilobytes.
8444
8445 @item min-insn-to-prefetch-ratio
8446 The minimum ratio between the number of instructions and the
8447 number of prefetches to enable prefetching in a loop with an
8448 unknown trip count.
8449
8450 @item prefetch-min-insn-to-mem-ratio
8451 The minimum ratio between the number of instructions and the
8452 number of memory references to enable prefetching in a loop.
8453
8454 @item use-canonical-types
8455 Whether the compiler should use the ``canonical'' type system.  By
8456 default, this should always be 1, which uses a more efficient internal
8457 mechanism for comparing types in C++ and Objective-C++.  However, if
8458 bugs in the canonical type system are causing compilation failures,
8459 set this value to 0 to disable canonical types.
8460
8461 @item switch-conversion-max-branch-ratio
8462 Switch initialization conversion will refuse to create arrays that are
8463 bigger than @option{switch-conversion-max-branch-ratio} times the number of
8464 branches in the switch.
8465
8466 @item max-partial-antic-length
8467 Maximum length of the partial antic set computed during the tree
8468 partial redundancy elimination optimization (@option{-ftree-pre}) when
8469 optimizing at @option{-O3} and above.  For some sorts of source code
8470 the enhanced partial redundancy elimination optimization can run away,
8471 consuming all of the memory available on the host machine.  This
8472 parameter sets a limit on the length of the sets that are computed,
8473 which prevents the runaway behavior.  Setting a value of 0 for
8474 this parameter will allow an unlimited set length.
8475
8476 @item sccvn-max-scc-size
8477 Maximum size of a strongly connected component (SCC) during SCCVN
8478 processing.  If this limit is hit, SCCVN processing for the whole
8479 function will not be done and optimizations depending on it will
8480 be disabled.  The default maximum SCC size is 10000.
8481
8482 @item ira-max-loops-num
8483 IRA uses a regional register allocation by default.  If a function
8484 contains loops more than number given by the parameter, only at most
8485 given number of the most frequently executed loops will form regions
8486 for the regional register allocation.  The default value of the
8487 parameter is 100.
8488
8489 @item ira-max-conflict-table-size
8490 Although IRA uses a sophisticated algorithm of compression conflict
8491 table, the table can be still big for huge functions.  If the conflict
8492 table for a function could be more than size in MB given by the
8493 parameter, the conflict table is not built and faster, simpler, and
8494 lower quality register allocation algorithm will be used.  The
8495 algorithm do not use pseudo-register conflicts.  The default value of
8496 the parameter is 2000.
8497
8498 @item ira-loop-reserved-regs
8499 IRA can be used to evaluate more accurate register pressure in loops
8500 for decision to move loop invariants (see @option{-O3}).  The number
8501 of available registers reserved for some other purposes is described
8502 by this parameter.  The default value of the parameter is 2 which is
8503 minimal number of registers needed for execution of typical
8504 instruction.  This value is the best found from numerous experiments.
8505
8506 @item loop-invariant-max-bbs-in-loop
8507 Loop invariant motion can be very expensive, both in compile time and
8508 in amount of needed compile time memory, with very large loops.  Loops
8509 with more basic blocks than this parameter won't have loop invariant
8510 motion optimization performed on them.  The default value of the
8511 parameter is 1000 for -O1 and 10000 for -O2 and above.
8512
8513 @item max-vartrack-size
8514 Sets a maximum number of hash table slots to use during variable
8515 tracking dataflow analysis of any function.  If this limit is exceeded
8516 with variable tracking at assignments enabled, analysis for that
8517 function is retried without it, after removing all debug insns from
8518 the function.  If the limit is exceeded even without debug insns, var
8519 tracking analysis is completely disabled for the function.  Setting
8520 the parameter to zero makes it unlimited.
8521
8522 @item min-nondebug-insn-uid
8523 Use uids starting at this parameter for nondebug insns.  The range below
8524 the parameter is reserved exclusively for debug insns created by
8525 @option{-fvar-tracking-assignments}, but debug insns may get
8526 (non-overlapping) uids above it if the reserved range is exhausted.
8527
8528 @item ipa-sra-ptr-growth-factor
8529 IPA-SRA will replace a pointer to an aggregate with one or more new
8530 parameters only when their cumulative size is less or equal to
8531 @option{ipa-sra-ptr-growth-factor} times the size of the original
8532 pointer parameter.
8533
8534 @item graphite-max-nb-scop-params
8535 To avoid exponential effects in the Graphite loop transforms, the
8536 number of parameters in a Static Control Part (SCoP) is bounded.  The
8537 default value is 10 parameters.  A variable whose value is unknown at
8538 compile time and defined outside a SCoP is a parameter of the SCoP.
8539
8540 @item graphite-max-bbs-per-function
8541 To avoid exponential effects in the detection of SCoPs, the size of
8542 the functions analyzed by Graphite is bounded.  The default value is
8543 100 basic blocks.
8544
8545 @item loop-block-tile-size
8546 Loop blocking or strip mining transforms, enabled with
8547 @option{-floop-block} or @option{-floop-strip-mine}, strip mine each
8548 loop in the loop nest by a given number of iterations.  The strip
8549 length can be changed using the @option{loop-block-tile-size}
8550 parameter.  The default value is 51 iterations.
8551
8552 @end table
8553 @end table
8554
8555 @node Preprocessor Options
8556 @section Options Controlling the Preprocessor
8557 @cindex preprocessor options
8558 @cindex options, preprocessor
8559
8560 These options control the C preprocessor, which is run on each C source
8561 file before actual compilation.
8562
8563 If you use the @option{-E} option, nothing is done except preprocessing.
8564 Some of these options make sense only together with @option{-E} because
8565 they cause the preprocessor output to be unsuitable for actual
8566 compilation.
8567
8568 @table @gcctabopt
8569 @item -Wp,@var{option}
8570 @opindex Wp
8571 You can use @option{-Wp,@var{option}} to bypass the compiler driver
8572 and pass @var{option} directly through to the preprocessor.  If
8573 @var{option} contains commas, it is split into multiple options at the
8574 commas.  However, many options are modified, translated or interpreted
8575 by the compiler driver before being passed to the preprocessor, and
8576 @option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
8577 interface is undocumented and subject to change, so whenever possible
8578 you should avoid using @option{-Wp} and let the driver handle the
8579 options instead.
8580
8581 @item -Xpreprocessor @var{option}
8582 @opindex Xpreprocessor
8583 Pass @var{option} as an option to the preprocessor.  You can use this to
8584 supply system-specific preprocessor options which GCC does not know how to
8585 recognize.
8586
8587 If you want to pass an option that takes an argument, you must use
8588 @option{-Xpreprocessor} twice, once for the option and once for the argument.
8589 @end table
8590
8591 @include cppopts.texi
8592
8593 @node Assembler Options
8594 @section Passing Options to the Assembler
8595
8596 @c prevent bad page break with this line
8597 You can pass options to the assembler.
8598
8599 @table @gcctabopt
8600 @item -Wa,@var{option}
8601 @opindex Wa
8602 Pass @var{option} as an option to the assembler.  If @var{option}
8603 contains commas, it is split into multiple options at the commas.
8604
8605 @item -Xassembler @var{option}
8606 @opindex Xassembler
8607 Pass @var{option} as an option to the assembler.  You can use this to
8608 supply system-specific assembler options which GCC does not know how to
8609 recognize.
8610
8611 If you want to pass an option that takes an argument, you must use
8612 @option{-Xassembler} twice, once for the option and once for the argument.
8613
8614 @end table
8615
8616 @node Link Options
8617 @section Options for Linking
8618 @cindex link options
8619 @cindex options, linking
8620
8621 These options come into play when the compiler links object files into
8622 an executable output file.  They are meaningless if the compiler is
8623 not doing a link step.
8624
8625 @table @gcctabopt
8626 @cindex file names
8627 @item @var{object-file-name}
8628 A file name that does not end in a special recognized suffix is
8629 considered to name an object file or library.  (Object files are
8630 distinguished from libraries by the linker according to the file
8631 contents.)  If linking is done, these object files are used as input
8632 to the linker.
8633
8634 @item -c
8635 @itemx -S
8636 @itemx -E
8637 @opindex c
8638 @opindex S
8639 @opindex E
8640 If any of these options is used, then the linker is not run, and
8641 object file names should not be used as arguments.  @xref{Overall
8642 Options}.
8643
8644 @cindex Libraries
8645 @item -l@var{library}
8646 @itemx -l @var{library}
8647 @opindex l
8648 Search the library named @var{library} when linking.  (The second
8649 alternative with the library as a separate argument is only for
8650 POSIX compliance and is not recommended.)
8651
8652 It makes a difference where in the command you write this option; the
8653 linker searches and processes libraries and object files in the order they
8654 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
8655 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
8656 to functions in @samp{z}, those functions may not be loaded.
8657
8658 The linker searches a standard list of directories for the library,
8659 which is actually a file named @file{lib@var{library}.a}.  The linker
8660 then uses this file as if it had been specified precisely by name.
8661
8662 The directories searched include several standard system directories
8663 plus any that you specify with @option{-L}.
8664
8665 Normally the files found this way are library files---archive files
8666 whose members are object files.  The linker handles an archive file by
8667 scanning through it for members which define symbols that have so far
8668 been referenced but not defined.  But if the file that is found is an
8669 ordinary object file, it is linked in the usual fashion.  The only
8670 difference between using an @option{-l} option and specifying a file name
8671 is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
8672 and searches several directories.
8673
8674 @item -lobjc
8675 @opindex lobjc
8676 You need this special case of the @option{-l} option in order to
8677 link an Objective-C or Objective-C++ program.
8678
8679 @item -nostartfiles
8680 @opindex nostartfiles
8681 Do not use the standard system startup files when linking.
8682 The standard system libraries are used normally, unless @option{-nostdlib}
8683 or @option{-nodefaultlibs} is used.
8684
8685 @item -nodefaultlibs
8686 @opindex nodefaultlibs
8687 Do not use the standard system libraries when linking.
8688 Only the libraries you specify will be passed to the linker, options
8689 specifying linkage of the system libraries, such as @code{-static-libgcc}
8690 or @code{-shared-libgcc}, will be ignored.
8691 The standard startup files are used normally, unless @option{-nostartfiles}
8692 is used.  The compiler may generate calls to @code{memcmp},
8693 @code{memset}, @code{memcpy} and @code{memmove}.
8694 These entries are usually resolved by entries in
8695 libc.  These entry points should be supplied through some other
8696 mechanism when this option is specified.
8697
8698 @item -nostdlib
8699 @opindex nostdlib
8700 Do not use the standard system startup files or libraries when linking.
8701 No startup files and only the libraries you specify will be passed to
8702 the linker, options specifying linkage of the system libraries, such as
8703 @code{-static-libgcc} or @code{-shared-libgcc}, will be ignored.
8704 The compiler may generate calls to @code{memcmp}, @code{memset},
8705 @code{memcpy} and @code{memmove}.
8706 These entries are usually resolved by entries in
8707 libc.  These entry points should be supplied through some other
8708 mechanism when this option is specified.
8709
8710 @cindex @option{-lgcc}, use with @option{-nostdlib}
8711 @cindex @option{-nostdlib} and unresolved references
8712 @cindex unresolved references and @option{-nostdlib}
8713 @cindex @option{-lgcc}, use with @option{-nodefaultlibs}
8714 @cindex @option{-nodefaultlibs} and unresolved references
8715 @cindex unresolved references and @option{-nodefaultlibs}
8716 One of the standard libraries bypassed by @option{-nostdlib} and
8717 @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
8718 that GCC uses to overcome shortcomings of particular machines, or special
8719 needs for some languages.
8720 (@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
8721 Collection (GCC) Internals},
8722 for more discussion of @file{libgcc.a}.)
8723 In most cases, you need @file{libgcc.a} even when you want to avoid
8724 other standard libraries.  In other words, when you specify @option{-nostdlib}
8725 or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
8726 This ensures that you have no unresolved references to internal GCC
8727 library subroutines.  (For example, @samp{__main}, used to ensure C++
8728 constructors will be called; @pxref{Collect2,,@code{collect2}, gccint,
8729 GNU Compiler Collection (GCC) Internals}.)
8730
8731 @item -pie
8732 @opindex pie
8733 Produce a position independent executable on targets which support it.
8734 For predictable results, you must also specify the same set of options
8735 that were used to generate code (@option{-fpie}, @option{-fPIE},
8736 or model suboptions) when you specify this option.
8737
8738 @item -rdynamic
8739 @opindex rdynamic
8740 Pass the flag @option{-export-dynamic} to the ELF linker, on targets
8741 that support it. This instructs the linker to add all symbols, not
8742 only used ones, to the dynamic symbol table. This option is needed
8743 for some uses of @code{dlopen} or to allow obtaining backtraces
8744 from within a program.
8745
8746 @item -s
8747 @opindex s
8748 Remove all symbol table and relocation information from the executable.
8749
8750 @item -static
8751 @opindex static
8752 On systems that support dynamic linking, this prevents linking with the shared
8753 libraries.  On other systems, this option has no effect.
8754
8755 @item -shared
8756 @opindex shared
8757 Produce a shared object which can then be linked with other objects to
8758 form an executable.  Not all systems support this option.  For predictable
8759 results, you must also specify the same set of options that were used to
8760 generate code (@option{-fpic}, @option{-fPIC}, or model suboptions)
8761 when you specify this option.@footnote{On some systems, @samp{gcc -shared}
8762 needs to build supplementary stub code for constructors to work.  On
8763 multi-libbed systems, @samp{gcc -shared} must select the correct support
8764 libraries to link against.  Failing to supply the correct flags may lead
8765 to subtle defects.  Supplying them in cases where they are not necessary
8766 is innocuous.}
8767
8768 @item -shared-libgcc
8769 @itemx -static-libgcc
8770 @opindex shared-libgcc
8771 @opindex static-libgcc
8772 On systems that provide @file{libgcc} as a shared library, these options
8773 force the use of either the shared or static version respectively.
8774 If no shared version of @file{libgcc} was built when the compiler was
8775 configured, these options have no effect.
8776
8777 There are several situations in which an application should use the
8778 shared @file{libgcc} instead of the static version.  The most common
8779 of these is when the application wishes to throw and catch exceptions
8780 across different shared libraries.  In that case, each of the libraries
8781 as well as the application itself should use the shared @file{libgcc}.
8782
8783 Therefore, the G++ and GCJ drivers automatically add
8784 @option{-shared-libgcc} whenever you build a shared library or a main
8785 executable, because C++ and Java programs typically use exceptions, so
8786 this is the right thing to do.
8787
8788 If, instead, you use the GCC driver to create shared libraries, you may
8789 find that they will not always be linked with the shared @file{libgcc}.
8790 If GCC finds, at its configuration time, that you have a non-GNU linker
8791 or a GNU linker that does not support option @option{--eh-frame-hdr},
8792 it will link the shared version of @file{libgcc} into shared libraries
8793 by default.  Otherwise, it will take advantage of the linker and optimize
8794 away the linking with the shared version of @file{libgcc}, linking with
8795 the static version of libgcc by default.  This allows exceptions to
8796 propagate through such shared libraries, without incurring relocation
8797 costs at library load time.
8798
8799 However, if a library or main executable is supposed to throw or catch
8800 exceptions, you must link it using the G++ or GCJ driver, as appropriate
8801 for the languages used in the program, or using the option
8802 @option{-shared-libgcc}, such that it is linked with the shared
8803 @file{libgcc}.
8804
8805 @item -static-libstdc++
8806 When the @command{g++} program is used to link a C++ program, it will
8807 normally automatically link against @option{libstdc++}.  If
8808 @file{libstdc++} is available as a shared library, and the
8809 @option{-static} option is not used, then this will link against the
8810 shared version of @file{libstdc++}.  That is normally fine.  However, it
8811 is sometimes useful to freeze the version of @file{libstdc++} used by
8812 the program without going all the way to a fully static link.  The
8813 @option{-static-libstdc++} option directs the @command{g++} driver to
8814 link @file{libstdc++} statically, without necessarily linking other
8815 libraries statically.
8816
8817 @item -symbolic
8818 @opindex symbolic
8819 Bind references to global symbols when building a shared object.  Warn
8820 about any unresolved references (unless overridden by the link editor
8821 option @samp{-Xlinker -z -Xlinker defs}).  Only a few systems support
8822 this option.
8823
8824 @item -T @var{script}
8825 @opindex T
8826 @cindex linker script
8827 Use @var{script} as the linker script.  This option is supported by most
8828 systems using the GNU linker.  On some targets, such as bare-board
8829 targets without an operating system, the @option{-T} option may be required
8830 when linking to avoid references to undefined symbols.
8831
8832 @item -Xlinker @var{option}
8833 @opindex Xlinker
8834 Pass @var{option} as an option to the linker.  You can use this to
8835 supply system-specific linker options which GCC does not know how to
8836 recognize.
8837
8838 If you want to pass an option that takes a separate argument, you must use
8839 @option{-Xlinker} twice, once for the option and once for the argument.
8840 For example, to pass @option{-assert definitions}, you must write
8841 @samp{-Xlinker -assert -Xlinker definitions}.  It does not work to write
8842 @option{-Xlinker "-assert definitions"}, because this passes the entire
8843 string as a single argument, which is not what the linker expects.
8844
8845 When using the GNU linker, it is usually more convenient to pass
8846 arguments to linker options using the @option{@var{option}=@var{value}}
8847 syntax than as separate arguments.  For example, you can specify
8848 @samp{-Xlinker -Map=output.map} rather than
8849 @samp{-Xlinker -Map -Xlinker output.map}.  Other linkers may not support
8850 this syntax for command-line options.
8851
8852 @item -Wl,@var{option}
8853 @opindex Wl
8854 Pass @var{option} as an option to the linker.  If @var{option} contains
8855 commas, it is split into multiple options at the commas.  You can use this
8856 syntax to pass an argument to the option.
8857 For example, @samp{-Wl,-Map,output.map} passes @samp{-Map output.map} to the
8858 linker.  When using the GNU linker, you can also get the same effect with
8859 @samp{-Wl,-Map=output.map}.
8860
8861 @item -u @var{symbol}
8862 @opindex u
8863 Pretend the symbol @var{symbol} is undefined, to force linking of
8864 library modules to define it.  You can use @option{-u} multiple times with
8865 different symbols to force loading of additional library modules.
8866 @end table
8867
8868 @node Directory Options
8869 @section Options for Directory Search
8870 @cindex directory options
8871 @cindex options, directory search
8872 @cindex search path
8873
8874 These options specify directories to search for header files, for
8875 libraries and for parts of the compiler:
8876
8877 @table @gcctabopt
8878 @item -I@var{dir}
8879 @opindex I
8880 Add the directory @var{dir} to the head of the list of directories to be
8881 searched for header files.  This can be used to override a system header
8882 file, substituting your own version, since these directories are
8883 searched before the system header file directories.  However, you should
8884 not use this option to add directories that contain vendor-supplied
8885 system header files (use @option{-isystem} for that).  If you use more than
8886 one @option{-I} option, the directories are scanned in left-to-right
8887 order; the standard system directories come after.
8888
8889 If a standard system include directory, or a directory specified with
8890 @option{-isystem}, is also specified with @option{-I}, the @option{-I}
8891 option will be ignored.  The directory will still be searched but as a
8892 system directory at its normal position in the system include chain.
8893 This is to ensure that GCC's procedure to fix buggy system headers and
8894 the ordering for the include_next directive are not inadvertently changed.
8895 If you really need to change the search order for system directories,
8896 use the @option{-nostdinc} and/or @option{-isystem} options.
8897
8898 @item -iquote@var{dir}
8899 @opindex iquote
8900 Add the directory @var{dir} to the head of the list of directories to
8901 be searched for header files only for the case of @samp{#include
8902 "@var{file}"}; they are not searched for @samp{#include <@var{file}>},
8903 otherwise just like @option{-I}.
8904
8905 @item -L@var{dir}
8906 @opindex L
8907 Add directory @var{dir} to the list of directories to be searched
8908 for @option{-l}.
8909
8910 @item -B@var{prefix}
8911 @opindex B
8912 This option specifies where to find the executables, libraries,
8913 include files, and data files of the compiler itself.
8914
8915 The compiler driver program runs one or more of the subprograms
8916 @file{cpp}, @file{cc1}, @file{as} and @file{ld}.  It tries
8917 @var{prefix} as a prefix for each program it tries to run, both with and
8918 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
8919
8920 For each subprogram to be run, the compiler driver first tries the
8921 @option{-B} prefix, if any.  If that name is not found, or if @option{-B}
8922 was not specified, the driver tries two standard prefixes, which are
8923 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
8924 those results in a file name that is found, the unmodified program
8925 name is searched for using the directories specified in your
8926 @env{PATH} environment variable.
8927
8928 The compiler will check to see if the path provided by the @option{-B}
8929 refers to a directory, and if necessary it will add a directory
8930 separator character at the end of the path.
8931
8932 @option{-B} prefixes that effectively specify directory names also apply
8933 to libraries in the linker, because the compiler translates these
8934 options into @option{-L} options for the linker.  They also apply to
8935 includes files in the preprocessor, because the compiler translates these
8936 options into @option{-isystem} options for the preprocessor.  In this case,
8937 the compiler appends @samp{include} to the prefix.
8938
8939 The run-time support file @file{libgcc.a} can also be searched for using
8940 the @option{-B} prefix, if needed.  If it is not found there, the two
8941 standard prefixes above are tried, and that is all.  The file is left
8942 out of the link if it is not found by those means.
8943
8944 Another way to specify a prefix much like the @option{-B} prefix is to use
8945 the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
8946 Variables}.
8947
8948 As a special kludge, if the path provided by @option{-B} is
8949 @file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
8950 9, then it will be replaced by @file{[dir/]include}.  This is to help
8951 with boot-strapping the compiler.
8952
8953 @item -specs=@var{file}
8954 @opindex specs
8955 Process @var{file} after the compiler reads in the standard @file{specs}
8956 file, in order to override the defaults that the @file{gcc} driver
8957 program uses when determining what switches to pass to @file{cc1},
8958 @file{cc1plus}, @file{as}, @file{ld}, etc.  More than one
8959 @option{-specs=@var{file}} can be specified on the command line, and they
8960 are processed in order, from left to right.
8961
8962 @item --sysroot=@var{dir}
8963 @opindex sysroot
8964 Use @var{dir} as the logical root directory for headers and libraries.
8965 For example, if the compiler would normally search for headers in
8966 @file{/usr/include} and libraries in @file{/usr/lib}, it will instead
8967 search @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}.
8968
8969 If you use both this option and the @option{-isysroot} option, then
8970 the @option{--sysroot} option will apply to libraries, but the
8971 @option{-isysroot} option will apply to header files.
8972
8973 The GNU linker (beginning with version 2.16) has the necessary support
8974 for this option.  If your linker does not support this option, the
8975 header file aspect of @option{--sysroot} will still work, but the
8976 library aspect will not.
8977
8978 @item -I-
8979 @opindex I-
8980 This option has been deprecated.  Please use @option{-iquote} instead for
8981 @option{-I} directories before the @option{-I-} and remove the @option{-I-}.
8982 Any directories you specify with @option{-I} options before the @option{-I-}
8983 option are searched only for the case of @samp{#include "@var{file}"};
8984 they are not searched for @samp{#include <@var{file}>}.
8985
8986 If additional directories are specified with @option{-I} options after
8987 the @option{-I-}, these directories are searched for all @samp{#include}
8988 directives.  (Ordinarily @emph{all} @option{-I} directories are used
8989 this way.)
8990
8991 In addition, the @option{-I-} option inhibits the use of the current
8992 directory (where the current input file came from) as the first search
8993 directory for @samp{#include "@var{file}"}.  There is no way to
8994 override this effect of @option{-I-}.  With @option{-I.} you can specify
8995 searching the directory which was current when the compiler was
8996 invoked.  That is not exactly the same as what the preprocessor does
8997 by default, but it is often satisfactory.
8998
8999 @option{-I-} does not inhibit the use of the standard system directories
9000 for header files.  Thus, @option{-I-} and @option{-nostdinc} are
9001 independent.
9002 @end table
9003
9004 @c man end
9005
9006 @node Spec Files
9007 @section Specifying subprocesses and the switches to pass to them
9008 @cindex Spec Files
9009
9010 @command{gcc} is a driver program.  It performs its job by invoking a
9011 sequence of other programs to do the work of compiling, assembling and
9012 linking.  GCC interprets its command-line parameters and uses these to
9013 deduce which programs it should invoke, and which command-line options
9014 it ought to place on their command lines.  This behavior is controlled
9015 by @dfn{spec strings}.  In most cases there is one spec string for each
9016 program that GCC can invoke, but a few programs have multiple spec
9017 strings to control their behavior.  The spec strings built into GCC can
9018 be overridden by using the @option{-specs=} command-line switch to specify
9019 a spec file.
9020
9021 @dfn{Spec files} are plaintext files that are used to construct spec
9022 strings.  They consist of a sequence of directives separated by blank
9023 lines.  The type of directive is determined by the first non-whitespace
9024 character on the line and it can be one of the following:
9025
9026 @table @code
9027 @item %@var{command}
9028 Issues a @var{command} to the spec file processor.  The commands that can
9029 appear here are:
9030
9031 @table @code
9032 @item %include <@var{file}>
9033 @cindex %include
9034 Search for @var{file} and insert its text at the current point in the
9035 specs file.
9036
9037 @item %include_noerr <@var{file}>
9038 @cindex %include_noerr
9039 Just like @samp{%include}, but do not generate an error message if the include
9040 file cannot be found.
9041
9042 @item %rename @var{old_name} @var{new_name}
9043 @cindex %rename
9044 Rename the spec string @var{old_name} to @var{new_name}.
9045
9046 @end table
9047
9048 @item *[@var{spec_name}]:
9049 This tells the compiler to create, override or delete the named spec
9050 string.  All lines after this directive up to the next directive or
9051 blank line are considered to be the text for the spec string.  If this
9052 results in an empty string then the spec will be deleted.  (Or, if the
9053 spec did not exist, then nothing will happened.)  Otherwise, if the spec
9054 does not currently exist a new spec will be created.  If the spec does
9055 exist then its contents will be overridden by the text of this
9056 directive, unless the first character of that text is the @samp{+}
9057 character, in which case the text will be appended to the spec.
9058
9059 @item [@var{suffix}]:
9060 Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
9061 and up to the next directive or blank line are considered to make up the
9062 spec string for the indicated suffix.  When the compiler encounters an
9063 input file with the named suffix, it will processes the spec string in
9064 order to work out how to compile that file.  For example:
9065
9066 @smallexample
9067 .ZZ:
9068 z-compile -input %i
9069 @end smallexample
9070
9071 This says that any input file whose name ends in @samp{.ZZ} should be
9072 passed to the program @samp{z-compile}, which should be invoked with the
9073 command-line switch @option{-input} and with the result of performing the
9074 @samp{%i} substitution.  (See below.)
9075
9076 As an alternative to providing a spec string, the text that follows a
9077 suffix directive can be one of the following:
9078
9079 @table @code
9080 @item @@@var{language}
9081 This says that the suffix is an alias for a known @var{language}.  This is
9082 similar to using the @option{-x} command-line switch to GCC to specify a
9083 language explicitly.  For example:
9084
9085 @smallexample
9086 .ZZ:
9087 @@c++
9088 @end smallexample
9089
9090 Says that .ZZ files are, in fact, C++ source files.
9091
9092 @item #@var{name}
9093 This causes an error messages saying:
9094
9095 @smallexample
9096 @var{name} compiler not installed on this system.
9097 @end smallexample
9098 @end table
9099
9100 GCC already has an extensive list of suffixes built into it.
9101 This directive will add an entry to the end of the list of suffixes, but
9102 since the list is searched from the end backwards, it is effectively
9103 possible to override earlier entries using this technique.
9104
9105 @end table
9106
9107 GCC has the following spec strings built into it.  Spec files can
9108 override these strings or create their own.  Note that individual
9109 targets can also add their own spec strings to this list.
9110
9111 @smallexample
9112 asm          Options to pass to the assembler
9113 asm_final    Options to pass to the assembler post-processor
9114 cpp          Options to pass to the C preprocessor
9115 cc1          Options to pass to the C compiler
9116 cc1plus      Options to pass to the C++ compiler
9117 endfile      Object files to include at the end of the link
9118 link         Options to pass to the linker
9119 lib          Libraries to include on the command line to the linker
9120 libgcc       Decides which GCC support library to pass to the linker
9121 linker       Sets the name of the linker
9122 predefines   Defines to be passed to the C preprocessor
9123 signed_char  Defines to pass to CPP to say whether @code{char} is signed
9124              by default
9125 startfile    Object files to include at the start of the link
9126 @end smallexample
9127
9128 Here is a small example of a spec file:
9129
9130 @smallexample
9131 %rename lib                 old_lib
9132
9133 *lib:
9134 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
9135 @end smallexample
9136
9137 This example renames the spec called @samp{lib} to @samp{old_lib} and
9138 then overrides the previous definition of @samp{lib} with a new one.
9139 The new definition adds in some extra command-line options before
9140 including the text of the old definition.
9141
9142 @dfn{Spec strings} are a list of command-line options to be passed to their
9143 corresponding program.  In addition, the spec strings can contain
9144 @samp{%}-prefixed sequences to substitute variable text or to
9145 conditionally insert text into the command line.  Using these constructs
9146 it is possible to generate quite complex command lines.
9147
9148 Here is a table of all defined @samp{%}-sequences for spec
9149 strings.  Note that spaces are not generated automatically around the
9150 results of expanding these sequences.  Therefore you can concatenate them
9151 together or combine them with constant text in a single argument.
9152
9153 @table @code
9154 @item %%
9155 Substitute one @samp{%} into the program name or argument.
9156
9157 @item %i
9158 Substitute the name of the input file being processed.
9159
9160 @item %b
9161 Substitute the basename of the input file being processed.
9162 This is the substring up to (and not including) the last period
9163 and not including the directory.
9164
9165 @item %B
9166 This is the same as @samp{%b}, but include the file suffix (text after
9167 the last period).
9168
9169 @item %d
9170 Marks the argument containing or following the @samp{%d} as a
9171 temporary file name, so that that file will be deleted if GCC exits
9172 successfully.  Unlike @samp{%g}, this contributes no text to the
9173 argument.
9174
9175 @item %g@var{suffix}
9176 Substitute a file name that has suffix @var{suffix} and is chosen
9177 once per compilation, and mark the argument in the same way as
9178 @samp{%d}.  To reduce exposure to denial-of-service attacks, the file
9179 name is now chosen in a way that is hard to predict even when previously
9180 chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
9181 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
9182 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
9183 treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
9184 was simply substituted with a file name chosen once per compilation,
9185 without regard to any appended suffix (which was therefore treated
9186 just like ordinary text), making such attacks more likely to succeed.
9187
9188 @item %u@var{suffix}
9189 Like @samp{%g}, but generates a new temporary file name even if
9190 @samp{%u@var{suffix}} was already seen.
9191
9192 @item %U@var{suffix}
9193 Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
9194 new one if there is no such last file name.  In the absence of any
9195 @samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
9196 the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
9197 would involve the generation of two distinct file names, one
9198 for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
9199 simply substituted with a file name chosen for the previous @samp{%u},
9200 without regard to any appended suffix.
9201
9202 @item %j@var{suffix}
9203 Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
9204 writable, and if save-temps is off; otherwise, substitute the name
9205 of a temporary file, just like @samp{%u}.  This temporary file is not
9206 meant for communication between processes, but rather as a junk
9207 disposal mechanism.
9208
9209 @item %|@var{suffix}
9210 @itemx %m@var{suffix}
9211 Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
9212 @samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
9213 all.  These are the two most common ways to instruct a program that it
9214 should read from standard input or write to standard output.  If you
9215 need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
9216 construct: see for example @file{f/lang-specs.h}.
9217
9218 @item %.@var{SUFFIX}
9219 Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
9220 when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
9221 terminated by the next space or %.
9222
9223 @item %w
9224 Marks the argument containing or following the @samp{%w} as the
9225 designated output file of this compilation.  This puts the argument
9226 into the sequence of arguments that @samp{%o} will substitute later.
9227
9228 @item %o
9229 Substitutes the names of all the output files, with spaces
9230 automatically placed around them.  You should write spaces
9231 around the @samp{%o} as well or the results are undefined.
9232 @samp{%o} is for use in the specs for running the linker.
9233 Input files whose names have no recognized suffix are not compiled
9234 at all, but they are included among the output files, so they will
9235 be linked.
9236
9237 @item %O
9238 Substitutes the suffix for object files.  Note that this is
9239 handled specially when it immediately follows @samp{%g, %u, or %U},
9240 because of the need for those to form complete file names.  The
9241 handling is such that @samp{%O} is treated exactly as if it had already
9242 been substituted, except that @samp{%g, %u, and %U} do not currently
9243 support additional @var{suffix} characters following @samp{%O} as they would
9244 following, for example, @samp{.o}.
9245
9246 @item %p
9247 Substitutes the standard macro predefinitions for the
9248 current target machine.  Use this when running @code{cpp}.
9249
9250 @item %P
9251 Like @samp{%p}, but puts @samp{__} before and after the name of each
9252 predefined macro, except for macros that start with @samp{__} or with
9253 @samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
9254 C@.
9255
9256 @item %I
9257 Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
9258 @option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
9259 @option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
9260 and @option{-imultilib} as necessary.
9261
9262 @item %s
9263 Current argument is the name of a library or startup file of some sort.
9264 Search for that file in a standard list of directories and substitute
9265 the full name found.  The current working directory is included in the
9266 list of directories scanned.
9267
9268 @item %T
9269 Current argument is the name of a linker script.  Search for that file
9270 in the current list of directories to scan for libraries. If the file
9271 is located insert a @option{--script} option into the command line
9272 followed by the full path name found.  If the file is not found then
9273 generate an error message.  Note: the current working directory is not
9274 searched.
9275
9276 @item %e@var{str}
9277 Print @var{str} as an error message.  @var{str} is terminated by a newline.
9278 Use this when inconsistent options are detected.
9279
9280 @item %(@var{name})
9281 Substitute the contents of spec string @var{name} at this point.
9282
9283 @item %[@var{name}]
9284 Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments.
9285
9286 @item %x@{@var{option}@}
9287 Accumulate an option for @samp{%X}.
9288
9289 @item %X
9290 Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
9291 spec string.
9292
9293 @item %Y
9294 Output the accumulated assembler options specified by @option{-Wa}.
9295
9296 @item %Z
9297 Output the accumulated preprocessor options specified by @option{-Wp}.
9298
9299 @item %a
9300 Process the @code{asm} spec.  This is used to compute the
9301 switches to be passed to the assembler.
9302
9303 @item %A
9304 Process the @code{asm_final} spec.  This is a spec string for
9305 passing switches to an assembler post-processor, if such a program is
9306 needed.
9307
9308 @item %l
9309 Process the @code{link} spec.  This is the spec for computing the
9310 command line passed to the linker.  Typically it will make use of the
9311 @samp{%L %G %S %D and %E} sequences.
9312
9313 @item %D
9314 Dump out a @option{-L} option for each directory that GCC believes might
9315 contain startup files.  If the target supports multilibs then the
9316 current multilib directory will be prepended to each of these paths.
9317
9318 @item %L
9319 Process the @code{lib} spec.  This is a spec string for deciding which
9320 libraries should be included on the command line to the linker.
9321
9322 @item %G
9323 Process the @code{libgcc} spec.  This is a spec string for deciding
9324 which GCC support library should be included on the command line to the linker.
9325
9326 @item %S
9327 Process the @code{startfile} spec.  This is a spec for deciding which
9328 object files should be the first ones passed to the linker.  Typically
9329 this might be a file named @file{crt0.o}.
9330
9331 @item %E
9332 Process the @code{endfile} spec.  This is a spec string that specifies
9333 the last object files that will be passed to the linker.
9334
9335 @item %C
9336 Process the @code{cpp} spec.  This is used to construct the arguments
9337 to be passed to the C preprocessor.
9338
9339 @item %1
9340 Process the @code{cc1} spec.  This is used to construct the options to be
9341 passed to the actual C compiler (@samp{cc1}).
9342
9343 @item %2
9344 Process the @code{cc1plus} spec.  This is used to construct the options to be
9345 passed to the actual C++ compiler (@samp{cc1plus}).
9346
9347 @item %*
9348 Substitute the variable part of a matched option.  See below.
9349 Note that each comma in the substituted string is replaced by
9350 a single space.
9351
9352 @item %<@code{S}
9353 Remove all occurrences of @code{-S} from the command line.  Note---this
9354 command is position dependent.  @samp{%} commands in the spec string
9355 before this one will see @code{-S}, @samp{%} commands in the spec string
9356 after this one will not.
9357
9358 @item %:@var{function}(@var{args})
9359 Call the named function @var{function}, passing it @var{args}.
9360 @var{args} is first processed as a nested spec string, then split
9361 into an argument vector in the usual fashion.  The function returns
9362 a string which is processed as if it had appeared literally as part
9363 of the current spec.
9364
9365 The following built-in spec functions are provided:
9366
9367 @table @code
9368 @item @code{getenv}
9369 The @code{getenv} spec function takes two arguments: an environment
9370 variable name and a string.  If the environment variable is not
9371 defined, a fatal error is issued.  Otherwise, the return value is the
9372 value of the environment variable concatenated with the string.  For
9373 example, if @env{TOPDIR} is defined as @file{/path/to/top}, then:
9374
9375 @smallexample
9376 %:getenv(TOPDIR /include)
9377 @end smallexample
9378
9379 expands to @file{/path/to/top/include}.
9380
9381 @item @code{if-exists}
9382 The @code{if-exists} spec function takes one argument, an absolute
9383 pathname to a file.  If the file exists, @code{if-exists} returns the
9384 pathname.  Here is a small example of its usage:
9385
9386 @smallexample
9387 *startfile:
9388 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
9389 @end smallexample
9390
9391 @item @code{if-exists-else}
9392 The @code{if-exists-else} spec function is similar to the @code{if-exists}
9393 spec function, except that it takes two arguments.  The first argument is
9394 an absolute pathname to a file.  If the file exists, @code{if-exists-else}
9395 returns the pathname.  If it does not exist, it returns the second argument.
9396 This way, @code{if-exists-else} can be used to select one file or another,
9397 based on the existence of the first.  Here is a small example of its usage:
9398
9399 @smallexample
9400 *startfile:
9401 crt0%O%s %:if-exists(crti%O%s) \
9402 %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
9403 @end smallexample
9404
9405 @item @code{replace-outfile}
9406 The @code{replace-outfile} spec function takes two arguments.  It looks for the
9407 first argument in the outfiles array and replaces it with the second argument.  Here
9408 is a small example of its usage:
9409
9410 @smallexample
9411 %@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@}
9412 @end smallexample
9413
9414 @item @code{print-asm-header}
9415 The @code{print-asm-header} function takes no arguments and simply
9416 prints a banner like:
9417
9418 @smallexample
9419 Assembler options
9420 =================
9421
9422 Use "-Wa,OPTION" to pass "OPTION" to the assembler.
9423 @end smallexample
9424
9425 It is used to separate compiler options from assembler options
9426 in the @option{--target-help} output.
9427 @end table
9428
9429 @item %@{@code{S}@}
9430 Substitutes the @code{-S} switch, if that switch was given to GCC@.
9431 If that switch was not specified, this substitutes nothing.  Note that
9432 the leading dash is omitted when specifying this option, and it is
9433 automatically inserted if the substitution is performed.  Thus the spec
9434 string @samp{%@{foo@}} would match the command-line option @option{-foo}
9435 and would output the command line option @option{-foo}.
9436
9437 @item %W@{@code{S}@}
9438 Like %@{@code{S}@} but mark last argument supplied within as a file to be
9439 deleted on failure.
9440
9441 @item %@{@code{S}*@}
9442 Substitutes all the switches specified to GCC whose names start
9443 with @code{-S}, but which also take an argument.  This is used for
9444 switches like @option{-o}, @option{-D}, @option{-I}, etc.
9445 GCC considers @option{-o foo} as being
9446 one switch whose names starts with @samp{o}.  %@{o*@} would substitute this
9447 text, including the space.  Thus two arguments would be generated.
9448
9449 @item %@{@code{S}*&@code{T}*@}
9450 Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
9451 (the order of @code{S} and @code{T} in the spec is not significant).
9452 There can be any number of ampersand-separated variables; for each the
9453 wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.
9454
9455 @item %@{@code{S}:@code{X}@}
9456 Substitutes @code{X}, if the @samp{-S} switch was given to GCC@.
9457
9458 @item %@{!@code{S}:@code{X}@}
9459 Substitutes @code{X}, if the @samp{-S} switch was @emph{not} given to GCC@.
9460
9461 @item %@{@code{S}*:@code{X}@}
9462 Substitutes @code{X} if one or more switches whose names start with
9463 @code{-S} are specified to GCC@.  Normally @code{X} is substituted only
9464 once, no matter how many such switches appeared.  However, if @code{%*}
9465 appears somewhere in @code{X}, then @code{X} will be substituted once
9466 for each matching switch, with the @code{%*} replaced by the part of
9467 that switch that matched the @code{*}.
9468
9469 @item %@{.@code{S}:@code{X}@}
9470 Substitutes @code{X}, if processing a file with suffix @code{S}.
9471
9472 @item %@{!.@code{S}:@code{X}@}
9473 Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
9474
9475 @item %@{,@code{S}:@code{X}@}
9476 Substitutes @code{X}, if processing a file for language @code{S}.
9477
9478 @item %@{!,@code{S}:@code{X}@}
9479 Substitutes @code{X}, if not processing a file for language @code{S}.
9480
9481 @item %@{@code{S}|@code{P}:@code{X}@}
9482 Substitutes @code{X} if either @code{-S} or @code{-P} was given to
9483 GCC@.  This may be combined with @samp{!}, @samp{.}, @samp{,}, and
9484 @code{*} sequences as well, although they have a stronger binding than
9485 the @samp{|}.  If @code{%*} appears in @code{X}, all of the
9486 alternatives must be starred, and only the first matching alternative
9487 is substituted.
9488
9489 For example, a spec string like this:
9490
9491 @smallexample
9492 %@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
9493 @end smallexample
9494
9495 will output the following command-line options from the following input
9496 command-line options:
9497
9498 @smallexample
9499 fred.c        -foo -baz
9500 jim.d         -bar -boggle
9501 -d fred.c     -foo -baz -boggle
9502 -d jim.d      -bar -baz -boggle
9503 @end smallexample
9504
9505 @item %@{S:X; T:Y; :D@}
9506
9507 If @code{S} was given to GCC, substitutes @code{X}; else if @code{T} was
9508 given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
9509 be as many clauses as you need.  This may be combined with @code{.},
9510 @code{,}, @code{!}, @code{|}, and @code{*} as needed.
9511
9512
9513 @end table
9514
9515 The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
9516 construct may contain other nested @samp{%} constructs or spaces, or
9517 even newlines.  They are processed as usual, as described above.
9518 Trailing white space in @code{X} is ignored.  White space may also
9519 appear anywhere on the left side of the colon in these constructs,
9520 except between @code{.} or @code{*} and the corresponding word.
9521
9522 The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
9523 handled specifically in these constructs.  If another value of
9524 @option{-O} or the negated form of a @option{-f}, @option{-m}, or
9525 @option{-W} switch is found later in the command line, the earlier
9526 switch value is ignored, except with @{@code{S}*@} where @code{S} is
9527 just one letter, which passes all matching options.
9528
9529 The character @samp{|} at the beginning of the predicate text is used to
9530 indicate that a command should be piped to the following command, but
9531 only if @option{-pipe} is specified.
9532
9533 It is built into GCC which switches take arguments and which do not.
9534 (You might think it would be useful to generalize this to allow each
9535 compiler's spec to say which switches take arguments.  But this cannot
9536 be done in a consistent fashion.  GCC cannot even decide which input
9537 files have been specified without knowing which switches take arguments,
9538 and it must know which input files to compile in order to tell which
9539 compilers to run).
9540
9541 GCC also knows implicitly that arguments starting in @option{-l} are to be
9542 treated as compiler output files, and passed to the linker in their
9543 proper position among the other output files.
9544
9545 @c man begin OPTIONS
9546
9547 @node Target Options
9548 @section Specifying Target Machine and Compiler Version
9549 @cindex target options
9550 @cindex cross compiling
9551 @cindex specifying machine version
9552 @cindex specifying compiler version and target machine
9553 @cindex compiler version, specifying
9554 @cindex target machine, specifying
9555
9556 The usual way to run GCC is to run the executable called @file{gcc}, or
9557 @file{<machine>-gcc} when cross-compiling, or
9558 @file{<machine>-gcc-<version>} to run a version other than the one that
9559 was installed last.  Sometimes this is inconvenient, so GCC provides
9560 options that will switch to another cross-compiler or version.
9561
9562 @table @gcctabopt
9563 @item -b @var{machine}
9564 @opindex b
9565 The argument @var{machine} specifies the target machine for compilation.
9566
9567 The value to use for @var{machine} is the same as was specified as the
9568 machine type when configuring GCC as a cross-compiler.  For
9569 example, if a cross-compiler was configured with @samp{configure
9570 arm-elf}, meaning to compile for an arm processor with elf binaries,
9571 then you would specify @option{-b arm-elf} to run that cross compiler.
9572 Because there are other options beginning with @option{-b}, the
9573 configuration must contain a hyphen, or @option{-b} alone should be one
9574 argument followed by the configuration in the next argument.
9575
9576 @item -V @var{version}
9577 @opindex V
9578 The argument @var{version} specifies which version of GCC to run.
9579 This is useful when multiple versions are installed.  For example,
9580 @var{version} might be @samp{4.0}, meaning to run GCC version 4.0.
9581 @end table
9582
9583 The @option{-V} and @option{-b} options work by running the
9584 @file{<machine>-gcc-<version>} executable, so there's no real reason to
9585 use them if you can just run that directly.
9586
9587 @node Submodel Options
9588 @section Hardware Models and Configurations
9589 @cindex submodel options
9590 @cindex specifying hardware config
9591 @cindex hardware models and configurations, specifying
9592 @cindex machine dependent options
9593
9594 Earlier we discussed the standard option @option{-b} which chooses among
9595 different installed compilers for completely different target
9596 machines, such as VAX vs.@: 68000 vs.@: 80386.
9597
9598 In addition, each of these target machine types can have its own
9599 special options, starting with @samp{-m}, to choose among various
9600 hardware models or configurations---for example, 68010 vs 68020,
9601 floating coprocessor or none.  A single installed version of the
9602 compiler can compile for any model or configuration, according to the
9603 options specified.
9604
9605 Some configurations of the compiler also support additional special
9606 options, usually for compatibility with other compilers on the same
9607 platform.
9608
9609 @c This list is ordered alphanumerically by subsection name.
9610 @c It should be the same order and spelling as these options are listed
9611 @c in Machine Dependent Options
9612
9613 @menu
9614 * ARC Options::
9615 * ARM Options::
9616 * AVR Options::
9617 * Blackfin Options::
9618 * CRIS Options::
9619 * CRX Options::
9620 * Darwin Options::
9621 * DEC Alpha Options::
9622 * DEC Alpha/VMS Options::
9623 * FR30 Options::
9624 * FRV Options::
9625 * GNU/Linux Options::
9626 * H8/300 Options::
9627 * HPPA Options::
9628 * i386 and x86-64 Options::
9629 * i386 and x86-64 Windows Options::
9630 * IA-64 Options::
9631 * IA-64/VMS Options::
9632 * LM32 Options::
9633 * M32C Options::
9634 * M32R/D Options::
9635 * M680x0 Options::
9636 * M68hc1x Options::
9637 * MCore Options::
9638 * MeP Options::
9639 * MIPS Options::
9640 * MMIX Options::
9641 * MN10300 Options::
9642 * PDP-11 Options::
9643 * picoChip Options::
9644 * PowerPC Options::
9645 * RS/6000 and PowerPC Options::
9646 * RX Options::
9647 * S/390 and zSeries Options::
9648 * Score Options::
9649 * SH Options::
9650 * SPARC Options::
9651 * SPU Options::
9652 * System V Options::
9653 * V850 Options::
9654 * VAX Options::
9655 * VxWorks Options::
9656 * x86-64 Options::
9657 * Xstormy16 Options::
9658 * Xtensa Options::
9659 * zSeries Options::
9660 @end menu
9661
9662 @node ARC Options
9663 @subsection ARC Options
9664 @cindex ARC Options
9665
9666 These options are defined for ARC implementations:
9667
9668 @table @gcctabopt
9669 @item -EL
9670 @opindex EL
9671 Compile code for little endian mode.  This is the default.
9672
9673 @item -EB
9674 @opindex EB
9675 Compile code for big endian mode.
9676
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.
9685
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.
9691
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}.
9702
9703 @item -mfix-cortex-m3-ldrd
9704 @opindex mfix-cortex-m3-ldrd
9705 Some Cortex-M3 cores can cause data corruption when @code{ldrd} instructions
9706 with overlapping destination and base registers are used.  This option avoids
9707 generating these instructions.  This option is enabled by default when
9708 @option{-mcpu=cortex-m3} is specified.
9709
9710 @end table
9711
9712 @node ARM Options
9713 @subsection ARM Options
9714 @cindex ARM options
9715
9716 These @samp{-m} options are defined for Advanced RISC Machines (ARM)
9717 architectures:
9718
9719 @table @gcctabopt
9720 @item -mabi=@var{name}
9721 @opindex mabi
9722 Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
9723 @samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.
9724
9725 @item -mapcs-frame
9726 @opindex mapcs-frame
9727 Generate a stack frame that is compliant with the ARM Procedure Call
9728 Standard for all functions, even if this is not strictly necessary for
9729 correct execution of the code.  Specifying @option{-fomit-frame-pointer}
9730 with this option will cause the stack frames not to be generated for
9731 leaf functions.  The default is @option{-mno-apcs-frame}.
9732
9733 @item -mapcs
9734 @opindex mapcs
9735 This is a synonym for @option{-mapcs-frame}.
9736
9737 @ignore
9738 @c not currently implemented
9739 @item -mapcs-stack-check
9740 @opindex mapcs-stack-check
9741 Generate code to check the amount of stack space available upon entry to
9742 every function (that actually uses some stack space).  If there is
9743 insufficient space available then either the function
9744 @samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
9745 called, depending upon the amount of stack space required.  The run time
9746 system is required to provide these functions.  The default is
9747 @option{-mno-apcs-stack-check}, since this produces smaller code.
9748
9749 @c not currently implemented
9750 @item -mapcs-float
9751 @opindex mapcs-float
9752 Pass floating point arguments using the float point registers.  This is
9753 one of the variants of the APCS@.  This option is recommended if the
9754 target hardware has a floating point unit or if a lot of floating point
9755 arithmetic is going to be performed by the code.  The default is
9756 @option{-mno-apcs-float}, since integer only code is slightly increased in
9757 size if @option{-mapcs-float} is used.
9758
9759 @c not currently implemented
9760 @item -mapcs-reentrant
9761 @opindex mapcs-reentrant
9762 Generate reentrant, position independent code.  The default is
9763 @option{-mno-apcs-reentrant}.
9764 @end ignore
9765
9766 @item -mthumb-interwork
9767 @opindex mthumb-interwork
9768 Generate code which supports calling between the ARM and Thumb
9769 instruction sets.  Without this option the two instruction sets cannot
9770 be reliably used inside one program.  The default is
9771 @option{-mno-thumb-interwork}, since slightly larger code is generated
9772 when @option{-mthumb-interwork} is specified.
9773
9774 @item -mno-sched-prolog
9775 @opindex mno-sched-prolog
9776 Prevent the reordering of instructions in the function prolog, or the
9777 merging of those instruction with the instructions in the function's
9778 body.  This means that all functions will start with a recognizable set
9779 of instructions (or in fact one of a choice from a small set of
9780 different function prologues), and this information can be used to
9781 locate the start if functions inside an executable piece of code.  The
9782 default is @option{-msched-prolog}.
9783
9784 @item -mfloat-abi=@var{name}
9785 @opindex mfloat-abi
9786 Specifies which floating-point ABI to use.  Permissible values
9787 are: @samp{soft}, @samp{softfp} and @samp{hard}.
9788
9789 Specifying @samp{soft} causes GCC to generate output containing
9790 library calls for floating-point operations.
9791 @samp{softfp} allows the generation of code using hardware floating-point
9792 instructions, but still uses the soft-float calling conventions.
9793 @samp{hard} allows generation of floating-point instructions
9794 and uses FPU-specific calling conventions.
9795
9796 The default depends on the specific target configuration.  Note that
9797 the hard-float and soft-float ABIs are not link-compatible; you must
9798 compile your entire program with the same ABI, and link with a
9799 compatible set of libraries.
9800
9801 @item -mhard-float
9802 @opindex mhard-float
9803 Equivalent to @option{-mfloat-abi=hard}.
9804
9805 @item -msoft-float
9806 @opindex msoft-float
9807 Equivalent to @option{-mfloat-abi=soft}.
9808
9809 @item -mlittle-endian
9810 @opindex mlittle-endian
9811 Generate code for a processor running in little-endian mode.  This is
9812 the default for all standard configurations.
9813
9814 @item -mbig-endian
9815 @opindex mbig-endian
9816 Generate code for a processor running in big-endian mode; the default is
9817 to compile code for a little-endian processor.
9818
9819 @item -mwords-little-endian
9820 @opindex mwords-little-endian
9821 This option only applies when generating code for big-endian processors.
9822 Generate code for a little-endian word order but a big-endian byte
9823 order.  That is, a byte order of the form @samp{32107654}.  Note: this
9824 option should only be used if you require compatibility with code for
9825 big-endian ARM processors generated by versions of the compiler prior to
9826 2.8.
9827
9828 @item -mcpu=@var{name}
9829 @opindex mcpu
9830 This specifies the name of the target ARM processor.  GCC uses this name
9831 to determine what kind of instructions it can emit when generating
9832 assembly code.  Permissible names are: @samp{arm2}, @samp{arm250},
9833 @samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
9834 @samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
9835 @samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
9836 @samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
9837 @samp{arm720},
9838 @samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s},
9839 @samp{arm710t}, @samp{arm720t}, @samp{arm740t},
9840 @samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
9841 @samp{strongarm1110},
9842 @samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
9843 @samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s},
9844 @samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi},
9845 @samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s},
9846 @samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
9847 @samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
9848 @samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
9849 @samp{cortex-a5}, @samp{cortex-a8}, @samp{cortex-a9},
9850 @samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-m3},
9851 @samp{cortex-m1},
9852 @samp{cortex-m0},
9853 @samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
9854
9855 @item -mtune=@var{name}
9856 @opindex mtune
9857 This option is very similar to the @option{-mcpu=} option, except that
9858 instead of specifying the actual target processor type, and hence
9859 restricting which instructions can be used, it specifies that GCC should
9860 tune the performance of the code as if the target were of the type
9861 specified in this option, but still choosing the instructions that it
9862 will generate based on the cpu specified by a @option{-mcpu=} option.
9863 For some ARM implementations better performance can be obtained by using
9864 this option.
9865
9866 @item -march=@var{name}
9867 @opindex march
9868 This specifies the name of the target ARM architecture.  GCC uses this
9869 name to determine what kind of instructions it can emit when generating
9870 assembly code.  This option can be used in conjunction with or instead
9871 of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
9872 @samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
9873 @samp{armv5}, @samp{armv5t}, @samp{armv5e}, @samp{armv5te},
9874 @samp{armv6}, @samp{armv6j},
9875 @samp{armv6t2}, @samp{armv6z}, @samp{armv6zk}, @samp{armv6-m},
9876 @samp{armv7}, @samp{armv7-a}, @samp{armv7-r}, @samp{armv7-m},
9877 @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
9878
9879 @item -mfpu=@var{name}
9880 @itemx -mfpe=@var{number}
9881 @itemx -mfp=@var{number}
9882 @opindex mfpu
9883 @opindex mfpe
9884 @opindex mfp
9885 This specifies what floating point hardware (or hardware emulation) is
9886 available on the target.  Permissible names are: @samp{fpa}, @samp{fpe2},
9887 @samp{fpe3}, @samp{maverick}, @samp{vfp}, @samp{vfpv3}, @samp{vfpv3-fp16},
9888 @samp{vfpv3-d16}, @samp{vfpv3-d16-fp16}, @samp{vfpv3xd}, @samp{vfpv3xd-fp16},
9889 @samp{neon}, @samp{neon-fp16}, @samp{vfpv4}, @samp{vfpv4-d16},
9890 @samp{fpv4-sp-d16} and @samp{neon-vfpv4}.
9891 @option{-mfp} and @option{-mfpe} are synonyms for
9892 @option{-mfpu}=@samp{fpe}@var{number}, for compatibility with older versions
9893 of GCC@.
9894
9895 If @option{-msoft-float} is specified this specifies the format of
9896 floating point values.
9897
9898 @item -mfp16-format=@var{name}
9899 @opindex mfp16-format
9900 Specify the format of the @code{__fp16} half-precision floating-point type.
9901 Permissible names are @samp{none}, @samp{ieee}, and @samp{alternative};
9902 the default is @samp{none}, in which case the @code{__fp16} type is not
9903 defined.  @xref{Half-Precision}, for more information.
9904
9905 @item -mstructure-size-boundary=@var{n}
9906 @opindex mstructure-size-boundary
9907 The size of all structures and unions will be rounded up to a multiple
9908 of the number of bits set by this option.  Permissible values are 8, 32
9909 and 64.  The default value varies for different toolchains.  For the COFF
9910 targeted toolchain the default value is 8.  A value of 64 is only allowed
9911 if the underlying ABI supports it.
9912
9913 Specifying the larger number can produce faster, more efficient code, but
9914 can also increase the size of the program.  Different values are potentially
9915 incompatible.  Code compiled with one value cannot necessarily expect to
9916 work with code or libraries compiled with another value, if they exchange
9917 information using structures or unions.
9918
9919 @item -mabort-on-noreturn
9920 @opindex mabort-on-noreturn
9921 Generate a call to the function @code{abort} at the end of a
9922 @code{noreturn} function.  It will be executed if the function tries to
9923 return.
9924
9925 @item -mlong-calls
9926 @itemx -mno-long-calls
9927 @opindex mlong-calls
9928 @opindex mno-long-calls
9929 Tells the compiler to perform function calls by first loading the
9930 address of the function into a register and then performing a subroutine
9931 call on this register.  This switch is needed if the target function
9932 will lie outside of the 64 megabyte addressing range of the offset based
9933 version of subroutine call instruction.
9934
9935 Even if this switch is enabled, not all function calls will be turned
9936 into long calls.  The heuristic is that static functions, functions
9937 which have the @samp{short-call} attribute, functions that are inside
9938 the scope of a @samp{#pragma no_long_calls} directive and functions whose
9939 definitions have already been compiled within the current compilation
9940 unit, will not be turned into long calls.  The exception to this rule is
9941 that weak function definitions, functions with the @samp{long-call}
9942 attribute or the @samp{section} attribute, and functions that are within
9943 the scope of a @samp{#pragma long_calls} directive, will always be
9944 turned into long calls.
9945
9946 This feature is not enabled by default.  Specifying
9947 @option{-mno-long-calls} will restore the default behavior, as will
9948 placing the function calls within the scope of a @samp{#pragma
9949 long_calls_off} directive.  Note these switches have no effect on how
9950 the compiler generates code to handle function calls via function
9951 pointers.
9952
9953 @item -msingle-pic-base
9954 @opindex msingle-pic-base
9955 Treat the register used for PIC addressing as read-only, rather than
9956 loading it in the prologue for each function.  The run-time system is
9957 responsible for initializing this register with an appropriate value
9958 before execution begins.
9959
9960 @item -mpic-register=@var{reg}
9961 @opindex mpic-register
9962 Specify the register to be used for PIC addressing.  The default is R10
9963 unless stack-checking is enabled, when R9 is used.
9964
9965 @item -mcirrus-fix-invalid-insns
9966 @opindex mcirrus-fix-invalid-insns
9967 @opindex mno-cirrus-fix-invalid-insns
9968 Insert NOPs into the instruction stream to in order to work around
9969 problems with invalid Maverick instruction combinations.  This option
9970 is only valid if the @option{-mcpu=ep9312} option has been used to
9971 enable generation of instructions for the Cirrus Maverick floating
9972 point co-processor.  This option is not enabled by default, since the
9973 problem is only present in older Maverick implementations.  The default
9974 can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns}
9975 switch.
9976
9977 @item -mpoke-function-name
9978 @opindex mpoke-function-name
9979 Write the name of each function into the text section, directly
9980 preceding the function prologue.  The generated code is similar to this:
9981
9982 @smallexample
9983      t0
9984          .ascii "arm_poke_function_name", 0
9985          .align
9986      t1
9987          .word 0xff000000 + (t1 - t0)
9988      arm_poke_function_name
9989          mov     ip, sp
9990          stmfd   sp!, @{fp, ip, lr, pc@}
9991          sub     fp, ip, #4
9992 @end smallexample
9993
9994 When performing a stack backtrace, code can inspect the value of
9995 @code{pc} stored at @code{fp + 0}.  If the trace function then looks at
9996 location @code{pc - 12} and the top 8 bits are set, then we know that
9997 there is a function name embedded immediately preceding this location
9998 and has length @code{((pc[-3]) & 0xff000000)}.
9999
10000 @item -mthumb
10001 @opindex mthumb
10002 Generate code for the Thumb instruction set.  The default is to
10003 use the 32-bit ARM instruction set.
10004 This option automatically enables either 16-bit Thumb-1 or
10005 mixed 16/32-bit Thumb-2 instructions based on the @option{-mcpu=@var{name}}
10006 and @option{-march=@var{name}} options.  This option is not passed to the
10007 assembler. If you want to force assembler files to be interpreted as Thumb code,
10008 either add a @samp{.thumb} directive to the source or pass the @option{-mthumb}
10009 option directly to the assembler by prefixing it with @option{-Wa}.
10010
10011 @item -mtpcs-frame
10012 @opindex mtpcs-frame
10013 Generate a stack frame that is compliant with the Thumb Procedure Call
10014 Standard for all non-leaf functions.  (A leaf function is one that does
10015 not call any other functions.)  The default is @option{-mno-tpcs-frame}.
10016
10017 @item -mtpcs-leaf-frame
10018 @opindex mtpcs-leaf-frame
10019 Generate a stack frame that is compliant with the Thumb Procedure Call
10020 Standard for all leaf functions.  (A leaf function is one that does
10021 not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.
10022
10023 @item -mcallee-super-interworking
10024 @opindex mcallee-super-interworking
10025 Gives all externally visible functions in the file being compiled an ARM
10026 instruction set header which switches to Thumb mode before executing the
10027 rest of the function.  This allows these functions to be called from
10028 non-interworking code.  This option is not valid in AAPCS configurations
10029 because interworking is enabled by default.
10030
10031 @item -mcaller-super-interworking
10032 @opindex mcaller-super-interworking
10033 Allows calls via function pointers (including virtual functions) to
10034 execute correctly regardless of whether the target code has been
10035 compiled for interworking or not.  There is a small overhead in the cost
10036 of executing a function pointer if this option is enabled.  This option
10037 is not valid in AAPCS configurations because interworking is enabled
10038 by default.
10039
10040 @item -mtp=@var{name}
10041 @opindex mtp
10042 Specify the access model for the thread local storage pointer.  The valid
10043 models are @option{soft}, which generates calls to @code{__aeabi_read_tp},
10044 @option{cp15}, which fetches the thread pointer from @code{cp15} directly
10045 (supported in the arm6k architecture), and @option{auto}, which uses the
10046 best available method for the selected processor.  The default setting is
10047 @option{auto}.
10048
10049 @item -mword-relocations
10050 @opindex mword-relocations
10051 Only generate absolute relocations on word sized values (i.e. R_ARM_ABS32).
10052 This is enabled by default on targets (uClinux, SymbianOS) where the runtime
10053 loader imposes this restriction, and when @option{-fpic} or @option{-fPIC}
10054 is specified.
10055
10056 @end table
10057
10058 @node AVR Options
10059 @subsection AVR Options
10060 @cindex AVR Options
10061
10062 These options are defined for AVR implementations:
10063
10064 @table @gcctabopt
10065 @item -mmcu=@var{mcu}
10066 @opindex mmcu
10067 Specify ATMEL AVR instruction set or MCU type.
10068
10069 Instruction set avr1 is for the minimal AVR core, not supported by the C
10070 compiler, only for assembler programs (MCU types: at90s1200, attiny10,
10071 attiny11, attiny12, attiny15, attiny28).
10072
10073 Instruction set avr2 (default) is for the classic AVR core with up to
10074 8K program memory space (MCU types: at90s2313, at90s2323, attiny22,
10075 at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
10076 at90c8534, at90s8535).
10077
10078 Instruction set avr3 is for the classic AVR core with up to 128K program
10079 memory space (MCU types: atmega103, atmega603, at43usb320, at76c711).
10080
10081 Instruction set avr4 is for the enhanced AVR core with up to 8K program
10082 memory space (MCU types: atmega8, atmega83, atmega85).
10083
10084 Instruction set avr5 is for the enhanced AVR core with up to 128K program
10085 memory space (MCU types: atmega16, atmega161, atmega163, atmega32, atmega323,
10086 atmega64, atmega128, at43usb355, at94k).
10087
10088 @item -mno-interrupts
10089 @opindex mno-interrupts
10090 Generated code is not compatible with hardware interrupts.
10091 Code size will be smaller.
10092
10093 @item -mcall-prologues
10094 @opindex mcall-prologues
10095 Functions prologues/epilogues expanded as call to appropriate
10096 subroutines.  Code size will be smaller.
10097
10098 @item -mtiny-stack
10099 @opindex mtiny-stack
10100 Change only the low 8 bits of the stack pointer.
10101
10102 @item -mint8
10103 @opindex mint8
10104 Assume int to be 8 bit integer.  This affects the sizes of all types: A
10105 char will be 1 byte, an int will be 1 byte, a long will be 2 bytes
10106 and long long will be 4 bytes.  Please note that this option does not
10107 comply to the C standards, but it will provide you with smaller code
10108 size.
10109 @end table
10110
10111 @node Blackfin Options
10112 @subsection Blackfin Options
10113 @cindex Blackfin Options
10114
10115 @table @gcctabopt
10116 @item -mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]}
10117 @opindex mcpu=
10118 Specifies the name of the target Blackfin processor.  Currently, @var{cpu}
10119 can be one of @samp{bf512}, @samp{bf514}, @samp{bf516}, @samp{bf518},
10120 @samp{bf522}, @samp{bf523}, @samp{bf524}, @samp{bf525}, @samp{bf526},
10121 @samp{bf527}, @samp{bf531}, @samp{bf532}, @samp{bf533},
10122 @samp{bf534}, @samp{bf536}, @samp{bf537}, @samp{bf538}, @samp{bf539},
10123 @samp{bf542}, @samp{bf544}, @samp{bf547}, @samp{bf548}, @samp{bf549},
10124 @samp{bf542m}, @samp{bf544m}, @samp{bf547m}, @samp{bf548m}, @samp{bf549m},
10125 @samp{bf561}.
10126 The optional @var{sirevision} specifies the silicon revision of the target
10127 Blackfin processor.  Any workarounds available for the targeted silicon revision
10128 will be enabled.  If @var{sirevision} is @samp{none}, no workarounds are enabled.
10129 If @var{sirevision} is @samp{any}, all workarounds for the targeted processor
10130 will be enabled.  The @code{__SILICON_REVISION__} macro is defined to two
10131 hexadecimal digits representing the major and minor numbers in the silicon
10132 revision.  If @var{sirevision} is @samp{none}, the @code{__SILICON_REVISION__}
10133 is not defined.  If @var{sirevision} is @samp{any}, the
10134 @code{__SILICON_REVISION__} is defined to be @code{0xffff}.
10135 If this optional @var{sirevision} is not used, GCC assumes the latest known
10136 silicon revision of the targeted Blackfin processor.
10137
10138 Support for @samp{bf561} is incomplete.  For @samp{bf561},
10139 Only the processor macro is defined.
10140 Without this option, @samp{bf532} is used as the processor by default.
10141 The corresponding predefined processor macros for @var{cpu} is to
10142 be defined.  And for @samp{bfin-elf} toolchain, this causes the hardware BSP
10143 provided by libgloss to be linked in if @option{-msim} is not given.
10144
10145 @item -msim
10146 @opindex msim
10147 Specifies that the program will be run on the simulator.  This causes
10148 the simulator BSP provided by libgloss to be linked in.  This option
10149 has effect only for @samp{bfin-elf} toolchain.
10150 Certain other options, such as @option{-mid-shared-library} and
10151 @option{-mfdpic}, imply @option{-msim}.
10152
10153 @item -momit-leaf-frame-pointer
10154 @opindex momit-leaf-frame-pointer
10155 Don't keep the frame pointer in a register for leaf functions.  This
10156 avoids the instructions to save, set up and restore frame pointers and
10157 makes an extra register available in leaf functions.  The option
10158 @option{-fomit-frame-pointer} removes the frame pointer for all functions
10159 which might make debugging harder.
10160
10161 @item -mspecld-anomaly
10162 @opindex mspecld-anomaly
10163 When enabled, the compiler will ensure that the generated code does not
10164 contain speculative loads after jump instructions. If this option is used,
10165 @code{__WORKAROUND_SPECULATIVE_LOADS} is defined.
10166
10167 @item -mno-specld-anomaly
10168 @opindex mno-specld-anomaly
10169 Don't generate extra code to prevent speculative loads from occurring.
10170
10171 @item -mcsync-anomaly
10172 @opindex mcsync-anomaly
10173 When enabled, the compiler will ensure that the generated code does not
10174 contain CSYNC or SSYNC instructions too soon after conditional branches.
10175 If this option is used, @code{__WORKAROUND_SPECULATIVE_SYNCS} is defined.
10176
10177 @item -mno-csync-anomaly
10178 @opindex mno-csync-anomaly
10179 Don't generate extra code to prevent CSYNC or SSYNC instructions from
10180 occurring too soon after a conditional branch.
10181
10182 @item -mlow-64k
10183 @opindex mlow-64k
10184 When enabled, the compiler is free to take advantage of the knowledge that
10185 the entire program fits into the low 64k of memory.
10186
10187 @item -mno-low-64k
10188 @opindex mno-low-64k
10189 Assume that the program is arbitrarily large.  This is the default.
10190
10191 @item -mstack-check-l1
10192 @opindex mstack-check-l1
10193 Do stack checking using information placed into L1 scratchpad memory by the
10194 uClinux kernel.
10195
10196 @item -mid-shared-library
10197 @opindex mid-shared-library
10198 Generate code that supports shared libraries via the library ID method.
10199 This allows for execute in place and shared libraries in an environment
10200 without virtual memory management.  This option implies @option{-fPIC}.
10201 With a @samp{bfin-elf} target, this option implies @option{-msim}.
10202
10203 @item -mno-id-shared-library
10204 @opindex mno-id-shared-library
10205 Generate code that doesn't assume ID based shared libraries are being used.
10206 This is the default.
10207
10208 @item -mleaf-id-shared-library
10209 @opindex mleaf-id-shared-library
10210 Generate code that supports shared libraries via the library ID method,
10211 but assumes that this library or executable won't link against any other
10212 ID shared libraries.  That allows the compiler to use faster code for jumps
10213 and calls.
10214
10215 @item -mno-leaf-id-shared-library
10216 @opindex mno-leaf-id-shared-library
10217 Do not assume that the code being compiled won't link against any ID shared
10218 libraries.  Slower code will be generated for jump and call insns.
10219
10220 @item -mshared-library-id=n
10221 @opindex mshared-library-id
10222 Specified the identification number of the ID based shared library being
10223 compiled.  Specifying a value of 0 will generate more compact code, specifying
10224 other values will force the allocation of that number to the current
10225 library but is no more space or time efficient than omitting this option.
10226
10227 @item -msep-data
10228 @opindex msep-data
10229 Generate code that allows the data segment to be located in a different
10230 area of memory from the text segment.  This allows for execute in place in
10231 an environment without virtual memory management by eliminating relocations
10232 against the text section.
10233
10234 @item -mno-sep-data
10235 @opindex mno-sep-data
10236 Generate code that assumes that the data segment follows the text segment.
10237 This is the default.
10238
10239 @item -mlong-calls
10240 @itemx -mno-long-calls
10241 @opindex mlong-calls
10242 @opindex mno-long-calls
10243 Tells the compiler to perform function calls by first loading the
10244 address of the function into a register and then performing a subroutine
10245 call on this register.  This switch is needed if the target function
10246 will lie outside of the 24 bit addressing range of the offset based
10247 version of subroutine call instruction.
10248
10249 This feature is not enabled by default.  Specifying
10250 @option{-mno-long-calls} will restore the default behavior.  Note these
10251 switches have no effect on how the compiler generates code to handle
10252 function calls via function pointers.
10253
10254 @item -mfast-fp
10255 @opindex mfast-fp
10256 Link with the fast floating-point library. This library relaxes some of
10257 the IEEE floating-point standard's rules for checking inputs against
10258 Not-a-Number (NAN), in the interest of performance.
10259
10260 @item -minline-plt
10261 @opindex minline-plt
10262 Enable inlining of PLT entries in function calls to functions that are
10263 not known to bind locally.  It has no effect without @option{-mfdpic}.
10264
10265 @item -mmulticore
10266 @opindex mmulticore
10267 Build standalone application for multicore Blackfin processor. Proper
10268 start files and link scripts will be used to support multicore.
10269 This option defines @code{__BFIN_MULTICORE}. It can only be used with
10270 @option{-mcpu=bf561@r{[}-@var{sirevision}@r{]}}. It can be used with
10271 @option{-mcorea} or @option{-mcoreb}. If it's used without
10272 @option{-mcorea} or @option{-mcoreb}, single application/dual core
10273 programming model is used. In this model, the main function of Core B
10274 should be named as coreb_main. If it's used with @option{-mcorea} or
10275 @option{-mcoreb}, one application per core programming model is used.
10276 If this option is not used, single core application programming
10277 model is used.
10278
10279 @item -mcorea
10280 @opindex mcorea
10281 Build standalone application for Core A of BF561 when using
10282 one application per core programming model. Proper start files
10283 and link scripts will be used to support Core A. This option
10284 defines @code{__BFIN_COREA}. It must be used with @option{-mmulticore}.
10285
10286 @item -mcoreb
10287 @opindex mcoreb
10288 Build standalone application for Core B of BF561 when using
10289 one application per core programming model. Proper start files
10290 and link scripts will be used to support Core B. This option
10291 defines @code{__BFIN_COREB}. When this option is used, coreb_main
10292 should be used instead of main. It must be used with
10293 @option{-mmulticore}.
10294
10295 @item -msdram
10296 @opindex msdram
10297 Build standalone application for SDRAM. Proper start files and
10298 link scripts will be used to put the application into SDRAM.
10299 Loader should initialize SDRAM before loading the application
10300 into SDRAM. This option defines @code{__BFIN_SDRAM}.
10301
10302 @item -micplb
10303 @opindex micplb
10304 Assume that ICPLBs are enabled at runtime.  This has an effect on certain
10305 anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
10306 are enabled; for standalone applications the default is off.
10307 @end table
10308
10309 @node CRIS Options
10310 @subsection CRIS Options
10311 @cindex CRIS Options
10312
10313 These options are defined specifically for the CRIS ports.
10314
10315 @table @gcctabopt
10316 @item -march=@var{architecture-type}
10317 @itemx -mcpu=@var{architecture-type}
10318 @opindex march
10319 @opindex mcpu
10320 Generate code for the specified architecture.  The choices for
10321 @var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
10322 respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@.
10323 Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
10324 @samp{v10}.
10325
10326 @item -mtune=@var{architecture-type}
10327 @opindex mtune
10328 Tune to @var{architecture-type} everything applicable about the generated
10329 code, except for the ABI and the set of available instructions.  The
10330 choices for @var{architecture-type} are the same as for
10331 @option{-march=@var{architecture-type}}.
10332
10333 @item -mmax-stack-frame=@var{n}
10334 @opindex mmax-stack-frame
10335 Warn when the stack frame of a function exceeds @var{n} bytes.
10336
10337 @item -metrax4
10338 @itemx -metrax100
10339 @opindex metrax4
10340 @opindex metrax100
10341 The options @option{-metrax4} and @option{-metrax100} are synonyms for
10342 @option{-march=v3} and @option{-march=v8} respectively.
10343
10344 @item -mmul-bug-workaround
10345 @itemx -mno-mul-bug-workaround
10346 @opindex mmul-bug-workaround
10347 @opindex mno-mul-bug-workaround
10348 Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
10349 models where it applies.  This option is active by default.
10350
10351 @item -mpdebug
10352 @opindex mpdebug
10353 Enable CRIS-specific verbose debug-related information in the assembly
10354 code.  This option also has the effect to turn off the @samp{#NO_APP}
10355 formatted-code indicator to the assembler at the beginning of the
10356 assembly file.
10357
10358 @item -mcc-init
10359 @opindex mcc-init
10360 Do not use condition-code results from previous instruction; always emit
10361 compare and test instructions before use of condition codes.
10362
10363 @item -mno-side-effects
10364 @opindex mno-side-effects
10365 Do not emit instructions with side-effects in addressing modes other than
10366 post-increment.
10367
10368 @item -mstack-align
10369 @itemx -mno-stack-align
10370 @itemx -mdata-align
10371 @itemx -mno-data-align
10372 @itemx -mconst-align
10373 @itemx -mno-const-align
10374 @opindex mstack-align
10375 @opindex mno-stack-align
10376 @opindex mdata-align
10377 @opindex mno-data-align
10378 @opindex mconst-align
10379 @opindex mno-const-align
10380 These options (no-options) arranges (eliminate arrangements) for the
10381 stack-frame, individual data and constants to be aligned for the maximum
10382 single data access size for the chosen CPU model.  The default is to
10383 arrange for 32-bit alignment.  ABI details such as structure layout are
10384 not affected by these options.
10385
10386 @item -m32-bit
10387 @itemx -m16-bit
10388 @itemx -m8-bit
10389 @opindex m32-bit
10390 @opindex m16-bit
10391 @opindex m8-bit
10392 Similar to the stack- data- and const-align options above, these options
10393 arrange for stack-frame, writable data and constants to all be 32-bit,
10394 16-bit or 8-bit aligned.  The default is 32-bit alignment.
10395
10396 @item -mno-prologue-epilogue
10397 @itemx -mprologue-epilogue
10398 @opindex mno-prologue-epilogue
10399 @opindex mprologue-epilogue
10400 With @option{-mno-prologue-epilogue}, the normal function prologue and
10401 epilogue that sets up the stack-frame are omitted and no return
10402 instructions or return sequences are generated in the code.  Use this
10403 option only together with visual inspection of the compiled code: no
10404 warnings or errors are generated when call-saved registers must be saved,
10405 or storage for local variable needs to be allocated.
10406
10407 @item -mno-gotplt
10408 @itemx -mgotplt
10409 @opindex mno-gotplt
10410 @opindex mgotplt
10411 With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
10412 instruction sequences that load addresses for functions from the PLT part
10413 of the GOT rather than (traditional on other architectures) calls to the
10414 PLT@.  The default is @option{-mgotplt}.
10415
10416 @item -melf
10417 @opindex melf
10418 Legacy no-op option only recognized with the cris-axis-elf and
10419 cris-axis-linux-gnu targets.
10420
10421 @item -mlinux
10422 @opindex mlinux
10423 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
10424
10425 @item -sim
10426 @opindex sim
10427 This option, recognized for the cris-axis-elf arranges
10428 to link with input-output functions from a simulator library.  Code,
10429 initialized data and zero-initialized data are allocated consecutively.
10430
10431 @item -sim2
10432 @opindex sim2
10433 Like @option{-sim}, but pass linker options to locate initialized data at
10434 0x40000000 and zero-initialized data at 0x80000000.
10435 @end table
10436
10437 @node CRX Options
10438 @subsection CRX Options
10439 @cindex CRX Options
10440
10441 These options are defined specifically for the CRX ports.
10442
10443 @table @gcctabopt
10444
10445 @item -mmac
10446 @opindex mmac
10447 Enable the use of multiply-accumulate instructions. Disabled by default.
10448
10449 @item -mpush-args
10450 @opindex mpush-args
10451 Push instructions will be used to pass outgoing arguments when functions
10452 are called. Enabled by default.
10453 @end table
10454
10455 @node Darwin Options
10456 @subsection Darwin Options
10457 @cindex Darwin options
10458
10459 These options are defined for all architectures running the Darwin operating
10460 system.
10461
10462 FSF GCC on Darwin does not create ``fat'' object files; it will create
10463 an object file for the single architecture that it was built to
10464 target.  Apple's GCC on Darwin does create ``fat'' files if multiple
10465 @option{-arch} options are used; it does so by running the compiler or
10466 linker multiple times and joining the results together with
10467 @file{lipo}.
10468
10469 The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or
10470 @samp{i686}) is determined by the flags that specify the ISA
10471 that GCC is targetting, like @option{-mcpu} or @option{-march}.  The
10472 @option{-force_cpusubtype_ALL} option can be used to override this.
10473
10474 The Darwin tools vary in their behavior when presented with an ISA
10475 mismatch.  The assembler, @file{as}, will only permit instructions to
10476 be used that are valid for the subtype of the file it is generating,
10477 so you cannot put 64-bit instructions in a @samp{ppc750} object file.
10478 The linker for shared libraries, @file{/usr/bin/libtool}, will fail
10479 and print an error if asked to create a shared library with a less
10480 restrictive subtype than its input files (for instance, trying to put
10481 a @samp{ppc970} object file in a @samp{ppc7400} library).  The linker
10482 for executables, @file{ld}, will quietly give the executable the most
10483 restrictive subtype of any of its input files.
10484
10485 @table @gcctabopt
10486 @item -F@var{dir}
10487 @opindex F
10488 Add the framework directory @var{dir} to the head of the list of
10489 directories to be searched for header files.  These directories are
10490 interleaved with those specified by @option{-I} options and are
10491 scanned in a left-to-right order.
10492
10493 A framework directory is a directory with frameworks in it.  A
10494 framework is a directory with a @samp{"Headers"} and/or
10495 @samp{"PrivateHeaders"} directory contained directly in it that ends
10496 in @samp{".framework"}.  The name of a framework is the name of this
10497 directory excluding the @samp{".framework"}.  Headers associated with
10498 the framework are found in one of those two directories, with
10499 @samp{"Headers"} being searched first.  A subframework is a framework
10500 directory that is in a framework's @samp{"Frameworks"} directory.
10501 Includes of subframework headers can only appear in a header of a
10502 framework that contains the subframework, or in a sibling subframework
10503 header.  Two subframeworks are siblings if they occur in the same
10504 framework.  A subframework should not have the same name as a
10505 framework, a warning will be issued if this is violated.  Currently a
10506 subframework cannot have subframeworks, in the future, the mechanism
10507 may be extended to support this.  The standard frameworks can be found
10508 in @samp{"/System/Library/Frameworks"} and
10509 @samp{"/Library/Frameworks"}.  An example include looks like
10510 @code{#include <Framework/header.h>}, where @samp{Framework} denotes
10511 the name of the framework and header.h is found in the
10512 @samp{"PrivateHeaders"} or @samp{"Headers"} directory.
10513
10514 @item -iframework@var{dir}
10515 @opindex iframework
10516 Like @option{-F} except the directory is a treated as a system
10517 directory.  The main difference between this @option{-iframework} and
10518 @option{-F} is that with @option{-iframework} the compiler does not
10519 warn about constructs contained within header files found via
10520 @var{dir}.  This option is valid only for the C family of languages.
10521
10522 @item -gused
10523 @opindex gused
10524 Emit debugging information for symbols that are used.  For STABS
10525 debugging format, this enables @option{-feliminate-unused-debug-symbols}.
10526 This is by default ON@.
10527
10528 @item -gfull
10529 @opindex gfull
10530 Emit debugging information for all symbols and types.
10531
10532 @item -mmacosx-version-min=@var{version}
10533 The earliest version of MacOS X that this executable will run on
10534 is @var{version}.  Typical values of @var{version} include @code{10.1},
10535 @code{10.2}, and @code{10.3.9}.
10536
10537 If the compiler was built to use the system's headers by default,
10538 then the default for this option is the system version on which the
10539 compiler is running, otherwise the default is to make choices which
10540 are compatible with as many systems and code bases as possible.
10541
10542 @item -mkernel
10543 @opindex mkernel
10544 Enable kernel development mode.  The @option{-mkernel} option sets
10545 @option{-static}, @option{-fno-common}, @option{-fno-cxa-atexit},
10546 @option{-fno-exceptions}, @option{-fno-non-call-exceptions},
10547 @option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where
10548 applicable.  This mode also sets @option{-mno-altivec},
10549 @option{-msoft-float}, @option{-fno-builtin} and
10550 @option{-mlong-branch} for PowerPC targets.
10551
10552 @item -mone-byte-bool
10553 @opindex mone-byte-bool
10554 Override the defaults for @samp{bool} so that @samp{sizeof(bool)==1}.
10555 By default @samp{sizeof(bool)} is @samp{4} when compiling for
10556 Darwin/PowerPC and @samp{1} when compiling for Darwin/x86, so this
10557 option has no effect on x86.
10558
10559 @strong{Warning:} The @option{-mone-byte-bool} switch causes GCC
10560 to generate code that is not binary compatible with code generated
10561 without that switch.  Using this switch may require recompiling all
10562 other modules in a program, including system libraries.  Use this
10563 switch to conform to a non-default data model.
10564
10565 @item -mfix-and-continue
10566 @itemx -ffix-and-continue
10567 @itemx -findirect-data
10568 @opindex mfix-and-continue
10569 @opindex ffix-and-continue
10570 @opindex findirect-data
10571 Generate code suitable for fast turn around development.  Needed to
10572 enable gdb to dynamically load @code{.o} files into already running
10573 programs.  @option{-findirect-data} and @option{-ffix-and-continue}
10574 are provided for backwards compatibility.
10575
10576 @item -all_load
10577 @opindex all_load
10578 Loads all members of static archive libraries.
10579 See man ld(1) for more information.
10580
10581 @item -arch_errors_fatal
10582 @opindex arch_errors_fatal
10583 Cause the errors having to do with files that have the wrong architecture
10584 to be fatal.
10585
10586 @item -bind_at_load
10587 @opindex bind_at_load
10588 Causes the output file to be marked such that the dynamic linker will
10589 bind all undefined references when the file is loaded or launched.
10590
10591 @item -bundle
10592 @opindex bundle
10593 Produce a Mach-o bundle format file.
10594 See man ld(1) for more information.
10595
10596 @item -bundle_loader @var{executable}
10597 @opindex bundle_loader
10598 This option specifies the @var{executable} that will be loading the build
10599 output file being linked.  See man ld(1) for more information.
10600
10601 @item -dynamiclib
10602 @opindex dynamiclib
10603 When passed this option, GCC will produce a dynamic library instead of
10604 an executable when linking, using the Darwin @file{libtool} command.
10605
10606 @item -force_cpusubtype_ALL
10607 @opindex force_cpusubtype_ALL
10608 This causes GCC's output file to have the @var{ALL} subtype, instead of
10609 one controlled by the @option{-mcpu} or @option{-march} option.
10610
10611 @item -allowable_client  @var{client_name}
10612 @itemx -client_name
10613 @itemx -compatibility_version
10614 @itemx -current_version
10615 @itemx -dead_strip
10616 @itemx -dependency-file
10617 @itemx -dylib_file
10618 @itemx -dylinker_install_name
10619 @itemx -dynamic
10620 @itemx -exported_symbols_list
10621 @itemx -filelist
10622 @itemx -flat_namespace
10623 @itemx -force_flat_namespace
10624 @itemx -headerpad_max_install_names
10625 @itemx -image_base
10626 @itemx -init
10627 @itemx -install_name
10628 @itemx -keep_private_externs
10629 @itemx -multi_module
10630 @itemx -multiply_defined
10631 @itemx -multiply_defined_unused
10632 @itemx -noall_load
10633 @itemx -no_dead_strip_inits_and_terms
10634 @itemx -nofixprebinding
10635 @itemx -nomultidefs
10636 @itemx -noprebind
10637 @itemx -noseglinkedit
10638 @itemx -pagezero_size
10639 @itemx -prebind
10640 @itemx -prebind_all_twolevel_modules
10641 @itemx -private_bundle
10642 @itemx -read_only_relocs
10643 @itemx -sectalign
10644 @itemx -sectobjectsymbols
10645 @itemx -whyload
10646 @itemx -seg1addr
10647 @itemx -sectcreate
10648 @itemx -sectobjectsymbols
10649 @itemx -sectorder
10650 @itemx -segaddr
10651 @itemx -segs_read_only_addr
10652 @itemx -segs_read_write_addr
10653 @itemx -seg_addr_table
10654 @itemx -seg_addr_table_filename
10655 @itemx -seglinkedit
10656 @itemx -segprot
10657 @itemx -segs_read_only_addr
10658 @itemx -segs_read_write_addr
10659 @itemx -single_module
10660 @itemx -static
10661 @itemx -sub_library
10662 @itemx -sub_umbrella
10663 @itemx -twolevel_namespace
10664 @itemx -umbrella
10665 @itemx -undefined
10666 @itemx -unexported_symbols_list
10667 @itemx -weak_reference_mismatches
10668 @itemx -whatsloaded
10669 @opindex allowable_client
10670 @opindex client_name
10671 @opindex compatibility_version
10672 @opindex current_version
10673 @opindex dead_strip
10674 @opindex dependency-file
10675 @opindex dylib_file
10676 @opindex dylinker_install_name
10677 @opindex dynamic
10678 @opindex exported_symbols_list
10679 @opindex filelist
10680 @opindex flat_namespace
10681 @opindex force_flat_namespace
10682 @opindex headerpad_max_install_names
10683 @opindex image_base
10684 @opindex init
10685 @opindex install_name
10686 @opindex keep_private_externs
10687 @opindex multi_module
10688 @opindex multiply_defined
10689 @opindex multiply_defined_unused
10690 @opindex noall_load
10691 @opindex no_dead_strip_inits_and_terms
10692 @opindex nofixprebinding
10693 @opindex nomultidefs
10694 @opindex noprebind
10695 @opindex noseglinkedit
10696 @opindex pagezero_size
10697 @opindex prebind
10698 @opindex prebind_all_twolevel_modules
10699 @opindex private_bundle
10700 @opindex read_only_relocs
10701 @opindex sectalign
10702 @opindex sectobjectsymbols
10703 @opindex whyload
10704 @opindex seg1addr
10705 @opindex sectcreate
10706 @opindex sectobjectsymbols
10707 @opindex sectorder
10708 @opindex segaddr
10709 @opindex segs_read_only_addr
10710 @opindex segs_read_write_addr
10711 @opindex seg_addr_table
10712 @opindex seg_addr_table_filename
10713 @opindex seglinkedit
10714 @opindex segprot
10715 @opindex segs_read_only_addr
10716 @opindex segs_read_write_addr
10717 @opindex single_module
10718 @opindex static
10719 @opindex sub_library
10720 @opindex sub_umbrella
10721 @opindex twolevel_namespace
10722 @opindex umbrella
10723 @opindex undefined
10724 @opindex unexported_symbols_list
10725 @opindex weak_reference_mismatches
10726 @opindex whatsloaded
10727 These options are passed to the Darwin linker.  The Darwin linker man page
10728 describes them in detail.
10729 @end table
10730
10731 @node DEC Alpha Options
10732 @subsection DEC Alpha Options
10733
10734 These @samp{-m} options are defined for the DEC Alpha implementations:
10735
10736 @table @gcctabopt
10737 @item -mno-soft-float
10738 @itemx -msoft-float
10739 @opindex mno-soft-float
10740 @opindex msoft-float
10741 Use (do not use) the hardware floating-point instructions for
10742 floating-point operations.  When @option{-msoft-float} is specified,
10743 functions in @file{libgcc.a} will be used to perform floating-point
10744 operations.  Unless they are replaced by routines that emulate the
10745 floating-point operations, or compiled in such a way as to call such
10746 emulations routines, these routines will issue floating-point
10747 operations.   If you are compiling for an Alpha without floating-point
10748 operations, you must ensure that the library is built so as not to call
10749 them.
10750
10751 Note that Alpha implementations without floating-point operations are
10752 required to have floating-point registers.
10753
10754 @item -mfp-reg
10755 @itemx -mno-fp-regs
10756 @opindex mfp-reg
10757 @opindex mno-fp-regs
10758 Generate code that uses (does not use) the floating-point register set.
10759 @option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
10760 register set is not used, floating point operands are passed in integer
10761 registers as if they were integers and floating-point results are passed
10762 in @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
10763 so any function with a floating-point argument or return value called by code
10764 compiled with @option{-mno-fp-regs} must also be compiled with that
10765 option.
10766
10767 A typical use of this option is building a kernel that does not use,
10768 and hence need not save and restore, any floating-point registers.
10769
10770 @item -mieee
10771 @opindex mieee
10772 The Alpha architecture implements floating-point hardware optimized for
10773 maximum performance.  It is mostly compliant with the IEEE floating
10774 point standard.  However, for full compliance, software assistance is
10775 required.  This option generates code fully IEEE compliant code
10776 @emph{except} that the @var{inexact-flag} is not maintained (see below).
10777 If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
10778 defined during compilation.  The resulting code is less efficient but is
10779 able to correctly support denormalized numbers and exceptional IEEE
10780 values such as not-a-number and plus/minus infinity.  Other Alpha
10781 compilers call this option @option{-ieee_with_no_inexact}.
10782
10783 @item -mieee-with-inexact
10784 @opindex mieee-with-inexact
10785 This is like @option{-mieee} except the generated code also maintains
10786 the IEEE @var{inexact-flag}.  Turning on this option causes the
10787 generated code to implement fully-compliant IEEE math.  In addition to
10788 @code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
10789 macro.  On some Alpha implementations the resulting code may execute
10790 significantly slower than the code generated by default.  Since there is
10791 very little code that depends on the @var{inexact-flag}, you should
10792 normally not specify this option.  Other Alpha compilers call this
10793 option @option{-ieee_with_inexact}.
10794
10795 @item -mfp-trap-mode=@var{trap-mode}
10796 @opindex mfp-trap-mode
10797 This option controls what floating-point related traps are enabled.
10798 Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
10799 The trap mode can be set to one of four values:
10800
10801 @table @samp
10802 @item n
10803 This is the default (normal) setting.  The only traps that are enabled
10804 are the ones that cannot be disabled in software (e.g., division by zero
10805 trap).
10806
10807 @item u
10808 In addition to the traps enabled by @samp{n}, underflow traps are enabled
10809 as well.
10810
10811 @item su
10812 Like @samp{u}, but the instructions are marked to be safe for software
10813 completion (see Alpha architecture manual for details).
10814
10815 @item sui
10816 Like @samp{su}, but inexact traps are enabled as well.
10817 @end table
10818
10819 @item -mfp-rounding-mode=@var{rounding-mode}
10820 @opindex mfp-rounding-mode
10821 Selects the IEEE rounding mode.  Other Alpha compilers call this option
10822 @option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
10823 of:
10824
10825 @table @samp
10826 @item n
10827 Normal IEEE rounding mode.  Floating point numbers are rounded towards
10828 the nearest machine number or towards the even machine number in case
10829 of a tie.
10830
10831 @item m
10832 Round towards minus infinity.
10833
10834 @item c
10835 Chopped rounding mode.  Floating point numbers are rounded towards zero.
10836
10837 @item d
10838 Dynamic rounding mode.  A field in the floating point control register
10839 (@var{fpcr}, see Alpha architecture reference manual) controls the
10840 rounding mode in effect.  The C library initializes this register for
10841 rounding towards plus infinity.  Thus, unless your program modifies the
10842 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.
10843 @end table
10844
10845 @item -mtrap-precision=@var{trap-precision}
10846 @opindex mtrap-precision
10847 In the Alpha architecture, floating point traps are imprecise.  This
10848 means without software assistance it is impossible to recover from a
10849 floating trap and program execution normally needs to be terminated.
10850 GCC can generate code that can assist operating system trap handlers
10851 in determining the exact location that caused a floating point trap.
10852 Depending on the requirements of an application, different levels of
10853 precisions can be selected:
10854
10855 @table @samp
10856 @item p
10857 Program precision.  This option is the default and means a trap handler
10858 can only identify which program caused a floating point exception.
10859
10860 @item f
10861 Function precision.  The trap handler can determine the function that
10862 caused a floating point exception.
10863
10864 @item i
10865 Instruction precision.  The trap handler can determine the exact
10866 instruction that caused a floating point exception.
10867 @end table
10868
10869 Other Alpha compilers provide the equivalent options called
10870 @option{-scope_safe} and @option{-resumption_safe}.
10871
10872 @item -mieee-conformant
10873 @opindex mieee-conformant
10874 This option marks the generated code as IEEE conformant.  You must not
10875 use this option unless you also specify @option{-mtrap-precision=i} and either
10876 @option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
10877 is to emit the line @samp{.eflag 48} in the function prologue of the
10878 generated assembly file.  Under DEC Unix, this has the effect that
10879 IEEE-conformant math library routines will be linked in.
10880
10881 @item -mbuild-constants
10882 @opindex mbuild-constants
10883 Normally GCC examines a 32- or 64-bit integer constant to
10884 see if it can construct it from smaller constants in two or three
10885 instructions.  If it cannot, it will output the constant as a literal and
10886 generate code to load it from the data segment at runtime.
10887
10888 Use this option to require GCC to construct @emph{all} integer constants
10889 using code, even if it takes more instructions (the maximum is six).
10890
10891 You would typically use this option to build a shared library dynamic
10892 loader.  Itself a shared library, it must relocate itself in memory
10893 before it can find the variables and constants in its own data segment.
10894
10895 @item -malpha-as
10896 @itemx -mgas
10897 @opindex malpha-as
10898 @opindex mgas
10899 Select whether to generate code to be assembled by the vendor-supplied
10900 assembler (@option{-malpha-as}) or by the GNU assembler @option{-mgas}.
10901
10902 @item -mbwx
10903 @itemx -mno-bwx
10904 @itemx -mcix
10905 @itemx -mno-cix
10906 @itemx -mfix
10907 @itemx -mno-fix
10908 @itemx -mmax
10909 @itemx -mno-max
10910 @opindex mbwx
10911 @opindex mno-bwx
10912 @opindex mcix
10913 @opindex mno-cix
10914 @opindex mfix
10915 @opindex mno-fix
10916 @opindex mmax
10917 @opindex mno-max
10918 Indicate whether GCC should generate code to use the optional BWX,
10919 CIX, FIX and MAX instruction sets.  The default is to use the instruction
10920 sets supported by the CPU type specified via @option{-mcpu=} option or that
10921 of the CPU on which GCC was built if none was specified.
10922
10923 @item -mfloat-vax
10924 @itemx -mfloat-ieee
10925 @opindex mfloat-vax
10926 @opindex mfloat-ieee
10927 Generate code that uses (does not use) VAX F and G floating point
10928 arithmetic instead of IEEE single and double precision.
10929
10930 @item -mexplicit-relocs
10931 @itemx -mno-explicit-relocs
10932 @opindex mexplicit-relocs
10933 @opindex mno-explicit-relocs
10934 Older Alpha assemblers provided no way to generate symbol relocations
10935 except via assembler macros.  Use of these macros does not allow
10936 optimal instruction scheduling.  GNU binutils as of version 2.12
10937 supports a new syntax that allows the compiler to explicitly mark
10938 which relocations should apply to which instructions.  This option
10939 is mostly useful for debugging, as GCC detects the capabilities of
10940 the assembler when it is built and sets the default accordingly.
10941
10942 @item -msmall-data
10943 @itemx -mlarge-data
10944 @opindex msmall-data
10945 @opindex mlarge-data
10946 When @option{-mexplicit-relocs} is in effect, static data is
10947 accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
10948 is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
10949 (the @code{.sdata} and @code{.sbss} sections) and are accessed via
10950 16-bit relocations off of the @code{$gp} register.  This limits the
10951 size of the small data area to 64KB, but allows the variables to be
10952 directly accessed via a single instruction.
10953
10954 The default is @option{-mlarge-data}.  With this option the data area
10955 is limited to just below 2GB@.  Programs that require more than 2GB of
10956 data must use @code{malloc} or @code{mmap} to allocate the data in the
10957 heap instead of in the program's data segment.
10958
10959 When generating code for shared libraries, @option{-fpic} implies
10960 @option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.
10961
10962 @item -msmall-text
10963 @itemx -mlarge-text
10964 @opindex msmall-text
10965 @opindex mlarge-text
10966 When @option{-msmall-text} is used, the compiler assumes that the
10967 code of the entire program (or shared library) fits in 4MB, and is
10968 thus reachable with a branch instruction.  When @option{-msmall-data}
10969 is used, the compiler can assume that all local symbols share the
10970 same @code{$gp} value, and thus reduce the number of instructions
10971 required for a function call from 4 to 1.
10972
10973 The default is @option{-mlarge-text}.
10974
10975 @item -mcpu=@var{cpu_type}
10976 @opindex mcpu
10977 Set the instruction set and instruction scheduling parameters for
10978 machine type @var{cpu_type}.  You can specify either the @samp{EV}
10979 style name or the corresponding chip number.  GCC supports scheduling
10980 parameters for the EV4, EV5 and EV6 family of processors and will
10981 choose the default values for the instruction set from the processor
10982 you specify.  If you do not specify a processor type, GCC will default
10983 to the processor on which the compiler was built.
10984
10985 Supported values for @var{cpu_type} are
10986
10987 @table @samp
10988 @item ev4
10989 @itemx ev45
10990 @itemx 21064
10991 Schedules as an EV4 and has no instruction set extensions.
10992
10993 @item ev5
10994 @itemx 21164
10995 Schedules as an EV5 and has no instruction set extensions.
10996
10997 @item ev56
10998 @itemx 21164a
10999 Schedules as an EV5 and supports the BWX extension.
11000
11001 @item pca56
11002 @itemx 21164pc
11003 @itemx 21164PC
11004 Schedules as an EV5 and supports the BWX and MAX extensions.
11005
11006 @item ev6
11007 @itemx 21264
11008 Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
11009
11010 @item ev67
11011 @itemx 21264a
11012 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
11013 @end table
11014
11015 Native Linux/GNU toolchains also support the value @samp{native},
11016 which selects the best architecture option for the host processor.
11017 @option{-mcpu=native} has no effect if GCC does not recognize
11018 the processor.
11019
11020 @item -mtune=@var{cpu_type}
11021 @opindex mtune
11022 Set only the instruction scheduling parameters for machine type
11023 @var{cpu_type}.  The instruction set is not changed.
11024
11025 Native Linux/GNU toolchains also support the value @samp{native},
11026 which selects the best architecture option for the host processor.
11027 @option{-mtune=native} has no effect if GCC does not recognize
11028 the processor.
11029
11030 @item -mmemory-latency=@var{time}
11031 @opindex mmemory-latency
11032 Sets the latency the scheduler should assume for typical memory
11033 references as seen by the application.  This number is highly
11034 dependent on the memory access patterns used by the application
11035 and the size of the external cache on the machine.
11036
11037 Valid options for @var{time} are
11038
11039 @table @samp
11040 @item @var{number}
11041 A decimal number representing clock cycles.
11042
11043 @item L1
11044 @itemx L2
11045 @itemx L3
11046 @itemx main
11047 The compiler contains estimates of the number of clock cycles for
11048 ``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
11049 (also called Dcache, Scache, and Bcache), as well as to main memory.
11050 Note that L3 is only valid for EV5.
11051
11052 @end table
11053 @end table
11054
11055 @node DEC Alpha/VMS Options
11056 @subsection DEC Alpha/VMS Options
11057
11058 These @samp{-m} options are defined for the DEC Alpha/VMS implementations:
11059
11060 @table @gcctabopt
11061 @item -mvms-return-codes
11062 @opindex mvms-return-codes
11063 Return VMS condition codes from main.  The default is to return POSIX
11064 style condition (e.g.@: error) codes.
11065
11066 @item -mdebug-main=@var{prefix}
11067 @opindex mdebug-main=@var{prefix}
11068 Flag the first routine whose name starts with @var{prefix} as the main
11069 routine for the debugger.
11070
11071 @item -mmalloc64
11072 @opindex mmalloc64
11073 Default to 64bit memory allocation routines.
11074 @end table
11075
11076 @node FR30 Options
11077 @subsection FR30 Options
11078 @cindex FR30 Options
11079
11080 These options are defined specifically for the FR30 port.
11081
11082 @table @gcctabopt
11083
11084 @item -msmall-model
11085 @opindex msmall-model
11086 Use the small address space model.  This can produce smaller code, but
11087 it does assume that all symbolic values and addresses will fit into a
11088 20-bit range.
11089
11090 @item -mno-lsim
11091 @opindex mno-lsim
11092 Assume that run-time support has been provided and so there is no need
11093 to include the simulator library (@file{libsim.a}) on the linker
11094 command line.
11095
11096 @end table
11097
11098 @node FRV Options
11099 @subsection FRV Options
11100 @cindex FRV Options
11101
11102 @table @gcctabopt
11103 @item -mgpr-32
11104 @opindex mgpr-32
11105
11106 Only use the first 32 general purpose registers.
11107
11108 @item -mgpr-64
11109 @opindex mgpr-64
11110
11111 Use all 64 general purpose registers.
11112
11113 @item -mfpr-32
11114 @opindex mfpr-32
11115
11116 Use only the first 32 floating point registers.
11117
11118 @item -mfpr-64
11119 @opindex mfpr-64
11120
11121 Use all 64 floating point registers
11122
11123 @item -mhard-float
11124 @opindex mhard-float
11125
11126 Use hardware instructions for floating point operations.
11127
11128 @item -msoft-float
11129 @opindex msoft-float
11130
11131 Use library routines for floating point operations.
11132
11133 @item -malloc-cc
11134 @opindex malloc-cc
11135
11136 Dynamically allocate condition code registers.
11137
11138 @item -mfixed-cc
11139 @opindex mfixed-cc
11140
11141 Do not try to dynamically allocate condition code registers, only
11142 use @code{icc0} and @code{fcc0}.
11143
11144 @item -mdword
11145 @opindex mdword
11146
11147 Change ABI to use double word insns.
11148
11149 @item -mno-dword
11150 @opindex mno-dword
11151
11152 Do not use double word instructions.
11153
11154 @item -mdouble
11155 @opindex mdouble
11156
11157 Use floating point double instructions.
11158
11159 @item -mno-double
11160 @opindex mno-double
11161
11162 Do not use floating point double instructions.
11163
11164 @item -mmedia
11165 @opindex mmedia
11166
11167 Use media instructions.
11168
11169 @item -mno-media
11170 @opindex mno-media
11171
11172 Do not use media instructions.
11173
11174 @item -mmuladd
11175 @opindex mmuladd
11176
11177 Use multiply and add/subtract instructions.
11178
11179 @item -mno-muladd
11180 @opindex mno-muladd
11181
11182 Do not use multiply and add/subtract instructions.
11183
11184 @item -mfdpic
11185 @opindex mfdpic
11186
11187 Select the FDPIC ABI, that uses function descriptors to represent
11188 pointers to functions.  Without any PIC/PIE-related options, it
11189 implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
11190 assumes GOT entries and small data are within a 12-bit range from the
11191 GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
11192 are computed with 32 bits.
11193 With a @samp{bfin-elf} target, this option implies @option{-msim}.
11194
11195 @item -minline-plt
11196 @opindex minline-plt
11197
11198 Enable inlining of PLT entries in function calls to functions that are
11199 not known to bind locally.  It has no effect without @option{-mfdpic}.
11200 It's enabled by default if optimizing for speed and compiling for
11201 shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
11202 optimization option such as @option{-O3} or above is present in the
11203 command line.
11204
11205 @item -mTLS
11206 @opindex mTLS
11207
11208 Assume a large TLS segment when generating thread-local code.
11209
11210 @item -mtls
11211 @opindex mtls
11212
11213 Do not assume a large TLS segment when generating thread-local code.
11214
11215 @item -mgprel-ro
11216 @opindex mgprel-ro
11217
11218 Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
11219 that is known to be in read-only sections.  It's enabled by default,
11220 except for @option{-fpic} or @option{-fpie}: even though it may help
11221 make the global offset table smaller, it trades 1 instruction for 4.
11222 With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
11223 one of which may be shared by multiple symbols, and it avoids the need
11224 for a GOT entry for the referenced symbol, so it's more likely to be a
11225 win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.
11226
11227 @item -multilib-library-pic
11228 @opindex multilib-library-pic
11229
11230 Link with the (library, not FD) pic libraries.  It's implied by
11231 @option{-mlibrary-pic}, as well as by @option{-fPIC} and
11232 @option{-fpic} without @option{-mfdpic}.  You should never have to use
11233 it explicitly.
11234
11235 @item -mlinked-fp
11236 @opindex mlinked-fp
11237
11238 Follow the EABI requirement of always creating a frame pointer whenever
11239 a stack frame is allocated.  This option is enabled by default and can
11240 be disabled with @option{-mno-linked-fp}.
11241
11242 @item -mlong-calls
11243 @opindex mlong-calls
11244
11245 Use indirect addressing to call functions outside the current
11246 compilation unit.  This allows the functions to be placed anywhere
11247 within the 32-bit address space.
11248
11249 @item -malign-labels
11250 @opindex malign-labels
11251
11252 Try to align labels to an 8-byte boundary by inserting nops into the
11253 previous packet.  This option only has an effect when VLIW packing
11254 is enabled.  It doesn't create new packets; it merely adds nops to
11255 existing ones.
11256
11257 @item -mlibrary-pic
11258 @opindex mlibrary-pic
11259
11260 Generate position-independent EABI code.
11261
11262 @item -macc-4
11263 @opindex macc-4
11264
11265 Use only the first four media accumulator registers.
11266
11267 @item -macc-8
11268 @opindex macc-8
11269
11270 Use all eight media accumulator registers.
11271
11272 @item -mpack
11273 @opindex mpack
11274
11275 Pack VLIW instructions.
11276
11277 @item -mno-pack
11278 @opindex mno-pack
11279
11280 Do not pack VLIW instructions.
11281
11282 @item -mno-eflags
11283 @opindex mno-eflags
11284
11285 Do not mark ABI switches in e_flags.
11286
11287 @item -mcond-move
11288 @opindex mcond-move
11289
11290 Enable the use of conditional-move instructions (default).
11291
11292 This switch is mainly for debugging the compiler and will likely be removed
11293 in a future version.
11294
11295 @item -mno-cond-move
11296 @opindex mno-cond-move
11297
11298 Disable the use of conditional-move instructions.
11299
11300 This switch is mainly for debugging the compiler and will likely be removed
11301 in a future version.
11302
11303 @item -mscc
11304 @opindex mscc
11305
11306 Enable the use of conditional set instructions (default).
11307
11308 This switch is mainly for debugging the compiler and will likely be removed
11309 in a future version.
11310
11311 @item -mno-scc
11312 @opindex mno-scc
11313
11314 Disable the use of conditional set instructions.
11315
11316 This switch is mainly for debugging the compiler and will likely be removed
11317 in a future version.
11318
11319 @item -mcond-exec
11320 @opindex mcond-exec
11321
11322 Enable the use of conditional execution (default).
11323
11324 This switch is mainly for debugging the compiler and will likely be removed
11325 in a future version.
11326
11327 @item -mno-cond-exec
11328 @opindex mno-cond-exec
11329
11330 Disable the use of conditional execution.
11331
11332 This switch is mainly for debugging the compiler and will likely be removed
11333 in a future version.
11334
11335 @item -mvliw-branch
11336 @opindex mvliw-branch
11337
11338 Run a pass to pack branches into VLIW instructions (default).
11339
11340 This switch is mainly for debugging the compiler and will likely be removed
11341 in a future version.
11342
11343 @item -mno-vliw-branch
11344 @opindex mno-vliw-branch
11345
11346 Do not run a pass to pack branches into VLIW instructions.
11347
11348 This switch is mainly for debugging the compiler and will likely be removed
11349 in a future version.
11350
11351 @item -mmulti-cond-exec
11352 @opindex mmulti-cond-exec
11353
11354 Enable optimization of @code{&&} and @code{||} in conditional execution
11355 (default).
11356
11357 This switch is mainly for debugging the compiler and will likely be removed
11358 in a future version.
11359
11360 @item -mno-multi-cond-exec
11361 @opindex mno-multi-cond-exec
11362
11363 Disable optimization of @code{&&} and @code{||} in conditional execution.
11364
11365 This switch is mainly for debugging the compiler and will likely be removed
11366 in a future version.
11367
11368 @item -mnested-cond-exec
11369 @opindex mnested-cond-exec
11370
11371 Enable nested conditional execution optimizations (default).
11372
11373 This switch is mainly for debugging the compiler and will likely be removed
11374 in a future version.
11375
11376 @item -mno-nested-cond-exec
11377 @opindex mno-nested-cond-exec
11378
11379 Disable nested conditional execution optimizations.
11380
11381 This switch is mainly for debugging the compiler and will likely be removed
11382 in a future version.
11383
11384 @item -moptimize-membar
11385 @opindex moptimize-membar
11386
11387 This switch removes redundant @code{membar} instructions from the
11388 compiler generated code.  It is enabled by default.
11389
11390 @item -mno-optimize-membar
11391 @opindex mno-optimize-membar
11392
11393 This switch disables the automatic removal of redundant @code{membar}
11394 instructions from the generated code.
11395
11396 @item -mtomcat-stats
11397 @opindex mtomcat-stats
11398
11399 Cause gas to print out tomcat statistics.
11400
11401 @item -mcpu=@var{cpu}
11402 @opindex mcpu
11403
11404 Select the processor type for which to generate code.  Possible values are
11405 @samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450},
11406 @samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}.
11407
11408 @end table
11409
11410 @node GNU/Linux Options
11411 @subsection GNU/Linux Options
11412
11413 These @samp{-m} options are defined for GNU/Linux targets:
11414
11415 @table @gcctabopt
11416 @item -mglibc
11417 @opindex mglibc
11418 Use the GNU C library instead of uClibc.  This is the default except
11419 on @samp{*-*-linux-*uclibc*} targets.
11420
11421 @item -muclibc
11422 @opindex muclibc
11423 Use uClibc instead of the GNU C library.  This is the default on
11424 @samp{*-*-linux-*uclibc*} targets.
11425 @end table
11426
11427 @node H8/300 Options
11428 @subsection H8/300 Options
11429
11430 These @samp{-m} options are defined for the H8/300 implementations:
11431
11432 @table @gcctabopt
11433 @item -mrelax
11434 @opindex mrelax
11435 Shorten some address references at link time, when possible; uses the
11436 linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
11437 ld, Using ld}, for a fuller description.
11438
11439 @item -mh
11440 @opindex mh
11441 Generate code for the H8/300H@.
11442
11443 @item -ms
11444 @opindex ms
11445 Generate code for the H8S@.
11446
11447 @item -mn
11448 @opindex mn
11449 Generate code for the H8S and H8/300H in the normal mode.  This switch
11450 must be used either with @option{-mh} or @option{-ms}.
11451
11452 @item -ms2600
11453 @opindex ms2600
11454 Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
11455
11456 @item -mint32
11457 @opindex mint32
11458 Make @code{int} data 32 bits by default.
11459
11460 @item -malign-300
11461 @opindex malign-300
11462 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
11463 The default for the H8/300H and H8S is to align longs and floats on 4
11464 byte boundaries.
11465 @option{-malign-300} causes them to be aligned on 2 byte boundaries.
11466 This option has no effect on the H8/300.
11467 @end table
11468
11469 @node HPPA Options
11470 @subsection HPPA Options
11471 @cindex HPPA Options
11472
11473 These @samp{-m} options are defined for the HPPA family of computers:
11474
11475 @table @gcctabopt
11476 @item -march=@var{architecture-type}
11477 @opindex march
11478 Generate code for the specified architecture.  The choices for
11479 @var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
11480 1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
11481 @file{/usr/lib/sched.models} on an HP-UX system to determine the proper
11482 architecture option for your machine.  Code compiled for lower numbered
11483 architectures will run on higher numbered architectures, but not the
11484 other way around.
11485
11486 @item -mpa-risc-1-0
11487 @itemx -mpa-risc-1-1
11488 @itemx -mpa-risc-2-0
11489 @opindex mpa-risc-1-0
11490 @opindex mpa-risc-1-1
11491 @opindex mpa-risc-2-0
11492 Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
11493
11494 @item -mbig-switch
11495 @opindex mbig-switch
11496 Generate code suitable for big switch tables.  Use this option only if
11497 the assembler/linker complain about out of range branches within a switch
11498 table.
11499
11500 @item -mjump-in-delay
11501 @opindex mjump-in-delay
11502 Fill delay slots of function calls with unconditional jump instructions
11503 by modifying the return pointer for the function call to be the target
11504 of the conditional jump.
11505
11506 @item -mdisable-fpregs
11507 @opindex mdisable-fpregs
11508 Prevent floating point registers from being used in any manner.  This is
11509 necessary for compiling kernels which perform lazy context switching of
11510 floating point registers.  If you use this option and attempt to perform
11511 floating point operations, the compiler will abort.
11512
11513 @item -mdisable-indexing
11514 @opindex mdisable-indexing
11515 Prevent the compiler from using indexing address modes.  This avoids some
11516 rather obscure problems when compiling MIG generated code under MACH@.
11517
11518 @item -mno-space-regs
11519 @opindex mno-space-regs
11520 Generate code that assumes the target has no space registers.  This allows
11521 GCC to generate faster indirect calls and use unscaled index address modes.
11522
11523 Such code is suitable for level 0 PA systems and kernels.
11524
11525 @item -mfast-indirect-calls
11526 @opindex mfast-indirect-calls
11527 Generate code that assumes calls never cross space boundaries.  This
11528 allows GCC to emit code which performs faster indirect calls.
11529
11530 This option will not work in the presence of shared libraries or nested
11531 functions.
11532
11533 @item -mfixed-range=@var{register-range}
11534 @opindex mfixed-range
11535 Generate code treating the given register range as fixed registers.
11536 A fixed register is one that the register allocator can not use.  This is
11537 useful when compiling kernel code.  A register range is specified as
11538 two registers separated by a dash.  Multiple register ranges can be
11539 specified separated by a comma.
11540
11541 @item -mlong-load-store
11542 @opindex mlong-load-store
11543 Generate 3-instruction load and store sequences as sometimes required by
11544 the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
11545 the HP compilers.
11546
11547 @item -mportable-runtime
11548 @opindex mportable-runtime
11549 Use the portable calling conventions proposed by HP for ELF systems.
11550
11551 @item -mgas
11552 @opindex mgas
11553 Enable the use of assembler directives only GAS understands.
11554
11555 @item -mschedule=@var{cpu-type}
11556 @opindex mschedule
11557 Schedule code according to the constraints for the machine type
11558 @var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
11559 @samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
11560 to @file{/usr/lib/sched.models} on an HP-UX system to determine the
11561 proper scheduling option for your machine.  The default scheduling is
11562 @samp{8000}.
11563
11564 @item -mlinker-opt
11565 @opindex mlinker-opt
11566 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
11567 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
11568 linkers in which they give bogus error messages when linking some programs.
11569
11570 @item -msoft-float
11571 @opindex msoft-float
11572 Generate output containing library calls for floating point.
11573 @strong{Warning:} the requisite libraries are not available for all HPPA
11574 targets.  Normally the facilities of the machine's usual C compiler are
11575 used, but this cannot be done directly in cross-compilation.  You must make
11576 your own arrangements to provide suitable library functions for
11577 cross-compilation.
11578
11579 @option{-msoft-float} changes the calling convention in the output file;
11580 therefore, it is only useful if you compile @emph{all} of a program with
11581 this option.  In particular, you need to compile @file{libgcc.a}, the
11582 library that comes with GCC, with @option{-msoft-float} in order for
11583 this to work.
11584
11585 @item -msio
11586 @opindex msio
11587 Generate the predefine, @code{_SIO}, for server IO@.  The default is
11588 @option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
11589 @code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
11590 options are available under HP-UX and HI-UX@.
11591
11592 @item -mgnu-ld
11593 @opindex mgnu-ld
11594 Use GNU ld specific options.  This passes @option{-shared} to ld when
11595 building a shared library.  It is the default when GCC is configured,
11596 explicitly or implicitly, with the GNU linker.  This option does not
11597 have any affect on which ld is called, it only changes what parameters
11598 are passed to that ld.  The ld that is called is determined by the
11599 @option{--with-ld} configure option, GCC's program search path, and
11600 finally by the user's @env{PATH}.  The linker used by GCC can be printed
11601 using @samp{which `gcc -print-prog-name=ld`}.  This option is only available
11602 on the 64 bit HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
11603
11604 @item -mhp-ld
11605 @opindex mhp-ld
11606 Use HP ld specific options.  This passes @option{-b} to ld when building
11607 a shared library and passes @option{+Accept TypeMismatch} to ld on all
11608 links.  It is the default when GCC is configured, explicitly or
11609 implicitly, with the HP linker.  This option does not have any affect on
11610 which ld is called, it only changes what parameters are passed to that
11611 ld.  The ld that is called is determined by the @option{--with-ld}
11612 configure option, GCC's program search path, and finally by the user's
11613 @env{PATH}.  The linker used by GCC can be printed using @samp{which
11614 `gcc -print-prog-name=ld`}.  This option is only available on the 64 bit
11615 HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
11616
11617 @item -mlong-calls
11618 @opindex mno-long-calls
11619 Generate code that uses long call sequences.  This ensures that a call
11620 is always able to reach linker generated stubs.  The default is to generate
11621 long calls only when the distance from the call site to the beginning
11622 of the function or translation unit, as the case may be, exceeds a
11623 predefined limit set by the branch type being used.  The limits for
11624 normal calls are 7,600,000 and 240,000 bytes, respectively for the
11625 PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
11626 240,000 bytes.
11627
11628 Distances are measured from the beginning of functions when using the
11629 @option{-ffunction-sections} option, or when using the @option{-mgas}
11630 and @option{-mno-portable-runtime} options together under HP-UX with
11631 the SOM linker.
11632
11633 It is normally not desirable to use this option as it will degrade
11634 performance.  However, it may be useful in large applications,
11635 particularly when partial linking is used to build the application.
11636
11637 The types of long calls used depends on the capabilities of the
11638 assembler and linker, and the type of code being generated.  The
11639 impact on systems that support long absolute calls, and long pic
11640 symbol-difference or pc-relative calls should be relatively small.
11641 However, an indirect call is used on 32-bit ELF systems in pic code
11642 and it is quite long.
11643
11644 @item -munix=@var{unix-std}
11645 @opindex march
11646 Generate compiler predefines and select a startfile for the specified
11647 UNIX standard.  The choices for @var{unix-std} are @samp{93}, @samp{95}
11648 and @samp{98}.  @samp{93} is supported on all HP-UX versions.  @samp{95}
11649 is available on HP-UX 10.10 and later.  @samp{98} is available on HP-UX
11650 11.11 and later.  The default values are @samp{93} for HP-UX 10.00,
11651 @samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
11652 and later.
11653
11654 @option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
11655 @option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
11656 and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
11657 @option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
11658 @code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
11659 @code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.
11660
11661 It is @emph{important} to note that this option changes the interfaces
11662 for various library routines.  It also affects the operational behavior
11663 of the C library.  Thus, @emph{extreme} care is needed in using this
11664 option.
11665
11666 Library code that is intended to operate with more than one UNIX
11667 standard must test, set and restore the variable @var{__xpg4_extended_mask}
11668 as appropriate.  Most GNU software doesn't provide this capability.
11669
11670 @item -nolibdld
11671 @opindex nolibdld
11672 Suppress the generation of link options to search libdld.sl when the
11673 @option{-static} option is specified on HP-UX 10 and later.
11674
11675 @item -static
11676 @opindex static
11677 The HP-UX implementation of setlocale in libc has a dependency on
11678 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
11679 when the @option{-static} option is specified, special link options
11680 are needed to resolve this dependency.
11681
11682 On HP-UX 10 and later, the GCC driver adds the necessary options to
11683 link with libdld.sl when the @option{-static} option is specified.
11684 This causes the resulting binary to be dynamic.  On the 64-bit port,
11685 the linkers generate dynamic binaries by default in any case.  The
11686 @option{-nolibdld} option can be used to prevent the GCC driver from
11687 adding these link options.
11688
11689 @item -threads
11690 @opindex threads
11691 Add support for multithreading with the @dfn{dce thread} library
11692 under HP-UX@.  This option sets flags for both the preprocessor and
11693 linker.
11694 @end table
11695
11696 @node i386 and x86-64 Options
11697 @subsection Intel 386 and AMD x86-64 Options
11698 @cindex i386 Options
11699 @cindex x86-64 Options
11700 @cindex Intel 386 Options
11701 @cindex AMD x86-64 Options
11702
11703 These @samp{-m} options are defined for the i386 and x86-64 family of
11704 computers:
11705
11706 @table @gcctabopt
11707 @item -mtune=@var{cpu-type}
11708 @opindex mtune
11709 Tune to @var{cpu-type} everything applicable about the generated code, except
11710 for the ABI and the set of available instructions.  The choices for
11711 @var{cpu-type} are:
11712 @table @emph
11713 @item generic
11714 Produce code optimized for the most common IA32/AMD64/EM64T processors.
11715 If you know the CPU on which your code will run, then you should use
11716 the corresponding @option{-mtune} option instead of
11717 @option{-mtune=generic}.  But, if you do not know exactly what CPU users
11718 of your application will have, then you should use this option.
11719
11720 As new processors are deployed in the marketplace, the behavior of this
11721 option will change.  Therefore, if you upgrade to a newer version of
11722 GCC, the code generated option will change to reflect the processors
11723 that were most common when that version of GCC was released.
11724
11725 There is no @option{-march=generic} option because @option{-march}
11726 indicates the instruction set the compiler can use, and there is no
11727 generic instruction set applicable to all processors.  In contrast,
11728 @option{-mtune} indicates the processor (or, in this case, collection of
11729 processors) for which the code is optimized.
11730 @item native
11731 This selects the CPU to tune for at compilation time by determining
11732 the processor type of the compiling machine.  Using @option{-mtune=native}
11733 will produce code optimized for the local machine under the constraints
11734 of the selected instruction set.  Using @option{-march=native} will
11735 enable all instruction subsets supported by the local machine (hence
11736 the result might not run on different machines).
11737 @item i386
11738 Original Intel's i386 CPU@.
11739 @item i486
11740 Intel's i486 CPU@.  (No scheduling is implemented for this chip.)
11741 @item i586, pentium
11742 Intel Pentium CPU with no MMX support.
11743 @item pentium-mmx
11744 Intel PentiumMMX CPU based on Pentium core with MMX instruction set support.
11745 @item pentiumpro
11746 Intel PentiumPro CPU@.
11747 @item i686
11748 Same as @code{generic}, but when used as @code{march} option, PentiumPro
11749 instruction set will be used, so the code will run on all i686 family chips.
11750 @item pentium2
11751 Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support.
11752 @item pentium3, pentium3m
11753 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set
11754 support.
11755 @item pentium-m
11756 Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set
11757 support.  Used by Centrino notebooks.
11758 @item pentium4, pentium4m
11759 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support.
11760 @item prescott
11761 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction
11762 set support.
11763 @item nocona
11764 Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE,
11765 SSE2 and SSE3 instruction set support.
11766 @item core2
11767 Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
11768 instruction set support.
11769 @item atom
11770 Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
11771 instruction set support.
11772 @item k6
11773 AMD K6 CPU with MMX instruction set support.
11774 @item k6-2, k6-3
11775 Improved versions of AMD K6 CPU with MMX and 3DNow!@: instruction set support.
11776 @item athlon, athlon-tbird
11777 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow!@: and SSE prefetch instructions
11778 support.
11779 @item athlon-4, athlon-xp, athlon-mp
11780 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow!@: and full SSE
11781 instruction set support.
11782 @item k8, opteron, athlon64, athlon-fx
11783 AMD K8 core based CPUs with x86-64 instruction set support.  (This supersets
11784 MMX, SSE, SSE2, 3DNow!, enhanced 3DNow!@: and 64-bit instruction set extensions.)
11785 @item k8-sse3, opteron-sse3, athlon64-sse3
11786 Improved versions of k8, opteron and athlon64 with SSE3 instruction set support.
11787 @item amdfam10, barcelona
11788 AMD Family 10h core based CPUs with x86-64 instruction set support.  (This
11789 supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM and 64-bit
11790 instruction set extensions.)
11791 @item winchip-c6
11792 IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction
11793 set support.
11794 @item winchip2
11795 IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3DNow!@:
11796 instruction set support.
11797 @item c3
11798 Via C3 CPU with MMX and 3DNow!@: instruction set support.  (No scheduling is
11799 implemented for this chip.)
11800 @item c3-2
11801 Via C3-2 CPU with MMX and SSE instruction set support.  (No scheduling is
11802 implemented for this chip.)
11803 @item geode
11804 Embedded AMD CPU with MMX and 3DNow!@: instruction set support.
11805 @end table
11806
11807 While picking a specific @var{cpu-type} will schedule things appropriately
11808 for that particular chip, the compiler will not generate any code that
11809 does not run on the i386 without the @option{-march=@var{cpu-type}} option
11810 being used.
11811
11812 @item -march=@var{cpu-type}
11813 @opindex march
11814 Generate instructions for the machine type @var{cpu-type}.  The choices
11815 for @var{cpu-type} are the same as for @option{-mtune}.  Moreover,
11816 specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}.
11817
11818 @item -mcpu=@var{cpu-type}
11819 @opindex mcpu
11820 A deprecated synonym for @option{-mtune}.
11821
11822 @item -mfpmath=@var{unit}
11823 @opindex mfpmath
11824 Generate floating point arithmetics for selected unit @var{unit}.  The choices
11825 for @var{unit} are:
11826
11827 @table @samp
11828 @item 387
11829 Use the standard 387 floating point coprocessor present majority of chips and
11830 emulated otherwise.  Code compiled with this option will run almost everywhere.
11831 The temporary results are computed in 80bit precision instead of precision
11832 specified by the type resulting in slightly different results compared to most
11833 of other chips.  See @option{-ffloat-store} for more detailed description.
11834
11835 This is the default choice for i386 compiler.
11836
11837 @item sse
11838 Use scalar floating point instructions present in the SSE instruction set.
11839 This instruction set is supported by Pentium3 and newer chips, in the AMD line
11840 by Athlon-4, Athlon-xp and Athlon-mp chips.  The earlier version of SSE
11841 instruction set supports only single precision arithmetics, thus the double and
11842 extended precision arithmetics is still done using 387.  Later version, present
11843 only in Pentium4 and the future AMD x86-64 chips supports double precision
11844 arithmetics too.
11845
11846 For the i386 compiler, you need to use @option{-march=@var{cpu-type}}, @option{-msse}
11847 or @option{-msse2} switches to enable SSE extensions and make this option
11848 effective.  For the x86-64 compiler, these extensions are enabled by default.
11849
11850 The resulting code should be considerably faster in the majority of cases and avoid
11851 the numerical instability problems of 387 code, but may break some existing
11852 code that expects temporaries to be 80bit.
11853
11854 This is the default choice for the x86-64 compiler.
11855
11856 @item sse,387
11857 @itemx sse+387
11858 @itemx both
11859 Attempt to utilize both instruction sets at once.  This effectively double the
11860 amount of available registers and on chips with separate execution units for
11861 387 and SSE the execution resources too.  Use this option with care, as it is
11862 still experimental, because the GCC register allocator does not model separate
11863 functional units well resulting in instable performance.
11864 @end table
11865
11866 @item -masm=@var{dialect}
11867 @opindex masm=@var{dialect}
11868 Output asm instructions using selected @var{dialect}.  Supported
11869 choices are @samp{intel} or @samp{att} (the default one).  Darwin does
11870 not support @samp{intel}.
11871
11872 @item -mieee-fp
11873 @itemx -mno-ieee-fp
11874 @opindex mieee-fp
11875 @opindex mno-ieee-fp
11876 Control whether or not the compiler uses IEEE floating point
11877 comparisons.  These handle correctly the case where the result of a
11878 comparison is unordered.
11879
11880 @item -msoft-float
11881 @opindex msoft-float
11882 Generate output containing library calls for floating point.
11883 @strong{Warning:} the requisite libraries are not part of GCC@.
11884 Normally the facilities of the machine's usual C compiler are used, but
11885 this can't be done directly in cross-compilation.  You must make your
11886 own arrangements to provide suitable library functions for
11887 cross-compilation.
11888
11889 On machines where a function returns floating point results in the 80387
11890 register stack, some floating point opcodes may be emitted even if
11891 @option{-msoft-float} is used.
11892
11893 @item -mno-fp-ret-in-387
11894 @opindex mno-fp-ret-in-387
11895 Do not use the FPU registers for return values of functions.
11896
11897 The usual calling convention has functions return values of types
11898 @code{float} and @code{double} in an FPU register, even if there
11899 is no FPU@.  The idea is that the operating system should emulate
11900 an FPU@.
11901
11902 The option @option{-mno-fp-ret-in-387} causes such values to be returned
11903 in ordinary CPU registers instead.
11904
11905 @item -mno-fancy-math-387
11906 @opindex mno-fancy-math-387
11907 Some 387 emulators do not support the @code{sin}, @code{cos} and
11908 @code{sqrt} instructions for the 387.  Specify this option to avoid
11909 generating those instructions.  This option is the default on FreeBSD,
11910 OpenBSD and NetBSD@.  This option is overridden when @option{-march}
11911 indicates that the target cpu will always have an FPU and so the
11912 instruction will not need emulation.  As of revision 2.6.1, these
11913 instructions are not generated unless you also use the
11914 @option{-funsafe-math-optimizations} switch.
11915
11916 @item -malign-double
11917 @itemx -mno-align-double
11918 @opindex malign-double
11919 @opindex mno-align-double
11920 Control whether GCC aligns @code{double}, @code{long double}, and
11921 @code{long long} variables on a two word boundary or a one word
11922 boundary.  Aligning @code{double} variables on a two word boundary will
11923 produce code that runs somewhat faster on a @samp{Pentium} at the
11924 expense of more memory.
11925
11926 On x86-64, @option{-malign-double} is enabled by default.
11927
11928 @strong{Warning:} if you use the @option{-malign-double} switch,
11929 structures containing the above types will be aligned differently than
11930 the published application binary interface specifications for the 386
11931 and will not be binary compatible with structures in code compiled
11932 without that switch.
11933
11934 @item -m96bit-long-double
11935 @itemx -m128bit-long-double
11936 @opindex m96bit-long-double
11937 @opindex m128bit-long-double
11938 These switches control the size of @code{long double} type.  The i386
11939 application binary interface specifies the size to be 96 bits,
11940 so @option{-m96bit-long-double} is the default in 32 bit mode.
11941
11942 Modern architectures (Pentium and newer) would prefer @code{long double}
11943 to be aligned to an 8 or 16 byte boundary.  In arrays or structures
11944 conforming to the ABI, this would not be possible.  So specifying a
11945 @option{-m128bit-long-double} will align @code{long double}
11946 to a 16 byte boundary by padding the @code{long double} with an additional
11947 32 bit zero.
11948
11949 In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
11950 its ABI specifies that @code{long double} is to be aligned on 16 byte boundary.
11951
11952 Notice that neither of these options enable any extra precision over the x87
11953 standard of 80 bits for a @code{long double}.
11954
11955 @strong{Warning:} if you override the default value for your target ABI, the
11956 structures and arrays containing @code{long double} variables will change
11957 their size as well as function calling convention for function taking
11958 @code{long double} will be modified.  Hence they will not be binary
11959 compatible with arrays or structures in code compiled without that switch.
11960
11961 @item -mlarge-data-threshold=@var{number}
11962 @opindex mlarge-data-threshold=@var{number}
11963 When @option{-mcmodel=medium} is specified, the data greater than
11964 @var{threshold} are placed in large data section.  This value must be the
11965 same across all object linked into the binary and defaults to 65535.
11966
11967 @item -mrtd
11968 @opindex mrtd
11969 Use a different function-calling convention, in which functions that
11970 take a fixed number of arguments return with the @code{ret} @var{num}
11971 instruction, which pops their arguments while returning.  This saves one
11972 instruction in the caller since there is no need to pop the arguments
11973 there.
11974
11975 You can specify that an individual function is called with this calling
11976 sequence with the function attribute @samp{stdcall}.  You can also
11977 override the @option{-mrtd} option by using the function attribute
11978 @samp{cdecl}.  @xref{Function Attributes}.
11979
11980 @strong{Warning:} this calling convention is incompatible with the one
11981 normally used on Unix, so you cannot use it if you need to call
11982 libraries compiled with the Unix compiler.
11983
11984 Also, you must provide function prototypes for all functions that
11985 take variable numbers of arguments (including @code{printf});
11986 otherwise incorrect code will be generated for calls to those
11987 functions.
11988
11989 In addition, seriously incorrect code will result if you call a
11990 function with too many arguments.  (Normally, extra arguments are
11991 harmlessly ignored.)
11992
11993 @item -mregparm=@var{num}
11994 @opindex mregparm
11995 Control how many registers are used to pass integer arguments.  By
11996 default, no registers are used to pass arguments, and at most 3
11997 registers can be used.  You can control this behavior for a specific
11998 function by using the function attribute @samp{regparm}.
11999 @xref{Function Attributes}.
12000
12001 @strong{Warning:} if you use this switch, and
12002 @var{num} is nonzero, then you must build all modules with the same
12003 value, including any libraries.  This includes the system libraries and
12004 startup modules.
12005
12006 @item -msseregparm
12007 @opindex msseregparm
12008 Use SSE register passing conventions for float and double arguments
12009 and return values.  You can control this behavior for a specific
12010 function by using the function attribute @samp{sseregparm}.
12011 @xref{Function Attributes}.
12012
12013 @strong{Warning:} if you use this switch then you must build all
12014 modules with the same value, including any libraries.  This includes
12015 the system libraries and startup modules.
12016
12017 @item -mpc32
12018 @itemx -mpc64
12019 @itemx -mpc80
12020 @opindex mpc32
12021 @opindex mpc64
12022 @opindex mpc80
12023
12024 Set 80387 floating-point precision to 32, 64 or 80 bits.  When @option{-mpc32}
12025 is specified, the significands of results of floating-point operations are
12026 rounded to 24 bits (single precision); @option{-mpc64} rounds the
12027 significands of results of floating-point operations to 53 bits (double
12028 precision) and @option{-mpc80} rounds the significands of results of
12029 floating-point operations to 64 bits (extended double precision), which is
12030 the default.  When this option is used, floating-point operations in higher
12031 precisions are not available to the programmer without setting the FPU
12032 control word explicitly.
12033
12034 Setting the rounding of floating-point operations to less than the default
12035 80 bits can speed some programs by 2% or more.  Note that some mathematical
12036 libraries assume that extended precision (80 bit) floating-point operations
12037 are enabled by default; routines in such libraries could suffer significant
12038 loss of accuracy, typically through so-called "catastrophic cancellation",
12039 when this option is used to set the precision to less than extended precision.
12040
12041 @item -mstackrealign
12042 @opindex mstackrealign
12043 Realign the stack at entry.  On the Intel x86, the @option{-mstackrealign}
12044 option will generate an alternate prologue and epilogue that realigns the
12045 runtime stack if necessary.  This supports mixing legacy codes that keep
12046 a 4-byte aligned stack with modern codes that keep a 16-byte stack for
12047 SSE compatibility.  See also the attribute @code{force_align_arg_pointer},
12048 applicable to individual functions.
12049
12050 @item -mpreferred-stack-boundary=@var{num}
12051 @opindex mpreferred-stack-boundary
12052 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
12053 byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
12054 the default is 4 (16 bytes or 128 bits).
12055
12056 @item -mincoming-stack-boundary=@var{num}
12057 @opindex mincoming-stack-boundary
12058 Assume the incoming stack is aligned to a 2 raised to @var{num} byte
12059 boundary.  If @option{-mincoming-stack-boundary} is not specified,
12060 the one specified by @option{-mpreferred-stack-boundary} will be used.
12061
12062 On Pentium and PentiumPro, @code{double} and @code{long double} values
12063 should be aligned to an 8 byte boundary (see @option{-malign-double}) or
12064 suffer significant run time performance penalties.  On Pentium III, the
12065 Streaming SIMD Extension (SSE) data type @code{__m128} may not work
12066 properly if it is not 16 byte aligned.
12067
12068 To ensure proper alignment of this values on the stack, the stack boundary
12069 must be as aligned as that required by any value stored on the stack.
12070 Further, every function must be generated such that it keeps the stack
12071 aligned.  Thus calling a function compiled with a higher preferred
12072 stack boundary from a function compiled with a lower preferred stack
12073 boundary will most likely misalign the stack.  It is recommended that
12074 libraries that use callbacks always use the default setting.
12075
12076 This extra alignment does consume extra stack space, and generally
12077 increases code size.  Code that is sensitive to stack space usage, such
12078 as embedded systems and operating system kernels, may want to reduce the
12079 preferred alignment to @option{-mpreferred-stack-boundary=2}.
12080
12081 @item -mmmx
12082 @itemx -mno-mmx
12083 @itemx -msse
12084 @itemx -mno-sse
12085 @itemx -msse2
12086 @itemx -mno-sse2
12087 @itemx -msse3
12088 @itemx -mno-sse3
12089 @itemx -mssse3
12090 @itemx -mno-ssse3
12091 @itemx -msse4.1
12092 @itemx -mno-sse4.1
12093 @itemx -msse4.2
12094 @itemx -mno-sse4.2
12095 @itemx -msse4
12096 @itemx -mno-sse4
12097 @itemx -mavx
12098 @itemx -mno-avx
12099 @itemx -maes
12100 @itemx -mno-aes
12101 @itemx -mpclmul
12102 @itemx -mno-pclmul
12103 @itemx -msse4a
12104 @itemx -mno-sse4a
12105 @itemx -mfma4
12106 @itemx -mno-fma4
12107 @itemx -mxop
12108 @itemx -mno-xop
12109 @itemx -mlwp
12110 @itemx -mno-lwp
12111 @itemx -m3dnow
12112 @itemx -mno-3dnow
12113 @itemx -mpopcnt
12114 @itemx -mno-popcnt
12115 @itemx -mabm
12116 @itemx -mno-abm
12117 @opindex mmmx
12118 @opindex mno-mmx
12119 @opindex msse
12120 @opindex mno-sse
12121 @opindex m3dnow
12122 @opindex mno-3dnow
12123 These switches enable or disable the use of instructions in the MMX,
12124 SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, SSE4A, FMA4, XOP,
12125 LWP, ABM or 3DNow!@: extended instruction sets.
12126 These extensions are also available as built-in functions: see
12127 @ref{X86 Built-in Functions}, for details of the functions enabled and
12128 disabled by these switches.
12129
12130 To have SSE/SSE2 instructions generated automatically from floating-point
12131 code (as opposed to 387 instructions), see @option{-mfpmath=sse}.
12132
12133 GCC depresses SSEx instructions when @option{-mavx} is used. Instead, it
12134 generates new AVX instructions or AVX equivalence for all SSEx instructions
12135 when needed.
12136
12137 These options will enable GCC to use these extended instructions in
12138 generated code, even without @option{-mfpmath=sse}.  Applications which
12139 perform runtime CPU detection must compile separate files for each
12140 supported architecture, using the appropriate flags.  In particular,
12141 the file containing the CPU detection code should be compiled without
12142 these options.
12143
12144 @item -mfused-madd
12145 @itemx -mno-fused-madd
12146 @opindex mfused-madd
12147 @opindex mno-fused-madd
12148 Do (don't) generate code that uses the fused multiply/add or multiply/subtract
12149 instructions.  The default is to use these instructions.
12150
12151 @item -mcld
12152 @opindex mcld
12153 This option instructs GCC to emit a @code{cld} instruction in the prologue
12154 of functions that use string instructions.  String instructions depend on
12155 the DF flag to select between autoincrement or autodecrement mode.  While the
12156 ABI specifies the DF flag to be cleared on function entry, some operating
12157 systems violate this specification by not clearing the DF flag in their
12158 exception dispatchers.  The exception handler can be invoked with the DF flag
12159 set which leads to wrong direction mode, when string instructions are used.
12160 This option can be enabled by default on 32-bit x86 targets by configuring
12161 GCC with the @option{--enable-cld} configure option.  Generation of @code{cld}
12162 instructions can be suppressed with the @option{-mno-cld} compiler option
12163 in this case.
12164
12165 @item -mcx16
12166 @opindex mcx16
12167 This option will enable GCC to use CMPXCHG16B instruction in generated code.
12168 CMPXCHG16B allows for atomic operations on 128-bit double quadword (or oword)
12169 data types.  This is useful for high resolution counters that could be updated
12170 by multiple processors (or cores).  This instruction is generated as part of
12171 atomic built-in functions: see @ref{Atomic Builtins} for details.
12172
12173 @item -msahf
12174 @opindex msahf
12175 This option will enable GCC to use SAHF instruction in generated 64-bit code.
12176 Early Intel CPUs with Intel 64 lacked LAHF and SAHF instructions supported
12177 by AMD64 until introduction of Pentium 4 G1 step in December 2005.  LAHF and
12178 SAHF are load and store instructions, respectively, for certain status flags.
12179 In 64-bit mode, SAHF instruction is used to optimize @code{fmod}, @code{drem}
12180 or @code{remainder} built-in functions: see @ref{Other Builtins} for details.
12181
12182 @item -mmovbe
12183 @opindex mmovbe
12184 This option will enable GCC to use movbe instruction to implement
12185 @code{__builtin_bswap32} and @code{__builtin_bswap64}.
12186
12187 @item -mcrc32
12188 @opindex mcrc32
12189 This option will enable built-in functions, @code{__builtin_ia32_crc32qi},
12190 @code{__builtin_ia32_crc32hi}. @code{__builtin_ia32_crc32si} and
12191 @code{__builtin_ia32_crc32di} to generate the crc32 machine instruction.
12192
12193 @item -mrecip
12194 @opindex mrecip
12195 This option will enable GCC to use RCPSS and RSQRTSS instructions (and their
12196 vectorized variants RCPPS and RSQRTPS) with an additional Newton-Raphson step
12197 to increase precision instead of DIVSS and SQRTSS (and their vectorized
12198 variants) for single precision floating point arguments.  These instructions
12199 are generated only when @option{-funsafe-math-optimizations} is enabled
12200 together with @option{-finite-math-only} and @option{-fno-trapping-math}.
12201 Note that while the throughput of the sequence is higher than the throughput
12202 of the non-reciprocal instruction, the precision of the sequence can be
12203 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
12204
12205 Note that GCC implements 1.0f/sqrtf(x) in terms of RSQRTSS (or RSQRTPS)
12206 already with @option{-ffast-math} (or the above option combination), and
12207 doesn't need @option{-mrecip}.
12208
12209 @item -mveclibabi=@var{type}
12210 @opindex mveclibabi
12211 Specifies the ABI type to use for vectorizing intrinsics using an
12212 external library.  Supported types are @code{svml} for the Intel short
12213 vector math library and @code{acml} for the AMD math core library style
12214 of interfacing.  GCC will currently emit calls to @code{vmldExp2},
12215 @code{vmldLn2}, @code{vmldLog102}, @code{vmldLog102}, @code{vmldPow2},
12216 @code{vmldTanh2}, @code{vmldTan2}, @code{vmldAtan2}, @code{vmldAtanh2},
12217 @code{vmldCbrt2}, @code{vmldSinh2}, @code{vmldSin2}, @code{vmldAsinh2},
12218 @code{vmldAsin2}, @code{vmldCosh2}, @code{vmldCos2}, @code{vmldAcosh2},
12219 @code{vmldAcos2}, @code{vmlsExp4}, @code{vmlsLn4}, @code{vmlsLog104},
12220 @code{vmlsLog104}, @code{vmlsPow4}, @code{vmlsTanh4}, @code{vmlsTan4},
12221 @code{vmlsAtan4}, @code{vmlsAtanh4}, @code{vmlsCbrt4}, @code{vmlsSinh4},
12222 @code{vmlsSin4}, @code{vmlsAsinh4}, @code{vmlsAsin4}, @code{vmlsCosh4},
12223 @code{vmlsCos4}, @code{vmlsAcosh4} and @code{vmlsAcos4} for corresponding
12224 function type when @option{-mveclibabi=svml} is used and @code{__vrd2_sin},
12225 @code{__vrd2_cos}, @code{__vrd2_exp}, @code{__vrd2_log}, @code{__vrd2_log2},
12226 @code{__vrd2_log10}, @code{__vrs4_sinf}, @code{__vrs4_cosf},
12227 @code{__vrs4_expf}, @code{__vrs4_logf}, @code{__vrs4_log2f},
12228 @code{__vrs4_log10f} and @code{__vrs4_powf} for corresponding function type
12229 when @option{-mveclibabi=acml} is used. Both @option{-ftree-vectorize} and
12230 @option{-funsafe-math-optimizations} have to be enabled. A SVML or ACML ABI
12231 compatible library will have to be specified at link time.
12232
12233 @item -mabi=@var{name}
12234 @opindex mabi
12235 Generate code for the specified calling convention.  Permissible values
12236 are: @samp{sysv} for the ABI used on GNU/Linux and other systems and
12237 @samp{ms} for the Microsoft ABI.  The default is to use the Microsoft
12238 ABI when targeting Windows.  On all other systems, the default is the
12239 SYSV ABI.  You can control this behavior for a specific function by
12240 using the function attribute @samp{ms_abi}/@samp{sysv_abi}.
12241 @xref{Function Attributes}.
12242
12243 @item -mpush-args
12244 @itemx -mno-push-args
12245 @opindex mpush-args
12246 @opindex mno-push-args
12247 Use PUSH operations to store outgoing parameters.  This method is shorter
12248 and usually equally fast as method using SUB/MOV operations and is enabled
12249 by default.  In some cases disabling it may improve performance because of
12250 improved scheduling and reduced dependencies.
12251
12252 @item -maccumulate-outgoing-args
12253 @opindex maccumulate-outgoing-args
12254 If enabled, the maximum amount of space required for outgoing arguments will be
12255 computed in the function prologue.  This is faster on most modern CPUs
12256 because of reduced dependencies, improved scheduling and reduced stack usage
12257 when preferred stack boundary is not equal to 2.  The drawback is a notable
12258 increase in code size.  This switch implies @option{-mno-push-args}.
12259
12260 @item -mthreads
12261 @opindex mthreads
12262 Support thread-safe exception handling on @samp{Mingw32}.  Code that relies
12263 on thread-safe exception handling must compile and link all code with the
12264 @option{-mthreads} option.  When compiling, @option{-mthreads} defines
12265 @option{-D_MT}; when linking, it links in a special thread helper library
12266 @option{-lmingwthrd} which cleans up per thread exception handling data.
12267
12268 @item -mno-align-stringops
12269 @opindex mno-align-stringops
12270 Do not align destination of inlined string operations.  This switch reduces
12271 code size and improves performance in case the destination is already aligned,
12272 but GCC doesn't know about it.
12273
12274 @item -minline-all-stringops
12275 @opindex minline-all-stringops
12276 By default GCC inlines string operations only when destination is known to be
12277 aligned at least to 4 byte boundary.  This enables more inlining, increase code
12278 size, but may improve performance of code that depends on fast memcpy, strlen
12279 and memset for short lengths.
12280
12281 @item -minline-stringops-dynamically
12282 @opindex minline-stringops-dynamically
12283 For string operation of unknown size, inline runtime checks so for small
12284 blocks inline code is used, while for large blocks library call is used.
12285
12286 @item -mstringop-strategy=@var{alg}
12287 @opindex mstringop-strategy=@var{alg}
12288 Overwrite internal decision heuristic about particular algorithm to inline
12289 string operation with.  The allowed values are @code{rep_byte},
12290 @code{rep_4byte}, @code{rep_8byte} for expanding using i386 @code{rep} prefix
12291 of specified size, @code{byte_loop}, @code{loop}, @code{unrolled_loop} for
12292 expanding inline loop, @code{libcall} for always expanding library call.
12293
12294 @item -momit-leaf-frame-pointer
12295 @opindex momit-leaf-frame-pointer
12296 Don't keep the frame pointer in a register for leaf functions.  This
12297 avoids the instructions to save, set up and restore frame pointers and
12298 makes an extra register available in leaf functions.  The option
12299 @option{-fomit-frame-pointer} removes the frame pointer for all functions
12300 which might make debugging harder.
12301
12302 @item -mtls-direct-seg-refs
12303 @itemx -mno-tls-direct-seg-refs
12304 @opindex mtls-direct-seg-refs
12305 Controls whether TLS variables may be accessed with offsets from the
12306 TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
12307 or whether the thread base pointer must be added.  Whether or not this
12308 is legal depends on the operating system, and whether it maps the
12309 segment to cover the entire TLS area.
12310
12311 For systems that use GNU libc, the default is on.
12312
12313 @item -msse2avx
12314 @itemx -mno-sse2avx
12315 @opindex msse2avx
12316 Specify that the assembler should encode SSE instructions with VEX
12317 prefix.  The option @option{-mavx} turns this on by default.
12318 @end table
12319
12320 These @samp{-m} switches are supported in addition to the above
12321 on AMD x86-64 processors in 64-bit environments.
12322
12323 @table @gcctabopt
12324 @item -m32
12325 @itemx -m64
12326 @opindex m32
12327 @opindex m64
12328 Generate code for a 32-bit or 64-bit environment.
12329 The 32-bit environment sets int, long and pointer to 32 bits and
12330 generates code that runs on any i386 system.
12331 The 64-bit environment sets int to 32 bits and long and pointer
12332 to 64 bits and generates code for AMD's x86-64 architecture. For
12333 darwin only the -m64 option turns off the @option{-fno-pic} and
12334 @option{-mdynamic-no-pic} options.
12335
12336 @item -mno-red-zone
12337 @opindex mno-red-zone
12338 Do not use a so called red zone for x86-64 code.  The red zone is mandated
12339 by the x86-64 ABI, it is a 128-byte area beyond the location of the
12340 stack pointer that will not be modified by signal or interrupt handlers
12341 and therefore can be used for temporary data without adjusting the stack
12342 pointer.  The flag @option{-mno-red-zone} disables this red zone.
12343
12344 @item -mcmodel=small
12345 @opindex mcmodel=small
12346 Generate code for the small code model: the program and its symbols must
12347 be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
12348 Programs can be statically or dynamically linked.  This is the default
12349 code model.
12350
12351 @item -mcmodel=kernel
12352 @opindex mcmodel=kernel
12353 Generate code for the kernel code model.  The kernel runs in the
12354 negative 2 GB of the address space.
12355 This model has to be used for Linux kernel code.
12356
12357 @item -mcmodel=medium
12358 @opindex mcmodel=medium
12359 Generate code for the medium model: The program is linked in the lower 2
12360 GB of the address space.  Small symbols are also placed there.  Symbols
12361 with sizes larger than @option{-mlarge-data-threshold} are put into
12362 large data or bss sections and can be located above 2GB.  Programs can
12363 be statically or dynamically linked.
12364
12365 @item -mcmodel=large
12366 @opindex mcmodel=large
12367 Generate code for the large model: This model makes no assumptions
12368 about addresses and sizes of sections.
12369 @end table
12370
12371 @node IA-64 Options
12372 @subsection IA-64 Options
12373 @cindex IA-64 Options
12374
12375 These are the @samp{-m} options defined for the Intel IA-64 architecture.
12376
12377 @table @gcctabopt
12378 @item -mbig-endian
12379 @opindex mbig-endian
12380 Generate code for a big endian target.  This is the default for HP-UX@.
12381
12382 @item -mlittle-endian
12383 @opindex mlittle-endian
12384 Generate code for a little endian target.  This is the default for AIX5
12385 and GNU/Linux.
12386
12387 @item -mgnu-as
12388 @itemx -mno-gnu-as
12389 @opindex mgnu-as
12390 @opindex mno-gnu-as
12391 Generate (or don't) code for the GNU assembler.  This is the default.
12392 @c Also, this is the default if the configure option @option{--with-gnu-as}
12393 @c is used.
12394
12395 @item -mgnu-ld
12396 @itemx -mno-gnu-ld
12397 @opindex mgnu-ld
12398 @opindex mno-gnu-ld
12399 Generate (or don't) code for the GNU linker.  This is the default.
12400 @c Also, this is the default if the configure option @option{--with-gnu-ld}
12401 @c is used.
12402
12403 @item -mno-pic
12404 @opindex mno-pic
12405 Generate code that does not use a global pointer register.  The result
12406 is not position independent code, and violates the IA-64 ABI@.
12407
12408 @item -mvolatile-asm-stop
12409 @itemx -mno-volatile-asm-stop
12410 @opindex mvolatile-asm-stop
12411 @opindex mno-volatile-asm-stop
12412 Generate (or don't) a stop bit immediately before and after volatile asm
12413 statements.
12414
12415 @item -mregister-names
12416 @itemx -mno-register-names
12417 @opindex mregister-names
12418 @opindex mno-register-names
12419 Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
12420 the stacked registers.  This may make assembler output more readable.
12421
12422 @item -mno-sdata
12423 @itemx -msdata
12424 @opindex mno-sdata
12425 @opindex msdata
12426 Disable (or enable) optimizations that use the small data section.  This may
12427 be useful for working around optimizer bugs.
12428
12429 @item -mconstant-gp
12430 @opindex mconstant-gp
12431 Generate code that uses a single constant global pointer value.  This is
12432 useful when compiling kernel code.
12433
12434 @item -mauto-pic
12435 @opindex mauto-pic
12436 Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
12437 This is useful when compiling firmware code.
12438
12439 @item -minline-float-divide-min-latency
12440 @opindex minline-float-divide-min-latency
12441 Generate code for inline divides of floating point values
12442 using the minimum latency algorithm.
12443
12444 @item -minline-float-divide-max-throughput
12445 @opindex minline-float-divide-max-throughput
12446 Generate code for inline divides of floating point values
12447 using the maximum throughput algorithm.
12448
12449 @item -mno-inline-float-divide
12450 @opindex mno-inline-float-divide
12451 Do not generate inline code for divides of floating point values.
12452
12453 @item -minline-int-divide-min-latency
12454 @opindex minline-int-divide-min-latency
12455 Generate code for inline divides of integer values
12456 using the minimum latency algorithm.
12457
12458 @item -minline-int-divide-max-throughput
12459 @opindex minline-int-divide-max-throughput
12460 Generate code for inline divides of integer values
12461 using the maximum throughput algorithm.
12462
12463 @item -mno-inline-int-divide
12464 @opindex mno-inline-int-divide
12465 Do not generate inline code for divides of integer values.
12466
12467 @item -minline-sqrt-min-latency
12468 @opindex minline-sqrt-min-latency
12469 Generate code for inline square roots
12470 using the minimum latency algorithm.
12471
12472 @item -minline-sqrt-max-throughput
12473 @opindex minline-sqrt-max-throughput
12474 Generate code for inline square roots
12475 using the maximum throughput algorithm.
12476
12477 @item -mno-inline-sqrt
12478 @opindex mno-inline-sqrt
12479 Do not generate inline code for sqrt.
12480
12481 @item -mfused-madd
12482 @itemx -mno-fused-madd
12483 @opindex mfused-madd
12484 @opindex mno-fused-madd
12485 Do (don't) generate code that uses the fused multiply/add or multiply/subtract
12486 instructions.  The default is to use these instructions.
12487
12488 @item -mno-dwarf2-asm
12489 @itemx -mdwarf2-asm
12490 @opindex mno-dwarf2-asm
12491 @opindex mdwarf2-asm
12492 Don't (or do) generate assembler code for the DWARF2 line number debugging
12493 info.  This may be useful when not using the GNU assembler.
12494
12495 @item -mearly-stop-bits
12496 @itemx -mno-early-stop-bits
12497 @opindex mearly-stop-bits
12498 @opindex mno-early-stop-bits
12499 Allow stop bits to be placed earlier than immediately preceding the
12500 instruction that triggered the stop bit.  This can improve instruction
12501 scheduling, but does not always do so.
12502
12503 @item -mfixed-range=@var{register-range}
12504 @opindex mfixed-range
12505 Generate code treating the given register range as fixed registers.
12506 A fixed register is one that the register allocator can not use.  This is
12507 useful when compiling kernel code.  A register range is specified as
12508 two registers separated by a dash.  Multiple register ranges can be
12509 specified separated by a comma.
12510
12511 @item -mtls-size=@var{tls-size}
12512 @opindex mtls-size
12513 Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
12514 64.
12515
12516 @item -mtune=@var{cpu-type}
12517 @opindex mtune
12518 Tune the instruction scheduling for a particular CPU, Valid values are
12519 itanium, itanium1, merced, itanium2, and mckinley.
12520
12521 @item -milp32
12522 @itemx -mlp64
12523 @opindex milp32
12524 @opindex mlp64
12525 Generate code for a 32-bit or 64-bit environment.
12526 The 32-bit environment sets int, long and pointer to 32 bits.
12527 The 64-bit environment sets int to 32 bits and long and pointer
12528 to 64 bits.  These are HP-UX specific flags.
12529
12530 @item -mno-sched-br-data-spec
12531 @itemx -msched-br-data-spec
12532 @opindex mno-sched-br-data-spec
12533 @opindex msched-br-data-spec
12534 (Dis/En)able data speculative scheduling before reload.
12535 This will result in generation of the ld.a instructions and
12536 the corresponding check instructions (ld.c / chk.a).
12537 The default is 'disable'.
12538
12539 @item -msched-ar-data-spec
12540 @itemx -mno-sched-ar-data-spec
12541 @opindex msched-ar-data-spec
12542 @opindex mno-sched-ar-data-spec
12543 (En/Dis)able data speculative scheduling after reload.
12544 This will result in generation of the ld.a instructions and
12545 the corresponding check instructions (ld.c / chk.a).
12546 The default is 'enable'.
12547
12548 @item -mno-sched-control-spec
12549 @itemx -msched-control-spec
12550 @opindex mno-sched-control-spec
12551 @opindex msched-control-spec
12552 (Dis/En)able control speculative scheduling.  This feature is
12553 available only during region scheduling (i.e.@: before reload).
12554 This will result in generation of the ld.s instructions and
12555 the corresponding check instructions chk.s .
12556 The default is 'disable'.
12557
12558 @item -msched-br-in-data-spec
12559 @itemx -mno-sched-br-in-data-spec
12560 @opindex msched-br-in-data-spec
12561 @opindex mno-sched-br-in-data-spec
12562 (En/Dis)able speculative scheduling of the instructions that
12563 are dependent on the data speculative loads before reload.
12564 This is effective only with @option{-msched-br-data-spec} enabled.
12565 The default is 'enable'.
12566
12567 @item -msched-ar-in-data-spec
12568 @itemx -mno-sched-ar-in-data-spec
12569 @opindex msched-ar-in-data-spec
12570 @opindex mno-sched-ar-in-data-spec
12571 (En/Dis)able speculative scheduling of the instructions that
12572 are dependent on the data speculative loads after reload.
12573 This is effective only with @option{-msched-ar-data-spec} enabled.
12574 The default is 'enable'.
12575
12576 @item -msched-in-control-spec
12577 @itemx -mno-sched-in-control-spec
12578 @opindex msched-in-control-spec
12579 @opindex mno-sched-in-control-spec
12580 (En/Dis)able speculative scheduling of the instructions that
12581 are dependent on the control speculative loads.
12582 This is effective only with @option{-msched-control-spec} enabled.
12583 The default is 'enable'.
12584
12585 @item -mno-sched-prefer-non-data-spec-insns
12586 @itemx -msched-prefer-non-data-spec-insns
12587 @opindex mno-sched-prefer-non-data-spec-insns
12588 @opindex msched-prefer-non-data-spec-insns
12589 If enabled, data speculative instructions will be chosen for schedule
12590 only if there are no other choices at the moment.  This will make
12591 the use of the data speculation much more conservative.
12592 The default is 'disable'.
12593
12594 @item -mno-sched-prefer-non-control-spec-insns
12595 @itemx -msched-prefer-non-control-spec-insns
12596 @opindex mno-sched-prefer-non-control-spec-insns
12597 @opindex msched-prefer-non-control-spec-insns
12598 If enabled, control speculative instructions will be chosen for schedule
12599 only if there are no other choices at the moment.  This will make
12600 the use of the control speculation much more conservative.
12601 The default is 'disable'.
12602
12603 @item -mno-sched-count-spec-in-critical-path
12604 @itemx -msched-count-spec-in-critical-path
12605 @opindex mno-sched-count-spec-in-critical-path
12606 @opindex msched-count-spec-in-critical-path
12607 If enabled, speculative dependencies will be considered during
12608 computation of the instructions priorities.  This will make the use of the
12609 speculation a bit more conservative.
12610 The default is 'disable'.
12611
12612 @item -msched-spec-ldc
12613 @opindex msched-spec-ldc
12614 Use a simple data speculation check.  This option is on by default.
12615
12616 @item -msched-control-spec-ldc
12617 @opindex msched-spec-ldc
12618 Use a simple check for control speculation.  This option is on by default.
12619
12620 @item -msched-stop-bits-after-every-cycle
12621 @opindex msched-stop-bits-after-every-cycle
12622 Place a stop bit after every cycle when scheduling.  This option is on
12623 by default.
12624
12625 @item -msched-fp-mem-deps-zero-cost
12626 @opindex msched-fp-mem-deps-zero-cost
12627 Assume that floating-point stores and loads are not likely to cause a conflict
12628 when placed into the same instruction group.  This option is disabled by
12629 default.
12630
12631 @item -msel-sched-dont-check-control-spec
12632 @opindex msel-sched-dont-check-control-spec
12633 Generate checks for control speculation in selective scheduling.
12634 This flag is disabled by default.
12635
12636 @item -msched-max-memory-insns=@var{max-insns}
12637 @opindex msched-max-memory-insns
12638 Limit on the number of memory insns per instruction group, giving lower
12639 priority to subsequent memory insns attempting to schedule in the same
12640 instruction group. Frequently useful to prevent cache bank conflicts.
12641 The default value is 1.
12642
12643 @item -msched-max-memory-insns-hard-limit
12644 @opindex msched-max-memory-insns-hard-limit
12645 Disallow more than `msched-max-memory-insns' in instruction group.
12646 Otherwise, limit is `soft' meaning that we would prefer non-memory operations
12647 when limit is reached but may still schedule memory operations.
12648
12649 @end table
12650
12651 @node IA-64/VMS Options
12652 @subsection IA-64/VMS Options
12653
12654 These @samp{-m} options are defined for the IA-64/VMS implementations:
12655
12656 @table @gcctabopt
12657 @item -mvms-return-codes
12658 @opindex mvms-return-codes
12659 Return VMS condition codes from main. The default is to return POSIX
12660 style condition (e.g.@ error) codes.
12661
12662 @item -mdebug-main=@var{prefix}
12663 @opindex mdebug-main=@var{prefix}
12664 Flag the first routine whose name starts with @var{prefix} as the main
12665 routine for the debugger.
12666
12667 @item -mmalloc64
12668 @opindex mmalloc64
12669 Default to 64bit memory allocation routines.
12670 @end table
12671
12672 @node LM32 Options
12673 @subsection LM32 Options
12674 @cindex LM32 options
12675
12676 These @option{-m} options are defined for the Lattice Mico32 architecture:
12677
12678 @table @gcctabopt
12679 @item -mbarrel-shift-enabled
12680 @opindex mbarrel-shift-enabled
12681 Enable barrel-shift instructions.
12682
12683 @item -mdivide-enabled
12684 @opindex mdivide-enabled
12685 Enable divide and modulus instructions.
12686
12687 @item -mmultiply-enabled
12688 @opindex multiply-enabled
12689 Enable multiply instructions.
12690
12691 @item -msign-extend-enabled
12692 @opindex msign-extend-enabled
12693 Enable sign extend instructions.
12694
12695 @item -muser-enabled
12696 @opindex muser-enabled
12697 Enable user-defined instructions.
12698
12699 @end table
12700
12701 @node M32C Options
12702 @subsection M32C Options
12703 @cindex M32C options
12704
12705 @table @gcctabopt
12706 @item -mcpu=@var{name}
12707 @opindex mcpu=
12708 Select the CPU for which code is generated.  @var{name} may be one of
12709 @samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to
12710 /60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for
12711 the M32C/80 series.
12712
12713 @item -msim
12714 @opindex msim
12715 Specifies that the program will be run on the simulator.  This causes
12716 an alternate runtime library to be linked in which supports, for
12717 example, file I/O@.  You must not use this option when generating
12718 programs that will run on real hardware; you must provide your own
12719 runtime library for whatever I/O functions are needed.
12720
12721 @item -memregs=@var{number}
12722 @opindex memregs=
12723 Specifies the number of memory-based pseudo-registers GCC will use
12724 during code generation.  These pseudo-registers will be used like real
12725 registers, so there is a tradeoff between GCC's ability to fit the
12726 code into available registers, and the performance penalty of using
12727 memory instead of registers.  Note that all modules in a program must
12728 be compiled with the same value for this option.  Because of that, you
12729 must not use this option with the default runtime libraries gcc
12730 builds.
12731
12732 @end table
12733
12734 @node M32R/D Options
12735 @subsection M32R/D Options
12736 @cindex M32R/D options
12737
12738 These @option{-m} options are defined for Renesas M32R/D architectures:
12739
12740 @table @gcctabopt
12741 @item -m32r2
12742 @opindex m32r2
12743 Generate code for the M32R/2@.
12744
12745 @item -m32rx
12746 @opindex m32rx
12747 Generate code for the M32R/X@.
12748
12749 @item -m32r
12750 @opindex m32r
12751 Generate code for the M32R@.  This is the default.
12752
12753 @item -mmodel=small
12754 @opindex mmodel=small
12755 Assume all objects live in the lower 16MB of memory (so that their addresses
12756 can be loaded with the @code{ld24} instruction), and assume all subroutines
12757 are reachable with the @code{bl} instruction.
12758 This is the default.
12759
12760 The addressability of a particular object can be set with the
12761 @code{model} attribute.
12762
12763 @item -mmodel=medium
12764 @opindex mmodel=medium
12765 Assume objects may be anywhere in the 32-bit address space (the compiler
12766 will generate @code{seth/add3} instructions to load their addresses), and
12767 assume all subroutines are reachable with the @code{bl} instruction.
12768
12769 @item -mmodel=large
12770 @opindex mmodel=large
12771 Assume objects may be anywhere in the 32-bit address space (the compiler
12772 will generate @code{seth/add3} instructions to load their addresses), and
12773 assume subroutines may not be reachable with the @code{bl} instruction
12774 (the compiler will generate the much slower @code{seth/add3/jl}
12775 instruction sequence).
12776
12777 @item -msdata=none
12778 @opindex msdata=none
12779 Disable use of the small data area.  Variables will be put into
12780 one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
12781 @code{section} attribute has been specified).
12782 This is the default.
12783
12784 The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
12785 Objects may be explicitly put in the small data area with the
12786 @code{section} attribute using one of these sections.
12787
12788 @item -msdata=sdata
12789 @opindex msdata=sdata
12790 Put small global and static data in the small data area, but do not
12791 generate special code to reference them.
12792
12793 @item -msdata=use
12794 @opindex msdata=use
12795 Put small global and static data in the small data area, and generate
12796 special instructions to reference them.
12797
12798 @item -G @var{num}
12799 @opindex G
12800 @cindex smaller data references
12801 Put global and static objects less than or equal to @var{num} bytes
12802 into the small data or bss sections instead of the normal data or bss
12803 sections.  The default value of @var{num} is 8.
12804 The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
12805 for this option to have any effect.
12806
12807 All modules should be compiled with the same @option{-G @var{num}} value.
12808 Compiling with different values of @var{num} may or may not work; if it
12809 doesn't the linker will give an error message---incorrect code will not be
12810 generated.
12811
12812 @item -mdebug
12813 @opindex mdebug
12814 Makes the M32R specific code in the compiler display some statistics
12815 that might help in debugging programs.
12816
12817 @item -malign-loops
12818 @opindex malign-loops
12819 Align all loops to a 32-byte boundary.
12820
12821 @item -mno-align-loops
12822 @opindex mno-align-loops
12823 Do not enforce a 32-byte alignment for loops.  This is the default.
12824
12825 @item -missue-rate=@var{number}
12826 @opindex missue-rate=@var{number}
12827 Issue @var{number} instructions per cycle.  @var{number} can only be 1
12828 or 2.
12829
12830 @item -mbranch-cost=@var{number}
12831 @opindex mbranch-cost=@var{number}
12832 @var{number} can only be 1 or 2.  If it is 1 then branches will be
12833 preferred over conditional code, if it is 2, then the opposite will
12834 apply.
12835
12836 @item -mflush-trap=@var{number}
12837 @opindex mflush-trap=@var{number}
12838 Specifies the trap number to use to flush the cache.  The default is
12839 12.  Valid numbers are between 0 and 15 inclusive.
12840
12841 @item -mno-flush-trap
12842 @opindex mno-flush-trap
12843 Specifies that the cache cannot be flushed by using a trap.
12844
12845 @item -mflush-func=@var{name}
12846 @opindex mflush-func=@var{name}
12847 Specifies the name of the operating system function to call to flush
12848 the cache.  The default is @emph{_flush_cache}, but a function call
12849 will only be used if a trap is not available.
12850
12851 @item -mno-flush-func
12852 @opindex mno-flush-func
12853 Indicates that there is no OS function for flushing the cache.
12854
12855 @end table
12856
12857 @node M680x0 Options
12858 @subsection M680x0 Options
12859 @cindex M680x0 options
12860
12861 These are the @samp{-m} options defined for M680x0 and ColdFire processors.
12862 The default settings depend on which architecture was selected when
12863 the compiler was configured; the defaults for the most common choices
12864 are given below.
12865
12866 @table @gcctabopt
12867 @item -march=@var{arch}
12868 @opindex march
12869 Generate code for a specific M680x0 or ColdFire instruction set
12870 architecture.  Permissible values of @var{arch} for M680x0
12871 architectures are: @samp{68000}, @samp{68010}, @samp{68020},
12872 @samp{68030}, @samp{68040}, @samp{68060} and @samp{cpu32}.  ColdFire
12873 architectures are selected according to Freescale's ISA classification
12874 and the permissible values are: @samp{isaa}, @samp{isaaplus},
12875 @samp{isab} and @samp{isac}.
12876
12877 gcc defines a macro @samp{__mcf@var{arch}__} whenever it is generating
12878 code for a ColdFire target.  The @var{arch} in this macro is one of the
12879 @option{-march} arguments given above.
12880
12881 When used together, @option{-march} and @option{-mtune} select code
12882 that runs on a family of similar processors but that is optimized
12883 for a particular microarchitecture.
12884
12885 @item -mcpu=@var{cpu}
12886 @opindex mcpu
12887 Generate code for a specific M680x0 or ColdFire processor.
12888 The M680x0 @var{cpu}s are: @samp{68000}, @samp{68010}, @samp{68020},
12889 @samp{68030}, @samp{68040}, @samp{68060}, @samp{68302}, @samp{68332}
12890 and @samp{cpu32}.  The ColdFire @var{cpu}s are given by the table
12891 below, which also classifies the CPUs into families:
12892
12893 @multitable @columnfractions 0.20 0.80
12894 @item @strong{Family} @tab @strong{@samp{-mcpu} arguments}
12895 @item @samp{51} @tab @samp{51} @samp{51ac} @samp{51cn} @samp{51em} @samp{51qe}
12896 @item @samp{5206} @tab @samp{5202} @samp{5204} @samp{5206}
12897 @item @samp{5206e} @tab @samp{5206e}
12898 @item @samp{5208} @tab @samp{5207} @samp{5208}
12899 @item @samp{5211a} @tab @samp{5210a} @samp{5211a}
12900 @item @samp{5213} @tab @samp{5211} @samp{5212} @samp{5213}
12901 @item @samp{5216} @tab @samp{5214} @samp{5216}
12902 @item @samp{52235} @tab @samp{52230} @samp{52231} @samp{52232} @samp{52233} @samp{52234} @samp{52235}
12903 @item @samp{5225} @tab @samp{5224} @samp{5225}
12904 @item @samp{52259} @tab @samp{52252} @samp{52254} @samp{52255} @samp{52256} @samp{52258} @samp{52259}
12905 @item @samp{5235} @tab @samp{5232} @samp{5233} @samp{5234} @samp{5235} @samp{523x}
12906 @item @samp{5249} @tab @samp{5249}
12907 @item @samp{5250} @tab @samp{5250}
12908 @item @samp{5271} @tab @samp{5270} @samp{5271}
12909 @item @samp{5272} @tab @samp{5272}
12910 @item @samp{5275} @tab @samp{5274} @samp{5275}
12911 @item @samp{5282} @tab @samp{5280} @samp{5281} @samp{5282} @samp{528x}
12912 @item @samp{53017} @tab @samp{53011} @samp{53012} @samp{53013} @samp{53014} @samp{53015} @samp{53016} @samp{53017}
12913 @item @samp{5307} @tab @samp{5307}
12914 @item @samp{5329} @tab @samp{5327} @samp{5328} @samp{5329} @samp{532x}
12915 @item @samp{5373} @tab @samp{5372} @samp{5373} @samp{537x}
12916 @item @samp{5407} @tab @samp{5407}
12917 @item @samp{5475} @tab @samp{5470} @samp{5471} @samp{5472} @samp{5473} @samp{5474} @samp{5475} @samp{547x} @samp{5480} @samp{5481} @samp{5482} @samp{5483} @samp{5484} @samp{5485}
12918 @end multitable
12919
12920 @option{-mcpu=@var{cpu}} overrides @option{-march=@var{arch}} if
12921 @var{arch} is compatible with @var{cpu}.  Other combinations of
12922 @option{-mcpu} and @option{-march} are rejected.
12923
12924 gcc defines the macro @samp{__mcf_cpu_@var{cpu}} when ColdFire target
12925 @var{cpu} is selected.  It also defines @samp{__mcf_family_@var{family}},
12926 where the value of @var{family} is given by the table above.
12927
12928 @item -mtune=@var{tune}
12929 @opindex mtune
12930 Tune the code for a particular microarchitecture, within the
12931 constraints set by @option{-march} and @option{-mcpu}.
12932 The M680x0 microarchitectures are: @samp{68000}, @samp{68010},
12933 @samp{68020}, @samp{68030}, @samp{68040}, @samp{68060}
12934 and @samp{cpu32}.  The ColdFire microarchitectures
12935 are: @samp{cfv1}, @samp{cfv2}, @samp{cfv3}, @samp{cfv4} and @samp{cfv4e}.
12936
12937 You can also use @option{-mtune=68020-40} for code that needs
12938 to run relatively well on 68020, 68030 and 68040 targets.
12939 @option{-mtune=68020-60} is similar but includes 68060 targets
12940 as well.  These two options select the same tuning decisions as
12941 @option{-m68020-40} and @option{-m68020-60} respectively.
12942
12943 gcc defines the macros @samp{__mc@var{arch}} and @samp{__mc@var{arch}__}
12944 when tuning for 680x0 architecture @var{arch}.  It also defines
12945 @samp{mc@var{arch}} unless either @option{-ansi} or a non-GNU @option{-std}
12946 option is used.  If gcc is tuning for a range of architectures,
12947 as selected by @option{-mtune=68020-40} or @option{-mtune=68020-60},
12948 it defines the macros for every architecture in the range.
12949
12950 gcc also defines the macro @samp{__m@var{uarch}__} when tuning for
12951 ColdFire microarchitecture @var{uarch}, where @var{uarch} is one
12952 of the arguments given above.
12953
12954 @item -m68000
12955 @itemx -mc68000
12956 @opindex m68000
12957 @opindex mc68000
12958 Generate output for a 68000.  This is the default
12959 when the compiler is configured for 68000-based systems.
12960 It is equivalent to @option{-march=68000}.
12961
12962 Use this option for microcontrollers with a 68000 or EC000 core,
12963 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
12964
12965 @item -m68010
12966 @opindex m68010
12967 Generate output for a 68010.  This is the default
12968 when the compiler is configured for 68010-based systems.
12969 It is equivalent to @option{-march=68010}.
12970
12971 @item -m68020
12972 @itemx -mc68020
12973 @opindex m68020
12974 @opindex mc68020
12975 Generate output for a 68020.  This is the default
12976 when the compiler is configured for 68020-based systems.
12977 It is equivalent to @option{-march=68020}.
12978
12979 @item -m68030
12980 @opindex m68030
12981 Generate output for a 68030.  This is the default when the compiler is
12982 configured for 68030-based systems.  It is equivalent to
12983 @option{-march=68030}.
12984
12985 @item -m68040
12986 @opindex m68040
12987 Generate output for a 68040.  This is the default when the compiler is
12988 configured for 68040-based systems.  It is equivalent to
12989 @option{-march=68040}.
12990
12991 This option inhibits the use of 68881/68882 instructions that have to be
12992 emulated by software on the 68040.  Use this option if your 68040 does not
12993 have code to emulate those instructions.
12994
12995 @item -m68060
12996 @opindex m68060
12997 Generate output for a 68060.  This is the default when the compiler is
12998 configured for 68060-based systems.  It is equivalent to
12999 @option{-march=68060}.
13000
13001 This option inhibits the use of 68020 and 68881/68882 instructions that
13002 have to be emulated by software on the 68060.  Use this option if your 68060
13003 does not have code to emulate those instructions.
13004
13005 @item -mcpu32
13006 @opindex mcpu32
13007 Generate output for a CPU32.  This is the default
13008 when the compiler is configured for CPU32-based systems.
13009 It is equivalent to @option{-march=cpu32}.
13010
13011 Use this option for microcontrollers with a
13012 CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
13013 68336, 68340, 68341, 68349 and 68360.
13014
13015 @item -m5200
13016 @opindex m5200
13017 Generate output for a 520X ColdFire CPU@.  This is the default
13018 when the compiler is configured for 520X-based systems.
13019 It is equivalent to @option{-mcpu=5206}, and is now deprecated
13020 in favor of that option.
13021
13022 Use this option for microcontroller with a 5200 core, including
13023 the MCF5202, MCF5203, MCF5204 and MCF5206.
13024
13025 @item -m5206e
13026 @opindex m5206e
13027 Generate output for a 5206e ColdFire CPU@.  The option is now
13028 deprecated in favor of the equivalent @option{-mcpu=5206e}.
13029
13030 @item -m528x
13031 @opindex m528x
13032 Generate output for a member of the ColdFire 528X family.
13033 The option is now deprecated in favor of the equivalent
13034 @option{-mcpu=528x}.
13035
13036 @item -m5307
13037 @opindex m5307
13038 Generate output for a ColdFire 5307 CPU@.  The option is now deprecated
13039 in favor of the equivalent @option{-mcpu=5307}.
13040
13041 @item -m5407
13042 @opindex m5407
13043 Generate output for a ColdFire 5407 CPU@.  The option is now deprecated
13044 in favor of the equivalent @option{-mcpu=5407}.
13045
13046 @item -mcfv4e
13047 @opindex mcfv4e
13048 Generate output for a ColdFire V4e family CPU (e.g.@: 547x/548x).
13049 This includes use of hardware floating point instructions.
13050 The option is equivalent to @option{-mcpu=547x}, and is now
13051 deprecated in favor of that option.
13052
13053 @item -m68020-40
13054 @opindex m68020-40
13055 Generate output for a 68040, without using any of the new instructions.
13056 This results in code which can run relatively efficiently on either a
13057 68020/68881 or a 68030 or a 68040.  The generated code does use the
13058 68881 instructions that are emulated on the 68040.
13059
13060 The option is equivalent to @option{-march=68020} @option{-mtune=68020-40}.
13061
13062 @item -m68020-60
13063 @opindex m68020-60
13064 Generate output for a 68060, without using any of the new instructions.
13065 This results in code which can run relatively efficiently on either a
13066 68020/68881 or a 68030 or a 68040.  The generated code does use the
13067 68881 instructions that are emulated on the 68060.
13068
13069 The option is equivalent to @option{-march=68020} @option{-mtune=68020-60}.
13070
13071 @item -mhard-float
13072 @itemx -m68881
13073 @opindex mhard-float
13074 @opindex m68881
13075 Generate floating-point instructions.  This is the default for 68020
13076 and above, and for ColdFire devices that have an FPU@.  It defines the
13077 macro @samp{__HAVE_68881__} on M680x0 targets and @samp{__mcffpu__}
13078 on ColdFire targets.
13079
13080 @item -msoft-float
13081 @opindex msoft-float
13082 Do not generate floating-point instructions; use library calls instead.
13083 This is the default for 68000, 68010, and 68832 targets.  It is also
13084 the default for ColdFire devices that have no FPU.
13085
13086 @item -mdiv
13087 @itemx -mno-div
13088 @opindex mdiv
13089 @opindex mno-div
13090 Generate (do not generate) ColdFire hardware divide and remainder
13091 instructions.  If @option{-march} is used without @option{-mcpu},
13092 the default is ``on'' for ColdFire architectures and ``off'' for M680x0
13093 architectures.  Otherwise, the default is taken from the target CPU
13094 (either the default CPU, or the one specified by @option{-mcpu}).  For
13095 example, the default is ``off'' for @option{-mcpu=5206} and ``on'' for
13096 @option{-mcpu=5206e}.
13097
13098 gcc defines the macro @samp{__mcfhwdiv__} when this option is enabled.
13099
13100 @item -mshort
13101 @opindex mshort
13102 Consider type @code{int} to be 16 bits wide, like @code{short int}.
13103 Additionally, parameters passed on the stack are also aligned to a
13104 16-bit boundary even on targets whose API mandates promotion to 32-bit.
13105
13106 @item -mno-short
13107 @opindex mno-short
13108 Do not consider type @code{int} to be 16 bits wide.  This is the default.
13109
13110 @item -mnobitfield
13111 @itemx -mno-bitfield
13112 @opindex mnobitfield
13113 @opindex mno-bitfield
13114 Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
13115 and @option{-m5200} options imply @w{@option{-mnobitfield}}.
13116
13117 @item -mbitfield
13118 @opindex mbitfield
13119 Do use the bit-field instructions.  The @option{-m68020} option implies
13120 @option{-mbitfield}.  This is the default if you use a configuration
13121 designed for a 68020.
13122
13123 @item -mrtd
13124 @opindex mrtd
13125 Use a different function-calling convention, in which functions
13126 that take a fixed number of arguments return with the @code{rtd}
13127 instruction, which pops their arguments while returning.  This
13128 saves one instruction in the caller since there is no need to pop
13129 the arguments there.
13130
13131 This calling convention is incompatible with the one normally
13132 used on Unix, so you cannot use it if you need to call libraries
13133 compiled with the Unix compiler.
13134
13135 Also, you must provide function prototypes for all functions that
13136 take variable numbers of arguments (including @code{printf});
13137 otherwise incorrect code will be generated for calls to those
13138 functions.
13139
13140 In addition, seriously incorrect code will result if you call a
13141 function with too many arguments.  (Normally, extra arguments are
13142 harmlessly ignored.)
13143
13144 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
13145 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
13146
13147 @item -mno-rtd
13148 @opindex mno-rtd
13149 Do not use the calling conventions selected by @option{-mrtd}.
13150 This is the default.
13151
13152 @item -malign-int
13153 @itemx -mno-align-int
13154 @opindex malign-int
13155 @opindex mno-align-int
13156 Control whether GCC aligns @code{int}, @code{long}, @code{long long},
13157 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
13158 boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
13159 Aligning variables on 32-bit boundaries produces code that runs somewhat
13160 faster on processors with 32-bit busses at the expense of more memory.
13161
13162 @strong{Warning:} if you use the @option{-malign-int} switch, GCC will
13163 align structures containing the above types  differently than
13164 most published application binary interface specifications for the m68k.
13165
13166 @item -mpcrel
13167 @opindex mpcrel
13168 Use the pc-relative addressing mode of the 68000 directly, instead of
13169 using a global offset table.  At present, this option implies @option{-fpic},
13170 allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
13171 not presently supported with @option{-mpcrel}, though this could be supported for
13172 68020 and higher processors.
13173
13174 @item -mno-strict-align
13175 @itemx -mstrict-align
13176 @opindex mno-strict-align
13177 @opindex mstrict-align
13178 Do not (do) assume that unaligned memory references will be handled by
13179 the system.
13180
13181 @item -msep-data
13182 Generate code that allows the data segment to be located in a different
13183 area of memory from the text segment.  This allows for execute in place in
13184 an environment without virtual memory management.  This option implies
13185 @option{-fPIC}.
13186
13187 @item -mno-sep-data
13188 Generate code that assumes that the data segment follows the text segment.
13189 This is the default.
13190
13191 @item -mid-shared-library
13192 Generate code that supports shared libraries via the library ID method.
13193 This allows for execute in place and shared libraries in an environment
13194 without virtual memory management.  This option implies @option{-fPIC}.
13195
13196 @item -mno-id-shared-library
13197 Generate code that doesn't assume ID based shared libraries are being used.
13198 This is the default.
13199
13200 @item -mshared-library-id=n
13201 Specified the identification number of the ID based shared library being
13202 compiled.  Specifying a value of 0 will generate more compact code, specifying
13203 other values will force the allocation of that number to the current
13204 library but is no more space or time efficient than omitting this option.
13205
13206 @item -mxgot
13207 @itemx -mno-xgot
13208 @opindex mxgot
13209 @opindex mno-xgot
13210 When generating position-independent code for ColdFire, generate code
13211 that works if the GOT has more than 8192 entries.  This code is
13212 larger and slower than code generated without this option.  On M680x0
13213 processors, this option is not needed; @option{-fPIC} suffices.
13214
13215 GCC normally uses a single instruction to load values from the GOT@.
13216 While this is relatively efficient, it only works if the GOT
13217 is smaller than about 64k.  Anything larger causes the linker
13218 to report an error such as:
13219
13220 @cindex relocation truncated to fit (ColdFire)
13221 @smallexample
13222 relocation truncated to fit: R_68K_GOT16O foobar
13223 @end smallexample
13224
13225 If this happens, you should recompile your code with @option{-mxgot}.
13226 It should then work with very large GOTs.  However, code generated with
13227 @option{-mxgot} is less efficient, since it takes 4 instructions to fetch
13228 the value of a global symbol.
13229
13230 Note that some linkers, including newer versions of the GNU linker,
13231 can create multiple GOTs and sort GOT entries.  If you have such a linker,
13232 you should only need to use @option{-mxgot} when compiling a single
13233 object file that accesses more than 8192 GOT entries.  Very few do.
13234
13235 These options have no effect unless GCC is generating
13236 position-independent code.
13237
13238 @end table
13239
13240 @node M68hc1x Options
13241 @subsection M68hc1x Options
13242 @cindex M68hc1x options
13243
13244 These are the @samp{-m} options defined for the 68hc11 and 68hc12
13245 microcontrollers.  The default values for these options depends on
13246 which style of microcontroller was selected when the compiler was configured;
13247 the defaults for the most common choices are given below.
13248
13249 @table @gcctabopt
13250 @item -m6811
13251 @itemx -m68hc11
13252 @opindex m6811
13253 @opindex m68hc11
13254 Generate output for a 68HC11.  This is the default
13255 when the compiler is configured for 68HC11-based systems.
13256
13257 @item -m6812
13258 @itemx -m68hc12
13259 @opindex m6812
13260 @opindex m68hc12
13261 Generate output for a 68HC12.  This is the default
13262 when the compiler is configured for 68HC12-based systems.
13263
13264 @item -m68S12
13265 @itemx -m68hcs12
13266 @opindex m68S12
13267 @opindex m68hcs12
13268 Generate output for a 68HCS12.
13269
13270 @item -mauto-incdec
13271 @opindex mauto-incdec
13272 Enable the use of 68HC12 pre and post auto-increment and auto-decrement
13273 addressing modes.
13274
13275 @item -minmax
13276 @itemx -mnominmax
13277 @opindex minmax
13278 @opindex mnominmax
13279 Enable the use of 68HC12 min and max instructions.
13280
13281 @item -mlong-calls
13282 @itemx -mno-long-calls
13283 @opindex mlong-calls
13284 @opindex mno-long-calls
13285 Treat all calls as being far away (near).  If calls are assumed to be
13286 far away, the compiler will use the @code{call} instruction to
13287 call a function and the @code{rtc} instruction for returning.
13288
13289 @item -mshort
13290 @opindex mshort
13291 Consider type @code{int} to be 16 bits wide, like @code{short int}.
13292
13293 @item -msoft-reg-count=@var{count}
13294 @opindex msoft-reg-count
13295 Specify the number of pseudo-soft registers which are used for the
13296 code generation.  The maximum number is 32.  Using more pseudo-soft
13297 register may or may not result in better code depending on the program.
13298 The default is 4 for 68HC11 and 2 for 68HC12.
13299
13300 @end table
13301
13302 @node MCore Options
13303 @subsection MCore Options
13304 @cindex MCore options
13305
13306 These are the @samp{-m} options defined for the Motorola M*Core
13307 processors.
13308
13309 @table @gcctabopt
13310
13311 @item -mhardlit
13312 @itemx -mno-hardlit
13313 @opindex mhardlit
13314 @opindex mno-hardlit
13315 Inline constants into the code stream if it can be done in two
13316 instructions or less.
13317
13318 @item -mdiv
13319 @itemx -mno-div
13320 @opindex mdiv
13321 @opindex mno-div
13322 Use the divide instruction.  (Enabled by default).
13323
13324 @item -mrelax-immediate
13325 @itemx -mno-relax-immediate
13326 @opindex mrelax-immediate
13327 @opindex mno-relax-immediate
13328 Allow arbitrary sized immediates in bit operations.
13329
13330 @item -mwide-bitfields
13331 @itemx -mno-wide-bitfields
13332 @opindex mwide-bitfields
13333 @opindex mno-wide-bitfields
13334 Always treat bit-fields as int-sized.
13335
13336 @item -m4byte-functions
13337 @itemx -mno-4byte-functions
13338 @opindex m4byte-functions
13339 @opindex mno-4byte-functions
13340 Force all functions to be aligned to a four byte boundary.
13341
13342 @item -mcallgraph-data
13343 @itemx -mno-callgraph-data
13344 @opindex mcallgraph-data
13345 @opindex mno-callgraph-data
13346 Emit callgraph information.
13347
13348 @item -mslow-bytes
13349 @itemx -mno-slow-bytes
13350 @opindex mslow-bytes
13351 @opindex mno-slow-bytes
13352 Prefer word access when reading byte quantities.
13353
13354 @item -mlittle-endian
13355 @itemx -mbig-endian
13356 @opindex mlittle-endian
13357 @opindex mbig-endian
13358 Generate code for a little endian target.
13359
13360 @item -m210
13361 @itemx -m340
13362 @opindex m210
13363 @opindex m340
13364 Generate code for the 210 processor.
13365
13366 @item -mno-lsim
13367 @opindex mno-lsim
13368 Assume that run-time support has been provided and so omit the
13369 simulator library (@file{libsim.a)} from the linker command line.
13370
13371 @item -mstack-increment=@var{size}
13372 @opindex mstack-increment
13373 Set the maximum amount for a single stack increment operation.  Large
13374 values can increase the speed of programs which contain functions
13375 that need a large amount of stack space, but they can also trigger a
13376 segmentation fault if the stack is extended too much.  The default
13377 value is 0x1000.
13378
13379 @end table
13380
13381 @node MeP Options
13382 @subsection MeP Options
13383 @cindex MeP options
13384
13385 @table @gcctabopt
13386
13387 @item -mabsdiff
13388 @opindex mabsdiff
13389 Enables the @code{abs} instruction, which is the absolute difference
13390 between two registers.
13391
13392 @item -mall-opts
13393 @opindex mall-opts
13394 Enables all the optional instructions - average, multiply, divide, bit
13395 operations, leading zero, absolute difference, min/max, clip, and
13396 saturation.
13397
13398
13399 @item -maverage
13400 @opindex maverage
13401 Enables the @code{ave} instruction, which computes the average of two
13402 registers.
13403
13404 @item -mbased=@var{n}
13405 @opindex mbased=
13406 Variables of size @var{n} bytes or smaller will be placed in the
13407 @code{.based} section by default.  Based variables use the @code{$tp}
13408 register as a base register, and there is a 128 byte limit to the
13409 @code{.based} section.
13410
13411 @item -mbitops
13412 @opindex mbitops
13413 Enables the bit operation instructions - bit test (@code{btstm}), set
13414 (@code{bsetm}), clear (@code{bclrm}), invert (@code{bnotm}), and
13415 test-and-set (@code{tas}).
13416
13417 @item -mc=@var{name}
13418 @opindex mc=
13419 Selects which section constant data will be placed in.  @var{name} may
13420 be @code{tiny}, @code{near}, or @code{far}.
13421
13422 @item -mclip
13423 @opindex mclip
13424 Enables the @code{clip} instruction.  Note that @code{-mclip} is not
13425 useful unless you also provide @code{-mminmax}.
13426
13427 @item -mconfig=@var{name}
13428 @opindex mconfig=
13429 Selects one of the build-in core configurations.  Each MeP chip has
13430 one or more modules in it; each module has a core CPU and a variety of
13431 coprocessors, optional instructions, and peripherals.  The
13432 @code{MeP-Integrator} tool, not part of GCC, provides these
13433 configurations through this option; using this option is the same as
13434 using all the corresponding command line options.  The default
13435 configuration is @code{default}.
13436
13437 @item -mcop
13438 @opindex mcop
13439 Enables the coprocessor instructions.  By default, this is a 32-bit
13440 coprocessor.  Note that the coprocessor is normally enabled via the
13441 @code{-mconfig=} option.
13442
13443 @item -mcop32
13444 @opindex mcop32
13445 Enables the 32-bit coprocessor's instructions.
13446
13447 @item -mcop64
13448 @opindex mcop64
13449 Enables the 64-bit coprocessor's instructions.
13450
13451 @item -mivc2
13452 @opindex mivc2
13453 Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
13454
13455 @item -mdc
13456 @opindex mdc
13457 Causes constant variables to be placed in the @code{.near} section.
13458
13459 @item -mdiv
13460 @opindex mdiv
13461 Enables the @code{div} and @code{divu} instructions.
13462
13463 @item -meb
13464 @opindex meb
13465 Generate big-endian code.
13466
13467 @item -mel
13468 @opindex mel
13469 Generate little-endian code.
13470
13471 @item -mio-volatile
13472 @opindex mio-volatile
13473 Tells the compiler that any variable marked with the @code{io}
13474 attribute is to be considered volatile.
13475
13476 @item -ml
13477 @opindex ml
13478 Causes variables to be assigned to the @code{.far} section by default.
13479
13480 @item -mleadz
13481 @opindex mleadz
13482 Enables the @code{leadz} (leading zero) instruction.
13483
13484 @item -mm
13485 @opindex mm
13486 Causes variables to be assigned to the @code{.near} section by default.
13487
13488 @item -mminmax
13489 @opindex mminmax
13490 Enables the @code{min} and @code{max} instructions.
13491
13492 @item -mmult
13493 @opindex mmult
13494 Enables the multiplication and multiply-accumulate instructions.
13495
13496 @item -mno-opts
13497 @opindex mno-opts
13498 Disables all the optional instructions enabled by @code{-mall-opts}.
13499
13500 @item -mrepeat
13501 @opindex mrepeat
13502 Enables the @code{repeat} and @code{erepeat} instructions, used for
13503 low-overhead looping.
13504
13505 @item -ms
13506 @opindex ms
13507 Causes all variables to default to the @code{.tiny} section.  Note
13508 that there is a 65536 byte limit to this section.  Accesses to these
13509 variables use the @code{%gp} base register.
13510
13511 @item -msatur
13512 @opindex msatur
13513 Enables the saturation instructions.  Note that the compiler does not
13514 currently generate these itself, but this option is included for
13515 compatibility with other tools, like @code{as}.
13516
13517 @item -msdram
13518 @opindex msdram
13519 Link the SDRAM-based runtime instead of the default ROM-based runtime.
13520
13521 @item -msim
13522 @opindex msim
13523 Link the simulator runtime libraries.
13524
13525 @item -msimnovec
13526 @opindex msimnovec
13527 Link the simulator runtime libraries, excluding built-in support
13528 for reset and exception vectors and tables.
13529
13530 @item -mtf
13531 @opindex mtf
13532 Causes all functions to default to the @code{.far} section.  Without
13533 this option, functions default to the @code{.near} section.
13534
13535 @item -mtiny=@var{n}
13536 @opindex mtiny=
13537 Variables that are @var{n} bytes or smaller will be allocated to the
13538 @code{.tiny} section.  These variables use the @code{$gp} base
13539 register.  The default for this option is 4, but note that there's a
13540 65536 byte limit to the @code{.tiny} section.
13541
13542 @end table
13543
13544 @node MIPS Options
13545 @subsection MIPS Options
13546 @cindex MIPS options
13547
13548 @table @gcctabopt
13549
13550 @item -EB
13551 @opindex EB
13552 Generate big-endian code.
13553
13554 @item -EL
13555 @opindex EL
13556 Generate little-endian code.  This is the default for @samp{mips*el-*-*}
13557 configurations.
13558
13559 @item -march=@var{arch}
13560 @opindex march
13561 Generate code that will run on @var{arch}, which can be the name of a
13562 generic MIPS ISA, or the name of a particular processor.
13563 The ISA names are:
13564 @samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
13565 @samp{mips32}, @samp{mips32r2}, @samp{mips64} and @samp{mips64r2}.
13566 The processor names are:
13567 @samp{4kc}, @samp{4km}, @samp{4kp}, @samp{4ksc},
13568 @samp{4kec}, @samp{4kem}, @samp{4kep}, @samp{4ksd},
13569 @samp{5kc}, @samp{5kf},
13570 @samp{20kc},
13571 @samp{24kc}, @samp{24kf2_1}, @samp{24kf1_1},
13572 @samp{24kec}, @samp{24kef2_1}, @samp{24kef1_1},
13573 @samp{34kc}, @samp{34kf2_1}, @samp{34kf1_1},
13574 @samp{74kc}, @samp{74kf2_1}, @samp{74kf1_1}, @samp{74kf3_2},
13575 @samp{1004kc}, @samp{1004kf2_1}, @samp{1004kf1_1},
13576 @samp{loongson2e}, @samp{loongson2f},
13577 @samp{m4k},
13578 @samp{octeon},
13579 @samp{orion},
13580 @samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
13581 @samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000},
13582 @samp{rm7000}, @samp{rm9000},
13583 @samp{r10000}, @samp{r12000}, @samp{r14000}, @samp{r16000},
13584 @samp{sb1},
13585 @samp{sr71000},
13586 @samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
13587 @samp{vr5000}, @samp{vr5400}, @samp{vr5500}
13588 and @samp{xlr}.
13589 The special value @samp{from-abi} selects the
13590 most compatible architecture for the selected ABI (that is,
13591 @samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.
13592
13593 Native Linux/GNU toolchains also support the value @samp{native},
13594 which selects the best architecture option for the host processor.
13595 @option{-march=native} has no effect if GCC does not recognize
13596 the processor.
13597
13598 In processor names, a final @samp{000} can be abbreviated as @samp{k}
13599 (for example, @samp{-march=r2k}).  Prefixes are optional, and
13600 @samp{vr} may be written @samp{r}.
13601
13602 Names of the form @samp{@var{n}f2_1} refer to processors with
13603 FPUs clocked at half the rate of the core, names of the form
13604 @samp{@var{n}f1_1} refer to processors with FPUs clocked at the same
13605 rate as the core, and names of the form @samp{@var{n}f3_2} refer to
13606 processors with FPUs clocked a ratio of 3:2 with respect to the core.
13607 For compatibility reasons, @samp{@var{n}f} is accepted as a synonym
13608 for @samp{@var{n}f2_1} while @samp{@var{n}x} and @samp{@var{b}fx} are
13609 accepted as synonyms for @samp{@var{n}f1_1}.
13610
13611 GCC defines two macros based on the value of this option.  The first
13612 is @samp{_MIPS_ARCH}, which gives the name of target architecture, as
13613 a string.  The second has the form @samp{_MIPS_ARCH_@var{foo}},
13614 where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@.
13615 For example, @samp{-march=r2000} will set @samp{_MIPS_ARCH}
13616 to @samp{"r2000"} and define the macro @samp{_MIPS_ARCH_R2000}.
13617
13618 Note that the @samp{_MIPS_ARCH} macro uses the processor names given
13619 above.  In other words, it will have the full prefix and will not
13620 abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
13621 the macro names the resolved architecture (either @samp{"mips1"} or
13622 @samp{"mips3"}).  It names the default architecture when no
13623 @option{-march} option is given.
13624
13625 @item -mtune=@var{arch}
13626 @opindex mtune
13627 Optimize for @var{arch}.  Among other things, this option controls
13628 the way instructions are scheduled, and the perceived cost of arithmetic
13629 operations.  The list of @var{arch} values is the same as for
13630 @option{-march}.
13631
13632 When this option is not used, GCC will optimize for the processor
13633 specified by @option{-march}.  By using @option{-march} and
13634 @option{-mtune} together, it is possible to generate code that will
13635 run on a family of processors, but optimize the code for one
13636 particular member of that family.
13637
13638 @samp{-mtune} defines the macros @samp{_MIPS_TUNE} and
13639 @samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the
13640 @samp{-march} ones described above.
13641
13642 @item -mips1
13643 @opindex mips1
13644 Equivalent to @samp{-march=mips1}.
13645
13646 @item -mips2
13647 @opindex mips2
13648 Equivalent to @samp{-march=mips2}.
13649
13650 @item -mips3
13651 @opindex mips3
13652 Equivalent to @samp{-march=mips3}.
13653
13654 @item -mips4
13655 @opindex mips4
13656 Equivalent to @samp{-march=mips4}.
13657
13658 @item -mips32
13659 @opindex mips32
13660 Equivalent to @samp{-march=mips32}.
13661
13662 @item -mips32r2
13663 @opindex mips32r2
13664 Equivalent to @samp{-march=mips32r2}.
13665
13666 @item -mips64
13667 @opindex mips64
13668 Equivalent to @samp{-march=mips64}.
13669
13670 @item -mips64r2
13671 @opindex mips64r2
13672 Equivalent to @samp{-march=mips64r2}.
13673
13674 @item -mips16
13675 @itemx -mno-mips16
13676 @opindex mips16
13677 @opindex mno-mips16
13678 Generate (do not generate) MIPS16 code.  If GCC is targetting a
13679 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE@.
13680
13681 MIPS16 code generation can also be controlled on a per-function basis
13682 by means of @code{mips16} and @code{nomips16} attributes.
13683 @xref{Function Attributes}, for more information.
13684
13685 @item -mflip-mips16
13686 @opindex mflip-mips16
13687 Generate MIPS16 code on alternating functions.  This option is provided
13688 for regression testing of mixed MIPS16/non-MIPS16 code generation, and is
13689 not intended for ordinary use in compiling user code.
13690
13691 @item -minterlink-mips16
13692 @itemx -mno-interlink-mips16
13693 @opindex minterlink-mips16
13694 @opindex mno-interlink-mips16
13695 Require (do not require) that non-MIPS16 code be link-compatible with
13696 MIPS16 code.
13697
13698 For example, non-MIPS16 code cannot jump directly to MIPS16 code;
13699 it must either use a call or an indirect jump.  @option{-minterlink-mips16}
13700 therefore disables direct jumps unless GCC knows that the target of the
13701 jump is not MIPS16.
13702
13703 @item -mabi=32
13704 @itemx -mabi=o64
13705 @itemx -mabi=n32
13706 @itemx -mabi=64
13707 @itemx -mabi=eabi
13708 @opindex mabi=32
13709 @opindex mabi=o64
13710 @opindex mabi=n32
13711 @opindex mabi=64
13712 @opindex mabi=eabi
13713 Generate code for the given ABI@.
13714
13715 Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
13716 generates 64-bit code when you select a 64-bit architecture, but you
13717 can use @option{-mgp32} to get 32-bit code instead.
13718
13719 For information about the O64 ABI, see
13720 @w{@uref{http://gcc.gnu.org/projects/mipso64-abi.html}}.
13721
13722 GCC supports a variant of the o32 ABI in which floating-point registers
13723 are 64 rather than 32 bits wide.  You can select this combination with
13724 @option{-mabi=32} @option{-mfp64}.  This ABI relies on the @samp{mthc1}
13725 and @samp{mfhc1} instructions and is therefore only supported for
13726 MIPS32R2 processors.
13727
13728 The register assignments for arguments and return values remain the
13729 same, but each scalar value is passed in a single 64-bit register
13730 rather than a pair of 32-bit registers.  For example, scalar
13731 floating-point values are returned in @samp{$f0} only, not a
13732 @samp{$f0}/@samp{$f1} pair.  The set of call-saved registers also
13733 remains the same, but all 64 bits are saved.
13734
13735 @item -mabicalls
13736 @itemx -mno-abicalls
13737 @opindex mabicalls
13738 @opindex mno-abicalls
13739 Generate (do not generate) code that is suitable for SVR4-style
13740 dynamic objects.  @option{-mabicalls} is the default for SVR4-based
13741 systems.
13742
13743 @item -mshared
13744 @itemx -mno-shared
13745 Generate (do not generate) code that is fully position-independent,
13746 and that can therefore be linked into shared libraries.  This option
13747 only affects @option{-mabicalls}.
13748
13749 All @option{-mabicalls} code has traditionally been position-independent,
13750 regardless of options like @option{-fPIC} and @option{-fpic}.  However,
13751 as an extension, the GNU toolchain allows executables to use absolute
13752 accesses for locally-binding symbols.  It can also use shorter GP
13753 initialization sequences and generate direct calls to locally-defined
13754 functions.  This mode is selected by @option{-mno-shared}.
13755
13756 @option{-mno-shared} depends on binutils 2.16 or higher and generates
13757 objects that can only be linked by the GNU linker.  However, the option
13758 does not affect the ABI of the final executable; it only affects the ABI
13759 of relocatable objects.  Using @option{-mno-shared} will generally make
13760 executables both smaller and quicker.
13761
13762 @option{-mshared} is the default.
13763
13764 @item -mplt
13765 @itemx -mno-plt
13766 @opindex mplt
13767 @opindex mno-plt
13768 Assume (do not assume) that the static and dynamic linkers
13769 support PLTs and copy relocations.  This option only affects
13770 @samp{-mno-shared -mabicalls}.  For the n64 ABI, this option
13771 has no effect without @samp{-msym32}.
13772
13773 You can make @option{-mplt} the default by configuring
13774 GCC with @option{--with-mips-plt}.  The default is
13775 @option{-mno-plt} otherwise.
13776
13777 @item -mxgot
13778 @itemx -mno-xgot
13779 @opindex mxgot
13780 @opindex mno-xgot
13781 Lift (do not lift) the usual restrictions on the size of the global
13782 offset table.
13783
13784 GCC normally uses a single instruction to load values from the GOT@.
13785 While this is relatively efficient, it will only work if the GOT
13786 is smaller than about 64k.  Anything larger will cause the linker
13787 to report an error such as:
13788
13789 @cindex relocation truncated to fit (MIPS)
13790 @smallexample
13791 relocation truncated to fit: R_MIPS_GOT16 foobar
13792 @end smallexample
13793
13794 If this happens, you should recompile your code with @option{-mxgot}.
13795 It should then work with very large GOTs, although it will also be
13796 less efficient, since it will take three instructions to fetch the
13797 value of a global symbol.
13798
13799 Note that some linkers can create multiple GOTs.  If you have such a
13800 linker, you should only need to use @option{-mxgot} when a single object
13801 file accesses more than 64k's worth of GOT entries.  Very few do.
13802
13803 These options have no effect unless GCC is generating position
13804 independent code.
13805
13806 @item -mgp32
13807 @opindex mgp32
13808 Assume that general-purpose registers are 32 bits wide.
13809
13810 @item -mgp64
13811 @opindex mgp64
13812 Assume that general-purpose registers are 64 bits wide.
13813
13814 @item -mfp32
13815 @opindex mfp32
13816 Assume that floating-point registers are 32 bits wide.
13817
13818 @item -mfp64
13819 @opindex mfp64
13820 Assume that floating-point registers are 64 bits wide.
13821
13822 @item -mhard-float
13823 @opindex mhard-float
13824 Use floating-point coprocessor instructions.
13825
13826 @item -msoft-float
13827 @opindex msoft-float
13828 Do not use floating-point coprocessor instructions.  Implement
13829 floating-point calculations using library calls instead.
13830
13831 @item -msingle-float
13832 @opindex msingle-float
13833 Assume that the floating-point coprocessor only supports single-precision
13834 operations.
13835
13836 @item -mdouble-float
13837 @opindex mdouble-float
13838 Assume that the floating-point coprocessor supports double-precision
13839 operations.  This is the default.
13840
13841 @item -mllsc
13842 @itemx -mno-llsc
13843 @opindex mllsc
13844 @opindex mno-llsc
13845 Use (do not use) @samp{ll}, @samp{sc}, and @samp{sync} instructions to
13846 implement atomic memory built-in functions.  When neither option is
13847 specified, GCC will use the instructions if the target architecture
13848 supports them.
13849
13850 @option{-mllsc} is useful if the runtime environment can emulate the
13851 instructions and @option{-mno-llsc} can be useful when compiling for
13852 nonstandard ISAs.  You can make either option the default by
13853 configuring GCC with @option{--with-llsc} and @option{--without-llsc}
13854 respectively.  @option{--with-llsc} is the default for some
13855 configurations; see the installation documentation for details.
13856
13857 @item -mdsp
13858 @itemx -mno-dsp
13859 @opindex mdsp
13860 @opindex mno-dsp
13861 Use (do not use) revision 1 of the MIPS DSP ASE@.
13862 @xref{MIPS DSP Built-in Functions}.  This option defines the
13863 preprocessor macro @samp{__mips_dsp}.  It also defines
13864 @samp{__mips_dsp_rev} to 1.
13865
13866 @item -mdspr2
13867 @itemx -mno-dspr2
13868 @opindex mdspr2
13869 @opindex mno-dspr2
13870 Use (do not use) revision 2 of the MIPS DSP ASE@.
13871 @xref{MIPS DSP Built-in Functions}.  This option defines the
13872 preprocessor macros @samp{__mips_dsp} and @samp{__mips_dspr2}.
13873 It also defines @samp{__mips_dsp_rev} to 2.
13874
13875 @item -msmartmips
13876 @itemx -mno-smartmips
13877 @opindex msmartmips
13878 @opindex mno-smartmips
13879 Use (do not use) the MIPS SmartMIPS ASE.
13880
13881 @item -mpaired-single
13882 @itemx -mno-paired-single
13883 @opindex mpaired-single
13884 @opindex mno-paired-single
13885 Use (do not use) paired-single floating-point instructions.
13886 @xref{MIPS Paired-Single Support}.  This option requires
13887 hardware floating-point support to be enabled.
13888
13889 @item -mdmx
13890 @itemx -mno-mdmx
13891 @opindex mdmx
13892 @opindex mno-mdmx
13893 Use (do not use) MIPS Digital Media Extension instructions.
13894 This option can only be used when generating 64-bit code and requires
13895 hardware floating-point support to be enabled.
13896
13897 @item -mips3d
13898 @itemx -mno-mips3d
13899 @opindex mips3d
13900 @opindex mno-mips3d
13901 Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
13902 The option @option{-mips3d} implies @option{-mpaired-single}.
13903
13904 @item -mmt
13905 @itemx -mno-mt
13906 @opindex mmt
13907 @opindex mno-mt
13908 Use (do not use) MT Multithreading instructions.
13909
13910 @item -mlong64
13911 @opindex mlong64
13912 Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
13913 an explanation of the default and the way that the pointer size is
13914 determined.
13915
13916 @item -mlong32
13917 @opindex mlong32
13918 Force @code{long}, @code{int}, and pointer types to be 32 bits wide.
13919
13920 The default size of @code{int}s, @code{long}s and pointers depends on
13921 the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
13922 uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
13923 32-bit @code{long}s.  Pointers are the same size as @code{long}s,
13924 or the same size as integer registers, whichever is smaller.
13925
13926 @item -msym32
13927 @itemx -mno-sym32
13928 @opindex msym32
13929 @opindex mno-sym32
13930 Assume (do not assume) that all symbols have 32-bit values, regardless
13931 of the selected ABI@.  This option is useful in combination with
13932 @option{-mabi=64} and @option{-mno-abicalls} because it allows GCC
13933 to generate shorter and faster references to symbolic addresses.
13934
13935 @item -G @var{num}
13936 @opindex G
13937 Put definitions of externally-visible data in a small data section
13938 if that data is no bigger than @var{num} bytes.  GCC can then access
13939 the data more efficiently; see @option{-mgpopt} for details.
13940
13941 The default @option{-G} option depends on the configuration.
13942
13943 @item -mlocal-sdata
13944 @itemx -mno-local-sdata
13945 @opindex mlocal-sdata
13946 @opindex mno-local-sdata
13947 Extend (do not extend) the @option{-G} behavior to local data too,
13948 such as to static variables in C@.  @option{-mlocal-sdata} is the
13949 default for all configurations.
13950
13951 If the linker complains that an application is using too much small data,
13952 you might want to try rebuilding the less performance-critical parts with
13953 @option{-mno-local-sdata}.  You might also want to build large
13954 libraries with @option{-mno-local-sdata}, so that the libraries leave
13955 more room for the main program.
13956
13957 @item -mextern-sdata
13958 @itemx -mno-extern-sdata
13959 @opindex mextern-sdata
13960 @opindex mno-extern-sdata
13961 Assume (do not assume) that externally-defined data will be in
13962 a small data section if that data is within the @option{-G} limit.
13963 @option{-mextern-sdata} is the default for all configurations.
13964
13965 If you compile a module @var{Mod} with @option{-mextern-sdata} @option{-G
13966 @var{num}} @option{-mgpopt}, and @var{Mod} references a variable @var{Var}
13967 that is no bigger than @var{num} bytes, you must make sure that @var{Var}
13968 is placed in a small data section.  If @var{Var} is defined by another
13969 module, you must either compile that module with a high-enough
13970 @option{-G} setting or attach a @code{section} attribute to @var{Var}'s
13971 definition.  If @var{Var} is common, you must link the application
13972 with a high-enough @option{-G} setting.
13973
13974 The easiest way of satisfying these restrictions is to compile
13975 and link every module with the same @option{-G} option.  However,
13976 you may wish to build a library that supports several different
13977 small data limits.  You can do this by compiling the library with
13978 the highest supported @option{-G} setting and additionally using
13979 @option{-mno-extern-sdata} to stop the library from making assumptions
13980 about externally-defined data.
13981
13982 @item -mgpopt
13983 @itemx -mno-gpopt
13984 @opindex mgpopt
13985 @opindex mno-gpopt
13986 Use (do not use) GP-relative accesses for symbols that are known to be
13987 in a small data section; see @option{-G}, @option{-mlocal-sdata} and
13988 @option{-mextern-sdata}.  @option{-mgpopt} is the default for all
13989 configurations.
13990
13991 @option{-mno-gpopt} is useful for cases where the @code{$gp} register
13992 might not hold the value of @code{_gp}.  For example, if the code is
13993 part of a library that might be used in a boot monitor, programs that
13994 call boot monitor routines will pass an unknown value in @code{$gp}.
13995 (In such situations, the boot monitor itself would usually be compiled
13996 with @option{-G0}.)
13997
13998 @option{-mno-gpopt} implies @option{-mno-local-sdata} and
13999 @option{-mno-extern-sdata}.
14000
14001 @item -membedded-data
14002 @itemx -mno-embedded-data
14003 @opindex membedded-data
14004 @opindex mno-embedded-data
14005 Allocate variables to the read-only data section first if possible, then
14006 next in the small data section if possible, otherwise in data.  This gives
14007 slightly slower code than the default, but reduces the amount of RAM required
14008 when executing, and thus may be preferred for some embedded systems.
14009
14010 @item -muninit-const-in-rodata
14011 @itemx -mno-uninit-const-in-rodata
14012 @opindex muninit-const-in-rodata
14013 @opindex mno-uninit-const-in-rodata
14014 Put uninitialized @code{const} variables in the read-only data section.
14015 This option is only meaningful in conjunction with @option{-membedded-data}.
14016
14017 @item -mcode-readable=@var{setting}
14018 @opindex mcode-readable
14019 Specify whether GCC may generate code that reads from executable sections.
14020 There are three possible settings:
14021
14022 @table @gcctabopt
14023 @item -mcode-readable=yes
14024 Instructions may freely access executable sections.  This is the
14025 default setting.
14026
14027 @item -mcode-readable=pcrel
14028 MIPS16 PC-relative load instructions can access executable sections,
14029 but other instructions must not do so.  This option is useful on 4KSc
14030 and 4KSd processors when the code TLBs have the Read Inhibit bit set.
14031 It is also useful on processors that can be configured to have a dual
14032 instruction/data SRAM interface and that, like the M4K, automatically
14033 redirect PC-relative loads to the instruction RAM.
14034
14035 @item -mcode-readable=no
14036 Instructions must not access executable sections.  This option can be
14037 useful on targets that are configured to have a dual instruction/data
14038 SRAM interface but that (unlike the M4K) do not automatically redirect
14039 PC-relative loads to the instruction RAM.
14040 @end table
14041
14042 @item -msplit-addresses
14043 @itemx -mno-split-addresses
14044 @opindex msplit-addresses
14045 @opindex mno-split-addresses
14046 Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
14047 relocation operators.  This option has been superseded by
14048 @option{-mexplicit-relocs} but is retained for backwards compatibility.
14049
14050 @item -mexplicit-relocs
14051 @itemx -mno-explicit-relocs
14052 @opindex mexplicit-relocs
14053 @opindex mno-explicit-relocs
14054 Use (do not use) assembler relocation operators when dealing with symbolic
14055 addresses.  The alternative, selected by @option{-mno-explicit-relocs},
14056 is to use assembler macros instead.
14057
14058 @option{-mexplicit-relocs} is the default if GCC was configured
14059 to use an assembler that supports relocation operators.
14060
14061 @item -mcheck-zero-division
14062 @itemx -mno-check-zero-division
14063 @opindex mcheck-zero-division
14064 @opindex mno-check-zero-division
14065 Trap (do not trap) on integer division by zero.
14066
14067 The default is @option{-mcheck-zero-division}.
14068
14069 @item -mdivide-traps
14070 @itemx -mdivide-breaks
14071 @opindex mdivide-traps
14072 @opindex mdivide-breaks
14073 MIPS systems check for division by zero by generating either a
14074 conditional trap or a break instruction.  Using traps results in
14075 smaller code, but is only supported on MIPS II and later.  Also, some
14076 versions of the Linux kernel have a bug that prevents trap from
14077 generating the proper signal (@code{SIGFPE}).  Use @option{-mdivide-traps} to
14078 allow conditional traps on architectures that support them and
14079 @option{-mdivide-breaks} to force the use of breaks.
14080
14081 The default is usually @option{-mdivide-traps}, but this can be
14082 overridden at configure time using @option{--with-divide=breaks}.
14083 Divide-by-zero checks can be completely disabled using
14084 @option{-mno-check-zero-division}.
14085
14086 @item -mmemcpy
14087 @itemx -mno-memcpy
14088 @opindex mmemcpy
14089 @opindex mno-memcpy
14090 Force (do not force) the use of @code{memcpy()} for non-trivial block
14091 moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
14092 most constant-sized copies.
14093
14094 @item -mlong-calls
14095 @itemx -mno-long-calls
14096 @opindex mlong-calls
14097 @opindex mno-long-calls
14098 Disable (do not disable) use of the @code{jal} instruction.  Calling
14099 functions using @code{jal} is more efficient but requires the caller
14100 and callee to be in the same 256 megabyte segment.
14101
14102 This option has no effect on abicalls code.  The default is
14103 @option{-mno-long-calls}.
14104
14105 @item -mmad
14106 @itemx -mno-mad
14107 @opindex mmad
14108 @opindex mno-mad
14109 Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
14110 instructions, as provided by the R4650 ISA@.
14111
14112 @item -mfused-madd
14113 @itemx -mno-fused-madd
14114 @opindex mfused-madd
14115 @opindex mno-fused-madd
14116 Enable (disable) use of the floating point multiply-accumulate
14117 instructions, when they are available.  The default is
14118 @option{-mfused-madd}.
14119
14120 When multiply-accumulate instructions are used, the intermediate
14121 product is calculated to infinite precision and is not subject to
14122 the FCSR Flush to Zero bit.  This may be undesirable in some
14123 circumstances.
14124
14125 @item -nocpp
14126 @opindex nocpp
14127 Tell the MIPS assembler to not run its preprocessor over user
14128 assembler files (with a @samp{.s} suffix) when assembling them.
14129
14130 @item -mfix-r4000
14131 @itemx -mno-fix-r4000
14132 @opindex mfix-r4000
14133 @opindex mno-fix-r4000
14134 Work around certain R4000 CPU errata:
14135 @itemize @minus
14136 @item
14137 A double-word or a variable shift may give an incorrect result if executed
14138 immediately after starting an integer division.
14139 @item
14140 A double-word or a variable shift may give an incorrect result if executed
14141 while an integer multiplication is in progress.
14142 @item
14143 An integer division may give an incorrect result if started in a delay slot
14144 of a taken branch or a jump.
14145 @end itemize
14146
14147 @item -mfix-r4400
14148 @itemx -mno-fix-r4400
14149 @opindex mfix-r4400
14150 @opindex mno-fix-r4400
14151 Work around certain R4400 CPU errata:
14152 @itemize @minus
14153 @item
14154 A double-word or a variable shift may give an incorrect result if executed
14155 immediately after starting an integer division.
14156 @end itemize
14157
14158 @item -mfix-r10000
14159 @itemx -mno-fix-r10000
14160 @opindex mfix-r10000
14161 @opindex mno-fix-r10000
14162 Work around certain R10000 errata:
14163 @itemize @minus
14164 @item
14165 @code{ll}/@code{sc} sequences may not behave atomically on revisions
14166 prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
14167 @end itemize
14168
14169 This option can only be used if the target architecture supports
14170 branch-likely instructions.  @option{-mfix-r10000} is the default when
14171 @option{-march=r10000} is used; @option{-mno-fix-r10000} is the default
14172 otherwise.
14173
14174 @item -mfix-vr4120
14175 @itemx -mno-fix-vr4120
14176 @opindex mfix-vr4120
14177 Work around certain VR4120 errata:
14178 @itemize @minus
14179 @item
14180 @code{dmultu} does not always produce the correct result.
14181 @item
14182 @code{div} and @code{ddiv} do not always produce the correct result if one
14183 of the operands is negative.
14184 @end itemize
14185 The workarounds for the division errata rely on special functions in
14186 @file{libgcc.a}.  At present, these functions are only provided by
14187 the @code{mips64vr*-elf} configurations.
14188
14189 Other VR4120 errata require a nop to be inserted between certain pairs of
14190 instructions.  These errata are handled by the assembler, not by GCC itself.
14191
14192 @item -mfix-vr4130
14193 @opindex mfix-vr4130
14194 Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
14195 workarounds are implemented by the assembler rather than by GCC,
14196 although GCC will avoid using @code{mflo} and @code{mfhi} if the
14197 VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi}
14198 instructions are available instead.
14199
14200 @item -mfix-sb1
14201 @itemx -mno-fix-sb1
14202 @opindex mfix-sb1
14203 Work around certain SB-1 CPU core errata.
14204 (This flag currently works around the SB-1 revision 2
14205 ``F1'' and ``F2'' floating point errata.)
14206
14207 @item -mr10k-cache-barrier=@var{setting}
14208 @opindex mr10k-cache-barrier
14209 Specify whether GCC should insert cache barriers to avoid the
14210 side-effects of speculation on R10K processors.
14211
14212 In common with many processors, the R10K tries to predict the outcome
14213 of a conditional branch and speculatively executes instructions from
14214 the ``taken'' branch.  It later aborts these instructions if the
14215 predicted outcome was wrong.  However, on the R10K, even aborted
14216 instructions can have side effects.
14217
14218 This problem only affects kernel stores and, depending on the system,
14219 kernel loads.  As an example, a speculatively-executed store may load
14220 the target memory into cache and mark the cache line as dirty, even if
14221 the store itself is later aborted.  If a DMA operation writes to the
14222 same area of memory before the ``dirty'' line is flushed, the cached
14223 data will overwrite the DMA-ed data.  See the R10K processor manual
14224 for a full description, including other potential problems.
14225
14226 One workaround is to insert cache barrier instructions before every memory
14227 access that might be speculatively executed and that might have side
14228 effects even if aborted.  @option{-mr10k-cache-barrier=@var{setting}}
14229 controls GCC's implementation of this workaround.  It assumes that
14230 aborted accesses to any byte in the following regions will not have
14231 side effects:
14232
14233 @enumerate
14234 @item
14235 the memory occupied by the current function's stack frame;
14236
14237 @item
14238 the memory occupied by an incoming stack argument;
14239
14240 @item
14241 the memory occupied by an object with a link-time-constant address.
14242 @end enumerate
14243
14244 It is the kernel's responsibility to ensure that speculative
14245 accesses to these regions are indeed safe.
14246
14247 If the input program contains a function declaration such as:
14248
14249 @smallexample
14250 void foo (void);
14251 @end smallexample
14252
14253 then the implementation of @code{foo} must allow @code{j foo} and
14254 @code{jal foo} to be executed speculatively.  GCC honors this
14255 restriction for functions it compiles itself.  It expects non-GCC
14256 functions (such as hand-written assembly code) to do the same.
14257
14258 The option has three forms:
14259
14260 @table @gcctabopt
14261 @item -mr10k-cache-barrier=load-store
14262 Insert a cache barrier before a load or store that might be
14263 speculatively executed and that might have side effects even
14264 if aborted.
14265
14266 @item -mr10k-cache-barrier=store
14267 Insert a cache barrier before a store that might be speculatively
14268 executed and that might have side effects even if aborted.
14269
14270 @item -mr10k-cache-barrier=none
14271 Disable the insertion of cache barriers.  This is the default setting.
14272 @end table
14273
14274 @item -mflush-func=@var{func}
14275 @itemx -mno-flush-func
14276 @opindex mflush-func
14277 Specifies the function to call to flush the I and D caches, or to not
14278 call any such function.  If called, the function must take the same
14279 arguments as the common @code{_flush_func()}, that is, the address of the
14280 memory range for which the cache is being flushed, the size of the
14281 memory range, and the number 3 (to flush both caches).  The default
14282 depends on the target GCC was configured for, but commonly is either
14283 @samp{_flush_func} or @samp{__cpu_flush}.
14284
14285 @item mbranch-cost=@var{num}
14286 @opindex mbranch-cost
14287 Set the cost of branches to roughly @var{num} ``simple'' instructions.
14288 This cost is only a heuristic and is not guaranteed to produce
14289 consistent results across releases.  A zero cost redundantly selects
14290 the default, which is based on the @option{-mtune} setting.
14291
14292 @item -mbranch-likely
14293 @itemx -mno-branch-likely
14294 @opindex mbranch-likely
14295 @opindex mno-branch-likely
14296 Enable or disable use of Branch Likely instructions, regardless of the
14297 default for the selected architecture.  By default, Branch Likely
14298 instructions may be generated if they are supported by the selected
14299 architecture.  An exception is for the MIPS32 and MIPS64 architectures
14300 and processors which implement those architectures; for those, Branch
14301 Likely instructions will not be generated by default because the MIPS32
14302 and MIPS64 architectures specifically deprecate their use.
14303
14304 @item -mfp-exceptions
14305 @itemx -mno-fp-exceptions
14306 @opindex mfp-exceptions
14307 Specifies whether FP exceptions are enabled.  This affects how we schedule
14308 FP instructions for some processors.  The default is that FP exceptions are
14309 enabled.
14310
14311 For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
14312 64-bit code, then we can use both FP pipes.  Otherwise, we can only use one
14313 FP pipe.
14314
14315 @item -mvr4130-align
14316 @itemx -mno-vr4130-align
14317 @opindex mvr4130-align
14318 The VR4130 pipeline is two-way superscalar, but can only issue two
14319 instructions together if the first one is 8-byte aligned.  When this
14320 option is enabled, GCC will align pairs of instructions that it
14321 thinks should execute in parallel.
14322
14323 This option only has an effect when optimizing for the VR4130.
14324 It normally makes code faster, but at the expense of making it bigger.
14325 It is enabled by default at optimization level @option{-O3}.
14326
14327 @item -msynci
14328 @itemx -mno-synci
14329 @opindex msynci
14330 Enable (disable) generation of @code{synci} instructions on
14331 architectures that support it.  The @code{synci} instructions (if
14332 enabled) will be generated when @code{__builtin___clear_cache()} is
14333 compiled.
14334
14335 This option defaults to @code{-mno-synci}, but the default can be
14336 overridden by configuring with @code{--with-synci}.
14337
14338 When compiling code for single processor systems, it is generally safe
14339 to use @code{synci}.  However, on many multi-core (SMP) systems, it
14340 will not invalidate the instruction caches on all cores and may lead
14341 to undefined behavior.
14342
14343 @item -mrelax-pic-calls
14344 @itemx -mno-relax-pic-calls
14345 @opindex mrelax-pic-calls
14346 Try to turn PIC calls that are normally dispatched via register
14347 @code{$25} into direct calls.  This is only possible if the linker can
14348 resolve the destination at link-time and if the destination is within
14349 range for a direct call.
14350
14351 @option{-mrelax-pic-calls} is the default if GCC was configured to use
14352 an assembler and a linker that supports the @code{.reloc} assembly
14353 directive and @code{-mexplicit-relocs} is in effect.  With
14354 @code{-mno-explicit-relocs}, this optimization can be performed by the
14355 assembler and the linker alone without help from the compiler.
14356
14357 @item -mmcount-ra-address
14358 @itemx -mno-mcount-ra-address
14359 @opindex mmcount-ra-address
14360 @opindex mno-mcount-ra-address
14361 Emit (do not emit) code that allows @code{_mcount} to modify the
14362 calling function's return address.  When enabled, this option extends
14363 the usual @code{_mcount} interface with a new @var{ra-address}
14364 parameter, which has type @code{intptr_t *} and is passed in register
14365 @code{$12}.  @code{_mcount} can then modify the return address by
14366 doing both of the following:
14367 @itemize
14368 @item
14369 Returning the new address in register @code{$31}.
14370 @item
14371 Storing the new address in @code{*@var{ra-address}},
14372 if @var{ra-address} is nonnull.
14373 @end itemize
14374
14375 The default is @option{-mno-mcount-ra-address}.
14376
14377 @end table
14378
14379 @node MMIX Options
14380 @subsection MMIX Options
14381 @cindex MMIX Options
14382
14383 These options are defined for the MMIX:
14384
14385 @table @gcctabopt
14386 @item -mlibfuncs
14387 @itemx -mno-libfuncs
14388 @opindex mlibfuncs
14389 @opindex mno-libfuncs
14390 Specify that intrinsic library functions are being compiled, passing all
14391 values in registers, no matter the size.
14392
14393 @item -mepsilon
14394 @itemx -mno-epsilon
14395 @opindex mepsilon
14396 @opindex mno-epsilon
14397 Generate floating-point comparison instructions that compare with respect
14398 to the @code{rE} epsilon register.
14399
14400 @item -mabi=mmixware
14401 @itemx -mabi=gnu
14402 @opindex mabi=mmixware
14403 @opindex mabi=gnu
14404 Generate code that passes function parameters and return values that (in
14405 the called function) are seen as registers @code{$0} and up, as opposed to
14406 the GNU ABI which uses global registers @code{$231} and up.
14407
14408 @item -mzero-extend
14409 @itemx -mno-zero-extend
14410 @opindex mzero-extend
14411 @opindex mno-zero-extend
14412 When reading data from memory in sizes shorter than 64 bits, use (do not
14413 use) zero-extending load instructions by default, rather than
14414 sign-extending ones.
14415
14416 @item -mknuthdiv
14417 @itemx -mno-knuthdiv
14418 @opindex mknuthdiv
14419 @opindex mno-knuthdiv
14420 Make the result of a division yielding a remainder have the same sign as
14421 the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
14422 remainder follows the sign of the dividend.  Both methods are
14423 arithmetically valid, the latter being almost exclusively used.
14424
14425 @item -mtoplevel-symbols
14426 @itemx -mno-toplevel-symbols
14427 @opindex mtoplevel-symbols
14428 @opindex mno-toplevel-symbols
14429 Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
14430 code can be used with the @code{PREFIX} assembly directive.
14431
14432 @item -melf
14433 @opindex melf
14434 Generate an executable in the ELF format, rather than the default
14435 @samp{mmo} format used by the @command{mmix} simulator.
14436
14437 @item -mbranch-predict
14438 @itemx -mno-branch-predict
14439 @opindex mbranch-predict
14440 @opindex mno-branch-predict
14441 Use (do not use) the probable-branch instructions, when static branch
14442 prediction indicates a probable branch.
14443
14444 @item -mbase-addresses
14445 @itemx -mno-base-addresses
14446 @opindex mbase-addresses
14447 @opindex mno-base-addresses
14448 Generate (do not generate) code that uses @emph{base addresses}.  Using a
14449 base address automatically generates a request (handled by the assembler
14450 and the linker) for a constant to be set up in a global register.  The
14451 register is used for one or more base address requests within the range 0
14452 to 255 from the value held in the register.  The generally leads to short
14453 and fast code, but the number of different data items that can be
14454 addressed is limited.  This means that a program that uses lots of static
14455 data may require @option{-mno-base-addresses}.
14456
14457 @item -msingle-exit
14458 @itemx -mno-single-exit
14459 @opindex msingle-exit
14460 @opindex mno-single-exit
14461 Force (do not force) generated code to have a single exit point in each
14462 function.
14463 @end table
14464
14465 @node MN10300 Options
14466 @subsection MN10300 Options
14467 @cindex MN10300 options
14468
14469 These @option{-m} options are defined for Matsushita MN10300 architectures:
14470
14471 @table @gcctabopt
14472 @item -mmult-bug
14473 @opindex mmult-bug
14474 Generate code to avoid bugs in the multiply instructions for the MN10300
14475 processors.  This is the default.
14476
14477 @item -mno-mult-bug
14478 @opindex mno-mult-bug
14479 Do not generate code to avoid bugs in the multiply instructions for the
14480 MN10300 processors.
14481
14482 @item -mam33
14483 @opindex mam33
14484 Generate code which uses features specific to the AM33 processor.
14485
14486 @item -mno-am33
14487 @opindex mno-am33
14488 Do not generate code which uses features specific to the AM33 processor.  This
14489 is the default.
14490
14491 @item -mreturn-pointer-on-d0
14492 @opindex mreturn-pointer-on-d0
14493 When generating a function which returns a pointer, return the pointer
14494 in both @code{a0} and @code{d0}.  Otherwise, the pointer is returned
14495 only in a0, and attempts to call such functions without a prototype
14496 would result in errors.  Note that this option is on by default; use
14497 @option{-mno-return-pointer-on-d0} to disable it.
14498
14499 @item -mno-crt0
14500 @opindex mno-crt0
14501 Do not link in the C run-time initialization object file.
14502
14503 @item -mrelax
14504 @opindex mrelax
14505 Indicate to the linker that it should perform a relaxation optimization pass
14506 to shorten branches, calls and absolute memory addresses.  This option only
14507 has an effect when used on the command line for the final link step.
14508
14509 This option makes symbolic debugging impossible.
14510 @end table
14511
14512 @node PDP-11 Options
14513 @subsection PDP-11 Options
14514 @cindex PDP-11 Options
14515
14516 These options are defined for the PDP-11:
14517
14518 @table @gcctabopt
14519 @item -mfpu
14520 @opindex mfpu
14521 Use hardware FPP floating point.  This is the default.  (FIS floating
14522 point on the PDP-11/40 is not supported.)
14523
14524 @item -msoft-float
14525 @opindex msoft-float
14526 Do not use hardware floating point.
14527
14528 @item -mac0
14529 @opindex mac0
14530 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
14531
14532 @item -mno-ac0
14533 @opindex mno-ac0
14534 Return floating-point results in memory.  This is the default.
14535
14536 @item -m40
14537 @opindex m40
14538 Generate code for a PDP-11/40.
14539
14540 @item -m45
14541 @opindex m45
14542 Generate code for a PDP-11/45.  This is the default.
14543
14544 @item -m10
14545 @opindex m10
14546 Generate code for a PDP-11/10.
14547
14548 @item -mbcopy-builtin
14549 @opindex mbcopy-builtin
14550 Use inline @code{movmemhi} patterns for copying memory.  This is the
14551 default.
14552
14553 @item -mbcopy
14554 @opindex mbcopy
14555 Do not use inline @code{movmemhi} patterns for copying memory.
14556
14557 @item -mint16
14558 @itemx -mno-int32
14559 @opindex mint16
14560 @opindex mno-int32
14561 Use 16-bit @code{int}.  This is the default.
14562
14563 @item -mint32
14564 @itemx -mno-int16
14565 @opindex mint32
14566 @opindex mno-int16
14567 Use 32-bit @code{int}.
14568
14569 @item -mfloat64
14570 @itemx -mno-float32
14571 @opindex mfloat64
14572 @opindex mno-float32
14573 Use 64-bit @code{float}.  This is the default.
14574
14575 @item -mfloat32
14576 @itemx -mno-float64
14577 @opindex mfloat32
14578 @opindex mno-float64
14579 Use 32-bit @code{float}.
14580
14581 @item -mabshi
14582 @opindex mabshi
14583 Use @code{abshi2} pattern.  This is the default.
14584
14585 @item -mno-abshi
14586 @opindex mno-abshi
14587 Do not use @code{abshi2} pattern.
14588
14589 @item -mbranch-expensive
14590 @opindex mbranch-expensive
14591 Pretend that branches are expensive.  This is for experimenting with
14592 code generation only.
14593
14594 @item -mbranch-cheap
14595 @opindex mbranch-cheap
14596 Do not pretend that branches are expensive.  This is the default.
14597
14598 @item -msplit
14599 @opindex msplit
14600 Generate code for a system with split I&D@.
14601
14602 @item -mno-split
14603 @opindex mno-split
14604 Generate code for a system without split I&D@.  This is the default.
14605
14606 @item -munix-asm
14607 @opindex munix-asm
14608 Use Unix assembler syntax.  This is the default when configured for
14609 @samp{pdp11-*-bsd}.
14610
14611 @item -mdec-asm
14612 @opindex mdec-asm
14613 Use DEC assembler syntax.  This is the default when configured for any
14614 PDP-11 target other than @samp{pdp11-*-bsd}.
14615 @end table
14616
14617 @node picoChip Options
14618 @subsection picoChip Options
14619 @cindex picoChip options
14620
14621 These @samp{-m} options are defined for picoChip implementations:
14622
14623 @table @gcctabopt
14624
14625 @item -mae=@var{ae_type}
14626 @opindex mcpu
14627 Set the instruction set, register set, and instruction scheduling
14628 parameters for array element type @var{ae_type}.  Supported values
14629 for @var{ae_type} are @samp{ANY}, @samp{MUL}, and @samp{MAC}.
14630
14631 @option{-mae=ANY} selects a completely generic AE type.  Code
14632 generated with this option will run on any of the other AE types.  The
14633 code will not be as efficient as it would be if compiled for a specific
14634 AE type, and some types of operation (e.g., multiplication) will not
14635 work properly on all types of AE.
14636
14637 @option{-mae=MUL} selects a MUL AE type.  This is the most useful AE type
14638 for compiled code, and is the default.
14639
14640 @option{-mae=MAC} selects a DSP-style MAC AE.  Code compiled with this
14641 option may suffer from poor performance of byte (char) manipulation,
14642 since the DSP AE does not provide hardware support for byte load/stores.
14643
14644 @item -msymbol-as-address
14645 Enable the compiler to directly use a symbol name as an address in a
14646 load/store instruction, without first loading it into a
14647 register.  Typically, the use of this option will generate larger
14648 programs, which run faster than when the option isn't used.  However, the
14649 results vary from program to program, so it is left as a user option,
14650 rather than being permanently enabled.
14651
14652 @item -mno-inefficient-warnings
14653 Disables warnings about the generation of inefficient code.  These
14654 warnings can be generated, for example, when compiling code which
14655 performs byte-level memory operations on the MAC AE type.  The MAC AE has
14656 no hardware support for byte-level memory operations, so all byte
14657 load/stores must be synthesized from word load/store operations.  This is
14658 inefficient and a warning will be generated indicating to the programmer
14659 that they should rewrite the code to avoid byte operations, or to target
14660 an AE type which has the necessary hardware support.  This option enables
14661 the warning to be turned off.
14662
14663 @end table
14664
14665 @node PowerPC Options
14666 @subsection PowerPC Options
14667 @cindex PowerPC options
14668
14669 These are listed under @xref{RS/6000 and PowerPC Options}.
14670
14671 @node RS/6000 and PowerPC Options
14672 @subsection IBM RS/6000 and PowerPC Options
14673 @cindex RS/6000 and PowerPC Options
14674 @cindex IBM RS/6000 and PowerPC Options
14675
14676 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
14677 @table @gcctabopt
14678 @item -mpower
14679 @itemx -mno-power
14680 @itemx -mpower2
14681 @itemx -mno-power2
14682 @itemx -mpowerpc
14683 @itemx -mno-powerpc
14684 @itemx -mpowerpc-gpopt
14685 @itemx -mno-powerpc-gpopt
14686 @itemx -mpowerpc-gfxopt
14687 @itemx -mno-powerpc-gfxopt
14688 @itemx -mpowerpc64
14689 @itemx -mno-powerpc64
14690 @itemx -mmfcrf
14691 @itemx -mno-mfcrf
14692 @itemx -mpopcntb
14693 @itemx -mno-popcntb
14694 @itemx -mpopcntd
14695 @itemx -mno-popcntd
14696 @itemx -mfprnd
14697 @itemx -mno-fprnd
14698 @itemx -mcmpb
14699 @itemx -mno-cmpb
14700 @itemx -mmfpgpr
14701 @itemx -mno-mfpgpr
14702 @itemx -mhard-dfp
14703 @itemx -mno-hard-dfp
14704 @opindex mpower
14705 @opindex mno-power
14706 @opindex mpower2
14707 @opindex mno-power2
14708 @opindex mpowerpc
14709 @opindex mno-powerpc
14710 @opindex mpowerpc-gpopt
14711 @opindex mno-powerpc-gpopt
14712 @opindex mpowerpc-gfxopt
14713 @opindex mno-powerpc-gfxopt
14714 @opindex mpowerpc64
14715 @opindex mno-powerpc64
14716 @opindex mmfcrf
14717 @opindex mno-mfcrf
14718 @opindex mpopcntb
14719 @opindex mno-popcntb
14720 @opindex mpopcntd
14721 @opindex mno-popcntd
14722 @opindex mfprnd
14723 @opindex mno-fprnd
14724 @opindex mcmpb
14725 @opindex mno-cmpb
14726 @opindex mmfpgpr
14727 @opindex mno-mfpgpr
14728 @opindex mhard-dfp
14729 @opindex mno-hard-dfp
14730 GCC supports two related instruction set architectures for the
14731 RS/6000 and PowerPC@.  The @dfn{POWER} instruction set are those
14732 instructions supported by the @samp{rios} chip set used in the original
14733 RS/6000 systems and the @dfn{PowerPC} instruction set is the
14734 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and
14735 the IBM 4xx, 6xx, and follow-on microprocessors.
14736
14737 Neither architecture is a subset of the other.  However there is a
14738 large common subset of instructions supported by both.  An MQ
14739 register is included in processors supporting the POWER architecture.
14740
14741 You use these options to specify which instructions are available on the
14742 processor you are using.  The default value of these options is
14743 determined when configuring GCC@.  Specifying the
14744 @option{-mcpu=@var{cpu_type}} overrides the specification of these
14745 options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
14746 rather than the options listed above.
14747
14748 The @option{-mpower} option allows GCC to generate instructions that
14749 are found only in the POWER architecture and to use the MQ register.
14750 Specifying @option{-mpower2} implies @option{-power} and also allows GCC
14751 to generate instructions that are present in the POWER2 architecture but
14752 not the original POWER architecture.
14753
14754 The @option{-mpowerpc} option allows GCC to generate instructions that
14755 are found only in the 32-bit subset of the PowerPC architecture.
14756 Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows
14757 GCC to use the optional PowerPC architecture instructions in the
14758 General Purpose group, including floating-point square root.  Specifying
14759 @option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to
14760 use the optional PowerPC architecture instructions in the Graphics
14761 group, including floating-point select.
14762
14763 The @option{-mmfcrf} option allows GCC to generate the move from
14764 condition register field instruction implemented on the POWER4
14765 processor and other processors that support the PowerPC V2.01
14766 architecture.
14767 The @option{-mpopcntb} option allows GCC to generate the popcount and
14768 double precision FP reciprocal estimate instruction implemented on the
14769 POWER5 processor and other processors that support the PowerPC V2.02
14770 architecture.
14771 The @option{-mpopcntd} option allows GCC to generate the popcount
14772 instruction implemented on the POWER7 processor and other processors
14773 that support the PowerPC V2.06 architecture.
14774 The @option{-mfprnd} option allows GCC to generate the FP round to
14775 integer instructions implemented on the POWER5+ processor and other
14776 processors that support the PowerPC V2.03 architecture.
14777 The @option{-mcmpb} option allows GCC to generate the compare bytes
14778 instruction implemented on the POWER6 processor and other processors
14779 that support the PowerPC V2.05 architecture.
14780 The @option{-mmfpgpr} option allows GCC to generate the FP move to/from
14781 general purpose register instructions implemented on the POWER6X
14782 processor and other processors that support the extended PowerPC V2.05
14783 architecture.
14784 The @option{-mhard-dfp} option allows GCC to generate the decimal floating
14785 point instructions implemented on some POWER processors.
14786
14787 The @option{-mpowerpc64} option allows GCC to generate the additional
14788 64-bit instructions that are found in the full PowerPC64 architecture
14789 and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
14790 @option{-mno-powerpc64}.
14791
14792 If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC
14793 will use only the instructions in the common subset of both
14794 architectures plus some special AIX common-mode calls, and will not use
14795 the MQ register.  Specifying both @option{-mpower} and @option{-mpowerpc}
14796 permits GCC to use any instruction from either architecture and to
14797 allow use of the MQ register; specify this for the Motorola MPC601.
14798
14799 @item -mnew-mnemonics
14800 @itemx -mold-mnemonics
14801 @opindex mnew-mnemonics
14802 @opindex mold-mnemonics
14803 Select which mnemonics to use in the generated assembler code.  With
14804 @option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for
14805 the PowerPC architecture.  With @option{-mold-mnemonics} it uses the
14806 assembler mnemonics defined for the POWER architecture.  Instructions
14807 defined in only one architecture have only one mnemonic; GCC uses that
14808 mnemonic irrespective of which of these options is specified.
14809
14810 GCC defaults to the mnemonics appropriate for the architecture in
14811 use.  Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the
14812 value of these option.  Unless you are building a cross-compiler, you
14813 should normally not specify either @option{-mnew-mnemonics} or
14814 @option{-mold-mnemonics}, but should instead accept the default.
14815
14816 @item -mcpu=@var{cpu_type}
14817 @opindex mcpu
14818 Set architecture type, register usage, choice of mnemonics, and
14819 instruction scheduling parameters for machine type @var{cpu_type}.
14820 Supported values for @var{cpu_type} are @samp{401}, @samp{403},
14821 @samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{464}, @samp{464fp},
14822 @samp{476}, @samp{476fp}, @samp{505}, @samp{601}, @samp{602}, @samp{603},
14823 @samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{630}, @samp{740},
14824 @samp{7400}, @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
14825 @samp{860}, @samp{970}, @samp{8540}, @samp{a2}, @samp{e300c2},
14826 @samp{e300c3}, @samp{e500mc}, @samp{e500mc64}, @samp{ec603e}, @samp{G3},
14827 @samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3},
14828 @samp{power4}, @samp{power5}, @samp{power5+}, @samp{power6}, @samp{power6x},
14829 @samp{power7}, @samp{common}, @samp{powerpc}, @samp{powerpc64}, @samp{rios},
14830 @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}.
14831
14832 @option{-mcpu=common} selects a completely generic processor.  Code
14833 generated under this option will run on any POWER or PowerPC processor.
14834 GCC will use only the instructions in the common subset of both
14835 architectures, and will not use the MQ register.  GCC assumes a generic
14836 processor model for scheduling purposes.
14837
14838 @option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and
14839 @option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit
14840 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
14841 types, with an appropriate, generic processor model assumed for
14842 scheduling purposes.
14843
14844 The other options specify a specific processor.  Code generated under
14845 those options will run best on that processor, and may not run at all on
14846 others.
14847
14848 The @option{-mcpu} options automatically enable or disable the
14849 following options:
14850
14851 @gccoptlist{-maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple @gol
14852 -mnew-mnemonics  -mpopcntb -mpopcntd  -mpower  -mpower2  -mpowerpc64 @gol
14853 -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float @gol
14854 -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx}
14855
14856 The particular options set for any particular CPU will vary between
14857 compiler versions, depending on what setting seems to produce optimal
14858 code for that CPU; it doesn't necessarily reflect the actual hardware's
14859 capabilities.  If you wish to set an individual option to a particular
14860 value, you may specify it after the @option{-mcpu} option, like
14861 @samp{-mcpu=970 -mno-altivec}.
14862
14863 On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
14864 not enabled or disabled by the @option{-mcpu} option at present because
14865 AIX does not have full support for these options.  You may still
14866 enable or disable them individually if you're sure it'll work in your
14867 environment.
14868
14869 @item -mtune=@var{cpu_type}
14870 @opindex mtune
14871 Set the instruction scheduling parameters for machine type
14872 @var{cpu_type}, but do not set the architecture type, register usage, or
14873 choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would.  The same
14874 values for @var{cpu_type} are used for @option{-mtune} as for
14875 @option{-mcpu}.  If both are specified, the code generated will use the
14876 architecture, registers, and mnemonics set by @option{-mcpu}, but the
14877 scheduling parameters set by @option{-mtune}.
14878
14879 @item -mswdiv
14880 @itemx -mno-swdiv
14881 @opindex mswdiv
14882 @opindex mno-swdiv
14883 Generate code to compute division as reciprocal estimate and iterative
14884 refinement, creating opportunities for increased throughput.  This
14885 feature requires: optional PowerPC Graphics instruction set for single
14886 precision and FRE instruction for double precision, assuming divides
14887 cannot generate user-visible traps, and the domain values not include
14888 Infinities, denormals or zero denominator.
14889
14890 @item -maltivec
14891 @itemx -mno-altivec
14892 @opindex maltivec
14893 @opindex mno-altivec
14894 Generate code that uses (does not use) AltiVec instructions, and also
14895 enable the use of built-in functions that allow more direct access to
14896 the AltiVec instruction set.  You may also need to set
14897 @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
14898 enhancements.
14899
14900 @item -mvrsave
14901 @itemx -mno-vrsave
14902 @opindex mvrsave
14903 @opindex mno-vrsave
14904 Generate VRSAVE instructions when generating AltiVec code.
14905
14906 @item -mgen-cell-microcode
14907 @opindex mgen-cell-microcode
14908 Generate Cell microcode instructions
14909
14910 @item -mwarn-cell-microcode
14911 @opindex mwarn-cell-microcode
14912 Warning when a Cell microcode instruction is going to emitted.  An example
14913 of a Cell microcode instruction is a variable shift.
14914
14915 @item -msecure-plt
14916 @opindex msecure-plt
14917 Generate code that allows ld and ld.so to build executables and shared
14918 libraries with non-exec .plt and .got sections.  This is a PowerPC
14919 32-bit SYSV ABI option.
14920
14921 @item -mbss-plt
14922 @opindex mbss-plt
14923 Generate code that uses a BSS .plt section that ld.so fills in, and
14924 requires .plt and .got sections that are both writable and executable.
14925 This is a PowerPC 32-bit SYSV ABI option.
14926
14927 @item -misel
14928 @itemx -mno-isel
14929 @opindex misel
14930 @opindex mno-isel
14931 This switch enables or disables the generation of ISEL instructions.
14932
14933 @item -misel=@var{yes/no}
14934 This switch has been deprecated.  Use @option{-misel} and
14935 @option{-mno-isel} instead.
14936
14937 @item -mspe
14938 @itemx -mno-spe
14939 @opindex mspe
14940 @opindex mno-spe
14941 This switch enables or disables the generation of SPE simd
14942 instructions.
14943
14944 @item -mpaired
14945 @itemx -mno-paired
14946 @opindex mpaired
14947 @opindex mno-paired
14948 This switch enables or disables the generation of PAIRED simd
14949 instructions.
14950
14951 @item -mspe=@var{yes/no}
14952 This option has been deprecated.  Use @option{-mspe} and
14953 @option{-mno-spe} instead.
14954
14955 @item -mvsx
14956 @itemx -mno-vsx
14957 @opindex mvsx
14958 @opindex mno-vsx
14959 Generate code that uses (does not use) vector/scalar (VSX)
14960 instructions, and also enable the use of built-in functions that allow
14961 more direct access to the VSX instruction set.
14962
14963 @item -mfloat-gprs=@var{yes/single/double/no}
14964 @itemx -mfloat-gprs
14965 @opindex mfloat-gprs
14966 This switch enables or disables the generation of floating point
14967 operations on the general purpose registers for architectures that
14968 support it.
14969
14970 The argument @var{yes} or @var{single} enables the use of
14971 single-precision floating point operations.
14972
14973 The argument @var{double} enables the use of single and
14974 double-precision floating point operations.
14975
14976 The argument @var{no} disables floating point operations on the
14977 general purpose registers.
14978
14979 This option is currently only available on the MPC854x.
14980
14981 @item -m32
14982 @itemx -m64
14983 @opindex m32
14984 @opindex m64
14985 Generate code for 32-bit or 64-bit environments of Darwin and SVR4
14986 targets (including GNU/Linux).  The 32-bit environment sets int, long
14987 and pointer to 32 bits and generates code that runs on any PowerPC
14988 variant.  The 64-bit environment sets int to 32 bits and long and
14989 pointer to 64 bits, and generates code for PowerPC64, as for
14990 @option{-mpowerpc64}.
14991
14992 @item -mfull-toc
14993 @itemx -mno-fp-in-toc
14994 @itemx -mno-sum-in-toc
14995 @itemx -mminimal-toc
14996 @opindex mfull-toc
14997 @opindex mno-fp-in-toc
14998 @opindex mno-sum-in-toc
14999 @opindex mminimal-toc
15000 Modify generation of the TOC (Table Of Contents), which is created for
15001 every executable file.  The @option{-mfull-toc} option is selected by
15002 default.  In that case, GCC will allocate at least one TOC entry for
15003 each unique non-automatic variable reference in your program.  GCC
15004 will also place floating-point constants in the TOC@.  However, only
15005 16,384 entries are available in the TOC@.
15006
15007 If you receive a linker error message that saying you have overflowed
15008 the available TOC space, you can reduce the amount of TOC space used
15009 with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
15010 @option{-mno-fp-in-toc} prevents GCC from putting floating-point
15011 constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
15012 generate code to calculate the sum of an address and a constant at
15013 run-time instead of putting that sum into the TOC@.  You may specify one
15014 or both of these options.  Each causes GCC to produce very slightly
15015 slower and larger code at the expense of conserving TOC space.
15016
15017 If you still run out of space in the TOC even when you specify both of
15018 these options, specify @option{-mminimal-toc} instead.  This option causes
15019 GCC to make only one TOC entry for every file.  When you specify this
15020 option, GCC will produce code that is slower and larger but which
15021 uses extremely little TOC space.  You may wish to use this option
15022 only on files that contain less frequently executed code.
15023
15024 @item -maix64
15025 @itemx -maix32
15026 @opindex maix64
15027 @opindex maix32
15028 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
15029 @code{long} type, and the infrastructure needed to support them.
15030 Specifying @option{-maix64} implies @option{-mpowerpc64} and
15031 @option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and
15032 implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.
15033
15034 @item -mxl-compat
15035 @itemx -mno-xl-compat
15036 @opindex mxl-compat
15037 @opindex mno-xl-compat
15038 Produce code that conforms more closely to IBM XL compiler semantics
15039 when using AIX-compatible ABI@.  Pass floating-point arguments to
15040 prototyped functions beyond the register save area (RSA) on the stack
15041 in addition to argument FPRs.  Do not assume that most significant
15042 double in 128-bit long double value is properly rounded when comparing
15043 values and converting to double.  Use XL symbol names for long double
15044 support routines.
15045
15046 The AIX calling convention was extended but not initially documented to
15047 handle an obscure K&R C case of calling a function that takes the
15048 address of its arguments with fewer arguments than declared.  IBM XL
15049 compilers access floating point arguments which do not fit in the
15050 RSA from the stack when a subroutine is compiled without
15051 optimization.  Because always storing floating-point arguments on the
15052 stack is inefficient and rarely needed, this option is not enabled by
15053 default and only is necessary when calling subroutines compiled by IBM
15054 XL compilers without optimization.
15055
15056 @item -mpe
15057 @opindex mpe
15058 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
15059 application written to use message passing with special startup code to
15060 enable the application to run.  The system must have PE installed in the
15061 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
15062 must be overridden with the @option{-specs=} option to specify the
15063 appropriate directory location.  The Parallel Environment does not
15064 support threads, so the @option{-mpe} option and the @option{-pthread}
15065 option are incompatible.
15066
15067 @item -malign-natural
15068 @itemx -malign-power
15069 @opindex malign-natural
15070 @opindex malign-power
15071 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
15072 @option{-malign-natural} overrides the ABI-defined alignment of larger
15073 types, such as floating-point doubles, on their natural size-based boundary.
15074 The option @option{-malign-power} instructs GCC to follow the ABI-specified
15075 alignment rules.  GCC defaults to the standard alignment defined in the ABI@.
15076
15077 On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
15078 is not supported.
15079
15080 @item -msoft-float
15081 @itemx -mhard-float
15082 @opindex msoft-float
15083 @opindex mhard-float
15084 Generate code that does not use (uses) the floating-point register set.
15085 Software floating point emulation is provided if you use the
15086 @option{-msoft-float} option, and pass the option to GCC when linking.
15087
15088 @item -msingle-float
15089 @itemx -mdouble-float
15090 @opindex msingle-float
15091 @opindex mdouble-float
15092 Generate code for single or double-precision floating point operations.
15093 @option{-mdouble-float} implies @option{-msingle-float}.
15094
15095 @item -msimple-fpu
15096 @opindex msimple-fpu
15097 Do not generate sqrt and div instructions for hardware floating point unit.
15098
15099 @item -mfpu
15100 @opindex mfpu
15101 Specify type of floating point unit.  Valid values are @var{sp_lite}
15102 (equivalent to -msingle-float -msimple-fpu), @var{dp_lite} (equivalent
15103 to -mdouble-float -msimple-fpu), @var{sp_full} (equivalent to -msingle-float),
15104 and @var{dp_full} (equivalent to -mdouble-float).
15105
15106 @item -mxilinx-fpu
15107 @opindex mxilinx-fpu
15108 Perform optimizations for floating point unit on Xilinx PPC 405/440.
15109
15110 @item -mmultiple
15111 @itemx -mno-multiple
15112 @opindex mmultiple
15113 @opindex mno-multiple
15114 Generate code that uses (does not use) the load multiple word
15115 instructions and the store multiple word instructions.  These
15116 instructions are generated by default on POWER systems, and not
15117 generated on PowerPC systems.  Do not use @option{-mmultiple} on little
15118 endian PowerPC systems, since those instructions do not work when the
15119 processor is in little endian mode.  The exceptions are PPC740 and
15120 PPC750 which permit the instructions usage in little endian mode.
15121
15122 @item -mstring
15123 @itemx -mno-string
15124 @opindex mstring
15125 @opindex mno-string
15126 Generate code that uses (does not use) the load string instructions
15127 and the store string word instructions to save multiple registers and
15128 do small block moves.  These instructions are generated by default on
15129 POWER systems, and not generated on PowerPC systems.  Do not use
15130 @option{-mstring} on little endian PowerPC systems, since those
15131 instructions do not work when the processor is in little endian mode.
15132 The exceptions are PPC740 and PPC750 which permit the instructions
15133 usage in little endian mode.
15134
15135 @item -mupdate
15136 @itemx -mno-update
15137 @opindex mupdate
15138 @opindex mno-update
15139 Generate code that uses (does not use) the load or store instructions
15140 that update the base register to the address of the calculated memory
15141 location.  These instructions are generated by default.  If you use
15142 @option{-mno-update}, there is a small window between the time that the
15143 stack pointer is updated and the address of the previous frame is
15144 stored, which means code that walks the stack frame across interrupts or
15145 signals may get corrupted data.
15146
15147 @item -mavoid-indexed-addresses
15148 @itemx -mno-avoid-indexed-addresses
15149 @opindex mavoid-indexed-addresses
15150 @opindex mno-avoid-indexed-addresses
15151 Generate code that tries to avoid (not avoid) the use of indexed load
15152 or store instructions. These instructions can incur a performance
15153 penalty on Power6 processors in certain situations, such as when
15154 stepping through large arrays that cross a 16M boundary.  This option
15155 is enabled by default when targetting Power6 and disabled otherwise.
15156
15157 @item -mfused-madd
15158 @itemx -mno-fused-madd
15159 @opindex mfused-madd
15160 @opindex mno-fused-madd
15161 Generate code that uses (does not use) the floating point multiply and
15162 accumulate instructions.  These instructions are generated by default if
15163 hardware floating is used.
15164
15165 @item -mmulhw
15166 @itemx -mno-mulhw
15167 @opindex mmulhw
15168 @opindex mno-mulhw
15169 Generate code that uses (does not use) the half-word multiply and
15170 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 processors.
15171 These instructions are generated by default when targetting those
15172 processors.
15173
15174 @item -mdlmzb
15175 @itemx -mno-dlmzb
15176 @opindex mdlmzb
15177 @opindex mno-dlmzb
15178 Generate code that uses (does not use) the string-search @samp{dlmzb}
15179 instruction on the IBM 405, 440, 464 and 476 processors.  This instruction is
15180 generated by default when targetting those processors.
15181
15182 @item -mno-bit-align
15183 @itemx -mbit-align
15184 @opindex mno-bit-align
15185 @opindex mbit-align
15186 On System V.4 and embedded PowerPC systems do not (do) force structures
15187 and unions that contain bit-fields to be aligned to the base type of the
15188 bit-field.
15189
15190 For example, by default a structure containing nothing but 8
15191 @code{unsigned} bit-fields of length 1 would be aligned to a 4 byte
15192 boundary and have a size of 4 bytes.  By using @option{-mno-bit-align},
15193 the structure would be aligned to a 1 byte boundary and be one byte in
15194 size.
15195
15196 @item -mno-strict-align
15197 @itemx -mstrict-align
15198 @opindex mno-strict-align
15199 @opindex mstrict-align
15200 On System V.4 and embedded PowerPC systems do not (do) assume that
15201 unaligned memory references will be handled by the system.
15202
15203 @item -mrelocatable
15204 @itemx -mno-relocatable
15205 @opindex mrelocatable
15206 @opindex mno-relocatable
15207 On embedded PowerPC systems generate code that allows (does not allow)
15208 the program to be relocated to a different address at runtime.  If you
15209 use @option{-mrelocatable} on any module, all objects linked together must
15210 be compiled with @option{-mrelocatable} or @option{-mrelocatable-lib}.
15211
15212 @item -mrelocatable-lib
15213 @itemx -mno-relocatable-lib
15214 @opindex mrelocatable-lib
15215 @opindex mno-relocatable-lib
15216 On embedded PowerPC systems generate code that allows (does not allow)
15217 the program to be relocated to a different address at runtime.  Modules
15218 compiled with @option{-mrelocatable-lib} can be linked with either modules
15219 compiled without @option{-mrelocatable} and @option{-mrelocatable-lib} or
15220 with modules compiled with the @option{-mrelocatable} options.
15221
15222 @item -mno-toc
15223 @itemx -mtoc
15224 @opindex mno-toc
15225 @opindex mtoc
15226 On System V.4 and embedded PowerPC systems do not (do) assume that
15227 register 2 contains a pointer to a global area pointing to the addresses
15228 used in the program.
15229
15230 @item -mlittle
15231 @itemx -mlittle-endian
15232 @opindex mlittle
15233 @opindex mlittle-endian
15234 On System V.4 and embedded PowerPC systems compile code for the
15235 processor in little endian mode.  The @option{-mlittle-endian} option is
15236 the same as @option{-mlittle}.
15237
15238 @item -mbig
15239 @itemx -mbig-endian
15240 @opindex mbig
15241 @opindex mbig-endian
15242 On System V.4 and embedded PowerPC systems compile code for the
15243 processor in big endian mode.  The @option{-mbig-endian} option is
15244 the same as @option{-mbig}.
15245
15246 @item -mdynamic-no-pic
15247 @opindex mdynamic-no-pic
15248 On Darwin and Mac OS X systems, compile code so that it is not
15249 relocatable, but that its external references are relocatable.  The
15250 resulting code is suitable for applications, but not shared
15251 libraries.
15252
15253 @item -mprioritize-restricted-insns=@var{priority}
15254 @opindex mprioritize-restricted-insns
15255 This option controls the priority that is assigned to
15256 dispatch-slot restricted instructions during the second scheduling
15257 pass.  The argument @var{priority} takes the value @var{0/1/2} to assign
15258 @var{no/highest/second-highest} priority to dispatch slot restricted
15259 instructions.
15260
15261 @item -msched-costly-dep=@var{dependence_type}
15262 @opindex msched-costly-dep
15263 This option controls which dependences are considered costly
15264 by the target during instruction scheduling.  The argument
15265 @var{dependence_type} takes one of the following values:
15266 @var{no}: no dependence is costly,
15267 @var{all}: all dependences are costly,
15268 @var{true_store_to_load}: a true dependence from store to load is costly,
15269 @var{store_to_load}: any dependence from store to load is costly,
15270 @var{number}: any dependence which latency >= @var{number} is costly.
15271
15272 @item -minsert-sched-nops=@var{scheme}
15273 @opindex minsert-sched-nops
15274 This option controls which nop insertion scheme will be used during
15275 the second scheduling pass.  The argument @var{scheme} takes one of the
15276 following values:
15277 @var{no}: Don't insert nops.
15278 @var{pad}: Pad with nops any dispatch group which has vacant issue slots,
15279 according to the scheduler's grouping.
15280 @var{regroup_exact}: Insert nops to force costly dependent insns into
15281 separate groups.  Insert exactly as many nops as needed to force an insn
15282 to a new group, according to the estimated processor grouping.
15283 @var{number}: Insert nops to force costly dependent insns into
15284 separate groups.  Insert @var{number} nops to force an insn to a new group.
15285
15286 @item -mcall-sysv
15287 @opindex mcall-sysv
15288 On System V.4 and embedded PowerPC systems compile code using calling
15289 conventions that adheres to the March 1995 draft of the System V
15290 Application Binary Interface, PowerPC processor supplement.  This is the
15291 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
15292
15293 @item -mcall-sysv-eabi
15294 @itemx -mcall-eabi
15295 @opindex mcall-sysv-eabi
15296 @opindex mcall-eabi
15297 Specify both @option{-mcall-sysv} and @option{-meabi} options.
15298
15299 @item -mcall-sysv-noeabi
15300 @opindex mcall-sysv-noeabi
15301 Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
15302
15303 @item -mcall-aixdesc
15304 @opindex m
15305 On System V.4 and embedded PowerPC systems compile code for the AIX
15306 operating system.
15307
15308 @item -mcall-linux
15309 @opindex mcall-linux
15310 On System V.4 and embedded PowerPC systems compile code for the
15311 Linux-based GNU system.
15312
15313 @item -mcall-gnu
15314 @opindex mcall-gnu
15315 On System V.4 and embedded PowerPC systems compile code for the
15316 Hurd-based GNU system.
15317
15318 @item -mcall-freebsd
15319 @opindex mcall-freebsd
15320 On System V.4 and embedded PowerPC systems compile code for the
15321 FreeBSD operating system.
15322
15323 @item -mcall-netbsd
15324 @opindex mcall-netbsd
15325 On System V.4 and embedded PowerPC systems compile code for the
15326 NetBSD operating system.
15327
15328 @item -mcall-openbsd
15329 @opindex mcall-netbsd
15330 On System V.4 and embedded PowerPC systems compile code for the
15331 OpenBSD operating system.
15332
15333 @item -maix-struct-return
15334 @opindex maix-struct-return
15335 Return all structures in memory (as specified by the AIX ABI)@.
15336
15337 @item -msvr4-struct-return
15338 @opindex msvr4-struct-return
15339 Return structures smaller than 8 bytes in registers (as specified by the
15340 SVR4 ABI)@.
15341
15342 @item -mabi=@var{abi-type}
15343 @opindex mabi
15344 Extend the current ABI with a particular extension, or remove such extension.
15345 Valid values are @var{altivec}, @var{no-altivec}, @var{spe},
15346 @var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble}@.
15347
15348 @item -mabi=spe
15349 @opindex mabi=spe
15350 Extend the current ABI with SPE ABI extensions.  This does not change
15351 the default ABI, instead it adds the SPE ABI extensions to the current
15352 ABI@.
15353
15354 @item -mabi=no-spe
15355 @opindex mabi=no-spe
15356 Disable Booke SPE ABI extensions for the current ABI@.
15357
15358 @item -mabi=ibmlongdouble
15359 @opindex mabi=ibmlongdouble
15360 Change the current ABI to use IBM extended precision long double.
15361 This is a PowerPC 32-bit SYSV ABI option.
15362
15363 @item -mabi=ieeelongdouble
15364 @opindex mabi=ieeelongdouble
15365 Change the current ABI to use IEEE extended precision long double.
15366 This is a PowerPC 32-bit Linux ABI option.
15367
15368 @item -mprototype
15369 @itemx -mno-prototype
15370 @opindex mprototype
15371 @opindex mno-prototype
15372 On System V.4 and embedded PowerPC systems assume that all calls to
15373 variable argument functions are properly prototyped.  Otherwise, the
15374 compiler must insert an instruction before every non prototyped call to
15375 set or clear bit 6 of the condition code register (@var{CR}) to
15376 indicate whether floating point values were passed in the floating point
15377 registers in case the function takes a variable arguments.  With
15378 @option{-mprototype}, only calls to prototyped variable argument functions
15379 will set or clear the bit.
15380
15381 @item -msim
15382 @opindex msim
15383 On embedded PowerPC systems, assume that the startup module is called
15384 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
15385 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}
15386 configurations.
15387
15388 @item -mmvme
15389 @opindex mmvme
15390 On embedded PowerPC systems, assume that the startup module is called
15391 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
15392 @file{libc.a}.
15393
15394 @item -mads
15395 @opindex mads
15396 On embedded PowerPC systems, assume that the startup module is called
15397 @file{crt0.o} and the standard C libraries are @file{libads.a} and
15398 @file{libc.a}.
15399
15400 @item -myellowknife
15401 @opindex myellowknife
15402 On embedded PowerPC systems, assume that the startup module is called
15403 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
15404 @file{libc.a}.
15405
15406 @item -mvxworks
15407 @opindex mvxworks
15408 On System V.4 and embedded PowerPC systems, specify that you are
15409 compiling for a VxWorks system.
15410
15411 @item -memb
15412 @opindex memb
15413 On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
15414 header to indicate that @samp{eabi} extended relocations are used.
15415
15416 @item -meabi
15417 @itemx -mno-eabi
15418 @opindex meabi
15419 @opindex mno-eabi
15420 On System V.4 and embedded PowerPC systems do (do not) adhere to the
15421 Embedded Applications Binary Interface (eabi) which is a set of
15422 modifications to the System V.4 specifications.  Selecting @option{-meabi}
15423 means that the stack is aligned to an 8 byte boundary, a function
15424 @code{__eabi} is called to from @code{main} to set up the eabi
15425 environment, and the @option{-msdata} option can use both @code{r2} and
15426 @code{r13} to point to two separate small data areas.  Selecting
15427 @option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
15428 do not call an initialization function from @code{main}, and the
15429 @option{-msdata} option will only use @code{r13} to point to a single
15430 small data area.  The @option{-meabi} option is on by default if you
15431 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
15432
15433 @item -msdata=eabi
15434 @opindex msdata=eabi
15435 On System V.4 and embedded PowerPC systems, put small initialized
15436 @code{const} global and static data in the @samp{.sdata2} section, which
15437 is pointed to by register @code{r2}.  Put small initialized
15438 non-@code{const} global and static data in the @samp{.sdata} section,
15439 which is pointed to by register @code{r13}.  Put small uninitialized
15440 global and static data in the @samp{.sbss} section, which is adjacent to
15441 the @samp{.sdata} section.  The @option{-msdata=eabi} option is
15442 incompatible with the @option{-mrelocatable} option.  The
15443 @option{-msdata=eabi} option also sets the @option{-memb} option.
15444
15445 @item -msdata=sysv
15446 @opindex msdata=sysv
15447 On System V.4 and embedded PowerPC systems, put small global and static
15448 data in the @samp{.sdata} section, which is pointed to by register
15449 @code{r13}.  Put small uninitialized global and static data in the
15450 @samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
15451 The @option{-msdata=sysv} option is incompatible with the
15452 @option{-mrelocatable} option.
15453
15454 @item -msdata=default
15455 @itemx -msdata
15456 @opindex msdata=default
15457 @opindex msdata
15458 On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
15459 compile code the same as @option{-msdata=eabi}, otherwise compile code the
15460 same as @option{-msdata=sysv}.
15461
15462 @item -msdata=data
15463 @opindex msdata=data
15464 On System V.4 and embedded PowerPC systems, put small global
15465 data in the @samp{.sdata} section.  Put small uninitialized global
15466 data in the @samp{.sbss} section.  Do not use register @code{r13}
15467 to address small data however.  This is the default behavior unless
15468 other @option{-msdata} options are used.
15469
15470 @item -msdata=none
15471 @itemx -mno-sdata
15472 @opindex msdata=none
15473 @opindex mno-sdata
15474 On embedded PowerPC systems, put all initialized global and static data
15475 in the @samp{.data} section, and all uninitialized data in the
15476 @samp{.bss} section.
15477
15478 @item -G @var{num}
15479 @opindex G
15480 @cindex smaller data references (PowerPC)
15481 @cindex .sdata/.sdata2 references (PowerPC)
15482 On embedded PowerPC systems, put global and static items less than or
15483 equal to @var{num} bytes into the small data or bss sections instead of
15484 the normal data or bss section.  By default, @var{num} is 8.  The
15485 @option{-G @var{num}} switch is also passed to the linker.
15486 All modules should be compiled with the same @option{-G @var{num}} value.
15487
15488 @item -mregnames
15489 @itemx -mno-regnames
15490 @opindex mregnames
15491 @opindex mno-regnames
15492 On System V.4 and embedded PowerPC systems do (do not) emit register
15493 names in the assembly language output using symbolic forms.
15494
15495 @item -mlongcall
15496 @itemx -mno-longcall
15497 @opindex mlongcall
15498 @opindex mno-longcall
15499 By default assume that all calls are far away so that a longer more
15500 expensive calling sequence is required.  This is required for calls
15501 further than 32 megabytes (33,554,432 bytes) from the current location.
15502 A short call will be generated if the compiler knows
15503 the call cannot be that far away.  This setting can be overridden by
15504 the @code{shortcall} function attribute, or by @code{#pragma
15505 longcall(0)}.
15506
15507 Some linkers are capable of detecting out-of-range calls and generating
15508 glue code on the fly.  On these systems, long calls are unnecessary and
15509 generate slower code.  As of this writing, the AIX linker can do this,
15510 as can the GNU linker for PowerPC/64.  It is planned to add this feature
15511 to the GNU linker for 32-bit PowerPC systems as well.
15512
15513 On Darwin/PPC systems, @code{#pragma longcall} will generate ``jbsr
15514 callee, L42'', plus a ``branch island'' (glue code).  The two target
15515 addresses represent the callee and the ``branch island''.  The
15516 Darwin/PPC linker will prefer the first address and generate a ``bl
15517 callee'' if the PPC ``bl'' instruction will reach the callee directly;
15518 otherwise, the linker will generate ``bl L42'' to call the ``branch
15519 island''.  The ``branch island'' is appended to the body of the
15520 calling function; it computes the full 32-bit address of the callee
15521 and jumps to it.
15522
15523 On Mach-O (Darwin) systems, this option directs the compiler emit to
15524 the glue for every direct call, and the Darwin linker decides whether
15525 to use or discard it.
15526
15527 In the future, we may cause GCC to ignore all longcall specifications
15528 when the linker is known to generate glue.
15529
15530 @item -mtls-markers
15531 @itemx -mno-tls-markers
15532 @opindex mtls-markers
15533 @opindex mno-tls-markers
15534 Mark (do not mark) calls to @code{__tls_get_addr} with a relocation
15535 specifying the function argument.  The relocation allows ld to
15536 reliably associate function call with argument setup instructions for
15537 TLS optimization, which in turn allows gcc to better schedule the
15538 sequence.
15539
15540 @item -pthread
15541 @opindex pthread
15542 Adds support for multithreading with the @dfn{pthreads} library.
15543 This option sets flags for both the preprocessor and linker.
15544
15545 @end table
15546
15547 @node RX Options
15548 @subsection RX Options
15549 @cindex RX Options
15550
15551 These command line options are defined for RX targets:
15552
15553 @table @gcctabopt
15554 @item -m64bit-doubles
15555 @itemx -m32bit-doubles
15556 @opindex m64bit-doubles
15557 @opindex m32bit-doubles
15558 Make the @code{double} data type be 64-bits (@option{-m64bit-doubles})
15559 or 32-bits (@option{-m32bit-doubles}) in size.  The default is
15560 @option{-m32bit-doubles}.  @emph{Note} RX floating point hardware only
15561 works on 32-bit values, which is why the default is
15562 @option{-m32bit-doubles}.
15563
15564 @item -fpu
15565 @itemx -nofpu
15566 @opindex fpu
15567 @opindex nofpu
15568 Enables (@option{-fpu}) or disables (@option{-nofpu}) the use of RX
15569 floating point hardware.  The default is enabled for the @var{RX600}
15570 series and disabled for the @var{RX200} series.
15571
15572 Floating point instructions will only be generated for 32-bit floating
15573 point values however, so if the @option{-m64bit-doubles} option is in
15574 use then the FPU hardware will not be used for doubles.
15575
15576 @emph{Note} If the @option{-fpu} option is enabled then
15577 @option{-funsafe-math-optimizations} is also enabled automatically.
15578 This is because the RX FPU instructions are themselves unsafe.
15579
15580 @item -mcpu=@var{name}
15581 @itemx -patch=@var{name}
15582 @opindex -mcpu
15583 @opindex -patch
15584 Selects the type of RX CPU to be targeted.  Currently three types are
15585 supported, the generic @var{RX600} and @var{RX200} series hardware and
15586 the specific @var{RX610} cpu.  The default is @var{RX600}.
15587
15588 The only difference between @var{RX600} and @var{RX610} is that the
15589 @var{RX610} does not support the @code{MVTIPL} instruction.
15590
15591 The @var{RX200} series does not have a hardware floating point unit
15592 and so @option{-nofpu} is enabled by default when this type is
15593 selected.
15594
15595 @item -mbig-endian-data
15596 @itemx -mlittle-endian-data
15597 @opindex mbig-endian-data
15598 @opindex mlittle-endian-data
15599 Store data (but not code) in the big-endian format.  The default is
15600 @option{-mlittle-endian-data}, ie to store data in the little endian
15601 format.
15602
15603 @item -msmall-data-limit=@var{N}
15604 @opindex msmall-data-limit
15605 Specifies the maximum size in bytes of global and static variables
15606 which can be placed into the small data area.  Using the small data
15607 area can lead to smaller and faster code, but the size of area is
15608 limited and it is up to the programmer to ensure that the area does
15609 not overflow.  Also when the small data area is used one of the RX's
15610 registers (@code{r13}) is reserved for use pointing to this area, so
15611 it is no longer available for use by the compiler.  This could result
15612 in slower and/or larger code if variables which once could have been
15613 held in @code{r13} are now pushed onto the stack.
15614
15615 Note, common variables (variables which have not been initialised) and
15616 constants are not placed into the small data area as they are assigned
15617 to other sections in the output executable.
15618
15619 The default value is zero, which disables this feature.  Note, this
15620 feature is not enabled by default with higher optimization levels
15621 (@option{-O2} etc) because of the potentially detrimental effects of
15622 reserving register @code{r13}.  It is up to the programmer to
15623 experiment and discover whether this feature is of benefit to their
15624 program.
15625
15626 @item -msim
15627 @itemx -mno-sim
15628 @opindex msim
15629 @opindex mno-sim
15630 Use the simulator runtime.  The default is to use the libgloss board
15631 specific runtime.
15632
15633 @item -mas100-syntax
15634 @itemx -mno-as100-syntax
15635 @opindex mas100-syntax
15636 @opindex mno-as100-syntax
15637 When generating assembler output use a syntax that is compatible with
15638 Renesas's AS100 assembler.  This syntax can also be handled by the GAS
15639 assembler but it has some restrictions so generating it is not the
15640 default option.
15641
15642 @item -mmax-constant-size=@var{N}
15643 @opindex mmax-constant-size
15644 Specifies the maximum size, in bytes, of a constant that can be used as
15645 an operand in a RX instruction.  Although the RX instruction set does
15646 allow constants of up to 4 bytes in length to be used in instructions,
15647 a longer value equates to a longer instruction.  Thus in some
15648 circumstances it can be beneficial to restrict the size of constants
15649 that are used in instructions.  Constants that are too big are instead
15650 placed into a constant pool and referenced via register indirection.
15651
15652 The value @var{N} can be between 0 and 4.  A value of 0 (the default)
15653 or 4 means that constants of any size are allowed.
15654
15655 @item -mrelax
15656 @opindex mrelax
15657 Enable linker relaxation.  Linker relaxation is a process whereby the
15658 linker will attempt to reduce the size of a program by finding shorter
15659 versions of various instructions.  Disabled by default.
15660
15661 @item -mint-register=@var{N}
15662 @opindex mint-register
15663 Specify the number of registers to reserve for fast interrupt handler
15664 functions.  The value @var{N} can be between 0 and 4.  A value of 1
15665 means that register @code{r13} will be reserved for the exclusive use
15666 of fast interrupt handlers.  A value of 2 reserves @code{r13} and
15667 @code{r12}.  A value of 3 reserves @code{r13}, @code{r12} and
15668 @code{r11}, and a value of 4 reserves @code{r13} through @code{r10}.
15669 A value of 0, the default, does not reserve any registers.
15670
15671 @item -msave-acc-in-interrupts
15672 @opindex msave-acc-in-interrupts
15673 Specifies that interrupt handler functions should preserve the
15674 accumulator register.  This is only necessary if normal code might use
15675 the accumulator register, for example because it performs 64-bit
15676 multiplications.  The default is to ignore the accumulator as this
15677 makes the interrupt handlers faster.
15678
15679 @end table
15680
15681 @emph{Note:} The generic GCC command line @option{-ffixed-@var{reg}}
15682 has special significance to the RX port when used with the
15683 @code{interrupt} function attribute.  This attribute indicates a
15684 function intended to process fast interrupts.  GCC will will ensure
15685 that it only uses the registers @code{r10}, @code{r11}, @code{r12}
15686 and/or @code{r13} and only provided that the normal use of the
15687 corresponding registers have been restricted via the
15688 @option{-ffixed-@var{reg}} or @option{-mint-register} command line
15689 options.
15690
15691 @node S/390 and zSeries Options
15692 @subsection S/390 and zSeries Options
15693 @cindex S/390 and zSeries Options
15694
15695 These are the @samp{-m} options defined for the S/390 and zSeries architecture.
15696
15697 @table @gcctabopt
15698 @item -mhard-float
15699 @itemx -msoft-float
15700 @opindex mhard-float
15701 @opindex msoft-float
15702 Use (do not use) the hardware floating-point instructions and registers
15703 for floating-point operations.  When @option{-msoft-float} is specified,
15704 functions in @file{libgcc.a} will be used to perform floating-point
15705 operations.  When @option{-mhard-float} is specified, the compiler
15706 generates IEEE floating-point instructions.  This is the default.
15707
15708 @item -mhard-dfp
15709 @itemx -mno-hard-dfp
15710 @opindex mhard-dfp
15711 @opindex mno-hard-dfp
15712 Use (do not use) the hardware decimal-floating-point instructions for
15713 decimal-floating-point operations.  When @option{-mno-hard-dfp} is
15714 specified, functions in @file{libgcc.a} will be used to perform
15715 decimal-floating-point operations.  When @option{-mhard-dfp} is
15716 specified, the compiler generates decimal-floating-point hardware
15717 instructions.  This is the default for @option{-march=z9-ec} or higher.
15718
15719 @item -mlong-double-64
15720 @itemx -mlong-double-128
15721 @opindex mlong-double-64
15722 @opindex mlong-double-128
15723 These switches control the size of @code{long double} type. A size
15724 of 64bit makes the @code{long double} type equivalent to the @code{double}
15725 type. This is the default.
15726
15727 @item -mbackchain
15728 @itemx -mno-backchain
15729 @opindex mbackchain
15730 @opindex mno-backchain
15731 Store (do not store) the address of the caller's frame as backchain pointer
15732 into the callee's stack frame.
15733 A backchain may be needed to allow debugging using tools that do not understand
15734 DWARF-2 call frame information.
15735 When @option{-mno-packed-stack} is in effect, the backchain pointer is stored
15736 at the bottom of the stack frame; when @option{-mpacked-stack} is in effect,
15737 the backchain is placed into the topmost word of the 96/160 byte register
15738 save area.
15739
15740 In general, code compiled with @option{-mbackchain} is call-compatible with
15741 code compiled with @option{-mmo-backchain}; however, use of the backchain
15742 for debugging purposes usually requires that the whole binary is built with
15743 @option{-mbackchain}.  Note that the combination of @option{-mbackchain},
15744 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
15745 to build a linux kernel use @option{-msoft-float}.
15746
15747 The default is to not maintain the backchain.
15748
15749 @item -mpacked-stack
15750 @itemx -mno-packed-stack
15751 @opindex mpacked-stack
15752 @opindex mno-packed-stack
15753 Use (do not use) the packed stack layout.  When @option{-mno-packed-stack} is
15754 specified, the compiler uses the all fields of the 96/160 byte register save
15755 area only for their default purpose; unused fields still take up stack space.
15756 When @option{-mpacked-stack} is specified, register save slots are densely
15757 packed at the top of the register save area; unused space is reused for other
15758 purposes, allowing for more efficient use of the available stack space.
15759 However, when @option{-mbackchain} is also in effect, the topmost word of
15760 the save area is always used to store the backchain, and the return address
15761 register is always saved two words below the backchain.
15762
15763 As long as the stack frame backchain is not used, code generated with
15764 @option{-mpacked-stack} is call-compatible with code generated with
15765 @option{-mno-packed-stack}.  Note that some non-FSF releases of GCC 2.95 for
15766 S/390 or zSeries generated code that uses the stack frame backchain at run
15767 time, not just for debugging purposes.  Such code is not call-compatible
15768 with code compiled with @option{-mpacked-stack}.  Also, note that the
15769 combination of @option{-mbackchain},
15770 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
15771 to build a linux kernel use @option{-msoft-float}.
15772
15773 The default is to not use the packed stack layout.
15774
15775 @item -msmall-exec
15776 @itemx -mno-small-exec
15777 @opindex msmall-exec
15778 @opindex mno-small-exec
15779 Generate (or do not generate) code using the @code{bras} instruction
15780 to do subroutine calls.
15781 This only works reliably if the total executable size does not
15782 exceed 64k.  The default is to use the @code{basr} instruction instead,
15783 which does not have this limitation.
15784
15785 @item -m64
15786 @itemx -m31
15787 @opindex m64
15788 @opindex m31
15789 When @option{-m31} is specified, generate code compliant to the
15790 GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
15791 code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
15792 particular to generate 64-bit instructions.  For the @samp{s390}
15793 targets, the default is @option{-m31}, while the @samp{s390x}
15794 targets default to @option{-m64}.
15795
15796 @item -mzarch
15797 @itemx -mesa
15798 @opindex mzarch
15799 @opindex mesa
15800 When @option{-mzarch} is specified, generate code using the
15801 instructions available on z/Architecture.
15802 When @option{-mesa} is specified, generate code using the
15803 instructions available on ESA/390.  Note that @option{-mesa} is
15804 not possible with @option{-m64}.
15805 When generating code compliant to the GNU/Linux for S/390 ABI,
15806 the default is @option{-mesa}.  When generating code compliant
15807 to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
15808
15809 @item -mmvcle
15810 @itemx -mno-mvcle
15811 @opindex mmvcle
15812 @opindex mno-mvcle
15813 Generate (or do not generate) code using the @code{mvcle} instruction
15814 to perform block moves.  When @option{-mno-mvcle} is specified,
15815 use a @code{mvc} loop instead.  This is the default unless optimizing for
15816 size.
15817
15818 @item -mdebug
15819 @itemx -mno-debug
15820 @opindex mdebug
15821 @opindex mno-debug
15822 Print (or do not print) additional debug information when compiling.
15823 The default is to not print debug information.
15824
15825 @item -march=@var{cpu-type}
15826 @opindex march
15827 Generate code that will run on @var{cpu-type}, which is the name of a system
15828 representing a certain processor type.  Possible values for
15829 @var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, @samp{z990},
15830 @samp{z9-109}, @samp{z9-ec} and @samp{z10}.
15831 When generating code using the instructions available on z/Architecture,
15832 the default is @option{-march=z900}.  Otherwise, the default is
15833 @option{-march=g5}.
15834
15835 @item -mtune=@var{cpu-type}
15836 @opindex mtune
15837 Tune to @var{cpu-type} everything applicable about the generated code,
15838 except for the ABI and the set of available instructions.
15839 The list of @var{cpu-type} values is the same as for @option{-march}.
15840 The default is the value used for @option{-march}.
15841
15842 @item -mtpf-trace
15843 @itemx -mno-tpf-trace
15844 @opindex mtpf-trace
15845 @opindex mno-tpf-trace
15846 Generate code that adds (does not add) in TPF OS specific branches to trace
15847 routines in the operating system.  This option is off by default, even
15848 when compiling for the TPF OS@.
15849
15850 @item -mfused-madd
15851 @itemx -mno-fused-madd
15852 @opindex mfused-madd
15853 @opindex mno-fused-madd
15854 Generate code that uses (does not use) the floating point multiply and
15855 accumulate instructions.  These instructions are generated by default if
15856 hardware floating point is used.
15857
15858 @item -mwarn-framesize=@var{framesize}
15859 @opindex mwarn-framesize
15860 Emit a warning if the current function exceeds the given frame size.  Because
15861 this is a compile time check it doesn't need to be a real problem when the program
15862 runs.  It is intended to identify functions which most probably cause
15863 a stack overflow.  It is useful to be used in an environment with limited stack
15864 size e.g.@: the linux kernel.
15865
15866 @item -mwarn-dynamicstack
15867 @opindex mwarn-dynamicstack
15868 Emit a warning if the function calls alloca or uses dynamically
15869 sized arrays.  This is generally a bad idea with a limited stack size.
15870
15871 @item -mstack-guard=@var{stack-guard}
15872 @itemx -mstack-size=@var{stack-size}
15873 @opindex mstack-guard
15874 @opindex mstack-size
15875 If these options are provided the s390 back end emits additional instructions in
15876 the function prologue which trigger a trap if the stack size is @var{stack-guard}
15877 bytes above the @var{stack-size} (remember that the stack on s390 grows downward).
15878 If the @var{stack-guard} option is omitted the smallest power of 2 larger than
15879 the frame size of the compiled function is chosen.
15880 These options are intended to be used to help debugging stack overflow problems.
15881 The additionally emitted code causes only little overhead and hence can also be
15882 used in production like systems without greater performance degradation.  The given
15883 values have to be exact powers of 2 and @var{stack-size} has to be greater than
15884 @var{stack-guard} without exceeding 64k.
15885 In order to be efficient the extra code makes the assumption that the stack starts
15886 at an address aligned to the value given by @var{stack-size}.
15887 The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.
15888 @end table
15889
15890 @node Score Options
15891 @subsection Score Options
15892 @cindex Score Options
15893
15894 These options are defined for Score implementations:
15895
15896 @table @gcctabopt
15897 @item -meb
15898 @opindex meb
15899 Compile code for big endian mode.  This is the default.
15900
15901 @item -mel
15902 @opindex mel
15903 Compile code for little endian mode.
15904
15905 @item -mnhwloop
15906 @opindex mnhwloop
15907 Disable generate bcnz instruction.
15908
15909 @item -muls
15910 @opindex muls
15911 Enable generate unaligned load and store instruction.
15912
15913 @item -mmac
15914 @opindex mmac
15915 Enable the use of multiply-accumulate instructions. Disabled by default.
15916
15917 @item -mscore5
15918 @opindex mscore5
15919 Specify the SCORE5 as the target architecture.
15920
15921 @item -mscore5u
15922 @opindex mscore5u
15923 Specify the SCORE5U of the target architecture.
15924
15925 @item -mscore7
15926 @opindex mscore7
15927 Specify the SCORE7 as the target architecture. This is the default.
15928
15929 @item -mscore7d
15930 @opindex mscore7d
15931 Specify the SCORE7D as the target architecture.
15932 @end table
15933
15934 @node SH Options
15935 @subsection SH Options
15936
15937 These @samp{-m} options are defined for the SH implementations:
15938
15939 @table @gcctabopt
15940 @item -m1
15941 @opindex m1
15942 Generate code for the SH1.
15943
15944 @item -m2
15945 @opindex m2
15946 Generate code for the SH2.
15947
15948 @item -m2e
15949 Generate code for the SH2e.
15950
15951 @item -m2a-nofpu
15952 @opindex m2a-nofpu
15953 Generate code for the SH2a without FPU, or for a SH2a-FPU in such a way
15954 that the floating-point unit is not used.
15955
15956 @item -m2a-single-only
15957 @opindex m2a-single-only
15958 Generate code for the SH2a-FPU, in such a way that no double-precision
15959 floating point operations are used.
15960
15961 @item -m2a-single
15962 @opindex m2a-single
15963 Generate code for the SH2a-FPU assuming the floating-point unit is in
15964 single-precision mode by default.
15965
15966 @item -m2a
15967 @opindex m2a
15968 Generate code for the SH2a-FPU assuming the floating-point unit is in
15969 double-precision mode by default.
15970
15971 @item -m3
15972 @opindex m3
15973 Generate code for the SH3.
15974
15975 @item -m3e
15976 @opindex m3e
15977 Generate code for the SH3e.
15978
15979 @item -m4-nofpu
15980 @opindex m4-nofpu
15981 Generate code for the SH4 without a floating-point unit.
15982
15983 @item -m4-single-only
15984 @opindex m4-single-only
15985 Generate code for the SH4 with a floating-point unit that only
15986 supports single-precision arithmetic.
15987
15988 @item -m4-single
15989 @opindex m4-single
15990 Generate code for the SH4 assuming the floating-point unit is in
15991 single-precision mode by default.
15992
15993 @item -m4
15994 @opindex m4
15995 Generate code for the SH4.
15996
15997 @item -m4a-nofpu
15998 @opindex m4a-nofpu
15999 Generate code for the SH4al-dsp, or for a SH4a in such a way that the
16000 floating-point unit is not used.
16001
16002 @item -m4a-single-only
16003 @opindex m4a-single-only
16004 Generate code for the SH4a, in such a way that no double-precision
16005 floating point operations are used.
16006
16007 @item -m4a-single
16008 @opindex m4a-single
16009 Generate code for the SH4a assuming the floating-point unit is in
16010 single-precision mode by default.
16011
16012 @item -m4a
16013 @opindex m4a
16014 Generate code for the SH4a.
16015
16016 @item -m4al
16017 @opindex m4al
16018 Same as @option{-m4a-nofpu}, except that it implicitly passes
16019 @option{-dsp} to the assembler.  GCC doesn't generate any DSP
16020 instructions at the moment.
16021
16022 @item -mb
16023 @opindex mb
16024 Compile code for the processor in big endian mode.
16025
16026 @item -ml
16027 @opindex ml
16028 Compile code for the processor in little endian mode.
16029
16030 @item -mdalign
16031 @opindex mdalign
16032 Align doubles at 64-bit boundaries.  Note that this changes the calling
16033 conventions, and thus some functions from the standard C library will
16034 not work unless you recompile it first with @option{-mdalign}.
16035
16036 @item -mrelax
16037 @opindex mrelax
16038 Shorten some address references at link time, when possible; uses the
16039 linker option @option{-relax}.
16040
16041 @item -mbigtable
16042 @opindex mbigtable
16043 Use 32-bit offsets in @code{switch} tables.  The default is to use
16044 16-bit offsets.
16045
16046 @item -mbitops
16047 @opindex mbitops
16048 Enable the use of bit manipulation instructions on SH2A.
16049
16050 @item -mfmovd
16051 @opindex mfmovd
16052 Enable the use of the instruction @code{fmovd}.  Check @option{-mdalign} for
16053 alignment constraints.
16054
16055 @item -mhitachi
16056 @opindex mhitachi
16057 Comply with the calling conventions defined by Renesas.
16058
16059 @item -mrenesas
16060 @opindex mhitachi
16061 Comply with the calling conventions defined by Renesas.
16062
16063 @item -mno-renesas
16064 @opindex mhitachi
16065 Comply with the calling conventions defined for GCC before the Renesas
16066 conventions were available.  This option is the default for all
16067 targets of the SH toolchain except for @samp{sh-symbianelf}.
16068
16069 @item -mnomacsave
16070 @opindex mnomacsave
16071 Mark the @code{MAC} register as call-clobbered, even if
16072 @option{-mhitachi} is given.
16073
16074 @item -mieee
16075 @opindex mieee
16076 Increase IEEE-compliance of floating-point code.
16077 At the moment, this is equivalent to @option{-fno-finite-math-only}.
16078 When generating 16 bit SH opcodes, getting IEEE-conforming results for
16079 comparisons of NANs / infinities incurs extra overhead in every
16080 floating point comparison, therefore the default is set to
16081 @option{-ffinite-math-only}.
16082
16083 @item -minline-ic_invalidate
16084 @opindex minline-ic_invalidate
16085 Inline code to invalidate instruction cache entries after setting up
16086 nested function trampolines.
16087 This option has no effect if -musermode is in effect and the selected
16088 code generation option (e.g. -m4) does not allow the use of the icbi
16089 instruction.
16090 If the selected code generation option does not allow the use of the icbi
16091 instruction, and -musermode is not in effect, the inlined code will
16092 manipulate the instruction cache address array directly with an associative
16093 write.  This not only requires privileged mode, but it will also
16094 fail if the cache line had been mapped via the TLB and has become unmapped.
16095
16096 @item -misize
16097 @opindex misize
16098 Dump instruction size and location in the assembly code.
16099
16100 @item -mpadstruct
16101 @opindex mpadstruct
16102 This option is deprecated.  It pads structures to multiple of 4 bytes,
16103 which is incompatible with the SH ABI@.
16104
16105 @item -mspace
16106 @opindex mspace
16107 Optimize for space instead of speed.  Implied by @option{-Os}.
16108
16109 @item -mprefergot
16110 @opindex mprefergot
16111 When generating position-independent code, emit function calls using
16112 the Global Offset Table instead of the Procedure Linkage Table.
16113
16114 @item -musermode
16115 @opindex musermode
16116 Don't generate privileged mode only code; implies -mno-inline-ic_invalidate
16117 if the inlined code would not work in user mode.
16118 This is the default when the target is @code{sh-*-linux*}.
16119
16120 @item -multcost=@var{number}
16121 @opindex multcost=@var{number}
16122 Set the cost to assume for a multiply insn.
16123
16124 @item -mdiv=@var{strategy}
16125 @opindex mdiv=@var{strategy}
16126 Set the division strategy to use for SHmedia code.  @var{strategy} must be
16127 one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call,
16128 inv:call2, inv:fp .
16129 "fp" performs the operation in floating point.  This has a very high latency,
16130 but needs only a few instructions, so it might be a good choice if
16131 your code has enough easily exploitable ILP to allow the compiler to
16132 schedule the floating point instructions together with other instructions.
16133 Division by zero causes a floating point exception.
16134 "inv" uses integer operations to calculate the inverse of the divisor,
16135 and then multiplies the dividend with the inverse.  This strategy allows
16136 cse and hoisting of the inverse calculation.  Division by zero calculates
16137 an unspecified result, but does not trap.
16138 "inv:minlat" is a variant of "inv" where if no cse / hoisting opportunities
16139 have been found, or if the entire operation has been hoisted to the same
16140 place, the last stages of the inverse calculation are intertwined with the
16141 final multiply to reduce the overall latency, at the expense of using a few
16142 more instructions, and thus offering fewer scheduling opportunities with
16143 other code.
16144 "call" calls a library function that usually implements the inv:minlat
16145 strategy.
16146 This gives high code density for m5-*media-nofpu compilations.
16147 "call2" uses a different entry point of the same library function, where it
16148 assumes that a pointer to a lookup table has already been set up, which
16149 exposes the pointer load to cse / code hoisting optimizations.
16150 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm for initial
16151 code generation, but if the code stays unoptimized, revert to the "call",
16152 "call2", or "fp" strategies, respectively.  Note that the
16153 potentially-trapping side effect of division by zero is carried by a
16154 separate instruction, so it is possible that all the integer instructions
16155 are hoisted out, but the marker for the side effect stays where it is.
16156 A recombination to fp operations or a call is not possible in that case.
16157 "inv20u" and "inv20l" are variants of the "inv:minlat" strategy.  In the case
16158 that the inverse calculation was nor separated from the multiply, they speed
16159 up division where the dividend fits into 20 bits (plus sign where applicable),
16160 by inserting a test to skip a number of operations in this case; this test
16161 slows down the case of larger dividends.  inv20u assumes the case of a such
16162 a small dividend to be unlikely, and inv20l assumes it to be likely.
16163
16164 @item -mdivsi3_libfunc=@var{name}
16165 @opindex mdivsi3_libfunc=@var{name}
16166 Set the name of the library function used for 32 bit signed division to
16167 @var{name}.  This only affect the name used in the call and inv:call
16168 division strategies, and the compiler will still expect the same
16169 sets of input/output/clobbered registers as if this option was not present.
16170
16171 @item -mfixed-range=@var{register-range}
16172 @opindex mfixed-range
16173 Generate code treating the given register range as fixed registers.
16174 A fixed register is one that the register allocator can not use.  This is
16175 useful when compiling kernel code.  A register range is specified as
16176 two registers separated by a dash.  Multiple register ranges can be
16177 specified separated by a comma.
16178
16179 @item -madjust-unroll
16180 @opindex madjust-unroll
16181 Throttle unrolling to avoid thrashing target registers.
16182 This option only has an effect if the gcc code base supports the
16183 TARGET_ADJUST_UNROLL_MAX target hook.
16184
16185 @item -mindexed-addressing
16186 @opindex mindexed-addressing
16187 Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
16188 This is only safe if the hardware and/or OS implement 32 bit wrap-around
16189 semantics for the indexed addressing mode.  The architecture allows the
16190 implementation of processors with 64 bit MMU, which the OS could use to
16191 get 32 bit addressing, but since no current hardware implementation supports
16192 this or any other way to make the indexed addressing mode safe to use in
16193 the 32 bit ABI, the default is -mno-indexed-addressing.
16194
16195 @item -mgettrcost=@var{number}
16196 @opindex mgettrcost=@var{number}
16197 Set the cost assumed for the gettr instruction to @var{number}.
16198 The default is 2 if @option{-mpt-fixed} is in effect, 100 otherwise.
16199
16200 @item -mpt-fixed
16201 @opindex mpt-fixed
16202 Assume pt* instructions won't trap.  This will generally generate better
16203 scheduled code, but is unsafe on current hardware.  The current architecture
16204 definition says that ptabs and ptrel trap when the target anded with 3 is 3.
16205 This has the unintentional effect of making it unsafe to schedule ptabs /
16206 ptrel before a branch, or hoist it out of a loop.  For example,
16207 __do_global_ctors, a part of libgcc that runs constructors at program
16208 startup, calls functions in a list which is delimited by @minus{}1.  With the
16209 -mpt-fixed option, the ptabs will be done before testing against @minus{}1.
16210 That means that all the constructors will be run a bit quicker, but when
16211 the loop comes to the end of the list, the program crashes because ptabs
16212 loads @minus{}1 into a target register.  Since this option is unsafe for any
16213 hardware implementing the current architecture specification, the default
16214 is -mno-pt-fixed.  Unless the user specifies a specific cost with
16215 @option{-mgettrcost}, -mno-pt-fixed also implies @option{-mgettrcost=100};
16216 this deters register allocation using target registers for storing
16217 ordinary integers.
16218
16219 @item -minvalid-symbols
16220 @opindex minvalid-symbols
16221 Assume symbols might be invalid.  Ordinary function symbols generated by
16222 the compiler will always be valid to load with movi/shori/ptabs or
16223 movi/shori/ptrel, but with assembler and/or linker tricks it is possible
16224 to generate symbols that will cause ptabs / ptrel to trap.
16225 This option is only meaningful when @option{-mno-pt-fixed} is in effect.
16226 It will then prevent cross-basic-block cse, hoisting and most scheduling
16227 of symbol loads.  The default is @option{-mno-invalid-symbols}.
16228 @end table
16229
16230 @node SPARC Options
16231 @subsection SPARC Options
16232 @cindex SPARC options
16233
16234 These @samp{-m} options are supported on the SPARC:
16235
16236 @table @gcctabopt
16237 @item -mno-app-regs
16238 @itemx -mapp-regs
16239 @opindex mno-app-regs
16240 @opindex mapp-regs
16241 Specify @option{-mapp-regs} to generate output using the global registers
16242 2 through 4, which the SPARC SVR4 ABI reserves for applications.  This
16243 is the default.
16244
16245 To be fully SVR4 ABI compliant at the cost of some performance loss,
16246 specify @option{-mno-app-regs}.  You should compile libraries and system
16247 software with this option.
16248
16249 @item -mfpu
16250 @itemx -mhard-float
16251 @opindex mfpu
16252 @opindex mhard-float
16253 Generate output containing floating point instructions.  This is the
16254 default.
16255
16256 @item -mno-fpu
16257 @itemx -msoft-float
16258 @opindex mno-fpu
16259 @opindex msoft-float
16260 Generate output containing library calls for floating point.
16261 @strong{Warning:} the requisite libraries are not available for all SPARC
16262 targets.  Normally the facilities of the machine's usual C compiler are
16263 used, but this cannot be done directly in cross-compilation.  You must make
16264 your own arrangements to provide suitable library functions for
16265 cross-compilation.  The embedded targets @samp{sparc-*-aout} and
16266 @samp{sparclite-*-*} do provide software floating point support.
16267
16268 @option{-msoft-float} changes the calling convention in the output file;
16269 therefore, it is only useful if you compile @emph{all} of a program with
16270 this option.  In particular, you need to compile @file{libgcc.a}, the
16271 library that comes with GCC, with @option{-msoft-float} in order for
16272 this to work.
16273
16274 @item -mhard-quad-float
16275 @opindex mhard-quad-float
16276 Generate output containing quad-word (long double) floating point
16277 instructions.
16278
16279 @item -msoft-quad-float
16280 @opindex msoft-quad-float
16281 Generate output containing library calls for quad-word (long double)
16282 floating point instructions.  The functions called are those specified
16283 in the SPARC ABI@.  This is the default.
16284
16285 As of this writing, there are no SPARC implementations that have hardware
16286 support for the quad-word floating point instructions.  They all invoke
16287 a trap handler for one of these instructions, and then the trap handler
16288 emulates the effect of the instruction.  Because of the trap handler overhead,
16289 this is much slower than calling the ABI library routines.  Thus the
16290 @option{-msoft-quad-float} option is the default.
16291
16292 @item -mno-unaligned-doubles
16293 @itemx -munaligned-doubles
16294 @opindex mno-unaligned-doubles
16295 @opindex munaligned-doubles
16296 Assume that doubles have 8 byte alignment.  This is the default.
16297
16298 With @option{-munaligned-doubles}, GCC assumes that doubles have 8 byte
16299 alignment only if they are contained in another type, or if they have an
16300 absolute address.  Otherwise, it assumes they have 4 byte alignment.
16301 Specifying this option avoids some rare compatibility problems with code
16302 generated by other compilers.  It is not the default because it results
16303 in a performance loss, especially for floating point code.
16304
16305 @item -mno-faster-structs
16306 @itemx -mfaster-structs
16307 @opindex mno-faster-structs
16308 @opindex mfaster-structs
16309 With @option{-mfaster-structs}, the compiler assumes that structures
16310 should have 8 byte alignment.  This enables the use of pairs of
16311 @code{ldd} and @code{std} instructions for copies in structure
16312 assignment, in place of twice as many @code{ld} and @code{st} pairs.
16313 However, the use of this changed alignment directly violates the SPARC
16314 ABI@.  Thus, it's intended only for use on targets where the developer
16315 acknowledges that their resulting code will not be directly in line with
16316 the rules of the ABI@.
16317
16318 @item -mimpure-text
16319 @opindex mimpure-text
16320 @option{-mimpure-text}, used in addition to @option{-shared}, tells
16321 the compiler to not pass @option{-z text} to the linker when linking a
16322 shared object.  Using this option, you can link position-dependent
16323 code into a shared object.
16324
16325 @option{-mimpure-text} suppresses the ``relocations remain against
16326 allocatable but non-writable sections'' linker error message.
16327 However, the necessary relocations will trigger copy-on-write, and the
16328 shared object is not actually shared across processes.  Instead of
16329 using @option{-mimpure-text}, you should compile all source code with
16330 @option{-fpic} or @option{-fPIC}.
16331
16332 This option is only available on SunOS and Solaris.
16333
16334 @item -mcpu=@var{cpu_type}
16335 @opindex mcpu
16336 Set the instruction set, register set, and instruction scheduling parameters
16337 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
16338 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
16339 @samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x},
16340 @samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc},
16341 @samp{ultrasparc3}, @samp{niagara} and @samp{niagara2}.
16342
16343 Default instruction scheduling parameters are used for values that select
16344 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
16345 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
16346
16347 Here is a list of each supported architecture and their supported
16348 implementations.
16349
16350 @smallexample
16351     v7:             cypress
16352     v8:             supersparc, hypersparc
16353     sparclite:      f930, f934, sparclite86x
16354     sparclet:       tsc701
16355     v9:             ultrasparc, ultrasparc3, niagara, niagara2
16356 @end smallexample
16357
16358 By default (unless configured otherwise), GCC generates code for the V7
16359 variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
16360 additionally optimizes it for the Cypress CY7C602 chip, as used in the
16361 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
16362 SPARCStation 1, 2, IPX etc.
16363
16364 With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
16365 architecture.  The only difference from V7 code is that the compiler emits
16366 the integer multiply and integer divide instructions which exist in SPARC-V8
16367 but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
16368 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
16369 2000 series.
16370
16371 With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
16372 the SPARC architecture.  This adds the integer multiply, integer divide step
16373 and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
16374 With @option{-mcpu=f930}, the compiler additionally optimizes it for the
16375 Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@.  With
16376 @option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
16377 MB86934 chip, which is the more recent SPARClite with FPU@.
16378
16379 With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
16380 the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
16381 integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
16382 but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
16383 optimizes it for the TEMIC SPARClet chip.
16384
16385 With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
16386 architecture.  This adds 64-bit integer and floating-point move instructions,
16387 3 additional floating-point condition code registers and conditional move
16388 instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
16389 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
16390 @option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
16391 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
16392 @option{-mcpu=niagara}, the compiler additionally optimizes it for
16393 Sun UltraSPARC T1 chips.  With @option{-mcpu=niagara2}, the compiler
16394 additionally optimizes it for Sun UltraSPARC T2 chips.
16395
16396 @item -mtune=@var{cpu_type}
16397 @opindex mtune
16398 Set the instruction scheduling parameters for machine type
16399 @var{cpu_type}, but do not set the instruction set or register set that the
16400 option @option{-mcpu=@var{cpu_type}} would.
16401
16402 The same values for @option{-mcpu=@var{cpu_type}} can be used for
16403 @option{-mtune=@var{cpu_type}}, but the only useful values are those
16404 that select a particular cpu implementation.  Those are @samp{cypress},
16405 @samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
16406 @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
16407 @samp{ultrasparc3}, @samp{niagara}, and @samp{niagara2}.
16408
16409 @item -mv8plus
16410 @itemx -mno-v8plus
16411 @opindex mv8plus
16412 @opindex mno-v8plus
16413 With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@.  The
16414 difference from the V8 ABI is that the global and out registers are
16415 considered 64-bit wide.  This is enabled by default on Solaris in 32-bit
16416 mode for all SPARC-V9 processors.
16417
16418 @item -mvis
16419 @itemx -mno-vis
16420 @opindex mvis
16421 @opindex mno-vis
16422 With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
16423 Visual Instruction Set extensions.  The default is @option{-mno-vis}.
16424 @end table
16425
16426 These @samp{-m} options are supported in addition to the above
16427 on SPARC-V9 processors in 64-bit environments:
16428
16429 @table @gcctabopt
16430 @item -mlittle-endian
16431 @opindex mlittle-endian
16432 Generate code for a processor running in little-endian mode.  It is only
16433 available for a few configurations and most notably not on Solaris and Linux.
16434
16435 @item -m32
16436 @itemx -m64
16437 @opindex m32
16438 @opindex m64
16439 Generate code for a 32-bit or 64-bit environment.
16440 The 32-bit environment sets int, long and pointer to 32 bits.
16441 The 64-bit environment sets int to 32 bits and long and pointer
16442 to 64 bits.
16443
16444 @item -mcmodel=medlow
16445 @opindex mcmodel=medlow
16446 Generate code for the Medium/Low code model: 64-bit addresses, programs
16447 must be linked in the low 32 bits of memory.  Programs can be statically
16448 or dynamically linked.
16449
16450 @item -mcmodel=medmid
16451 @opindex mcmodel=medmid
16452 Generate code for the Medium/Middle code model: 64-bit addresses, programs
16453 must be linked in the low 44 bits of memory, the text and data segments must
16454 be less than 2GB in size and the data segment must be located within 2GB of
16455 the text segment.
16456
16457 @item -mcmodel=medany
16458 @opindex mcmodel=medany
16459 Generate code for the Medium/Anywhere code model: 64-bit addresses, programs
16460 may be linked anywhere in memory, the text and data segments must be less
16461 than 2GB in size and the data segment must be located within 2GB of the
16462 text segment.
16463
16464 @item -mcmodel=embmedany
16465 @opindex mcmodel=embmedany
16466 Generate code for the Medium/Anywhere code model for embedded systems:
16467 64-bit addresses, the text and data segments must be less than 2GB in
16468 size, both starting anywhere in memory (determined at link time).  The
16469 global register %g4 points to the base of the data segment.  Programs
16470 are statically linked and PIC is not supported.
16471
16472 @item -mstack-bias
16473 @itemx -mno-stack-bias
16474 @opindex mstack-bias
16475 @opindex mno-stack-bias
16476 With @option{-mstack-bias}, GCC assumes that the stack pointer, and
16477 frame pointer if present, are offset by @minus{}2047 which must be added back
16478 when making stack frame references.  This is the default in 64-bit mode.
16479 Otherwise, assume no such offset is present.
16480 @end table
16481
16482 These switches are supported in addition to the above on Solaris:
16483
16484 @table @gcctabopt
16485 @item -threads
16486 @opindex threads
16487 Add support for multithreading using the Solaris threads library.  This
16488 option sets flags for both the preprocessor and linker.  This option does
16489 not affect the thread safety of object code produced by the compiler or
16490 that of libraries supplied with it.
16491
16492 @item -pthreads
16493 @opindex pthreads
16494 Add support for multithreading using the POSIX threads library.  This
16495 option sets flags for both the preprocessor and linker.  This option does
16496 not affect the thread safety of object code produced  by the compiler or
16497 that of libraries supplied with it.
16498
16499 @item -pthread
16500 @opindex pthread
16501 This is a synonym for @option{-pthreads}.
16502 @end table
16503
16504 @node SPU Options
16505 @subsection SPU Options
16506 @cindex SPU options
16507
16508 These @samp{-m} options are supported on the SPU:
16509
16510 @table @gcctabopt
16511 @item -mwarn-reloc
16512 @itemx -merror-reloc
16513 @opindex mwarn-reloc
16514 @opindex merror-reloc
16515
16516 The loader for SPU does not handle dynamic relocations.  By default, GCC
16517 will give an error when it generates code that requires a dynamic
16518 relocation.  @option{-mno-error-reloc} disables the error,
16519 @option{-mwarn-reloc} will generate a warning instead.
16520
16521 @item -msafe-dma
16522 @itemx -munsafe-dma
16523 @opindex msafe-dma
16524 @opindex munsafe-dma
16525
16526 Instructions which initiate or test completion of DMA must not be
16527 reordered with respect to loads and stores of the memory which is being
16528 accessed.  Users typically address this problem using the volatile
16529 keyword, but that can lead to inefficient code in places where the
16530 memory is known to not change.  Rather than mark the memory as volatile
16531 we treat the DMA instructions as potentially effecting all memory.  With
16532 @option{-munsafe-dma} users must use the volatile keyword to protect
16533 memory accesses.
16534
16535 @item -mbranch-hints
16536 @opindex mbranch-hints
16537
16538 By default, GCC will generate a branch hint instruction to avoid
16539 pipeline stalls for always taken or probably taken branches.  A hint
16540 will not be generated closer than 8 instructions away from its branch.
16541 There is little reason to disable them, except for debugging purposes,
16542 or to make an object a little bit smaller.
16543
16544 @item -msmall-mem
16545 @itemx -mlarge-mem
16546 @opindex msmall-mem
16547 @opindex mlarge-mem
16548
16549 By default, GCC generates code assuming that addresses are never larger
16550 than 18 bits.  With @option{-mlarge-mem} code is generated that assumes
16551 a full 32 bit address.
16552
16553 @item -mstdmain
16554 @opindex mstdmain
16555
16556 By default, GCC links against startup code that assumes the SPU-style
16557 main function interface (which has an unconventional parameter list).
16558 With @option{-mstdmain}, GCC will link your program against startup
16559 code that assumes a C99-style interface to @code{main}, including a
16560 local copy of @code{argv} strings.
16561
16562 @item -mfixed-range=@var{register-range}
16563 @opindex mfixed-range
16564 Generate code treating the given register range as fixed registers.
16565 A fixed register is one that the register allocator can not use.  This is
16566 useful when compiling kernel code.  A register range is specified as
16567 two registers separated by a dash.  Multiple register ranges can be
16568 specified separated by a comma.
16569
16570 @item -mea32
16571 @itemx -mea64
16572 @opindex mea32
16573 @opindex mea64
16574 Compile code assuming that pointers to the PPU address space accessed
16575 via the @code{__ea} named address space qualifier are either 32 or 64
16576 bits wide.  The default is 32 bits.  As this is an ABI changing option,
16577 all object code in an executable must be compiled with the same setting.
16578
16579 @item -maddress-space-conversion
16580 @itemx -mno-address-space-conversion
16581 @opindex maddress-space-conversion
16582 @opindex mno-address-space-conversion
16583 Allow/disallow treating the @code{__ea} address space as superset
16584 of the generic address space.  This enables explicit type casts
16585 between @code{__ea} and generic pointer as well as implicit
16586 conversions of generic pointers to @code{__ea} pointers.  The
16587 default is to allow address space pointer conversions.
16588
16589 @item -mcache-size=@var{cache-size}
16590 @opindex mcache-size
16591 This option controls the version of libgcc that the compiler links to an
16592 executable and selects a software-managed cache for accessing variables
16593 in the @code{__ea} address space with a particular cache size.  Possible
16594 options for @var{cache-size} are @samp{8}, @samp{16}, @samp{32}, @samp{64}
16595 and @samp{128}.  The default cache size is 64KB.
16596
16597 @item -matomic-updates
16598 @itemx -mno-atomic-updates
16599 @opindex matomic-updates
16600 @opindex mno-atomic-updates
16601 This option controls the version of libgcc that the compiler links to an
16602 executable and selects whether atomic updates to the software-managed
16603 cache of PPU-side variables are used.  If you use atomic updates, changes
16604 to a PPU variable from SPU code using the @code{__ea} named address space
16605 qualifier will not interfere with changes to other PPU variables residing
16606 in the same cache line from PPU code.  If you do not use atomic updates,
16607 such interference may occur; however, writing back cache lines will be
16608 more efficient.  The default behavior is to use atomic updates.
16609
16610 @item -mdual-nops
16611 @itemx -mdual-nops=@var{n}
16612 @opindex mdual-nops
16613 By default, GCC will insert nops to increase dual issue when it expects
16614 it to increase performance.  @var{n} can be a value from 0 to 10.  A
16615 smaller @var{n} will insert fewer nops.  10 is the default, 0 is the
16616 same as @option{-mno-dual-nops}.  Disabled with @option{-Os}.
16617
16618 @item -mhint-max-nops=@var{n}
16619 @opindex mhint-max-nops
16620 Maximum number of nops to insert for a branch hint.  A branch hint must
16621 be at least 8 instructions away from the branch it is effecting.  GCC
16622 will insert up to @var{n} nops to enforce this, otherwise it will not
16623 generate the branch hint.
16624
16625 @item -mhint-max-distance=@var{n}
16626 @opindex mhint-max-distance
16627 The encoding of the branch hint instruction limits the hint to be within
16628 256 instructions of the branch it is effecting.  By default, GCC makes
16629 sure it is within 125.
16630
16631 @item -msafe-hints
16632 @opindex msafe-hints
16633 Work around a hardware bug which causes the SPU to stall indefinitely.
16634 By default, GCC will insert the @code{hbrp} instruction to make sure
16635 this stall won't happen.
16636
16637 @end table
16638
16639 @node System V Options
16640 @subsection Options for System V
16641
16642 These additional options are available on System V Release 4 for
16643 compatibility with other compilers on those systems:
16644
16645 @table @gcctabopt
16646 @item -G
16647 @opindex G
16648 Create a shared object.
16649 It is recommended that @option{-symbolic} or @option{-shared} be used instead.
16650
16651 @item -Qy
16652 @opindex Qy
16653 Identify the versions of each tool used by the compiler, in a
16654 @code{.ident} assembler directive in the output.
16655
16656 @item -Qn
16657 @opindex Qn
16658 Refrain from adding @code{.ident} directives to the output file (this is
16659 the default).
16660
16661 @item -YP,@var{dirs}
16662 @opindex YP
16663 Search the directories @var{dirs}, and no others, for libraries
16664 specified with @option{-l}.
16665
16666 @item -Ym,@var{dir}
16667 @opindex Ym
16668 Look in the directory @var{dir} to find the M4 preprocessor.
16669 The assembler uses this option.
16670 @c This is supposed to go with a -Yd for predefined M4 macro files, but
16671 @c the generic assembler that comes with Solaris takes just -Ym.
16672 @end table
16673
16674 @node V850 Options
16675 @subsection V850 Options
16676 @cindex V850 Options
16677
16678 These @samp{-m} options are defined for V850 implementations:
16679
16680 @table @gcctabopt
16681 @item -mlong-calls
16682 @itemx -mno-long-calls
16683 @opindex mlong-calls
16684 @opindex mno-long-calls
16685 Treat all calls as being far away (near).  If calls are assumed to be
16686 far away, the compiler will always load the functions address up into a
16687 register, and call indirect through the pointer.
16688
16689 @item -mno-ep
16690 @itemx -mep
16691 @opindex mno-ep
16692 @opindex mep
16693 Do not optimize (do optimize) basic blocks that use the same index
16694 pointer 4 or more times to copy pointer into the @code{ep} register, and
16695 use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
16696 option is on by default if you optimize.
16697
16698 @item -mno-prolog-function
16699 @itemx -mprolog-function
16700 @opindex mno-prolog-function
16701 @opindex mprolog-function
16702 Do not use (do use) external functions to save and restore registers
16703 at the prologue and epilogue of a function.  The external functions
16704 are slower, but use less code space if more than one function saves
16705 the same number of registers.  The @option{-mprolog-function} option
16706 is on by default if you optimize.
16707
16708 @item -mspace
16709 @opindex mspace
16710 Try to make the code as small as possible.  At present, this just turns
16711 on the @option{-mep} and @option{-mprolog-function} options.
16712
16713 @item -mtda=@var{n}
16714 @opindex mtda
16715 Put static or global variables whose size is @var{n} bytes or less into
16716 the tiny data area that register @code{ep} points to.  The tiny data
16717 area can hold up to 256 bytes in total (128 bytes for byte references).
16718
16719 @item -msda=@var{n}
16720 @opindex msda
16721 Put static or global variables whose size is @var{n} bytes or less into
16722 the small data area that register @code{gp} points to.  The small data
16723 area can hold up to 64 kilobytes.
16724
16725 @item -mzda=@var{n}
16726 @opindex mzda
16727 Put static or global variables whose size is @var{n} bytes or less into
16728 the first 32 kilobytes of memory.
16729
16730 @item -mv850
16731 @opindex mv850
16732 Specify that the target processor is the V850.
16733
16734 @item -mbig-switch
16735 @opindex mbig-switch
16736 Generate code suitable for big switch tables.  Use this option only if
16737 the assembler/linker complain about out of range branches within a switch
16738 table.
16739
16740 @item -mapp-regs
16741 @opindex mapp-regs
16742 This option will cause r2 and r5 to be used in the code generated by
16743 the compiler.  This setting is the default.
16744
16745 @item -mno-app-regs
16746 @opindex mno-app-regs
16747 This option will cause r2 and r5 to be treated as fixed registers.
16748
16749 @item -mv850e1
16750 @opindex mv850e1
16751 Specify that the target processor is the V850E1.  The preprocessor
16752 constants @samp{__v850e1__} and @samp{__v850e__} will be defined if
16753 this option is used.
16754
16755 @item -mv850e
16756 @opindex mv850e
16757 Specify that the target processor is the V850E@.  The preprocessor
16758 constant @samp{__v850e__} will be defined if this option is used.
16759
16760 If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
16761 are defined then a default target processor will be chosen and the
16762 relevant @samp{__v850*__} preprocessor constant will be defined.
16763
16764 The preprocessor constants @samp{__v850} and @samp{__v851__} are always
16765 defined, regardless of which processor variant is the target.
16766
16767 @item -mdisable-callt
16768 @opindex mdisable-callt
16769 This option will suppress generation of the CALLT instruction for the
16770 v850e and v850e1 flavors of the v850 architecture.  The default is
16771 @option{-mno-disable-callt} which allows the CALLT instruction to be used.
16772
16773 @end table
16774
16775 @node VAX Options
16776 @subsection VAX Options
16777 @cindex VAX options
16778
16779 These @samp{-m} options are defined for the VAX:
16780
16781 @table @gcctabopt
16782 @item -munix
16783 @opindex munix
16784 Do not output certain jump instructions (@code{aobleq} and so on)
16785 that the Unix assembler for the VAX cannot handle across long
16786 ranges.
16787
16788 @item -mgnu
16789 @opindex mgnu
16790 Do output those jump instructions, on the assumption that you
16791 will assemble with the GNU assembler.
16792
16793 @item -mg
16794 @opindex mg
16795 Output code for g-format floating point numbers instead of d-format.
16796 @end table
16797
16798 @node VxWorks Options
16799 @subsection VxWorks Options
16800 @cindex VxWorks Options
16801
16802 The options in this section are defined for all VxWorks targets.
16803 Options specific to the target hardware are listed with the other
16804 options for that target.
16805
16806 @table @gcctabopt
16807 @item -mrtp
16808 @opindex mrtp
16809 GCC can generate code for both VxWorks kernels and real time processes
16810 (RTPs).  This option switches from the former to the latter.  It also
16811 defines the preprocessor macro @code{__RTP__}.
16812
16813 @item -non-static
16814 @opindex non-static
16815 Link an RTP executable against shared libraries rather than static
16816 libraries.  The options @option{-static} and @option{-shared} can
16817 also be used for RTPs (@pxref{Link Options}); @option{-static}
16818 is the default.
16819
16820 @item -Bstatic
16821 @itemx -Bdynamic
16822 @opindex Bstatic
16823 @opindex Bdynamic
16824 These options are passed down to the linker.  They are defined for
16825 compatibility with Diab.
16826
16827 @item -Xbind-lazy
16828 @opindex Xbind-lazy
16829 Enable lazy binding of function calls.  This option is equivalent to
16830 @option{-Wl,-z,now} and is defined for compatibility with Diab.
16831
16832 @item -Xbind-now
16833 @opindex Xbind-now
16834 Disable lazy binding of function calls.  This option is the default and
16835 is defined for compatibility with Diab.
16836 @end table
16837
16838 @node x86-64 Options
16839 @subsection x86-64 Options
16840 @cindex x86-64 options
16841
16842 These are listed under @xref{i386 and x86-64 Options}.
16843
16844 @node i386 and x86-64 Windows Options
16845 @subsection i386 and x86-64 Windows Options
16846 @cindex i386 and x86-64 Windows Options
16847
16848 These additional options are available for Windows targets:
16849
16850 @table @gcctabopt
16851 @item -mconsole
16852 @opindex mconsole
16853 This option is available for Cygwin and MinGW targets.  It
16854 specifies that a console application is to be generated, by
16855 instructing the linker to set the PE header subsystem type
16856 required for console applications.
16857 This is the default behavior for Cygwin and MinGW targets.
16858
16859 @item -mcygwin
16860 @opindex mcygwin
16861 This option is available for Cygwin targets.  It specifies that
16862 the Cygwin internal interface is to be used for predefined
16863 preprocessor macros, C runtime libraries and related linker
16864 paths and options.  For Cygwin targets this is the default behavior.
16865 This option is deprecated and will be removed in a future release.
16866
16867 @item -mno-cygwin
16868 @opindex mno-cygwin
16869 This option is available for Cygwin targets.  It specifies that
16870 the MinGW internal interface is to be used instead of Cygwin's, by
16871 setting MinGW-related predefined macros and linker paths and default
16872 library options.
16873 This option is deprecated and will be removed in a future release.
16874
16875 @item -mdll
16876 @opindex mdll
16877 This option is available for Cygwin and MinGW targets.  It
16878 specifies that a DLL - a dynamic link library - is to be
16879 generated, enabling the selection of the required runtime
16880 startup object and entry point.
16881
16882 @item -mnop-fun-dllimport
16883 @opindex mnop-fun-dllimport
16884 This option is available for Cygwin and MinGW targets.  It
16885 specifies that the dllimport attribute should be ignored.
16886
16887 @item -mthread
16888 @opindex mthread
16889 This option is available for MinGW targets. It specifies
16890 that MinGW-specific thread support is to be used.
16891
16892 @item -municode
16893 @opindex municode
16894 This option is available for mingw-w64 targets.  It specifies
16895 that the UNICODE macro is getting pre-defined and that the
16896 unicode capable runtime startup code is chosen.
16897
16898 @item -mwin32
16899 @opindex mwin32
16900 This option is available for Cygwin and MinGW targets.  It
16901 specifies that the typical Windows pre-defined macros are to
16902 be set in the pre-processor, but does not influence the choice
16903 of runtime library/startup code.
16904
16905 @item -mwindows
16906 @opindex mwindows
16907 This option is available for Cygwin and MinGW targets.  It
16908 specifies that a GUI application is to be generated by
16909 instructing the linker to set the PE header subsystem type
16910 appropriately.
16911
16912 @item -fno-set-stack-executable
16913 @opindex fno-set-stack-executable
16914 This option is available for MinGW targets. It specifies that
16915 the executable flag for stack used by nested functions isn't
16916 set. This is necessary for binaries running in kernel mode of
16917 Windows, as there the user32 API, which is used to set executable
16918 privileges, isn't available.
16919
16920 @item -mpe-aligned-commons
16921 @opindex mpe-aligned-commons
16922 This option is available for Cygwin and MinGW targets.  It
16923 specifies that the GNU extension to the PE file format that
16924 permits the correct alignment of COMMON variables should be
16925 used when generating code.  It will be enabled by default if
16926 GCC detects that the target assembler found during configuration
16927 supports the feature.
16928 @end table
16929
16930 See also under @ref{i386 and x86-64 Options} for standard options.
16931
16932 @node Xstormy16 Options
16933 @subsection Xstormy16 Options
16934 @cindex Xstormy16 Options
16935
16936 These options are defined for Xstormy16:
16937
16938 @table @gcctabopt
16939 @item -msim
16940 @opindex msim
16941 Choose startup files and linker script suitable for the simulator.
16942 @end table
16943
16944 @node Xtensa Options
16945 @subsection Xtensa Options
16946 @cindex Xtensa Options
16947
16948 These options are supported for Xtensa targets:
16949
16950 @table @gcctabopt
16951 @item -mconst16
16952 @itemx -mno-const16
16953 @opindex mconst16
16954 @opindex mno-const16
16955 Enable or disable use of @code{CONST16} instructions for loading
16956 constant values.  The @code{CONST16} instruction is currently not a
16957 standard option from Tensilica.  When enabled, @code{CONST16}
16958 instructions are always used in place of the standard @code{L32R}
16959 instructions.  The use of @code{CONST16} is enabled by default only if
16960 the @code{L32R} instruction is not available.
16961
16962 @item -mfused-madd
16963 @itemx -mno-fused-madd
16964 @opindex mfused-madd
16965 @opindex mno-fused-madd
16966 Enable or disable use of fused multiply/add and multiply/subtract
16967 instructions in the floating-point option.  This has no effect if the
16968 floating-point option is not also enabled.  Disabling fused multiply/add
16969 and multiply/subtract instructions forces the compiler to use separate
16970 instructions for the multiply and add/subtract operations.  This may be
16971 desirable in some cases where strict IEEE 754-compliant results are
16972 required: the fused multiply add/subtract instructions do not round the
16973 intermediate result, thereby producing results with @emph{more} bits of
16974 precision than specified by the IEEE standard.  Disabling fused multiply
16975 add/subtract instructions also ensures that the program output is not
16976 sensitive to the compiler's ability to combine multiply and add/subtract
16977 operations.
16978
16979 @item -mserialize-volatile
16980 @itemx -mno-serialize-volatile
16981 @opindex mserialize-volatile
16982 @opindex mno-serialize-volatile
16983 When this option is enabled, GCC inserts @code{MEMW} instructions before
16984 @code{volatile} memory references to guarantee sequential consistency.
16985 The default is @option{-mserialize-volatile}.  Use
16986 @option{-mno-serialize-volatile} to omit the @code{MEMW} instructions.
16987
16988 @item -mtext-section-literals
16989 @itemx -mno-text-section-literals
16990 @opindex mtext-section-literals
16991 @opindex mno-text-section-literals
16992 Control the treatment of literal pools.  The default is
16993 @option{-mno-text-section-literals}, which places literals in a separate
16994 section in the output file.  This allows the literal pool to be placed
16995 in a data RAM/ROM, and it also allows the linker to combine literal
16996 pools from separate object files to remove redundant literals and
16997 improve code size.  With @option{-mtext-section-literals}, the literals
16998 are interspersed in the text section in order to keep them as close as
16999 possible to their references.  This may be necessary for large assembly
17000 files.
17001
17002 @item -mtarget-align
17003 @itemx -mno-target-align
17004 @opindex mtarget-align
17005 @opindex mno-target-align
17006 When this option is enabled, GCC instructs the assembler to
17007 automatically align instructions to reduce branch penalties at the
17008 expense of some code density.  The assembler attempts to widen density
17009 instructions to align branch targets and the instructions following call
17010 instructions.  If there are not enough preceding safe density
17011 instructions to align a target, no widening will be performed.  The
17012 default is @option{-mtarget-align}.  These options do not affect the
17013 treatment of auto-aligned instructions like @code{LOOP}, which the
17014 assembler will always align, either by widening density instructions or
17015 by inserting no-op instructions.
17016
17017 @item -mlongcalls
17018 @itemx -mno-longcalls
17019 @opindex mlongcalls
17020 @opindex mno-longcalls
17021 When this option is enabled, GCC instructs the assembler to translate
17022 direct calls to indirect calls unless it can determine that the target
17023 of a direct call is in the range allowed by the call instruction.  This
17024 translation typically occurs for calls to functions in other source
17025 files.  Specifically, the assembler translates a direct @code{CALL}
17026 instruction into an @code{L32R} followed by a @code{CALLX} instruction.
17027 The default is @option{-mno-longcalls}.  This option should be used in
17028 programs where the call target can potentially be out of range.  This
17029 option is implemented in the assembler, not the compiler, so the
17030 assembly code generated by GCC will still show direct call
17031 instructions---look at the disassembled object code to see the actual
17032 instructions.  Note that the assembler will use an indirect call for
17033 every cross-file call, not just those that really will be out of range.
17034 @end table
17035
17036 @node zSeries Options
17037 @subsection zSeries Options
17038 @cindex zSeries options
17039
17040 These are listed under @xref{S/390 and zSeries Options}.
17041
17042 @node Code Gen Options
17043 @section Options for Code Generation Conventions
17044 @cindex code generation conventions
17045 @cindex options, code generation
17046 @cindex run-time options
17047
17048 These machine-independent options control the interface conventions
17049 used in code generation.
17050
17051 Most of them have both positive and negative forms; the negative form
17052 of @option{-ffoo} would be @option{-fno-foo}.  In the table below, only
17053 one of the forms is listed---the one which is not the default.  You
17054 can figure out the other form by either removing @samp{no-} or adding
17055 it.
17056
17057 @table @gcctabopt
17058 @item -fbounds-check
17059 @opindex fbounds-check
17060 For front-ends that support it, generate additional code to check that
17061 indices used to access arrays are within the declared range.  This is
17062 currently only supported by the Java and Fortran front-ends, where
17063 this option defaults to true and false respectively.
17064
17065 @item -ftrapv
17066 @opindex ftrapv
17067 This option generates traps for signed overflow on addition, subtraction,
17068 multiplication operations.
17069
17070 @item -fwrapv
17071 @opindex fwrapv
17072 This option instructs the compiler to assume that signed arithmetic
17073 overflow of addition, subtraction and multiplication wraps around
17074 using twos-complement representation.  This flag enables some optimizations
17075 and disables others.  This option is enabled by default for the Java
17076 front-end, as required by the Java language specification.
17077
17078 @item -fexceptions
17079 @opindex fexceptions
17080 Enable exception handling.  Generates extra code needed to propagate
17081 exceptions.  For some targets, this implies GCC will generate frame
17082 unwind information for all functions, which can produce significant data
17083 size overhead, although it does not affect execution.  If you do not
17084 specify this option, GCC will enable it by default for languages like
17085 C++ which normally require exception handling, and disable it for
17086 languages like C that do not normally require it.  However, you may need
17087 to enable this option when compiling C code that needs to interoperate
17088 properly with exception handlers written in C++.  You may also wish to
17089 disable this option if you are compiling older C++ programs that don't
17090 use exception handling.
17091
17092 @item -fnon-call-exceptions
17093 @opindex fnon-call-exceptions
17094 Generate code that allows trapping instructions to throw exceptions.
17095 Note that this requires platform-specific runtime support that does
17096 not exist everywhere.  Moreover, it only allows @emph{trapping}
17097 instructions to throw exceptions, i.e.@: memory references or floating
17098 point instructions.  It does not allow exceptions to be thrown from
17099 arbitrary signal handlers such as @code{SIGALRM}.
17100
17101 @item -funwind-tables
17102 @opindex funwind-tables
17103 Similar to @option{-fexceptions}, except that it will just generate any needed
17104 static data, but will not affect the generated code in any other way.
17105 You will normally not enable this option; instead, a language processor
17106 that needs this handling would enable it on your behalf.
17107
17108 @item -fasynchronous-unwind-tables
17109 @opindex fasynchronous-unwind-tables
17110 Generate unwind table in dwarf2 format, if supported by target machine.  The
17111 table is exact at each instruction boundary, so it can be used for stack
17112 unwinding from asynchronous events (such as debugger or garbage collector).
17113
17114 @item -fpcc-struct-return
17115 @opindex fpcc-struct-return
17116 Return ``short'' @code{struct} and @code{union} values in memory like
17117 longer ones, rather than in registers.  This convention is less
17118 efficient, but it has the advantage of allowing intercallability between
17119 GCC-compiled files and files compiled with other compilers, particularly
17120 the Portable C Compiler (pcc).
17121
17122 The precise convention for returning structures in memory depends
17123 on the target configuration macros.
17124
17125 Short structures and unions are those whose size and alignment match
17126 that of some integer type.
17127
17128 @strong{Warning:} code compiled with the @option{-fpcc-struct-return}
17129 switch is not binary compatible with code compiled with the
17130 @option{-freg-struct-return} switch.
17131 Use it to conform to a non-default application binary interface.
17132
17133 @item -freg-struct-return
17134 @opindex freg-struct-return
17135 Return @code{struct} and @code{union} values in registers when possible.
17136 This is more efficient for small structures than
17137 @option{-fpcc-struct-return}.
17138
17139 If you specify neither @option{-fpcc-struct-return} nor
17140 @option{-freg-struct-return}, GCC defaults to whichever convention is
17141 standard for the target.  If there is no standard convention, GCC
17142 defaults to @option{-fpcc-struct-return}, except on targets where GCC is
17143 the principal compiler.  In those cases, we can choose the standard, and
17144 we chose the more efficient register return alternative.
17145
17146 @strong{Warning:} code compiled with the @option{-freg-struct-return}
17147 switch is not binary compatible with code compiled with the
17148 @option{-fpcc-struct-return} switch.
17149 Use it to conform to a non-default application binary interface.
17150
17151 @item -fshort-enums
17152 @opindex fshort-enums
17153 Allocate to an @code{enum} type only as many bytes as it needs for the
17154 declared range of possible values.  Specifically, the @code{enum} type
17155 will be equivalent to the smallest integer type which has enough room.
17156
17157 @strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
17158 code that is not binary compatible with code generated without that switch.
17159 Use it to conform to a non-default application binary interface.
17160
17161 @item -fshort-double
17162 @opindex fshort-double
17163 Use the same size for @code{double} as for @code{float}.
17164
17165 @strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
17166 code that is not binary compatible with code generated without that switch.
17167 Use it to conform to a non-default application binary interface.
17168
17169 @item -fshort-wchar
17170 @opindex fshort-wchar
17171 Override the underlying type for @samp{wchar_t} to be @samp{short
17172 unsigned int} instead of the default for the target.  This option is
17173 useful for building programs to run under WINE@.
17174
17175 @strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
17176 code that is not binary compatible with code generated without that switch.
17177 Use it to conform to a non-default application binary interface.
17178
17179 @item -fno-common
17180 @opindex fno-common
17181 In C code, controls the placement of uninitialized global variables.
17182 Unix C compilers have traditionally permitted multiple definitions of
17183 such variables in different compilation units by placing the variables
17184 in a common block.
17185 This is the behavior specified by @option{-fcommon}, and is the default
17186 for GCC on most targets.
17187 On the other hand, this behavior is not required by ISO C, and on some
17188 targets may carry a speed or code size penalty on variable references.
17189 The @option{-fno-common} option specifies that the compiler should place
17190 uninitialized global variables in the data section of the object file,
17191 rather than generating them as common blocks.
17192 This has the effect that if the same variable is declared
17193 (without @code{extern}) in two different compilations,
17194 you will get a multiple-definition error when you link them.
17195 In this case, you must compile with @option{-fcommon} instead.
17196 Compiling with @option{-fno-common} is useful on targets for which
17197 it provides better performance, or if you wish to verify that the
17198 program will work on other systems which always treat uninitialized
17199 variable declarations this way.
17200
17201 @item -fno-ident
17202 @opindex fno-ident
17203 Ignore the @samp{#ident} directive.
17204
17205 @item -finhibit-size-directive
17206 @opindex finhibit-size-directive
17207 Don't output a @code{.size} assembler directive, or anything else that
17208 would cause trouble if the function is split in the middle, and the
17209 two halves are placed at locations far apart in memory.  This option is
17210 used when compiling @file{crtstuff.c}; you should not need to use it
17211 for anything else.
17212
17213 @item -fverbose-asm
17214 @opindex fverbose-asm
17215 Put extra commentary information in the generated assembly code to
17216 make it more readable.  This option is generally only of use to those
17217 who actually need to read the generated assembly code (perhaps while
17218 debugging the compiler itself).
17219
17220 @option{-fno-verbose-asm}, the default, causes the
17221 extra information to be omitted and is useful when comparing two assembler
17222 files.
17223
17224 @item -frecord-gcc-switches
17225 @opindex frecord-gcc-switches
17226 This switch causes the command line that was used to invoke the
17227 compiler to be recorded into the object file that is being created.
17228 This switch is only implemented on some targets and the exact format
17229 of the recording is target and binary file format dependent, but it
17230 usually takes the form of a section containing ASCII text.  This
17231 switch is related to the @option{-fverbose-asm} switch, but that
17232 switch only records information in the assembler output file as
17233 comments, so it never reaches the object file.
17234
17235 @item -fpic
17236 @opindex fpic
17237 @cindex global offset table
17238 @cindex PIC
17239 Generate position-independent code (PIC) suitable for use in a shared
17240 library, if supported for the target machine.  Such code accesses all
17241 constant addresses through a global offset table (GOT)@.  The dynamic
17242 loader resolves the GOT entries when the program starts (the dynamic
17243 loader is not part of GCC; it is part of the operating system).  If
17244 the GOT size for the linked executable exceeds a machine-specific
17245 maximum size, you get an error message from the linker indicating that
17246 @option{-fpic} does not work; in that case, recompile with @option{-fPIC}
17247 instead.  (These maximums are 8k on the SPARC and 32k
17248 on the m68k and RS/6000.  The 386 has no such limit.)
17249
17250 Position-independent code requires special support, and therefore works
17251 only on certain machines.  For the 386, GCC supports PIC for System V
17252 but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
17253 position-independent.
17254
17255 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
17256 are defined to 1.
17257
17258 @item -fPIC
17259 @opindex fPIC
17260 If supported for the target machine, emit position-independent code,
17261 suitable for dynamic linking and avoiding any limit on the size of the
17262 global offset table.  This option makes a difference on the m68k,
17263 PowerPC and SPARC@.
17264
17265 Position-independent code requires special support, and therefore works
17266 only on certain machines.
17267
17268 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
17269 are defined to 2.
17270
17271 @item -fpie
17272 @itemx -fPIE
17273 @opindex fpie
17274 @opindex fPIE
17275 These options are similar to @option{-fpic} and @option{-fPIC}, but
17276 generated position independent code can be only linked into executables.
17277 Usually these options are used when @option{-pie} GCC option will be
17278 used during linking.
17279
17280 @option{-fpie} and @option{-fPIE} both define the macros
17281 @code{__pie__} and @code{__PIE__}.  The macros have the value 1
17282 for @option{-fpie} and 2 for @option{-fPIE}.
17283
17284 @item -fno-jump-tables
17285 @opindex fno-jump-tables
17286 Do not use jump tables for switch statements even where it would be
17287 more efficient than other code generation strategies.  This option is
17288 of use in conjunction with @option{-fpic} or @option{-fPIC} for
17289 building code which forms part of a dynamic linker and cannot
17290 reference the address of a jump table.  On some targets, jump tables
17291 do not require a GOT and this option is not needed.
17292
17293 @item -ffixed-@var{reg}
17294 @opindex ffixed
17295 Treat the register named @var{reg} as a fixed register; generated code
17296 should never refer to it (except perhaps as a stack pointer, frame
17297 pointer or in some other fixed role).
17298
17299 @var{reg} must be the name of a register.  The register names accepted
17300 are machine-specific and are defined in the @code{REGISTER_NAMES}
17301 macro in the machine description macro file.
17302
17303 This flag does not have a negative form, because it specifies a
17304 three-way choice.
17305
17306 @item -fcall-used-@var{reg}
17307 @opindex fcall-used
17308 Treat the register named @var{reg} as an allocable register that is
17309 clobbered by function calls.  It may be allocated for temporaries or
17310 variables that do not live across a call.  Functions compiled this way
17311 will not save and restore the register @var{reg}.
17312
17313 It is an error to used this flag with the frame pointer or stack pointer.
17314 Use of this flag for other registers that have fixed pervasive roles in
17315 the machine's execution model will produce disastrous results.
17316
17317 This flag does not have a negative form, because it specifies a
17318 three-way choice.
17319
17320 @item -fcall-saved-@var{reg}
17321 @opindex fcall-saved
17322 Treat the register named @var{reg} as an allocable register saved by
17323 functions.  It may be allocated even for temporaries or variables that
17324 live across a call.  Functions compiled this way will save and restore
17325 the register @var{reg} if they use it.
17326
17327 It is an error to used this flag with the frame pointer or stack pointer.
17328 Use of this flag for other registers that have fixed pervasive roles in
17329 the machine's execution model will produce disastrous results.
17330
17331 A different sort of disaster will result from the use of this flag for
17332 a register in which function values may be returned.
17333
17334 This flag does not have a negative form, because it specifies a
17335 three-way choice.
17336
17337 @item -fpack-struct[=@var{n}]
17338 @opindex fpack-struct
17339 Without a value specified, pack all structure members together without
17340 holes.  When a value is specified (which must be a small power of two), pack
17341 structure members according to this value, representing the maximum
17342 alignment (that is, objects with default alignment requirements larger than
17343 this will be output potentially unaligned at the next fitting location.
17344
17345 @strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
17346 code that is not binary compatible with code generated without that switch.
17347 Additionally, it makes the code suboptimal.
17348 Use it to conform to a non-default application binary interface.
17349
17350 @item -finstrument-functions
17351 @opindex finstrument-functions
17352 Generate instrumentation calls for entry and exit to functions.  Just
17353 after function entry and just before function exit, the following
17354 profiling functions will be called with the address of the current
17355 function and its call site.  (On some platforms,
17356 @code{__builtin_return_address} does not work beyond the current
17357 function, so the call site information may not be available to the
17358 profiling functions otherwise.)
17359
17360 @smallexample
17361 void __cyg_profile_func_enter (void *this_fn,
17362                                void *call_site);
17363 void __cyg_profile_func_exit  (void *this_fn,
17364                                void *call_site);
17365 @end smallexample
17366
17367 The first argument is the address of the start of the current function,
17368 which may be looked up exactly in the symbol table.
17369
17370 This instrumentation is also done for functions expanded inline in other
17371 functions.  The profiling calls will indicate where, conceptually, the
17372 inline function is entered and exited.  This means that addressable
17373 versions of such functions must be available.  If all your uses of a
17374 function are expanded inline, this may mean an additional expansion of
17375 code size.  If you use @samp{extern inline} in your C code, an
17376 addressable version of such functions must be provided.  (This is
17377 normally the case anyways, but if you get lucky and the optimizer always
17378 expands the functions inline, you might have gotten away without
17379 providing static copies.)
17380
17381 A function may be given the attribute @code{no_instrument_function}, in
17382 which case this instrumentation will not be done.  This can be used, for
17383 example, for the profiling functions listed above, high-priority
17384 interrupt routines, and any functions from which the profiling functions
17385 cannot safely be called (perhaps signal handlers, if the profiling
17386 routines generate output or allocate memory).
17387
17388 @item -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}
17389 @opindex finstrument-functions-exclude-file-list
17390
17391 Set the list of functions that are excluded from instrumentation (see
17392 the description of @code{-finstrument-functions}).  If the file that
17393 contains a function definition matches with one of @var{file}, then
17394 that function is not instrumented.  The match is done on substrings:
17395 if the @var{file} parameter is a substring of the file name, it is
17396 considered to be a match.
17397
17398 For example,
17399 @code{-finstrument-functions-exclude-file-list=/bits/stl,include/sys}
17400 will exclude any inline function defined in files whose pathnames
17401 contain @code{/bits/stl} or @code{include/sys}.
17402
17403 If, for some reason, you want to include letter @code{','} in one of
17404 @var{sym}, write @code{'\,'}. For example,
17405 @code{-finstrument-functions-exclude-file-list='\,\,tmp'}
17406 (note the single quote surrounding the option).
17407
17408 @item -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{}
17409 @opindex finstrument-functions-exclude-function-list
17410
17411 This is similar to @code{-finstrument-functions-exclude-file-list},
17412 but this option sets the list of function names to be excluded from
17413 instrumentation.  The function name to be matched is its user-visible
17414 name, such as @code{vector<int> blah(const vector<int> &)}, not the
17415 internal mangled name (e.g., @code{_Z4blahRSt6vectorIiSaIiEE}).  The
17416 match is done on substrings: if the @var{sym} parameter is a substring
17417 of the function name, it is considered to be a match.  For C99 and C++
17418 extended identifiers, the function name must be given in UTF-8, not
17419 using universal character names.
17420
17421 @item -fstack-check
17422 @opindex fstack-check
17423 Generate code to verify that you do not go beyond the boundary of the
17424 stack.  You should specify this flag if you are running in an
17425 environment with multiple threads, but only rarely need to specify it in
17426 a single-threaded environment since stack overflow is automatically
17427 detected on nearly all systems if there is only one stack.
17428
17429 Note that this switch does not actually cause checking to be done; the
17430 operating system or the language runtime must do that.  The switch causes
17431 generation of code to ensure that they see the stack being extended.
17432
17433 You can additionally specify a string parameter: @code{no} means no
17434 checking, @code{generic} means force the use of old-style checking,
17435 @code{specific} means use the best checking method and is equivalent
17436 to bare @option{-fstack-check}.
17437
17438 Old-style checking is a generic mechanism that requires no specific
17439 target support in the compiler but comes with the following drawbacks:
17440
17441 @enumerate
17442 @item
17443 Modified allocation strategy for large objects: they will always be
17444 allocated dynamically if their size exceeds a fixed threshold.
17445
17446 @item
17447 Fixed limit on the size of the static frame of functions: when it is
17448 topped by a particular function, stack checking is not reliable and
17449 a warning is issued by the compiler.
17450
17451 @item
17452 Inefficiency: because of both the modified allocation strategy and the
17453 generic implementation, the performances of the code are hampered.
17454 @end enumerate
17455
17456 Note that old-style stack checking is also the fallback method for
17457 @code{specific} if no target support has been added in the compiler.
17458
17459 @item -fstack-limit-register=@var{reg}
17460 @itemx -fstack-limit-symbol=@var{sym}
17461 @itemx -fno-stack-limit
17462 @opindex fstack-limit-register
17463 @opindex fstack-limit-symbol
17464 @opindex fno-stack-limit
17465 Generate code to ensure that the stack does not grow beyond a certain value,
17466 either the value of a register or the address of a symbol.  If the stack
17467 would grow beyond the value, a signal is raised.  For most targets,
17468 the signal is raised before the stack overruns the boundary, so
17469 it is possible to catch the signal without taking special precautions.
17470
17471 For instance, if the stack starts at absolute address @samp{0x80000000}
17472 and grows downwards, you can use the flags
17473 @option{-fstack-limit-symbol=__stack_limit} and
17474 @option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
17475 of 128KB@.  Note that this may only work with the GNU linker.
17476
17477 @item -fleading-underscore
17478 @opindex fleading-underscore
17479 This option and its counterpart, @option{-fno-leading-underscore}, forcibly
17480 change the way C symbols are represented in the object file.  One use
17481 is to help link with legacy assembly code.
17482
17483 @strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
17484 generate code that is not binary compatible with code generated without that
17485 switch.  Use it to conform to a non-default application binary interface.
17486 Not all targets provide complete support for this switch.
17487
17488 @item -ftls-model=@var{model}
17489 @opindex ftls-model
17490 Alter the thread-local storage model to be used (@pxref{Thread-Local}).
17491 The @var{model} argument should be one of @code{global-dynamic},
17492 @code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
17493
17494 The default without @option{-fpic} is @code{initial-exec}; with
17495 @option{-fpic} the default is @code{global-dynamic}.
17496
17497 @item -fvisibility=@var{default|internal|hidden|protected}
17498 @opindex fvisibility
17499 Set the default ELF image symbol visibility to the specified option---all
17500 symbols will be marked with this unless overridden within the code.
17501 Using this feature can very substantially improve linking and
17502 load times of shared object libraries, produce more optimized
17503 code, provide near-perfect API export and prevent symbol clashes.
17504 It is @strong{strongly} recommended that you use this in any shared objects
17505 you distribute.
17506
17507 Despite the nomenclature, @code{default} always means public ie;
17508 available to be linked against from outside the shared object.
17509 @code{protected} and @code{internal} are pretty useless in real-world
17510 usage so the only other commonly used option will be @code{hidden}.
17511 The default if @option{-fvisibility} isn't specified is
17512 @code{default}, i.e., make every
17513 symbol public---this causes the same behavior as previous versions of
17514 GCC@.
17515
17516 A good explanation of the benefits offered by ensuring ELF
17517 symbols have the correct visibility is given by ``How To Write
17518 Shared Libraries'' by Ulrich Drepper (which can be found at
17519 @w{@uref{http://people.redhat.com/~drepper/}})---however a superior
17520 solution made possible by this option to marking things hidden when
17521 the default is public is to make the default hidden and mark things
17522 public.  This is the norm with DLL's on Windows and with @option{-fvisibility=hidden}
17523 and @code{__attribute__ ((visibility("default")))} instead of
17524 @code{__declspec(dllexport)} you get almost identical semantics with
17525 identical syntax.  This is a great boon to those working with
17526 cross-platform projects.
17527
17528 For those adding visibility support to existing code, you may find
17529 @samp{#pragma GCC visibility} of use.  This works by you enclosing
17530 the declarations you wish to set visibility for with (for example)
17531 @samp{#pragma GCC visibility push(hidden)} and
17532 @samp{#pragma GCC visibility pop}.
17533 Bear in mind that symbol visibility should be viewed @strong{as
17534 part of the API interface contract} and thus all new code should
17535 always specify visibility when it is not the default ie; declarations
17536 only for use within the local DSO should @strong{always} be marked explicitly
17537 as hidden as so to avoid PLT indirection overheads---making this
17538 abundantly clear also aids readability and self-documentation of the code.
17539 Note that due to ISO C++ specification requirements, operator new and
17540 operator delete must always be of default visibility.
17541
17542 Be aware that headers from outside your project, in particular system
17543 headers and headers from any other library you use, may not be
17544 expecting to be compiled with visibility other than the default.  You
17545 may need to explicitly say @samp{#pragma GCC visibility push(default)}
17546 before including any such headers.
17547
17548 @samp{extern} declarations are not affected by @samp{-fvisibility}, so
17549 a lot of code can be recompiled with @samp{-fvisibility=hidden} with
17550 no modifications.  However, this means that calls to @samp{extern}
17551 functions with no explicit visibility will use the PLT, so it is more
17552 effective to use @samp{__attribute ((visibility))} and/or
17553 @samp{#pragma GCC visibility} to tell the compiler which @samp{extern}
17554 declarations should be treated as hidden.
17555
17556 Note that @samp{-fvisibility} does affect C++ vague linkage
17557 entities. This means that, for instance, an exception class that will
17558 be thrown between DSOs must be explicitly marked with default
17559 visibility so that the @samp{type_info} nodes will be unified between
17560 the DSOs.
17561
17562 An overview of these techniques, their benefits and how to use them
17563 is at @w{@uref{http://gcc.gnu.org/wiki/Visibility}}.
17564
17565 @end table
17566
17567 @c man end
17568
17569 @node Environment Variables
17570 @section Environment Variables Affecting GCC
17571 @cindex environment variables
17572
17573 @c man begin ENVIRONMENT
17574 This section describes several environment variables that affect how GCC
17575 operates.  Some of them work by specifying directories or prefixes to use
17576 when searching for various kinds of files.  Some are used to specify other
17577 aspects of the compilation environment.
17578
17579 Note that you can also specify places to search using options such as
17580 @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
17581 take precedence over places specified using environment variables, which
17582 in turn take precedence over those specified by the configuration of GCC@.
17583 @xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
17584 GNU Compiler Collection (GCC) Internals}.
17585
17586 @table @env
17587 @item LANG
17588 @itemx LC_CTYPE
17589 @c @itemx LC_COLLATE
17590 @itemx LC_MESSAGES
17591 @c @itemx LC_MONETARY
17592 @c @itemx LC_NUMERIC
17593 @c @itemx LC_TIME
17594 @itemx LC_ALL
17595 @findex LANG
17596 @findex LC_CTYPE
17597 @c @findex LC_COLLATE
17598 @findex LC_MESSAGES
17599 @c @findex LC_MONETARY
17600 @c @findex LC_NUMERIC
17601 @c @findex LC_TIME
17602 @findex LC_ALL
17603 @cindex locale
17604 These environment variables control the way that GCC uses
17605 localization information that allow GCC to work with different
17606 national conventions.  GCC inspects the locale categories
17607 @env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
17608 so.  These locale categories can be set to any value supported by your
17609 installation.  A typical value is @samp{en_GB.UTF-8} for English in the United
17610 Kingdom encoded in UTF-8.
17611
17612 The @env{LC_CTYPE} environment variable specifies character
17613 classification.  GCC uses it to determine the character boundaries in
17614 a string; this is needed for some multibyte encodings that contain quote
17615 and escape characters that would otherwise be interpreted as a string
17616 end or escape.
17617
17618 The @env{LC_MESSAGES} environment variable specifies the language to
17619 use in diagnostic messages.
17620
17621 If the @env{LC_ALL} environment variable is set, it overrides the value
17622 of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
17623 and @env{LC_MESSAGES} default to the value of the @env{LANG}
17624 environment variable.  If none of these variables are set, GCC
17625 defaults to traditional C English behavior.
17626
17627 @item TMPDIR
17628 @findex TMPDIR
17629 If @env{TMPDIR} is set, it specifies the directory to use for temporary
17630 files.  GCC uses temporary files to hold the output of one stage of
17631 compilation which is to be used as input to the next stage: for example,
17632 the output of the preprocessor, which is the input to the compiler
17633 proper.
17634
17635 @item GCC_EXEC_PREFIX
17636 @findex GCC_EXEC_PREFIX
17637 If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
17638 names of the subprograms executed by the compiler.  No slash is added
17639 when this prefix is combined with the name of a subprogram, but you can
17640 specify a prefix that ends with a slash if you wish.
17641
17642 If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out
17643 an appropriate prefix to use based on the pathname it was invoked with.
17644
17645 If GCC cannot find the subprogram using the specified prefix, it
17646 tries looking in the usual places for the subprogram.
17647
17648 The default value of @env{GCC_EXEC_PREFIX} is
17649 @file{@var{prefix}/lib/gcc/} where @var{prefix} is the prefix to
17650 the installed compiler. In many cases @var{prefix} is the value
17651 of @code{prefix} when you ran the @file{configure} script.
17652
17653 Other prefixes specified with @option{-B} take precedence over this prefix.
17654
17655 This prefix is also used for finding files such as @file{crt0.o} that are
17656 used for linking.
17657
17658 In addition, the prefix is used in an unusual way in finding the
17659 directories to search for header files.  For each of the standard
17660 directories whose name normally begins with @samp{/usr/local/lib/gcc}
17661 (more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
17662 replacing that beginning with the specified prefix to produce an
17663 alternate directory name.  Thus, with @option{-Bfoo/}, GCC will search
17664 @file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
17665 These alternate directories are searched first; the standard directories
17666 come next. If a standard directory begins with the configured
17667 @var{prefix} then the value of @var{prefix} is replaced by
17668 @env{GCC_EXEC_PREFIX} when looking for header files.
17669
17670 @item COMPILER_PATH
17671 @findex COMPILER_PATH
17672 The value of @env{COMPILER_PATH} is a colon-separated list of
17673 directories, much like @env{PATH}.  GCC tries the directories thus
17674 specified when searching for subprograms, if it can't find the
17675 subprograms using @env{GCC_EXEC_PREFIX}.
17676
17677 @item LIBRARY_PATH
17678 @findex LIBRARY_PATH
17679 The value of @env{LIBRARY_PATH} is a colon-separated list of
17680 directories, much like @env{PATH}.  When configured as a native compiler,
17681 GCC tries the directories thus specified when searching for special
17682 linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
17683 using GCC also uses these directories when searching for ordinary
17684 libraries for the @option{-l} option (but directories specified with
17685 @option{-L} come first).
17686
17687 @item LANG
17688 @findex LANG
17689 @cindex locale definition
17690 This variable is used to pass locale information to the compiler.  One way in
17691 which this information is used is to determine the character set to be used
17692 when character literals, string literals and comments are parsed in C and C++.
17693 When the compiler is configured to allow multibyte characters,
17694 the following values for @env{LANG} are recognized:
17695
17696 @table @samp
17697 @item C-JIS
17698 Recognize JIS characters.
17699 @item C-SJIS
17700 Recognize SJIS characters.
17701 @item C-EUCJP
17702 Recognize EUCJP characters.
17703 @end table
17704
17705 If @env{LANG} is not defined, or if it has some other value, then the
17706 compiler will use mblen and mbtowc as defined by the default locale to
17707 recognize and translate multibyte characters.
17708 @end table
17709
17710 @noindent
17711 Some additional environments variables affect the behavior of the
17712 preprocessor.
17713
17714 @include cppenv.texi
17715
17716 @c man end
17717
17718 @node Precompiled Headers
17719 @section Using Precompiled Headers
17720 @cindex precompiled headers
17721 @cindex speed of compilation
17722
17723 Often large projects have many header files that are included in every
17724 source file.  The time the compiler takes to process these header files
17725 over and over again can account for nearly all of the time required to
17726 build the project.  To make builds faster, GCC allows users to
17727 `precompile' a header file; then, if builds can use the precompiled
17728 header file they will be much faster.
17729
17730 To create a precompiled header file, simply compile it as you would any
17731 other file, if necessary using the @option{-x} option to make the driver
17732 treat it as a C or C++ header file.  You will probably want to use a
17733 tool like @command{make} to keep the precompiled header up-to-date when
17734 the headers it contains change.
17735
17736 A precompiled header file will be searched for when @code{#include} is
17737 seen in the compilation.  As it searches for the included file
17738 (@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
17739 compiler looks for a precompiled header in each directory just before it
17740 looks for the include file in that directory.  The name searched for is
17741 the name specified in the @code{#include} with @samp{.gch} appended.  If
17742 the precompiled header file can't be used, it is ignored.
17743
17744 For instance, if you have @code{#include "all.h"}, and you have
17745 @file{all.h.gch} in the same directory as @file{all.h}, then the
17746 precompiled header file will be used if possible, and the original
17747 header will be used otherwise.
17748
17749 Alternatively, you might decide to put the precompiled header file in a
17750 directory and use @option{-I} to ensure that directory is searched
17751 before (or instead of) the directory containing the original header.
17752 Then, if you want to check that the precompiled header file is always
17753 used, you can put a file of the same name as the original header in this
17754 directory containing an @code{#error} command.
17755
17756 This also works with @option{-include}.  So yet another way to use
17757 precompiled headers, good for projects not designed with precompiled
17758 header files in mind, is to simply take most of the header files used by
17759 a project, include them from another header file, precompile that header
17760 file, and @option{-include} the precompiled header.  If the header files
17761 have guards against multiple inclusion, they will be skipped because
17762 they've already been included (in the precompiled header).
17763
17764 If you need to precompile the same header file for different
17765 languages, targets, or compiler options, you can instead make a
17766 @emph{directory} named like @file{all.h.gch}, and put each precompiled
17767 header in the directory, perhaps using @option{-o}.  It doesn't matter
17768 what you call the files in the directory, every precompiled header in
17769 the directory will be considered.  The first precompiled header
17770 encountered in the directory that is valid for this compilation will
17771 be used; they're searched in no particular order.
17772
17773 There are many other possibilities, limited only by your imagination,
17774 good sense, and the constraints of your build system.
17775
17776 A precompiled header file can be used only when these conditions apply:
17777
17778 @itemize
17779 @item
17780 Only one precompiled header can be used in a particular compilation.
17781
17782 @item
17783 A precompiled header can't be used once the first C token is seen.  You
17784 can have preprocessor directives before a precompiled header; you can
17785 even include a precompiled header from inside another header, so long as
17786 there are no C tokens before the @code{#include}.
17787
17788 @item
17789 The precompiled header file must be produced for the same language as
17790 the current compilation.  You can't use a C precompiled header for a C++
17791 compilation.
17792
17793 @item
17794 The precompiled header file must have been produced by the same compiler
17795 binary as the current compilation is using.
17796
17797 @item
17798 Any macros defined before the precompiled header is included must
17799 either be defined in the same way as when the precompiled header was
17800 generated, or must not affect the precompiled header, which usually
17801 means that they don't appear in the precompiled header at all.
17802
17803 The @option{-D} option is one way to define a macro before a
17804 precompiled header is included; using a @code{#define} can also do it.
17805 There are also some options that define macros implicitly, like
17806 @option{-O} and @option{-Wdeprecated}; the same rule applies to macros
17807 defined this way.
17808
17809 @item If debugging information is output when using the precompiled
17810 header, using @option{-g} or similar, the same kind of debugging information
17811 must have been output when building the precompiled header.  However,
17812 a precompiled header built using @option{-g} can be used in a compilation
17813 when no debugging information is being output.
17814
17815 @item The same @option{-m} options must generally be used when building
17816 and using the precompiled header.  @xref{Submodel Options},
17817 for any cases where this rule is relaxed.
17818
17819 @item Each of the following options must be the same when building and using
17820 the precompiled header:
17821
17822 @gccoptlist{-fexceptions}
17823
17824 @item
17825 Some other command-line options starting with @option{-f},
17826 @option{-p}, or @option{-O} must be defined in the same way as when
17827 the precompiled header was generated.  At present, it's not clear
17828 which options are safe to change and which are not; the safest choice
17829 is to use exactly the same options when generating and using the
17830 precompiled header.  The following are known to be safe:
17831
17832 @gccoptlist{-fmessage-length=  -fpreprocessed  -fsched-interblock @gol
17833 -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous @gol
17834 -fsched-verbose=<number>  -fschedule-insns  -fvisibility= @gol
17835 -pedantic-errors}
17836
17837 @end itemize
17838
17839 For all of these except the last, the compiler will automatically
17840 ignore the precompiled header if the conditions aren't met.  If you
17841 find an option combination that doesn't work and doesn't cause the
17842 precompiled header to be ignored, please consider filing a bug report,
17843 see @ref{Bugs}.
17844
17845 If you do use differing options when generating and using the
17846 precompiled header, the actual behavior will be a mixture of the
17847 behavior for the options.  For instance, if you use @option{-g} to
17848 generate the precompiled header but not when using it, you may or may
17849 not get debugging information for routines in the precompiled header.